Import Cobalt 20.master.0.220639
diff --git a/src/base/logging.cc b/src/base/logging.cc
index 466868e..718d52a 100644
--- a/src/base/logging.cc
+++ b/src/base/logging.cc
@@ -558,6 +558,30 @@
 #endif
 }
 
+#if defined(OFFICIAL_BUILD)
+int GetMinLogLevel() {
+  return LOG_NUM_SEVERITIES;
+}
+
+bool ShouldCreateLogMessage(int /*severity*/) {
+  return false;
+}
+
+int GetVlogVerbosity() {
+  return LOG_INFO - GetMinLogLevel();
+}
+
+int GetVlogLevelHelper(const char* /*file*/, size_t /*N*/) {
+  return GetVlogVerbosity();
+}
+
+void SetLogItems(bool /*enable_process_id*/, bool /*enable_thread_id*/,
+                 bool /*enable_timestamp*/, bool /*enable_tickcount*/) {}
+
+void SetLogPrefix(const char* /*prefix*/) {}
+
+#else  // defined(OFFICIAL_BUILD)
+
 int GetMinLogLevel() {
   return g_min_log_level;
 }
@@ -600,6 +624,7 @@
          base::ContainsOnlyChars(prefix, "abcdefghijklmnopqrstuvwxyz"));
   g_log_prefix = prefix;
 }
+#endif  // defined(OFFICIAL_BUILD)
 
 void SetShowErrorDialogs(bool enable_dialogs) {
   show_error_dialogs = enable_dialogs;
diff --git a/src/base/logging.h b/src/base/logging.h
index 1c0d669..da6384d 100644
--- a/src/base/logging.h
+++ b/src/base/logging.h
@@ -411,8 +411,13 @@
 // As special cases, we can assume that LOG_IS_ON(FATAL) always holds. Also,
 // LOG_IS_ON(DFATAL) always holds in debug mode. In particular, CHECK()s will
 // always fire if they fail.
+
+#if defined(OFFICIAL_BUILD)
+#define LOG_IS_ON(severity) false
+#else  // defined(OFFICIAL_BUILD)
 #define LOG_IS_ON(severity) \
   (::logging::ShouldCreateLogMessage(::logging::LOG_##severity))
+#endif  // defined(OFFICIAL_BUILD)
 
 // We can't do any caching tricks with VLOG_IS_ON() like the
 // google-glog version since it requires GCC extensions.  This means
diff --git a/src/base/message_loop/message_pump_io_starboard.cc b/src/base/message_loop/message_pump_io_starboard.cc
index cfe3955..767dd1b 100644
--- a/src/base/message_loop/message_pump_io_starboard.cc
+++ b/src/base/message_loop/message_pump_io_starboard.cc
@@ -145,10 +145,10 @@
   }
 
   // Set current interest mask and waiter for this event.
-  bool result =
-      SbSocketWaiterAdd(waiter_, socket, controller, OnSocketWaiterNotification,
-                        interests, persistent);
-  DCHECK(result);
+  if (!SbSocketWaiterAdd(waiter_, socket, controller,
+                         OnSocketWaiterNotification, interests, persistent)) {
+    return false;
+  }
 
   controller->Init(socket, persistent);
   controller->set_watcher(delegate);
diff --git a/src/base/test/main_hook.cc b/src/base/test/main_hook.cc
index b5cafca..0478d99 100644
--- a/src/base/test/main_hook.cc
+++ b/src/base/test/main_hook.cc
@@ -9,10 +9,6 @@
 #include "base/command_line.h"
 #endif
 
-#if defined(COBALT_BUILD_TYPE_GOLD)
-#error You cannot build unit tests in gold builds.
-#endif
-
 #if defined(__LB_SHELL__) || defined(COBALT)
 base::AtExitManager* platform_at_exit_manager_;
 
diff --git a/src/cobalt/CHANGELOG.md b/src/cobalt/CHANGELOG.md
index 45f312d..6bd4d82 100644
--- a/src/cobalt/CHANGELOG.md
+++ b/src/cobalt/CHANGELOG.md
@@ -49,7 +49,8 @@
  - **Added support for Device Authentication URL signing.**
 
    Cobalt will now add URL parameters signed with the device's secret key and
-   certification scope to the initial URL.
+   certification scope to the initial URL.  For more information, see
+   [doc/device_authentication.md](doc/device_authentication.md).
 
  - **Updated Chromium net and base libraries from m25 to m70.**
 
diff --git a/src/cobalt/accessibility/accessibility.gyp b/src/cobalt/accessibility/accessibility.gyp
deleted file mode 100644
index cb497fd..0000000
--- a/src/cobalt/accessibility/accessibility.gyp
+++ /dev/null
@@ -1,39 +0,0 @@
-# Copyright 2017 The Cobalt Authors. All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specif
-
-{
-  'targets': [
-    {
-      'target_name': 'accessibility',
-      'type': 'static_library',
-      'sources': [
-        'internal/live_region.cc',
-        'internal/live_region.h',
-        'internal/text_alternative_helper.cc',
-        'internal/text_alternative_helper.h',
-        'screen_reader.cc',
-        'screen_reader.h',
-        'starboard_tts_engine.cc',
-        'starboard_tts_engine.h',
-        'text_alternative.cc',
-        'text_alternative.h',
-        'tts_engine.h',
-        'tts_logger.h',
-      ],
-      'dependencies': [
-        '<(DEPTH)/cobalt/base/base.gyp:base',
-        '<(DEPTH)/cobalt/dom/dom.gyp:dom',
-      ],
-    },
-  ]
-}
diff --git a/src/cobalt/accessibility/accessibility_test.gyp b/src/cobalt/accessibility/accessibility_test.gyp
deleted file mode 100644
index acede3d..0000000
--- a/src/cobalt/accessibility/accessibility_test.gyp
+++ /dev/null
@@ -1,57 +0,0 @@
-# Copyright 2017 The Cobalt Authors. All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specif
-
-{
-  'targets': [
-    {
-      'target_name': 'accessibility_test',
-      'type': '<(gtest_target_type)',
-      'sources': [
-        'screen_reader_tests.cc',
-        'internal/live_region_test.cc',
-        'internal/text_alternative_helper_test.cc',
-      ],
-      'dependencies': [
-        '<(DEPTH)/cobalt/accessibility/accessibility.gyp:accessibility',
-        '<(DEPTH)/cobalt/base/base.gyp:base',
-        '<(DEPTH)/cobalt/browser/browser.gyp:browser',
-        '<(DEPTH)/cobalt/test/test.gyp:run_all_unittests',
-        '<(DEPTH)/testing/gmock.gyp:gmock',
-        '<(DEPTH)/testing/gtest.gyp:gtest',
-        'accessibility_test_data',
-      ],
-    },
-    {
-      'target_name': 'accessibility_test_data',
-      'type': 'none',
-      'variables': {
-        'content_test_input_files': [
-          '<(DEPTH)/cobalt/accessibility/testdata/',
-        ],
-        'content_test_output_subdir': 'cobalt/accessibility/testdata/',
-      },
-      'includes': ['<(DEPTH)/starboard/build/copy_test_data.gypi'],
-    },
-    {
-      'target_name': 'accessibility_test_deploy',
-      'type': 'none',
-      'dependencies': [
-        'accessibility_test',
-      ],
-      'variables': {
-        'executable_name': 'accessibility_test',
-      },
-      'includes': [ '<(DEPTH)/starboard/build/deploy.gypi' ],
-    },
-  ]
-}
diff --git a/src/cobalt/accessibility/internal/live_region.cc b/src/cobalt/accessibility/internal/live_region.cc
deleted file mode 100644
index 40407be..0000000
--- a/src/cobalt/accessibility/internal/live_region.cc
+++ /dev/null
@@ -1,130 +0,0 @@
-// Copyright 2017 The Cobalt Authors. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "cobalt/accessibility/internal/live_region.h"
-
-#include <bitset>
-#include <memory>
-#include <vector>
-
-#include "base/basictypes.h"
-#include "base/memory/ptr_util.h"
-#include "base/strings/string_split.h"
-#include "cobalt/base/tokens.h"
-#include "cobalt/dom/element.h"
-
-namespace cobalt {
-namespace accessibility {
-namespace internal {
-namespace {
-typedef std::bitset<8> RelevantMutationsBitset;
-
-// Default value for the aria-relevant property per the spec.
-// https://www.w3.org/TR/wai-aria/states_and_properties#aria-relevant
-const char kDefaultAriaRelevantValue[] = "additions text";
-
-bool HasValidLiveRegionProperty(const scoped_refptr<dom::Element>& element) {
-  std::string aria_live_attribute =
-      element->GetAttribute(base::Tokens::aria_live().c_str()).value_or("");
-
-  return aria_live_attribute == base::Tokens::assertive() ||
-         aria_live_attribute == base::Tokens::polite();
-}
-
-RelevantMutationsBitset GetRelevantMutations(
-    const scoped_refptr<dom::Element>& element) {
-  RelevantMutationsBitset bitset;
-
-  std::string aria_relevant_attribute =
-      element->GetAttribute(base::Tokens::aria_relevant().c_str())
-          .value_or(kDefaultAriaRelevantValue);
-  std::vector<std::string> tokens =
-      base::SplitString(aria_relevant_attribute, base::kWhitespaceASCII,
-                        base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
-  for (size_t i = 0; i < tokens.size(); ++i) {
-    if (tokens[i] == base::Tokens::additions()) {
-      bitset.set(LiveRegion::kMutationTypeAddition);
-    } else if (tokens[i] == base::Tokens::removals()) {
-      bitset.set(LiveRegion::kMutationTypeRemoval);
-    } else if (tokens[i] == base::Tokens::text()) {
-      bitset.set(LiveRegion::kMutationTypeText);
-    } else if (tokens[i] == base::Tokens::all()) {
-      bitset.set();
-    } else {
-      DLOG(WARNING) << "Unexpected value for aria-relevant attribute: "
-                    << tokens[i];
-    }
-  }
-  return bitset;
-}
-}  // namespace
-
-// static
-std::unique_ptr<LiveRegion> LiveRegion::GetLiveRegionForNode(
-    const scoped_refptr<dom::Node>& node) {
-  if (!node) {
-    return std::unique_ptr<LiveRegion>(nullptr);
-  }
-  scoped_refptr<dom::Element> element = node->AsElement();
-  if (element && HasValidLiveRegionProperty(element)) {
-    return base::WrapUnique(new LiveRegion(element));
-  }
-  return GetLiveRegionForNode(node->parent_node());
-}
-
-bool LiveRegion::IsAssertive() const {
-  base::Optional<std::string> aria_live_attribute =
-      root_->GetAttribute(base::Tokens::aria_live().c_str());
-  if (!aria_live_attribute) {
-    NOTREACHED();
-    return false;
-  }
-  return *aria_live_attribute == base::Tokens::assertive();
-}
-
-bool LiveRegion::IsMutationRelevant(MutationType mutation_type) const {
-  RelevantMutationsBitset bitset = GetRelevantMutations(root_);
-  return bitset.test(mutation_type);
-}
-
-bool LiveRegion::IsAtomic(const scoped_refptr<dom::Node>& node) const {
-  // Stop searching if we go past the live region's root node. The default is
-  // non-atomic.
-  if (!node || node == root_->parent_node()) {
-    return false;
-  }
-  if (node->IsElement()) {
-    scoped_refptr<dom::Element> element = node->AsElement();
-    // Search ancestors of the changed element to determine if this change is
-    // atomic or not, per the algorithm described in the spec.
-    // https://www.w3.org/TR/wai-aria/states_and_properties#aria-atomic
-    base::Optional<std::string> aria_atomic_attribute =
-        element->GetAttribute(base::Tokens::aria_atomic().c_str());
-    if (aria_atomic_attribute) {
-      if (*aria_atomic_attribute == base::Tokens::true_token()) {
-        return true;
-      } else if (*aria_atomic_attribute == base::Tokens::false_token()) {
-        return false;
-      } else {
-        DLOG(WARNING) << "Unexpected token for aria-atomic: "
-                      << *aria_atomic_attribute;
-      }
-    }
-  }
-  return IsAtomic(node->parent_node());
-}
-
-}  // namespace internal
-}  // namespace accessibility
-}  // namespace cobalt
diff --git a/src/cobalt/accessibility/internal/live_region.h b/src/cobalt/accessibility/internal/live_region.h
deleted file mode 100644
index 7a995ac..0000000
--- a/src/cobalt/accessibility/internal/live_region.h
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright 2017 The Cobalt Authors. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#ifndef COBALT_ACCESSIBILITY_INTERNAL_LIVE_REGION_H_
-#define COBALT_ACCESSIBILITY_INTERNAL_LIVE_REGION_H_
-
-#include <memory>
-#include <string>
-
-#include "cobalt/dom/node.h"
-
-namespace cobalt {
-namespace accessibility {
-namespace internal {
-// Collection of functions to support the implementation of wai-aria Live
-// Regions:
-// https://www.w3.org/TR/2010/WD-wai-aria-20100916/terms#def_liveregion
-class LiveRegion {
- public:
-  // Types of mutation to the DOM subtree that might cause a live region to be
-  // updated, corresponding to the possible values of aria-relevant as
-  // described in:
-  // https://www.w3.org/TR/2011/CR-wai-aria-20110118/states_and_properties#aria-relevant
-  enum MutationType {
-    kMutationTypeAddition = 1,  // corresponds to "additions"
-    kMutationTypeRemoval,       // corresponds to "removals"
-    kMutationTypeText,          // corresponds to "text"
-  };
-
-  // Returns a LiveRegion instance describing the live region that this element
-  // is a member of, or NULL if this element is not part of a live region.
-  //
-  // Searches the element's ancestors looking for the first element with a
-  // valid aria-live attribute.
-  static std::unique_ptr<LiveRegion> GetLiveRegionForNode(
-      const scoped_refptr<dom::Node>& node);
-
-  // Returns true if the value of aria-live is "assertive".
-  // https://www.w3.org/TR/2011/CR-wai-aria-20110118/states_and_properties#aria-live
-  bool IsAssertive() const;
-
-  // Returns true if this live region should be updated in response to the
-  // specified type of change, based on the value of this element's
-  // aria-relevant property.
-  // https://www.w3.org/TR/2011/CR-wai-aria-20110118/states_and_properties#aria-relevant
-  bool IsMutationRelevant(MutationType mutation_type) const;
-
-  // Returns true if changes to this node should result in an atomic update
-  // to its live region, according to the value of the aria-atomic property set
-  // on this node or its ancestors, up to and including the live region root.
-  //
-  // https://www.w3.org/TR/2011/CR-wai-aria-20110118/states_and_properties#aria-atomic
-  bool IsAtomic(const scoped_refptr<dom::Node>& node) const;
-
-  // Returns the root of the live region (i.e.) the element that has the
-  // aria-live property set on it.
-  const scoped_refptr<dom::Element>& root() { return root_; }
-
- private:
-  explicit LiveRegion(const scoped_refptr<dom::Element>& root) : root_(root) {}
-
-  // The root element of the live region. That is, the element with a valid
-  // aria-live attribute.
-  scoped_refptr<dom::Element> root_;
-};
-
-}  // namespace internal
-}  // namespace accessibility
-}  // namespace cobalt
-
-#endif  // COBALT_ACCESSIBILITY_INTERNAL_LIVE_REGION_H_
diff --git a/src/cobalt/accessibility/internal/live_region_test.cc b/src/cobalt/accessibility/internal/live_region_test.cc
deleted file mode 100644
index 35e8b7f..0000000
--- a/src/cobalt/accessibility/internal/live_region_test.cc
+++ /dev/null
@@ -1,235 +0,0 @@
-// Copyright 2017 The Cobalt Authors. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include <memory>
-
-#include "base/memory/ref_counted.h"
-#include "cobalt/accessibility/internal/live_region.h"
-#include "cobalt/dom/element.h"
-#include "cobalt/test/empty_document.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace cobalt {
-namespace accessibility {
-namespace internal {
-class LiveRegionTest : public ::testing::Test {
- protected:
-  dom::Document* document() { return empty_document_.document(); }
-
-  scoped_refptr<dom::Element> CreateLiveRegion(const char* type) {
-    scoped_refptr<dom::Element> live_region = document()->CreateElement("div");
-    live_region->SetAttribute(base::Tokens::aria_live().c_str(), type);
-    return live_region;
-  }
-
- private:
-  // For posting tasks by any triggered code.
-  base::MessageLoop message_loop_;
-  test::EmptyDocument empty_document_;
-};
-
-TEST_F(LiveRegionTest, GetLiveRegionRoot) {
-  std::unique_ptr<LiveRegion> live_region;
-
-  scoped_refptr<dom::Element> live_region_element =
-      CreateLiveRegion(base::Tokens::polite().c_str());
-  ASSERT_TRUE(live_region_element);
-
-  // GetLiveRegionForNode with the live region root.
-  live_region = LiveRegion::GetLiveRegionForNode(live_region_element);
-  ASSERT_TRUE(live_region);
-  EXPECT_EQ(live_region->root(), live_region_element);
-
-  // GetLiveRegionForNode with a descendent node of a live region.
-  scoped_refptr<dom::Element> child = document()->CreateElement("div");
-  live_region_element->AppendChild(child);
-  live_region = LiveRegion::GetLiveRegionForNode(child);
-  ASSERT_TRUE(live_region);
-  EXPECT_EQ(live_region->root(), live_region_element);
-
-  // Element that is not in a live region.
-  scoped_refptr<dom::Element> not_live = document()->CreateElement("div");
-  live_region = LiveRegion::GetLiveRegionForNode(not_live);
-  EXPECT_FALSE(live_region);
-}
-
-TEST_F(LiveRegionTest, NestedLiveRegion) {
-  scoped_refptr<dom::Element> live_region_element =
-      CreateLiveRegion(base::Tokens::polite().c_str());
-  ASSERT_TRUE(live_region_element);
-
-  scoped_refptr<dom::Element> nested_region_element =
-      CreateLiveRegion(base::Tokens::polite().c_str());
-  ASSERT_TRUE(nested_region_element);
-  live_region_element->AppendChild(nested_region_element);
-
-  // The closest ancestor live region is this element's live region.
-  scoped_refptr<dom::Element> child = document()->CreateElement("div");
-  nested_region_element->AppendChild(child);
-  std::unique_ptr<LiveRegion> live_region =
-      LiveRegion::GetLiveRegionForNode(child);
-  ASSERT_TRUE(live_region);
-  EXPECT_EQ(live_region->root(), nested_region_element);
-
-  // Ignore live regions that are not active.
-  nested_region_element->SetAttribute(base::Tokens::aria_live().c_str(),
-                                      base::Tokens::off().c_str());
-  live_region = LiveRegion::GetLiveRegionForNode(child);
-  ASSERT_TRUE(live_region);
-  EXPECT_EQ(live_region->root(), live_region_element);
-}
-
-TEST_F(LiveRegionTest, LiveRegionType) {
-  std::unique_ptr<LiveRegion> live_region;
-
-  // aria-live="polite"
-  scoped_refptr<dom::Element> polite_element =
-      CreateLiveRegion(base::Tokens::polite().c_str());
-  ASSERT_TRUE(polite_element);
-  live_region = LiveRegion::GetLiveRegionForNode(polite_element);
-  ASSERT_TRUE(live_region);
-  EXPECT_FALSE(live_region->IsAssertive());
-
-  // aria-live="assertive"
-  scoped_refptr<dom::Element> assertive_element =
-      CreateLiveRegion(base::Tokens::assertive().c_str());
-  ASSERT_TRUE(assertive_element);
-  live_region = LiveRegion::GetLiveRegionForNode(assertive_element);
-  ASSERT_TRUE(live_region);
-  EXPECT_TRUE(live_region->IsAssertive());
-
-  // aria-live="off"
-  scoped_refptr<dom::Element> off_element =
-      CreateLiveRegion(base::Tokens::off().c_str());
-  ASSERT_TRUE(off_element);
-  live_region = LiveRegion::GetLiveRegionForNode(off_element);
-  EXPECT_FALSE(live_region);
-
-  // aria-live=<invalid token>
-  scoped_refptr<dom::Element> invalid_element = CreateLiveRegion("banana");
-  ASSERT_TRUE(invalid_element);
-  live_region = LiveRegion::GetLiveRegionForNode(invalid_element);
-  EXPECT_FALSE(live_region);
-}
-
-TEST_F(LiveRegionTest, IsMutationRelevant) {
-  scoped_refptr<dom::Element> live_region_element =
-      CreateLiveRegion(base::Tokens::polite().c_str());
-  ASSERT_TRUE(live_region_element);
-
-  // GetLiveRegionForNode with the live region root.
-  std::unique_ptr<LiveRegion> live_region =
-      LiveRegion::GetLiveRegionForNode(live_region_element);
-  ASSERT_TRUE(live_region);
-  // Default is that additions and text are relevant.
-  EXPECT_TRUE(
-      live_region->IsMutationRelevant(LiveRegion::kMutationTypeAddition));
-  EXPECT_TRUE(live_region->IsMutationRelevant(LiveRegion::kMutationTypeText));
-  EXPECT_FALSE(
-      live_region->IsMutationRelevant(LiveRegion::kMutationTypeRemoval));
-
-  // Only removals are relevant.
-  live_region_element->SetAttribute(base::Tokens::aria_relevant().c_str(),
-                                    "removals");
-  live_region = LiveRegion::GetLiveRegionForNode(live_region_element);
-  ASSERT_TRUE(live_region);
-  EXPECT_FALSE(
-      live_region->IsMutationRelevant(LiveRegion::kMutationTypeAddition));
-  EXPECT_FALSE(live_region->IsMutationRelevant(LiveRegion::kMutationTypeText));
-  EXPECT_TRUE(
-      live_region->IsMutationRelevant(LiveRegion::kMutationTypeRemoval));
-
-  // Removals and additions are relevant.
-  live_region_element->SetAttribute(base::Tokens::aria_relevant().c_str(),
-                                    "removals additions");
-  live_region = LiveRegion::GetLiveRegionForNode(live_region_element);
-  ASSERT_TRUE(live_region);
-  EXPECT_TRUE(
-      live_region->IsMutationRelevant(LiveRegion::kMutationTypeAddition));
-  EXPECT_FALSE(live_region->IsMutationRelevant(LiveRegion::kMutationTypeText));
-  EXPECT_TRUE(
-      live_region->IsMutationRelevant(LiveRegion::kMutationTypeRemoval));
-
-  // An invalid token.
-  live_region_element->SetAttribute(base::Tokens::aria_relevant().c_str(),
-                                    "text dog additions");
-  live_region = LiveRegion::GetLiveRegionForNode(live_region_element);
-  ASSERT_TRUE(live_region);
-  EXPECT_TRUE(
-      live_region->IsMutationRelevant(LiveRegion::kMutationTypeAddition));
-  EXPECT_TRUE(live_region->IsMutationRelevant(LiveRegion::kMutationTypeText));
-  EXPECT_FALSE(
-      live_region->IsMutationRelevant(LiveRegion::kMutationTypeRemoval));
-
-  // "all" token.
-  live_region_element->SetAttribute(base::Tokens::aria_relevant().c_str(),
-                                    "all");
-  live_region = LiveRegion::GetLiveRegionForNode(live_region_element);
-  ASSERT_TRUE(live_region);
-  EXPECT_TRUE(
-      live_region->IsMutationRelevant(LiveRegion::kMutationTypeAddition));
-  EXPECT_TRUE(live_region->IsMutationRelevant(LiveRegion::kMutationTypeText));
-  EXPECT_TRUE(
-      live_region->IsMutationRelevant(LiveRegion::kMutationTypeRemoval));
-}
-
-TEST_F(LiveRegionTest, IsAtomic) {
-  std::unique_ptr<LiveRegion> live_region;
-
-  scoped_refptr<dom::Element> live_region_element =
-      CreateLiveRegion(base::Tokens::polite().c_str());
-  ASSERT_TRUE(live_region_element);
-
-  // Default is non-atomic.
-  live_region = LiveRegion::GetLiveRegionForNode(live_region_element);
-  ASSERT_TRUE(live_region);
-  EXPECT_FALSE(live_region->IsAtomic(live_region_element));
-
-  // aria-atomic=true
-  live_region_element->SetAttribute(base::Tokens::aria_atomic().c_str(),
-                                    "true");
-  live_region = LiveRegion::GetLiveRegionForNode(live_region_element);
-  ASSERT_TRUE(live_region);
-  EXPECT_TRUE(live_region->IsAtomic(live_region_element));
-
-  // aria-atomic=false
-  live_region_element->SetAttribute(base::Tokens::aria_atomic().c_str(),
-                                    "false");
-  live_region = LiveRegion::GetLiveRegionForNode(live_region_element);
-  ASSERT_TRUE(live_region);
-  EXPECT_FALSE(live_region->IsAtomic(live_region_element));
-
-  // Get the value of aria-atomic from ancestor elements.
-  live_region_element->SetAttribute(base::Tokens::aria_atomic().c_str(),
-                                    "true");
-  scoped_refptr<dom::Element> child = document()->CreateElement("div");
-  live_region_element->AppendChild(child);
-  live_region = LiveRegion::GetLiveRegionForNode(live_region_element);
-  ASSERT_TRUE(live_region);
-  EXPECT_TRUE(live_region->IsAtomic(child));
-  EXPECT_TRUE(live_region->IsAtomic(live_region_element));
-
-  // Stop checking ancestors on the first aria-atomic attribute.
-  live_region_element->SetAttribute(base::Tokens::aria_atomic().c_str(),
-                                    "true");
-  child->SetAttribute(base::Tokens::aria_atomic().c_str(), "false");
-  live_region = LiveRegion::GetLiveRegionForNode(live_region_element);
-  ASSERT_TRUE(live_region);
-  EXPECT_FALSE(live_region->IsAtomic(child));
-  EXPECT_TRUE(live_region->IsAtomic(live_region_element));
-}
-}  // namespace internal
-}  // namespace accessibility
-}  // namespace cobalt
diff --git a/src/cobalt/accessibility/internal/text_alternative_helper.cc b/src/cobalt/accessibility/internal/text_alternative_helper.cc
deleted file mode 100644
index f0b543b..0000000
--- a/src/cobalt/accessibility/internal/text_alternative_helper.cc
+++ /dev/null
@@ -1,282 +0,0 @@
-// Copyright 2017 The Cobalt Authors. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "cobalt/accessibility/internal/text_alternative_helper.h"
-
-#include <utility>
-
-#include "base/strings/string_split.h"
-#include "cobalt/dom/document.h"
-#include "cobalt/dom/html_element.h"
-#include "cobalt/dom/html_image_element.h"
-#include "cobalt/dom/node_list.h"
-
-namespace cobalt {
-namespace accessibility {
-namespace internal {
-namespace {
-// Helper class that inserts a base::Token into a base::hash_set during the
-// class's lifetime.
-class ScopedIdSetMember {
- public:
-  // Adds |token| into |hash_set| for the duration of this class instance's
-  // lifetime. If |token| is an empty string, it doesn't get added to the set.
-  //
-  // TextAlternativeHelper::visited_element_ids_ is used to keep track of a set
-  // of element ids that have been visited during the current computation to
-  // ensure that we do not follow any ID reference loops. When
-  // AppendTextAlternative is called, the ID of that element is pushed into the
-  // set using this helper class, so that the ID will be popped back out of the
-  // set which allows us to re-visit that element in a non-recursive manner, if
-  // necessary.
-  ScopedIdSetMember(base::hash_set<base::Token>* hash_set,
-                    const base::Token& token)
-      : hash_set_(hash_set) {
-    // Ignore empty tokens.
-    if (SbStringGetLength(token.c_str()) > 0) {
-      DCHECK(hash_set_->find(token) == hash_set_->end());
-      iterator_pair_ = hash_set_->insert(token);
-      DCHECK(iterator_pair_.second);
-    } else {
-      // Ensure iterator_pair_ is initialized.
-      iterator_pair_ = std::make_pair(hash_set_->end(), false);
-    }
-  }
-  ~ScopedIdSetMember() {
-    if (iterator_pair_.second) {
-      hash_set_->erase(iterator_pair_.first);
-    }
-  }
-
- private:
-  base::hash_set<base::Token>* hash_set_;
-  std::pair<base::hash_set<base::Token>::iterator, bool> iterator_pair_;
-};
-
-// Look up an element whose id is |id| in the document that |element| is in.
-scoped_refptr<dom::Element> GetElementById(
-    const scoped_refptr<dom::Element>& element, const std::string& id) {
-  // TODO: If referenced elements tend to be close to the referencing element,
-  // it may be more efficient to do a breadth-first search starting from
-  // |element|.
-  dom::Document* document = element->node_document();
-  scoped_refptr<dom::Element> target_element = document->GetElementById(id);
-  DLOG_IF(WARNING, !target_element)
-      << "Could not find aria-labelledby target: " << id;
-  return target_element;
-}
-}  // namespace
-
-void TextAlternativeHelper::AppendTextAlternative(
-    const scoped_refptr<dom::Node>& node) {
-  DCHECK(node);
-  // https://www.w3.org/TR/2014/REC-wai-aria-implementation-20140320/#mapping_additional_nd_te
-  // 5.6.1.3. Text Alternative Computation
-
-  if (node->IsText()) {
-    // Rule 3D
-    // Get the contents of the text node.
-    if (node->text_content()) {
-      AppendTextIfNonEmpty(*node->text_content());
-    }
-    return;
-  }
-
-  scoped_refptr<dom::Element> element = node->AsElement();
-  if (!element) {
-    // Since this is neither a Text or Element, ignore it.
-    return;
-  }
-
-  if (visited_element_ids_.find(element->id()) != visited_element_ids_.end()) {
-    DLOG(INFO) << "Skipping element to prevent reference loop: "
-               << element->id();
-    return;
-  }
-
-  ScopedIdSetMember scoped_id_set_member(&visited_element_ids_, element->id());
-
-  // Rule 1
-  // Skip hidden elements unless the author specifies to use them via an
-  // aria-labelledby or aria-describedby being used in the current computation.
-  if (!in_labelled_by_or_described_by_ && IsAriaHidden(element)) {
-    return;
-  }
-
-  // Rule 2A (first bullet point)
-  // The aria-labelledby attribute takes precedence as the element's text
-  // alternative unless this computation is already occurring as the result of a
-  // recursive aria-labelledby declaration.
-  if (!in_labelled_by_or_described_by_) {
-    if (TryAppendFromLabelledByOrDescribedBy(element,
-                                             base::Tokens::aria_labelledby())) {
-      return;
-    }
-  }
-
-  // Rule 2A (second bullet point)
-  // If aria-labelledby is empty or undefined, the aria-label attribute, which
-  // defines an explicit text string, is used. However, if this computation is
-  // already occurring as the result of a recursive text alternative computation
-  // and the current element is an embedded control as defined in rule 2B,
-  // ignore the aria-label attribute and skip directly to rule 2B.
-  //
-  // Note: Cobalt doesn't support the embedded controls defined in rule 2B, so
-  // just get the alternative text from the label, if it exists.
-  if (TryAppendFromLabel(element)) {
-    return;
-  }
-
-  // Rule 2A (third bullet point)
-  // If aria-labelledby and aria-label are both empty or undefined, and if the
-  // element is not marked as presentational (role="presentation", check for the
-  // presence of an equivalent host language attribute or element for
-  // associating a label, and use those mechanisms to determine a text
-  // alternative. For example, in HTML, the img element's alt attribute defines
-  // a label string and the label element references the form element it labels.
-  //
-  // This implementation does not support the "role" attribute, so just get the
-  // "alt" property, if this is an element that supports it
-  if (TryAppendFromAltProperty(element)) {
-    return;
-  }
-
-  // Rule 2B
-  // Cobalt does not support the controls described in this step, so skip it.
-
-  // Rule 2C
-  // Otherwise, if the attributes checked in rules A and B didn't provide
-  // results, text is collected from descendant content if the current element's
-  // role allows "Name From: contents." The text alternatives for child nodes
-  // will be concatenated, using this same set of rules. This same rule may
-  // apply to a child, which means the computation becomes recursive and can
-  // result in text being collected in all the nodes in this subtree, no matter
-  // how deep they are. However, any given descendant subtree may instead
-  // collect their part of the text alternative from the preferred markup
-  // described in A and B above. These author-specified attributes are assumed
-  // to provide the correct text alternative for the entire subtree. All in all,
-  // the node rules are applied consistently as text alternatives are collected
-  // from descendants, and each containing element in those descendants may or
-  // may not allow their contents to be used. Each node in the subtree is
-  // consulted only once. If text has been collected from a child node, and is
-  // referenced by another IDREF in some descendant node, then that second, or
-  // subsequent, reference is not followed. This is done to avoid infinite
-  // loops.
-  //
-  // The "role" attribute is not supported, so ignore it. Recurse through
-  // children and concatenate text alternatives.
-  scoped_refptr<dom::NodeList> children = element->child_nodes();
-  for (int i = 0; i < children->length(); ++i) {
-    scoped_refptr<dom::Node> child = children->Item(i);
-    AppendTextAlternative(child);
-  }
-
-  // 5.6.1.2. Description Compution
-  // If aria-describedby is present, user agents MUST compute the accessible
-  // description by concatenating the text alternatives for nodes referenced by
-  // an aria-describedby attribute on the current node. The text alternatives
-  // for the referenced nodes are computed using a number of methods.
-  if (!in_labelled_by_or_described_by_) {
-    TryAppendFromLabelledByOrDescribedBy(element,
-                                         base::Tokens::aria_describedby());
-  }
-}
-
-std::string TextAlternativeHelper::GetTextAlternative() {
-  return base::JoinString(alternatives_, " ");
-}
-
-bool TextAlternativeHelper::IsAriaHidden(
-    const scoped_refptr<dom::Element>& element) {
-  if (!element) {
-    return false;
-  }
-  base::Optional<std::string> aria_hidden_attribute =
-      element->GetAttribute(base::Tokens::aria_hidden().c_str());
-  if (aria_hidden_attribute.value_or("") == base::Tokens::true_token()) {
-    return true;
-  }
-  return IsAriaHidden(element->parent_element());
-}
-
-bool TextAlternativeHelper::TryAppendFromLabelledByOrDescribedBy(
-    const scoped_refptr<dom::Element>& element, const base::Token& token) {
-  DCHECK(!in_labelled_by_or_described_by_);
-  base::Optional<std::string> attributes = element->GetAttribute(token.c_str());
-  // If aria-labelledby is empty or undefined, the aria-label attribute ... is
-  // used (defined below).
-  std::vector<std::string> ids =
-      base::SplitString(attributes.value_or(""), base::kWhitespaceASCII,
-                        base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
-  const size_t current_num_alternatives = alternatives_.size();
-  if (!ids.empty()) {
-    in_labelled_by_or_described_by_ = true;
-    for (int i = 0; i < ids.size(); ++i) {
-      if (visited_element_ids_.find(base::Token(ids[i])) !=
-          visited_element_ids_.end()) {
-        DLOG(WARNING) << "Skipping reference to ID: " << ids[i]
-                      << " to prevent reference loop.";
-        continue;
-      }
-      scoped_refptr<dom::Element> target_element =
-          GetElementById(element, ids[i]);
-      if (!target_element) {
-        DLOG(WARNING) << "Could not find " << token.c_str()
-                      << " target: " << ids[i];
-        continue;
-      }
-      AppendTextAlternative(target_element);
-    }
-    in_labelled_by_or_described_by_ = false;
-  }
-  // Check if any of these recursive calls to AppendTextAlternative actually
-  // ended up appending something.
-  return current_num_alternatives != alternatives_.size();
-}
-
-bool TextAlternativeHelper::TryAppendFromLabel(
-    const scoped_refptr<dom::Element>& element) {
-  base::Optional<std::string> label_attribute =
-      element->GetAttribute(base::Tokens::aria_label().c_str());
-  return AppendTextIfNonEmpty(label_attribute.value_or(""));
-}
-
-bool TextAlternativeHelper::TryAppendFromAltProperty(
-    const scoped_refptr<dom::Element>& element) {
-  // https://www.w3.org/TR/REC-html40/struct/objects.html#h-13.8
-  // The only element type that supports the "alt" attribute that Cobalt
-  // implements is the <img> element.
-  if (element->AsHTMLElement() &&
-      element->AsHTMLElement()->AsHTMLImageElement()) {
-    base::Optional<std::string> alt_attribute =
-        element->GetAttribute(base::Tokens::alt().c_str());
-    if (alt_attribute) {
-      return AppendTextIfNonEmpty(*alt_attribute);
-    }
-  }
-  return false;
-}
-
-bool TextAlternativeHelper::AppendTextIfNonEmpty(const std::string& text) {
-  std::string trimmed;
-  TrimWhitespaceASCII(text, base::TRIM_ALL, &trimmed);
-  if (!trimmed.empty()) {
-    alternatives_.push_back(trimmed);
-  }
-  return !trimmed.empty();
-}
-
-}  // namespace internal
-}  // namespace accessibility
-}  // namespace cobalt
diff --git a/src/cobalt/accessibility/internal/text_alternative_helper.h b/src/cobalt/accessibility/internal/text_alternative_helper.h
deleted file mode 100644
index 760eef3..0000000
--- a/src/cobalt/accessibility/internal/text_alternative_helper.h
+++ /dev/null
@@ -1,76 +0,0 @@
-// Copyright 2017 The Cobalt Authors. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#ifndef COBALT_ACCESSIBILITY_INTERNAL_TEXT_ALTERNATIVE_HELPER_H_
-#define COBALT_ACCESSIBILITY_INTERNAL_TEXT_ALTERNATIVE_HELPER_H_
-
-#include <string>
-#include <vector>
-
-#include "base/containers/hash_tables.h"
-#include "cobalt/base/token.h"
-#include "cobalt/dom/element.h"
-#include "cobalt/dom/node.h"
-
-namespace cobalt {
-namespace accessibility {
-namespace internal {
-
-// Helper class for implementing the WAI-ARIA Text Alternative computation
-// algorithm, made public for testing. This class should not be used directly.
-class TextAlternativeHelper {
- public:
-  TextAlternativeHelper() : in_labelled_by_or_described_by_(false) {}
-  void AppendTextAlternative(const scoped_refptr<dom::Node>& node);
-
-  // Return the accumulated alternatives joined by a single space character.
-  std::string GetTextAlternative();
-
-  // Append the text alternative from a aria-labelledby or aria-describedby
-  // property. Returns true if text alternative(s) were successfully appended.
-  bool TryAppendFromLabelledByOrDescribedBy(
-      const scoped_refptr<dom::Element>& element, const base::Token& token);
-
-  // Append the text alternative from a aria-label property. Returns true
-  // if the aria-label property exists and has a non-empty value.
-  bool TryAppendFromLabel(const scoped_refptr<dom::Element>& element);
-
-  // Append the text alternative from an element's "alt" property, for element
-  // types that support the semantics of the alt property. The only such element
-  // in Cobalt is <img> elements.
-  // Returns true if |element| is an element that supports the semantics of the
-  // "alt" property, and has a non-empty value for the "alt" property.
-  bool TryAppendFromAltProperty(const scoped_refptr<dom::Element>& element);
-
-  // Append |text| to the accumulation of text alternative strings if it is not
-  // empty. Returns true if text is non-empty.
-  bool AppendTextIfNonEmpty(const std::string& text);
-
-  // Returns true iff this element or one of its ancestors has the "aria-hidden"
-  // attribute set to "true".
-  static bool IsAriaHidden(const scoped_refptr<dom::Element>& element);
-
- private:
-  typedef base::hash_set<base::Token> TokenSet;
-
-  bool in_labelled_by_or_described_by_;
-  std::vector<std::string> alternatives_;
-  TokenSet visited_element_ids_;
-};
-
-}  // namespace internal
-}  // namespace accessibility
-}  // namespace cobalt
-
-#endif  // COBALT_ACCESSIBILITY_INTERNAL_TEXT_ALTERNATIVE_HELPER_H_
diff --git a/src/cobalt/accessibility/internal/text_alternative_helper_test.cc b/src/cobalt/accessibility/internal/text_alternative_helper_test.cc
deleted file mode 100644
index 1be481f..0000000
--- a/src/cobalt/accessibility/internal/text_alternative_helper_test.cc
+++ /dev/null
@@ -1,339 +0,0 @@
-// Copyright 2017 The Cobalt Authors. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "cobalt/accessibility/internal/text_alternative_helper.h"
-#include "base/memory/ref_counted.h"
-#include "cobalt/dom/html_image_element.h"
-#include "cobalt/dom/text.h"
-#include "cobalt/test/empty_document.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace cobalt {
-namespace accessibility {
-namespace internal {
-class TextAlternativeHelperTest : public ::testing::Test {
- protected:
-  dom::Document* document() { return empty_document_.document(); }
-
-  TextAlternativeHelper text_alternative_helper_;
-  // For posting tasks by any triggered code.
-  base::MessageLoop message_loop_;
-  test::EmptyDocument empty_document_;
-};
-
-TEST_F(TextAlternativeHelperTest, ConcatenatesAlternatives) {
-  EXPECT_TRUE(text_alternative_helper_.AppendTextIfNonEmpty("test"));
-  EXPECT_TRUE(text_alternative_helper_.AppendTextIfNonEmpty("dog"));
-  EXPECT_TRUE(text_alternative_helper_.AppendTextIfNonEmpty("cat"));
-  EXPECT_STREQ("test dog cat",
-               text_alternative_helper_.GetTextAlternative().c_str());
-}
-
-TEST_F(TextAlternativeHelperTest, IgnoresEmptyStrings) {
-  EXPECT_FALSE(text_alternative_helper_.AppendTextIfNonEmpty(""));
-  EXPECT_STREQ("", text_alternative_helper_.GetTextAlternative().c_str());
-  EXPECT_FALSE(text_alternative_helper_.AppendTextIfNonEmpty("     "));
-  EXPECT_TRUE(text_alternative_helper_.GetTextAlternative().empty());
-}
-
-TEST_F(TextAlternativeHelperTest, TrimsAlternatives) {
-  EXPECT_TRUE(text_alternative_helper_.AppendTextIfNonEmpty("  test "));
-  EXPECT_TRUE(text_alternative_helper_.AppendTextIfNonEmpty("dog  "));
-  EXPECT_TRUE(text_alternative_helper_.AppendTextIfNonEmpty(" cat"));
-  EXPECT_STREQ("test dog cat",
-               text_alternative_helper_.GetTextAlternative().c_str());
-}
-
-TEST_F(TextAlternativeHelperTest, HiddenOnlyIfAriaHiddenSet) {
-  scoped_refptr<dom::Element> element = document()->CreateElement("div");
-  // No aria-hidden attribute set.
-  EXPECT_FALSE(TextAlternativeHelper::IsAriaHidden(element));
-
-  // aria-hidden attribute set to false.
-  element->SetAttribute(base::Tokens::aria_hidden().c_str(),
-                        base::Tokens::false_token().c_str());
-  EXPECT_FALSE(TextAlternativeHelper::IsAriaHidden(element));
-
-  // aria-hidden attribute set to true.
-  element->SetAttribute(base::Tokens::aria_hidden().c_str(),
-                        base::Tokens::true_token().c_str());
-  EXPECT_TRUE(TextAlternativeHelper::IsAriaHidden(element));
-
-  // aria-hidden set to some arbitrary value.
-  element->SetAttribute(base::Tokens::aria_hidden().c_str(), "banana");
-  EXPECT_FALSE(TextAlternativeHelper::IsAriaHidden(element));
-}
-
-TEST_F(TextAlternativeHelperTest, GetTextAlternativeFromTextNode) {
-  scoped_refptr<dom::Element> element = document()->CreateElement("div");
-  element->AppendChild(document()->CreateTextNode("text node contents"));
-  text_alternative_helper_.AppendTextAlternative(element);
-  EXPECT_STREQ("text node contents",
-               text_alternative_helper_.GetTextAlternative().c_str());
-}
-
-TEST_F(TextAlternativeHelperTest, GetAltAttributeFromHTMLImage) {
-  scoped_refptr<dom::Element> element =
-      document()->CreateElement(dom::HTMLImageElement::kTagName);
-  element->SetAttribute(base::Tokens::alt().c_str(), "image alt text");
-  EXPECT_TRUE(text_alternative_helper_.TryAppendFromAltProperty(element));
-  EXPECT_STREQ("image alt text",
-               text_alternative_helper_.GetTextAlternative().c_str());
-}
-
-TEST_F(TextAlternativeHelperTest, EmptyAltAttribute) {
-  scoped_refptr<dom::Element> element =
-      document()->CreateElement(dom::HTMLImageElement::kTagName);
-  // No alt attribute.
-  EXPECT_FALSE(text_alternative_helper_.TryAppendFromAltProperty(element));
-  EXPECT_TRUE(text_alternative_helper_.GetTextAlternative().empty());
-
-  // Empty alt attribute.
-  element->SetAttribute(base::Tokens::alt().c_str(), "");
-  EXPECT_FALSE(text_alternative_helper_.TryAppendFromAltProperty(element));
-  EXPECT_TRUE(text_alternative_helper_.GetTextAlternative().empty());
-}
-
-TEST_F(TextAlternativeHelperTest, AltAttributeOnArbitraryElement) {
-  scoped_refptr<dom::Element> element = document()->CreateElement("div");
-  element->SetAttribute(base::Tokens::alt().c_str(), "alt text");
-  EXPECT_FALSE(text_alternative_helper_.TryAppendFromAltProperty(element));
-  EXPECT_TRUE(text_alternative_helper_.GetTextAlternative().empty());
-}
-
-TEST_F(TextAlternativeHelperTest, GetTextFromAriaLabel) {
-  scoped_refptr<dom::Element> element = document()->CreateElement("div");
-  element->SetAttribute(base::Tokens::aria_label().c_str(), "label text");
-  EXPECT_TRUE(text_alternative_helper_.TryAppendFromLabel(element));
-  EXPECT_STREQ("label text",
-               text_alternative_helper_.GetTextAlternative().c_str());
-}
-
-TEST_F(TextAlternativeHelperTest, IgnoreEmptyAriaLabel) {
-  scoped_refptr<dom::Element> element = document()->CreateElement("test");
-  element->SetAttribute(base::Tokens::aria_label().c_str(), "   ");
-  EXPECT_FALSE(text_alternative_helper_.TryAppendFromLabel(element));
-  EXPECT_TRUE(text_alternative_helper_.GetTextAlternative().empty());
-}
-
-TEST_F(TextAlternativeHelperTest, GetTextFromAriaLabelledBy) {
-  scoped_refptr<dom::Element> target_element = document()->CreateElement("div");
-  target_element->AppendChild(document()->CreateTextNode("labelledby target"));
-  target_element->set_id("target_element");
-  document()->AppendChild(target_element);
-
-  scoped_refptr<dom::Element> labelledby_element =
-      document()->CreateElement("div");
-  labelledby_element->SetAttribute(base::Tokens::aria_labelledby().c_str(),
-                                   "target_element");
-  document()->AppendChild(labelledby_element);
-
-  EXPECT_TRUE(text_alternative_helper_.TryAppendFromLabelledByOrDescribedBy(
-      labelledby_element, base::Tokens::aria_labelledby()));
-  EXPECT_STREQ("labelledby target",
-               text_alternative_helper_.GetTextAlternative().c_str());
-}
-
-TEST_F(TextAlternativeHelperTest, InvalidLabelledByReference) {
-  scoped_refptr<dom::Element> target_element = document()->CreateElement("div");
-  target_element->AppendChild(document()->CreateTextNode("labelledby target"));
-  target_element->set_id("target_element");
-  document()->AppendChild(target_element);
-
-  scoped_refptr<dom::Element> labelledby_element =
-      document()->CreateElement("div");
-  labelledby_element->SetAttribute(base::Tokens::aria_labelledby().c_str(),
-                                   "bad_reference");
-  document()->AppendChild(labelledby_element);
-
-  EXPECT_FALSE(text_alternative_helper_.TryAppendFromLabelledByOrDescribedBy(
-      labelledby_element, base::Tokens::aria_labelledby()));
-  EXPECT_TRUE(text_alternative_helper_.GetTextAlternative().empty());
-}
-
-TEST_F(TextAlternativeHelperTest, MultipleLabelledByReferences) {
-  scoped_refptr<dom::Element> target_element = document()->CreateElement("div");
-  target_element->AppendChild(document()->CreateTextNode("target1"));
-  target_element->set_id("target_element1");
-  document()->AppendChild(target_element);
-  target_element = document()->CreateElement("div");
-  target_element->AppendChild(document()->CreateTextNode("target2"));
-  target_element->set_id("target_element2");
-  document()->AppendChild(target_element);
-  target_element = document()->CreateElement("div");
-  target_element->AppendChild(document()->CreateTextNode("target3"));
-  target_element->set_id("target_element3");
-  document()->AppendChild(target_element);
-
-  scoped_refptr<dom::Element> labelledby_element =
-      document()->CreateElement("div");
-  labelledby_element->SetAttribute(
-      base::Tokens::aria_labelledby().c_str(),
-      "target_element1 target_element2 bad_reference target_element3");
-  document()->AppendChild(labelledby_element);
-
-  EXPECT_TRUE(text_alternative_helper_.TryAppendFromLabelledByOrDescribedBy(
-      labelledby_element, base::Tokens::aria_labelledby()));
-  EXPECT_STREQ("target1 target2 target3",
-               text_alternative_helper_.GetTextAlternative().c_str());
-}
-
-TEST_F(TextAlternativeHelperTest, LabelledByReferencesSelf) {
-  scoped_refptr<dom::Element> target_element = document()->CreateElement("div");
-  target_element->AppendChild(document()->CreateTextNode("other-text"));
-  target_element->set_id("other_id");
-  document()->AppendChild(target_element);
-
-  scoped_refptr<dom::Element> labelledby_element =
-      document()->CreateElement("div");
-  labelledby_element->set_id("self_id");
-  labelledby_element->SetAttribute(base::Tokens::aria_label().c_str(),
-                                   "self-label");
-  labelledby_element->SetAttribute(base::Tokens::aria_labelledby().c_str(),
-                                   "other_id self_id");
-  document()->AppendChild(labelledby_element);
-
-  EXPECT_TRUE(text_alternative_helper_.TryAppendFromLabelledByOrDescribedBy(
-      labelledby_element, base::Tokens::aria_labelledby()));
-  EXPECT_STREQ("other-text self-label",
-               text_alternative_helper_.GetTextAlternative().c_str());
-}
-
-TEST_F(TextAlternativeHelperTest, NoRecursiveLabelledBy) {
-  scoped_refptr<dom::Element> element = document()->CreateElement("div");
-  element->SetAttribute(base::Tokens::aria_labelledby().c_str(),
-                        "first_labelled_by_id");
-  document()->AppendChild(element);
-
-  scoped_refptr<dom::Element> first_labelledby_element =
-      document()->CreateElement("div");
-  first_labelledby_element->AppendChild(
-      document()->CreateTextNode("first-labelledby-text-contents"));
-  first_labelledby_element->set_id("first_labelled_by_id");
-  first_labelledby_element->SetAttribute(
-      base::Tokens::aria_labelledby().c_str(), "second_labelled_by_id");
-  document()->AppendChild(first_labelledby_element);
-
-  scoped_refptr<dom::Element> second_labelledby_element =
-      document()->CreateElement("div");
-  second_labelledby_element->AppendChild(
-      document()->CreateTextNode("second-labelledby-text-contents"));
-  second_labelledby_element->set_id("second_labelled_by_id");
-  document()->AppendChild(second_labelledby_element);
-
-  // In the non-recursive case, we should follow the labelledby attribute.
-  text_alternative_helper_.AppendTextAlternative(first_labelledby_element);
-  EXPECT_STREQ("second-labelledby-text-contents",
-               text_alternative_helper_.GetTextAlternative().c_str());
-
-  // In the recursive case, we should not follow the second labelledby
-  // attribute.
-  text_alternative_helper_ = TextAlternativeHelper();
-  text_alternative_helper_.AppendTextAlternative(element);
-  EXPECT_STREQ("first-labelledby-text-contents",
-               text_alternative_helper_.GetTextAlternative().c_str());
-}
-
-TEST_F(TextAlternativeHelperTest, GetTextFromSubtree) {
-  scoped_refptr<dom::Element> element = document()->CreateElement("div");
-  document()->AppendChild(element);
-
-  scoped_refptr<dom::Element> child = document()->CreateElement("div");
-  child->AppendChild(document()->CreateTextNode("child1-text"));
-  element->AppendChild(child);
-
-  scoped_refptr<dom::Element> child_element = document()->CreateElement("div");
-  element->AppendChild(child_element);
-
-  child = document()->CreateElement("div");
-  child->AppendChild(document()->CreateTextNode("child2-text"));
-  child_element->AppendChild(child);
-
-  child = document()->CreateElement("div");
-  child->AppendChild(document()->CreateTextNode("child3-text"));
-  child_element->AppendChild(child);
-
-  text_alternative_helper_.AppendTextAlternative(element);
-  EXPECT_STREQ("child1-text child2-text child3-text",
-               text_alternative_helper_.GetTextAlternative().c_str());
-}
-
-TEST_F(TextAlternativeHelperTest, DontFollowReferenceLoops) {
-  scoped_refptr<dom::Element> element = document()->CreateElement("div");
-  element->set_id("root_element_id");
-  document()->AppendChild(element);
-
-  scoped_refptr<dom::Element> child_element1 = document()->CreateElement("div");
-  child_element1->SetAttribute(base::Tokens::aria_labelledby().c_str(),
-                               "root_element_id");
-  element->AppendChild(child_element1);
-
-  scoped_refptr<dom::Element> child_element2 = document()->CreateElement("div");
-  child_element1->AppendChild(child_element2);
-
-  child_element2->AppendChild(document()->CreateTextNode("child2-text"));
-
-  text_alternative_helper_.AppendTextAlternative(element);
-  EXPECT_STREQ("child2-text",
-               text_alternative_helper_.GetTextAlternative().c_str());
-}
-
-TEST_F(TextAlternativeHelperTest, GetTextFromAriaDescribedBy) {
-  scoped_refptr<dom::Element> target_element = document()->CreateElement("div");
-  target_element->AppendChild(document()->CreateTextNode("describedby target"));
-  target_element->set_id("target_element");
-  document()->AppendChild(target_element);
-
-  scoped_refptr<dom::Element> describedby_element =
-      document()->CreateElement("div");
-  describedby_element->SetAttribute(base::Tokens::aria_describedby().c_str(),
-                                    "target_element");
-  document()->AppendChild(describedby_element);
-
-  EXPECT_TRUE(text_alternative_helper_.TryAppendFromLabelledByOrDescribedBy(
-      describedby_element, base::Tokens::aria_describedby()));
-  EXPECT_STREQ("describedby target",
-               text_alternative_helper_.GetTextAlternative().c_str());
-}
-
-TEST_F(TextAlternativeHelperTest, HasBothLabelledByAndDescribedBy) {
-  // aria-describedby is ignored in this case.
-  scoped_refptr<dom::Element> element = document()->CreateElement("div");
-  document()->AppendChild(element);
-
-  element->SetAttribute(base::Tokens::aria_labelledby().c_str(), "calendar");
-  element->SetAttribute(base::Tokens::aria_describedby().c_str(), "info");
-
-  scoped_refptr<dom::Element> labelledby_element =
-      document()->CreateElement("div");
-  labelledby_element->set_id("calendar");
-  labelledby_element->AppendChild(document()->CreateTextNode("Calendar"));
-  element->AppendChild(labelledby_element);
-
-  scoped_refptr<dom::Element> describedby_element =
-      document()->CreateElement("div");
-  describedby_element->set_id("info");
-  describedby_element->AppendChild(
-      document()->CreateTextNode("Calendar content description."));
-  element->AppendChild(describedby_element);
-
-  text_alternative_helper_.AppendTextAlternative(element);
-  EXPECT_STREQ("Calendar",
-               text_alternative_helper_.GetTextAlternative().c_str());
-}
-
-}  // namespace internal
-}  // namespace accessibility
-}  // namespace cobalt
diff --git a/src/cobalt/accessibility/screen_reader.cc b/src/cobalt/accessibility/screen_reader.cc
deleted file mode 100644
index 6e313b8..0000000
--- a/src/cobalt/accessibility/screen_reader.cc
+++ /dev/null
@@ -1,181 +0,0 @@
-// Copyright 2017 The Cobalt Authors. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "cobalt/accessibility/screen_reader.h"
-
-#include <memory>
-#include <string>
-
-#include "base/strings/stringprintf.h"
-#include "cobalt/accessibility/internal/live_region.h"
-#include "cobalt/accessibility/text_alternative.h"
-#include "cobalt/dom/element.h"
-#include "cobalt/dom/html_body_element.h"
-#include "cobalt/dom/node_list.h"
-
-namespace cobalt {
-namespace accessibility {
-namespace {
-// When text is removed from a live region, add the word "Removed" to indicate
-// that the text has been removed.
-// TODO: Support other languages.
-const char kRemovedFormatString[] = "Removed. %s";
-}  // namespace
-
-ScreenReader::ScreenReader(dom::Document* document, TTSEngine* tts_engine,
-                           dom::MutationObserverTaskManager* task_manager)
-    : enabled_(true),
-      document_(document),
-      tts_engine_(tts_engine),
-      focus_changed_(false) {
-  DCHECK(document_ && tts_engine_);
-  document_->AddObserver(this);
-  live_region_observer_ = new dom::MutationObserver(
-      base::Bind(&ScreenReader::MutationObserverCallback, AsWeakPtr()),
-      task_manager);
-}
-
-ScreenReader::~ScreenReader() {
-  live_region_observer_->Disconnect();
-  document_->RemoveObserver(this);
-}
-
-void ScreenReader::set_enabled(bool value) { enabled_ = value; }
-
-void ScreenReader::OnLoad() {
-  dom::MutationObserverInit init;
-  init.set_subtree(true);
-  // Track character data and node addition/removal for live regions.
-  init.set_character_data(true);
-  init.set_child_list(true);
-
-  if (document_->body()) {
-    live_region_observer_->Observe(document_->body(), init);
-  }
-}
-
-void ScreenReader::OnFocusChanged() {
-  if (focus_changed_) {
-    return;
-  }
-  focus_changed_ = true;
-  base::MessageLoop::current()->task_runner()->PostTask(
-      FROM_HERE, base::Bind(&ScreenReader::FocusChangedCallback, AsWeakPtr()));
-}
-
-void ScreenReader::FocusChangedCallback() {
-  focus_changed_ = false;
-  if (!enabled_) {
-    return;
-  }
-  scoped_refptr<dom::Element> element = document_->active_element();
-  if (element) {
-    std::string text_alternative = ComputeTextAlternative(element);
-    tts_engine_->SpeakNow(text_alternative);
-  }
-}
-
-// MutationObserver callback for tracking the creation and destruction of
-// live regions.
-void ScreenReader::MutationObserverCallback(
-    const MutationRecordSequence& sequence,
-    const scoped_refptr<dom::MutationObserver>& observer) {
-  // TODO: Only check live regions if text-to-speech is enabled.
-  if (!enabled_) {
-    return;
-  }
-  DCHECK_EQ(observer, live_region_observer_);
-  for (size_t i = 0; i < sequence.size(); ++i) {
-    scoped_refptr<dom::MutationRecord> record = sequence.at(i);
-
-    // Check if the target node is part of a live region.
-    std::unique_ptr<internal::LiveRegion> live_region =
-        internal::LiveRegion::GetLiveRegionForNode(record->target());
-    if (!live_region) {
-      continue;
-    }
-
-    const char* format_string = NULL;
-    // Get a list of changed nodes, based on the type of change this was and
-    // whether or not the live region cares about this type of change.
-    scoped_refptr<dom::NodeList> changed_nodes;
-    if (record->type() == base::Tokens::characterData() &&
-        live_region->IsMutationRelevant(
-            internal::LiveRegion::kMutationTypeText)) {
-      changed_nodes = new dom::NodeList();
-      changed_nodes->AppendNode(record->target());
-    } else if (record->type() == base::Tokens::childList()) {
-      if (record->added_nodes() &&
-          live_region->IsMutationRelevant(
-              internal::LiveRegion::kMutationTypeAddition)) {
-        changed_nodes = record->added_nodes();
-      }
-      if (record->removed_nodes() &&
-          live_region->IsMutationRelevant(
-              internal::LiveRegion::kMutationTypeRemoval)) {
-        changed_nodes = record->removed_nodes();
-        format_string = kRemovedFormatString;
-      }
-    }
-    // If we don't have changed nodes, that means that the change was not
-    // relevant to this live region.
-    if (!changed_nodes || (changed_nodes->length() <= 0)) {
-      continue;
-    }
-
-    // Check if any of the changed nodes should update the live region
-    // atomically.
-    bool is_atomic = false;
-    for (size_t i = 0; i < changed_nodes->length(); ++i) {
-      if (live_region->IsAtomic(changed_nodes->Item(i))) {
-        is_atomic = true;
-        break;
-      }
-    }
-
-    std::string text_alternative;
-    if (is_atomic) {
-      // If the live region updates atomically, then ignore changed_nodes
-      // and just get the text alternative from the entire region.
-      text_alternative = ComputeTextAlternative(live_region->root());
-    } else {
-      // Otherwise append all the text alternatives for each node.
-      for (size_t i = 0; i < changed_nodes->length(); ++i) {
-        text_alternative += ComputeTextAlternative(changed_nodes->Item(i));
-      }
-    }
-
-    // If we still don't have a text_alternative to speak, continue to the next
-    // mutation.
-    if (text_alternative.empty()) {
-      continue;
-    }
-
-    // Provide additional context through a format string, if necessary.
-    if (format_string) {
-      text_alternative =
-          base::StringPrintf(format_string, text_alternative.c_str());
-    }
-
-    // Utter the text according to whether this live region is assertive or not.
-    if (live_region->IsAssertive()) {
-      tts_engine_->SpeakNow(text_alternative);
-    } else {
-      tts_engine_->Speak(text_alternative);
-    }
-  }
-}
-
-}  // namespace accessibility
-}  // namespace cobalt
diff --git a/src/cobalt/accessibility/screen_reader.h b/src/cobalt/accessibility/screen_reader.h
deleted file mode 100644
index 83eb183..0000000
--- a/src/cobalt/accessibility/screen_reader.h
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright 2017 The Cobalt Authors. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#ifndef COBALT_ACCESSIBILITY_SCREEN_READER_H_
-#define COBALT_ACCESSIBILITY_SCREEN_READER_H_
-
-#include <memory>
-
-#include "base/memory/weak_ptr.h"
-#include "cobalt/accessibility/tts_engine.h"
-#include "cobalt/dom/document.h"
-#include "cobalt/dom/mutation_observer.h"
-#include "cobalt/dom/mutation_observer_task_manager.h"
-
-namespace cobalt {
-namespace accessibility {
-// ScreenReader tracks changes in the state of the Document and provides speech
-// utterances to a TTSEngine. The main use cases covered are when the document's
-// focused element changes, usually in response to user input, or if there is
-// an asynchronous change to "live region" that should be communicated to the
-// user.
-class ScreenReader : public base::SupportsWeakPtr<ScreenReader>,
-                     public dom::DocumentObserver {
- public:
-  ScreenReader(dom::Document* document, TTSEngine* tts_engine,
-               dom::MutationObserverTaskManager* task_manager);
-
-  void set_enabled(bool enabled);
-  bool enabled() const { return enabled_; }
-
- protected:
-  ~ScreenReader();
-  // dom::DocumentObserver overrides.
-  void OnLoad() override;
-  void OnMutation() override {}
-  void OnFocusChanged() override;
-
- private:
-  typedef script::Sequence<scoped_refptr<dom::MutationRecord> >
-      MutationRecordSequence;
-  void FocusChangedCallback();
-  // MutationObserver callback for tracking live regions.
-  void MutationObserverCallback(
-      const MutationRecordSequence& sequence,
-      const scoped_refptr<dom::MutationObserver>& observer);
-
-  bool enabled_;
-  dom::Document* document_;
-  TTSEngine* tts_engine_;
-  scoped_refptr<dom::MutationObserver> live_region_observer_;
-  bool focus_changed_;
-
-  friend std::unique_ptr<ScreenReader>::deleter_type;
-  DISALLOW_COPY_AND_ASSIGN(ScreenReader);
-};
-}  // namespace accessibility
-}  // namespace cobalt
-
-#endif  // COBALT_ACCESSIBILITY_SCREEN_READER_H_
diff --git a/src/cobalt/accessibility/screen_reader_tests.cc b/src/cobalt/accessibility/screen_reader_tests.cc
deleted file mode 100644
index 238c096..0000000
--- a/src/cobalt/accessibility/screen_reader_tests.cc
+++ /dev/null
@@ -1,206 +0,0 @@
-// Copyright 2017 The Cobalt Authors. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include <memory>
-#include <string>
-#include <vector>
-
-#include "base/base_paths.h"
-#include "base/files/file_enumerator.h"
-#include "base/files/file_path.h"
-#include "base/files/file_util.h"
-#include "base/memory/ref_counted.h"
-#include "base/path_service.h"
-#include "cobalt/accessibility/screen_reader.h"
-#include "cobalt/accessibility/text_alternative.h"
-#include "cobalt/accessibility/tts_engine.h"
-#include "cobalt/browser/web_module.h"
-#include "cobalt/cssom/viewport_size.h"
-#include "cobalt/dom/element.h"
-#include "cobalt/dom/window.h"
-#include "cobalt/test/document_loader.h"
-#include "starboard/window.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-using cobalt::cssom::ViewportSize;
-using testing::_;
-
-namespace cobalt {
-namespace accessibility {
-namespace {
-struct TestInfo {
-  TestInfo(const std::string& html_file_name,
-           const std::string& expected_result, bool screen_reader_enabled)
-      : html_file_name(html_file_name),
-        expected_result(expected_result),
-        screen_reader_enabled(screen_reader_enabled) {}
-  std::string html_file_name;
-  std::string expected_result;
-  bool screen_reader_enabled;
-};
-
-// Enumerate the *.html files in the accessibility_test directory and build
-// a list of input .html files and expected results.
-std::vector<TestInfo> EnumerateTests(bool screen_reader_enabled,
-                                     const std::string& subdir) {
-  std::vector<TestInfo> infos;
-  base::FilePath root_directory;
-  base::PathService::Get(base::DIR_TEST_DATA, &root_directory);
-  root_directory = root_directory.Append("cobalt")
-                       .Append("accessibility")
-                       .Append("testdata")
-                       .Append(subdir);
-  base::FileEnumerator enumerator(root_directory, false,
-                                  base::FileEnumerator::FILES);
-  for (base::FilePath html_file = enumerator.Next(); !html_file.empty();
-       html_file = enumerator.Next()) {
-    if (html_file.Extension() == ".html") {
-      base::FilePath expected_results_file =
-          html_file.ReplaceExtension(".expected");
-      std::string results;
-      if (!base::ReadFileToString(expected_results_file, &results)) {
-        DLOG(WARNING) << "Failed to read results from file: "
-                      << expected_results_file.value();
-        continue;
-      }
-      TrimWhitespaceASCII(results, base::TRIM_ALL, &results);
-      infos.push_back(TestInfo(html_file.BaseName().value(), results,
-                               screen_reader_enabled));
-    }
-  }
-  return infos;
-}
-
-class MockTTSEngine : public TTSEngine {
- public:
-  MOCK_METHOD1(Speak, void(const std::string&));
-  MOCK_METHOD1(SpeakNow, void(const std::string&));
-};
-
-class TextAlternativeTest : public ::testing::TestWithParam<TestInfo> {
- protected:
-  // For posting tasks by any triggered code.
-  test::DocumentLoader document_loader_;
-};
-
-class LiveRegionMutationTest : public ::testing::TestWithParam<TestInfo> {
- public:
-  LiveRegionMutationTest()
-      : quit_event_(base::WaitableEvent::ResetPolicy::MANUAL,
-                    base::WaitableEvent::InitialState::NOT_SIGNALED) {}
-  void OnError(const GURL&, const std::string& error) {
-    DLOG(ERROR) << error;
-    Quit();
-  }
-  void Quit() {
-    quit_event_.Signal();
-    screen_reader_.reset();
-  }
-  void OnClose(base::TimeDelta close_time) {
-    SB_UNREFERENCED_PARAMETER(close_time);
-    Quit();
-  }
-
-  scoped_refptr<script::Wrappable> CreateWindowAttribute(
-      const scoped_refptr<dom::Window>& window,
-      dom::MutationObserverTaskManager* mutation_observer_task_manager,
-      script::GlobalEnvironment* global_environment) {
-    SB_UNREFERENCED_PARAMETER(global_environment);
-    screen_reader_.reset(new accessibility::ScreenReader(
-        window->document(), &tts_engine_, mutation_observer_task_manager));
-    screen_reader_->set_enabled(GetParam().screen_reader_enabled);
-    EXPECT_EQ(GetParam().screen_reader_enabled, screen_reader_->enabled());
-
-    return NULL;
-  }
-
-  static void OnRenderTreeProducedStub(
-      const browser::WebModule::LayoutResults&) {}
-
- protected:
-  MockTTSEngine tts_engine_;
-  base::WaitableEvent quit_event_;
-  std::unique_ptr<accessibility::ScreenReader> screen_reader_;
-};
-}  // namespace
-
-TEST_P(TextAlternativeTest, TextAlternativeTest) {
-  GURL url(
-      std::string("file:///cobalt/accessibility/testdata/text_alternative/" +
-                  GetParam().html_file_name));
-  document_loader_.Load(url);
-  ASSERT_TRUE(document_loader_.document());
-  scoped_refptr<dom::Element> element =
-      document_loader_.document()->GetElementById("element_to_test");
-  ASSERT_TRUE(element);
-  EXPECT_EQ(GetParam().expected_result, ComputeTextAlternative(element));
-}
-
-// This test broke  because LiveRegionMutationTest::CreateWindowAttribute()
-// returns a NULL script::Wrappable, which the javascript engine will attempt
-// to dereference.
-TEST_P(LiveRegionMutationTest, DISABLED_LiveRegionMutationTest) {
-  GURL url(std::string("file:///cobalt/accessibility/testdata/live_region/" +
-                       GetParam().html_file_name));
-  const ViewportSize kDefaultViewportSize(1280, 720);
-  const float kDefaultVideoPixelRatio = 1.0f;
-  const float kRefreshRate = 60.0f;
-
-  network::NetworkModule network_module((network::NetworkModule::Options()));
-  render_tree::ResourceProviderStub resource_provider;
-
-  // Use test runner mode to allow the content itself to dictate when it is
-  // ready for layout should be performed.  See cobalt/dom/test_runner.h.
-  browser::WebModule::Options web_module_options;
-  web_module_options.injected_window_attributes["test"] = base::Bind(
-      &LiveRegionMutationTest::CreateWindowAttribute, base::Unretained(this));
-
-  // Set expected result from mutation.
-  std::string expected_speech = GetParam().expected_result;
-  if (expected_speech.empty() || !GetParam().screen_reader_enabled) {
-    EXPECT_CALL(tts_engine_, Speak(_)).Times(0);
-  } else {
-    EXPECT_CALL(tts_engine_, Speak(expected_speech));
-  }
-
-  // Create the webmodule and let it run.
-  DLOG(INFO) << url.spec();
-  browser::WebModule web_module(
-      url, base::kApplicationStateStarted,
-      base::Bind(&LiveRegionMutationTest::OnRenderTreeProducedStub),
-      base::Bind(&LiveRegionMutationTest::OnError, base::Unretained(this)),
-      base::Bind(&LiveRegionMutationTest::OnClose, base::Unretained(this)),
-      base::Closure(), /* window_minimize_callback */
-      NULL /* can_play_type_handler */, NULL /* web_media_player_factory */,
-      &network_module, kDefaultViewportSize, kDefaultVideoPixelRatio,
-      &resource_provider, kRefreshRate, web_module_options);
-
-  // Wait for the test to quit.
-  quit_event_.Wait();
-}
-
-INSTANTIATE_TEST_CASE_P(
-    TextAlternativeTest, TextAlternativeTest,
-    ::testing::ValuesIn(EnumerateTests(true, "text_alternative")));
-
-INSTANTIATE_TEST_CASE_P(LiveRegionMutationTestEnabled, LiveRegionMutationTest,
-                        ::testing::ValuesIn(EnumerateTests(true,
-                                                           "live_region")));
-
-INSTANTIATE_TEST_CASE_P(LiveRegionMutationTestDisabled, LiveRegionMutationTest,
-                        ::testing::ValuesIn(EnumerateTests(false,
-                                                           "live_region")));
-}  // namespace accessibility
-}  // namespace cobalt
diff --git a/src/cobalt/accessibility/starboard_tts_engine.cc b/src/cobalt/accessibility/starboard_tts_engine.cc
deleted file mode 100644
index c05afd4..0000000
--- a/src/cobalt/accessibility/starboard_tts_engine.cc
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2017 The Cobalt Authors. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "cobalt/accessibility/starboard_tts_engine.h"
-
-#include "starboard/speech_synthesis.h"
-
-#if SB_HAS(SPEECH_SYNTHESIS)
-
-namespace cobalt {
-namespace accessibility {
-
-void StarboardTTSEngine::SpeakNow(const std::string& text) {
-  SbSpeechSynthesisCancel();
-  Speak(text);
-}
-
-void StarboardTTSEngine::Speak(const std::string& text) {
-  SbSpeechSynthesisSpeak(text.c_str());
-}
-
-}  // namespace accessibility
-}  // namespace cobalt
-
-#endif  // SB_HAS(SPEECH_SYNTHESIS)
diff --git a/src/cobalt/accessibility/starboard_tts_engine.h b/src/cobalt/accessibility/starboard_tts_engine.h
deleted file mode 100644
index 7eb8c50..0000000
--- a/src/cobalt/accessibility/starboard_tts_engine.h
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2017 The Cobalt Authors. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#ifndef COBALT_ACCESSIBILITY_STARBOARD_TTS_ENGINE_H_
-#define COBALT_ACCESSIBILITY_STARBOARD_TTS_ENGINE_H_
-
-#include <string>
-
-#include "base/compiler_specific.h"
-#include "cobalt/accessibility/tts_engine.h"
-
-namespace cobalt {
-namespace accessibility {
-
-// Implementation of TTSEngine using the Starboard Speech Synthesis API.
-class StarboardTTSEngine : public TTSEngine {
- public:
-  void SpeakNow(const std::string& text) override;
-  void Speak(const std::string& text) override;
-  ~StarboardTTSEngine() override {}
-};
-}  // namespace accessibility
-}  // namespace cobalt
-
-#endif  // COBALT_ACCESSIBILITY_STARBOARD_TTS_ENGINE_H_
diff --git a/src/cobalt/accessibility/testdata/live_region/add-child.expected b/src/cobalt/accessibility/testdata/live_region/add-child.expected
deleted file mode 100644
index 4706dc8..0000000
--- a/src/cobalt/accessibility/testdata/live_region/add-child.expected
+++ /dev/null
@@ -1 +0,0 @@
-New child text contents
diff --git a/src/cobalt/accessibility/testdata/live_region/add-child.html b/src/cobalt/accessibility/testdata/live_region/add-child.html
deleted file mode 100644
index c22f5d2..0000000
--- a/src/cobalt/accessibility/testdata/live_region/add-child.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html>
-<head>
-<script>
-var doMutation = function() {
-  var region = document.getElementById("to_mutate");
-  var new_child = document.createElement("div");
-  new_child.appendChild(document.createTextNode("New child text contents"));
-  region.appendChild(new_child);
-  window.setTimeout(function() { window.close(); } );
-}
-window.addEventListener("load", doMutation);
-</script>
-</head>
-<body>
-<div id="to_mutate" aria-live="polite" aria-relevant="additions" aria-atomic="false">
-   Original contents.
-</div>
-</body>
-</html>
diff --git a/src/cobalt/accessibility/testdata/live_region/atomic-update.expected b/src/cobalt/accessibility/testdata/live_region/atomic-update.expected
deleted file mode 100644
index c4395db..0000000
--- a/src/cobalt/accessibility/testdata/live_region/atomic-update.expected
+++ /dev/null
@@ -1 +0,0 @@
-Original contents. New child text contents
diff --git a/src/cobalt/accessibility/testdata/live_region/atomic-update.html b/src/cobalt/accessibility/testdata/live_region/atomic-update.html
deleted file mode 100644
index 7e9a9cc..0000000
--- a/src/cobalt/accessibility/testdata/live_region/atomic-update.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html>
-<head>
-<script>
-var doMutation = function() {
-  var region = document.getElementById("to_mutate");
-  var new_child = document.createElement("div");
-  new_child.appendChild(document.createTextNode("New child text contents"));
-  region.appendChild(new_child);
-  window.setTimeout(function() { window.close(); } );
-}
-window.addEventListener("load", doMutation);
-</script>
-</head>
-<body>
-<div id="to_mutate" aria-live="polite" aria-relevant="additions" aria-atomic="true">
-   Original contents.
-</div>
-</body>
-</html>
diff --git a/src/cobalt/accessibility/testdata/live_region/mutate-text-contents.expected b/src/cobalt/accessibility/testdata/live_region/mutate-text-contents.expected
deleted file mode 100644
index 8a1cd73..0000000
--- a/src/cobalt/accessibility/testdata/live_region/mutate-text-contents.expected
+++ /dev/null
@@ -1 +0,0 @@
-New text contents
diff --git a/src/cobalt/accessibility/testdata/live_region/mutate-text-contents.html b/src/cobalt/accessibility/testdata/live_region/mutate-text-contents.html
deleted file mode 100644
index 53e5afe..0000000
--- a/src/cobalt/accessibility/testdata/live_region/mutate-text-contents.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<html>
-<head>
-<script>
-var doMutation = function() {
-  var region = document.getElementById("to_mutate");
-  region.firstChild.textContent = "New text contents";
-
-  window.setTimeout(function() { window.close(); } );
-}
-window.addEventListener("load", doMutation);
-</script>
-</head>
-<body>
-<div id="to_mutate" aria-live="polite" aria-relevant="text" aria-atomic="false">
-   Original contents.
-</div>
-</body>
-</html>
diff --git a/src/cobalt/accessibility/testdata/live_region/non-relevant-mutations.expected b/src/cobalt/accessibility/testdata/live_region/non-relevant-mutations.expected
deleted file mode 100644
index e69de29..0000000
--- a/src/cobalt/accessibility/testdata/live_region/non-relevant-mutations.expected
+++ /dev/null
diff --git a/src/cobalt/accessibility/testdata/live_region/non-relevant-mutations.html b/src/cobalt/accessibility/testdata/live_region/non-relevant-mutations.html
deleted file mode 100644
index f315236..0000000
--- a/src/cobalt/accessibility/testdata/live_region/non-relevant-mutations.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<html>
-<head>
-<script>
-var doMutation = function() {
-  var text_only_region = document.getElementById("text_only");
-  var to_remove = document.getElementById("text_only_to_remove");
-  text_only_region.removeChild(to_remove);
-  text_only_region.appendChild(document.createTextNode("Irrelevant"))
-
-  var additions_only_region = document.getElementById("additions_only");
-  to_remove = document.getElementById("additions_only_to_remove");
-  additions_only_region.removeChild(to_remove);
-
-  var to_mutate = document.getElementById("additions_only_to_mutate");
-  to_mutate.firstChild.textContent = "New Content";
-
-  window.setTimeout(function() { window.close(); } );
-}
-window.addEventListener("load", doMutation);
-</script>
-</head>
-<body>
-<div id="text_only" aria-live="polite" aria-relevant="text" aria-atomic="false">
-  Some contents
-  <div id="text_only_to_remove">
-    Contents to be removed
-  </div>
-<div>
-<div id="additions_only" aria-live="polite" aria-relevant="additions" aria-atomic="false">
-  Some contents
-  <div id="additions_only_to_remove">
-    Contents to be removed
-  </div>
-  <div id="additions_only_to_mutate">
-    Old text contents
-  </div>
-<div>
-</body>
-</html>
diff --git a/src/cobalt/accessibility/testdata/live_region/remove-child.expected b/src/cobalt/accessibility/testdata/live_region/remove-child.expected
deleted file mode 100644
index c08dfdb..0000000
--- a/src/cobalt/accessibility/testdata/live_region/remove-child.expected
+++ /dev/null
@@ -1 +0,0 @@
-Removed. Contents to be removed
diff --git a/src/cobalt/accessibility/testdata/live_region/remove-child.html b/src/cobalt/accessibility/testdata/live_region/remove-child.html
deleted file mode 100644
index 40727ec..0000000
--- a/src/cobalt/accessibility/testdata/live_region/remove-child.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<html>
-<head>
-<script>
-var doMutation = function() {
-  var region = document.getElementById("to_mutate");
-  var to_remove = document.getElementById("to_remove");
-  region.removeChild(to_remove);
-  window.setTimeout(function() { window.close(); } );
-}
-window.addEventListener("load", doMutation);
-</script>
-</head>
-<body>
-<div id="to_mutate" aria-live="polite" aria-relevant="removals" aria-atomic="false">
-  Some contents
-  <div id="to_remove">
-    Contents to be removed
-  </div>
-</div>
-</body>
-</html>
diff --git a/src/cobalt/accessibility/testdata/text_alternative/hidden-by-parent.expected b/src/cobalt/accessibility/testdata/text_alternative/hidden-by-parent.expected
deleted file mode 100644
index 8b13789..0000000
--- a/src/cobalt/accessibility/testdata/text_alternative/hidden-by-parent.expected
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/src/cobalt/accessibility/testdata/text_alternative/hidden-by-parent.html b/src/cobalt/accessibility/testdata/text_alternative/hidden-by-parent.html
deleted file mode 100644
index 7efd526..0000000
--- a/src/cobalt/accessibility/testdata/text_alternative/hidden-by-parent.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<html>
-  <div aria-hidden="true">
-    <div id="element_to_test" >
-      This text shouldn't be used.
-    </div>
-  </div>
-</html>
diff --git a/src/cobalt/accessibility/testdata/text_alternative/hidden-labelledby.expected b/src/cobalt/accessibility/testdata/text_alternative/hidden-labelledby.expected
deleted file mode 100644
index 78c1792..0000000
--- a/src/cobalt/accessibility/testdata/text_alternative/hidden-labelledby.expected
+++ /dev/null
@@ -1 +0,0 @@
-Hidden labelled by target.
diff --git a/src/cobalt/accessibility/testdata/text_alternative/hidden-labelledby.html b/src/cobalt/accessibility/testdata/text_alternative/hidden-labelledby.html
deleted file mode 100644
index 5294f75..0000000
--- a/src/cobalt/accessibility/testdata/text_alternative/hidden-labelledby.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<html>
-  <div id="element_to_test" aria-labelledby="hidden_target"/>
-  <div aria-hidden="true">
-    <div id="hidden_target" >
-      Hidden labelled by target.
-    </div>
-  </div>
-</html>
diff --git a/src/cobalt/accessibility/testdata/text_alternative/self-reference-labelledby.expected b/src/cobalt/accessibility/testdata/text_alternative/self-reference-labelledby.expected
deleted file mode 100644
index 32de814..0000000
--- a/src/cobalt/accessibility/testdata/text_alternative/self-reference-labelledby.expected
+++ /dev/null
@@ -1 +0,0 @@
-The aria label
diff --git a/src/cobalt/accessibility/testdata/text_alternative/self-reference-labelledby.html b/src/cobalt/accessibility/testdata/text_alternative/self-reference-labelledby.html
deleted file mode 100644
index 6225503..0000000
--- a/src/cobalt/accessibility/testdata/text_alternative/self-reference-labelledby.html
+++ /dev/null
@@ -1,4 +0,0 @@
-<html>
-  <div id="element_to_test" aria-label="The aria label" aria-labelledby="element_to_test">
-  </div>
-</html>
diff --git a/src/cobalt/accessibility/testdata/text_alternative/text-content.expected b/src/cobalt/accessibility/testdata/text_alternative/text-content.expected
deleted file mode 100644
index 401745c..0000000
--- a/src/cobalt/accessibility/testdata/text_alternative/text-content.expected
+++ /dev/null
@@ -1 +0,0 @@
-Use text content
diff --git a/src/cobalt/accessibility/testdata/text_alternative/text-content.html b/src/cobalt/accessibility/testdata/text_alternative/text-content.html
deleted file mode 100644
index 000c8be..0000000
--- a/src/cobalt/accessibility/testdata/text_alternative/text-content.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<html>
-  <div id="element_to_test">
-    Use text content
-  </div>
-</html>
diff --git a/src/cobalt/accessibility/text_alternative.cc b/src/cobalt/accessibility/text_alternative.cc
deleted file mode 100644
index c06731d..0000000
--- a/src/cobalt/accessibility/text_alternative.cc
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2017 The Cobalt Authors. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "cobalt/accessibility/text_alternative.h"
-
-#include "cobalt/accessibility/internal/text_alternative_helper.h"
-#include "cobalt/dom/document.h"
-#include "cobalt/dom/element.h"
-#include "cobalt/dom/text.h"
-
-namespace cobalt {
-namespace accessibility {
-std::string ComputeTextAlternative(const scoped_refptr<dom::Node>& node) {
-  // Update the computed styles first to ensure that any CSS that would modify
-  // the text contents has been applied (such as :before and :after).
-  if (node->node_document()) {
-    node->node_document()->UpdateComputedStyles();
-  }
-  internal::TextAlternativeHelper helper;
-  helper.AppendTextAlternative(node);
-  return helper.GetTextAlternative();
-}
-}  // namespace accessibility
-}  // namespace cobalt
diff --git a/src/cobalt/accessibility/text_alternative.h b/src/cobalt/accessibility/text_alternative.h
deleted file mode 100644
index c274fce..0000000
--- a/src/cobalt/accessibility/text_alternative.h
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2017 The Cobalt Authors. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#ifndef COBALT_ACCESSIBILITY_TEXT_ALTERNATIVE_H_
-#define COBALT_ACCESSIBILITY_TEXT_ALTERNATIVE_H_
-
-#include <string>
-
-#include "cobalt/dom/node.h"
-
-namespace cobalt {
-namespace accessibility {
-
-// Compute the Text Alternative for the node per the wai-aria specification:
-// https://www.w3.org/TR/2014/REC-wai-aria-implementation-20140320/#mapping_additional_nd_te
-std::string ComputeTextAlternative(const scoped_refptr<dom::Node>& node);
-
-}  // namespace accessibility
-}  // namespace cobalt
-
-#endif  // COBALT_ACCESSIBILITY_TEXT_ALTERNATIVE_H_
diff --git a/src/cobalt/accessibility/tts_engine.h b/src/cobalt/accessibility/tts_engine.h
deleted file mode 100644
index bba0aae..0000000
--- a/src/cobalt/accessibility/tts_engine.h
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2017 The Cobalt Authors. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#ifndef COBALT_ACCESSIBILITY_TTS_ENGINE_H_
-#define COBALT_ACCESSIBILITY_TTS_ENGINE_H_
-
-#include <string>
-
-namespace cobalt {
-namespace accessibility {
-// Interface for a TTS (text-to-speech) implementation.
-class TTSEngine {
- public:
-  // Speaks the contents of |text|, pre-empting any utterances that are
-  // currently in progress.
-  virtual void SpeakNow(const std::string& text) = 0;
-  // Queues the contents of |text| to be spoken after any in-progress utterances
-  // are finished.
-  virtual void Speak(const std::string& text) = 0;
-  virtual ~TTSEngine() {}
-};
-}  // namespace accessibility
-}  // namespace cobalt
-
-#endif  // COBALT_ACCESSIBILITY_TTS_ENGINE_H_
diff --git a/src/cobalt/accessibility/tts_logger.h b/src/cobalt/accessibility/tts_logger.h
deleted file mode 100644
index 25d2eed..0000000
--- a/src/cobalt/accessibility/tts_logger.h
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2017 The Cobalt Authors. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#ifndef COBALT_ACCESSIBILITY_TTS_LOGGER_H_
-#define COBALT_ACCESSIBILITY_TTS_LOGGER_H_
-
-#include <string>
-
-#include "base/logging.h"
-#include "cobalt/accessibility/tts_engine.h"
-
-namespace cobalt {
-namespace accessibility {
-// TTSEngine implementation that just logs the text.
-class TTSLogger : public TTSEngine {
- public:
-  void SpeakNow(const std::string& text) override { LogText(text); }
-  void Speak(const std::string& text) override { LogText(text); }
-
- private:
-  void LogText(const std::string& text) {
-    LOG(INFO) << "Text-to-speech: " << text;
-  }
-  virtual ~TTSLogger() {}
-};
-}  // namespace accessibility
-}  // namespace cobalt
-
-#endif  // COBALT_ACCESSIBILITY_TTS_LOGGER_H_
diff --git a/src/cobalt/audio/audio_device.cc b/src/cobalt/audio/audio_device.cc
index 11ed4d2..8b7159d 100644
--- a/src/cobalt/audio/audio_device.cc
+++ b/src/cobalt/audio/audio_device.cc
@@ -12,6 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
+#include <algorithm>
 #include <memory>
 
 #include "cobalt/audio/audio_device.h"
@@ -30,11 +31,7 @@
 
 namespace {
 const int kRenderBufferSizeFrames = 1024;
-// AudioDevice will keep writing silence frames at the end of playback until the
-// buffer is full to ensure the audible frames being played on platforms with
-// strict underflow control. A large |kFramesPerChannel| will increase the
-// silence between two sounds. So it shouldn't be set to a very large number.
-const int kFramesPerChannel = kRenderBufferSizeFrames * 8;
+const int kDefaultFramesPerChannel = 8 * kRenderBufferSizeFrames;
 }  // namespace
 
 class AudioDevice::Impl {
@@ -64,6 +61,7 @@
   int number_of_channels_;
   SbMediaAudioSampleType output_sample_type_;
   RenderCallback* render_callback_;
+  int frames_per_channel_;
 
   // The |render_callback_| returns audio data in planar form.  So we read it
   // into |input_audio_bus_| and convert it into interleaved form and store in
@@ -90,11 +88,19 @@
     : number_of_channels_(number_of_channels),
       output_sample_type_(GetPreferredOutputStarboardSampleType()),
       render_callback_(callback),
+#if SB_API_VERSION >= 11
+      frames_per_channel_(std::max(SbAudioSinkGetMinBufferSizeInFrames(
+                                       number_of_channels, output_sample_type_,
+                                       kStandardOutputSampleRate),
+                                   kDefaultFramesPerChannel)),
+#else  // SB_API_VERSION >= 11
+      frames_per_channel_(kDefaultFramesPerChannel),
+#endif  // SB_API_VERSION >= 11
       input_audio_bus_(static_cast<size_t>(number_of_channels),
                        static_cast<size_t>(kRenderBufferSizeFrames),
                        GetPreferredOutputSampleType(), ShellAudioBus::kPlanar),
       output_frame_buffer_(
-          new uint8[kFramesPerChannel * number_of_channels_ *
+          new uint8[frames_per_channel_ * number_of_channels_ *
                     GetStarboardSampleTypeSize(output_sample_type_)]) {
   DCHECK(number_of_channels_ == 1 || number_of_channels_ == 2)
       << "Invalid number of channels: " << number_of_channels_;
@@ -109,7 +115,7 @@
   audio_sink_ = SbAudioSinkCreate(
       number_of_channels_, kStandardOutputSampleRate, output_sample_type_,
       kSbMediaAudioFrameStorageTypeInterleaved, frame_buffers_,
-      kFramesPerChannel, &AudioDevice::Impl::UpdateSourceStatusFunc,
+      frames_per_channel_, &AudioDevice::Impl::UpdateSourceStatusFunc,
       &AudioDevice::Impl::ConsumeFramesFunc, this);
   DCHECK(SbAudioSinkIsValid(audio_sink_));
 }
@@ -168,7 +174,7 @@
   DCHECK_GE(frames_rendered_, frames_consumed_);
   *frames_in_buffer = static_cast<int>(frames_rendered_ - frames_consumed_);
 
-  if ((kFramesPerChannel - *frames_in_buffer) >= kRenderBufferSizeFrames) {
+  if ((frames_per_channel_ - *frames_in_buffer) >= kRenderBufferSizeFrames) {
     // If there was silence last time we were called, then the buffer has
     // already been zeroed out and we don't need to do it again.
     if (!was_silence_last_update_) {
@@ -197,7 +203,7 @@
     was_silence_last_update_ = silence;
   }
 
-  *offset_in_frames = frames_consumed_ % kFramesPerChannel;
+  *offset_in_frames = frames_consumed_ % frames_per_channel_;
 }
 
 void AudioDevice::Impl::ConsumeFrames(int frames_consumed) {
@@ -208,7 +214,7 @@
 inline void AudioDevice::Impl::FillOutputAudioBusForType() {
   // Determine the offset into the audio bus that represents the tail of
   // buffered data.
-  uint64 channel_offset = frames_rendered_ % kFramesPerChannel;
+  uint64 channel_offset = frames_rendered_ % frames_per_channel_;
 
   OutputType* output_buffer =
       reinterpret_cast<OutputType*>(output_frame_buffer_.get());
diff --git a/src/cobalt/base/wrap_main_starboard.h b/src/cobalt/base/wrap_main_starboard.h
index 4dfa576..7ff43f1 100644
--- a/src/cobalt/base/wrap_main_starboard.h
+++ b/src/cobalt/base/wrap_main_starboard.h
@@ -24,6 +24,9 @@
 #include "starboard/client_porting/wrap_main/wrap_main.h"
 #include "starboard/event.h"
 #include "starboard/system.h"
+#if SB_IS(EVERGREEN)
+#include "third_party/musl/src/starboard/internal/hwcap_impl.h"
+#endif
 
 namespace cobalt {
 namespace wrap_main {
@@ -42,6 +45,9 @@
       DCHECK(!g_started);
       DCHECK(!g_at_exit);
       g_at_exit = new base::AtExitManager();
+#if SB_IS(EVERGREEN)
+      init_musl_hwcap();
+#endif
       InitCobalt(data->argument_count, data->argument_values, data->link);
 
       DCHECK(!g_loop);
@@ -59,7 +65,9 @@
       if (!g_started) {
         DCHECK(!g_at_exit);
         g_at_exit = new base::AtExitManager();
-
+#if SB_IS(EVERGREEN)
+        init_musl_hwcap();
+#endif
         InitCobalt(data->argument_count, data->argument_values, data->link);
 
         DCHECK(!g_loop);
diff --git a/src/cobalt/bindings/README.md b/src/cobalt/bindings/README.md
index d276dc4..bb956cc 100644
--- a/src/cobalt/bindings/README.md
+++ b/src/cobalt/bindings/README.md
@@ -151,7 +151,7 @@
 
 # script/$engine
 
-Then, we designate a specific area of code to be our engine specific implementation of the interfaces established in script.  We [commit to an engine at gyp time](https://cs.corp.google.com/cobalt/starboard/build/platform_configuration.py?type=cs&q=file:py+%27javascript_engine%27&sq=package:%5Ecobalt$&g=0#223), and then based on that, [select the appropriate set of files](https://cobalt.googlesource.com/cobalt/+/2a8c847d785c1602f60915c8e0112e0aec6a15a5/src/cobalt/script/engine.gyp?type=cs&q=file:cobalt+file:gyp+javascript_engine&sq=package:%5Ecobalt$&g=0#26).  This is the only area of Cobalt code (except for bindings/*/$engine, which is essentially more of the same stuff) that is allowed to include engine specific headers (files in v8/ and third_party/mozjs-45/).  Maintaining this abstraction has been useful throughout our multiple JavaScript engine migrations over the years.
+Then, we designate a specific area of code to be our engine specific implementation of the interfaces established in script.  We commit to an engine at gyp time, and then based on that, [select the appropriate set of files](https://cobalt.googlesource.com/cobalt/+/2a8c847d785c1602f60915c8e0112e0aec6a15a5/src/cobalt/script/engine.gyp?type=cs&q=file:cobalt+file:gyp+javascript_engine&sq=package:%5Ecobalt$&g=0#26).  This is the only area of Cobalt code (except for bindings/*/$engine, which is essentially more of the same stuff) that is allowed to include engine specific headers (files in v8/ and third_party/mozjs-45/).  Maintaining this abstraction has been useful throughout our multiple JavaScript engine migrations over the years.
 
 A large portion of script/$engine is filling in the types discussed in the previous section.  So [V8cEngine](https://cobalt.googlesource.com/cobalt/+/2a8c847d785c1602f60915c8e0112e0aec6a15a5/src/cobalt/script/v8c/v8c_engine.h?q=V8cEngine&sq=package:%5Ecobalt$&dr=CSs#31) implements JavaScriptEngine by wrapping a v8::Isolate, and [V8cGlobalEnvironment](https://cobalt.googlesource.com/cobalt/+/2a8c847d785c1602f60915c8e0112e0aec6a15a5/src/cobalt/script/v8c/v8c_global_environment.h?type=cs&q=V8cGlobalEnvironment&sq=package:%5Ecobalt$&g=0#44) implements GlobalEnvironment by wrapping a v8::Context.  Note that these files are actually quite a bit bigger than just being thin wrappers over the V8 types, as they have more work to do in addition to just implementing their script interfaces, such as [maintaining state necessary for bindings](https://cobalt.googlesource.com/cobalt/+/2a8c847d785c1602f60915c8e0112e0aec6a15a5/src/cobalt/script/v8c/v8c_global_environment.h?type=cs&q=V8cGlobalEnvironment&sq=package:%5Ecobalt$&g=0#175) (interface objects need to be owned somewhere), [serving as a bridge between the Isolate](https://cobalt.googlesource.com/cobalt/+/2a8c847d785c1602f60915c8e0112e0aec6a15a5/src/cobalt/script/v8c/v8c_global_environment.h?type=cs&q=V8cGlobalEnvironment&sq=package:%5Ecobalt$&g=0#49), and [dealing with garbage collection interaction](https://cobalt.googlesource.com/cobalt/+/2a8c847d785c1602f60915c8e0112e0aec6a15a5/src/cobalt/script/v8c/v8c_engine.h?q=V8cEngine&sq=package:%5Ecobalt$&dr=CSs#61) (the engine specific [script::Tracer](https://cobalt.googlesource.com/cobalt/+/2a8c847d785c1602f60915c8e0112e0aec6a15a5/src/cobalt/script/tracer.h?type=cs&q=script::Tracer&sq=package:%5Ecobalt$&g=0#54) is implemented near them).
 
diff --git a/src/cobalt/browser/application.cc b/src/cobalt/browser/application.cc
index 4ab000d..277a0e3 100644
--- a/src/cobalt/browser/application.cc
+++ b/src/cobalt/browser/application.cc
@@ -18,14 +18,10 @@
 
 #include "cobalt/browser/application.h"
 
-#include <algorithm>
-#include <map>
 #include <memory>
 #include <string>
 #include <vector>
 
-#include "base/base64.h"
-#include "base/base64url.h"
 #include "base/command_line.h"
 #include "base/lazy_instance.h"
 #include "base/logging.h"
@@ -57,6 +53,7 @@
 #include "cobalt/base/version_compatibility.h"
 #endif  // defined(COBALT_ENABLE_VERSION_COMPATIBILITY_VALIDATIONS)
 #include "cobalt/base/window_size_changed_event.h"
+#include "cobalt/browser/device_authentication.h"
 #include "cobalt/browser/memory_settings/auto_mem_settings.h"
 #include "cobalt/browser/memory_tracker/tool.h"
 #include "cobalt/browser/switches.h"
@@ -68,8 +65,6 @@
 #endif  // defined(ENABLE_DEBUG_COMMAND_LINE_SWITCHES)
 #include "cobalt/system_window/input_event.h"
 #include "cobalt/trace_event/scoped_trace_to_file.h"
-#include "crypto/hmac.h"
-#include "net/base/escape.h"
 #include "starboard/configuration.h"
 #include "url/gurl.h"
 
@@ -159,56 +154,6 @@
 }
 #endif  // ENABLE_WEBDRIVER
 
-#if SB_API_VERSION >= 11
-std::string NumberToFourByteString(size_t n) {
-  std::string str;
-  str += static_cast<char>(((n & 0xff000000) >> 24));
-  str += static_cast<char>(((n & 0x00ff0000) >> 16));
-  str += static_cast<char>(((n & 0x0000ff00) >> 8));
-  str += static_cast<char>((n & 0x000000ff));
-  return str;
-}
-
-std::string BuildMessageFragment(const std::string& key,
-                                 const std::string& value) {
-  std::string msg_fragment = NumberToFourByteString(key.length()) + key +
-                             NumberToFourByteString(value.length()) + value;
-  return msg_fragment;
-}
-
-std::string ComputeSignature(const std::string& cert_scope,
-                             const std::string& start_time,
-                             const std::string& base_64_secret) {
-  const size_t kSHA256DigestSize = 32;
-
-  // Build signed_msg from cert_scope and start_time.
-  std::string signed_msg = BuildMessageFragment("cert_scope", cert_scope);
-  signed_msg += BuildMessageFragment("start_time", start_time);
-
-  // Decode secret from base_64_secret.
-  std::string secret;
-  base::Base64Decode(base_64_secret, &secret);
-
-  // Generate signature from signed_msg using HMAC-SHA256.
-  unsigned char signature_hash[kSHA256DigestSize] = {0};
-  crypto::HMAC hmac(crypto::HMAC::SHA256);
-  if (!hmac.Init(secret)) {
-    DLOG(ERROR) << "Unable to initialize HMAC-SHA256.";
-  }
-  if (!hmac.Sign(signed_msg, signature_hash, kSHA256DigestSize)) {
-    DLOG(ERROR) << "Unable to sign HMAC-SHA256.";
-  }
-  std::string signature(signature_hash, signature_hash + kSHA256DigestSize);
-
-  // Encode base_64_url_signature from signature.
-  std::string base_64_url_signature;
-  base::Base64UrlEncode(signature, base::Base64UrlEncodePolicy::OMIT_PADDING,
-                        &base_64_url_signature);
-
-  return base_64_url_signature;
-}
-#endif  // SB_API_VERSION >= 11
-
 GURL GetInitialURL() {
   GURL initial_url = GURL(kDefaultURL);
   // Allow the user to override the default URL via a command line parameter.
@@ -224,59 +169,21 @@
   }
 
 #if SB_API_VERSION >= 11
-  // Get cert_scope and base_64_secret
-  const size_t kCertificationScopeLength = 1023;
-  char cert_scope_property[kCertificationScopeLength + 1] = {0};
-  bool result =
-      SbSystemGetProperty(kSbSystemPropertyCertificationScope,
-                          cert_scope_property, kCertificationScopeLength);
-  if (!result) {
-    DLOG(ERROR) << "Unable to get kSbSystemPropertyCertificationScope";
-    return initial_url;
-  }
-  std::string cert_scope(cert_scope_property);
-
-  const size_t kBase64EncodedCertificationSecretLength = 1023;
-  char base_64_secret_property[kBase64EncodedCertificationSecretLength + 1] = {
-      0};
-  result = SbSystemGetProperty(
-      kSbSystemPropertyBase64EncodedCertificationSecret,
-      base_64_secret_property, kBase64EncodedCertificationSecretLength);
-  if (!result) {
-    DLOG(ERROR)
-        << "Unable to get kSbSystemPropertyBase64EncodedCertificationSecret";
-    return initial_url;
-  }
-  std::string base_64_secret(base_64_secret_property);
-
-  // Get current unix time in seconds.
-  std::string start_time =
-      std::to_string(static_cast<int64>(base::Time::Now().ToDoubleT()));
-
-  // Add signed_query to the initial_url.
-  std::map<std::string, std::string> signed_query;
-  signed_query["cert_scope"] = cert_scope;
-  signed_query["start_time"] = start_time;
-  signed_query["sig"] =
-      ComputeSignature(cert_scope, start_time, base_64_secret);
-
+  // Append the device authentication query parameters based on the platform's
+  // certification secret to the initial URL.
   std::string query = initial_url.query();
-  std::map<std::string, std::string>::iterator it = signed_query.begin();
-  while (it != signed_query.end()) {
-    std::string key = it->first;
-    std::string value = it->second;
-
-    if (!query.empty()) query += "&";
-    query += net::EscapeQueryParamValue(key, true);
-    if (!value.empty()) {
-      query += "=" + net::EscapeQueryParamValue(value, true);
-    }
-    it++;
+  std::string device_authentication_query_string =
+      GetDeviceAuthenticationSignedURLQueryString();
+  if (!query.empty() && !device_authentication_query_string.empty()) {
+    query += "&";
   }
+  query += device_authentication_query_string;
 
-  GURL::Replacements replacements;
-  replacements.SetQueryStr(query);
-  initial_url = initial_url.ReplaceComponents(replacements);
+  if (!query.empty()) {
+    GURL::Replacements replacements;
+    replacements.SetQueryStr(query);
+    initial_url = initial_url.ReplaceComponents(replacements);
+  }
 #endif  // SB_API_VERSION >= 11
 
   return initial_url;
diff --git a/src/cobalt/browser/browser.gyp b/src/cobalt/browser/browser.gyp
index 7b04429..5ac69e0 100644
--- a/src/cobalt/browser/browser.gyp
+++ b/src/cobalt/browser/browser.gyp
@@ -28,6 +28,8 @@
         'application.h',
         'browser_module.cc',
         'browser_module.h',
+        'device_authentication.cc',
+        'device_authentication.h',
         'lifecycle_observer.h',
         'memory_settings/auto_mem.cc',
         'memory_settings/auto_mem.h',
@@ -126,7 +128,6 @@
       ],
       'dependencies': [
         '<@(cobalt_platform_dependencies)',
-        '<(DEPTH)/cobalt/accessibility/accessibility.gyp:accessibility',
         '<(DEPTH)/cobalt/account/account.gyp:account',
         '<(DEPTH)/cobalt/audio/audio.gyp:audio',
         '<(DEPTH)/cobalt/base/base.gyp:base',
@@ -219,6 +220,7 @@
       'target_name': 'browser_test',
       'type': '<(gtest_target_type)',
       'sources': [
+        'device_authentication_test.cc',
         'storage_upgrade_handler_test.cc',
         'memory_settings/auto_mem_test.cc',
         'memory_settings/auto_mem_settings_test.cc',
diff --git a/src/cobalt/browser/browser_bindings_gen.gyp b/src/cobalt/browser/browser_bindings_gen.gyp
index 6a50f63..4d50786 100644
--- a/src/cobalt/browser/browser_bindings_gen.gyp
+++ b/src/cobalt/browser/browser_bindings_gen.gyp
@@ -52,7 +52,6 @@
         '../dom/audio_track.idl',
         '../dom/audio_track_list.idl',
         '../dom/blob.idl',
-        '../dom/c_val_key_list.idl',
         '../dom/c_val_view.idl',
         '../dom/camera_3d.idl',
         '../dom/captions/system_caption_settings.idl',
@@ -175,7 +174,6 @@
         '../h5vcc/h5vcc_runtime_event_target.idl',
         '../h5vcc/h5vcc_settings.idl',
         '../h5vcc/h5vcc_sso.idl',
-        '../h5vcc/h5vcc_storage.idl',
         '../h5vcc/h5vcc_system.idl',
         '../h5vcc/h5vcc_trace_event.idl',
 
diff --git a/src/cobalt/browser/debug_console.cc b/src/cobalt/browser/debug_console.cc
index 27f4263..b769196 100644
--- a/src/cobalt/browser/debug_console.cc
+++ b/src/cobalt/browser/debug_console.cc
@@ -56,21 +56,6 @@
   }
 }
 
-// Convert from mode to string.
-std::string DebugConsoleModeIntToString(int mode) {
-  switch (mode) {
-    case debug::console::DebugHub::kDebugConsoleHud:
-      return kDebugConsoleHudString;
-    case debug::console::DebugHub::kDebugConsoleOn:
-      return kDebugConsoleOnString;
-    case debug::console::DebugHub::kDebugConsoleOff:
-      return kDebugConsoleOffString;
-    default:
-      NOTREACHED();
-      return kDebugConsoleOffString;
-  }
-}
-
 // Returns the debug console mode as specified by the command line.
 // If unspecified by the command line, base::nullopt is returned.
 base::Optional<int> GetDebugConsoleModeFromCommandLine() {
@@ -86,45 +71,6 @@
   return base::nullopt;
 }
 
-// Returns the path of the temporary file used to store debug console visibility
-// mode preferences.
-bool GetDebugConsoleModeStoragePath(base::FilePath* out_file_path) {
-  DCHECK(out_file_path);
-  if (base::PathService::Get(cobalt::paths::DIR_COBALT_DEBUG_OUT,
-                             out_file_path)) {
-    *out_file_path = out_file_path->Append("last_debug_console_mode.txt");
-    return true;
-  } else {
-    return false;
-  }
-}
-
-// Saves the specified visibility mode preferences to disk so that they can
-// be restored in another session.  Since this functionality is not critical,
-// we silently do nothing if there is a failure.
-void SaveModeToPreferences(int mode) {
-  std::string mode_string = DebugConsoleModeIntToString(mode);
-  base::FilePath preferences_file;
-  if (GetDebugConsoleModeStoragePath(&preferences_file)) {
-    base::WriteFile(preferences_file, mode_string.c_str(),
-                    static_cast<int>(mode_string.size()));
-  }
-}
-
-// Load debug console visibility mode preferences from disk.  Since this
-// functionality is not critical, we silently do nothing if there is a failure.
-base::Optional<int> LoadModeFromPreferences() {
-  std::string saved_contents;
-  base::FilePath preferences_file;
-  if (GetDebugConsoleModeStoragePath(&preferences_file)) {
-    if (base::ReadFileToString(preferences_file, &saved_contents)) {
-      return DebugConsoleModeStringToInt(saved_contents);
-    }
-  }
-
-  return base::nullopt;
-}
-
 // Returns the debug console's initial visibility mode.
 int GetInitialMode() {
   // First check to see if the mode is explicitly set from the command line.
@@ -134,13 +80,7 @@
     return *mode_from_command_line;
   }
 
-  // Now check to see if mode preferences have been saved to disk.
-  base::Optional<int> mode_from_preferences = LoadModeFromPreferences();
-  if (mode_from_preferences) {
-    return *mode_from_preferences;
-  }
-
-  // If all else fails, default the debug console to off.
+  // By default the debug console is off.
   return debug::console::DebugHub::kDebugConsoleOff;
 }
 
@@ -239,23 +179,13 @@
 #endif  // SB_HAS(ON_SCREEN_KEYBOARD)
 
 void DebugConsole::SetMode(int mode) {
-  int mode_to_save;
-  {
-    base::AutoLock lock(mode_mutex_);
-    mode_ = mode;
-    mode_to_save = mode_;
-  }
-  SaveModeToPreferences(mode_to_save);
+  base::AutoLock lock(mode_mutex_);
+  mode_ = mode;
 }
 
 void DebugConsole::CycleMode() {
-  int mode_to_save;
-  {
-    base::AutoLock lock(mode_mutex_);
-    mode_ = (mode_ + 1) % debug::console::DebugHub::kDebugConsoleNumModes;
-    mode_to_save = mode_;
-  }
-  SaveModeToPreferences(mode_to_save);
+  base::AutoLock lock(mode_mutex_);
+  mode_ = (mode_ + 1) % debug::console::DebugHub::kDebugConsoleNumModes;
 }
 
 int DebugConsole::GetMode() {
diff --git a/src/cobalt/browser/device_authentication.cc b/src/cobalt/browser/device_authentication.cc
new file mode 100644
index 0000000..7c8eeea
--- /dev/null
+++ b/src/cobalt/browser/device_authentication.cc
@@ -0,0 +1,200 @@
+// Copyright 2019 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "cobalt/browser/device_authentication.h"
+
+#include <algorithm>
+#include <map>
+
+#include "base/base64.h"
+#include "base/base64url.h"
+#include "base/logging.h"
+#include "base/time/time.h"
+#include "crypto/hmac.h"
+#include "net/base/escape.h"
+#include "starboard/system.h"
+
+namespace cobalt {
+namespace browser {
+
+#if SB_API_VERSION >= 11
+
+namespace {
+
+constexpr size_t kSHA256DigestSize = 32;
+
+bool ComputeSignatureWithSystemPropertySecret(const std::string& message,
+                                              uint8_t* signature) {
+  const size_t kBase64EncodedCertificationSecretLength = 1023;
+  char base_64_secret_property[kBase64EncodedCertificationSecretLength + 1] = {
+      0};
+  bool result = SbSystemGetProperty(
+      kSbSystemPropertyBase64EncodedCertificationSecret,
+      base_64_secret_property, kBase64EncodedCertificationSecretLength);
+  if (!result) {
+    return false;
+  }
+
+  ComputeHMACSHA256SignatureWithProvidedKey(message, base_64_secret_property,
+                                            signature, kSHA256DigestSize);
+  return true;
+}
+
+bool ComputeSignatureFromSignAPI(const std::string& message,
+                                 uint8_t* signature) {
+  return SbSystemSignWithCertificationSecretKey(
+      reinterpret_cast<const uint8_t*>(message.data()), message.size(),
+      signature, kSHA256DigestSize);
+}
+
+// Check to see if we can query the platform for the secret key.  If so,
+// go ahead and use it to sign the message, otherwise try to use the
+// SbSystemSignWithCertificationSecretKey() method to sign the message.  If
+// both methods fail, return an empty string.
+std::string ComputeBase64Signature(const std::string& message) {
+  uint8_t signature[kSHA256DigestSize];
+
+  if (ComputeSignatureFromSignAPI(message, signature)) {
+    DLOG(INFO) << "Using certification signature provided by "
+               << "SbSystemSignWithCertificationSecretKey().";
+  } else if (ComputeSignatureWithSystemPropertySecret(message, signature)) {
+    DLOG(INFO) << "Using certification key from SbSystemGetProperty().";
+  } else {
+    return std::string();
+  }
+
+  std::string base_64_url_signature;
+  base::Base64UrlEncode(std::string(signature, signature + kSHA256DigestSize),
+                        base::Base64UrlEncodePolicy::OMIT_PADDING,
+                        &base_64_url_signature);
+  return base_64_url_signature;
+}
+
+std::string NumberToFourByteString(size_t n) {
+  std::string str;
+  str += static_cast<char>(((n & 0xff000000) >> 24));
+  str += static_cast<char>(((n & 0x00ff0000) >> 16));
+  str += static_cast<char>(((n & 0x0000ff00) >> 8));
+  str += static_cast<char>((n & 0x000000ff));
+  return str;
+}
+
+// Used by ComputeMessage() to create a message component as a string.
+std::string BuildMessageFragment(const std::string& key,
+                                 const std::string& value) {
+  std::string msg_fragment = NumberToFourByteString(key.length()) + key +
+                             NumberToFourByteString(value.length()) + value;
+  return msg_fragment;
+}
+
+// Returns the certification scope provided by the platform to use with device
+// authentication.
+std::string GetCertScopeFromPlatform() {
+  // Get cert_scope and base_64_secret
+  const size_t kCertificationScopeLength = 1023;
+  char cert_scope_property[kCertificationScopeLength + 1] = {0};
+  bool result =
+      SbSystemGetProperty(kSbSystemPropertyCertificationScope,
+                          cert_scope_property, kCertificationScopeLength);
+  if (!result) {
+    DLOG(ERROR) << "Unable to get kSbSystemPropertyCertificationScope";
+    return std::string();
+  }
+
+  return cert_scope_property;
+}
+
+// Returns the start time provided by the platform for use with device
+// authentication.
+std::string GetStartTime() {
+  return std::to_string(static_cast<int64_t>(base::Time::Now().ToDoubleT()));
+}
+
+}  // namespace
+
+std::string GetDeviceAuthenticationSignedURLQueryString() {
+  std::string cert_scope = GetCertScopeFromPlatform();
+  if (cert_scope.empty()) {
+    LOG(WARNING) << "Error retrieving certification scope required for "
+                 << "device authentication.";
+    return std::string();
+  }
+  std::string start_time = GetStartTime();
+  CHECK(!start_time.empty());
+
+  std::string base64_signature =
+      ComputeBase64Signature(ComputeMessage(cert_scope, start_time));
+
+  return GetDeviceAuthenticationSignedURLQueryStringFromComponents(
+      cert_scope, start_time, base64_signature);
+}
+
+std::string GetDeviceAuthenticationSignedURLQueryStringFromComponents(
+    const std::string& cert_scope, const std::string& start_time,
+    const std::string& base64_signature) {
+  CHECK(!cert_scope.empty());
+  CHECK(!start_time.empty());
+
+  std::map<std::string, std::string> signed_query_components;
+  signed_query_components["cert_scope"] = cert_scope;
+  signed_query_components["start_time"] = start_time;
+  signed_query_components["sig"] = base64_signature;
+
+  std::string query;
+  for (const auto& query_component : signed_query_components) {
+    const std::string& key = query_component.first;
+    const std::string& value = query_component.second;
+
+    if (!query.empty()) query += "&";
+    query += net::EscapeQueryParamValue(key, true);
+    if (!value.empty()) {
+      query += "=" + net::EscapeQueryParamValue(value, true);
+    }
+  }
+
+  return query;
+}
+
+// Combine multiple message components into a string that will be used as the
+// message that we will sign.
+std::string ComputeMessage(const std::string& cert_scope,
+                           const std::string& start_time) {
+  // Build message from cert_scope and start_time.
+  return BuildMessageFragment("cert_scope", cert_scope) +
+         BuildMessageFragment("start_time", start_time);
+}
+
+void ComputeHMACSHA256SignatureWithProvidedKey(const std::string& message,
+                                               const std::string& base64_key,
+                                               uint8_t* signature,
+                                               size_t signature_size_in_bytes) {
+  CHECK_GE(signature_size_in_bytes, 32U);
+
+  std::string key;
+  base::Base64Decode(base64_key, &key);
+
+  // Generate signature from message using HMAC-SHA256.
+  crypto::HMAC hmac(crypto::HMAC::SHA256);
+  if (!hmac.Init(key)) {
+    DLOG(ERROR) << "Unable to initialize HMAC-SHA256.";
+  }
+  if (!hmac.Sign(message, signature, signature_size_in_bytes)) {
+    DLOG(ERROR) << "Unable to sign HMAC-SHA256.";
+  }
+}
+
+#endif  // SB_API_VERSION >= 11
+
+}  // namespace browser
+}  // namespace cobalt
diff --git a/src/cobalt/browser/device_authentication.h b/src/cobalt/browser/device_authentication.h
new file mode 100644
index 0000000..f3ca94b
--- /dev/null
+++ b/src/cobalt/browser/device_authentication.h
@@ -0,0 +1,60 @@
+// Copyright 2019 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef COBALT_BROWSER_DEVICE_AUTHENTICATION_H_
+#define COBALT_BROWSER_DEVICE_AUTHENTICATION_H_
+
+#include <string>
+
+#include "starboard/configuration.h"
+#include "starboard/types.h"
+
+namespace cobalt {
+namespace browser {
+
+#if SB_API_VERSION >= 11
+
+// Returns a base64 encoded SHA256 hash representing the device authentication
+// signature based on the device certification scope and the current time.
+std::string GetDeviceAuthenticationSignedURLQueryString();
+
+// The following methods are deterministic helper functions used in the
+// implementation of the public method above.  They are declared here so that
+// they can be tested in (white box) unit tests.
+
+// Similar to the method above, but all platform queries are resolved to make
+// this a deterministic and testable function.
+std::string GetDeviceAuthenticationSignedURLQueryStringFromComponents(
+    const std::string& cert_scope, const std::string& start_time,
+    const std::string& base64_signature);
+
+// Given the certification parameters, computes a message to be used as input
+// to the signing process.
+std::string ComputeMessage(const std::string& cert_scope,
+                           const std::string& start_time);
+
+// Given a message (arbitrary sequence of bytes) and a base64-encoded key
+// key, compute the HMAC-SHA256 signature and store it in the |signature_hash|
+// out parameter.  Note that 32 bytes will be written to the output hash, it is
+// an error if |signature_hash_size_in_bytes| is less than 32.
+void ComputeHMACSHA256SignatureWithProvidedKey(
+    const std::string& message, const std::string& base64_key,
+    uint8_t* signature_hash, size_t signature_hash_size_in_bytes);
+
+#endif  // SB_API_VERSION >= 11
+
+}  // namespace browser
+}  // namespace cobalt
+
+#endif  // COBALT_BROWSER_DEVICE_AUTHENTICATION_H_
diff --git a/src/cobalt/browser/device_authentication_test.cc b/src/cobalt/browser/device_authentication_test.cc
new file mode 100644
index 0000000..a820d94
--- /dev/null
+++ b/src/cobalt/browser/device_authentication_test.cc
@@ -0,0 +1,146 @@
+// Copyright 2019 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "cobalt/browser/device_authentication.h"
+
+#include "base/base64.h"
+#include "base/base64url.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace cobalt {
+namespace browser {
+
+#if SB_API_VERSION >= 11
+
+constexpr size_t kSHA256DigestSize = 32;
+
+namespace {
+
+std::string ToBase64Message(const std::string& cert_scope,
+                            const std::string& start_time) {
+  std::string base64_message;
+  CHECK(base::Base64Encode(browser::ComputeMessage(cert_scope, start_time),
+                           &base64_message));
+  return base64_message;
+}
+
+std::string ComputeBase64URLSignatureFromBase64Message(
+    const std::string& base64_message, const std::string& base64_secret_key) {
+  uint8_t signature[kSHA256DigestSize];
+
+  std::string message;
+  CHECK(base::Base64Decode(base64_message, &message));
+  ComputeHMACSHA256SignatureWithProvidedKey(message, base64_secret_key,
+                                            signature, kSHA256DigestSize);
+
+  std::string base_64_url_signature;
+  base::Base64UrlEncode(std::string(signature, signature + kSHA256DigestSize),
+                        base::Base64UrlEncodePolicy::OMIT_PADDING,
+                        &base_64_url_signature);
+  return base_64_url_signature;
+}
+
+std::string CreateSignedURLQueryString(const std::string& cert_scope,
+                                       const std::string& start_time,
+                                       const std::string& base64_secret_key) {
+  return GetDeviceAuthenticationSignedURLQueryStringFromComponents(
+      cert_scope, start_time,
+      ComputeBase64URLSignatureFromBase64Message(
+          ToBase64Message(cert_scope, start_time), base64_secret_key));
+}
+
+}  // namespace
+
+TEST(DeviceAuthenticationTest, ComputeMessageTest) {
+  EXPECT_EQ(
+      "AAAACmNlcnRfc2NvcGUAAAANbXktY2VydC1zY29wZQAAAApzdGFydF90aW1lAAAACjE1NjUx"
+      "NjE1NTY=",
+      ToBase64Message("my-cert-scope", "1565161556"));
+  EXPECT_EQ(
+      "AAAACmNlcnRfc2NvcGUAAAATbXktb3RoZXItY2VydC1zY29wZQAAAApzdGFydF90aW1lAAAA"
+      "CjE1NjUxNjMwNjU=",
+      ToBase64Message("my-other-cert-scope", "1565163065"));
+  EXPECT_EQ(
+      "AAAACmNlcnRfc2NvcGUAAAATbXktb3RoZXItY2VydC1zY29wZQAAAApzdGFydF90aW1lAAAA"
+      "CjE1NjUxNjMyNDU=",
+      ToBase64Message("my-other-cert-scope", "1565163245"));
+  EXPECT_EQ(
+      "AAAACmNlcnRfc2NvcGUAAAATbXktb3RoZXItY2VydC1zY29wZQAAAApzdGFydF90aW1lAAAA"
+      "CjI3OTAzMjY2Mzk=",
+      ToBase64Message("my-other-cert-scope", "2790326639"));
+  EXPECT_EQ(
+      "AAAACmNlcnRfc2NvcGUAAAAEeWFjcwAAAApzdGFydF90aW1lAAAACjEzNDAwMDAzMTI=",
+      ToBase64Message("yacs", "1340000312"));
+}
+
+TEST(DeviceAuthenticationTest, ComputeSignatureWithProvidedSecretTest) {
+  EXPECT_EQ("5duoLo5TELzyMQ6Fz-nmtLH3-nR4GrYfJ5RqTWU33LY",
+            ComputeBase64URLSignatureFromBase64Message(
+                "AAAACmNlcnRfc2NvcGUAAAANbXktY2VydC1zY29wZQAAAApzdGFydF90aW1lAA"
+                "AACjE1NjUxNjE1NTY=",
+                "abcdefghijklmnop1234567890abcdefghijklmnopqr"));
+  EXPECT_EQ("zrHJxDjsg60vF-fnGD9J7QaK2fw2QEZD7PIIfHMYmUg",
+            ComputeBase64URLSignatureFromBase64Message(
+                "AAAACmNlcnRfc2NvcGUAAAATbXktb3RoZXItY2VydC1zY29wZQAAAApzdGFydF"
+                "90aW1lAAAACjE1NjUxNjMwNjU=",
+                "abcdefghijklmnop1234567890abcdefghijklmnopqr"));
+  EXPECT_EQ("FnycnpFnmzgcNBIdJoymQvrS0_1uet_bmCtpuAmQR2s",
+            ComputeBase64URLSignatureFromBase64Message(
+                "AAAACmNlcnRfc2NvcGUAAAATbXktb3RoZXItY2VydC1zY29wZQAAAApzdGFydF"
+                "90aW1lAAAACjE1NjUxNjMyNDU=",
+                "abcdefghi5555nop1234567890abcdef5555klmn6666"));
+  EXPECT_EQ("N-nDY11_8HWFKEZPiQenQrC3SXuuPahs-er-n7Xh6ig",
+            ComputeBase64URLSignatureFromBase64Message(
+                "AAAACmNlcnRfc2NvcGUAAAATbXktb3RoZXItY2VydC1zY29wZQAAAApzdGFydF"
+                "90aW1lAAAACjI3OTAzMjY2Mzk=",
+                "abcdefghi5555nop1234567890abcdef5555klmn6666"));
+  EXPECT_EQ("dX0apAEsG2yWm9da6qTded4qd-mqgExeuJam99z-AHk",
+            ComputeBase64URLSignatureFromBase64Message(
+                "AAAACmNlcnRfc2NvcGUAAAAEeWFjcwAAAApzdGFydF90aW1lAAAACjEzNDAwMD"
+                "AzMTI=",
+                "11111111111111111111111111111111111111111111"));
+}
+
+// This is the main end-to-end test for device authentication.
+TEST(DeviceAuthenticationTest,
+     GetDeviceAuthenticationSignedURLQueryStringFromComponentsTest) {
+  EXPECT_EQ(
+      "cert_scope=my-cert-scope&sig=5duoLo5TELzyMQ6Fz-nmtLH3-"
+      "nR4GrYfJ5RqTWU33LY&start_time=1565161556",
+      CreateSignedURLQueryString(
+          "my-cert-scope", "1565161556",
+          "abcdefghijklmnop1234567890abcdefghijklmnopqr"));
+  EXPECT_EQ(
+      "cert_scope=my-other-cert-scope&sig="
+      "Lf2zunrdhjH8q3ehdUy0tneTtamWigcyTgQl7zxWgnQ&start_time=123456789",
+      CreateSignedURLQueryString(
+          "my-other-cert-scope", "123456789",
+          "abcdefghijklmnop1234567890abcdefghijklmnopqr"));
+  EXPECT_EQ(
+      "cert_scope=my-other-cert-scope&sig="
+      "c5YZB0Rtv8Nf8gLSbE052ZvCUEpouP28nUq77FEgg88&start_time=11111111",
+      CreateSignedURLQueryString(
+          "my-other-cert-scope", "11111111",
+          "11111111111111111111111111111111111111111111"));
+  EXPECT_EQ(
+      "cert_scope=yacs&sig=YKjLEzSl2_ub-05Ajaww0HOOPElxEPUc4SEiQnGAfaE&start_"
+      "time=11111111",
+      CreateSignedURLQueryString(
+          "yacs", "11111111", "11111111111111111111111111111111111111111111"));
+}
+
+#endif  // SB_API_VERSION >= 11
+
+}  // namespace browser
+}  // namespace cobalt
diff --git a/src/cobalt/browser/trace_manager.h b/src/cobalt/browser/trace_manager.h
deleted file mode 100644
index b774f11..0000000
--- a/src/cobalt/browser/trace_manager.h
+++ /dev/null
@@ -1,78 +0,0 @@
-// Copyright 2016 The Cobalt Authors. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#ifndef COBALT_BROWSER_TRACE_MANAGER_H_
-#define COBALT_BROWSER_TRACE_MANAGER_H_
-
-#include <map>
-#include <string>
-
-#include "base/threading/thread_checker.h"
-#include "cobalt/debug/console/command_manager.h"
-#include "cobalt/trace_event/event_parser.h"
-#include "cobalt/trace_event/scoped_trace_to_file.h"
-
-namespace cobalt {
-namespace browser {
-
-// Wrapper class which wraps all trace related stuff.
-class TraceManager {
- public:
-  // Returns whether there's a trace that is active.
-  static bool IsTracing();
-
-  TraceManager();
-
-  // Called by browser module when an input event is produced.
-  void OnInputEventProduced();
-
-  // Message handler callback for trace message from debug console.
-  void OnTraceMessage(const std::string& message);
-
-  // Message handler callback for input trace message from debug console.
-  void OnInputTraceMessage(const std::string& message);
-
-  // Called when receiving and finishing receiving parsed trace events.
-  void OnReceiveTraceEvent(
-      const scoped_refptr<trace_event::EventParser::ScopedEvent>& event);
-  void OnFinishReceiveTraceEvent();
-
- private:
-  typedef std::multimap<int64,
-                        scoped_refptr<trace_event::EventParser::ScopedEvent> >
-      StartTimeToEventMap;
-
-  // The message loop on which we'll do all our work.
-  MessageLoop* const self_message_loop_;
-
-  // Command handler object for trace command from the debug console.
-  debug::console::ConsoleCommandManager::CommandHandler trace_command_handler_;
-  // Command handler object for input trace command from the debug console.
-  debug::console::ConsoleCommandManager::CommandHandler
-      input_trace_command_handler_;
-  // Whether input tracing is enabled.
-  bool input_tracing_enabled_;
-
-  THREAD_CHECKER(thread_checker_);
-  // This object can be set to start a trace if a hotkey (like F3) is pressed.
-  // While initialized, it means that a trace is on-going.
-  scoped_ptr<trace_event::ScopedTraceToFile> trace_to_file_;
-  // Record of a list of events we're interested in, ordered by starting time.
-  StartTimeToEventMap start_time_to_event_map_;
-};
-
-}  // namespace browser
-}  // namespace cobalt
-
-#endif  // COBALT_BROWSER_TRACE_MANAGER_H_
diff --git a/src/cobalt/browser/web_module.cc b/src/cobalt/browser/web_module.cc
index e1ba8b4..40bce3c 100644
--- a/src/cobalt/browser/web_module.cc
+++ b/src/cobalt/browser/web_module.cc
@@ -594,6 +594,7 @@
   media_source_registry_.reset(new dom::MediaSource::Registry);
 
   media_session_client_ = media_session::MediaSessionClient::Create();
+  media_session_client_->SetMediaPlayerFactory(data.web_media_player_factory);
 
   system_caption_settings_ = new cobalt::dom::captions::SystemCaptionSettings();
 
@@ -1076,6 +1077,7 @@
 void WebModule::Impl::SetWebMediaPlayerFactory(
     media::WebMediaPlayerFactory* web_media_player_factory) {
   window_->set_web_media_player_factory(web_media_player_factory);
+  media_session_client_->SetMediaPlayerFactory(web_media_player_factory);
 }
 
 void WebModule::Impl::SetApplicationState(base::ApplicationState state) {
diff --git a/src/cobalt/browser/web_module.h b/src/cobalt/browser/web_module.h
index 5e94dbb..7f8ad01 100644
--- a/src/cobalt/browser/web_module.h
+++ b/src/cobalt/browser/web_module.h
@@ -26,7 +26,6 @@
 #include "base/synchronization/waitable_event.h"
 #include "base/threading/thread.h"
 #include "base/threading/thread_checker.h"
-#include "cobalt/accessibility/tts_engine.h"
 #include "cobalt/base/address_sanitizer.h"
 #include "cobalt/base/source_location.h"
 #include "cobalt/browser/lifecycle_observer.h"
diff --git a/src/cobalt/build/all.gyp b/src/cobalt/build/all.gyp
index a53c52f..002d625 100644
--- a/src/cobalt/build/all.gyp
+++ b/src/cobalt/build/all.gyp
@@ -31,7 +31,6 @@
       'type': 'none',
       'dependencies': [
         '<(DEPTH)/base/base.gyp:base_unittests',
-        '<(DEPTH)/cobalt/accessibility/accessibility_test.gyp:*',
         '<(DEPTH)/cobalt/audio/audio.gyp:*',
         '<(DEPTH)/cobalt/audio/audio_test.gyp:*',
         '<(DEPTH)/cobalt/base/base.gyp:*',
@@ -98,6 +97,11 @@
             '<(DEPTH)/starboard/starboard_all.gyp:starboard_all',
           ],
         }],
+        ['target_arch in ["x86", "x64", "arm", "arm64"]', {
+          'dependencies': [
+            '<(DEPTH)/starboard/elf_loader/elf_loader.gyp:elf_loader',
+          ],
+        }],
       ],
     },
   ],
diff --git a/src/cobalt/build/build.id b/src/cobalt/build/build.id
index 80c1e89..45fb3e0 100644
--- a/src/cobalt/build/build.id
+++ b/src/cobalt/build/build.id
@@ -1 +1 @@
-217501
\ No newline at end of file
+220639
\ No newline at end of file
diff --git a/src/cobalt/build/cobalt_archive.py b/src/cobalt/build/cobalt_archive.py
index 9e50fec..e91dfe7 100644
--- a/src/cobalt/build/cobalt_archive.py
+++ b/src/cobalt/build/cobalt_archive.py
@@ -80,7 +80,9 @@
       include_black_box_tests=include_black_box_tests)
 
 
-def ExtractCobaltArchive(input_zip_path, output_directory_path, outstream=None):
+def ExtractCobaltArchive(input_zip_path,
+                         output_directory_path,
+                         outstream=None):
   """Returns True if the extract operation was successfull."""
   archive = CobaltArchive(archive_zip_path=input_zip_path)
   return archive.ExtractTo(output_dir=output_directory_path,
@@ -183,7 +185,7 @@
           perms = _GetFilePermissions(file_path)
           if (stat.S_IXUSR) & perms:
             executable_files.append(archive_path)
-        # TODO(niteris): Use and implement _FoldIdenticalFiles() to reduce
+        # TODO: Use and implement _FoldIdenticalFiles() to reduce
         # duplicate files. This will help platforms like nxswitch which include
         # a lot of duplicate files for the sdk.
         try:
@@ -295,7 +297,8 @@
   """Finds necessary files and makes an archive."""
   _MakeDirs(os.path.dirname(output_archive_path))
   out_directory = paths.BuildOutputDirectory(platform_name, config)
-  root_dir = os.path.abspath(os.path.join(out_directory, '..', '..'))
+  root_dir = os.path.abspath(
+      os.path.normpath(os.path.join(out_directory, '..', '..')))
   flist = filelist.FileList()
   inc_paths = _GetDeployPaths(platform_name, config)
   logging.info('Adding binary files to bundle...')
@@ -427,7 +430,7 @@
   if not config:
     config = raw_input('config: ')
   if not output_zip:
-    output_zip = raw_input('output_zip: ')
+    output_zip = os.path.normpath(raw_input('output_zip: '))
   if not output_zip.endswith('.zip'):
     output_zip += '.zip'
   start_time = time.time()
@@ -515,7 +518,7 @@
     _MakeCobaltPlatformArchive(
         platform=args.platform,
         config=args.config,
-        output_zip=args.out_path,
+        output_zip=os.path.normpath(args.out_path),
         include_black_box_tests=args.include_black_box_tests)
     sys.exit(0)
   elif args.extract:
diff --git a/src/cobalt/build/cobalt_archive_content/__cobalt_archive/finalize_decompression/decompress.py b/src/cobalt/build/cobalt_archive_content/__cobalt_archive/finalize_decompression/decompress.py
index 8224154..3f34428 100644
--- a/src/cobalt/build/cobalt_archive_content/__cobalt_archive/finalize_decompression/decompress.py
+++ b/src/cobalt/build/cobalt_archive_content/__cobalt_archive/finalize_decompression/decompress.py
@@ -65,33 +65,32 @@
     os.makedirs(path)
 
 
-def _ExtractSymlinks(cwd, symlink_dir_list):
+def _ExtractSymlinks(archive_root, symlink_dir_list):
   """Recreates symlinks on Windows and linux."""
-  prev_cwd = os.getcwd()
-  cwd = os.path.normpath(cwd)
+  archive_root = os.path.normpath(archive_root)
+  if _IS_WINDOWS:
+    archive_root = '\\\\?\\' + archive_root
+  for link_path, real_path in symlink_dir_list:
+    # link_path and real_path are assumed to be both relative paths.
+    real_path = os.path.normpath(real_path)
+    link_path = os.path.normpath(link_path)
+    target_path = os.path.relpath(real_path, os.path.dirname(link_path))
+    link_path = os.path.join(archive_root, link_path)
+    if not os.path.exists(os.path.dirname(link_path)):
+      _MakeDirs(os.path.dirname(link_path))
+    _CreateSymlink(target_path, link_path)
+  # Check that all the symlinks point to an existing directory.
   all_ok = True
-  try:
-    os.chdir(cwd)
-    for link_path, real_path in symlink_dir_list:
-      link_path = os.path.abspath(link_path)
-      real_path = os.path.abspath(real_path)
-      if not os.path.exists(real_path):
-        _MakeDirs(real_path)
-      if not os.path.exists(os.path.dirname(link_path)):
-        _MakeDirs(os.path.dirname(link_path))
-      assert os.path.exists(real_path)
-      real_path = os.path.relpath(real_path)
-      _CreateSymlink(real_path, link_path)
-      if not os.path.exists(real_path):
-        logging.critical('Error target folder %s does not exist.',
-                         os.path.abspath(real_path))
-        all_ok = False
-      if not os.path.exists(link_path):
-        logging.critical('Error link folder %s does not exist.',
-                         os.path.abspath(link_path))
-        all_ok = False
-  finally:
-    os.chdir(prev_cwd)
+  cwd = os.getcwd()
+  for link_path, _ in symlink_dir_list:
+    link_path = os.path.join(archive_root, link_path)
+    try:
+      # This will raise an error if the link points to an invalid directory.
+      os.chdir(link_path)
+    except:
+      all_ok = False
+    finally:
+      os.chdir(cwd)
   if not all_ok:
     logging.critical('\n*******************************************'
                      '\nErrors happended during symlink extraction.'
diff --git a/src/cobalt/build/cobalt_archive_content/__cobalt_archive/run/readme.md b/src/cobalt/build/cobalt_archive_content/__cobalt_archive/run/readme.md
index 44ba4c9..df9ef75 100644
--- a/src/cobalt/build/cobalt_archive_content/__cobalt_archive/run/readme.md
+++ b/src/cobalt/build/cobalt_archive_content/__cobalt_archive/run/readme.md
@@ -12,8 +12,6 @@
 therefore *stable* and any Cobalt archive can be run the same binaries/tests

 using the same shell command.

 

-Please see go/cobalt-archive-doc

-

 Example:

     python __cobalt_archive/run/run_cobalt.py --device_id IP

 

diff --git a/src/cobalt/build/cobalt_archive_test.py b/src/cobalt/build/cobalt_archive_test.py
index 086a897..fe232e5 100644
--- a/src/cobalt/build/cobalt_archive_test.py
+++ b/src/cobalt/build/cobalt_archive_test.py
@@ -79,6 +79,7 @@
     tf = filelist_test.TempFileSystem()
     tf.Clear()
     tf.Make()
+    flist.AddFile(tf.root_in_tmp, tf.test_txt)
     flist.AddSymLink(tf.root_in_tmp, tf.sym_dir)
     bundle_zip = os.path.join(tf.root_tmp, 'bundle.zip')
     car = cobalt_archive.CobaltArchive(bundle_zip)
diff --git a/src/cobalt/build/cobalt_configuration.gypi b/src/cobalt/build/cobalt_configuration.gypi
index 76ffb6b..9feeca1 100644
--- a/src/cobalt/build/cobalt_configuration.gypi
+++ b/src/cobalt/build/cobalt_configuration.gypi
@@ -534,6 +534,7 @@
       'COBALT_BUILD_TYPE_GOLD',
       'COBALT_FORCE_CSP',
       'COBALT_FORCE_HTTPS',
+      'OFFICIAL_BUILD',  # Chromium base relies on this.
       'TRACING_DISABLED',
     ],
   },
diff --git a/src/cobalt/build/cobalt_configuration.py b/src/cobalt/build/cobalt_configuration.py
index f377bff..eae97f9 100644
--- a/src/cobalt/build/cobalt_configuration.py
+++ b/src/cobalt/build/cobalt_configuration.py
@@ -120,7 +120,6 @@
 
   def GetTestTargets(self):
     return [
-        'accessibility_test',
         'audio_test',
         'base_test',
         'base_unittests',
diff --git a/src/cobalt/content/icu/icudata.lst b/src/cobalt/content/icu/icudata.lst
deleted file mode 100644
index ae20b1e..0000000
--- a/src/cobalt/content/icu/icudata.lst
+++ /dev/null
@@ -1,230 +0,0 @@
-brkitr/char.brk
-brkitr/en.res
-brkitr/en_US.res
-brkitr/fi.res
-brkitr/ja.res
-brkitr/line.brk
-brkitr/line_fi.brk
-brkitr/res_index.res
-brkitr/root.res
-brkitr/sent.brk
-brkitr/thaidict.ctd
-brkitr/title.brk
-brkitr/word.brk
-brkitr/word_ja.brk
-cnvalias.icu
-coll/da.res
-coll/de.res
-coll/en.res
-coll/en_GB.res
-coll/en_US.res
-coll/es.res
-coll/fi.res
-coll/fr.res
-coll/invuca.icu
-coll/it.res
-coll/ja.res
-coll/ko.res
-coll/nb.res
-coll/nl.res
-coll/pl.res
-coll/pt.res
-coll/pt_BR.res
-coll/pt_PT.res
-coll/res_index.res
-coll/root.res
-coll/ru.res
-coll/sv.res
-coll/ucadata.icu
-coll/zh.res
-coll/zh_Hans.res
-coll/zh_Hans_CN.res
-coll/zh_Hant.res
-coll/zh_Hant_TW.res
-confusables.cfu
-curr/da.res
-curr/de.res
-curr/en.res
-curr/es.res
-curr/fi.res
-curr/fr.res
-curr/it.res
-curr/ja.res
-curr/ko.res
-curr/nb.res
-curr/nl.res
-curr/no.res
-curr/pl.res
-curr/pool.res
-curr/pt.res
-curr/pt_PT.res
-curr/root.res
-curr/ru.res
-curr/sv.res
-curr/zh.res
-curr/zh_CN.res
-curr/zh_Hans.res
-curr/zh_Hans_CN.res
-curr/zh_Hant.res
-curr/zh_Hant_TW.res
-curr/zh_TW.res
-da.res
-de.res
-en.res
-en_GB.res
-en_US.res
-es.res
-fi.res
-fr.res
-gb18030.cnv
-ibm-1089_P100-1995.cnv
-ibm-1373_P100-2002.cnv
-ibm-1383_P110-1999.cnv
-ibm-33722_P12A_P12A-2004_U2.cnv
-ibm-5354_P100-1998.cnv
-ibm-878_P100-1996.cnv
-ibm-9005_X110-2007.cnv
-ibm-943_P15A-2003.cnv
-ibm-9447_P100-2002.cnv
-ibm-970_P110_P110-2006_U2.cnv
-icustd.res
-icuver.res
-it.res
-ja.res
-keyTypeData.res
-ko.res
-lang/da.res
-lang/de.res
-lang/en.res
-lang/es.res
-lang/fi.res
-lang/fr.res
-lang/it.res
-lang/ja.res
-lang/ko.res
-lang/nb.res
-lang/nl.res
-lang/no.res
-lang/pl.res
-lang/pool.res
-lang/pt.res
-lang/pt_PT.res
-lang/root.res
-lang/ru.res
-lang/sv.res
-lang/zh.res
-lang/zh_CN.res
-lang/zh_Hans.res
-lang/zh_Hans_CN.res
-lang/zh_Hant.res
-lang/zh_Hant_TW.res
-lang/zh_TW.res
-likelySubtags.res
-metaZones.res
-nb.res
-nfc.nrm
-nfkc.nrm
-nfkc_cf.nrm
-nl.res
-no.res
-numberingSystems.res
-pl.res
-plurals.res
-pnames.icu
-pool.res
-pt.res
-pt_BR.res
-pt_PT.res
-rbnf/da.res
-rbnf/de.res
-rbnf/en.res
-rbnf/es.res
-rbnf/fi.res
-rbnf/fr.res
-rbnf/it.res
-rbnf/ja.res
-rbnf/ko.res
-rbnf/nb.res
-rbnf/nl.res
-rbnf/pl.res
-rbnf/pt.res
-rbnf/pt_PT.res
-rbnf/res_index.res
-rbnf/root.res
-rbnf/ru.res
-rbnf/sv.res
-rbnf/zh.res
-rbnf/zh_Hant.res
-region/da.res
-region/de.res
-region/en.res
-region/es.res
-region/fi.res
-region/fr.res
-region/it.res
-region/ja.res
-region/ko.res
-region/nb.res
-region/nl.res
-region/no.res
-region/pl.res
-region/pool.res
-region/pt.res
-region/pt_PT.res
-region/root.res
-region/ru.res
-region/sv.res
-region/zh.res
-region/zh_CN.res
-region/zh_Hans.res
-region/zh_Hans_CN.res
-region/zh_Hant.res
-region/zh_Hant_TW.res
-region/zh_TW.res
-res_index.res
-rfc3491.spp
-root.res
-ru.res
-supplementalData.res
-sv.res
-timezoneTypes.res
-unames.icu
-uts46.nrm
-windows-874-2000.cnv
-windows-950-2000.cnv
-windowsZones.res
-zh.res
-zh_CN.res
-zh_Hans.res
-zh_Hans_CN.res
-zh_Hant.res
-zh_Hant_TW.res
-zh_TW.res
-zone/da.res
-zone/de.res
-zone/en.res
-zone/en_GB.res
-zone/es.res
-zone/fi.res
-zone/fr.res
-zone/it.res
-zone/ja.res
-zone/ko.res
-zone/nb.res
-zone/nl.res
-zone/no.res
-zone/pl.res
-zone/pool.res
-zone/pt.res
-zone/pt_PT.res
-zone/root.res
-zone/ru.res
-zone/sv.res
-zone/zh.res
-zone/zh_CN.res
-zone/zh_Hans.res
-zone/zh_Hans_CN.res
-zone/zh_Hant.res
-zone/zh_Hant_TW.res
-zone/zh_TW.res
-zoneinfo64.res
diff --git a/src/cobalt/content/icu/icudata_linux.lst b/src/cobalt/content/icu/icudata_linux.lst
deleted file mode 100644
index ae20b1e..0000000
--- a/src/cobalt/content/icu/icudata_linux.lst
+++ /dev/null
@@ -1,230 +0,0 @@
-brkitr/char.brk
-brkitr/en.res
-brkitr/en_US.res
-brkitr/fi.res
-brkitr/ja.res
-brkitr/line.brk
-brkitr/line_fi.brk
-brkitr/res_index.res
-brkitr/root.res
-brkitr/sent.brk
-brkitr/thaidict.ctd
-brkitr/title.brk
-brkitr/word.brk
-brkitr/word_ja.brk
-cnvalias.icu
-coll/da.res
-coll/de.res
-coll/en.res
-coll/en_GB.res
-coll/en_US.res
-coll/es.res
-coll/fi.res
-coll/fr.res
-coll/invuca.icu
-coll/it.res
-coll/ja.res
-coll/ko.res
-coll/nb.res
-coll/nl.res
-coll/pl.res
-coll/pt.res
-coll/pt_BR.res
-coll/pt_PT.res
-coll/res_index.res
-coll/root.res
-coll/ru.res
-coll/sv.res
-coll/ucadata.icu
-coll/zh.res
-coll/zh_Hans.res
-coll/zh_Hans_CN.res
-coll/zh_Hant.res
-coll/zh_Hant_TW.res
-confusables.cfu
-curr/da.res
-curr/de.res
-curr/en.res
-curr/es.res
-curr/fi.res
-curr/fr.res
-curr/it.res
-curr/ja.res
-curr/ko.res
-curr/nb.res
-curr/nl.res
-curr/no.res
-curr/pl.res
-curr/pool.res
-curr/pt.res
-curr/pt_PT.res
-curr/root.res
-curr/ru.res
-curr/sv.res
-curr/zh.res
-curr/zh_CN.res
-curr/zh_Hans.res
-curr/zh_Hans_CN.res
-curr/zh_Hant.res
-curr/zh_Hant_TW.res
-curr/zh_TW.res
-da.res
-de.res
-en.res
-en_GB.res
-en_US.res
-es.res
-fi.res
-fr.res
-gb18030.cnv
-ibm-1089_P100-1995.cnv
-ibm-1373_P100-2002.cnv
-ibm-1383_P110-1999.cnv
-ibm-33722_P12A_P12A-2004_U2.cnv
-ibm-5354_P100-1998.cnv
-ibm-878_P100-1996.cnv
-ibm-9005_X110-2007.cnv
-ibm-943_P15A-2003.cnv
-ibm-9447_P100-2002.cnv
-ibm-970_P110_P110-2006_U2.cnv
-icustd.res
-icuver.res
-it.res
-ja.res
-keyTypeData.res
-ko.res
-lang/da.res
-lang/de.res
-lang/en.res
-lang/es.res
-lang/fi.res
-lang/fr.res
-lang/it.res
-lang/ja.res
-lang/ko.res
-lang/nb.res
-lang/nl.res
-lang/no.res
-lang/pl.res
-lang/pool.res
-lang/pt.res
-lang/pt_PT.res
-lang/root.res
-lang/ru.res
-lang/sv.res
-lang/zh.res
-lang/zh_CN.res
-lang/zh_Hans.res
-lang/zh_Hans_CN.res
-lang/zh_Hant.res
-lang/zh_Hant_TW.res
-lang/zh_TW.res
-likelySubtags.res
-metaZones.res
-nb.res
-nfc.nrm
-nfkc.nrm
-nfkc_cf.nrm
-nl.res
-no.res
-numberingSystems.res
-pl.res
-plurals.res
-pnames.icu
-pool.res
-pt.res
-pt_BR.res
-pt_PT.res
-rbnf/da.res
-rbnf/de.res
-rbnf/en.res
-rbnf/es.res
-rbnf/fi.res
-rbnf/fr.res
-rbnf/it.res
-rbnf/ja.res
-rbnf/ko.res
-rbnf/nb.res
-rbnf/nl.res
-rbnf/pl.res
-rbnf/pt.res
-rbnf/pt_PT.res
-rbnf/res_index.res
-rbnf/root.res
-rbnf/ru.res
-rbnf/sv.res
-rbnf/zh.res
-rbnf/zh_Hant.res
-region/da.res
-region/de.res
-region/en.res
-region/es.res
-region/fi.res
-region/fr.res
-region/it.res
-region/ja.res
-region/ko.res
-region/nb.res
-region/nl.res
-region/no.res
-region/pl.res
-region/pool.res
-region/pt.res
-region/pt_PT.res
-region/root.res
-region/ru.res
-region/sv.res
-region/zh.res
-region/zh_CN.res
-region/zh_Hans.res
-region/zh_Hans_CN.res
-region/zh_Hant.res
-region/zh_Hant_TW.res
-region/zh_TW.res
-res_index.res
-rfc3491.spp
-root.res
-ru.res
-supplementalData.res
-sv.res
-timezoneTypes.res
-unames.icu
-uts46.nrm
-windows-874-2000.cnv
-windows-950-2000.cnv
-windowsZones.res
-zh.res
-zh_CN.res
-zh_Hans.res
-zh_Hans_CN.res
-zh_Hant.res
-zh_Hant_TW.res
-zh_TW.res
-zone/da.res
-zone/de.res
-zone/en.res
-zone/en_GB.res
-zone/es.res
-zone/fi.res
-zone/fr.res
-zone/it.res
-zone/ja.res
-zone/ko.res
-zone/nb.res
-zone/nl.res
-zone/no.res
-zone/pl.res
-zone/pool.res
-zone/pt.res
-zone/pt_PT.res
-zone/root.res
-zone/ru.res
-zone/sv.res
-zone/zh.res
-zone/zh_CN.res
-zone/zh_Hans.res
-zone/zh_Hans_CN.res
-zone/zh_Hant.res
-zone/zh_Hant_TW.res
-zone/zh_TW.res
-zoneinfo64.res
diff --git a/src/cobalt/content/icu/icudt56b/af.res b/src/cobalt/content/icu/icudt56b/af.res
index b1d9054..284d6c5 100644
--- a/src/cobalt/content/icu/icudt56b/af.res
+++ b/src/cobalt/content/icu/icudt56b/af.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ak.res b/src/cobalt/content/icu/icudt56b/ak.res
index cceee96..27239e7 100644
--- a/src/cobalt/content/icu/icudt56b/ak.res
+++ b/src/cobalt/content/icu/icudt56b/ak.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/am.res b/src/cobalt/content/icu/icudt56b/am.res
index 0bd9037..81d2671 100644
--- a/src/cobalt/content/icu/icudt56b/am.res
+++ b/src/cobalt/content/icu/icudt56b/am.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/an.res b/src/cobalt/content/icu/icudt56b/an.res
index 3a6ec3e..f7fe9ba 100644
--- a/src/cobalt/content/icu/icudt56b/an.res
+++ b/src/cobalt/content/icu/icudt56b/an.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ar.res b/src/cobalt/content/icu/icudt56b/ar.res
index adf9eae..99cbf2a 100644
--- a/src/cobalt/content/icu/icudt56b/ar.res
+++ b/src/cobalt/content/icu/icudt56b/ar.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ast.res b/src/cobalt/content/icu/icudt56b/ast.res
index 49ffb94..62b23e3 100644
--- a/src/cobalt/content/icu/icudt56b/ast.res
+++ b/src/cobalt/content/icu/icudt56b/ast.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/az.res b/src/cobalt/content/icu/icudt56b/az.res
index 1154cd7..900086d 100644
--- a/src/cobalt/content/icu/icudt56b/az.res
+++ b/src/cobalt/content/icu/icudt56b/az.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/be.res b/src/cobalt/content/icu/icudt56b/be.res
index b1d5c70..9717219 100644
--- a/src/cobalt/content/icu/icudt56b/be.res
+++ b/src/cobalt/content/icu/icudt56b/be.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/bem.res b/src/cobalt/content/icu/icudt56b/bem.res
index bf4be4b..34efeb9 100644
--- a/src/cobalt/content/icu/icudt56b/bem.res
+++ b/src/cobalt/content/icu/icudt56b/bem.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/bg.res b/src/cobalt/content/icu/icudt56b/bg.res
index 9278fe9..f15f52e 100644
--- a/src/cobalt/content/icu/icudt56b/bg.res
+++ b/src/cobalt/content/icu/icudt56b/bg.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/bn.res b/src/cobalt/content/icu/icudt56b/bn.res
index 76a84b8..d002c6d 100644
--- a/src/cobalt/content/icu/icudt56b/bn.res
+++ b/src/cobalt/content/icu/icudt56b/bn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/br.res b/src/cobalt/content/icu/icudt56b/br.res
index 49cf07d..9fd2d85 100644
--- a/src/cobalt/content/icu/icudt56b/br.res
+++ b/src/cobalt/content/icu/icudt56b/br.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/bs.res b/src/cobalt/content/icu/icudt56b/bs.res
index 6244431..beca030 100644
--- a/src/cobalt/content/icu/icudt56b/bs.res
+++ b/src/cobalt/content/icu/icudt56b/bs.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ca.res b/src/cobalt/content/icu/icudt56b/ca.res
index 77bf740..cd9c556 100644
--- a/src/cobalt/content/icu/icudt56b/ca.res
+++ b/src/cobalt/content/icu/icudt56b/ca.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ckb.res b/src/cobalt/content/icu/icudt56b/ckb.res
index 7faa641..309e301 100644
--- a/src/cobalt/content/icu/icudt56b/ckb.res
+++ b/src/cobalt/content/icu/icudt56b/ckb.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/ar.res b/src/cobalt/content/icu/icudt56b/coll/ar.res
index 8bd55fd..2535ac9 100644
--- a/src/cobalt/content/icu/icudt56b/coll/ar.res
+++ b/src/cobalt/content/icu/icudt56b/coll/ar.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/bg.res b/src/cobalt/content/icu/icudt56b/coll/bg.res
index 869c575..c317e0a 100644
--- a/src/cobalt/content/icu/icudt56b/coll/bg.res
+++ b/src/cobalt/content/icu/icudt56b/coll/bg.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/bn.res b/src/cobalt/content/icu/icudt56b/coll/bn.res
index b4d18d5..17f10ff 100644
--- a/src/cobalt/content/icu/icudt56b/coll/bn.res
+++ b/src/cobalt/content/icu/icudt56b/coll/bn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/ca.res b/src/cobalt/content/icu/icudt56b/coll/ca.res
index 55c6cf7..21c7b5c 100644
--- a/src/cobalt/content/icu/icudt56b/coll/ca.res
+++ b/src/cobalt/content/icu/icudt56b/coll/ca.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/cs.res b/src/cobalt/content/icu/icudt56b/coll/cs.res
index 96090e9..30dd56e 100644
--- a/src/cobalt/content/icu/icudt56b/coll/cs.res
+++ b/src/cobalt/content/icu/icudt56b/coll/cs.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/da.res b/src/cobalt/content/icu/icudt56b/coll/da.res
index 6d6a1e6..30dd56e 100644
--- a/src/cobalt/content/icu/icudt56b/coll/da.res
+++ b/src/cobalt/content/icu/icudt56b/coll/da.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/de.res b/src/cobalt/content/icu/icudt56b/coll/de.res
index 6cbffd1..0af8d4a 100644
--- a/src/cobalt/content/icu/icudt56b/coll/de.res
+++ b/src/cobalt/content/icu/icudt56b/coll/de.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/de_AT.res b/src/cobalt/content/icu/icudt56b/coll/de_AT.res
index e157e2d..032fc75 100644
--- a/src/cobalt/content/icu/icudt56b/coll/de_AT.res
+++ b/src/cobalt/content/icu/icudt56b/coll/de_AT.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/el.res b/src/cobalt/content/icu/icudt56b/coll/el.res
index a6d79ba..c317e0a 100644
--- a/src/cobalt/content/icu/icudt56b/coll/el.res
+++ b/src/cobalt/content/icu/icudt56b/coll/el.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/es.res b/src/cobalt/content/icu/icudt56b/coll/es.res
index 3e4f4cd..41f43af 100644
--- a/src/cobalt/content/icu/icudt56b/coll/es.res
+++ b/src/cobalt/content/icu/icudt56b/coll/es.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/et.res b/src/cobalt/content/icu/icudt56b/coll/et.res
index 5b86126..c317e0a 100644
--- a/src/cobalt/content/icu/icudt56b/coll/et.res
+++ b/src/cobalt/content/icu/icudt56b/coll/et.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/fa.res b/src/cobalt/content/icu/icudt56b/coll/fa.res
index 7deab50..c317e0a 100644
--- a/src/cobalt/content/icu/icudt56b/coll/fa.res
+++ b/src/cobalt/content/icu/icudt56b/coll/fa.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/fi.res b/src/cobalt/content/icu/icudt56b/coll/fi.res
index 49a7a34..41f43af 100644
--- a/src/cobalt/content/icu/icudt56b/coll/fi.res
+++ b/src/cobalt/content/icu/icudt56b/coll/fi.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/fil.res b/src/cobalt/content/icu/icudt56b/coll/fil.res
index e1f7ec5..c317e0a 100644
--- a/src/cobalt/content/icu/icudt56b/coll/fil.res
+++ b/src/cobalt/content/icu/icudt56b/coll/fil.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/fr_CA.res b/src/cobalt/content/icu/icudt56b/coll/fr_CA.res
index 82e6d81..c317e0a 100644
--- a/src/cobalt/content/icu/icudt56b/coll/fr_CA.res
+++ b/src/cobalt/content/icu/icudt56b/coll/fr_CA.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/gu.res b/src/cobalt/content/icu/icudt56b/coll/gu.res
index 49bb592..c317e0a 100644
--- a/src/cobalt/content/icu/icudt56b/coll/gu.res
+++ b/src/cobalt/content/icu/icudt56b/coll/gu.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/he.res b/src/cobalt/content/icu/icudt56b/coll/he.res
index c74874f..30dd56e 100644
--- a/src/cobalt/content/icu/icudt56b/coll/he.res
+++ b/src/cobalt/content/icu/icudt56b/coll/he.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/hi.res b/src/cobalt/content/icu/icudt56b/coll/hi.res
index 67f3464..c317e0a 100644
--- a/src/cobalt/content/icu/icudt56b/coll/hi.res
+++ b/src/cobalt/content/icu/icudt56b/coll/hi.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/hr.res b/src/cobalt/content/icu/icudt56b/coll/hr.res
index 157fc6e..30dd56e 100644
--- a/src/cobalt/content/icu/icudt56b/coll/hr.res
+++ b/src/cobalt/content/icu/icudt56b/coll/hr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/hu.res b/src/cobalt/content/icu/icudt56b/coll/hu.res
index 6f1d185..c317e0a 100644
--- a/src/cobalt/content/icu/icudt56b/coll/hu.res
+++ b/src/cobalt/content/icu/icudt56b/coll/hu.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/ja.res b/src/cobalt/content/icu/icudt56b/coll/ja.res
index f713c01..07694e1 100644
--- a/src/cobalt/content/icu/icudt56b/coll/ja.res
+++ b/src/cobalt/content/icu/icudt56b/coll/ja.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/kn.res b/src/cobalt/content/icu/icudt56b/coll/kn.res
index 998784d..17f10ff 100644
--- a/src/cobalt/content/icu/icudt56b/coll/kn.res
+++ b/src/cobalt/content/icu/icudt56b/coll/kn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/ko.res b/src/cobalt/content/icu/icudt56b/coll/ko.res
index c3bbcb6..4d0bb22 100644
--- a/src/cobalt/content/icu/icudt56b/coll/ko.res
+++ b/src/cobalt/content/icu/icudt56b/coll/ko.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/lt.res b/src/cobalt/content/icu/icudt56b/coll/lt.res
index ac6e4f8..c317e0a 100644
--- a/src/cobalt/content/icu/icudt56b/coll/lt.res
+++ b/src/cobalt/content/icu/icudt56b/coll/lt.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/lv.res b/src/cobalt/content/icu/icudt56b/coll/lv.res
index 5827c9a..c317e0a 100644
--- a/src/cobalt/content/icu/icudt56b/coll/lv.res
+++ b/src/cobalt/content/icu/icudt56b/coll/lv.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/ml.res b/src/cobalt/content/icu/icudt56b/coll/ml.res
index 98a0b6b..c317e0a 100644
--- a/src/cobalt/content/icu/icudt56b/coll/ml.res
+++ b/src/cobalt/content/icu/icudt56b/coll/ml.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/mr.res b/src/cobalt/content/icu/icudt56b/coll/mr.res
index 3538c54..c317e0a 100644
--- a/src/cobalt/content/icu/icudt56b/coll/mr.res
+++ b/src/cobalt/content/icu/icudt56b/coll/mr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/nb.res b/src/cobalt/content/icu/icudt56b/coll/nb.res
index f567163..30dd56e 100644
--- a/src/cobalt/content/icu/icudt56b/coll/nb.res
+++ b/src/cobalt/content/icu/icudt56b/coll/nb.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/nn.res b/src/cobalt/content/icu/icudt56b/coll/nn.res
index f567163..30dd56e 100644
--- a/src/cobalt/content/icu/icudt56b/coll/nn.res
+++ b/src/cobalt/content/icu/icudt56b/coll/nn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/pl.res b/src/cobalt/content/icu/icudt56b/coll/pl.res
index fabe651..c317e0a 100644
--- a/src/cobalt/content/icu/icudt56b/coll/pl.res
+++ b/src/cobalt/content/icu/icudt56b/coll/pl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/ro.res b/src/cobalt/content/icu/icudt56b/coll/ro.res
index 1e28918..c317e0a 100644
--- a/src/cobalt/content/icu/icudt56b/coll/ro.res
+++ b/src/cobalt/content/icu/icudt56b/coll/ro.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/root.res b/src/cobalt/content/icu/icudt56b/coll/root.res
index b3749b7..47912c6 100644
--- a/src/cobalt/content/icu/icudt56b/coll/root.res
+++ b/src/cobalt/content/icu/icudt56b/coll/root.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/ru.res b/src/cobalt/content/icu/icudt56b/coll/ru.res
index 869c575..c317e0a 100644
--- a/src/cobalt/content/icu/icudt56b/coll/ru.res
+++ b/src/cobalt/content/icu/icudt56b/coll/ru.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/sk.res b/src/cobalt/content/icu/icudt56b/coll/sk.res
index 05a3caa..30dd56e 100644
--- a/src/cobalt/content/icu/icudt56b/coll/sk.res
+++ b/src/cobalt/content/icu/icudt56b/coll/sk.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/sl.res b/src/cobalt/content/icu/icudt56b/coll/sl.res
index 52c6055..c317e0a 100644
--- a/src/cobalt/content/icu/icudt56b/coll/sl.res
+++ b/src/cobalt/content/icu/icudt56b/coll/sl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/sr.res b/src/cobalt/content/icu/icudt56b/coll/sr.res
index 36536db..c317e0a 100644
--- a/src/cobalt/content/icu/icudt56b/coll/sr.res
+++ b/src/cobalt/content/icu/icudt56b/coll/sr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/sr_Latn.res b/src/cobalt/content/icu/icudt56b/coll/sr_Latn.res
index 157fc6e..30dd56e 100644
--- a/src/cobalt/content/icu/icudt56b/coll/sr_Latn.res
+++ b/src/cobalt/content/icu/icudt56b/coll/sr_Latn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/sv.res b/src/cobalt/content/icu/icudt56b/coll/sv.res
index 92d6887..90c4801 100644
--- a/src/cobalt/content/icu/icudt56b/coll/sv.res
+++ b/src/cobalt/content/icu/icudt56b/coll/sv.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/ta.res b/src/cobalt/content/icu/icudt56b/coll/ta.res
index c7c7bc5..c317e0a 100644
--- a/src/cobalt/content/icu/icudt56b/coll/ta.res
+++ b/src/cobalt/content/icu/icudt56b/coll/ta.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/te.res b/src/cobalt/content/icu/icudt56b/coll/te.res
index c046b2a..c317e0a 100644
--- a/src/cobalt/content/icu/icudt56b/coll/te.res
+++ b/src/cobalt/content/icu/icudt56b/coll/te.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/th.res b/src/cobalt/content/icu/icudt56b/coll/th.res
index 454ddb0..c317e0a 100644
--- a/src/cobalt/content/icu/icudt56b/coll/th.res
+++ b/src/cobalt/content/icu/icudt56b/coll/th.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/tr.res b/src/cobalt/content/icu/icudt56b/coll/tr.res
index f38e549..30dd56e 100644
--- a/src/cobalt/content/icu/icudt56b/coll/tr.res
+++ b/src/cobalt/content/icu/icudt56b/coll/tr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/uk.res b/src/cobalt/content/icu/icudt56b/coll/uk.res
index 6503052..c317e0a 100644
--- a/src/cobalt/content/icu/icudt56b/coll/uk.res
+++ b/src/cobalt/content/icu/icudt56b/coll/uk.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/vi.res b/src/cobalt/content/icu/icudt56b/coll/vi.res
index 6a66847..17f10ff 100644
--- a/src/cobalt/content/icu/icudt56b/coll/vi.res
+++ b/src/cobalt/content/icu/icudt56b/coll/vi.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/zh.res b/src/cobalt/content/icu/icudt56b/coll/zh.res
index ebdecdf..ac8e0eb 100644
--- a/src/cobalt/content/icu/icudt56b/coll/zh.res
+++ b/src/cobalt/content/icu/icudt56b/coll/zh.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/cs.res b/src/cobalt/content/icu/icudt56b/cs.res
index 4a98bce..5d830fd 100644
--- a/src/cobalt/content/icu/icudt56b/cs.res
+++ b/src/cobalt/content/icu/icudt56b/cs.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/am.res b/src/cobalt/content/icu/icudt56b/curr/am.res
index 38e80e7..d03272b 100644
--- a/src/cobalt/content/icu/icudt56b/curr/am.res
+++ b/src/cobalt/content/icu/icudt56b/curr/am.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/ar.res b/src/cobalt/content/icu/icudt56b/curr/ar.res
index fb21df4..98164d9 100644
--- a/src/cobalt/content/icu/icudt56b/curr/ar.res
+++ b/src/cobalt/content/icu/icudt56b/curr/ar.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/bg.res b/src/cobalt/content/icu/icudt56b/curr/bg.res
index 1b9fde0..4342e4b 100644
--- a/src/cobalt/content/icu/icudt56b/curr/bg.res
+++ b/src/cobalt/content/icu/icudt56b/curr/bg.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/ca.res b/src/cobalt/content/icu/icudt56b/curr/ca.res
index 51c117a..0586b88 100644
--- a/src/cobalt/content/icu/icudt56b/curr/ca.res
+++ b/src/cobalt/content/icu/icudt56b/curr/ca.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/cs.res b/src/cobalt/content/icu/icudt56b/curr/cs.res
index fb87c8b..8c7b25b 100644
--- a/src/cobalt/content/icu/icudt56b/curr/cs.res
+++ b/src/cobalt/content/icu/icudt56b/curr/cs.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/da.res b/src/cobalt/content/icu/icudt56b/curr/da.res
index 4150d3e..5e1633e 100644
--- a/src/cobalt/content/icu/icudt56b/curr/da.res
+++ b/src/cobalt/content/icu/icudt56b/curr/da.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/de.res b/src/cobalt/content/icu/icudt56b/curr/de.res
index 18ab163..ea5ac0d 100644
--- a/src/cobalt/content/icu/icudt56b/curr/de.res
+++ b/src/cobalt/content/icu/icudt56b/curr/de.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/de_CH.res b/src/cobalt/content/icu/icudt56b/curr/de_CH.res
index f3ae405..3b58f47 100644
--- a/src/cobalt/content/icu/icudt56b/curr/de_CH.res
+++ b/src/cobalt/content/icu/icudt56b/curr/de_CH.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/el.res b/src/cobalt/content/icu/icudt56b/curr/el.res
index 97e80e0..65496d2 100644
--- a/src/cobalt/content/icu/icudt56b/curr/el.res
+++ b/src/cobalt/content/icu/icudt56b/curr/el.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/en.res b/src/cobalt/content/icu/icudt56b/curr/en.res
index d7ed88f..f56ebfd 100644
--- a/src/cobalt/content/icu/icudt56b/curr/en.res
+++ b/src/cobalt/content/icu/icudt56b/curr/en.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/en_001.res b/src/cobalt/content/icu/icudt56b/curr/en_001.res
index 291eb3c..eff5ebd 100644
--- a/src/cobalt/content/icu/icudt56b/curr/en_001.res
+++ b/src/cobalt/content/icu/icudt56b/curr/en_001.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/en_150.res b/src/cobalt/content/icu/icudt56b/curr/en_150.res
index cec5a7c..aca0bbd 100644
--- a/src/cobalt/content/icu/icudt56b/curr/en_150.res
+++ b/src/cobalt/content/icu/icudt56b/curr/en_150.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/en_AU.res b/src/cobalt/content/icu/icudt56b/curr/en_AU.res
index b3caf09..e641c63 100644
--- a/src/cobalt/content/icu/icudt56b/curr/en_AU.res
+++ b/src/cobalt/content/icu/icudt56b/curr/en_AU.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/en_CA.res b/src/cobalt/content/icu/icudt56b/curr/en_CA.res
index f4cd95b..d9f5a75 100644
--- a/src/cobalt/content/icu/icudt56b/curr/en_CA.res
+++ b/src/cobalt/content/icu/icudt56b/curr/en_CA.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/en_GB.res b/src/cobalt/content/icu/icudt56b/curr/en_GB.res
index 9f0e72a..8ba46c9 100644
--- a/src/cobalt/content/icu/icudt56b/curr/en_GB.res
+++ b/src/cobalt/content/icu/icudt56b/curr/en_GB.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/en_IN.res b/src/cobalt/content/icu/icudt56b/curr/en_IN.res
index a6ed044..29c193d 100644
--- a/src/cobalt/content/icu/icudt56b/curr/en_IN.res
+++ b/src/cobalt/content/icu/icudt56b/curr/en_IN.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/en_NZ.res b/src/cobalt/content/icu/icudt56b/curr/en_NZ.res
index ba6d617..86fa398 100644
--- a/src/cobalt/content/icu/icudt56b/curr/en_NZ.res
+++ b/src/cobalt/content/icu/icudt56b/curr/en_NZ.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/en_ZA.res b/src/cobalt/content/icu/icudt56b/curr/en_ZA.res
index c182fea..1180613 100644
--- a/src/cobalt/content/icu/icudt56b/curr/en_ZA.res
+++ b/src/cobalt/content/icu/icudt56b/curr/en_ZA.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/es.res b/src/cobalt/content/icu/icudt56b/curr/es.res
index 7a95655..381198a 100644
--- a/src/cobalt/content/icu/icudt56b/curr/es.res
+++ b/src/cobalt/content/icu/icudt56b/curr/es.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/es_419.res b/src/cobalt/content/icu/icudt56b/curr/es_419.res
index 7f4d660..9dc0fab 100644
--- a/src/cobalt/content/icu/icudt56b/curr/es_419.res
+++ b/src/cobalt/content/icu/icudt56b/curr/es_419.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/es_AR.res b/src/cobalt/content/icu/icudt56b/curr/es_AR.res
index debc621..16f648e 100644
--- a/src/cobalt/content/icu/icudt56b/curr/es_AR.res
+++ b/src/cobalt/content/icu/icudt56b/curr/es_AR.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/es_MX.res b/src/cobalt/content/icu/icudt56b/curr/es_MX.res
index 5be672f..51f4c08 100644
--- a/src/cobalt/content/icu/icudt56b/curr/es_MX.res
+++ b/src/cobalt/content/icu/icudt56b/curr/es_MX.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/es_US.res b/src/cobalt/content/icu/icudt56b/curr/es_US.res
index ac708dc..3968033 100644
--- a/src/cobalt/content/icu/icudt56b/curr/es_US.res
+++ b/src/cobalt/content/icu/icudt56b/curr/es_US.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/fa.res b/src/cobalt/content/icu/icudt56b/curr/fa.res
index 776ac57..af94bfe 100644
--- a/src/cobalt/content/icu/icudt56b/curr/fa.res
+++ b/src/cobalt/content/icu/icudt56b/curr/fa.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/fi.res b/src/cobalt/content/icu/icudt56b/curr/fi.res
index 0a4deea..3b8a6bf 100644
--- a/src/cobalt/content/icu/icudt56b/curr/fi.res
+++ b/src/cobalt/content/icu/icudt56b/curr/fi.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/fil.res b/src/cobalt/content/icu/icudt56b/curr/fil.res
index 5b7dfb5..51309f4 100644
--- a/src/cobalt/content/icu/icudt56b/curr/fil.res
+++ b/src/cobalt/content/icu/icudt56b/curr/fil.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/fr.res b/src/cobalt/content/icu/icudt56b/curr/fr.res
index 0db2683..97ef8fa 100644
--- a/src/cobalt/content/icu/icudt56b/curr/fr.res
+++ b/src/cobalt/content/icu/icudt56b/curr/fr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/fr_CA.res b/src/cobalt/content/icu/icudt56b/curr/fr_CA.res
index 44e1b23..42c1269 100644
--- a/src/cobalt/content/icu/icudt56b/curr/fr_CA.res
+++ b/src/cobalt/content/icu/icudt56b/curr/fr_CA.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/he.res b/src/cobalt/content/icu/icudt56b/curr/he.res
index f0539b4..9f4899e 100644
--- a/src/cobalt/content/icu/icudt56b/curr/he.res
+++ b/src/cobalt/content/icu/icudt56b/curr/he.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/hi.res b/src/cobalt/content/icu/icudt56b/curr/hi.res
index 5522f67..6daffbb 100644
--- a/src/cobalt/content/icu/icudt56b/curr/hi.res
+++ b/src/cobalt/content/icu/icudt56b/curr/hi.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/hr.res b/src/cobalt/content/icu/icudt56b/curr/hr.res
index dbbf434..bd52f65 100644
--- a/src/cobalt/content/icu/icudt56b/curr/hr.res
+++ b/src/cobalt/content/icu/icudt56b/curr/hr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/hu.res b/src/cobalt/content/icu/icudt56b/curr/hu.res
index 8e4dc16..ebc0000 100644
--- a/src/cobalt/content/icu/icudt56b/curr/hu.res
+++ b/src/cobalt/content/icu/icudt56b/curr/hu.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/id.res b/src/cobalt/content/icu/icudt56b/curr/id.res
index 4e32144..7955ab5 100644
--- a/src/cobalt/content/icu/icudt56b/curr/id.res
+++ b/src/cobalt/content/icu/icudt56b/curr/id.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/in.res b/src/cobalt/content/icu/icudt56b/curr/in.res
index 50826b6..12a327a 100644
--- a/src/cobalt/content/icu/icudt56b/curr/in.res
+++ b/src/cobalt/content/icu/icudt56b/curr/in.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/it.res b/src/cobalt/content/icu/icudt56b/curr/it.res
index 8e8c66b..f5fd979 100644
--- a/src/cobalt/content/icu/icudt56b/curr/it.res
+++ b/src/cobalt/content/icu/icudt56b/curr/it.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/iw.res b/src/cobalt/content/icu/icudt56b/curr/iw.res
index bd7ea47..e1db668 100644
--- a/src/cobalt/content/icu/icudt56b/curr/iw.res
+++ b/src/cobalt/content/icu/icudt56b/curr/iw.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/ja.res b/src/cobalt/content/icu/icudt56b/curr/ja.res
index f0c7c85..aaf9db9 100644
--- a/src/cobalt/content/icu/icudt56b/curr/ja.res
+++ b/src/cobalt/content/icu/icudt56b/curr/ja.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/ko.res b/src/cobalt/content/icu/icudt56b/curr/ko.res
index e67daf0..80bec29 100644
--- a/src/cobalt/content/icu/icudt56b/curr/ko.res
+++ b/src/cobalt/content/icu/icudt56b/curr/ko.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/lt.res b/src/cobalt/content/icu/icudt56b/curr/lt.res
index 53354e7..3f89f8e 100644
--- a/src/cobalt/content/icu/icudt56b/curr/lt.res
+++ b/src/cobalt/content/icu/icudt56b/curr/lt.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/lv.res b/src/cobalt/content/icu/icudt56b/curr/lv.res
index 7dee64c..f1119e4 100644
--- a/src/cobalt/content/icu/icudt56b/curr/lv.res
+++ b/src/cobalt/content/icu/icudt56b/curr/lv.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/nb.res b/src/cobalt/content/icu/icudt56b/curr/nb.res
index 04ac59c..8ac97dc 100644
--- a/src/cobalt/content/icu/icudt56b/curr/nb.res
+++ b/src/cobalt/content/icu/icudt56b/curr/nb.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/nl.res b/src/cobalt/content/icu/icudt56b/curr/nl.res
index ea0bd1d..9d5d453 100644
--- a/src/cobalt/content/icu/icudt56b/curr/nl.res
+++ b/src/cobalt/content/icu/icudt56b/curr/nl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/no.res b/src/cobalt/content/icu/icudt56b/curr/no.res
index 3d7fe4c..6772320 100644
--- a/src/cobalt/content/icu/icudt56b/curr/no.res
+++ b/src/cobalt/content/icu/icudt56b/curr/no.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/pl.res b/src/cobalt/content/icu/icudt56b/curr/pl.res
index 220049f..2c6ea20 100644
--- a/src/cobalt/content/icu/icudt56b/curr/pl.res
+++ b/src/cobalt/content/icu/icudt56b/curr/pl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/pool.res b/src/cobalt/content/icu/icudt56b/curr/pool.res
index 7d84f6c..7a0f86d 100644
--- a/src/cobalt/content/icu/icudt56b/curr/pool.res
+++ b/src/cobalt/content/icu/icudt56b/curr/pool.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/pt.res b/src/cobalt/content/icu/icudt56b/curr/pt.res
index d4a9a4d..14659a9 100644
--- a/src/cobalt/content/icu/icudt56b/curr/pt.res
+++ b/src/cobalt/content/icu/icudt56b/curr/pt.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/pt_PT.res b/src/cobalt/content/icu/icudt56b/curr/pt_PT.res
index 70ff325..d469d8f 100644
--- a/src/cobalt/content/icu/icudt56b/curr/pt_PT.res
+++ b/src/cobalt/content/icu/icudt56b/curr/pt_PT.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/ro.res b/src/cobalt/content/icu/icudt56b/curr/ro.res
index 3916026..d3a5d1e 100644
--- a/src/cobalt/content/icu/icudt56b/curr/ro.res
+++ b/src/cobalt/content/icu/icudt56b/curr/ro.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/root.res b/src/cobalt/content/icu/icudt56b/curr/root.res
index 1c39d46..1161352 100644
--- a/src/cobalt/content/icu/icudt56b/curr/root.res
+++ b/src/cobalt/content/icu/icudt56b/curr/root.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/ru.res b/src/cobalt/content/icu/icudt56b/curr/ru.res
index 0eb467b..80681bb 100644
--- a/src/cobalt/content/icu/icudt56b/curr/ru.res
+++ b/src/cobalt/content/icu/icudt56b/curr/ru.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/sk.res b/src/cobalt/content/icu/icudt56b/curr/sk.res
index e09c767..7b3ff60 100644
--- a/src/cobalt/content/icu/icudt56b/curr/sk.res
+++ b/src/cobalt/content/icu/icudt56b/curr/sk.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/sl.res b/src/cobalt/content/icu/icudt56b/curr/sl.res
index fadcb69..62dac74 100644
--- a/src/cobalt/content/icu/icudt56b/curr/sl.res
+++ b/src/cobalt/content/icu/icudt56b/curr/sl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/sr.res b/src/cobalt/content/icu/icudt56b/curr/sr.res
index 3d7500e..bd0f5f9 100644
--- a/src/cobalt/content/icu/icudt56b/curr/sr.res
+++ b/src/cobalt/content/icu/icudt56b/curr/sr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/supplementalData.res b/src/cobalt/content/icu/icudt56b/curr/supplementalData.res
index 6f8b6fb..40ea0ed 100644
--- a/src/cobalt/content/icu/icudt56b/curr/supplementalData.res
+++ b/src/cobalt/content/icu/icudt56b/curr/supplementalData.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/sv.res b/src/cobalt/content/icu/icudt56b/curr/sv.res
index 7f80b65..a408a3d 100644
--- a/src/cobalt/content/icu/icudt56b/curr/sv.res
+++ b/src/cobalt/content/icu/icudt56b/curr/sv.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/sw.res b/src/cobalt/content/icu/icudt56b/curr/sw.res
index 6a8395e..54865e7 100644
--- a/src/cobalt/content/icu/icudt56b/curr/sw.res
+++ b/src/cobalt/content/icu/icudt56b/curr/sw.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/th.res b/src/cobalt/content/icu/icudt56b/curr/th.res
index af7f775..53ada41 100644
--- a/src/cobalt/content/icu/icudt56b/curr/th.res
+++ b/src/cobalt/content/icu/icudt56b/curr/th.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/tl.res b/src/cobalt/content/icu/icudt56b/curr/tl.res
index 4c27952..d6dc867 100644
--- a/src/cobalt/content/icu/icudt56b/curr/tl.res
+++ b/src/cobalt/content/icu/icudt56b/curr/tl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/tr.res b/src/cobalt/content/icu/icudt56b/curr/tr.res
index 486b255..4a5350f 100644
--- a/src/cobalt/content/icu/icudt56b/curr/tr.res
+++ b/src/cobalt/content/icu/icudt56b/curr/tr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/uk.res b/src/cobalt/content/icu/icudt56b/curr/uk.res
index 7ff314f..d5614a7 100644
--- a/src/cobalt/content/icu/icudt56b/curr/uk.res
+++ b/src/cobalt/content/icu/icudt56b/curr/uk.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/vi.res b/src/cobalt/content/icu/icudt56b/curr/vi.res
index f0bd3b4..05268ae 100644
--- a/src/cobalt/content/icu/icudt56b/curr/vi.res
+++ b/src/cobalt/content/icu/icudt56b/curr/vi.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/zh.res b/src/cobalt/content/icu/icudt56b/curr/zh.res
index a5e638b..2408d07 100644
--- a/src/cobalt/content/icu/icudt56b/curr/zh.res
+++ b/src/cobalt/content/icu/icudt56b/curr/zh.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/zh_CN.res b/src/cobalt/content/icu/icudt56b/curr/zh_CN.res
index 2509851..27d3f68 100644
--- a/src/cobalt/content/icu/icudt56b/curr/zh_CN.res
+++ b/src/cobalt/content/icu/icudt56b/curr/zh_CN.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/zh_HK.res b/src/cobalt/content/icu/icudt56b/curr/zh_HK.res
index f28f2ae..a73cf4b 100644
--- a/src/cobalt/content/icu/icudt56b/curr/zh_HK.res
+++ b/src/cobalt/content/icu/icudt56b/curr/zh_HK.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/zh_Hans.res b/src/cobalt/content/icu/icudt56b/curr/zh_Hans.res
index 4a3ea50..8e70ff1 100644
--- a/src/cobalt/content/icu/icudt56b/curr/zh_Hans.res
+++ b/src/cobalt/content/icu/icudt56b/curr/zh_Hans.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/zh_Hans_CN.res b/src/cobalt/content/icu/icudt56b/curr/zh_Hans_CN.res
index 2e50d66..f4a45c8 100644
--- a/src/cobalt/content/icu/icudt56b/curr/zh_Hans_CN.res
+++ b/src/cobalt/content/icu/icudt56b/curr/zh_Hans_CN.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/zh_Hans_SG.res b/src/cobalt/content/icu/icudt56b/curr/zh_Hans_SG.res
index 557c60c..6d3a2fc 100644
--- a/src/cobalt/content/icu/icudt56b/curr/zh_Hans_SG.res
+++ b/src/cobalt/content/icu/icudt56b/curr/zh_Hans_SG.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/zh_Hant.res b/src/cobalt/content/icu/icudt56b/curr/zh_Hant.res
index 9e2be04..c548a56 100644
--- a/src/cobalt/content/icu/icudt56b/curr/zh_Hant.res
+++ b/src/cobalt/content/icu/icudt56b/curr/zh_Hant.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/zh_Hant_HK.res b/src/cobalt/content/icu/icudt56b/curr/zh_Hant_HK.res
index c5d17b5..e2400f9 100644
--- a/src/cobalt/content/icu/icudt56b/curr/zh_Hant_HK.res
+++ b/src/cobalt/content/icu/icudt56b/curr/zh_Hant_HK.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/zh_Hant_TW.res b/src/cobalt/content/icu/icudt56b/curr/zh_Hant_TW.res
index 2e50d66..f4a45c8 100644
--- a/src/cobalt/content/icu/icudt56b/curr/zh_Hant_TW.res
+++ b/src/cobalt/content/icu/icudt56b/curr/zh_Hant_TW.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/zh_SG.res b/src/cobalt/content/icu/icudt56b/curr/zh_SG.res
index 99a36d3..b14dc1b 100644
--- a/src/cobalt/content/icu/icudt56b/curr/zh_SG.res
+++ b/src/cobalt/content/icu/icudt56b/curr/zh_SG.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/zh_TW.res b/src/cobalt/content/icu/icudt56b/curr/zh_TW.res
index 9f762c8..f2809d3 100644
--- a/src/cobalt/content/icu/icudt56b/curr/zh_TW.res
+++ b/src/cobalt/content/icu/icudt56b/curr/zh_TW.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/cy.res b/src/cobalt/content/icu/icudt56b/cy.res
index 1d9f4f8..c95f86c 100644
--- a/src/cobalt/content/icu/icudt56b/cy.res
+++ b/src/cobalt/content/icu/icudt56b/cy.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/da.res b/src/cobalt/content/icu/icudt56b/da.res
index b395a15..a3de9c7 100644
--- a/src/cobalt/content/icu/icudt56b/da.res
+++ b/src/cobalt/content/icu/icudt56b/da.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/de.res b/src/cobalt/content/icu/icudt56b/de.res
index 1d8c9c0..e7fe508 100644
--- a/src/cobalt/content/icu/icudt56b/de.res
+++ b/src/cobalt/content/icu/icudt56b/de.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/de_AT.res b/src/cobalt/content/icu/icudt56b/de_AT.res
index 5774578..c92705d 100644
--- a/src/cobalt/content/icu/icudt56b/de_AT.res
+++ b/src/cobalt/content/icu/icudt56b/de_AT.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/de_CH.res b/src/cobalt/content/icu/icudt56b/de_CH.res
index df893d0..469e876 100644
--- a/src/cobalt/content/icu/icudt56b/de_CH.res
+++ b/src/cobalt/content/icu/icudt56b/de_CH.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ee.res b/src/cobalt/content/icu/icudt56b/ee.res
index 9eac1a6..4e2f32e 100644
--- a/src/cobalt/content/icu/icudt56b/ee.res
+++ b/src/cobalt/content/icu/icudt56b/ee.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/el.res b/src/cobalt/content/icu/icudt56b/el.res
index 00123ec..b9153f6 100644
--- a/src/cobalt/content/icu/icudt56b/el.res
+++ b/src/cobalt/content/icu/icudt56b/el.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/en.res b/src/cobalt/content/icu/icudt56b/en.res
index 76a284b..68d6647 100644
--- a/src/cobalt/content/icu/icudt56b/en.res
+++ b/src/cobalt/content/icu/icudt56b/en.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/en_001.res b/src/cobalt/content/icu/icudt56b/en_001.res
index bffa753..4873c68 100644
--- a/src/cobalt/content/icu/icudt56b/en_001.res
+++ b/src/cobalt/content/icu/icudt56b/en_001.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/en_150.res b/src/cobalt/content/icu/icudt56b/en_150.res
index 1c3c688..0ee0565 100644
--- a/src/cobalt/content/icu/icudt56b/en_150.res
+++ b/src/cobalt/content/icu/icudt56b/en_150.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/en_AU.res b/src/cobalt/content/icu/icudt56b/en_AU.res
index d91db86..46f72cc 100644
--- a/src/cobalt/content/icu/icudt56b/en_AU.res
+++ b/src/cobalt/content/icu/icudt56b/en_AU.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/en_CA.res b/src/cobalt/content/icu/icudt56b/en_CA.res
index f399bd6..3f627db 100644
--- a/src/cobalt/content/icu/icudt56b/en_CA.res
+++ b/src/cobalt/content/icu/icudt56b/en_CA.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/en_GB.res b/src/cobalt/content/icu/icudt56b/en_GB.res
index 8a06e8c..b24b84e 100644
--- a/src/cobalt/content/icu/icudt56b/en_GB.res
+++ b/src/cobalt/content/icu/icudt56b/en_GB.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/en_IN.res b/src/cobalt/content/icu/icudt56b/en_IN.res
index 89b03dc..f26ad6d 100644
--- a/src/cobalt/content/icu/icudt56b/en_IN.res
+++ b/src/cobalt/content/icu/icudt56b/en_IN.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/en_NZ.res b/src/cobalt/content/icu/icudt56b/en_NZ.res
index bf1edbf..cfeff38 100644
--- a/src/cobalt/content/icu/icudt56b/en_NZ.res
+++ b/src/cobalt/content/icu/icudt56b/en_NZ.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/en_US.res b/src/cobalt/content/icu/icudt56b/en_US.res
index 0c29168..7a2eb6d 100644
--- a/src/cobalt/content/icu/icudt56b/en_US.res
+++ b/src/cobalt/content/icu/icudt56b/en_US.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/en_ZA.res b/src/cobalt/content/icu/icudt56b/en_ZA.res
index 93a8bfd..1cab436 100644
--- a/src/cobalt/content/icu/icudt56b/en_ZA.res
+++ b/src/cobalt/content/icu/icudt56b/en_ZA.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/eo.res b/src/cobalt/content/icu/icudt56b/eo.res
index 2e26830..d519476 100644
--- a/src/cobalt/content/icu/icudt56b/eo.res
+++ b/src/cobalt/content/icu/icudt56b/eo.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/es.res b/src/cobalt/content/icu/icudt56b/es.res
index a444148..bc143fd 100644
--- a/src/cobalt/content/icu/icudt56b/es.res
+++ b/src/cobalt/content/icu/icudt56b/es.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/es_419.res b/src/cobalt/content/icu/icudt56b/es_419.res
index b38d6ab..efa69dc 100644
--- a/src/cobalt/content/icu/icudt56b/es_419.res
+++ b/src/cobalt/content/icu/icudt56b/es_419.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/es_AR.res b/src/cobalt/content/icu/icudt56b/es_AR.res
index 36da772..b69693b 100644
--- a/src/cobalt/content/icu/icudt56b/es_AR.res
+++ b/src/cobalt/content/icu/icudt56b/es_AR.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/es_ES.res b/src/cobalt/content/icu/icudt56b/es_ES.res
index 0c29168..7a2eb6d 100644
--- a/src/cobalt/content/icu/icudt56b/es_ES.res
+++ b/src/cobalt/content/icu/icudt56b/es_ES.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/es_MX.res b/src/cobalt/content/icu/icudt56b/es_MX.res
index 6013a38..15f03cc 100644
--- a/src/cobalt/content/icu/icudt56b/es_MX.res
+++ b/src/cobalt/content/icu/icudt56b/es_MX.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/es_US.res b/src/cobalt/content/icu/icudt56b/es_US.res
index a525677..29ef112 100644
--- a/src/cobalt/content/icu/icudt56b/es_US.res
+++ b/src/cobalt/content/icu/icudt56b/es_US.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/et.res b/src/cobalt/content/icu/icudt56b/et.res
index 3fc0978..3c26d48 100644
--- a/src/cobalt/content/icu/icudt56b/et.res
+++ b/src/cobalt/content/icu/icudt56b/et.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/eu.res b/src/cobalt/content/icu/icudt56b/eu.res
index 21cb93e..657c9e7 100644
--- a/src/cobalt/content/icu/icudt56b/eu.res
+++ b/src/cobalt/content/icu/icudt56b/eu.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/fa.res b/src/cobalt/content/icu/icudt56b/fa.res
index 0080495..42b2153 100644
--- a/src/cobalt/content/icu/icudt56b/fa.res
+++ b/src/cobalt/content/icu/icudt56b/fa.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/fi.res b/src/cobalt/content/icu/icudt56b/fi.res
index 2448243..bb939bd 100644
--- a/src/cobalt/content/icu/icudt56b/fi.res
+++ b/src/cobalt/content/icu/icudt56b/fi.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/fil.res b/src/cobalt/content/icu/icudt56b/fil.res
index 74e424d..e20dbae 100644
--- a/src/cobalt/content/icu/icudt56b/fil.res
+++ b/src/cobalt/content/icu/icudt56b/fil.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/fo.res b/src/cobalt/content/icu/icudt56b/fo.res
index bef3ad7..577b4be 100644
--- a/src/cobalt/content/icu/icudt56b/fo.res
+++ b/src/cobalt/content/icu/icudt56b/fo.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/fr.res b/src/cobalt/content/icu/icudt56b/fr.res
index dd3447d..098feaf 100644
--- a/src/cobalt/content/icu/icudt56b/fr.res
+++ b/src/cobalt/content/icu/icudt56b/fr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/fr_CA.res b/src/cobalt/content/icu/icudt56b/fr_CA.res
index 5521151..8108be1 100644
--- a/src/cobalt/content/icu/icudt56b/fr_CA.res
+++ b/src/cobalt/content/icu/icudt56b/fr_CA.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/fr_CH.res b/src/cobalt/content/icu/icudt56b/fr_CH.res
index 752e262..79b462a 100644
--- a/src/cobalt/content/icu/icudt56b/fr_CH.res
+++ b/src/cobalt/content/icu/icudt56b/fr_CH.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ga.res b/src/cobalt/content/icu/icudt56b/ga.res
index 88d5ab5..3398f22 100644
--- a/src/cobalt/content/icu/icudt56b/ga.res
+++ b/src/cobalt/content/icu/icudt56b/ga.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/gl.res b/src/cobalt/content/icu/icudt56b/gl.res
index 72c9a1c..d3d96da 100644
--- a/src/cobalt/content/icu/icudt56b/gl.res
+++ b/src/cobalt/content/icu/icudt56b/gl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/gu.res b/src/cobalt/content/icu/icudt56b/gu.res
index 85d3ce9..628c409 100644
--- a/src/cobalt/content/icu/icudt56b/gu.res
+++ b/src/cobalt/content/icu/icudt56b/gu.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ha.res b/src/cobalt/content/icu/icudt56b/ha.res
index 43e404f..1093733 100644
--- a/src/cobalt/content/icu/icudt56b/ha.res
+++ b/src/cobalt/content/icu/icudt56b/ha.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/haw.res b/src/cobalt/content/icu/icudt56b/haw.res
index 60ead40..1e1c2bb 100644
--- a/src/cobalt/content/icu/icudt56b/haw.res
+++ b/src/cobalt/content/icu/icudt56b/haw.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/he.res b/src/cobalt/content/icu/icudt56b/he.res
index ebbeb7c..aa5b464 100644
--- a/src/cobalt/content/icu/icudt56b/he.res
+++ b/src/cobalt/content/icu/icudt56b/he.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/hi.res b/src/cobalt/content/icu/icudt56b/hi.res
index dc70299..0e341e9 100644
--- a/src/cobalt/content/icu/icudt56b/hi.res
+++ b/src/cobalt/content/icu/icudt56b/hi.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/hr.res b/src/cobalt/content/icu/icudt56b/hr.res
index 6bceb0c..1fce684 100644
--- a/src/cobalt/content/icu/icudt56b/hr.res
+++ b/src/cobalt/content/icu/icudt56b/hr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/hu.res b/src/cobalt/content/icu/icudt56b/hu.res
index d482a63..d8bf7d3 100644
--- a/src/cobalt/content/icu/icudt56b/hu.res
+++ b/src/cobalt/content/icu/icudt56b/hu.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/hy.res b/src/cobalt/content/icu/icudt56b/hy.res
index e9ebdb6..ab5be83 100644
--- a/src/cobalt/content/icu/icudt56b/hy.res
+++ b/src/cobalt/content/icu/icudt56b/hy.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/id.res b/src/cobalt/content/icu/icudt56b/id.res
index bd5605a..8b9fb6f 100644
--- a/src/cobalt/content/icu/icudt56b/id.res
+++ b/src/cobalt/content/icu/icudt56b/id.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ig.res b/src/cobalt/content/icu/icudt56b/ig.res
index 85f26f5..1abde9f 100644
--- a/src/cobalt/content/icu/icudt56b/ig.res
+++ b/src/cobalt/content/icu/icudt56b/ig.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/in.res b/src/cobalt/content/icu/icudt56b/in.res
index 66a82ba..9296700 100644
--- a/src/cobalt/content/icu/icudt56b/in.res
+++ b/src/cobalt/content/icu/icudt56b/in.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/is.res b/src/cobalt/content/icu/icudt56b/is.res
index 8043dda..b9d912a 100644
--- a/src/cobalt/content/icu/icudt56b/is.res
+++ b/src/cobalt/content/icu/icudt56b/is.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/it.res b/src/cobalt/content/icu/icudt56b/it.res
index aee6ca0..018008b 100644
--- a/src/cobalt/content/icu/icudt56b/it.res
+++ b/src/cobalt/content/icu/icudt56b/it.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/it_CH.res b/src/cobalt/content/icu/icudt56b/it_CH.res
index d046860..2548487 100644
--- a/src/cobalt/content/icu/icudt56b/it_CH.res
+++ b/src/cobalt/content/icu/icudt56b/it_CH.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/iw.res b/src/cobalt/content/icu/icudt56b/iw.res
index 733b115..0ba8df0 100644
--- a/src/cobalt/content/icu/icudt56b/iw.res
+++ b/src/cobalt/content/icu/icudt56b/iw.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ja.res b/src/cobalt/content/icu/icudt56b/ja.res
index 17e8ac1..dfb8869 100644
--- a/src/cobalt/content/icu/icudt56b/ja.res
+++ b/src/cobalt/content/icu/icudt56b/ja.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ka.res b/src/cobalt/content/icu/icudt56b/ka.res
index fc8fda6..32dbaea 100644
--- a/src/cobalt/content/icu/icudt56b/ka.res
+++ b/src/cobalt/content/icu/icudt56b/ka.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/kk.res b/src/cobalt/content/icu/icudt56b/kk.res
index 3e1d3ca..a57f103 100644
--- a/src/cobalt/content/icu/icudt56b/kk.res
+++ b/src/cobalt/content/icu/icudt56b/kk.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/km.res b/src/cobalt/content/icu/icudt56b/km.res
index 6ca2adb..30c2c9d 100644
--- a/src/cobalt/content/icu/icudt56b/km.res
+++ b/src/cobalt/content/icu/icudt56b/km.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/kn.res b/src/cobalt/content/icu/icudt56b/kn.res
index 757acd5..d383b3e 100644
--- a/src/cobalt/content/icu/icudt56b/kn.res
+++ b/src/cobalt/content/icu/icudt56b/kn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ko.res b/src/cobalt/content/icu/icudt56b/ko.res
index 576014a..5e00efb 100644
--- a/src/cobalt/content/icu/icudt56b/ko.res
+++ b/src/cobalt/content/icu/icudt56b/ko.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ku.res b/src/cobalt/content/icu/icudt56b/ku.res
index 532151e..435f098 100644
--- a/src/cobalt/content/icu/icudt56b/ku.res
+++ b/src/cobalt/content/icu/icudt56b/ku.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ky.res b/src/cobalt/content/icu/icudt56b/ky.res
index 4b7da68..5e6b81a 100644
--- a/src/cobalt/content/icu/icudt56b/ky.res
+++ b/src/cobalt/content/icu/icudt56b/ky.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/af.res b/src/cobalt/content/icu/icudt56b/lang/af.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/af.res
+++ b/src/cobalt/content/icu/icudt56b/lang/af.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ak.res b/src/cobalt/content/icu/icudt56b/lang/ak.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/ak.res
+++ b/src/cobalt/content/icu/icudt56b/lang/ak.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/am.res b/src/cobalt/content/icu/icudt56b/lang/am.res
index 5191444..bed926c 100644
--- a/src/cobalt/content/icu/icudt56b/lang/am.res
+++ b/src/cobalt/content/icu/icudt56b/lang/am.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/an.res b/src/cobalt/content/icu/icudt56b/lang/an.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/an.res
+++ b/src/cobalt/content/icu/icudt56b/lang/an.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ar.res b/src/cobalt/content/icu/icudt56b/lang/ar.res
index eea00ff..988eb5d 100644
--- a/src/cobalt/content/icu/icudt56b/lang/ar.res
+++ b/src/cobalt/content/icu/icudt56b/lang/ar.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ast.res b/src/cobalt/content/icu/icudt56b/lang/ast.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/ast.res
+++ b/src/cobalt/content/icu/icudt56b/lang/ast.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/az.res b/src/cobalt/content/icu/icudt56b/lang/az.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/az.res
+++ b/src/cobalt/content/icu/icudt56b/lang/az.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/be.res b/src/cobalt/content/icu/icudt56b/lang/be.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/be.res
+++ b/src/cobalt/content/icu/icudt56b/lang/be.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/bem.res b/src/cobalt/content/icu/icudt56b/lang/bem.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/bem.res
+++ b/src/cobalt/content/icu/icudt56b/lang/bem.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/bg.res b/src/cobalt/content/icu/icudt56b/lang/bg.res
index f8ba03f..b5d1160 100644
--- a/src/cobalt/content/icu/icudt56b/lang/bg.res
+++ b/src/cobalt/content/icu/icudt56b/lang/bg.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/bn.res b/src/cobalt/content/icu/icudt56b/lang/bn.res
index fdc9cdb..b4c023e 100644
--- a/src/cobalt/content/icu/icudt56b/lang/bn.res
+++ b/src/cobalt/content/icu/icudt56b/lang/bn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/br.res b/src/cobalt/content/icu/icudt56b/lang/br.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/br.res
+++ b/src/cobalt/content/icu/icudt56b/lang/br.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/bs.res b/src/cobalt/content/icu/icudt56b/lang/bs.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/bs.res
+++ b/src/cobalt/content/icu/icudt56b/lang/bs.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ca.res b/src/cobalt/content/icu/icudt56b/lang/ca.res
index c05c095..6012fbf 100644
--- a/src/cobalt/content/icu/icudt56b/lang/ca.res
+++ b/src/cobalt/content/icu/icudt56b/lang/ca.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ckb.res b/src/cobalt/content/icu/icudt56b/lang/ckb.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/ckb.res
+++ b/src/cobalt/content/icu/icudt56b/lang/ckb.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/cs.res b/src/cobalt/content/icu/icudt56b/lang/cs.res
index 5fdcad3..1da035b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/cs.res
+++ b/src/cobalt/content/icu/icudt56b/lang/cs.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/cy.res b/src/cobalt/content/icu/icudt56b/lang/cy.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/cy.res
+++ b/src/cobalt/content/icu/icudt56b/lang/cy.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/da.res b/src/cobalt/content/icu/icudt56b/lang/da.res
index d3125da..81df9f3 100644
--- a/src/cobalt/content/icu/icudt56b/lang/da.res
+++ b/src/cobalt/content/icu/icudt56b/lang/da.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/de.res b/src/cobalt/content/icu/icudt56b/lang/de.res
index 97792db..34c8d12 100644
--- a/src/cobalt/content/icu/icudt56b/lang/de.res
+++ b/src/cobalt/content/icu/icudt56b/lang/de.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ee.res b/src/cobalt/content/icu/icudt56b/lang/ee.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/ee.res
+++ b/src/cobalt/content/icu/icudt56b/lang/ee.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/el.res b/src/cobalt/content/icu/icudt56b/lang/el.res
index b851f9a..a5a08c5 100644
--- a/src/cobalt/content/icu/icudt56b/lang/el.res
+++ b/src/cobalt/content/icu/icudt56b/lang/el.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/en.res b/src/cobalt/content/icu/icudt56b/lang/en.res
index 747e6f3..d429522 100644
--- a/src/cobalt/content/icu/icudt56b/lang/en.res
+++ b/src/cobalt/content/icu/icudt56b/lang/en.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/en_GB.res b/src/cobalt/content/icu/icudt56b/lang/en_GB.res
index cb1670b..0a55f56 100644
--- a/src/cobalt/content/icu/icudt56b/lang/en_GB.res
+++ b/src/cobalt/content/icu/icudt56b/lang/en_GB.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/eo.res b/src/cobalt/content/icu/icudt56b/lang/eo.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/eo.res
+++ b/src/cobalt/content/icu/icudt56b/lang/eo.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/es.res b/src/cobalt/content/icu/icudt56b/lang/es.res
index 7eedb98..ee3ae99 100644
--- a/src/cobalt/content/icu/icudt56b/lang/es.res
+++ b/src/cobalt/content/icu/icudt56b/lang/es.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/es_419.res b/src/cobalt/content/icu/icudt56b/lang/es_419.res
index 107cc66..6447346 100644
--- a/src/cobalt/content/icu/icudt56b/lang/es_419.res
+++ b/src/cobalt/content/icu/icudt56b/lang/es_419.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/et.res b/src/cobalt/content/icu/icudt56b/lang/et.res
index 0b0146b..d588e70 100644
--- a/src/cobalt/content/icu/icudt56b/lang/et.res
+++ b/src/cobalt/content/icu/icudt56b/lang/et.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/eu.res b/src/cobalt/content/icu/icudt56b/lang/eu.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/eu.res
+++ b/src/cobalt/content/icu/icudt56b/lang/eu.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/fa.res b/src/cobalt/content/icu/icudt56b/lang/fa.res
index 59d9442..3fd2782 100644
--- a/src/cobalt/content/icu/icudt56b/lang/fa.res
+++ b/src/cobalt/content/icu/icudt56b/lang/fa.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/fi.res b/src/cobalt/content/icu/icudt56b/lang/fi.res
index 1ada0a1..4f10019 100644
--- a/src/cobalt/content/icu/icudt56b/lang/fi.res
+++ b/src/cobalt/content/icu/icudt56b/lang/fi.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/fil.res b/src/cobalt/content/icu/icudt56b/lang/fil.res
index 62740af..1f994f7 100644
--- a/src/cobalt/content/icu/icudt56b/lang/fil.res
+++ b/src/cobalt/content/icu/icudt56b/lang/fil.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/fo.res b/src/cobalt/content/icu/icudt56b/lang/fo.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/fo.res
+++ b/src/cobalt/content/icu/icudt56b/lang/fo.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/fr.res b/src/cobalt/content/icu/icudt56b/lang/fr.res
index 57fcb6e..3a15959 100644
--- a/src/cobalt/content/icu/icudt56b/lang/fr.res
+++ b/src/cobalt/content/icu/icudt56b/lang/fr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ga.res b/src/cobalt/content/icu/icudt56b/lang/ga.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/ga.res
+++ b/src/cobalt/content/icu/icudt56b/lang/ga.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/gl.res b/src/cobalt/content/icu/icudt56b/lang/gl.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/gl.res
+++ b/src/cobalt/content/icu/icudt56b/lang/gl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/gu.res b/src/cobalt/content/icu/icudt56b/lang/gu.res
index b8f8fce..1fd7b89 100644
--- a/src/cobalt/content/icu/icudt56b/lang/gu.res
+++ b/src/cobalt/content/icu/icudt56b/lang/gu.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ha.res b/src/cobalt/content/icu/icudt56b/lang/ha.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/ha.res
+++ b/src/cobalt/content/icu/icudt56b/lang/ha.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/haw.res b/src/cobalt/content/icu/icudt56b/lang/haw.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/haw.res
+++ b/src/cobalt/content/icu/icudt56b/lang/haw.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/he.res b/src/cobalt/content/icu/icudt56b/lang/he.res
index a61e424..2fd4b4d 100644
--- a/src/cobalt/content/icu/icudt56b/lang/he.res
+++ b/src/cobalt/content/icu/icudt56b/lang/he.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/hi.res b/src/cobalt/content/icu/icudt56b/lang/hi.res
index 57c4718..0fb4fc6 100644
--- a/src/cobalt/content/icu/icudt56b/lang/hi.res
+++ b/src/cobalt/content/icu/icudt56b/lang/hi.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/hr.res b/src/cobalt/content/icu/icudt56b/lang/hr.res
index 3eb40c6..dd724b5 100644
--- a/src/cobalt/content/icu/icudt56b/lang/hr.res
+++ b/src/cobalt/content/icu/icudt56b/lang/hr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/hu.res b/src/cobalt/content/icu/icudt56b/lang/hu.res
index 4185bcd..dbe5b44 100644
--- a/src/cobalt/content/icu/icudt56b/lang/hu.res
+++ b/src/cobalt/content/icu/icudt56b/lang/hu.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/hy.res b/src/cobalt/content/icu/icudt56b/lang/hy.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/hy.res
+++ b/src/cobalt/content/icu/icudt56b/lang/hy.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/id.res b/src/cobalt/content/icu/icudt56b/lang/id.res
index cb760e1..9747eec 100644
--- a/src/cobalt/content/icu/icudt56b/lang/id.res
+++ b/src/cobalt/content/icu/icudt56b/lang/id.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ig.res b/src/cobalt/content/icu/icudt56b/lang/ig.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/ig.res
+++ b/src/cobalt/content/icu/icudt56b/lang/ig.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/in.res b/src/cobalt/content/icu/icudt56b/lang/in.res
index b2c35ef..da98b73 100644
--- a/src/cobalt/content/icu/icudt56b/lang/in.res
+++ b/src/cobalt/content/icu/icudt56b/lang/in.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/is.res b/src/cobalt/content/icu/icudt56b/lang/is.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/is.res
+++ b/src/cobalt/content/icu/icudt56b/lang/is.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/it.res b/src/cobalt/content/icu/icudt56b/lang/it.res
index d4b0ffc..370955f 100644
--- a/src/cobalt/content/icu/icudt56b/lang/it.res
+++ b/src/cobalt/content/icu/icudt56b/lang/it.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/iw.res b/src/cobalt/content/icu/icudt56b/lang/iw.res
index 247bf06..d111f93 100644
--- a/src/cobalt/content/icu/icudt56b/lang/iw.res
+++ b/src/cobalt/content/icu/icudt56b/lang/iw.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ja.res b/src/cobalt/content/icu/icudt56b/lang/ja.res
index 674dbb7..2190b76 100644
--- a/src/cobalt/content/icu/icudt56b/lang/ja.res
+++ b/src/cobalt/content/icu/icudt56b/lang/ja.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ka.res b/src/cobalt/content/icu/icudt56b/lang/ka.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/ka.res
+++ b/src/cobalt/content/icu/icudt56b/lang/ka.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/kk.res b/src/cobalt/content/icu/icudt56b/lang/kk.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/kk.res
+++ b/src/cobalt/content/icu/icudt56b/lang/kk.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/km.res b/src/cobalt/content/icu/icudt56b/lang/km.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/km.res
+++ b/src/cobalt/content/icu/icudt56b/lang/km.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/kn.res b/src/cobalt/content/icu/icudt56b/lang/kn.res
index 381a80b..0608b45 100644
--- a/src/cobalt/content/icu/icudt56b/lang/kn.res
+++ b/src/cobalt/content/icu/icudt56b/lang/kn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ko.res b/src/cobalt/content/icu/icudt56b/lang/ko.res
index f89b341..9bb7b3c 100644
--- a/src/cobalt/content/icu/icudt56b/lang/ko.res
+++ b/src/cobalt/content/icu/icudt56b/lang/ko.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ku.res b/src/cobalt/content/icu/icudt56b/lang/ku.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/ku.res
+++ b/src/cobalt/content/icu/icudt56b/lang/ku.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ky.res b/src/cobalt/content/icu/icudt56b/lang/ky.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/ky.res
+++ b/src/cobalt/content/icu/icudt56b/lang/ky.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/lg.res b/src/cobalt/content/icu/icudt56b/lang/lg.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/lg.res
+++ b/src/cobalt/content/icu/icudt56b/lang/lg.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ln.res b/src/cobalt/content/icu/icudt56b/lang/ln.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/ln.res
+++ b/src/cobalt/content/icu/icudt56b/lang/ln.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/lo.res b/src/cobalt/content/icu/icudt56b/lang/lo.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/lo.res
+++ b/src/cobalt/content/icu/icudt56b/lang/lo.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/lt.res b/src/cobalt/content/icu/icudt56b/lang/lt.res
index 471b004..bca1349 100644
--- a/src/cobalt/content/icu/icudt56b/lang/lt.res
+++ b/src/cobalt/content/icu/icudt56b/lang/lt.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/lv.res b/src/cobalt/content/icu/icudt56b/lang/lv.res
index 993c698..d0700b9 100644
--- a/src/cobalt/content/icu/icudt56b/lang/lv.res
+++ b/src/cobalt/content/icu/icudt56b/lang/lv.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/mfe.res b/src/cobalt/content/icu/icudt56b/lang/mfe.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/mfe.res
+++ b/src/cobalt/content/icu/icudt56b/lang/mfe.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/mg.res b/src/cobalt/content/icu/icudt56b/lang/mg.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/mg.res
+++ b/src/cobalt/content/icu/icudt56b/lang/mg.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/mk.res b/src/cobalt/content/icu/icudt56b/lang/mk.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/mk.res
+++ b/src/cobalt/content/icu/icudt56b/lang/mk.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ml.res b/src/cobalt/content/icu/icudt56b/lang/ml.res
index c40ffa5..0c1c6b5 100644
--- a/src/cobalt/content/icu/icudt56b/lang/ml.res
+++ b/src/cobalt/content/icu/icudt56b/lang/ml.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/mn.res b/src/cobalt/content/icu/icudt56b/lang/mn.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/mn.res
+++ b/src/cobalt/content/icu/icudt56b/lang/mn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/mo.res b/src/cobalt/content/icu/icudt56b/lang/mo.res
index ee0ea49..ed7653e 100644
--- a/src/cobalt/content/icu/icudt56b/lang/mo.res
+++ b/src/cobalt/content/icu/icudt56b/lang/mo.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/mr.res b/src/cobalt/content/icu/icudt56b/lang/mr.res
index 2c1943c..27d225f 100644
--- a/src/cobalt/content/icu/icudt56b/lang/mr.res
+++ b/src/cobalt/content/icu/icudt56b/lang/mr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ms.res b/src/cobalt/content/icu/icudt56b/lang/ms.res
index c40316d..21cc141 100644
--- a/src/cobalt/content/icu/icudt56b/lang/ms.res
+++ b/src/cobalt/content/icu/icudt56b/lang/ms.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/mt.res b/src/cobalt/content/icu/icudt56b/lang/mt.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/mt.res
+++ b/src/cobalt/content/icu/icudt56b/lang/mt.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/my.res b/src/cobalt/content/icu/icudt56b/lang/my.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/my.res
+++ b/src/cobalt/content/icu/icudt56b/lang/my.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/nb.res b/src/cobalt/content/icu/icudt56b/lang/nb.res
index 5112e25..2878212 100644
--- a/src/cobalt/content/icu/icudt56b/lang/nb.res
+++ b/src/cobalt/content/icu/icudt56b/lang/nb.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ne.res b/src/cobalt/content/icu/icudt56b/lang/ne.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/ne.res
+++ b/src/cobalt/content/icu/icudt56b/lang/ne.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/nl.res b/src/cobalt/content/icu/icudt56b/lang/nl.res
index 751ba02..1459803 100644
--- a/src/cobalt/content/icu/icudt56b/lang/nl.res
+++ b/src/cobalt/content/icu/icudt56b/lang/nl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/nn.res b/src/cobalt/content/icu/icudt56b/lang/nn.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/nn.res
+++ b/src/cobalt/content/icu/icudt56b/lang/nn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/no.res b/src/cobalt/content/icu/icudt56b/lang/no.res
index a0258b7..7975dbd 100644
--- a/src/cobalt/content/icu/icudt56b/lang/no.res
+++ b/src/cobalt/content/icu/icudt56b/lang/no.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/nyn.res b/src/cobalt/content/icu/icudt56b/lang/nyn.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/nyn.res
+++ b/src/cobalt/content/icu/icudt56b/lang/nyn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/om.res b/src/cobalt/content/icu/icudt56b/lang/om.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/om.res
+++ b/src/cobalt/content/icu/icudt56b/lang/om.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/or.res b/src/cobalt/content/icu/icudt56b/lang/or.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/or.res
+++ b/src/cobalt/content/icu/icudt56b/lang/or.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/pa.res b/src/cobalt/content/icu/icudt56b/lang/pa.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/pa.res
+++ b/src/cobalt/content/icu/icudt56b/lang/pa.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/pl.res b/src/cobalt/content/icu/icudt56b/lang/pl.res
index d67c390..2652e03 100644
--- a/src/cobalt/content/icu/icudt56b/lang/pl.res
+++ b/src/cobalt/content/icu/icudt56b/lang/pl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/pool.res b/src/cobalt/content/icu/icudt56b/lang/pool.res
index 76166a1..7fd7f96 100644
--- a/src/cobalt/content/icu/icudt56b/lang/pool.res
+++ b/src/cobalt/content/icu/icudt56b/lang/pool.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ps.res b/src/cobalt/content/icu/icudt56b/lang/ps.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/ps.res
+++ b/src/cobalt/content/icu/icudt56b/lang/ps.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/pt.res b/src/cobalt/content/icu/icudt56b/lang/pt.res
index 0ae2863..cbc0145 100644
--- a/src/cobalt/content/icu/icudt56b/lang/pt.res
+++ b/src/cobalt/content/icu/icudt56b/lang/pt.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/pt_PT.res b/src/cobalt/content/icu/icudt56b/lang/pt_PT.res
index 90433ce..453e716 100644
--- a/src/cobalt/content/icu/icudt56b/lang/pt_PT.res
+++ b/src/cobalt/content/icu/icudt56b/lang/pt_PT.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/rm.res b/src/cobalt/content/icu/icudt56b/lang/rm.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/rm.res
+++ b/src/cobalt/content/icu/icudt56b/lang/rm.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/rn.res b/src/cobalt/content/icu/icudt56b/lang/rn.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/rn.res
+++ b/src/cobalt/content/icu/icudt56b/lang/rn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ro.res b/src/cobalt/content/icu/icudt56b/lang/ro.res
index e9aa6fa..05034d8 100644
--- a/src/cobalt/content/icu/icudt56b/lang/ro.res
+++ b/src/cobalt/content/icu/icudt56b/lang/ro.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ro_MD.res b/src/cobalt/content/icu/icudt56b/lang/ro_MD.res
index 78ed83b..6b0be86 100644
--- a/src/cobalt/content/icu/icudt56b/lang/ro_MD.res
+++ b/src/cobalt/content/icu/icudt56b/lang/ro_MD.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/root.res b/src/cobalt/content/icu/icudt56b/lang/root.res
index dc0042b..b13f41b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/root.res
+++ b/src/cobalt/content/icu/icudt56b/lang/root.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ru.res b/src/cobalt/content/icu/icudt56b/lang/ru.res
index 1ecc96f..9d3e7dc 100644
--- a/src/cobalt/content/icu/icudt56b/lang/ru.res
+++ b/src/cobalt/content/icu/icudt56b/lang/ru.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/rw.res b/src/cobalt/content/icu/icudt56b/lang/rw.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/rw.res
+++ b/src/cobalt/content/icu/icudt56b/lang/rw.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/sh.res b/src/cobalt/content/icu/icudt56b/lang/sh.res
index bd2f9e8..64eb35f 100644
--- a/src/cobalt/content/icu/icudt56b/lang/sh.res
+++ b/src/cobalt/content/icu/icudt56b/lang/sh.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/si.res b/src/cobalt/content/icu/icudt56b/lang/si.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/si.res
+++ b/src/cobalt/content/icu/icudt56b/lang/si.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/sk.res b/src/cobalt/content/icu/icudt56b/lang/sk.res
index 15be576..6e91d73 100644
--- a/src/cobalt/content/icu/icudt56b/lang/sk.res
+++ b/src/cobalt/content/icu/icudt56b/lang/sk.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/sl.res b/src/cobalt/content/icu/icudt56b/lang/sl.res
index 8c364c2..8e79881 100644
--- a/src/cobalt/content/icu/icudt56b/lang/sl.res
+++ b/src/cobalt/content/icu/icudt56b/lang/sl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/sn.res b/src/cobalt/content/icu/icudt56b/lang/sn.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/sn.res
+++ b/src/cobalt/content/icu/icudt56b/lang/sn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/so.res b/src/cobalt/content/icu/icudt56b/lang/so.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/so.res
+++ b/src/cobalt/content/icu/icudt56b/lang/so.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/sq.res b/src/cobalt/content/icu/icudt56b/lang/sq.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/sq.res
+++ b/src/cobalt/content/icu/icudt56b/lang/sq.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/sr.res b/src/cobalt/content/icu/icudt56b/lang/sr.res
index 6d3aa9d..dc9b003 100644
--- a/src/cobalt/content/icu/icudt56b/lang/sr.res
+++ b/src/cobalt/content/icu/icudt56b/lang/sr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/sr_Latn.res b/src/cobalt/content/icu/icudt56b/lang/sr_Latn.res
index 0dced64..01ac57f 100644
--- a/src/cobalt/content/icu/icudt56b/lang/sr_Latn.res
+++ b/src/cobalt/content/icu/icudt56b/lang/sr_Latn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/sv.res b/src/cobalt/content/icu/icudt56b/lang/sv.res
index ee2aa38..d7bb8bf 100644
--- a/src/cobalt/content/icu/icudt56b/lang/sv.res
+++ b/src/cobalt/content/icu/icudt56b/lang/sv.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/sw.res b/src/cobalt/content/icu/icudt56b/lang/sw.res
index e64c5da..d33af54 100644
--- a/src/cobalt/content/icu/icudt56b/lang/sw.res
+++ b/src/cobalt/content/icu/icudt56b/lang/sw.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ta.res b/src/cobalt/content/icu/icudt56b/lang/ta.res
index dd6d2fa..c58fff5 100644
--- a/src/cobalt/content/icu/icudt56b/lang/ta.res
+++ b/src/cobalt/content/icu/icudt56b/lang/ta.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/te.res b/src/cobalt/content/icu/icudt56b/lang/te.res
index 4dbcb83..a0334d2 100644
--- a/src/cobalt/content/icu/icudt56b/lang/te.res
+++ b/src/cobalt/content/icu/icudt56b/lang/te.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/tg.res b/src/cobalt/content/icu/icudt56b/lang/tg.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/tg.res
+++ b/src/cobalt/content/icu/icudt56b/lang/tg.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/th.res b/src/cobalt/content/icu/icudt56b/lang/th.res
index 8de2e9b..369e86e 100644
--- a/src/cobalt/content/icu/icudt56b/lang/th.res
+++ b/src/cobalt/content/icu/icudt56b/lang/th.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ti.res b/src/cobalt/content/icu/icudt56b/lang/ti.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/ti.res
+++ b/src/cobalt/content/icu/icudt56b/lang/ti.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/tl.res b/src/cobalt/content/icu/icudt56b/lang/tl.res
index 13882f7..cb41750 100644
--- a/src/cobalt/content/icu/icudt56b/lang/tl.res
+++ b/src/cobalt/content/icu/icudt56b/lang/tl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/to.res b/src/cobalt/content/icu/icudt56b/lang/to.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/to.res
+++ b/src/cobalt/content/icu/icudt56b/lang/to.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/tr.res b/src/cobalt/content/icu/icudt56b/lang/tr.res
index f11ddd9..a7d7c37 100644
--- a/src/cobalt/content/icu/icudt56b/lang/tr.res
+++ b/src/cobalt/content/icu/icudt56b/lang/tr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/uk.res b/src/cobalt/content/icu/icudt56b/lang/uk.res
index 5d353fd..baa2048 100644
--- a/src/cobalt/content/icu/icudt56b/lang/uk.res
+++ b/src/cobalt/content/icu/icudt56b/lang/uk.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ur.res b/src/cobalt/content/icu/icudt56b/lang/ur.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/ur.res
+++ b/src/cobalt/content/icu/icudt56b/lang/ur.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/uz.res b/src/cobalt/content/icu/icudt56b/lang/uz.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/uz.res
+++ b/src/cobalt/content/icu/icudt56b/lang/uz.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/vi.res b/src/cobalt/content/icu/icudt56b/lang/vi.res
index 12b8b24..46117dd 100644
--- a/src/cobalt/content/icu/icudt56b/lang/vi.res
+++ b/src/cobalt/content/icu/icudt56b/lang/vi.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/wa.res b/src/cobalt/content/icu/icudt56b/lang/wa.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/wa.res
+++ b/src/cobalt/content/icu/icudt56b/lang/wa.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/yo.res b/src/cobalt/content/icu/icudt56b/lang/yo.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/yo.res
+++ b/src/cobalt/content/icu/icudt56b/lang/yo.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/zh.res b/src/cobalt/content/icu/icudt56b/lang/zh.res
index 0efbae2..ed8ec1a 100644
--- a/src/cobalt/content/icu/icudt56b/lang/zh.res
+++ b/src/cobalt/content/icu/icudt56b/lang/zh.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/zh_CN.res b/src/cobalt/content/icu/icudt56b/lang/zh_CN.res
index bcba38b..5e3c9fa 100644
--- a/src/cobalt/content/icu/icudt56b/lang/zh_CN.res
+++ b/src/cobalt/content/icu/icudt56b/lang/zh_CN.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/zh_HK.res b/src/cobalt/content/icu/icudt56b/lang/zh_HK.res
index 6808174..1de3637 100644
--- a/src/cobalt/content/icu/icudt56b/lang/zh_HK.res
+++ b/src/cobalt/content/icu/icudt56b/lang/zh_HK.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/zh_Hans.res b/src/cobalt/content/icu/icudt56b/lang/zh_Hans.res
index b72028d..02c942c 100644
--- a/src/cobalt/content/icu/icudt56b/lang/zh_Hans.res
+++ b/src/cobalt/content/icu/icudt56b/lang/zh_Hans.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/zh_Hans_CN.res b/src/cobalt/content/icu/icudt56b/lang/zh_Hans_CN.res
index 78ed83b..6b0be86 100644
--- a/src/cobalt/content/icu/icudt56b/lang/zh_Hans_CN.res
+++ b/src/cobalt/content/icu/icudt56b/lang/zh_Hans_CN.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/zh_Hans_SG.res b/src/cobalt/content/icu/icudt56b/lang/zh_Hans_SG.res
index 78ed83b..6b0be86 100644
--- a/src/cobalt/content/icu/icudt56b/lang/zh_Hans_SG.res
+++ b/src/cobalt/content/icu/icudt56b/lang/zh_Hans_SG.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/zh_Hant.res b/src/cobalt/content/icu/icudt56b/lang/zh_Hant.res
index 62daeab..bbdf8d3 100644
--- a/src/cobalt/content/icu/icudt56b/lang/zh_Hant.res
+++ b/src/cobalt/content/icu/icudt56b/lang/zh_Hant.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/zh_Hant_HK.res b/src/cobalt/content/icu/icudt56b/lang/zh_Hant_HK.res
index cac443a..e3b3eba 100644
--- a/src/cobalt/content/icu/icudt56b/lang/zh_Hant_HK.res
+++ b/src/cobalt/content/icu/icudt56b/lang/zh_Hant_HK.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/zh_Hant_TW.res b/src/cobalt/content/icu/icudt56b/lang/zh_Hant_TW.res
index 78ed83b..6b0be86 100644
--- a/src/cobalt/content/icu/icudt56b/lang/zh_Hant_TW.res
+++ b/src/cobalt/content/icu/icudt56b/lang/zh_Hant_TW.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/zh_SG.res b/src/cobalt/content/icu/icudt56b/lang/zh_SG.res
index f08cca6..bcdacc7 100644
--- a/src/cobalt/content/icu/icudt56b/lang/zh_SG.res
+++ b/src/cobalt/content/icu/icudt56b/lang/zh_SG.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/zh_TW.res b/src/cobalt/content/icu/icudt56b/lang/zh_TW.res
index 60f9f5f..1b66f29 100644
--- a/src/cobalt/content/icu/icudt56b/lang/zh_TW.res
+++ b/src/cobalt/content/icu/icudt56b/lang/zh_TW.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/zu.res b/src/cobalt/content/icu/icudt56b/lang/zu.res
index c6c8d20..6d3ad7b 100644
--- a/src/cobalt/content/icu/icudt56b/lang/zu.res
+++ b/src/cobalt/content/icu/icudt56b/lang/zu.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lg.res b/src/cobalt/content/icu/icudt56b/lg.res
index f920156..badaef3 100644
--- a/src/cobalt/content/icu/icudt56b/lg.res
+++ b/src/cobalt/content/icu/icudt56b/lg.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ln.res b/src/cobalt/content/icu/icudt56b/ln.res
index 1ff9d2e..b94dedf 100644
--- a/src/cobalt/content/icu/icudt56b/ln.res
+++ b/src/cobalt/content/icu/icudt56b/ln.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lo.res b/src/cobalt/content/icu/icudt56b/lo.res
index 61577ec..5b4f7f8 100644
--- a/src/cobalt/content/icu/icudt56b/lo.res
+++ b/src/cobalt/content/icu/icudt56b/lo.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lt.res b/src/cobalt/content/icu/icudt56b/lt.res
index ddd87c1..ec9ce5a 100644
--- a/src/cobalt/content/icu/icudt56b/lt.res
+++ b/src/cobalt/content/icu/icudt56b/lt.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lv.res b/src/cobalt/content/icu/icudt56b/lv.res
index b775599..55a6542 100644
--- a/src/cobalt/content/icu/icudt56b/lv.res
+++ b/src/cobalt/content/icu/icudt56b/lv.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/mfe.res b/src/cobalt/content/icu/icudt56b/mfe.res
index 2d4dbb2..8a199ea 100644
--- a/src/cobalt/content/icu/icudt56b/mfe.res
+++ b/src/cobalt/content/icu/icudt56b/mfe.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/mg.res b/src/cobalt/content/icu/icudt56b/mg.res
index ff7da77..018ea5b 100644
--- a/src/cobalt/content/icu/icudt56b/mg.res
+++ b/src/cobalt/content/icu/icudt56b/mg.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/mk.res b/src/cobalt/content/icu/icudt56b/mk.res
index ca66c66..cc3a879 100644
--- a/src/cobalt/content/icu/icudt56b/mk.res
+++ b/src/cobalt/content/icu/icudt56b/mk.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ml.res b/src/cobalt/content/icu/icudt56b/ml.res
index a2ed6e3..23a1971 100644
--- a/src/cobalt/content/icu/icudt56b/ml.res
+++ b/src/cobalt/content/icu/icudt56b/ml.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/mn.res b/src/cobalt/content/icu/icudt56b/mn.res
index 95aaecb..55b8d55 100644
--- a/src/cobalt/content/icu/icudt56b/mn.res
+++ b/src/cobalt/content/icu/icudt56b/mn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/mo.res b/src/cobalt/content/icu/icudt56b/mo.res
index 05eef9b..b252a1b 100644
--- a/src/cobalt/content/icu/icudt56b/mo.res
+++ b/src/cobalt/content/icu/icudt56b/mo.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/mr.res b/src/cobalt/content/icu/icudt56b/mr.res
index 0c8f196..3de81ed 100644
--- a/src/cobalt/content/icu/icudt56b/mr.res
+++ b/src/cobalt/content/icu/icudt56b/mr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ms.res b/src/cobalt/content/icu/icudt56b/ms.res
index 21d82f1..4be9461 100644
--- a/src/cobalt/content/icu/icudt56b/ms.res
+++ b/src/cobalt/content/icu/icudt56b/ms.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/mt.res b/src/cobalt/content/icu/icudt56b/mt.res
index 771e308..62d55a5 100644
--- a/src/cobalt/content/icu/icudt56b/mt.res
+++ b/src/cobalt/content/icu/icudt56b/mt.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/my.res b/src/cobalt/content/icu/icudt56b/my.res
index ca6a009..04fdbd2 100644
--- a/src/cobalt/content/icu/icudt56b/my.res
+++ b/src/cobalt/content/icu/icudt56b/my.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/nb.res b/src/cobalt/content/icu/icudt56b/nb.res
index 0c70a62..7eec666 100644
--- a/src/cobalt/content/icu/icudt56b/nb.res
+++ b/src/cobalt/content/icu/icudt56b/nb.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ne.res b/src/cobalt/content/icu/icudt56b/ne.res
index 0d3bca6..f4c368a 100644
--- a/src/cobalt/content/icu/icudt56b/ne.res
+++ b/src/cobalt/content/icu/icudt56b/ne.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/nl.res b/src/cobalt/content/icu/icudt56b/nl.res
index 15379de..ac4b49f 100644
--- a/src/cobalt/content/icu/icudt56b/nl.res
+++ b/src/cobalt/content/icu/icudt56b/nl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/nn.res b/src/cobalt/content/icu/icudt56b/nn.res
index 93298fe..c26183a 100644
--- a/src/cobalt/content/icu/icudt56b/nn.res
+++ b/src/cobalt/content/icu/icudt56b/nn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/no.res b/src/cobalt/content/icu/icudt56b/no.res
index 2daac08..b78bedc 100644
--- a/src/cobalt/content/icu/icudt56b/no.res
+++ b/src/cobalt/content/icu/icudt56b/no.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/nyn.res b/src/cobalt/content/icu/icudt56b/nyn.res
index 57679e5..9d2db5b 100644
--- a/src/cobalt/content/icu/icudt56b/nyn.res
+++ b/src/cobalt/content/icu/icudt56b/nyn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/om.res b/src/cobalt/content/icu/icudt56b/om.res
index 57679e5..9d2db5b 100644
--- a/src/cobalt/content/icu/icudt56b/om.res
+++ b/src/cobalt/content/icu/icudt56b/om.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/or.res b/src/cobalt/content/icu/icudt56b/or.res
index 8d998f5..2b190ce 100644
--- a/src/cobalt/content/icu/icudt56b/or.res
+++ b/src/cobalt/content/icu/icudt56b/or.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/pa.res b/src/cobalt/content/icu/icudt56b/pa.res
index 274aa23..cb80517 100644
--- a/src/cobalt/content/icu/icudt56b/pa.res
+++ b/src/cobalt/content/icu/icudt56b/pa.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/pl.res b/src/cobalt/content/icu/icudt56b/pl.res
index 92e128d..f5a0776 100644
--- a/src/cobalt/content/icu/icudt56b/pl.res
+++ b/src/cobalt/content/icu/icudt56b/pl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/pool.res b/src/cobalt/content/icu/icudt56b/pool.res
index cc6b653..91f6ad9 100644
--- a/src/cobalt/content/icu/icudt56b/pool.res
+++ b/src/cobalt/content/icu/icudt56b/pool.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ps.res b/src/cobalt/content/icu/icudt56b/ps.res
index bb14e4e..1281bb4 100644
--- a/src/cobalt/content/icu/icudt56b/ps.res
+++ b/src/cobalt/content/icu/icudt56b/ps.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/pt.res b/src/cobalt/content/icu/icudt56b/pt.res
index a8cd770..cb7b5c1 100644
--- a/src/cobalt/content/icu/icudt56b/pt.res
+++ b/src/cobalt/content/icu/icudt56b/pt.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/pt_BR.res b/src/cobalt/content/icu/icudt56b/pt_BR.res
index 0c29168..7a2eb6d 100644
--- a/src/cobalt/content/icu/icudt56b/pt_BR.res
+++ b/src/cobalt/content/icu/icudt56b/pt_BR.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/pt_PT.res b/src/cobalt/content/icu/icudt56b/pt_PT.res
index 3eab096..dfc2456 100644
--- a/src/cobalt/content/icu/icudt56b/pt_PT.res
+++ b/src/cobalt/content/icu/icudt56b/pt_PT.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/region/en.res b/src/cobalt/content/icu/icudt56b/region/en.res
index 45c6423..c5c145b 100644
--- a/src/cobalt/content/icu/icudt56b/region/en.res
+++ b/src/cobalt/content/icu/icudt56b/region/en.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/region/pool.res b/src/cobalt/content/icu/icudt56b/region/pool.res
index 194ef79..d6bfffb 100644
--- a/src/cobalt/content/icu/icudt56b/region/pool.res
+++ b/src/cobalt/content/icu/icudt56b/region/pool.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/region/root.res b/src/cobalt/content/icu/icudt56b/region/root.res
index d61b851..0121ec9 100644
--- a/src/cobalt/content/icu/icudt56b/region/root.res
+++ b/src/cobalt/content/icu/icudt56b/region/root.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/rm.res b/src/cobalt/content/icu/icudt56b/rm.res
index 2ac0eb9..cfdff81 100644
--- a/src/cobalt/content/icu/icudt56b/rm.res
+++ b/src/cobalt/content/icu/icudt56b/rm.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/rn.res b/src/cobalt/content/icu/icudt56b/rn.res
index 57679e5..9d2db5b 100644
--- a/src/cobalt/content/icu/icudt56b/rn.res
+++ b/src/cobalt/content/icu/icudt56b/rn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ro.res b/src/cobalt/content/icu/icudt56b/ro.res
index 4658315..87ddc8d 100644
--- a/src/cobalt/content/icu/icudt56b/ro.res
+++ b/src/cobalt/content/icu/icudt56b/ro.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ro_MD.res b/src/cobalt/content/icu/icudt56b/ro_MD.res
index 7c08d1e..67a02a2 100644
--- a/src/cobalt/content/icu/icudt56b/ro_MD.res
+++ b/src/cobalt/content/icu/icudt56b/ro_MD.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/root.res b/src/cobalt/content/icu/icudt56b/root.res
index 27050be..4fce667 100644
--- a/src/cobalt/content/icu/icudt56b/root.res
+++ b/src/cobalt/content/icu/icudt56b/root.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ru.res b/src/cobalt/content/icu/icudt56b/ru.res
index 1d470e3..e6c012c 100644
--- a/src/cobalt/content/icu/icudt56b/ru.res
+++ b/src/cobalt/content/icu/icudt56b/ru.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/rw.res b/src/cobalt/content/icu/icudt56b/rw.res
index 57679e5..9d2db5b 100644
--- a/src/cobalt/content/icu/icudt56b/rw.res
+++ b/src/cobalt/content/icu/icudt56b/rw.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/sh.res b/src/cobalt/content/icu/icudt56b/sh.res
index 2a2fa54..6458c97 100644
--- a/src/cobalt/content/icu/icudt56b/sh.res
+++ b/src/cobalt/content/icu/icudt56b/sh.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/si.res b/src/cobalt/content/icu/icudt56b/si.res
index 6be2069..1f0112e 100644
--- a/src/cobalt/content/icu/icudt56b/si.res
+++ b/src/cobalt/content/icu/icudt56b/si.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/sk.res b/src/cobalt/content/icu/icudt56b/sk.res
index 4e9233c..e48c0fc 100644
--- a/src/cobalt/content/icu/icudt56b/sk.res
+++ b/src/cobalt/content/icu/icudt56b/sk.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/sl.res b/src/cobalt/content/icu/icudt56b/sl.res
index 4d4af72..c2a1d58 100644
--- a/src/cobalt/content/icu/icudt56b/sl.res
+++ b/src/cobalt/content/icu/icudt56b/sl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/sn.res b/src/cobalt/content/icu/icudt56b/sn.res
index cd8e90d..d2a0d61 100644
--- a/src/cobalt/content/icu/icudt56b/sn.res
+++ b/src/cobalt/content/icu/icudt56b/sn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/so.res b/src/cobalt/content/icu/icudt56b/so.res
index 57679e5..9d2db5b 100644
--- a/src/cobalt/content/icu/icudt56b/so.res
+++ b/src/cobalt/content/icu/icudt56b/so.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/sq.res b/src/cobalt/content/icu/icudt56b/sq.res
index 6785b37..c91d21f 100644
--- a/src/cobalt/content/icu/icudt56b/sq.res
+++ b/src/cobalt/content/icu/icudt56b/sq.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/sr.res b/src/cobalt/content/icu/icudt56b/sr.res
index 0fffd77..f1f0d0e 100644
--- a/src/cobalt/content/icu/icudt56b/sr.res
+++ b/src/cobalt/content/icu/icudt56b/sr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/sr_Latn.res b/src/cobalt/content/icu/icudt56b/sr_Latn.res
index d12c6fc..09e6464 100644
--- a/src/cobalt/content/icu/icudt56b/sr_Latn.res
+++ b/src/cobalt/content/icu/icudt56b/sr_Latn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/sv.res b/src/cobalt/content/icu/icudt56b/sv.res
index bb2f295..9ebcee8 100644
--- a/src/cobalt/content/icu/icudt56b/sv.res
+++ b/src/cobalt/content/icu/icudt56b/sv.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/sw.res b/src/cobalt/content/icu/icudt56b/sw.res
index 06acb42..4f419de 100644
--- a/src/cobalt/content/icu/icudt56b/sw.res
+++ b/src/cobalt/content/icu/icudt56b/sw.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ta.res b/src/cobalt/content/icu/icudt56b/ta.res
index 79165d4..f8c41f3 100644
--- a/src/cobalt/content/icu/icudt56b/ta.res
+++ b/src/cobalt/content/icu/icudt56b/ta.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/te.res b/src/cobalt/content/icu/icudt56b/te.res
index c636277..e9b4bd5 100644
--- a/src/cobalt/content/icu/icudt56b/te.res
+++ b/src/cobalt/content/icu/icudt56b/te.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/tg.res b/src/cobalt/content/icu/icudt56b/tg.res
index fb5ac7e..6587279 100644
--- a/src/cobalt/content/icu/icudt56b/tg.res
+++ b/src/cobalt/content/icu/icudt56b/tg.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/th.res b/src/cobalt/content/icu/icudt56b/th.res
index 0585745..21c5770 100644
--- a/src/cobalt/content/icu/icudt56b/th.res
+++ b/src/cobalt/content/icu/icudt56b/th.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ti.res b/src/cobalt/content/icu/icudt56b/ti.res
index 88d1885..b1be538 100644
--- a/src/cobalt/content/icu/icudt56b/ti.res
+++ b/src/cobalt/content/icu/icudt56b/ti.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/tl.res b/src/cobalt/content/icu/icudt56b/tl.res
index 181b960..2a31e1a 100644
--- a/src/cobalt/content/icu/icudt56b/tl.res
+++ b/src/cobalt/content/icu/icudt56b/tl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/to.res b/src/cobalt/content/icu/icudt56b/to.res
index 1d1a083..59f438b 100644
--- a/src/cobalt/content/icu/icudt56b/to.res
+++ b/src/cobalt/content/icu/icudt56b/to.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/tr.res b/src/cobalt/content/icu/icudt56b/tr.res
index 278e42d..4a6298f 100644
--- a/src/cobalt/content/icu/icudt56b/tr.res
+++ b/src/cobalt/content/icu/icudt56b/tr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/translit/root.res b/src/cobalt/content/icu/icudt56b/translit/root.res
index 4c17313..66fc787 100644
--- a/src/cobalt/content/icu/icudt56b/translit/root.res
+++ b/src/cobalt/content/icu/icudt56b/translit/root.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/uk.res b/src/cobalt/content/icu/icudt56b/uk.res
index 200454c..fb8f492 100644
--- a/src/cobalt/content/icu/icudt56b/uk.res
+++ b/src/cobalt/content/icu/icudt56b/uk.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/am.res b/src/cobalt/content/icu/icudt56b/unit/am.res
index 292e986..a35df3b 100644
--- a/src/cobalt/content/icu/icudt56b/unit/am.res
+++ b/src/cobalt/content/icu/icudt56b/unit/am.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/ar.res b/src/cobalt/content/icu/icudt56b/unit/ar.res
index f98995f..bebd1a9 100644
--- a/src/cobalt/content/icu/icudt56b/unit/ar.res
+++ b/src/cobalt/content/icu/icudt56b/unit/ar.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/bg.res b/src/cobalt/content/icu/icudt56b/unit/bg.res
index 1aca03a..602c66a 100644
--- a/src/cobalt/content/icu/icudt56b/unit/bg.res
+++ b/src/cobalt/content/icu/icudt56b/unit/bg.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/bn.res b/src/cobalt/content/icu/icudt56b/unit/bn.res
index 7f04950..1f919d9 100644
--- a/src/cobalt/content/icu/icudt56b/unit/bn.res
+++ b/src/cobalt/content/icu/icudt56b/unit/bn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/ca.res b/src/cobalt/content/icu/icudt56b/unit/ca.res
index 5f9e7d4..5845e5a 100644
--- a/src/cobalt/content/icu/icudt56b/unit/ca.res
+++ b/src/cobalt/content/icu/icudt56b/unit/ca.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/cs.res b/src/cobalt/content/icu/icudt56b/unit/cs.res
index 36876e6..e2d5bac 100644
--- a/src/cobalt/content/icu/icudt56b/unit/cs.res
+++ b/src/cobalt/content/icu/icudt56b/unit/cs.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/da.res b/src/cobalt/content/icu/icudt56b/unit/da.res
index d9e774a..b0cb39c 100644
--- a/src/cobalt/content/icu/icudt56b/unit/da.res
+++ b/src/cobalt/content/icu/icudt56b/unit/da.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/de.res b/src/cobalt/content/icu/icudt56b/unit/de.res
index 28220da..c73d64f 100644
--- a/src/cobalt/content/icu/icudt56b/unit/de.res
+++ b/src/cobalt/content/icu/icudt56b/unit/de.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/de_CH.res b/src/cobalt/content/icu/icudt56b/unit/de_CH.res
index 65ad3f2..00504ca 100644
--- a/src/cobalt/content/icu/icudt56b/unit/de_CH.res
+++ b/src/cobalt/content/icu/icudt56b/unit/de_CH.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/el.res b/src/cobalt/content/icu/icudt56b/unit/el.res
index 2e844d8..a1382e5 100644
--- a/src/cobalt/content/icu/icudt56b/unit/el.res
+++ b/src/cobalt/content/icu/icudt56b/unit/el.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/en.res b/src/cobalt/content/icu/icudt56b/unit/en.res
index 3aae76a..01b89ae 100644
--- a/src/cobalt/content/icu/icudt56b/unit/en.res
+++ b/src/cobalt/content/icu/icudt56b/unit/en.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/en_001.res b/src/cobalt/content/icu/icudt56b/unit/en_001.res
index 47d0e3b..a38707e 100644
--- a/src/cobalt/content/icu/icudt56b/unit/en_001.res
+++ b/src/cobalt/content/icu/icudt56b/unit/en_001.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/en_150.res b/src/cobalt/content/icu/icudt56b/unit/en_150.res
index 56c4fc5..7df0c61 100644
--- a/src/cobalt/content/icu/icudt56b/unit/en_150.res
+++ b/src/cobalt/content/icu/icudt56b/unit/en_150.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/en_AU.res b/src/cobalt/content/icu/icudt56b/unit/en_AU.res
index e299a73..2ac5f74 100644
--- a/src/cobalt/content/icu/icudt56b/unit/en_AU.res
+++ b/src/cobalt/content/icu/icudt56b/unit/en_AU.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/en_CA.res b/src/cobalt/content/icu/icudt56b/unit/en_CA.res
index 2312cfa..23a8c4d 100644
--- a/src/cobalt/content/icu/icudt56b/unit/en_CA.res
+++ b/src/cobalt/content/icu/icudt56b/unit/en_CA.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/en_GB.res b/src/cobalt/content/icu/icudt56b/unit/en_GB.res
index 12c6ad4..f4e4529 100644
--- a/src/cobalt/content/icu/icudt56b/unit/en_GB.res
+++ b/src/cobalt/content/icu/icudt56b/unit/en_GB.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/en_IN.res b/src/cobalt/content/icu/icudt56b/unit/en_IN.res
index 635ae39..24311e6 100644
--- a/src/cobalt/content/icu/icudt56b/unit/en_IN.res
+++ b/src/cobalt/content/icu/icudt56b/unit/en_IN.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/en_NZ.res b/src/cobalt/content/icu/icudt56b/unit/en_NZ.res
index 635ae39..24311e6 100644
--- a/src/cobalt/content/icu/icudt56b/unit/en_NZ.res
+++ b/src/cobalt/content/icu/icudt56b/unit/en_NZ.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/en_ZA.res b/src/cobalt/content/icu/icudt56b/unit/en_ZA.res
index 635ae39..24311e6 100644
--- a/src/cobalt/content/icu/icudt56b/unit/en_ZA.res
+++ b/src/cobalt/content/icu/icudt56b/unit/en_ZA.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/es.res b/src/cobalt/content/icu/icudt56b/unit/es.res
index ffe1f08..38489a7 100644
--- a/src/cobalt/content/icu/icudt56b/unit/es.res
+++ b/src/cobalt/content/icu/icudt56b/unit/es.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/es_419.res b/src/cobalt/content/icu/icudt56b/unit/es_419.res
index 472b17a..7dd5938 100644
--- a/src/cobalt/content/icu/icudt56b/unit/es_419.res
+++ b/src/cobalt/content/icu/icudt56b/unit/es_419.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/es_AR.res b/src/cobalt/content/icu/icudt56b/unit/es_AR.res
index 2321a20..45044ae 100644
--- a/src/cobalt/content/icu/icudt56b/unit/es_AR.res
+++ b/src/cobalt/content/icu/icudt56b/unit/es_AR.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/es_MX.res b/src/cobalt/content/icu/icudt56b/unit/es_MX.res
index 1063a34..e52962f 100644
--- a/src/cobalt/content/icu/icudt56b/unit/es_MX.res
+++ b/src/cobalt/content/icu/icudt56b/unit/es_MX.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/es_US.res b/src/cobalt/content/icu/icudt56b/unit/es_US.res
index 4d5b4c7..00f7bc4 100644
--- a/src/cobalt/content/icu/icudt56b/unit/es_US.res
+++ b/src/cobalt/content/icu/icudt56b/unit/es_US.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/et.res b/src/cobalt/content/icu/icudt56b/unit/et.res
index 4c4e707..07fc2e8 100644
--- a/src/cobalt/content/icu/icudt56b/unit/et.res
+++ b/src/cobalt/content/icu/icudt56b/unit/et.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/fa.res b/src/cobalt/content/icu/icudt56b/unit/fa.res
index 7c9d93f..fbf7d22 100644
--- a/src/cobalt/content/icu/icudt56b/unit/fa.res
+++ b/src/cobalt/content/icu/icudt56b/unit/fa.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/fi.res b/src/cobalt/content/icu/icudt56b/unit/fi.res
index a6f4ffd..dd44aa6 100644
--- a/src/cobalt/content/icu/icudt56b/unit/fi.res
+++ b/src/cobalt/content/icu/icudt56b/unit/fi.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/fil.res b/src/cobalt/content/icu/icudt56b/unit/fil.res
index d37e0c9..592bf13 100644
--- a/src/cobalt/content/icu/icudt56b/unit/fil.res
+++ b/src/cobalt/content/icu/icudt56b/unit/fil.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/fr.res b/src/cobalt/content/icu/icudt56b/unit/fr.res
index ecd764f..0c34090 100644
--- a/src/cobalt/content/icu/icudt56b/unit/fr.res
+++ b/src/cobalt/content/icu/icudt56b/unit/fr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/fr_CA.res b/src/cobalt/content/icu/icudt56b/unit/fr_CA.res
index 6898c10..6d6aaba 100644
--- a/src/cobalt/content/icu/icudt56b/unit/fr_CA.res
+++ b/src/cobalt/content/icu/icudt56b/unit/fr_CA.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/gu.res b/src/cobalt/content/icu/icudt56b/unit/gu.res
index 7ee2a4f..938e994 100644
--- a/src/cobalt/content/icu/icudt56b/unit/gu.res
+++ b/src/cobalt/content/icu/icudt56b/unit/gu.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/he.res b/src/cobalt/content/icu/icudt56b/unit/he.res
index ed32c30..b3f6b97 100644
--- a/src/cobalt/content/icu/icudt56b/unit/he.res
+++ b/src/cobalt/content/icu/icudt56b/unit/he.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/hi.res b/src/cobalt/content/icu/icudt56b/unit/hi.res
index 61a2fc7..7e48b52 100644
--- a/src/cobalt/content/icu/icudt56b/unit/hi.res
+++ b/src/cobalt/content/icu/icudt56b/unit/hi.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/hr.res b/src/cobalt/content/icu/icudt56b/unit/hr.res
index 6d4ddca..9297739 100644
--- a/src/cobalt/content/icu/icudt56b/unit/hr.res
+++ b/src/cobalt/content/icu/icudt56b/unit/hr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/hu.res b/src/cobalt/content/icu/icudt56b/unit/hu.res
index eb21500..b790aed 100644
--- a/src/cobalt/content/icu/icudt56b/unit/hu.res
+++ b/src/cobalt/content/icu/icudt56b/unit/hu.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/id.res b/src/cobalt/content/icu/icudt56b/unit/id.res
index e0f4875..0ecd0cd 100644
--- a/src/cobalt/content/icu/icudt56b/unit/id.res
+++ b/src/cobalt/content/icu/icudt56b/unit/id.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/in.res b/src/cobalt/content/icu/icudt56b/unit/in.res
index 073173b..01466da 100644
--- a/src/cobalt/content/icu/icudt56b/unit/in.res
+++ b/src/cobalt/content/icu/icudt56b/unit/in.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/it.res b/src/cobalt/content/icu/icudt56b/unit/it.res
index 116fa09..f2108bc 100644
--- a/src/cobalt/content/icu/icudt56b/unit/it.res
+++ b/src/cobalt/content/icu/icudt56b/unit/it.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/iw.res b/src/cobalt/content/icu/icudt56b/unit/iw.res
index 05e68f4..abb599a 100644
--- a/src/cobalt/content/icu/icudt56b/unit/iw.res
+++ b/src/cobalt/content/icu/icudt56b/unit/iw.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/ja.res b/src/cobalt/content/icu/icudt56b/unit/ja.res
index 2c04119..9156dab 100644
--- a/src/cobalt/content/icu/icudt56b/unit/ja.res
+++ b/src/cobalt/content/icu/icudt56b/unit/ja.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/kn.res b/src/cobalt/content/icu/icudt56b/unit/kn.res
index 4fc040c..540568c 100644
--- a/src/cobalt/content/icu/icudt56b/unit/kn.res
+++ b/src/cobalt/content/icu/icudt56b/unit/kn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/ko.res b/src/cobalt/content/icu/icudt56b/unit/ko.res
index 4457504..9d6aaaa 100644
--- a/src/cobalt/content/icu/icudt56b/unit/ko.res
+++ b/src/cobalt/content/icu/icudt56b/unit/ko.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/lt.res b/src/cobalt/content/icu/icudt56b/unit/lt.res
index f55c0f3..e18752d 100644
--- a/src/cobalt/content/icu/icudt56b/unit/lt.res
+++ b/src/cobalt/content/icu/icudt56b/unit/lt.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/lv.res b/src/cobalt/content/icu/icudt56b/unit/lv.res
index f151d02..04b478e 100644
--- a/src/cobalt/content/icu/icudt56b/unit/lv.res
+++ b/src/cobalt/content/icu/icudt56b/unit/lv.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/ml.res b/src/cobalt/content/icu/icudt56b/unit/ml.res
index d4eb433..94fa297 100644
--- a/src/cobalt/content/icu/icudt56b/unit/ml.res
+++ b/src/cobalt/content/icu/icudt56b/unit/ml.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/mr.res b/src/cobalt/content/icu/icudt56b/unit/mr.res
index 16a7673..357e525 100644
--- a/src/cobalt/content/icu/icudt56b/unit/mr.res
+++ b/src/cobalt/content/icu/icudt56b/unit/mr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/ms.res b/src/cobalt/content/icu/icudt56b/unit/ms.res
index 7d2e715..a6fc007 100644
--- a/src/cobalt/content/icu/icudt56b/unit/ms.res
+++ b/src/cobalt/content/icu/icudt56b/unit/ms.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/nb.res b/src/cobalt/content/icu/icudt56b/unit/nb.res
index 455bf04..010b278 100644
--- a/src/cobalt/content/icu/icudt56b/unit/nb.res
+++ b/src/cobalt/content/icu/icudt56b/unit/nb.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/nl.res b/src/cobalt/content/icu/icudt56b/unit/nl.res
index fa5887b..dc27465 100644
--- a/src/cobalt/content/icu/icudt56b/unit/nl.res
+++ b/src/cobalt/content/icu/icudt56b/unit/nl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/no.res b/src/cobalt/content/icu/icudt56b/unit/no.res
index b73c692..3d8e984 100644
--- a/src/cobalt/content/icu/icudt56b/unit/no.res
+++ b/src/cobalt/content/icu/icudt56b/unit/no.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/pl.res b/src/cobalt/content/icu/icudt56b/unit/pl.res
index b0a8755..2e25fac 100644
--- a/src/cobalt/content/icu/icudt56b/unit/pl.res
+++ b/src/cobalt/content/icu/icudt56b/unit/pl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/pool.res b/src/cobalt/content/icu/icudt56b/unit/pool.res
index f11a0e0..c65cd54 100644
--- a/src/cobalt/content/icu/icudt56b/unit/pool.res
+++ b/src/cobalt/content/icu/icudt56b/unit/pool.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/pt.res b/src/cobalt/content/icu/icudt56b/unit/pt.res
index d125bac..73168a1 100644
--- a/src/cobalt/content/icu/icudt56b/unit/pt.res
+++ b/src/cobalt/content/icu/icudt56b/unit/pt.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/pt_PT.res b/src/cobalt/content/icu/icudt56b/unit/pt_PT.res
index 88c2270..276dd06 100644
--- a/src/cobalt/content/icu/icudt56b/unit/pt_PT.res
+++ b/src/cobalt/content/icu/icudt56b/unit/pt_PT.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/ro.res b/src/cobalt/content/icu/icudt56b/unit/ro.res
index c83ed06..2a06311 100644
--- a/src/cobalt/content/icu/icudt56b/unit/ro.res
+++ b/src/cobalt/content/icu/icudt56b/unit/ro.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/root.res b/src/cobalt/content/icu/icudt56b/unit/root.res
index a29b95d..615d7e5 100644
--- a/src/cobalt/content/icu/icudt56b/unit/root.res
+++ b/src/cobalt/content/icu/icudt56b/unit/root.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/ru.res b/src/cobalt/content/icu/icudt56b/unit/ru.res
index 7725656..fbece9b 100644
--- a/src/cobalt/content/icu/icudt56b/unit/ru.res
+++ b/src/cobalt/content/icu/icudt56b/unit/ru.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/sh.res b/src/cobalt/content/icu/icudt56b/unit/sh.res
index d473968..96c0714 100644
--- a/src/cobalt/content/icu/icudt56b/unit/sh.res
+++ b/src/cobalt/content/icu/icudt56b/unit/sh.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/sk.res b/src/cobalt/content/icu/icudt56b/unit/sk.res
index c810d56..f3b61f8 100644
--- a/src/cobalt/content/icu/icudt56b/unit/sk.res
+++ b/src/cobalt/content/icu/icudt56b/unit/sk.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/sl.res b/src/cobalt/content/icu/icudt56b/unit/sl.res
index da21626..0d6f0f0 100644
--- a/src/cobalt/content/icu/icudt56b/unit/sl.res
+++ b/src/cobalt/content/icu/icudt56b/unit/sl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/sr.res b/src/cobalt/content/icu/icudt56b/unit/sr.res
index 99cb318..f0053ba 100644
--- a/src/cobalt/content/icu/icudt56b/unit/sr.res
+++ b/src/cobalt/content/icu/icudt56b/unit/sr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/sr_Latn.res b/src/cobalt/content/icu/icudt56b/unit/sr_Latn.res
index e14deae..6dfbf33 100644
--- a/src/cobalt/content/icu/icudt56b/unit/sr_Latn.res
+++ b/src/cobalt/content/icu/icudt56b/unit/sr_Latn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/sv.res b/src/cobalt/content/icu/icudt56b/unit/sv.res
index 5e08842..33a4ca0 100644
--- a/src/cobalt/content/icu/icudt56b/unit/sv.res
+++ b/src/cobalt/content/icu/icudt56b/unit/sv.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/sw.res b/src/cobalt/content/icu/icudt56b/unit/sw.res
index 0b20c40..fa27a7e 100644
--- a/src/cobalt/content/icu/icudt56b/unit/sw.res
+++ b/src/cobalt/content/icu/icudt56b/unit/sw.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/ta.res b/src/cobalt/content/icu/icudt56b/unit/ta.res
index dd9f4ab..13041a5 100644
--- a/src/cobalt/content/icu/icudt56b/unit/ta.res
+++ b/src/cobalt/content/icu/icudt56b/unit/ta.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/te.res b/src/cobalt/content/icu/icudt56b/unit/te.res
index 3082396..18e64af 100644
--- a/src/cobalt/content/icu/icudt56b/unit/te.res
+++ b/src/cobalt/content/icu/icudt56b/unit/te.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/th.res b/src/cobalt/content/icu/icudt56b/unit/th.res
index 9971f89..76ea951 100644
--- a/src/cobalt/content/icu/icudt56b/unit/th.res
+++ b/src/cobalt/content/icu/icudt56b/unit/th.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/tl.res b/src/cobalt/content/icu/icudt56b/unit/tl.res
index c1010d7..60f64fd 100644
--- a/src/cobalt/content/icu/icudt56b/unit/tl.res
+++ b/src/cobalt/content/icu/icudt56b/unit/tl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/tr.res b/src/cobalt/content/icu/icudt56b/unit/tr.res
index ca7aadd..73eb0fc 100644
--- a/src/cobalt/content/icu/icudt56b/unit/tr.res
+++ b/src/cobalt/content/icu/icudt56b/unit/tr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/uk.res b/src/cobalt/content/icu/icudt56b/unit/uk.res
index 58ff16c..3077a54 100644
--- a/src/cobalt/content/icu/icudt56b/unit/uk.res
+++ b/src/cobalt/content/icu/icudt56b/unit/uk.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/vi.res b/src/cobalt/content/icu/icudt56b/unit/vi.res
index f19d427..856d66a 100644
--- a/src/cobalt/content/icu/icudt56b/unit/vi.res
+++ b/src/cobalt/content/icu/icudt56b/unit/vi.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/zh.res b/src/cobalt/content/icu/icudt56b/unit/zh.res
index d5f901c..6daa4c1 100644
--- a/src/cobalt/content/icu/icudt56b/unit/zh.res
+++ b/src/cobalt/content/icu/icudt56b/unit/zh.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/zh_CN.res b/src/cobalt/content/icu/icudt56b/unit/zh_CN.res
index 8f439af..45cf266 100644
--- a/src/cobalt/content/icu/icudt56b/unit/zh_CN.res
+++ b/src/cobalt/content/icu/icudt56b/unit/zh_CN.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/zh_HK.res b/src/cobalt/content/icu/icudt56b/unit/zh_HK.res
index a07da20..4d0916c 100644
--- a/src/cobalt/content/icu/icudt56b/unit/zh_HK.res
+++ b/src/cobalt/content/icu/icudt56b/unit/zh_HK.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/zh_Hans.res b/src/cobalt/content/icu/icudt56b/unit/zh_Hans.res
index 66c86b9..85fc330 100644
--- a/src/cobalt/content/icu/icudt56b/unit/zh_Hans.res
+++ b/src/cobalt/content/icu/icudt56b/unit/zh_Hans.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/zh_Hans_CN.res b/src/cobalt/content/icu/icudt56b/unit/zh_Hans_CN.res
index 1786abd..bdef4bf 100644
--- a/src/cobalt/content/icu/icudt56b/unit/zh_Hans_CN.res
+++ b/src/cobalt/content/icu/icudt56b/unit/zh_Hans_CN.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/zh_Hans_SG.res b/src/cobalt/content/icu/icudt56b/unit/zh_Hans_SG.res
index ca6dcb9..78d7de5 100644
--- a/src/cobalt/content/icu/icudt56b/unit/zh_Hans_SG.res
+++ b/src/cobalt/content/icu/icudt56b/unit/zh_Hans_SG.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/zh_Hant.res b/src/cobalt/content/icu/icudt56b/unit/zh_Hant.res
index d9e19d1..f8405e6 100644
--- a/src/cobalt/content/icu/icudt56b/unit/zh_Hant.res
+++ b/src/cobalt/content/icu/icudt56b/unit/zh_Hant.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/zh_Hant_HK.res b/src/cobalt/content/icu/icudt56b/unit/zh_Hant_HK.res
index 725f53d..9b1162d 100644
--- a/src/cobalt/content/icu/icudt56b/unit/zh_Hant_HK.res
+++ b/src/cobalt/content/icu/icudt56b/unit/zh_Hant_HK.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/zh_Hant_TW.res b/src/cobalt/content/icu/icudt56b/unit/zh_Hant_TW.res
index 1786abd..bdef4bf 100644
--- a/src/cobalt/content/icu/icudt56b/unit/zh_Hant_TW.res
+++ b/src/cobalt/content/icu/icudt56b/unit/zh_Hant_TW.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/zh_SG.res b/src/cobalt/content/icu/icudt56b/unit/zh_SG.res
index e87b215..3cd5b1b 100644
--- a/src/cobalt/content/icu/icudt56b/unit/zh_SG.res
+++ b/src/cobalt/content/icu/icudt56b/unit/zh_SG.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/zh_TW.res b/src/cobalt/content/icu/icudt56b/unit/zh_TW.res
index 1c39fca..1aac47e 100644
--- a/src/cobalt/content/icu/icudt56b/unit/zh_TW.res
+++ b/src/cobalt/content/icu/icudt56b/unit/zh_TW.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ur.res b/src/cobalt/content/icu/icudt56b/ur.res
index b89e41a..dee9ed1 100644
--- a/src/cobalt/content/icu/icudt56b/ur.res
+++ b/src/cobalt/content/icu/icudt56b/ur.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/uz.res b/src/cobalt/content/icu/icudt56b/uz.res
index 95f2baa..25206c7 100644
--- a/src/cobalt/content/icu/icudt56b/uz.res
+++ b/src/cobalt/content/icu/icudt56b/uz.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/vi.res b/src/cobalt/content/icu/icudt56b/vi.res
index 28dd7cc..0f73fb7 100644
--- a/src/cobalt/content/icu/icudt56b/vi.res
+++ b/src/cobalt/content/icu/icudt56b/vi.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/wa.res b/src/cobalt/content/icu/icudt56b/wa.res
index 35aa148..e9311b4 100644
--- a/src/cobalt/content/icu/icudt56b/wa.res
+++ b/src/cobalt/content/icu/icudt56b/wa.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/yo.res b/src/cobalt/content/icu/icudt56b/yo.res
index 622dd60..070063d 100644
--- a/src/cobalt/content/icu/icudt56b/yo.res
+++ b/src/cobalt/content/icu/icudt56b/yo.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zh.res b/src/cobalt/content/icu/icudt56b/zh.res
index 3f8f599..7d2ecf2 100644
--- a/src/cobalt/content/icu/icudt56b/zh.res
+++ b/src/cobalt/content/icu/icudt56b/zh.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zh_CN.res b/src/cobalt/content/icu/icudt56b/zh_CN.res
index d366b9e..1b8f7db 100644
--- a/src/cobalt/content/icu/icudt56b/zh_CN.res
+++ b/src/cobalt/content/icu/icudt56b/zh_CN.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zh_HK.res b/src/cobalt/content/icu/icudt56b/zh_HK.res
index 7432644..9e8894a 100644
--- a/src/cobalt/content/icu/icudt56b/zh_HK.res
+++ b/src/cobalt/content/icu/icudt56b/zh_HK.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zh_Hans.res b/src/cobalt/content/icu/icudt56b/zh_Hans.res
index 0c29168..7a2eb6d 100644
--- a/src/cobalt/content/icu/icudt56b/zh_Hans.res
+++ b/src/cobalt/content/icu/icudt56b/zh_Hans.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zh_Hans_CN.res b/src/cobalt/content/icu/icudt56b/zh_Hans_CN.res
index 0c29168..7a2eb6d 100644
--- a/src/cobalt/content/icu/icudt56b/zh_Hans_CN.res
+++ b/src/cobalt/content/icu/icudt56b/zh_Hans_CN.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zh_Hans_SG.res b/src/cobalt/content/icu/icudt56b/zh_Hans_SG.res
index 2d2d350..6e1a433 100644
--- a/src/cobalt/content/icu/icudt56b/zh_Hans_SG.res
+++ b/src/cobalt/content/icu/icudt56b/zh_Hans_SG.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zh_Hant.res b/src/cobalt/content/icu/icudt56b/zh_Hant.res
index 7d655fa..0bfaa77 100644
--- a/src/cobalt/content/icu/icudt56b/zh_Hant.res
+++ b/src/cobalt/content/icu/icudt56b/zh_Hant.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zh_Hant_HK.res b/src/cobalt/content/icu/icudt56b/zh_Hant_HK.res
index f4f8ce4..a0b017d 100644
--- a/src/cobalt/content/icu/icudt56b/zh_Hant_HK.res
+++ b/src/cobalt/content/icu/icudt56b/zh_Hant_HK.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zh_Hant_TW.res b/src/cobalt/content/icu/icudt56b/zh_Hant_TW.res
index 0c29168..7a2eb6d 100644
--- a/src/cobalt/content/icu/icudt56b/zh_Hant_TW.res
+++ b/src/cobalt/content/icu/icudt56b/zh_Hant_TW.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zh_SG.res b/src/cobalt/content/icu/icudt56b/zh_SG.res
index 720eed1..a0b68a9 100644
--- a/src/cobalt/content/icu/icudt56b/zh_SG.res
+++ b/src/cobalt/content/icu/icudt56b/zh_SG.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zh_TW.res b/src/cobalt/content/icu/icudt56b/zh_TW.res
index f7a32b9..0dff169 100644
--- a/src/cobalt/content/icu/icudt56b/zh_TW.res
+++ b/src/cobalt/content/icu/icudt56b/zh_TW.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/am.res b/src/cobalt/content/icu/icudt56b/zone/am.res
index ecdf5a6..8d19975 100644
--- a/src/cobalt/content/icu/icudt56b/zone/am.res
+++ b/src/cobalt/content/icu/icudt56b/zone/am.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/ar.res b/src/cobalt/content/icu/icudt56b/zone/ar.res
index 90bf7d1..d71faf3 100644
--- a/src/cobalt/content/icu/icudt56b/zone/ar.res
+++ b/src/cobalt/content/icu/icudt56b/zone/ar.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/bg.res b/src/cobalt/content/icu/icudt56b/zone/bg.res
index 1e3b8b7..226554b 100644
--- a/src/cobalt/content/icu/icudt56b/zone/bg.res
+++ b/src/cobalt/content/icu/icudt56b/zone/bg.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/bn.res b/src/cobalt/content/icu/icudt56b/zone/bn.res
index 1bfd7d3..83c397b 100644
--- a/src/cobalt/content/icu/icudt56b/zone/bn.res
+++ b/src/cobalt/content/icu/icudt56b/zone/bn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/ca.res b/src/cobalt/content/icu/icudt56b/zone/ca.res
index 60a5a33..2fb72fb 100644
--- a/src/cobalt/content/icu/icudt56b/zone/ca.res
+++ b/src/cobalt/content/icu/icudt56b/zone/ca.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/cs.res b/src/cobalt/content/icu/icudt56b/zone/cs.res
index bcd686e..905fdde 100644
--- a/src/cobalt/content/icu/icudt56b/zone/cs.res
+++ b/src/cobalt/content/icu/icudt56b/zone/cs.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/da.res b/src/cobalt/content/icu/icudt56b/zone/da.res
index 47df657..9080b79 100644
--- a/src/cobalt/content/icu/icudt56b/zone/da.res
+++ b/src/cobalt/content/icu/icudt56b/zone/da.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/de.res b/src/cobalt/content/icu/icudt56b/zone/de.res
index e9a0bcd..913e3f2 100644
--- a/src/cobalt/content/icu/icudt56b/zone/de.res
+++ b/src/cobalt/content/icu/icudt56b/zone/de.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/el.res b/src/cobalt/content/icu/icudt56b/zone/el.res
index 16e754a..76d3839 100644
--- a/src/cobalt/content/icu/icudt56b/zone/el.res
+++ b/src/cobalt/content/icu/icudt56b/zone/el.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/en.res b/src/cobalt/content/icu/icudt56b/zone/en.res
index 54e5bd2..c5af6cc 100644
--- a/src/cobalt/content/icu/icudt56b/zone/en.res
+++ b/src/cobalt/content/icu/icudt56b/zone/en.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/en_001.res b/src/cobalt/content/icu/icudt56b/zone/en_001.res
index 8a5dc2f..d57ca5b 100644
--- a/src/cobalt/content/icu/icudt56b/zone/en_001.res
+++ b/src/cobalt/content/icu/icudt56b/zone/en_001.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/en_150.res b/src/cobalt/content/icu/icudt56b/zone/en_150.res
index ddebb42..ba3ce45 100644
--- a/src/cobalt/content/icu/icudt56b/zone/en_150.res
+++ b/src/cobalt/content/icu/icudt56b/zone/en_150.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/en_AU.res b/src/cobalt/content/icu/icudt56b/zone/en_AU.res
index a8735c5..23645e7 100644
--- a/src/cobalt/content/icu/icudt56b/zone/en_AU.res
+++ b/src/cobalt/content/icu/icudt56b/zone/en_AU.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/en_CA.res b/src/cobalt/content/icu/icudt56b/zone/en_CA.res
index 4e338d4..1bac93c 100644
--- a/src/cobalt/content/icu/icudt56b/zone/en_CA.res
+++ b/src/cobalt/content/icu/icudt56b/zone/en_CA.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/en_GB.res b/src/cobalt/content/icu/icudt56b/zone/en_GB.res
index 264b11d..2754391 100644
--- a/src/cobalt/content/icu/icudt56b/zone/en_GB.res
+++ b/src/cobalt/content/icu/icudt56b/zone/en_GB.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/en_IN.res b/src/cobalt/content/icu/icudt56b/zone/en_IN.res
index 70a1809..05a0947 100644
--- a/src/cobalt/content/icu/icudt56b/zone/en_IN.res
+++ b/src/cobalt/content/icu/icudt56b/zone/en_IN.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/en_NZ.res b/src/cobalt/content/icu/icudt56b/zone/en_NZ.res
index b1e0e1f..05cc670 100644
--- a/src/cobalt/content/icu/icudt56b/zone/en_NZ.res
+++ b/src/cobalt/content/icu/icudt56b/zone/en_NZ.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/en_ZA.res b/src/cobalt/content/icu/icudt56b/zone/en_ZA.res
index 3b9c2d9..c2c2087 100644
--- a/src/cobalt/content/icu/icudt56b/zone/en_ZA.res
+++ b/src/cobalt/content/icu/icudt56b/zone/en_ZA.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/es.res b/src/cobalt/content/icu/icudt56b/zone/es.res
index 0b7f828..21642cd 100644
--- a/src/cobalt/content/icu/icudt56b/zone/es.res
+++ b/src/cobalt/content/icu/icudt56b/zone/es.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/es_419.res b/src/cobalt/content/icu/icudt56b/zone/es_419.res
index 6a92ba0..90121e1 100644
--- a/src/cobalt/content/icu/icudt56b/zone/es_419.res
+++ b/src/cobalt/content/icu/icudt56b/zone/es_419.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/es_AR.res b/src/cobalt/content/icu/icudt56b/zone/es_AR.res
index 487b16f..b824e1a 100644
--- a/src/cobalt/content/icu/icudt56b/zone/es_AR.res
+++ b/src/cobalt/content/icu/icudt56b/zone/es_AR.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/es_MX.res b/src/cobalt/content/icu/icudt56b/zone/es_MX.res
index 6fbc5cc..229f469 100644
--- a/src/cobalt/content/icu/icudt56b/zone/es_MX.res
+++ b/src/cobalt/content/icu/icudt56b/zone/es_MX.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/es_US.res b/src/cobalt/content/icu/icudt56b/zone/es_US.res
index 6008b97..3e42ce2 100644
--- a/src/cobalt/content/icu/icudt56b/zone/es_US.res
+++ b/src/cobalt/content/icu/icudt56b/zone/es_US.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/et.res b/src/cobalt/content/icu/icudt56b/zone/et.res
index 4e38bb0..6882e8c 100644
--- a/src/cobalt/content/icu/icudt56b/zone/et.res
+++ b/src/cobalt/content/icu/icudt56b/zone/et.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/fa.res b/src/cobalt/content/icu/icudt56b/zone/fa.res
index d6d73bf..335ea68 100644
--- a/src/cobalt/content/icu/icudt56b/zone/fa.res
+++ b/src/cobalt/content/icu/icudt56b/zone/fa.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/fi.res b/src/cobalt/content/icu/icudt56b/zone/fi.res
index e5e130f..652f440 100644
--- a/src/cobalt/content/icu/icudt56b/zone/fi.res
+++ b/src/cobalt/content/icu/icudt56b/zone/fi.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/fil.res b/src/cobalt/content/icu/icudt56b/zone/fil.res
index 53bebf4..411f4c4 100644
--- a/src/cobalt/content/icu/icudt56b/zone/fil.res
+++ b/src/cobalt/content/icu/icudt56b/zone/fil.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/fr.res b/src/cobalt/content/icu/icudt56b/zone/fr.res
index 8a69d68..5ffd2c7 100644
--- a/src/cobalt/content/icu/icudt56b/zone/fr.res
+++ b/src/cobalt/content/icu/icudt56b/zone/fr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/fr_CA.res b/src/cobalt/content/icu/icudt56b/zone/fr_CA.res
index fadc1ad..2a97cb4 100644
--- a/src/cobalt/content/icu/icudt56b/zone/fr_CA.res
+++ b/src/cobalt/content/icu/icudt56b/zone/fr_CA.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/gu.res b/src/cobalt/content/icu/icudt56b/zone/gu.res
index a2e1968..6363c38 100644
--- a/src/cobalt/content/icu/icudt56b/zone/gu.res
+++ b/src/cobalt/content/icu/icudt56b/zone/gu.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/he.res b/src/cobalt/content/icu/icudt56b/zone/he.res
index 5c0a02b..eb383e7 100644
--- a/src/cobalt/content/icu/icudt56b/zone/he.res
+++ b/src/cobalt/content/icu/icudt56b/zone/he.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/hi.res b/src/cobalt/content/icu/icudt56b/zone/hi.res
index 6a382f2..d79080b 100644
--- a/src/cobalt/content/icu/icudt56b/zone/hi.res
+++ b/src/cobalt/content/icu/icudt56b/zone/hi.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/hr.res b/src/cobalt/content/icu/icudt56b/zone/hr.res
index d6178cf..31121f4 100644
--- a/src/cobalt/content/icu/icudt56b/zone/hr.res
+++ b/src/cobalt/content/icu/icudt56b/zone/hr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/hu.res b/src/cobalt/content/icu/icudt56b/zone/hu.res
index 5e20524..d18a8e9 100644
--- a/src/cobalt/content/icu/icudt56b/zone/hu.res
+++ b/src/cobalt/content/icu/icudt56b/zone/hu.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/id.res b/src/cobalt/content/icu/icudt56b/zone/id.res
index daea9ba..56dddb4 100644
--- a/src/cobalt/content/icu/icudt56b/zone/id.res
+++ b/src/cobalt/content/icu/icudt56b/zone/id.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/in.res b/src/cobalt/content/icu/icudt56b/zone/in.res
index 688b635..b0f0504 100644
--- a/src/cobalt/content/icu/icudt56b/zone/in.res
+++ b/src/cobalt/content/icu/icudt56b/zone/in.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/it.res b/src/cobalt/content/icu/icudt56b/zone/it.res
index 6a2499d..804ab13 100644
--- a/src/cobalt/content/icu/icudt56b/zone/it.res
+++ b/src/cobalt/content/icu/icudt56b/zone/it.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/iw.res b/src/cobalt/content/icu/icudt56b/zone/iw.res
index 2302404..de6dc2a 100644
--- a/src/cobalt/content/icu/icudt56b/zone/iw.res
+++ b/src/cobalt/content/icu/icudt56b/zone/iw.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/ja.res b/src/cobalt/content/icu/icudt56b/zone/ja.res
index 009c899..3ef3a97 100644
--- a/src/cobalt/content/icu/icudt56b/zone/ja.res
+++ b/src/cobalt/content/icu/icudt56b/zone/ja.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/kn.res b/src/cobalt/content/icu/icudt56b/zone/kn.res
index 5ceecc8..78f7c1c 100644
--- a/src/cobalt/content/icu/icudt56b/zone/kn.res
+++ b/src/cobalt/content/icu/icudt56b/zone/kn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/ko.res b/src/cobalt/content/icu/icudt56b/zone/ko.res
index 9815828..92140a3 100644
--- a/src/cobalt/content/icu/icudt56b/zone/ko.res
+++ b/src/cobalt/content/icu/icudt56b/zone/ko.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/lt.res b/src/cobalt/content/icu/icudt56b/zone/lt.res
index 59156b4..d35f2b8 100644
--- a/src/cobalt/content/icu/icudt56b/zone/lt.res
+++ b/src/cobalt/content/icu/icudt56b/zone/lt.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/lv.res b/src/cobalt/content/icu/icudt56b/zone/lv.res
index bc23fa3..c80f5e8 100644
--- a/src/cobalt/content/icu/icudt56b/zone/lv.res
+++ b/src/cobalt/content/icu/icudt56b/zone/lv.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/ml.res b/src/cobalt/content/icu/icudt56b/zone/ml.res
index 2b45bfc..5e1fa15 100644
--- a/src/cobalt/content/icu/icudt56b/zone/ml.res
+++ b/src/cobalt/content/icu/icudt56b/zone/ml.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/mr.res b/src/cobalt/content/icu/icudt56b/zone/mr.res
index e15dff2..d01a7f4 100644
--- a/src/cobalt/content/icu/icudt56b/zone/mr.res
+++ b/src/cobalt/content/icu/icudt56b/zone/mr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/ms.res b/src/cobalt/content/icu/icudt56b/zone/ms.res
index 3d455e4..df8f19f 100644
--- a/src/cobalt/content/icu/icudt56b/zone/ms.res
+++ b/src/cobalt/content/icu/icudt56b/zone/ms.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/nb.res b/src/cobalt/content/icu/icudt56b/zone/nb.res
index 89aeb11..ef6dfde 100644
--- a/src/cobalt/content/icu/icudt56b/zone/nb.res
+++ b/src/cobalt/content/icu/icudt56b/zone/nb.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/nl.res b/src/cobalt/content/icu/icudt56b/zone/nl.res
index a331fb4..965756c 100644
--- a/src/cobalt/content/icu/icudt56b/zone/nl.res
+++ b/src/cobalt/content/icu/icudt56b/zone/nl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/no.res b/src/cobalt/content/icu/icudt56b/zone/no.res
index 1d2ff18..449c0c1 100644
--- a/src/cobalt/content/icu/icudt56b/zone/no.res
+++ b/src/cobalt/content/icu/icudt56b/zone/no.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/pl.res b/src/cobalt/content/icu/icudt56b/zone/pl.res
index 10bc3fc..dea3693 100644
--- a/src/cobalt/content/icu/icudt56b/zone/pl.res
+++ b/src/cobalt/content/icu/icudt56b/zone/pl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/pool.res b/src/cobalt/content/icu/icudt56b/zone/pool.res
index 8738534..0e00d90 100644
--- a/src/cobalt/content/icu/icudt56b/zone/pool.res
+++ b/src/cobalt/content/icu/icudt56b/zone/pool.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/pt.res b/src/cobalt/content/icu/icudt56b/zone/pt.res
index f443cd0..79dbf18 100644
--- a/src/cobalt/content/icu/icudt56b/zone/pt.res
+++ b/src/cobalt/content/icu/icudt56b/zone/pt.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/pt_PT.res b/src/cobalt/content/icu/icudt56b/zone/pt_PT.res
index 83f2189..7d596ea 100644
--- a/src/cobalt/content/icu/icudt56b/zone/pt_PT.res
+++ b/src/cobalt/content/icu/icudt56b/zone/pt_PT.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/ro.res b/src/cobalt/content/icu/icudt56b/zone/ro.res
index 8a56e8f..69a591e 100644
--- a/src/cobalt/content/icu/icudt56b/zone/ro.res
+++ b/src/cobalt/content/icu/icudt56b/zone/ro.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/root.res b/src/cobalt/content/icu/icudt56b/zone/root.res
index 2f519c3..23983bb 100644
--- a/src/cobalt/content/icu/icudt56b/zone/root.res
+++ b/src/cobalt/content/icu/icudt56b/zone/root.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/ru.res b/src/cobalt/content/icu/icudt56b/zone/ru.res
index e2c9787..2931c15 100644
--- a/src/cobalt/content/icu/icudt56b/zone/ru.res
+++ b/src/cobalt/content/icu/icudt56b/zone/ru.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/sk.res b/src/cobalt/content/icu/icudt56b/zone/sk.res
index 26d150c..9efb8af 100644
--- a/src/cobalt/content/icu/icudt56b/zone/sk.res
+++ b/src/cobalt/content/icu/icudt56b/zone/sk.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/sl.res b/src/cobalt/content/icu/icudt56b/zone/sl.res
index f808cf0..28abb1f 100644
--- a/src/cobalt/content/icu/icudt56b/zone/sl.res
+++ b/src/cobalt/content/icu/icudt56b/zone/sl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/sr.res b/src/cobalt/content/icu/icudt56b/zone/sr.res
index 6420fc2..d8a33b1 100644
--- a/src/cobalt/content/icu/icudt56b/zone/sr.res
+++ b/src/cobalt/content/icu/icudt56b/zone/sr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/sv.res b/src/cobalt/content/icu/icudt56b/zone/sv.res
index ba29b46..ad8ded4 100644
--- a/src/cobalt/content/icu/icudt56b/zone/sv.res
+++ b/src/cobalt/content/icu/icudt56b/zone/sv.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/sw.res b/src/cobalt/content/icu/icudt56b/zone/sw.res
index b9dd514..b050d1b 100644
--- a/src/cobalt/content/icu/icudt56b/zone/sw.res
+++ b/src/cobalt/content/icu/icudt56b/zone/sw.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/ta.res b/src/cobalt/content/icu/icudt56b/zone/ta.res
index a2133b6..78be1b5 100644
--- a/src/cobalt/content/icu/icudt56b/zone/ta.res
+++ b/src/cobalt/content/icu/icudt56b/zone/ta.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/te.res b/src/cobalt/content/icu/icudt56b/zone/te.res
index e98f297..339dba7 100644
--- a/src/cobalt/content/icu/icudt56b/zone/te.res
+++ b/src/cobalt/content/icu/icudt56b/zone/te.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/th.res b/src/cobalt/content/icu/icudt56b/zone/th.res
index 280414c..72fc122 100644
--- a/src/cobalt/content/icu/icudt56b/zone/th.res
+++ b/src/cobalt/content/icu/icudt56b/zone/th.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/tr.res b/src/cobalt/content/icu/icudt56b/zone/tr.res
index 75e59ef..abc50c8 100644
--- a/src/cobalt/content/icu/icudt56b/zone/tr.res
+++ b/src/cobalt/content/icu/icudt56b/zone/tr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/tzdbNames.res b/src/cobalt/content/icu/icudt56b/zone/tzdbNames.res
index ec5b930..8b8fcad 100644
--- a/src/cobalt/content/icu/icudt56b/zone/tzdbNames.res
+++ b/src/cobalt/content/icu/icudt56b/zone/tzdbNames.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/uk.res b/src/cobalt/content/icu/icudt56b/zone/uk.res
index a71b8e1..ce3f5b3 100644
--- a/src/cobalt/content/icu/icudt56b/zone/uk.res
+++ b/src/cobalt/content/icu/icudt56b/zone/uk.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/vi.res b/src/cobalt/content/icu/icudt56b/zone/vi.res
index d22c37a..25807e2 100644
--- a/src/cobalt/content/icu/icudt56b/zone/vi.res
+++ b/src/cobalt/content/icu/icudt56b/zone/vi.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/zh.res b/src/cobalt/content/icu/icudt56b/zone/zh.res
index a2553cb..7a99c76 100644
--- a/src/cobalt/content/icu/icudt56b/zone/zh.res
+++ b/src/cobalt/content/icu/icudt56b/zone/zh.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/zh_CN.res b/src/cobalt/content/icu/icudt56b/zone/zh_CN.res
index 300fdf6..ec46635 100644
--- a/src/cobalt/content/icu/icudt56b/zone/zh_CN.res
+++ b/src/cobalt/content/icu/icudt56b/zone/zh_CN.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/zh_HK.res b/src/cobalt/content/icu/icudt56b/zone/zh_HK.res
index 4016633..fe81e04 100644
--- a/src/cobalt/content/icu/icudt56b/zone/zh_HK.res
+++ b/src/cobalt/content/icu/icudt56b/zone/zh_HK.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/zh_Hans.res b/src/cobalt/content/icu/icudt56b/zone/zh_Hans.res
index 587229d..b48bd9c 100644
--- a/src/cobalt/content/icu/icudt56b/zone/zh_Hans.res
+++ b/src/cobalt/content/icu/icudt56b/zone/zh_Hans.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/zh_Hans_CN.res b/src/cobalt/content/icu/icudt56b/zone/zh_Hans_CN.res
index 2f1a4b5..3e5b7e0 100644
--- a/src/cobalt/content/icu/icudt56b/zone/zh_Hans_CN.res
+++ b/src/cobalt/content/icu/icudt56b/zone/zh_Hans_CN.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/zh_Hans_SG.res b/src/cobalt/content/icu/icudt56b/zone/zh_Hans_SG.res
index 3b199b9..73b46ba 100644
--- a/src/cobalt/content/icu/icudt56b/zone/zh_Hans_SG.res
+++ b/src/cobalt/content/icu/icudt56b/zone/zh_Hans_SG.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/zh_Hant.res b/src/cobalt/content/icu/icudt56b/zone/zh_Hant.res
index 2bb3aa3..80e2d84 100644
--- a/src/cobalt/content/icu/icudt56b/zone/zh_Hant.res
+++ b/src/cobalt/content/icu/icudt56b/zone/zh_Hant.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/zh_Hant_HK.res b/src/cobalt/content/icu/icudt56b/zone/zh_Hant_HK.res
index 9bc0748..c32662a 100644
--- a/src/cobalt/content/icu/icudt56b/zone/zh_Hant_HK.res
+++ b/src/cobalt/content/icu/icudt56b/zone/zh_Hant_HK.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/zh_Hant_TW.res b/src/cobalt/content/icu/icudt56b/zone/zh_Hant_TW.res
index 2f1a4b5..3e5b7e0 100644
--- a/src/cobalt/content/icu/icudt56b/zone/zh_Hant_TW.res
+++ b/src/cobalt/content/icu/icudt56b/zone/zh_Hant_TW.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/zh_SG.res b/src/cobalt/content/icu/icudt56b/zone/zh_SG.res
index 3d32d68..9a6d40e 100644
--- a/src/cobalt/content/icu/icudt56b/zone/zh_SG.res
+++ b/src/cobalt/content/icu/icudt56b/zone/zh_SG.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/zh_TW.res b/src/cobalt/content/icu/icudt56b/zone/zh_TW.res
index b7bc97e..403b5a8 100644
--- a/src/cobalt/content/icu/icudt56b/zone/zh_TW.res
+++ b/src/cobalt/content/icu/icudt56b/zone/zh_TW.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zu.res b/src/cobalt/content/icu/icudt56b/zu.res
index ce67f86..15cdcff 100644
--- a/src/cobalt/content/icu/icudt56b/zu.res
+++ b/src/cobalt/content/icu/icudt56b/zu.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/af.res b/src/cobalt/content/icu/icudt56l/af.res
index c10dff1..7d0f080 100644
--- a/src/cobalt/content/icu/icudt56l/af.res
+++ b/src/cobalt/content/icu/icudt56l/af.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ak.res b/src/cobalt/content/icu/icudt56l/ak.res
index 38c65e8..a2f7b87 100644
--- a/src/cobalt/content/icu/icudt56l/ak.res
+++ b/src/cobalt/content/icu/icudt56l/ak.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/am.res b/src/cobalt/content/icu/icudt56l/am.res
index 5057758..74dc8d2 100644
--- a/src/cobalt/content/icu/icudt56l/am.res
+++ b/src/cobalt/content/icu/icudt56l/am.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/an.res b/src/cobalt/content/icu/icudt56l/an.res
index d25cfda..6faff72 100644
--- a/src/cobalt/content/icu/icudt56l/an.res
+++ b/src/cobalt/content/icu/icudt56l/an.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ar.res b/src/cobalt/content/icu/icudt56l/ar.res
index 9ef2045..474e792 100644
--- a/src/cobalt/content/icu/icudt56l/ar.res
+++ b/src/cobalt/content/icu/icudt56l/ar.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ast.res b/src/cobalt/content/icu/icudt56l/ast.res
index ee47109..5812754 100644
--- a/src/cobalt/content/icu/icudt56l/ast.res
+++ b/src/cobalt/content/icu/icudt56l/ast.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/az.res b/src/cobalt/content/icu/icudt56l/az.res
index e1470c0..259dcba 100644
--- a/src/cobalt/content/icu/icudt56l/az.res
+++ b/src/cobalt/content/icu/icudt56l/az.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/be.res b/src/cobalt/content/icu/icudt56l/be.res
index b70175a..4f3efa9 100644
--- a/src/cobalt/content/icu/icudt56l/be.res
+++ b/src/cobalt/content/icu/icudt56l/be.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/bem.res b/src/cobalt/content/icu/icudt56l/bem.res
index db42942..f2c0f8a 100644
--- a/src/cobalt/content/icu/icudt56l/bem.res
+++ b/src/cobalt/content/icu/icudt56l/bem.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/bg.res b/src/cobalt/content/icu/icudt56l/bg.res
index 2a45166..460af4f 100644
--- a/src/cobalt/content/icu/icudt56l/bg.res
+++ b/src/cobalt/content/icu/icudt56l/bg.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/bn.res b/src/cobalt/content/icu/icudt56l/bn.res
index e1deb82..c1988d5 100644
--- a/src/cobalt/content/icu/icudt56l/bn.res
+++ b/src/cobalt/content/icu/icudt56l/bn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/br.res b/src/cobalt/content/icu/icudt56l/br.res
index b3fd0fa..4928119 100644
--- a/src/cobalt/content/icu/icudt56l/br.res
+++ b/src/cobalt/content/icu/icudt56l/br.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/bs.res b/src/cobalt/content/icu/icudt56l/bs.res
index e7f1481..4cb47ea 100644
--- a/src/cobalt/content/icu/icudt56l/bs.res
+++ b/src/cobalt/content/icu/icudt56l/bs.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ca.res b/src/cobalt/content/icu/icudt56l/ca.res
index 3ef57e3..2b42ab7 100644
--- a/src/cobalt/content/icu/icudt56l/ca.res
+++ b/src/cobalt/content/icu/icudt56l/ca.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ckb.res b/src/cobalt/content/icu/icudt56l/ckb.res
index 3074461..190b2bd 100644
--- a/src/cobalt/content/icu/icudt56l/ckb.res
+++ b/src/cobalt/content/icu/icudt56l/ckb.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/ar.res b/src/cobalt/content/icu/icudt56l/coll/ar.res
index e2f94ca..860e431 100644
--- a/src/cobalt/content/icu/icudt56l/coll/ar.res
+++ b/src/cobalt/content/icu/icudt56l/coll/ar.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/bg.res b/src/cobalt/content/icu/icudt56l/coll/bg.res
index 671f9b1..610281e 100644
--- a/src/cobalt/content/icu/icudt56l/coll/bg.res
+++ b/src/cobalt/content/icu/icudt56l/coll/bg.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/bn.res b/src/cobalt/content/icu/icudt56l/coll/bn.res
index c2d025b..1466600 100644
--- a/src/cobalt/content/icu/icudt56l/coll/bn.res
+++ b/src/cobalt/content/icu/icudt56l/coll/bn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/ca.res b/src/cobalt/content/icu/icudt56l/coll/ca.res
index 94e09da..8f9c047 100644
--- a/src/cobalt/content/icu/icudt56l/coll/ca.res
+++ b/src/cobalt/content/icu/icudt56l/coll/ca.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/cs.res b/src/cobalt/content/icu/icudt56l/coll/cs.res
index af17fc9..6b71925 100644
--- a/src/cobalt/content/icu/icudt56l/coll/cs.res
+++ b/src/cobalt/content/icu/icudt56l/coll/cs.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/da.res b/src/cobalt/content/icu/icudt56l/coll/da.res
index eec8a2f..6b71925 100644
--- a/src/cobalt/content/icu/icudt56l/coll/da.res
+++ b/src/cobalt/content/icu/icudt56l/coll/da.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/de.res b/src/cobalt/content/icu/icudt56l/coll/de.res
index 42d0fed..28c8794 100644
--- a/src/cobalt/content/icu/icudt56l/coll/de.res
+++ b/src/cobalt/content/icu/icudt56l/coll/de.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/de_AT.res b/src/cobalt/content/icu/icudt56l/coll/de_AT.res
index 8a598af..8bcbf4c 100644
--- a/src/cobalt/content/icu/icudt56l/coll/de_AT.res
+++ b/src/cobalt/content/icu/icudt56l/coll/de_AT.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/el.res b/src/cobalt/content/icu/icudt56l/coll/el.res
index 4190b25..610281e 100644
--- a/src/cobalt/content/icu/icudt56l/coll/el.res
+++ b/src/cobalt/content/icu/icudt56l/coll/el.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/es.res b/src/cobalt/content/icu/icudt56l/coll/es.res
index 0924aa2..be6fa50 100644
--- a/src/cobalt/content/icu/icudt56l/coll/es.res
+++ b/src/cobalt/content/icu/icudt56l/coll/es.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/et.res b/src/cobalt/content/icu/icudt56l/coll/et.res
index 435d204..610281e 100644
--- a/src/cobalt/content/icu/icudt56l/coll/et.res
+++ b/src/cobalt/content/icu/icudt56l/coll/et.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/fa.res b/src/cobalt/content/icu/icudt56l/coll/fa.res
index 77d20bf..610281e 100644
--- a/src/cobalt/content/icu/icudt56l/coll/fa.res
+++ b/src/cobalt/content/icu/icudt56l/coll/fa.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/fi.res b/src/cobalt/content/icu/icudt56l/coll/fi.res
index d4545cb..be6fa50 100644
--- a/src/cobalt/content/icu/icudt56l/coll/fi.res
+++ b/src/cobalt/content/icu/icudt56l/coll/fi.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/fil.res b/src/cobalt/content/icu/icudt56l/coll/fil.res
index 9bbe4fa..610281e 100644
--- a/src/cobalt/content/icu/icudt56l/coll/fil.res
+++ b/src/cobalt/content/icu/icudt56l/coll/fil.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/fr_CA.res b/src/cobalt/content/icu/icudt56l/coll/fr_CA.res
index faf3f21..610281e 100644
--- a/src/cobalt/content/icu/icudt56l/coll/fr_CA.res
+++ b/src/cobalt/content/icu/icudt56l/coll/fr_CA.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/gu.res b/src/cobalt/content/icu/icudt56l/coll/gu.res
index e131aac..610281e 100644
--- a/src/cobalt/content/icu/icudt56l/coll/gu.res
+++ b/src/cobalt/content/icu/icudt56l/coll/gu.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/he.res b/src/cobalt/content/icu/icudt56l/coll/he.res
index 270a0d6..6b71925 100644
--- a/src/cobalt/content/icu/icudt56l/coll/he.res
+++ b/src/cobalt/content/icu/icudt56l/coll/he.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/hi.res b/src/cobalt/content/icu/icudt56l/coll/hi.res
index 1ab090a..610281e 100644
--- a/src/cobalt/content/icu/icudt56l/coll/hi.res
+++ b/src/cobalt/content/icu/icudt56l/coll/hi.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/hr.res b/src/cobalt/content/icu/icudt56l/coll/hr.res
index 360d336..6b71925 100644
--- a/src/cobalt/content/icu/icudt56l/coll/hr.res
+++ b/src/cobalt/content/icu/icudt56l/coll/hr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/hu.res b/src/cobalt/content/icu/icudt56l/coll/hu.res
index 8de940f..610281e 100644
--- a/src/cobalt/content/icu/icudt56l/coll/hu.res
+++ b/src/cobalt/content/icu/icudt56l/coll/hu.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/ja.res b/src/cobalt/content/icu/icudt56l/coll/ja.res
index 531a1f3..698d0e6 100644
--- a/src/cobalt/content/icu/icudt56l/coll/ja.res
+++ b/src/cobalt/content/icu/icudt56l/coll/ja.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/kn.res b/src/cobalt/content/icu/icudt56l/coll/kn.res
index 8fd0fd6..1466600 100644
--- a/src/cobalt/content/icu/icudt56l/coll/kn.res
+++ b/src/cobalt/content/icu/icudt56l/coll/kn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/ko.res b/src/cobalt/content/icu/icudt56l/coll/ko.res
index 8f87327..4587fa1 100644
--- a/src/cobalt/content/icu/icudt56l/coll/ko.res
+++ b/src/cobalt/content/icu/icudt56l/coll/ko.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/lt.res b/src/cobalt/content/icu/icudt56l/coll/lt.res
index df61039..610281e 100644
--- a/src/cobalt/content/icu/icudt56l/coll/lt.res
+++ b/src/cobalt/content/icu/icudt56l/coll/lt.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/lv.res b/src/cobalt/content/icu/icudt56l/coll/lv.res
index 13c655e..610281e 100644
--- a/src/cobalt/content/icu/icudt56l/coll/lv.res
+++ b/src/cobalt/content/icu/icudt56l/coll/lv.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/ml.res b/src/cobalt/content/icu/icudt56l/coll/ml.res
index 26e09f3..610281e 100644
--- a/src/cobalt/content/icu/icudt56l/coll/ml.res
+++ b/src/cobalt/content/icu/icudt56l/coll/ml.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/mr.res b/src/cobalt/content/icu/icudt56l/coll/mr.res
index f4d2cc1..610281e 100644
--- a/src/cobalt/content/icu/icudt56l/coll/mr.res
+++ b/src/cobalt/content/icu/icudt56l/coll/mr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/nb.res b/src/cobalt/content/icu/icudt56l/coll/nb.res
index fdc51f7..6b71925 100644
--- a/src/cobalt/content/icu/icudt56l/coll/nb.res
+++ b/src/cobalt/content/icu/icudt56l/coll/nb.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/nn.res b/src/cobalt/content/icu/icudt56l/coll/nn.res
index fdc51f7..6b71925 100644
--- a/src/cobalt/content/icu/icudt56l/coll/nn.res
+++ b/src/cobalt/content/icu/icudt56l/coll/nn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/pl.res b/src/cobalt/content/icu/icudt56l/coll/pl.res
index 4858e5a..610281e 100644
--- a/src/cobalt/content/icu/icudt56l/coll/pl.res
+++ b/src/cobalt/content/icu/icudt56l/coll/pl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/ro.res b/src/cobalt/content/icu/icudt56l/coll/ro.res
index 1ea81ae..610281e 100644
--- a/src/cobalt/content/icu/icudt56l/coll/ro.res
+++ b/src/cobalt/content/icu/icudt56l/coll/ro.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/root.res b/src/cobalt/content/icu/icudt56l/coll/root.res
index b01bb24..98ee81b 100644
--- a/src/cobalt/content/icu/icudt56l/coll/root.res
+++ b/src/cobalt/content/icu/icudt56l/coll/root.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/ru.res b/src/cobalt/content/icu/icudt56l/coll/ru.res
index 671f9b1..610281e 100644
--- a/src/cobalt/content/icu/icudt56l/coll/ru.res
+++ b/src/cobalt/content/icu/icudt56l/coll/ru.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/sk.res b/src/cobalt/content/icu/icudt56l/coll/sk.res
index 082406d..6b71925 100644
--- a/src/cobalt/content/icu/icudt56l/coll/sk.res
+++ b/src/cobalt/content/icu/icudt56l/coll/sk.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/sl.res b/src/cobalt/content/icu/icudt56l/coll/sl.res
index 6f173e1..610281e 100644
--- a/src/cobalt/content/icu/icudt56l/coll/sl.res
+++ b/src/cobalt/content/icu/icudt56l/coll/sl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/sr.res b/src/cobalt/content/icu/icudt56l/coll/sr.res
index 4c166cc..610281e 100644
--- a/src/cobalt/content/icu/icudt56l/coll/sr.res
+++ b/src/cobalt/content/icu/icudt56l/coll/sr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/sr_Latn.res b/src/cobalt/content/icu/icudt56l/coll/sr_Latn.res
index 360d336..6b71925 100644
--- a/src/cobalt/content/icu/icudt56l/coll/sr_Latn.res
+++ b/src/cobalt/content/icu/icudt56l/coll/sr_Latn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/sv.res b/src/cobalt/content/icu/icudt56l/coll/sv.res
index 97305c2..b4f08b9 100644
--- a/src/cobalt/content/icu/icudt56l/coll/sv.res
+++ b/src/cobalt/content/icu/icudt56l/coll/sv.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/ta.res b/src/cobalt/content/icu/icudt56l/coll/ta.res
index 95b6947..610281e 100644
--- a/src/cobalt/content/icu/icudt56l/coll/ta.res
+++ b/src/cobalt/content/icu/icudt56l/coll/ta.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/te.res b/src/cobalt/content/icu/icudt56l/coll/te.res
index 93e0bd8..610281e 100644
--- a/src/cobalt/content/icu/icudt56l/coll/te.res
+++ b/src/cobalt/content/icu/icudt56l/coll/te.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/th.res b/src/cobalt/content/icu/icudt56l/coll/th.res
index de60121..610281e 100644
--- a/src/cobalt/content/icu/icudt56l/coll/th.res
+++ b/src/cobalt/content/icu/icudt56l/coll/th.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/tr.res b/src/cobalt/content/icu/icudt56l/coll/tr.res
index c51837b..6b71925 100644
--- a/src/cobalt/content/icu/icudt56l/coll/tr.res
+++ b/src/cobalt/content/icu/icudt56l/coll/tr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/uk.res b/src/cobalt/content/icu/icudt56l/coll/uk.res
index 90239f6..610281e 100644
--- a/src/cobalt/content/icu/icudt56l/coll/uk.res
+++ b/src/cobalt/content/icu/icudt56l/coll/uk.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/vi.res b/src/cobalt/content/icu/icudt56l/coll/vi.res
index 906ef33..1466600 100644
--- a/src/cobalt/content/icu/icudt56l/coll/vi.res
+++ b/src/cobalt/content/icu/icudt56l/coll/vi.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/zh.res b/src/cobalt/content/icu/icudt56l/coll/zh.res
index 14d076c..cf84785 100644
--- a/src/cobalt/content/icu/icudt56l/coll/zh.res
+++ b/src/cobalt/content/icu/icudt56l/coll/zh.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/cs.res b/src/cobalt/content/icu/icudt56l/cs.res
index 09ea881..b643760 100644
--- a/src/cobalt/content/icu/icudt56l/cs.res
+++ b/src/cobalt/content/icu/icudt56l/cs.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/am.res b/src/cobalt/content/icu/icudt56l/curr/am.res
index d29ad5d..c699256 100644
--- a/src/cobalt/content/icu/icudt56l/curr/am.res
+++ b/src/cobalt/content/icu/icudt56l/curr/am.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/ar.res b/src/cobalt/content/icu/icudt56l/curr/ar.res
index 77a62e9..824ff84 100644
--- a/src/cobalt/content/icu/icudt56l/curr/ar.res
+++ b/src/cobalt/content/icu/icudt56l/curr/ar.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/bg.res b/src/cobalt/content/icu/icudt56l/curr/bg.res
index 52f8374..2c0a02a 100644
--- a/src/cobalt/content/icu/icudt56l/curr/bg.res
+++ b/src/cobalt/content/icu/icudt56l/curr/bg.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/ca.res b/src/cobalt/content/icu/icudt56l/curr/ca.res
index 24b4a8f..c2837c3 100644
--- a/src/cobalt/content/icu/icudt56l/curr/ca.res
+++ b/src/cobalt/content/icu/icudt56l/curr/ca.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/cs.res b/src/cobalt/content/icu/icudt56l/curr/cs.res
index 81651e2..109596a 100644
--- a/src/cobalt/content/icu/icudt56l/curr/cs.res
+++ b/src/cobalt/content/icu/icudt56l/curr/cs.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/da.res b/src/cobalt/content/icu/icudt56l/curr/da.res
index d7aa6cb..9a6bf36 100644
--- a/src/cobalt/content/icu/icudt56l/curr/da.res
+++ b/src/cobalt/content/icu/icudt56l/curr/da.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/de.res b/src/cobalt/content/icu/icudt56l/curr/de.res
index f9e3149..6e731e7 100644
--- a/src/cobalt/content/icu/icudt56l/curr/de.res
+++ b/src/cobalt/content/icu/icudt56l/curr/de.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/de_CH.res b/src/cobalt/content/icu/icudt56l/curr/de_CH.res
index 48a1a39..72cf49b 100644
--- a/src/cobalt/content/icu/icudt56l/curr/de_CH.res
+++ b/src/cobalt/content/icu/icudt56l/curr/de_CH.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/el.res b/src/cobalt/content/icu/icudt56l/curr/el.res
index 18963be..203dc21 100644
--- a/src/cobalt/content/icu/icudt56l/curr/el.res
+++ b/src/cobalt/content/icu/icudt56l/curr/el.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/en.res b/src/cobalt/content/icu/icudt56l/curr/en.res
index 811bdc6..b78dd5c 100644
--- a/src/cobalt/content/icu/icudt56l/curr/en.res
+++ b/src/cobalt/content/icu/icudt56l/curr/en.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/en_001.res b/src/cobalt/content/icu/icudt56l/curr/en_001.res
index a11d32a..7c956d8 100644
--- a/src/cobalt/content/icu/icudt56l/curr/en_001.res
+++ b/src/cobalt/content/icu/icudt56l/curr/en_001.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/en_150.res b/src/cobalt/content/icu/icudt56l/curr/en_150.res
index 652676e..18f73dd 100644
--- a/src/cobalt/content/icu/icudt56l/curr/en_150.res
+++ b/src/cobalt/content/icu/icudt56l/curr/en_150.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/en_AU.res b/src/cobalt/content/icu/icudt56l/curr/en_AU.res
index 62e8a60..8f30277 100644
--- a/src/cobalt/content/icu/icudt56l/curr/en_AU.res
+++ b/src/cobalt/content/icu/icudt56l/curr/en_AU.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/en_CA.res b/src/cobalt/content/icu/icudt56l/curr/en_CA.res
index fce360b..97b6a41 100644
--- a/src/cobalt/content/icu/icudt56l/curr/en_CA.res
+++ b/src/cobalt/content/icu/icudt56l/curr/en_CA.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/en_GB.res b/src/cobalt/content/icu/icudt56l/curr/en_GB.res
index 73c4d73..5da4594 100644
--- a/src/cobalt/content/icu/icudt56l/curr/en_GB.res
+++ b/src/cobalt/content/icu/icudt56l/curr/en_GB.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/en_IN.res b/src/cobalt/content/icu/icudt56l/curr/en_IN.res
index 3cb138e..5ffbeed 100644
--- a/src/cobalt/content/icu/icudt56l/curr/en_IN.res
+++ b/src/cobalt/content/icu/icudt56l/curr/en_IN.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/en_NZ.res b/src/cobalt/content/icu/icudt56l/curr/en_NZ.res
index f18ccaf..2362d04 100644
--- a/src/cobalt/content/icu/icudt56l/curr/en_NZ.res
+++ b/src/cobalt/content/icu/icudt56l/curr/en_NZ.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/en_ZA.res b/src/cobalt/content/icu/icudt56l/curr/en_ZA.res
index 16c361d..ba034a5 100644
--- a/src/cobalt/content/icu/icudt56l/curr/en_ZA.res
+++ b/src/cobalt/content/icu/icudt56l/curr/en_ZA.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/es.res b/src/cobalt/content/icu/icudt56l/curr/es.res
index c0c5157..95b9e65 100644
--- a/src/cobalt/content/icu/icudt56l/curr/es.res
+++ b/src/cobalt/content/icu/icudt56l/curr/es.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/es_419.res b/src/cobalt/content/icu/icudt56l/curr/es_419.res
index 253e199..07aa4f5 100644
--- a/src/cobalt/content/icu/icudt56l/curr/es_419.res
+++ b/src/cobalt/content/icu/icudt56l/curr/es_419.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/es_AR.res b/src/cobalt/content/icu/icudt56l/curr/es_AR.res
index 00b8496..1be6445 100644
--- a/src/cobalt/content/icu/icudt56l/curr/es_AR.res
+++ b/src/cobalt/content/icu/icudt56l/curr/es_AR.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/es_MX.res b/src/cobalt/content/icu/icudt56l/curr/es_MX.res
index ef02555..d24b22b 100644
--- a/src/cobalt/content/icu/icudt56l/curr/es_MX.res
+++ b/src/cobalt/content/icu/icudt56l/curr/es_MX.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/es_US.res b/src/cobalt/content/icu/icudt56l/curr/es_US.res
index ab00ff3..b259afe 100644
--- a/src/cobalt/content/icu/icudt56l/curr/es_US.res
+++ b/src/cobalt/content/icu/icudt56l/curr/es_US.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/fa.res b/src/cobalt/content/icu/icudt56l/curr/fa.res
index 591bc05..116109a 100644
--- a/src/cobalt/content/icu/icudt56l/curr/fa.res
+++ b/src/cobalt/content/icu/icudt56l/curr/fa.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/fi.res b/src/cobalt/content/icu/icudt56l/curr/fi.res
index 3b60b68..084bbe8 100644
--- a/src/cobalt/content/icu/icudt56l/curr/fi.res
+++ b/src/cobalt/content/icu/icudt56l/curr/fi.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/fil.res b/src/cobalt/content/icu/icudt56l/curr/fil.res
index 230aeb6..aebff6b 100644
--- a/src/cobalt/content/icu/icudt56l/curr/fil.res
+++ b/src/cobalt/content/icu/icudt56l/curr/fil.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/fr.res b/src/cobalt/content/icu/icudt56l/curr/fr.res
index 1f97b3e..44ee62f 100644
--- a/src/cobalt/content/icu/icudt56l/curr/fr.res
+++ b/src/cobalt/content/icu/icudt56l/curr/fr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/fr_CA.res b/src/cobalt/content/icu/icudt56l/curr/fr_CA.res
index 4799514..fb00495 100644
--- a/src/cobalt/content/icu/icudt56l/curr/fr_CA.res
+++ b/src/cobalt/content/icu/icudt56l/curr/fr_CA.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/he.res b/src/cobalt/content/icu/icudt56l/curr/he.res
index 64fdace..724a6ab 100644
--- a/src/cobalt/content/icu/icudt56l/curr/he.res
+++ b/src/cobalt/content/icu/icudt56l/curr/he.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/hi.res b/src/cobalt/content/icu/icudt56l/curr/hi.res
index 7534109..c526cee 100644
--- a/src/cobalt/content/icu/icudt56l/curr/hi.res
+++ b/src/cobalt/content/icu/icudt56l/curr/hi.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/hr.res b/src/cobalt/content/icu/icudt56l/curr/hr.res
index acc0983..2e47654 100644
--- a/src/cobalt/content/icu/icudt56l/curr/hr.res
+++ b/src/cobalt/content/icu/icudt56l/curr/hr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/hu.res b/src/cobalt/content/icu/icudt56l/curr/hu.res
index 1d83f9b..690eb17 100644
--- a/src/cobalt/content/icu/icudt56l/curr/hu.res
+++ b/src/cobalt/content/icu/icudt56l/curr/hu.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/id.res b/src/cobalt/content/icu/icudt56l/curr/id.res
index f5046d5..9c68843 100644
--- a/src/cobalt/content/icu/icudt56l/curr/id.res
+++ b/src/cobalt/content/icu/icudt56l/curr/id.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/in.res b/src/cobalt/content/icu/icudt56l/curr/in.res
index 0606cd4..dfcbe33 100644
--- a/src/cobalt/content/icu/icudt56l/curr/in.res
+++ b/src/cobalt/content/icu/icudt56l/curr/in.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/it.res b/src/cobalt/content/icu/icudt56l/curr/it.res
index d3fd8df..5c9a53c 100644
--- a/src/cobalt/content/icu/icudt56l/curr/it.res
+++ b/src/cobalt/content/icu/icudt56l/curr/it.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/iw.res b/src/cobalt/content/icu/icudt56l/curr/iw.res
index 67f7066..dff9e6c 100644
--- a/src/cobalt/content/icu/icudt56l/curr/iw.res
+++ b/src/cobalt/content/icu/icudt56l/curr/iw.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/ja.res b/src/cobalt/content/icu/icudt56l/curr/ja.res
index 2b6fc92..4bd7641 100644
--- a/src/cobalt/content/icu/icudt56l/curr/ja.res
+++ b/src/cobalt/content/icu/icudt56l/curr/ja.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/ko.res b/src/cobalt/content/icu/icudt56l/curr/ko.res
index 8866594..06b3fa6 100644
--- a/src/cobalt/content/icu/icudt56l/curr/ko.res
+++ b/src/cobalt/content/icu/icudt56l/curr/ko.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/lt.res b/src/cobalt/content/icu/icudt56l/curr/lt.res
index 32a614c..056b778 100644
--- a/src/cobalt/content/icu/icudt56l/curr/lt.res
+++ b/src/cobalt/content/icu/icudt56l/curr/lt.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/lv.res b/src/cobalt/content/icu/icudt56l/curr/lv.res
index f1619e1..c6f2d7f 100644
--- a/src/cobalt/content/icu/icudt56l/curr/lv.res
+++ b/src/cobalt/content/icu/icudt56l/curr/lv.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/nb.res b/src/cobalt/content/icu/icudt56l/curr/nb.res
index af3df3b..cbd603d 100644
--- a/src/cobalt/content/icu/icudt56l/curr/nb.res
+++ b/src/cobalt/content/icu/icudt56l/curr/nb.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/nl.res b/src/cobalt/content/icu/icudt56l/curr/nl.res
index 26191f0..f53d29e 100644
--- a/src/cobalt/content/icu/icudt56l/curr/nl.res
+++ b/src/cobalt/content/icu/icudt56l/curr/nl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/no.res b/src/cobalt/content/icu/icudt56l/curr/no.res
index f74cd4c..7c0017a 100644
--- a/src/cobalt/content/icu/icudt56l/curr/no.res
+++ b/src/cobalt/content/icu/icudt56l/curr/no.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/pl.res b/src/cobalt/content/icu/icudt56l/curr/pl.res
index d4d6422..c8db80d 100644
--- a/src/cobalt/content/icu/icudt56l/curr/pl.res
+++ b/src/cobalt/content/icu/icudt56l/curr/pl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/pool.res b/src/cobalt/content/icu/icudt56l/curr/pool.res
index 7dd8d59..8c07f44 100644
--- a/src/cobalt/content/icu/icudt56l/curr/pool.res
+++ b/src/cobalt/content/icu/icudt56l/curr/pool.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/pt.res b/src/cobalt/content/icu/icudt56l/curr/pt.res
index a029c17..6920e2b 100644
--- a/src/cobalt/content/icu/icudt56l/curr/pt.res
+++ b/src/cobalt/content/icu/icudt56l/curr/pt.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/pt_PT.res b/src/cobalt/content/icu/icudt56l/curr/pt_PT.res
index f467c2e..43913fd 100644
--- a/src/cobalt/content/icu/icudt56l/curr/pt_PT.res
+++ b/src/cobalt/content/icu/icudt56l/curr/pt_PT.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/ro.res b/src/cobalt/content/icu/icudt56l/curr/ro.res
index c005b60..1020d3d 100644
--- a/src/cobalt/content/icu/icudt56l/curr/ro.res
+++ b/src/cobalt/content/icu/icudt56l/curr/ro.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/root.res b/src/cobalt/content/icu/icudt56l/curr/root.res
index 5a84b17..e5be485 100644
--- a/src/cobalt/content/icu/icudt56l/curr/root.res
+++ b/src/cobalt/content/icu/icudt56l/curr/root.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/ru.res b/src/cobalt/content/icu/icudt56l/curr/ru.res
index 9e799d5..6abb401 100644
--- a/src/cobalt/content/icu/icudt56l/curr/ru.res
+++ b/src/cobalt/content/icu/icudt56l/curr/ru.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/sk.res b/src/cobalt/content/icu/icudt56l/curr/sk.res
index b0714a2..a742fcd 100644
--- a/src/cobalt/content/icu/icudt56l/curr/sk.res
+++ b/src/cobalt/content/icu/icudt56l/curr/sk.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/sl.res b/src/cobalt/content/icu/icudt56l/curr/sl.res
index 5e78acd..5a2f0e6 100644
--- a/src/cobalt/content/icu/icudt56l/curr/sl.res
+++ b/src/cobalt/content/icu/icudt56l/curr/sl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/sr.res b/src/cobalt/content/icu/icudt56l/curr/sr.res
index 59c3cf6..1e9de53 100644
--- a/src/cobalt/content/icu/icudt56l/curr/sr.res
+++ b/src/cobalt/content/icu/icudt56l/curr/sr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/supplementalData.res b/src/cobalt/content/icu/icudt56l/curr/supplementalData.res
index c63d565..cd49222 100644
--- a/src/cobalt/content/icu/icudt56l/curr/supplementalData.res
+++ b/src/cobalt/content/icu/icudt56l/curr/supplementalData.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/sv.res b/src/cobalt/content/icu/icudt56l/curr/sv.res
index 93792b1..f12ee83 100644
--- a/src/cobalt/content/icu/icudt56l/curr/sv.res
+++ b/src/cobalt/content/icu/icudt56l/curr/sv.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/sw.res b/src/cobalt/content/icu/icudt56l/curr/sw.res
index af1859f..6f34fc4 100644
--- a/src/cobalt/content/icu/icudt56l/curr/sw.res
+++ b/src/cobalt/content/icu/icudt56l/curr/sw.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/th.res b/src/cobalt/content/icu/icudt56l/curr/th.res
index 527ed97..7044e5f 100644
--- a/src/cobalt/content/icu/icudt56l/curr/th.res
+++ b/src/cobalt/content/icu/icudt56l/curr/th.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/tl.res b/src/cobalt/content/icu/icudt56l/curr/tl.res
index 557adc4..652cad3 100644
--- a/src/cobalt/content/icu/icudt56l/curr/tl.res
+++ b/src/cobalt/content/icu/icudt56l/curr/tl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/tr.res b/src/cobalt/content/icu/icudt56l/curr/tr.res
index d89a965..ee3bc4d 100644
--- a/src/cobalt/content/icu/icudt56l/curr/tr.res
+++ b/src/cobalt/content/icu/icudt56l/curr/tr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/uk.res b/src/cobalt/content/icu/icudt56l/curr/uk.res
index e36e052..f733288 100644
--- a/src/cobalt/content/icu/icudt56l/curr/uk.res
+++ b/src/cobalt/content/icu/icudt56l/curr/uk.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/vi.res b/src/cobalt/content/icu/icudt56l/curr/vi.res
index 067b5da..6d7281f 100644
--- a/src/cobalt/content/icu/icudt56l/curr/vi.res
+++ b/src/cobalt/content/icu/icudt56l/curr/vi.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/zh.res b/src/cobalt/content/icu/icudt56l/curr/zh.res
index bc544da..248cb79 100644
--- a/src/cobalt/content/icu/icudt56l/curr/zh.res
+++ b/src/cobalt/content/icu/icudt56l/curr/zh.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/zh_CN.res b/src/cobalt/content/icu/icudt56l/curr/zh_CN.res
index f94bafe..d44eba3 100644
--- a/src/cobalt/content/icu/icudt56l/curr/zh_CN.res
+++ b/src/cobalt/content/icu/icudt56l/curr/zh_CN.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/zh_HK.res b/src/cobalt/content/icu/icudt56l/curr/zh_HK.res
index a72da46..84900e7 100644
--- a/src/cobalt/content/icu/icudt56l/curr/zh_HK.res
+++ b/src/cobalt/content/icu/icudt56l/curr/zh_HK.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/zh_Hans.res b/src/cobalt/content/icu/icudt56l/curr/zh_Hans.res
index 3452716..9c3ad5f 100644
--- a/src/cobalt/content/icu/icudt56l/curr/zh_Hans.res
+++ b/src/cobalt/content/icu/icudt56l/curr/zh_Hans.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/zh_Hans_CN.res b/src/cobalt/content/icu/icudt56l/curr/zh_Hans_CN.res
index c704cfa..39648f2 100644
--- a/src/cobalt/content/icu/icudt56l/curr/zh_Hans_CN.res
+++ b/src/cobalt/content/icu/icudt56l/curr/zh_Hans_CN.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/zh_Hans_SG.res b/src/cobalt/content/icu/icudt56l/curr/zh_Hans_SG.res
index d46a443..3a8c484 100644
--- a/src/cobalt/content/icu/icudt56l/curr/zh_Hans_SG.res
+++ b/src/cobalt/content/icu/icudt56l/curr/zh_Hans_SG.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/zh_Hant.res b/src/cobalt/content/icu/icudt56l/curr/zh_Hant.res
index 99b5b2b..ceb21a0 100644
--- a/src/cobalt/content/icu/icudt56l/curr/zh_Hant.res
+++ b/src/cobalt/content/icu/icudt56l/curr/zh_Hant.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/zh_Hant_HK.res b/src/cobalt/content/icu/icudt56l/curr/zh_Hant_HK.res
index 95843d1..abfef87 100644
--- a/src/cobalt/content/icu/icudt56l/curr/zh_Hant_HK.res
+++ b/src/cobalt/content/icu/icudt56l/curr/zh_Hant_HK.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/zh_Hant_TW.res b/src/cobalt/content/icu/icudt56l/curr/zh_Hant_TW.res
index c704cfa..39648f2 100644
--- a/src/cobalt/content/icu/icudt56l/curr/zh_Hant_TW.res
+++ b/src/cobalt/content/icu/icudt56l/curr/zh_Hant_TW.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/zh_SG.res b/src/cobalt/content/icu/icudt56l/curr/zh_SG.res
index ffb8395..6ddf438 100644
--- a/src/cobalt/content/icu/icudt56l/curr/zh_SG.res
+++ b/src/cobalt/content/icu/icudt56l/curr/zh_SG.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/zh_TW.res b/src/cobalt/content/icu/icudt56l/curr/zh_TW.res
index 41f37d1..0d3071f 100644
--- a/src/cobalt/content/icu/icudt56l/curr/zh_TW.res
+++ b/src/cobalt/content/icu/icudt56l/curr/zh_TW.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/cy.res b/src/cobalt/content/icu/icudt56l/cy.res
index f9a9812..31bfcb9 100644
--- a/src/cobalt/content/icu/icudt56l/cy.res
+++ b/src/cobalt/content/icu/icudt56l/cy.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/da.res b/src/cobalt/content/icu/icudt56l/da.res
index 6a7c227..c960bd0 100644
--- a/src/cobalt/content/icu/icudt56l/da.res
+++ b/src/cobalt/content/icu/icudt56l/da.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/de.res b/src/cobalt/content/icu/icudt56l/de.res
index 7512b61..bc5b990 100644
--- a/src/cobalt/content/icu/icudt56l/de.res
+++ b/src/cobalt/content/icu/icudt56l/de.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/de_AT.res b/src/cobalt/content/icu/icudt56l/de_AT.res
index c5c25df..9ad59a5 100644
--- a/src/cobalt/content/icu/icudt56l/de_AT.res
+++ b/src/cobalt/content/icu/icudt56l/de_AT.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/de_CH.res b/src/cobalt/content/icu/icudt56l/de_CH.res
index e29448a..d867489 100644
--- a/src/cobalt/content/icu/icudt56l/de_CH.res
+++ b/src/cobalt/content/icu/icudt56l/de_CH.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ee.res b/src/cobalt/content/icu/icudt56l/ee.res
index 1ff9820..0841690 100644
--- a/src/cobalt/content/icu/icudt56l/ee.res
+++ b/src/cobalt/content/icu/icudt56l/ee.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/el.res b/src/cobalt/content/icu/icudt56l/el.res
index 24b221d..5c8708e 100644
--- a/src/cobalt/content/icu/icudt56l/el.res
+++ b/src/cobalt/content/icu/icudt56l/el.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/en.res b/src/cobalt/content/icu/icudt56l/en.res
index 4d29085..f4e06bc 100644
--- a/src/cobalt/content/icu/icudt56l/en.res
+++ b/src/cobalt/content/icu/icudt56l/en.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/en_001.res b/src/cobalt/content/icu/icudt56l/en_001.res
index abc68ca..c9f3b89 100644
--- a/src/cobalt/content/icu/icudt56l/en_001.res
+++ b/src/cobalt/content/icu/icudt56l/en_001.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/en_150.res b/src/cobalt/content/icu/icudt56l/en_150.res
index 4dc79df..c454e67 100644
--- a/src/cobalt/content/icu/icudt56l/en_150.res
+++ b/src/cobalt/content/icu/icudt56l/en_150.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/en_AU.res b/src/cobalt/content/icu/icudt56l/en_AU.res
index 83a901e..99b8d95 100644
--- a/src/cobalt/content/icu/icudt56l/en_AU.res
+++ b/src/cobalt/content/icu/icudt56l/en_AU.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/en_CA.res b/src/cobalt/content/icu/icudt56l/en_CA.res
index bc52baa..ec846ff 100644
--- a/src/cobalt/content/icu/icudt56l/en_CA.res
+++ b/src/cobalt/content/icu/icudt56l/en_CA.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/en_GB.res b/src/cobalt/content/icu/icudt56l/en_GB.res
index 4bbb5cc..0afa7b6 100644
--- a/src/cobalt/content/icu/icudt56l/en_GB.res
+++ b/src/cobalt/content/icu/icudt56l/en_GB.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/en_IN.res b/src/cobalt/content/icu/icudt56l/en_IN.res
index 05e2ca0..230aff9 100644
--- a/src/cobalt/content/icu/icudt56l/en_IN.res
+++ b/src/cobalt/content/icu/icudt56l/en_IN.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/en_NZ.res b/src/cobalt/content/icu/icudt56l/en_NZ.res
index cece412..b66ed27 100644
--- a/src/cobalt/content/icu/icudt56l/en_NZ.res
+++ b/src/cobalt/content/icu/icudt56l/en_NZ.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/en_US.res b/src/cobalt/content/icu/icudt56l/en_US.res
index 008e4b7..d0ddba1 100644
--- a/src/cobalt/content/icu/icudt56l/en_US.res
+++ b/src/cobalt/content/icu/icudt56l/en_US.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/en_ZA.res b/src/cobalt/content/icu/icudt56l/en_ZA.res
index 885ee5c..3e75979 100644
--- a/src/cobalt/content/icu/icudt56l/en_ZA.res
+++ b/src/cobalt/content/icu/icudt56l/en_ZA.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/eo.res b/src/cobalt/content/icu/icudt56l/eo.res
index 396eb3a..3ef0851 100644
--- a/src/cobalt/content/icu/icudt56l/eo.res
+++ b/src/cobalt/content/icu/icudt56l/eo.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/es.res b/src/cobalt/content/icu/icudt56l/es.res
index 76bbc8d..3fd059f 100644
--- a/src/cobalt/content/icu/icudt56l/es.res
+++ b/src/cobalt/content/icu/icudt56l/es.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/es_419.res b/src/cobalt/content/icu/icudt56l/es_419.res
index b880024..4cd3949 100644
--- a/src/cobalt/content/icu/icudt56l/es_419.res
+++ b/src/cobalt/content/icu/icudt56l/es_419.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/es_AR.res b/src/cobalt/content/icu/icudt56l/es_AR.res
index 7ec0cc5..8a7e563 100644
--- a/src/cobalt/content/icu/icudt56l/es_AR.res
+++ b/src/cobalt/content/icu/icudt56l/es_AR.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/es_ES.res b/src/cobalt/content/icu/icudt56l/es_ES.res
index 008e4b7..d0ddba1 100644
--- a/src/cobalt/content/icu/icudt56l/es_ES.res
+++ b/src/cobalt/content/icu/icudt56l/es_ES.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/es_MX.res b/src/cobalt/content/icu/icudt56l/es_MX.res
index c15d05f..326f91c 100644
--- a/src/cobalt/content/icu/icudt56l/es_MX.res
+++ b/src/cobalt/content/icu/icudt56l/es_MX.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/es_US.res b/src/cobalt/content/icu/icudt56l/es_US.res
index c21fa87..196c802 100644
--- a/src/cobalt/content/icu/icudt56l/es_US.res
+++ b/src/cobalt/content/icu/icudt56l/es_US.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/et.res b/src/cobalt/content/icu/icudt56l/et.res
index 1d58d37..0587d8a 100644
--- a/src/cobalt/content/icu/icudt56l/et.res
+++ b/src/cobalt/content/icu/icudt56l/et.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/eu.res b/src/cobalt/content/icu/icudt56l/eu.res
index 4aacb51..a8bbdb0 100644
--- a/src/cobalt/content/icu/icudt56l/eu.res
+++ b/src/cobalt/content/icu/icudt56l/eu.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/fa.res b/src/cobalt/content/icu/icudt56l/fa.res
index ce1ed39..987ef94 100644
--- a/src/cobalt/content/icu/icudt56l/fa.res
+++ b/src/cobalt/content/icu/icudt56l/fa.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/fi.res b/src/cobalt/content/icu/icudt56l/fi.res
index 0de1572..b46d9ef 100644
--- a/src/cobalt/content/icu/icudt56l/fi.res
+++ b/src/cobalt/content/icu/icudt56l/fi.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/fil.res b/src/cobalt/content/icu/icudt56l/fil.res
index 497fddc..831e5c4 100644
--- a/src/cobalt/content/icu/icudt56l/fil.res
+++ b/src/cobalt/content/icu/icudt56l/fil.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/fo.res b/src/cobalt/content/icu/icudt56l/fo.res
index ed636b7..f9055888 100644
--- a/src/cobalt/content/icu/icudt56l/fo.res
+++ b/src/cobalt/content/icu/icudt56l/fo.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/fr.res b/src/cobalt/content/icu/icudt56l/fr.res
index fa0a350..b24d618 100644
--- a/src/cobalt/content/icu/icudt56l/fr.res
+++ b/src/cobalt/content/icu/icudt56l/fr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/fr_CA.res b/src/cobalt/content/icu/icudt56l/fr_CA.res
index 4d95890..6bfbab5 100644
--- a/src/cobalt/content/icu/icudt56l/fr_CA.res
+++ b/src/cobalt/content/icu/icudt56l/fr_CA.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/fr_CH.res b/src/cobalt/content/icu/icudt56l/fr_CH.res
index 660f7cc..ca578e2 100644
--- a/src/cobalt/content/icu/icudt56l/fr_CH.res
+++ b/src/cobalt/content/icu/icudt56l/fr_CH.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ga.res b/src/cobalt/content/icu/icudt56l/ga.res
index 557d401..7ab9307 100644
--- a/src/cobalt/content/icu/icudt56l/ga.res
+++ b/src/cobalt/content/icu/icudt56l/ga.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/gl.res b/src/cobalt/content/icu/icudt56l/gl.res
index 382bdcd..1576f90 100644
--- a/src/cobalt/content/icu/icudt56l/gl.res
+++ b/src/cobalt/content/icu/icudt56l/gl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/gu.res b/src/cobalt/content/icu/icudt56l/gu.res
index 4f4387c..1c5e5a6 100644
--- a/src/cobalt/content/icu/icudt56l/gu.res
+++ b/src/cobalt/content/icu/icudt56l/gu.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ha.res b/src/cobalt/content/icu/icudt56l/ha.res
index 56fa9c8..a41f4f9 100644
--- a/src/cobalt/content/icu/icudt56l/ha.res
+++ b/src/cobalt/content/icu/icudt56l/ha.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/haw.res b/src/cobalt/content/icu/icudt56l/haw.res
index e22d856..46c4980 100644
--- a/src/cobalt/content/icu/icudt56l/haw.res
+++ b/src/cobalt/content/icu/icudt56l/haw.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/he.res b/src/cobalt/content/icu/icudt56l/he.res
index 1437887..874b972 100644
--- a/src/cobalt/content/icu/icudt56l/he.res
+++ b/src/cobalt/content/icu/icudt56l/he.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/hi.res b/src/cobalt/content/icu/icudt56l/hi.res
index 6807120..17db902 100644
--- a/src/cobalt/content/icu/icudt56l/hi.res
+++ b/src/cobalt/content/icu/icudt56l/hi.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/hr.res b/src/cobalt/content/icu/icudt56l/hr.res
index 510a817..201c027 100644
--- a/src/cobalt/content/icu/icudt56l/hr.res
+++ b/src/cobalt/content/icu/icudt56l/hr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/hu.res b/src/cobalt/content/icu/icudt56l/hu.res
index 1cad64f..e7b7c6b 100644
--- a/src/cobalt/content/icu/icudt56l/hu.res
+++ b/src/cobalt/content/icu/icudt56l/hu.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/hy.res b/src/cobalt/content/icu/icudt56l/hy.res
index 788c808..31f2a03 100644
--- a/src/cobalt/content/icu/icudt56l/hy.res
+++ b/src/cobalt/content/icu/icudt56l/hy.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/id.res b/src/cobalt/content/icu/icudt56l/id.res
index 113e603..42d1501 100644
--- a/src/cobalt/content/icu/icudt56l/id.res
+++ b/src/cobalt/content/icu/icudt56l/id.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ig.res b/src/cobalt/content/icu/icudt56l/ig.res
index c16c2cb..4fe2b94 100644
--- a/src/cobalt/content/icu/icudt56l/ig.res
+++ b/src/cobalt/content/icu/icudt56l/ig.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/in.res b/src/cobalt/content/icu/icudt56l/in.res
index 37f737c..5717187 100644
--- a/src/cobalt/content/icu/icudt56l/in.res
+++ b/src/cobalt/content/icu/icudt56l/in.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/is.res b/src/cobalt/content/icu/icudt56l/is.res
index dc12018..7b55953 100644
--- a/src/cobalt/content/icu/icudt56l/is.res
+++ b/src/cobalt/content/icu/icudt56l/is.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/it.res b/src/cobalt/content/icu/icudt56l/it.res
index 017858b..d162675 100644
--- a/src/cobalt/content/icu/icudt56l/it.res
+++ b/src/cobalt/content/icu/icudt56l/it.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/it_CH.res b/src/cobalt/content/icu/icudt56l/it_CH.res
index 9a534b2..652ab6e 100644
--- a/src/cobalt/content/icu/icudt56l/it_CH.res
+++ b/src/cobalt/content/icu/icudt56l/it_CH.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/iw.res b/src/cobalt/content/icu/icudt56l/iw.res
index 0335003..dde8495 100644
--- a/src/cobalt/content/icu/icudt56l/iw.res
+++ b/src/cobalt/content/icu/icudt56l/iw.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ja.res b/src/cobalt/content/icu/icudt56l/ja.res
index 1a946b0..21807a9 100644
--- a/src/cobalt/content/icu/icudt56l/ja.res
+++ b/src/cobalt/content/icu/icudt56l/ja.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ka.res b/src/cobalt/content/icu/icudt56l/ka.res
index 0ba4979..adcb7d3 100644
--- a/src/cobalt/content/icu/icudt56l/ka.res
+++ b/src/cobalt/content/icu/icudt56l/ka.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/kk.res b/src/cobalt/content/icu/icudt56l/kk.res
index 4c0e93d..96c9f9b 100644
--- a/src/cobalt/content/icu/icudt56l/kk.res
+++ b/src/cobalt/content/icu/icudt56l/kk.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/km.res b/src/cobalt/content/icu/icudt56l/km.res
index 12beb53..2f736a4 100644
--- a/src/cobalt/content/icu/icudt56l/km.res
+++ b/src/cobalt/content/icu/icudt56l/km.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/kn.res b/src/cobalt/content/icu/icudt56l/kn.res
index 8aaa260..2902bd7 100644
--- a/src/cobalt/content/icu/icudt56l/kn.res
+++ b/src/cobalt/content/icu/icudt56l/kn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ko.res b/src/cobalt/content/icu/icudt56l/ko.res
index 19c8aa3..36fa41b 100644
--- a/src/cobalt/content/icu/icudt56l/ko.res
+++ b/src/cobalt/content/icu/icudt56l/ko.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ku.res b/src/cobalt/content/icu/icudt56l/ku.res
index 81e0774..655b5a5 100644
--- a/src/cobalt/content/icu/icudt56l/ku.res
+++ b/src/cobalt/content/icu/icudt56l/ku.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ky.res b/src/cobalt/content/icu/icudt56l/ky.res
index 17bd776..1f4ab15 100644
--- a/src/cobalt/content/icu/icudt56l/ky.res
+++ b/src/cobalt/content/icu/icudt56l/ky.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/af.res b/src/cobalt/content/icu/icudt56l/lang/af.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/af.res
+++ b/src/cobalt/content/icu/icudt56l/lang/af.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ak.res b/src/cobalt/content/icu/icudt56l/lang/ak.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/ak.res
+++ b/src/cobalt/content/icu/icudt56l/lang/ak.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/am.res b/src/cobalt/content/icu/icudt56l/lang/am.res
index 1b34433..3d35959 100644
--- a/src/cobalt/content/icu/icudt56l/lang/am.res
+++ b/src/cobalt/content/icu/icudt56l/lang/am.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/an.res b/src/cobalt/content/icu/icudt56l/lang/an.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/an.res
+++ b/src/cobalt/content/icu/icudt56l/lang/an.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ar.res b/src/cobalt/content/icu/icudt56l/lang/ar.res
index bb13917..1ab5683 100644
--- a/src/cobalt/content/icu/icudt56l/lang/ar.res
+++ b/src/cobalt/content/icu/icudt56l/lang/ar.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ast.res b/src/cobalt/content/icu/icudt56l/lang/ast.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/ast.res
+++ b/src/cobalt/content/icu/icudt56l/lang/ast.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/az.res b/src/cobalt/content/icu/icudt56l/lang/az.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/az.res
+++ b/src/cobalt/content/icu/icudt56l/lang/az.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/be.res b/src/cobalt/content/icu/icudt56l/lang/be.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/be.res
+++ b/src/cobalt/content/icu/icudt56l/lang/be.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/bem.res b/src/cobalt/content/icu/icudt56l/lang/bem.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/bem.res
+++ b/src/cobalt/content/icu/icudt56l/lang/bem.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/bg.res b/src/cobalt/content/icu/icudt56l/lang/bg.res
index c728981..1a5be32 100644
--- a/src/cobalt/content/icu/icudt56l/lang/bg.res
+++ b/src/cobalt/content/icu/icudt56l/lang/bg.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/bn.res b/src/cobalt/content/icu/icudt56l/lang/bn.res
index 5c67430..4988bb9 100644
--- a/src/cobalt/content/icu/icudt56l/lang/bn.res
+++ b/src/cobalt/content/icu/icudt56l/lang/bn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/br.res b/src/cobalt/content/icu/icudt56l/lang/br.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/br.res
+++ b/src/cobalt/content/icu/icudt56l/lang/br.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/bs.res b/src/cobalt/content/icu/icudt56l/lang/bs.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/bs.res
+++ b/src/cobalt/content/icu/icudt56l/lang/bs.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ca.res b/src/cobalt/content/icu/icudt56l/lang/ca.res
index 09afb78..6fbca5d 100644
--- a/src/cobalt/content/icu/icudt56l/lang/ca.res
+++ b/src/cobalt/content/icu/icudt56l/lang/ca.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ckb.res b/src/cobalt/content/icu/icudt56l/lang/ckb.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/ckb.res
+++ b/src/cobalt/content/icu/icudt56l/lang/ckb.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/cs.res b/src/cobalt/content/icu/icudt56l/lang/cs.res
index df5b7a0..28ecabe 100644
--- a/src/cobalt/content/icu/icudt56l/lang/cs.res
+++ b/src/cobalt/content/icu/icudt56l/lang/cs.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/cy.res b/src/cobalt/content/icu/icudt56l/lang/cy.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/cy.res
+++ b/src/cobalt/content/icu/icudt56l/lang/cy.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/da.res b/src/cobalt/content/icu/icudt56l/lang/da.res
index 93d9594..99a4dcd 100644
--- a/src/cobalt/content/icu/icudt56l/lang/da.res
+++ b/src/cobalt/content/icu/icudt56l/lang/da.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/de.res b/src/cobalt/content/icu/icudt56l/lang/de.res
index f698129..c1c8d5f 100644
--- a/src/cobalt/content/icu/icudt56l/lang/de.res
+++ b/src/cobalt/content/icu/icudt56l/lang/de.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ee.res b/src/cobalt/content/icu/icudt56l/lang/ee.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/ee.res
+++ b/src/cobalt/content/icu/icudt56l/lang/ee.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/el.res b/src/cobalt/content/icu/icudt56l/lang/el.res
index feeb860..049baa1 100644
--- a/src/cobalt/content/icu/icudt56l/lang/el.res
+++ b/src/cobalt/content/icu/icudt56l/lang/el.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/en.res b/src/cobalt/content/icu/icudt56l/lang/en.res
index 63397b9..f90c97f 100644
--- a/src/cobalt/content/icu/icudt56l/lang/en.res
+++ b/src/cobalt/content/icu/icudt56l/lang/en.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/en_GB.res b/src/cobalt/content/icu/icudt56l/lang/en_GB.res
index e85d11d..01ae348 100644
--- a/src/cobalt/content/icu/icudt56l/lang/en_GB.res
+++ b/src/cobalt/content/icu/icudt56l/lang/en_GB.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/eo.res b/src/cobalt/content/icu/icudt56l/lang/eo.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/eo.res
+++ b/src/cobalt/content/icu/icudt56l/lang/eo.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/es.res b/src/cobalt/content/icu/icudt56l/lang/es.res
index f87be3d..e7db31e 100644
--- a/src/cobalt/content/icu/icudt56l/lang/es.res
+++ b/src/cobalt/content/icu/icudt56l/lang/es.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/es_419.res b/src/cobalt/content/icu/icudt56l/lang/es_419.res
index 2e8777e..837f6a0 100644
--- a/src/cobalt/content/icu/icudt56l/lang/es_419.res
+++ b/src/cobalt/content/icu/icudt56l/lang/es_419.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/et.res b/src/cobalt/content/icu/icudt56l/lang/et.res
index 494de43..327d8b5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/et.res
+++ b/src/cobalt/content/icu/icudt56l/lang/et.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/eu.res b/src/cobalt/content/icu/icudt56l/lang/eu.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/eu.res
+++ b/src/cobalt/content/icu/icudt56l/lang/eu.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/fa.res b/src/cobalt/content/icu/icudt56l/lang/fa.res
index 56784ac..dc3a53a 100644
--- a/src/cobalt/content/icu/icudt56l/lang/fa.res
+++ b/src/cobalt/content/icu/icudt56l/lang/fa.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/fi.res b/src/cobalt/content/icu/icudt56l/lang/fi.res
index d57330d..1360e3d 100644
--- a/src/cobalt/content/icu/icudt56l/lang/fi.res
+++ b/src/cobalt/content/icu/icudt56l/lang/fi.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/fil.res b/src/cobalt/content/icu/icudt56l/lang/fil.res
index 307050b..7100f70 100644
--- a/src/cobalt/content/icu/icudt56l/lang/fil.res
+++ b/src/cobalt/content/icu/icudt56l/lang/fil.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/fo.res b/src/cobalt/content/icu/icudt56l/lang/fo.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/fo.res
+++ b/src/cobalt/content/icu/icudt56l/lang/fo.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/fr.res b/src/cobalt/content/icu/icudt56l/lang/fr.res
index 9c998d0..57b9b8c 100644
--- a/src/cobalt/content/icu/icudt56l/lang/fr.res
+++ b/src/cobalt/content/icu/icudt56l/lang/fr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ga.res b/src/cobalt/content/icu/icudt56l/lang/ga.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/ga.res
+++ b/src/cobalt/content/icu/icudt56l/lang/ga.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/gl.res b/src/cobalt/content/icu/icudt56l/lang/gl.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/gl.res
+++ b/src/cobalt/content/icu/icudt56l/lang/gl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/gu.res b/src/cobalt/content/icu/icudt56l/lang/gu.res
index deb1e55..38b7e18 100644
--- a/src/cobalt/content/icu/icudt56l/lang/gu.res
+++ b/src/cobalt/content/icu/icudt56l/lang/gu.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ha.res b/src/cobalt/content/icu/icudt56l/lang/ha.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/ha.res
+++ b/src/cobalt/content/icu/icudt56l/lang/ha.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/haw.res b/src/cobalt/content/icu/icudt56l/lang/haw.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/haw.res
+++ b/src/cobalt/content/icu/icudt56l/lang/haw.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/he.res b/src/cobalt/content/icu/icudt56l/lang/he.res
index 6c31aa3..b11652b 100644
--- a/src/cobalt/content/icu/icudt56l/lang/he.res
+++ b/src/cobalt/content/icu/icudt56l/lang/he.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/hi.res b/src/cobalt/content/icu/icudt56l/lang/hi.res
index 51a73d7..3e30df6 100644
--- a/src/cobalt/content/icu/icudt56l/lang/hi.res
+++ b/src/cobalt/content/icu/icudt56l/lang/hi.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/hr.res b/src/cobalt/content/icu/icudt56l/lang/hr.res
index 92cd698..6cae61d 100644
--- a/src/cobalt/content/icu/icudt56l/lang/hr.res
+++ b/src/cobalt/content/icu/icudt56l/lang/hr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/hu.res b/src/cobalt/content/icu/icudt56l/lang/hu.res
index 2d8d2f0..9cf7fd8 100644
--- a/src/cobalt/content/icu/icudt56l/lang/hu.res
+++ b/src/cobalt/content/icu/icudt56l/lang/hu.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/hy.res b/src/cobalt/content/icu/icudt56l/lang/hy.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/hy.res
+++ b/src/cobalt/content/icu/icudt56l/lang/hy.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/id.res b/src/cobalt/content/icu/icudt56l/lang/id.res
index 6c93af1..1b3af59 100644
--- a/src/cobalt/content/icu/icudt56l/lang/id.res
+++ b/src/cobalt/content/icu/icudt56l/lang/id.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ig.res b/src/cobalt/content/icu/icudt56l/lang/ig.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/ig.res
+++ b/src/cobalt/content/icu/icudt56l/lang/ig.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/in.res b/src/cobalt/content/icu/icudt56l/lang/in.res
index 919f78c..9a6ec30 100644
--- a/src/cobalt/content/icu/icudt56l/lang/in.res
+++ b/src/cobalt/content/icu/icudt56l/lang/in.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/is.res b/src/cobalt/content/icu/icudt56l/lang/is.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/is.res
+++ b/src/cobalt/content/icu/icudt56l/lang/is.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/it.res b/src/cobalt/content/icu/icudt56l/lang/it.res
index 83be75d..55cc520 100644
--- a/src/cobalt/content/icu/icudt56l/lang/it.res
+++ b/src/cobalt/content/icu/icudt56l/lang/it.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/iw.res b/src/cobalt/content/icu/icudt56l/lang/iw.res
index 5f83c12..2c0cbe7 100644
--- a/src/cobalt/content/icu/icudt56l/lang/iw.res
+++ b/src/cobalt/content/icu/icudt56l/lang/iw.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ja.res b/src/cobalt/content/icu/icudt56l/lang/ja.res
index c60a5b8..0aa7d29 100644
--- a/src/cobalt/content/icu/icudt56l/lang/ja.res
+++ b/src/cobalt/content/icu/icudt56l/lang/ja.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ka.res b/src/cobalt/content/icu/icudt56l/lang/ka.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/ka.res
+++ b/src/cobalt/content/icu/icudt56l/lang/ka.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/kk.res b/src/cobalt/content/icu/icudt56l/lang/kk.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/kk.res
+++ b/src/cobalt/content/icu/icudt56l/lang/kk.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/km.res b/src/cobalt/content/icu/icudt56l/lang/km.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/km.res
+++ b/src/cobalt/content/icu/icudt56l/lang/km.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/kn.res b/src/cobalt/content/icu/icudt56l/lang/kn.res
index 96df004..209967c 100644
--- a/src/cobalt/content/icu/icudt56l/lang/kn.res
+++ b/src/cobalt/content/icu/icudt56l/lang/kn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ko.res b/src/cobalt/content/icu/icudt56l/lang/ko.res
index 3dd51a4..b1841e6 100644
--- a/src/cobalt/content/icu/icudt56l/lang/ko.res
+++ b/src/cobalt/content/icu/icudt56l/lang/ko.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ku.res b/src/cobalt/content/icu/icudt56l/lang/ku.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/ku.res
+++ b/src/cobalt/content/icu/icudt56l/lang/ku.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ky.res b/src/cobalt/content/icu/icudt56l/lang/ky.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/ky.res
+++ b/src/cobalt/content/icu/icudt56l/lang/ky.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/lg.res b/src/cobalt/content/icu/icudt56l/lang/lg.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/lg.res
+++ b/src/cobalt/content/icu/icudt56l/lang/lg.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ln.res b/src/cobalt/content/icu/icudt56l/lang/ln.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/ln.res
+++ b/src/cobalt/content/icu/icudt56l/lang/ln.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/lo.res b/src/cobalt/content/icu/icudt56l/lang/lo.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/lo.res
+++ b/src/cobalt/content/icu/icudt56l/lang/lo.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/lt.res b/src/cobalt/content/icu/icudt56l/lang/lt.res
index a717030..aa6b48a 100644
--- a/src/cobalt/content/icu/icudt56l/lang/lt.res
+++ b/src/cobalt/content/icu/icudt56l/lang/lt.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/lv.res b/src/cobalt/content/icu/icudt56l/lang/lv.res
index e2947f6..408d5f2 100644
--- a/src/cobalt/content/icu/icudt56l/lang/lv.res
+++ b/src/cobalt/content/icu/icudt56l/lang/lv.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/mfe.res b/src/cobalt/content/icu/icudt56l/lang/mfe.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/mfe.res
+++ b/src/cobalt/content/icu/icudt56l/lang/mfe.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/mg.res b/src/cobalt/content/icu/icudt56l/lang/mg.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/mg.res
+++ b/src/cobalt/content/icu/icudt56l/lang/mg.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/mk.res b/src/cobalt/content/icu/icudt56l/lang/mk.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/mk.res
+++ b/src/cobalt/content/icu/icudt56l/lang/mk.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ml.res b/src/cobalt/content/icu/icudt56l/lang/ml.res
index 09b2da6..5e71641 100644
--- a/src/cobalt/content/icu/icudt56l/lang/ml.res
+++ b/src/cobalt/content/icu/icudt56l/lang/ml.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/mn.res b/src/cobalt/content/icu/icudt56l/lang/mn.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/mn.res
+++ b/src/cobalt/content/icu/icudt56l/lang/mn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/mo.res b/src/cobalt/content/icu/icudt56l/lang/mo.res
index 74d43b4..d16ea71 100644
--- a/src/cobalt/content/icu/icudt56l/lang/mo.res
+++ b/src/cobalt/content/icu/icudt56l/lang/mo.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/mr.res b/src/cobalt/content/icu/icudt56l/lang/mr.res
index 2ad6158..553e75f 100644
--- a/src/cobalt/content/icu/icudt56l/lang/mr.res
+++ b/src/cobalt/content/icu/icudt56l/lang/mr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ms.res b/src/cobalt/content/icu/icudt56l/lang/ms.res
index 3b5c982..50e9141 100644
--- a/src/cobalt/content/icu/icudt56l/lang/ms.res
+++ b/src/cobalt/content/icu/icudt56l/lang/ms.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/mt.res b/src/cobalt/content/icu/icudt56l/lang/mt.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/mt.res
+++ b/src/cobalt/content/icu/icudt56l/lang/mt.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/my.res b/src/cobalt/content/icu/icudt56l/lang/my.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/my.res
+++ b/src/cobalt/content/icu/icudt56l/lang/my.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/nb.res b/src/cobalt/content/icu/icudt56l/lang/nb.res
index e24ee82..adc7586 100644
--- a/src/cobalt/content/icu/icudt56l/lang/nb.res
+++ b/src/cobalt/content/icu/icudt56l/lang/nb.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ne.res b/src/cobalt/content/icu/icudt56l/lang/ne.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/ne.res
+++ b/src/cobalt/content/icu/icudt56l/lang/ne.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/nl.res b/src/cobalt/content/icu/icudt56l/lang/nl.res
index 72fef2d..6343007 100644
--- a/src/cobalt/content/icu/icudt56l/lang/nl.res
+++ b/src/cobalt/content/icu/icudt56l/lang/nl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/nn.res b/src/cobalt/content/icu/icudt56l/lang/nn.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/nn.res
+++ b/src/cobalt/content/icu/icudt56l/lang/nn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/no.res b/src/cobalt/content/icu/icudt56l/lang/no.res
index 35438a1..eec6664 100644
--- a/src/cobalt/content/icu/icudt56l/lang/no.res
+++ b/src/cobalt/content/icu/icudt56l/lang/no.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/nyn.res b/src/cobalt/content/icu/icudt56l/lang/nyn.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/nyn.res
+++ b/src/cobalt/content/icu/icudt56l/lang/nyn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/om.res b/src/cobalt/content/icu/icudt56l/lang/om.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/om.res
+++ b/src/cobalt/content/icu/icudt56l/lang/om.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/or.res b/src/cobalt/content/icu/icudt56l/lang/or.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/or.res
+++ b/src/cobalt/content/icu/icudt56l/lang/or.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/pa.res b/src/cobalt/content/icu/icudt56l/lang/pa.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/pa.res
+++ b/src/cobalt/content/icu/icudt56l/lang/pa.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/pl.res b/src/cobalt/content/icu/icudt56l/lang/pl.res
index f686dc3..997b62f 100644
--- a/src/cobalt/content/icu/icudt56l/lang/pl.res
+++ b/src/cobalt/content/icu/icudt56l/lang/pl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/pool.res b/src/cobalt/content/icu/icudt56l/lang/pool.res
index 097c8c2..dde2560 100644
--- a/src/cobalt/content/icu/icudt56l/lang/pool.res
+++ b/src/cobalt/content/icu/icudt56l/lang/pool.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ps.res b/src/cobalt/content/icu/icudt56l/lang/ps.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/ps.res
+++ b/src/cobalt/content/icu/icudt56l/lang/ps.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/pt.res b/src/cobalt/content/icu/icudt56l/lang/pt.res
index 083238f..16f172a 100644
--- a/src/cobalt/content/icu/icudt56l/lang/pt.res
+++ b/src/cobalt/content/icu/icudt56l/lang/pt.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/pt_PT.res b/src/cobalt/content/icu/icudt56l/lang/pt_PT.res
index d99c30e..5ed28c4 100644
--- a/src/cobalt/content/icu/icudt56l/lang/pt_PT.res
+++ b/src/cobalt/content/icu/icudt56l/lang/pt_PT.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/rm.res b/src/cobalt/content/icu/icudt56l/lang/rm.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/rm.res
+++ b/src/cobalt/content/icu/icudt56l/lang/rm.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/rn.res b/src/cobalt/content/icu/icudt56l/lang/rn.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/rn.res
+++ b/src/cobalt/content/icu/icudt56l/lang/rn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ro.res b/src/cobalt/content/icu/icudt56l/lang/ro.res
index 7d60a43..d8b5672 100644
--- a/src/cobalt/content/icu/icudt56l/lang/ro.res
+++ b/src/cobalt/content/icu/icudt56l/lang/ro.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ro_MD.res b/src/cobalt/content/icu/icudt56l/lang/ro_MD.res
index 9fb8d50..e911239 100644
--- a/src/cobalt/content/icu/icudt56l/lang/ro_MD.res
+++ b/src/cobalt/content/icu/icudt56l/lang/ro_MD.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/root.res b/src/cobalt/content/icu/icudt56l/lang/root.res
index 1f511a2..65785f7 100644
--- a/src/cobalt/content/icu/icudt56l/lang/root.res
+++ b/src/cobalt/content/icu/icudt56l/lang/root.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ru.res b/src/cobalt/content/icu/icudt56l/lang/ru.res
index e533727..1638295 100644
--- a/src/cobalt/content/icu/icudt56l/lang/ru.res
+++ b/src/cobalt/content/icu/icudt56l/lang/ru.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/rw.res b/src/cobalt/content/icu/icudt56l/lang/rw.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/rw.res
+++ b/src/cobalt/content/icu/icudt56l/lang/rw.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/sh.res b/src/cobalt/content/icu/icudt56l/lang/sh.res
index c500249..e3daa0d 100644
--- a/src/cobalt/content/icu/icudt56l/lang/sh.res
+++ b/src/cobalt/content/icu/icudt56l/lang/sh.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/si.res b/src/cobalt/content/icu/icudt56l/lang/si.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/si.res
+++ b/src/cobalt/content/icu/icudt56l/lang/si.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/sk.res b/src/cobalt/content/icu/icudt56l/lang/sk.res
index b211109..f1c888c 100644
--- a/src/cobalt/content/icu/icudt56l/lang/sk.res
+++ b/src/cobalt/content/icu/icudt56l/lang/sk.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/sl.res b/src/cobalt/content/icu/icudt56l/lang/sl.res
index 0af3682..b06ac68 100644
--- a/src/cobalt/content/icu/icudt56l/lang/sl.res
+++ b/src/cobalt/content/icu/icudt56l/lang/sl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/sn.res b/src/cobalt/content/icu/icudt56l/lang/sn.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/sn.res
+++ b/src/cobalt/content/icu/icudt56l/lang/sn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/so.res b/src/cobalt/content/icu/icudt56l/lang/so.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/so.res
+++ b/src/cobalt/content/icu/icudt56l/lang/so.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/sq.res b/src/cobalt/content/icu/icudt56l/lang/sq.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/sq.res
+++ b/src/cobalt/content/icu/icudt56l/lang/sq.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/sr.res b/src/cobalt/content/icu/icudt56l/lang/sr.res
index d3e4fc2..4243fe1 100644
--- a/src/cobalt/content/icu/icudt56l/lang/sr.res
+++ b/src/cobalt/content/icu/icudt56l/lang/sr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/sr_Latn.res b/src/cobalt/content/icu/icudt56l/lang/sr_Latn.res
index 4ed265a..9e0bea3 100644
--- a/src/cobalt/content/icu/icudt56l/lang/sr_Latn.res
+++ b/src/cobalt/content/icu/icudt56l/lang/sr_Latn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/sv.res b/src/cobalt/content/icu/icudt56l/lang/sv.res
index 7af73bb..b89e78f 100644
--- a/src/cobalt/content/icu/icudt56l/lang/sv.res
+++ b/src/cobalt/content/icu/icudt56l/lang/sv.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/sw.res b/src/cobalt/content/icu/icudt56l/lang/sw.res
index e084dd3..d339f7d 100644
--- a/src/cobalt/content/icu/icudt56l/lang/sw.res
+++ b/src/cobalt/content/icu/icudt56l/lang/sw.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ta.res b/src/cobalt/content/icu/icudt56l/lang/ta.res
index 34e8d23..24614ec 100644
--- a/src/cobalt/content/icu/icudt56l/lang/ta.res
+++ b/src/cobalt/content/icu/icudt56l/lang/ta.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/te.res b/src/cobalt/content/icu/icudt56l/lang/te.res
index db1ac43..1d32c96 100644
--- a/src/cobalt/content/icu/icudt56l/lang/te.res
+++ b/src/cobalt/content/icu/icudt56l/lang/te.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/tg.res b/src/cobalt/content/icu/icudt56l/lang/tg.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/tg.res
+++ b/src/cobalt/content/icu/icudt56l/lang/tg.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/th.res b/src/cobalt/content/icu/icudt56l/lang/th.res
index e67284e..effbecc 100644
--- a/src/cobalt/content/icu/icudt56l/lang/th.res
+++ b/src/cobalt/content/icu/icudt56l/lang/th.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ti.res b/src/cobalt/content/icu/icudt56l/lang/ti.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/ti.res
+++ b/src/cobalt/content/icu/icudt56l/lang/ti.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/tl.res b/src/cobalt/content/icu/icudt56l/lang/tl.res
index ea58c63..cdcff68 100644
--- a/src/cobalt/content/icu/icudt56l/lang/tl.res
+++ b/src/cobalt/content/icu/icudt56l/lang/tl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/to.res b/src/cobalt/content/icu/icudt56l/lang/to.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/to.res
+++ b/src/cobalt/content/icu/icudt56l/lang/to.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/tr.res b/src/cobalt/content/icu/icudt56l/lang/tr.res
index 0f21256..d077ac8 100644
--- a/src/cobalt/content/icu/icudt56l/lang/tr.res
+++ b/src/cobalt/content/icu/icudt56l/lang/tr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/uk.res b/src/cobalt/content/icu/icudt56l/lang/uk.res
index 35551bf..b099afd 100644
--- a/src/cobalt/content/icu/icudt56l/lang/uk.res
+++ b/src/cobalt/content/icu/icudt56l/lang/uk.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ur.res b/src/cobalt/content/icu/icudt56l/lang/ur.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/ur.res
+++ b/src/cobalt/content/icu/icudt56l/lang/ur.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/uz.res b/src/cobalt/content/icu/icudt56l/lang/uz.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/uz.res
+++ b/src/cobalt/content/icu/icudt56l/lang/uz.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/vi.res b/src/cobalt/content/icu/icudt56l/lang/vi.res
index 980e02c..98aa90d 100644
--- a/src/cobalt/content/icu/icudt56l/lang/vi.res
+++ b/src/cobalt/content/icu/icudt56l/lang/vi.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/wa.res b/src/cobalt/content/icu/icudt56l/lang/wa.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/wa.res
+++ b/src/cobalt/content/icu/icudt56l/lang/wa.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/yo.res b/src/cobalt/content/icu/icudt56l/lang/yo.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/yo.res
+++ b/src/cobalt/content/icu/icudt56l/lang/yo.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/zh.res b/src/cobalt/content/icu/icudt56l/lang/zh.res
index f58391f..9dbab21 100644
--- a/src/cobalt/content/icu/icudt56l/lang/zh.res
+++ b/src/cobalt/content/icu/icudt56l/lang/zh.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/zh_CN.res b/src/cobalt/content/icu/icudt56l/lang/zh_CN.res
index a7ccb03..d65558b 100644
--- a/src/cobalt/content/icu/icudt56l/lang/zh_CN.res
+++ b/src/cobalt/content/icu/icudt56l/lang/zh_CN.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/zh_HK.res b/src/cobalt/content/icu/icudt56l/lang/zh_HK.res
index 7991f52..bc307bb 100644
--- a/src/cobalt/content/icu/icudt56l/lang/zh_HK.res
+++ b/src/cobalt/content/icu/icudt56l/lang/zh_HK.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/zh_Hans.res b/src/cobalt/content/icu/icudt56l/lang/zh_Hans.res
index 2b89ea3..15f949b 100644
--- a/src/cobalt/content/icu/icudt56l/lang/zh_Hans.res
+++ b/src/cobalt/content/icu/icudt56l/lang/zh_Hans.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/zh_Hans_CN.res b/src/cobalt/content/icu/icudt56l/lang/zh_Hans_CN.res
index 9fb8d50..e911239 100644
--- a/src/cobalt/content/icu/icudt56l/lang/zh_Hans_CN.res
+++ b/src/cobalt/content/icu/icudt56l/lang/zh_Hans_CN.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/zh_Hans_SG.res b/src/cobalt/content/icu/icudt56l/lang/zh_Hans_SG.res
index 9fb8d50..e911239 100644
--- a/src/cobalt/content/icu/icudt56l/lang/zh_Hans_SG.res
+++ b/src/cobalt/content/icu/icudt56l/lang/zh_Hans_SG.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/zh_Hant.res b/src/cobalt/content/icu/icudt56l/lang/zh_Hant.res
index 0865fa5..eb74632 100644
--- a/src/cobalt/content/icu/icudt56l/lang/zh_Hant.res
+++ b/src/cobalt/content/icu/icudt56l/lang/zh_Hant.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/zh_Hant_HK.res b/src/cobalt/content/icu/icudt56l/lang/zh_Hant_HK.res
index 11c1f97..0a152c4 100644
--- a/src/cobalt/content/icu/icudt56l/lang/zh_Hant_HK.res
+++ b/src/cobalt/content/icu/icudt56l/lang/zh_Hant_HK.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/zh_Hant_TW.res b/src/cobalt/content/icu/icudt56l/lang/zh_Hant_TW.res
index 9fb8d50..e911239 100644
--- a/src/cobalt/content/icu/icudt56l/lang/zh_Hant_TW.res
+++ b/src/cobalt/content/icu/icudt56l/lang/zh_Hant_TW.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/zh_SG.res b/src/cobalt/content/icu/icudt56l/lang/zh_SG.res
index 85200e4..e40ce2c 100644
--- a/src/cobalt/content/icu/icudt56l/lang/zh_SG.res
+++ b/src/cobalt/content/icu/icudt56l/lang/zh_SG.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/zh_TW.res b/src/cobalt/content/icu/icudt56l/lang/zh_TW.res
index 430004b..6436069 100644
--- a/src/cobalt/content/icu/icudt56l/lang/zh_TW.res
+++ b/src/cobalt/content/icu/icudt56l/lang/zh_TW.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/zu.res b/src/cobalt/content/icu/icudt56l/lang/zu.res
index 8f4230f..1f0a3e5 100644
--- a/src/cobalt/content/icu/icudt56l/lang/zu.res
+++ b/src/cobalt/content/icu/icudt56l/lang/zu.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lg.res b/src/cobalt/content/icu/icudt56l/lg.res
index 57facdd..f70868d 100644
--- a/src/cobalt/content/icu/icudt56l/lg.res
+++ b/src/cobalt/content/icu/icudt56l/lg.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ln.res b/src/cobalt/content/icu/icudt56l/ln.res
index 2778284..7f49c5e 100644
--- a/src/cobalt/content/icu/icudt56l/ln.res
+++ b/src/cobalt/content/icu/icudt56l/ln.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lo.res b/src/cobalt/content/icu/icudt56l/lo.res
index 6157798..282f73f 100644
--- a/src/cobalt/content/icu/icudt56l/lo.res
+++ b/src/cobalt/content/icu/icudt56l/lo.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lt.res b/src/cobalt/content/icu/icudt56l/lt.res
index 00a663c..c3ab11b 100644
--- a/src/cobalt/content/icu/icudt56l/lt.res
+++ b/src/cobalt/content/icu/icudt56l/lt.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lv.res b/src/cobalt/content/icu/icudt56l/lv.res
index 1534810..a18464d 100644
--- a/src/cobalt/content/icu/icudt56l/lv.res
+++ b/src/cobalt/content/icu/icudt56l/lv.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/mfe.res b/src/cobalt/content/icu/icudt56l/mfe.res
index 9ad9a6c..b01f52f 100644
--- a/src/cobalt/content/icu/icudt56l/mfe.res
+++ b/src/cobalt/content/icu/icudt56l/mfe.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/mg.res b/src/cobalt/content/icu/icudt56l/mg.res
index 320a39b..a716314 100644
--- a/src/cobalt/content/icu/icudt56l/mg.res
+++ b/src/cobalt/content/icu/icudt56l/mg.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/mk.res b/src/cobalt/content/icu/icudt56l/mk.res
index dc18591..16d876e 100644
--- a/src/cobalt/content/icu/icudt56l/mk.res
+++ b/src/cobalt/content/icu/icudt56l/mk.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ml.res b/src/cobalt/content/icu/icudt56l/ml.res
index 955c7c1..412ba51 100644
--- a/src/cobalt/content/icu/icudt56l/ml.res
+++ b/src/cobalt/content/icu/icudt56l/ml.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/mn.res b/src/cobalt/content/icu/icudt56l/mn.res
index 62734c8..4eaf0c0 100644
--- a/src/cobalt/content/icu/icudt56l/mn.res
+++ b/src/cobalt/content/icu/icudt56l/mn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/mo.res b/src/cobalt/content/icu/icudt56l/mo.res
index 7bf1b78..52a5358 100644
--- a/src/cobalt/content/icu/icudt56l/mo.res
+++ b/src/cobalt/content/icu/icudt56l/mo.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/mr.res b/src/cobalt/content/icu/icudt56l/mr.res
index 62c9810..b512a48 100644
--- a/src/cobalt/content/icu/icudt56l/mr.res
+++ b/src/cobalt/content/icu/icudt56l/mr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ms.res b/src/cobalt/content/icu/icudt56l/ms.res
index 4487127..f079f3b 100644
--- a/src/cobalt/content/icu/icudt56l/ms.res
+++ b/src/cobalt/content/icu/icudt56l/ms.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/mt.res b/src/cobalt/content/icu/icudt56l/mt.res
index 8321dec..fbbcb37 100644
--- a/src/cobalt/content/icu/icudt56l/mt.res
+++ b/src/cobalt/content/icu/icudt56l/mt.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/my.res b/src/cobalt/content/icu/icudt56l/my.res
index 0bffba5..a940752 100644
--- a/src/cobalt/content/icu/icudt56l/my.res
+++ b/src/cobalt/content/icu/icudt56l/my.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/nb.res b/src/cobalt/content/icu/icudt56l/nb.res
index 0f11d46..1e41d8a 100644
--- a/src/cobalt/content/icu/icudt56l/nb.res
+++ b/src/cobalt/content/icu/icudt56l/nb.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ne.res b/src/cobalt/content/icu/icudt56l/ne.res
index dbc62bc..ca97326 100644
--- a/src/cobalt/content/icu/icudt56l/ne.res
+++ b/src/cobalt/content/icu/icudt56l/ne.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/nl.res b/src/cobalt/content/icu/icudt56l/nl.res
index 48ae733..f473748 100644
--- a/src/cobalt/content/icu/icudt56l/nl.res
+++ b/src/cobalt/content/icu/icudt56l/nl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/nn.res b/src/cobalt/content/icu/icudt56l/nn.res
index 5c5db79..9ca09d0 100644
--- a/src/cobalt/content/icu/icudt56l/nn.res
+++ b/src/cobalt/content/icu/icudt56l/nn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/no.res b/src/cobalt/content/icu/icudt56l/no.res
index 652e722..95b72f1 100644
--- a/src/cobalt/content/icu/icudt56l/no.res
+++ b/src/cobalt/content/icu/icudt56l/no.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/nyn.res b/src/cobalt/content/icu/icudt56l/nyn.res
index dd92b68..14c4a68 100644
--- a/src/cobalt/content/icu/icudt56l/nyn.res
+++ b/src/cobalt/content/icu/icudt56l/nyn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/om.res b/src/cobalt/content/icu/icudt56l/om.res
index dd92b68..14c4a68 100644
--- a/src/cobalt/content/icu/icudt56l/om.res
+++ b/src/cobalt/content/icu/icudt56l/om.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/or.res b/src/cobalt/content/icu/icudt56l/or.res
index 8708b9e..f2cca67 100644
--- a/src/cobalt/content/icu/icudt56l/or.res
+++ b/src/cobalt/content/icu/icudt56l/or.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/pa.res b/src/cobalt/content/icu/icudt56l/pa.res
index 7a310e0..b1453eb 100644
--- a/src/cobalt/content/icu/icudt56l/pa.res
+++ b/src/cobalt/content/icu/icudt56l/pa.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/pl.res b/src/cobalt/content/icu/icudt56l/pl.res
index 2cd9f01..a25c258 100644
--- a/src/cobalt/content/icu/icudt56l/pl.res
+++ b/src/cobalt/content/icu/icudt56l/pl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/pool.res b/src/cobalt/content/icu/icudt56l/pool.res
index 923a6cb..654a03b 100644
--- a/src/cobalt/content/icu/icudt56l/pool.res
+++ b/src/cobalt/content/icu/icudt56l/pool.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ps.res b/src/cobalt/content/icu/icudt56l/ps.res
index 7f814f8..b715fc2 100644
--- a/src/cobalt/content/icu/icudt56l/ps.res
+++ b/src/cobalt/content/icu/icudt56l/ps.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/pt.res b/src/cobalt/content/icu/icudt56l/pt.res
index 6abcb75..0055dd7 100644
--- a/src/cobalt/content/icu/icudt56l/pt.res
+++ b/src/cobalt/content/icu/icudt56l/pt.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/pt_BR.res b/src/cobalt/content/icu/icudt56l/pt_BR.res
index 008e4b7..d0ddba1 100644
--- a/src/cobalt/content/icu/icudt56l/pt_BR.res
+++ b/src/cobalt/content/icu/icudt56l/pt_BR.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/pt_PT.res b/src/cobalt/content/icu/icudt56l/pt_PT.res
index 76ca66f..f1a5807 100644
--- a/src/cobalt/content/icu/icudt56l/pt_PT.res
+++ b/src/cobalt/content/icu/icudt56l/pt_PT.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/region/en.res b/src/cobalt/content/icu/icudt56l/region/en.res
index 967b2a3..bc9a049 100644
--- a/src/cobalt/content/icu/icudt56l/region/en.res
+++ b/src/cobalt/content/icu/icudt56l/region/en.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/region/pool.res b/src/cobalt/content/icu/icudt56l/region/pool.res
index 0beeb3a..c8b3a66 100644
--- a/src/cobalt/content/icu/icudt56l/region/pool.res
+++ b/src/cobalt/content/icu/icudt56l/region/pool.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/region/root.res b/src/cobalt/content/icu/icudt56l/region/root.res
index 72cad82..f7ec23c 100644
--- a/src/cobalt/content/icu/icudt56l/region/root.res
+++ b/src/cobalt/content/icu/icudt56l/region/root.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/rm.res b/src/cobalt/content/icu/icudt56l/rm.res
index 8d81b3b..9f468cc 100644
--- a/src/cobalt/content/icu/icudt56l/rm.res
+++ b/src/cobalt/content/icu/icudt56l/rm.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/rn.res b/src/cobalt/content/icu/icudt56l/rn.res
index dd92b68..14c4a68 100644
--- a/src/cobalt/content/icu/icudt56l/rn.res
+++ b/src/cobalt/content/icu/icudt56l/rn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ro.res b/src/cobalt/content/icu/icudt56l/ro.res
index df484c6..64953d1 100644
--- a/src/cobalt/content/icu/icudt56l/ro.res
+++ b/src/cobalt/content/icu/icudt56l/ro.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ro_MD.res b/src/cobalt/content/icu/icudt56l/ro_MD.res
index 8f32770..8a95d37 100644
--- a/src/cobalt/content/icu/icudt56l/ro_MD.res
+++ b/src/cobalt/content/icu/icudt56l/ro_MD.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/root.res b/src/cobalt/content/icu/icudt56l/root.res
index f9dd09b..749557c 100644
--- a/src/cobalt/content/icu/icudt56l/root.res
+++ b/src/cobalt/content/icu/icudt56l/root.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ru.res b/src/cobalt/content/icu/icudt56l/ru.res
index f92eea0..4797943 100644
--- a/src/cobalt/content/icu/icudt56l/ru.res
+++ b/src/cobalt/content/icu/icudt56l/ru.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/rw.res b/src/cobalt/content/icu/icudt56l/rw.res
index dd92b68..14c4a68 100644
--- a/src/cobalt/content/icu/icudt56l/rw.res
+++ b/src/cobalt/content/icu/icudt56l/rw.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/sh.res b/src/cobalt/content/icu/icudt56l/sh.res
index d4f746c..064761b 100644
--- a/src/cobalt/content/icu/icudt56l/sh.res
+++ b/src/cobalt/content/icu/icudt56l/sh.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/si.res b/src/cobalt/content/icu/icudt56l/si.res
index 1e448b7..854a983 100644
--- a/src/cobalt/content/icu/icudt56l/si.res
+++ b/src/cobalt/content/icu/icudt56l/si.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/sk.res b/src/cobalt/content/icu/icudt56l/sk.res
index 77824af..26b057b 100644
--- a/src/cobalt/content/icu/icudt56l/sk.res
+++ b/src/cobalt/content/icu/icudt56l/sk.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/sl.res b/src/cobalt/content/icu/icudt56l/sl.res
index cdd325e..d1fa5b1 100644
--- a/src/cobalt/content/icu/icudt56l/sl.res
+++ b/src/cobalt/content/icu/icudt56l/sl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/sn.res b/src/cobalt/content/icu/icudt56l/sn.res
index b6e4440..9876284 100644
--- a/src/cobalt/content/icu/icudt56l/sn.res
+++ b/src/cobalt/content/icu/icudt56l/sn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/so.res b/src/cobalt/content/icu/icudt56l/so.res
index dd92b68..14c4a68 100644
--- a/src/cobalt/content/icu/icudt56l/so.res
+++ b/src/cobalt/content/icu/icudt56l/so.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/sq.res b/src/cobalt/content/icu/icudt56l/sq.res
index 37804c4..2f60b9e 100644
--- a/src/cobalt/content/icu/icudt56l/sq.res
+++ b/src/cobalt/content/icu/icudt56l/sq.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/sr.res b/src/cobalt/content/icu/icudt56l/sr.res
index 4ca52cb..d44d4b0 100644
--- a/src/cobalt/content/icu/icudt56l/sr.res
+++ b/src/cobalt/content/icu/icudt56l/sr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/sr_Latn.res b/src/cobalt/content/icu/icudt56l/sr_Latn.res
index 0d22fb6..00a544f 100644
--- a/src/cobalt/content/icu/icudt56l/sr_Latn.res
+++ b/src/cobalt/content/icu/icudt56l/sr_Latn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/sv.res b/src/cobalt/content/icu/icudt56l/sv.res
index 35911a5..d152a55 100644
--- a/src/cobalt/content/icu/icudt56l/sv.res
+++ b/src/cobalt/content/icu/icudt56l/sv.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/sw.res b/src/cobalt/content/icu/icudt56l/sw.res
index f822726..e3fe8e8 100644
--- a/src/cobalt/content/icu/icudt56l/sw.res
+++ b/src/cobalt/content/icu/icudt56l/sw.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ta.res b/src/cobalt/content/icu/icudt56l/ta.res
index 44e85af..533e622 100644
--- a/src/cobalt/content/icu/icudt56l/ta.res
+++ b/src/cobalt/content/icu/icudt56l/ta.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/te.res b/src/cobalt/content/icu/icudt56l/te.res
index 2042605..5a9230b 100644
--- a/src/cobalt/content/icu/icudt56l/te.res
+++ b/src/cobalt/content/icu/icudt56l/te.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/tg.res b/src/cobalt/content/icu/icudt56l/tg.res
index 0211bfe..f567bf3 100644
--- a/src/cobalt/content/icu/icudt56l/tg.res
+++ b/src/cobalt/content/icu/icudt56l/tg.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/th.res b/src/cobalt/content/icu/icudt56l/th.res
index dc226b5..5cab461 100644
--- a/src/cobalt/content/icu/icudt56l/th.res
+++ b/src/cobalt/content/icu/icudt56l/th.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ti.res b/src/cobalt/content/icu/icudt56l/ti.res
index 397d15f..5199c3d 100644
--- a/src/cobalt/content/icu/icudt56l/ti.res
+++ b/src/cobalt/content/icu/icudt56l/ti.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/tl.res b/src/cobalt/content/icu/icudt56l/tl.res
index c65b0a3..d6944ac 100644
--- a/src/cobalt/content/icu/icudt56l/tl.res
+++ b/src/cobalt/content/icu/icudt56l/tl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/to.res b/src/cobalt/content/icu/icudt56l/to.res
index db95267..ab19db3 100644
--- a/src/cobalt/content/icu/icudt56l/to.res
+++ b/src/cobalt/content/icu/icudt56l/to.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/tr.res b/src/cobalt/content/icu/icudt56l/tr.res
index 4c2a4ed..037b9f0 100644
--- a/src/cobalt/content/icu/icudt56l/tr.res
+++ b/src/cobalt/content/icu/icudt56l/tr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/translit/root.res b/src/cobalt/content/icu/icudt56l/translit/root.res
index 0686735..ec75cab 100644
--- a/src/cobalt/content/icu/icudt56l/translit/root.res
+++ b/src/cobalt/content/icu/icudt56l/translit/root.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/uk.res b/src/cobalt/content/icu/icudt56l/uk.res
index 0c87ee3..c408f0d 100644
--- a/src/cobalt/content/icu/icudt56l/uk.res
+++ b/src/cobalt/content/icu/icudt56l/uk.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/am.res b/src/cobalt/content/icu/icudt56l/unit/am.res
index dbf8c3e..6fc7821 100644
--- a/src/cobalt/content/icu/icudt56l/unit/am.res
+++ b/src/cobalt/content/icu/icudt56l/unit/am.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/ar.res b/src/cobalt/content/icu/icudt56l/unit/ar.res
index 9b12292..e2aac94 100644
--- a/src/cobalt/content/icu/icudt56l/unit/ar.res
+++ b/src/cobalt/content/icu/icudt56l/unit/ar.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/bg.res b/src/cobalt/content/icu/icudt56l/unit/bg.res
index 6e2c48e..a1c9cda 100644
--- a/src/cobalt/content/icu/icudt56l/unit/bg.res
+++ b/src/cobalt/content/icu/icudt56l/unit/bg.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/bn.res b/src/cobalt/content/icu/icudt56l/unit/bn.res
index 892495e..a212216 100644
--- a/src/cobalt/content/icu/icudt56l/unit/bn.res
+++ b/src/cobalt/content/icu/icudt56l/unit/bn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/ca.res b/src/cobalt/content/icu/icudt56l/unit/ca.res
index d95bf24..e842067 100644
--- a/src/cobalt/content/icu/icudt56l/unit/ca.res
+++ b/src/cobalt/content/icu/icudt56l/unit/ca.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/cs.res b/src/cobalt/content/icu/icudt56l/unit/cs.res
index 1fe2bd2..64f2993 100644
--- a/src/cobalt/content/icu/icudt56l/unit/cs.res
+++ b/src/cobalt/content/icu/icudt56l/unit/cs.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/da.res b/src/cobalt/content/icu/icudt56l/unit/da.res
index ab70915..ed1b59f 100644
--- a/src/cobalt/content/icu/icudt56l/unit/da.res
+++ b/src/cobalt/content/icu/icudt56l/unit/da.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/de.res b/src/cobalt/content/icu/icudt56l/unit/de.res
index d9e899a..8208373 100644
--- a/src/cobalt/content/icu/icudt56l/unit/de.res
+++ b/src/cobalt/content/icu/icudt56l/unit/de.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/de_CH.res b/src/cobalt/content/icu/icudt56l/unit/de_CH.res
index ce92e01..6eea893 100644
--- a/src/cobalt/content/icu/icudt56l/unit/de_CH.res
+++ b/src/cobalt/content/icu/icudt56l/unit/de_CH.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/el.res b/src/cobalt/content/icu/icudt56l/unit/el.res
index cef1fc9..6dd02a8 100644
--- a/src/cobalt/content/icu/icudt56l/unit/el.res
+++ b/src/cobalt/content/icu/icudt56l/unit/el.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/en.res b/src/cobalt/content/icu/icudt56l/unit/en.res
index c0e9641..dd313d6 100644
--- a/src/cobalt/content/icu/icudt56l/unit/en.res
+++ b/src/cobalt/content/icu/icudt56l/unit/en.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/en_001.res b/src/cobalt/content/icu/icudt56l/unit/en_001.res
index 0aaea4c..4e099c3 100644
--- a/src/cobalt/content/icu/icudt56l/unit/en_001.res
+++ b/src/cobalt/content/icu/icudt56l/unit/en_001.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/en_150.res b/src/cobalt/content/icu/icudt56l/unit/en_150.res
index 7311a35..c7f45f2 100644
--- a/src/cobalt/content/icu/icudt56l/unit/en_150.res
+++ b/src/cobalt/content/icu/icudt56l/unit/en_150.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/en_AU.res b/src/cobalt/content/icu/icudt56l/unit/en_AU.res
index 6861b55..48a18cf 100644
--- a/src/cobalt/content/icu/icudt56l/unit/en_AU.res
+++ b/src/cobalt/content/icu/icudt56l/unit/en_AU.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/en_CA.res b/src/cobalt/content/icu/icudt56l/unit/en_CA.res
index a992b66..dd233bc 100644
--- a/src/cobalt/content/icu/icudt56l/unit/en_CA.res
+++ b/src/cobalt/content/icu/icudt56l/unit/en_CA.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/en_GB.res b/src/cobalt/content/icu/icudt56l/unit/en_GB.res
index a251b48..7e38b76 100644
--- a/src/cobalt/content/icu/icudt56l/unit/en_GB.res
+++ b/src/cobalt/content/icu/icudt56l/unit/en_GB.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/en_IN.res b/src/cobalt/content/icu/icudt56l/unit/en_IN.res
index 403d14d..9bdaf65 100644
--- a/src/cobalt/content/icu/icudt56l/unit/en_IN.res
+++ b/src/cobalt/content/icu/icudt56l/unit/en_IN.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/en_NZ.res b/src/cobalt/content/icu/icudt56l/unit/en_NZ.res
index 403d14d..9bdaf65 100644
--- a/src/cobalt/content/icu/icudt56l/unit/en_NZ.res
+++ b/src/cobalt/content/icu/icudt56l/unit/en_NZ.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/en_ZA.res b/src/cobalt/content/icu/icudt56l/unit/en_ZA.res
index 403d14d..9bdaf65 100644
--- a/src/cobalt/content/icu/icudt56l/unit/en_ZA.res
+++ b/src/cobalt/content/icu/icudt56l/unit/en_ZA.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/es.res b/src/cobalt/content/icu/icudt56l/unit/es.res
index 0e05256..3e9e9d4 100644
--- a/src/cobalt/content/icu/icudt56l/unit/es.res
+++ b/src/cobalt/content/icu/icudt56l/unit/es.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/es_419.res b/src/cobalt/content/icu/icudt56l/unit/es_419.res
index f5550ca..b91698d 100644
--- a/src/cobalt/content/icu/icudt56l/unit/es_419.res
+++ b/src/cobalt/content/icu/icudt56l/unit/es_419.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/es_AR.res b/src/cobalt/content/icu/icudt56l/unit/es_AR.res
index b45c868..7513b45 100644
--- a/src/cobalt/content/icu/icudt56l/unit/es_AR.res
+++ b/src/cobalt/content/icu/icudt56l/unit/es_AR.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/es_MX.res b/src/cobalt/content/icu/icudt56l/unit/es_MX.res
index 427e5f5..711b319 100644
--- a/src/cobalt/content/icu/icudt56l/unit/es_MX.res
+++ b/src/cobalt/content/icu/icudt56l/unit/es_MX.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/es_US.res b/src/cobalt/content/icu/icudt56l/unit/es_US.res
index 9b8944a..1562007 100644
--- a/src/cobalt/content/icu/icudt56l/unit/es_US.res
+++ b/src/cobalt/content/icu/icudt56l/unit/es_US.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/et.res b/src/cobalt/content/icu/icudt56l/unit/et.res
index d237538..e054a78 100644
--- a/src/cobalt/content/icu/icudt56l/unit/et.res
+++ b/src/cobalt/content/icu/icudt56l/unit/et.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/fa.res b/src/cobalt/content/icu/icudt56l/unit/fa.res
index b701d58..e2682bc 100644
--- a/src/cobalt/content/icu/icudt56l/unit/fa.res
+++ b/src/cobalt/content/icu/icudt56l/unit/fa.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/fi.res b/src/cobalt/content/icu/icudt56l/unit/fi.res
index dbf5230..80bc2a6 100644
--- a/src/cobalt/content/icu/icudt56l/unit/fi.res
+++ b/src/cobalt/content/icu/icudt56l/unit/fi.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/fil.res b/src/cobalt/content/icu/icudt56l/unit/fil.res
index bf058da..9e033a5 100644
--- a/src/cobalt/content/icu/icudt56l/unit/fil.res
+++ b/src/cobalt/content/icu/icudt56l/unit/fil.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/fr.res b/src/cobalt/content/icu/icudt56l/unit/fr.res
index ab42c66..a55f106 100644
--- a/src/cobalt/content/icu/icudt56l/unit/fr.res
+++ b/src/cobalt/content/icu/icudt56l/unit/fr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/fr_CA.res b/src/cobalt/content/icu/icudt56l/unit/fr_CA.res
index 02360e7..8beacd0 100644
--- a/src/cobalt/content/icu/icudt56l/unit/fr_CA.res
+++ b/src/cobalt/content/icu/icudt56l/unit/fr_CA.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/gu.res b/src/cobalt/content/icu/icudt56l/unit/gu.res
index 509ed57..b01ba42 100644
--- a/src/cobalt/content/icu/icudt56l/unit/gu.res
+++ b/src/cobalt/content/icu/icudt56l/unit/gu.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/he.res b/src/cobalt/content/icu/icudt56l/unit/he.res
index 954f991..ba86247 100644
--- a/src/cobalt/content/icu/icudt56l/unit/he.res
+++ b/src/cobalt/content/icu/icudt56l/unit/he.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/hi.res b/src/cobalt/content/icu/icudt56l/unit/hi.res
index 27421d8..68994f8 100644
--- a/src/cobalt/content/icu/icudt56l/unit/hi.res
+++ b/src/cobalt/content/icu/icudt56l/unit/hi.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/hr.res b/src/cobalt/content/icu/icudt56l/unit/hr.res
index d40e0f1..4e9add2 100644
--- a/src/cobalt/content/icu/icudt56l/unit/hr.res
+++ b/src/cobalt/content/icu/icudt56l/unit/hr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/hu.res b/src/cobalt/content/icu/icudt56l/unit/hu.res
index 06bcb33..30d1204 100644
--- a/src/cobalt/content/icu/icudt56l/unit/hu.res
+++ b/src/cobalt/content/icu/icudt56l/unit/hu.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/id.res b/src/cobalt/content/icu/icudt56l/unit/id.res
index a2ffa76..a6fe7d5 100644
--- a/src/cobalt/content/icu/icudt56l/unit/id.res
+++ b/src/cobalt/content/icu/icudt56l/unit/id.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/in.res b/src/cobalt/content/icu/icudt56l/unit/in.res
index 33be5ef..72942a4 100644
--- a/src/cobalt/content/icu/icudt56l/unit/in.res
+++ b/src/cobalt/content/icu/icudt56l/unit/in.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/it.res b/src/cobalt/content/icu/icudt56l/unit/it.res
index dd8e132..f5122ea 100644
--- a/src/cobalt/content/icu/icudt56l/unit/it.res
+++ b/src/cobalt/content/icu/icudt56l/unit/it.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/iw.res b/src/cobalt/content/icu/icudt56l/unit/iw.res
index 821b606..2481a96 100644
--- a/src/cobalt/content/icu/icudt56l/unit/iw.res
+++ b/src/cobalt/content/icu/icudt56l/unit/iw.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/ja.res b/src/cobalt/content/icu/icudt56l/unit/ja.res
index 49099c7..679330e 100644
--- a/src/cobalt/content/icu/icudt56l/unit/ja.res
+++ b/src/cobalt/content/icu/icudt56l/unit/ja.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/kn.res b/src/cobalt/content/icu/icudt56l/unit/kn.res
index 2397b74..8f7162a 100644
--- a/src/cobalt/content/icu/icudt56l/unit/kn.res
+++ b/src/cobalt/content/icu/icudt56l/unit/kn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/ko.res b/src/cobalt/content/icu/icudt56l/unit/ko.res
index 160f5b2..ddaf257 100644
--- a/src/cobalt/content/icu/icudt56l/unit/ko.res
+++ b/src/cobalt/content/icu/icudt56l/unit/ko.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/lt.res b/src/cobalt/content/icu/icudt56l/unit/lt.res
index f1ae385..cb132b9 100644
--- a/src/cobalt/content/icu/icudt56l/unit/lt.res
+++ b/src/cobalt/content/icu/icudt56l/unit/lt.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/lv.res b/src/cobalt/content/icu/icudt56l/unit/lv.res
index a9b3785..a454b77 100644
--- a/src/cobalt/content/icu/icudt56l/unit/lv.res
+++ b/src/cobalt/content/icu/icudt56l/unit/lv.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/ml.res b/src/cobalt/content/icu/icudt56l/unit/ml.res
index 0e78247..68a34cc 100644
--- a/src/cobalt/content/icu/icudt56l/unit/ml.res
+++ b/src/cobalt/content/icu/icudt56l/unit/ml.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/mr.res b/src/cobalt/content/icu/icudt56l/unit/mr.res
index 934d2cd..6f1059b 100644
--- a/src/cobalt/content/icu/icudt56l/unit/mr.res
+++ b/src/cobalt/content/icu/icudt56l/unit/mr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/ms.res b/src/cobalt/content/icu/icudt56l/unit/ms.res
index 2709c71..f337393 100644
--- a/src/cobalt/content/icu/icudt56l/unit/ms.res
+++ b/src/cobalt/content/icu/icudt56l/unit/ms.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/nb.res b/src/cobalt/content/icu/icudt56l/unit/nb.res
index e30a45c..2889a2b 100644
--- a/src/cobalt/content/icu/icudt56l/unit/nb.res
+++ b/src/cobalt/content/icu/icudt56l/unit/nb.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/nl.res b/src/cobalt/content/icu/icudt56l/unit/nl.res
index 5550071..f24a3f7 100644
--- a/src/cobalt/content/icu/icudt56l/unit/nl.res
+++ b/src/cobalt/content/icu/icudt56l/unit/nl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/no.res b/src/cobalt/content/icu/icudt56l/unit/no.res
index e266b67..63bb003 100644
--- a/src/cobalt/content/icu/icudt56l/unit/no.res
+++ b/src/cobalt/content/icu/icudt56l/unit/no.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/pl.res b/src/cobalt/content/icu/icudt56l/unit/pl.res
index f54580b..4559eca 100644
--- a/src/cobalt/content/icu/icudt56l/unit/pl.res
+++ b/src/cobalt/content/icu/icudt56l/unit/pl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/pool.res b/src/cobalt/content/icu/icudt56l/unit/pool.res
index fa4b9be..e5caab3 100644
--- a/src/cobalt/content/icu/icudt56l/unit/pool.res
+++ b/src/cobalt/content/icu/icudt56l/unit/pool.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/pt.res b/src/cobalt/content/icu/icudt56l/unit/pt.res
index d237e93..ed56d01 100644
--- a/src/cobalt/content/icu/icudt56l/unit/pt.res
+++ b/src/cobalt/content/icu/icudt56l/unit/pt.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/pt_PT.res b/src/cobalt/content/icu/icudt56l/unit/pt_PT.res
index eea915f..4e786a7 100644
--- a/src/cobalt/content/icu/icudt56l/unit/pt_PT.res
+++ b/src/cobalt/content/icu/icudt56l/unit/pt_PT.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/ro.res b/src/cobalt/content/icu/icudt56l/unit/ro.res
index d5d1e80..efe4f07 100644
--- a/src/cobalt/content/icu/icudt56l/unit/ro.res
+++ b/src/cobalt/content/icu/icudt56l/unit/ro.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/root.res b/src/cobalt/content/icu/icudt56l/unit/root.res
index d05cba2..b873601 100644
--- a/src/cobalt/content/icu/icudt56l/unit/root.res
+++ b/src/cobalt/content/icu/icudt56l/unit/root.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/ru.res b/src/cobalt/content/icu/icudt56l/unit/ru.res
index a215804..43a5ccd 100644
--- a/src/cobalt/content/icu/icudt56l/unit/ru.res
+++ b/src/cobalt/content/icu/icudt56l/unit/ru.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/sh.res b/src/cobalt/content/icu/icudt56l/unit/sh.res
index eca4610..be1e011 100644
--- a/src/cobalt/content/icu/icudt56l/unit/sh.res
+++ b/src/cobalt/content/icu/icudt56l/unit/sh.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/sk.res b/src/cobalt/content/icu/icudt56l/unit/sk.res
index e89c411..7e7ce75 100644
--- a/src/cobalt/content/icu/icudt56l/unit/sk.res
+++ b/src/cobalt/content/icu/icudt56l/unit/sk.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/sl.res b/src/cobalt/content/icu/icudt56l/unit/sl.res
index 60cf2c2..9f4baaa 100644
--- a/src/cobalt/content/icu/icudt56l/unit/sl.res
+++ b/src/cobalt/content/icu/icudt56l/unit/sl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/sr.res b/src/cobalt/content/icu/icudt56l/unit/sr.res
index 0bc5ded..0844cb6 100644
--- a/src/cobalt/content/icu/icudt56l/unit/sr.res
+++ b/src/cobalt/content/icu/icudt56l/unit/sr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/sr_Latn.res b/src/cobalt/content/icu/icudt56l/unit/sr_Latn.res
index cf10bd7..cc14079 100644
--- a/src/cobalt/content/icu/icudt56l/unit/sr_Latn.res
+++ b/src/cobalt/content/icu/icudt56l/unit/sr_Latn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/sv.res b/src/cobalt/content/icu/icudt56l/unit/sv.res
index 0bdb977..1eb9f6e 100644
--- a/src/cobalt/content/icu/icudt56l/unit/sv.res
+++ b/src/cobalt/content/icu/icudt56l/unit/sv.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/sw.res b/src/cobalt/content/icu/icudt56l/unit/sw.res
index ad7d258..329130b 100644
--- a/src/cobalt/content/icu/icudt56l/unit/sw.res
+++ b/src/cobalt/content/icu/icudt56l/unit/sw.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/ta.res b/src/cobalt/content/icu/icudt56l/unit/ta.res
index 2560e71..391bc60 100644
--- a/src/cobalt/content/icu/icudt56l/unit/ta.res
+++ b/src/cobalt/content/icu/icudt56l/unit/ta.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/te.res b/src/cobalt/content/icu/icudt56l/unit/te.res
index 895a706..69b2219 100644
--- a/src/cobalt/content/icu/icudt56l/unit/te.res
+++ b/src/cobalt/content/icu/icudt56l/unit/te.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/th.res b/src/cobalt/content/icu/icudt56l/unit/th.res
index 0412ef9..bafea5b 100644
--- a/src/cobalt/content/icu/icudt56l/unit/th.res
+++ b/src/cobalt/content/icu/icudt56l/unit/th.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/tl.res b/src/cobalt/content/icu/icudt56l/unit/tl.res
index 200a065..10ce65b 100644
--- a/src/cobalt/content/icu/icudt56l/unit/tl.res
+++ b/src/cobalt/content/icu/icudt56l/unit/tl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/tr.res b/src/cobalt/content/icu/icudt56l/unit/tr.res
index bafbe4f..0b1ae28 100644
--- a/src/cobalt/content/icu/icudt56l/unit/tr.res
+++ b/src/cobalt/content/icu/icudt56l/unit/tr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/uk.res b/src/cobalt/content/icu/icudt56l/unit/uk.res
index 6bdacc9..bf04599 100644
--- a/src/cobalt/content/icu/icudt56l/unit/uk.res
+++ b/src/cobalt/content/icu/icudt56l/unit/uk.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/vi.res b/src/cobalt/content/icu/icudt56l/unit/vi.res
index 62b342c..0b084c6 100644
--- a/src/cobalt/content/icu/icudt56l/unit/vi.res
+++ b/src/cobalt/content/icu/icudt56l/unit/vi.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/zh.res b/src/cobalt/content/icu/icudt56l/unit/zh.res
index fb82379..0aca7fd 100644
--- a/src/cobalt/content/icu/icudt56l/unit/zh.res
+++ b/src/cobalt/content/icu/icudt56l/unit/zh.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/zh_CN.res b/src/cobalt/content/icu/icudt56l/unit/zh_CN.res
index 2143911..c2a8662 100644
--- a/src/cobalt/content/icu/icudt56l/unit/zh_CN.res
+++ b/src/cobalt/content/icu/icudt56l/unit/zh_CN.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/zh_HK.res b/src/cobalt/content/icu/icudt56l/unit/zh_HK.res
index 3ecb9af..afeade2 100644
--- a/src/cobalt/content/icu/icudt56l/unit/zh_HK.res
+++ b/src/cobalt/content/icu/icudt56l/unit/zh_HK.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/zh_Hans.res b/src/cobalt/content/icu/icudt56l/unit/zh_Hans.res
index 390df10..5f8b9d8 100644
--- a/src/cobalt/content/icu/icudt56l/unit/zh_Hans.res
+++ b/src/cobalt/content/icu/icudt56l/unit/zh_Hans.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/zh_Hans_CN.res b/src/cobalt/content/icu/icudt56l/unit/zh_Hans_CN.res
index 52171e6..0e5fcc0 100644
--- a/src/cobalt/content/icu/icudt56l/unit/zh_Hans_CN.res
+++ b/src/cobalt/content/icu/icudt56l/unit/zh_Hans_CN.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/zh_Hans_SG.res b/src/cobalt/content/icu/icudt56l/unit/zh_Hans_SG.res
index 60ebd39..893561a 100644
--- a/src/cobalt/content/icu/icudt56l/unit/zh_Hans_SG.res
+++ b/src/cobalt/content/icu/icudt56l/unit/zh_Hans_SG.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/zh_Hant.res b/src/cobalt/content/icu/icudt56l/unit/zh_Hant.res
index b38fda6..6480979 100644
--- a/src/cobalt/content/icu/icudt56l/unit/zh_Hant.res
+++ b/src/cobalt/content/icu/icudt56l/unit/zh_Hant.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/zh_Hant_HK.res b/src/cobalt/content/icu/icudt56l/unit/zh_Hant_HK.res
index 28757bc..885024c 100644
--- a/src/cobalt/content/icu/icudt56l/unit/zh_Hant_HK.res
+++ b/src/cobalt/content/icu/icudt56l/unit/zh_Hant_HK.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/zh_Hant_TW.res b/src/cobalt/content/icu/icudt56l/unit/zh_Hant_TW.res
index 52171e6..0e5fcc0 100644
--- a/src/cobalt/content/icu/icudt56l/unit/zh_Hant_TW.res
+++ b/src/cobalt/content/icu/icudt56l/unit/zh_Hant_TW.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/zh_SG.res b/src/cobalt/content/icu/icudt56l/unit/zh_SG.res
index 591fed6..6c93f05 100644
--- a/src/cobalt/content/icu/icudt56l/unit/zh_SG.res
+++ b/src/cobalt/content/icu/icudt56l/unit/zh_SG.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/zh_TW.res b/src/cobalt/content/icu/icudt56l/unit/zh_TW.res
index 9cfe4de..67a1f01 100644
--- a/src/cobalt/content/icu/icudt56l/unit/zh_TW.res
+++ b/src/cobalt/content/icu/icudt56l/unit/zh_TW.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ur.res b/src/cobalt/content/icu/icudt56l/ur.res
index 8ce943b..9b26777 100644
--- a/src/cobalt/content/icu/icudt56l/ur.res
+++ b/src/cobalt/content/icu/icudt56l/ur.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/uz.res b/src/cobalt/content/icu/icudt56l/uz.res
index c48eb7c..fcc6e35 100644
--- a/src/cobalt/content/icu/icudt56l/uz.res
+++ b/src/cobalt/content/icu/icudt56l/uz.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/vi.res b/src/cobalt/content/icu/icudt56l/vi.res
index fa0bc69..bd29812 100644
--- a/src/cobalt/content/icu/icudt56l/vi.res
+++ b/src/cobalt/content/icu/icudt56l/vi.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/wa.res b/src/cobalt/content/icu/icudt56l/wa.res
index b33131e..9823bb0 100644
--- a/src/cobalt/content/icu/icudt56l/wa.res
+++ b/src/cobalt/content/icu/icudt56l/wa.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/yo.res b/src/cobalt/content/icu/icudt56l/yo.res
index 9d6fcf8..ba09dca 100644
--- a/src/cobalt/content/icu/icudt56l/yo.res
+++ b/src/cobalt/content/icu/icudt56l/yo.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zh.res b/src/cobalt/content/icu/icudt56l/zh.res
index 8693ef0..1754876 100644
--- a/src/cobalt/content/icu/icudt56l/zh.res
+++ b/src/cobalt/content/icu/icudt56l/zh.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zh_CN.res b/src/cobalt/content/icu/icudt56l/zh_CN.res
index 6413b61..306efe4 100644
--- a/src/cobalt/content/icu/icudt56l/zh_CN.res
+++ b/src/cobalt/content/icu/icudt56l/zh_CN.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zh_HK.res b/src/cobalt/content/icu/icudt56l/zh_HK.res
index 90ec33d..d30e69d 100644
--- a/src/cobalt/content/icu/icudt56l/zh_HK.res
+++ b/src/cobalt/content/icu/icudt56l/zh_HK.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zh_Hans.res b/src/cobalt/content/icu/icudt56l/zh_Hans.res
index 008e4b7..d0ddba1 100644
--- a/src/cobalt/content/icu/icudt56l/zh_Hans.res
+++ b/src/cobalt/content/icu/icudt56l/zh_Hans.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zh_Hans_CN.res b/src/cobalt/content/icu/icudt56l/zh_Hans_CN.res
index 008e4b7..d0ddba1 100644
--- a/src/cobalt/content/icu/icudt56l/zh_Hans_CN.res
+++ b/src/cobalt/content/icu/icudt56l/zh_Hans_CN.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zh_Hans_SG.res b/src/cobalt/content/icu/icudt56l/zh_Hans_SG.res
index 7d56843..5290c33 100644
--- a/src/cobalt/content/icu/icudt56l/zh_Hans_SG.res
+++ b/src/cobalt/content/icu/icudt56l/zh_Hans_SG.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zh_Hant.res b/src/cobalt/content/icu/icudt56l/zh_Hant.res
index fa6cf1d..6fb1f94 100644
--- a/src/cobalt/content/icu/icudt56l/zh_Hant.res
+++ b/src/cobalt/content/icu/icudt56l/zh_Hant.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zh_Hant_HK.res b/src/cobalt/content/icu/icudt56l/zh_Hant_HK.res
index c824509..25384c6 100644
--- a/src/cobalt/content/icu/icudt56l/zh_Hant_HK.res
+++ b/src/cobalt/content/icu/icudt56l/zh_Hant_HK.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zh_Hant_TW.res b/src/cobalt/content/icu/icudt56l/zh_Hant_TW.res
index 008e4b7..d0ddba1 100644
--- a/src/cobalt/content/icu/icudt56l/zh_Hant_TW.res
+++ b/src/cobalt/content/icu/icudt56l/zh_Hant_TW.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zh_SG.res b/src/cobalt/content/icu/icudt56l/zh_SG.res
index b4a5fc2..f80c73c 100644
--- a/src/cobalt/content/icu/icudt56l/zh_SG.res
+++ b/src/cobalt/content/icu/icudt56l/zh_SG.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zh_TW.res b/src/cobalt/content/icu/icudt56l/zh_TW.res
index 5b8785d..dd21dc5 100644
--- a/src/cobalt/content/icu/icudt56l/zh_TW.res
+++ b/src/cobalt/content/icu/icudt56l/zh_TW.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/am.res b/src/cobalt/content/icu/icudt56l/zone/am.res
index 0ca203b..a615640 100644
--- a/src/cobalt/content/icu/icudt56l/zone/am.res
+++ b/src/cobalt/content/icu/icudt56l/zone/am.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/ar.res b/src/cobalt/content/icu/icudt56l/zone/ar.res
index 83694eb..24ab72f 100644
--- a/src/cobalt/content/icu/icudt56l/zone/ar.res
+++ b/src/cobalt/content/icu/icudt56l/zone/ar.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/bg.res b/src/cobalt/content/icu/icudt56l/zone/bg.res
index 9b8d165..4d07990 100644
--- a/src/cobalt/content/icu/icudt56l/zone/bg.res
+++ b/src/cobalt/content/icu/icudt56l/zone/bg.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/bn.res b/src/cobalt/content/icu/icudt56l/zone/bn.res
index d6a7c89..24a512e 100644
--- a/src/cobalt/content/icu/icudt56l/zone/bn.res
+++ b/src/cobalt/content/icu/icudt56l/zone/bn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/ca.res b/src/cobalt/content/icu/icudt56l/zone/ca.res
index fd8e6e8..475907e 100644
--- a/src/cobalt/content/icu/icudt56l/zone/ca.res
+++ b/src/cobalt/content/icu/icudt56l/zone/ca.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/cs.res b/src/cobalt/content/icu/icudt56l/zone/cs.res
index 57351b4..a177731 100644
--- a/src/cobalt/content/icu/icudt56l/zone/cs.res
+++ b/src/cobalt/content/icu/icudt56l/zone/cs.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/da.res b/src/cobalt/content/icu/icudt56l/zone/da.res
index 85deb82..00595e7 100644
--- a/src/cobalt/content/icu/icudt56l/zone/da.res
+++ b/src/cobalt/content/icu/icudt56l/zone/da.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/de.res b/src/cobalt/content/icu/icudt56l/zone/de.res
index 80b998d..1fe2466 100644
--- a/src/cobalt/content/icu/icudt56l/zone/de.res
+++ b/src/cobalt/content/icu/icudt56l/zone/de.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/el.res b/src/cobalt/content/icu/icudt56l/zone/el.res
index 10dcfc0..8211aa7 100644
--- a/src/cobalt/content/icu/icudt56l/zone/el.res
+++ b/src/cobalt/content/icu/icudt56l/zone/el.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/en.res b/src/cobalt/content/icu/icudt56l/zone/en.res
index cefa19c..16fd7d5 100644
--- a/src/cobalt/content/icu/icudt56l/zone/en.res
+++ b/src/cobalt/content/icu/icudt56l/zone/en.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/en_001.res b/src/cobalt/content/icu/icudt56l/zone/en_001.res
index 8dc348a..b630c21 100644
--- a/src/cobalt/content/icu/icudt56l/zone/en_001.res
+++ b/src/cobalt/content/icu/icudt56l/zone/en_001.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/en_150.res b/src/cobalt/content/icu/icudt56l/zone/en_150.res
index fc046d3..58ea37f 100644
--- a/src/cobalt/content/icu/icudt56l/zone/en_150.res
+++ b/src/cobalt/content/icu/icudt56l/zone/en_150.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/en_AU.res b/src/cobalt/content/icu/icudt56l/zone/en_AU.res
index 603245e..b44fc79 100644
--- a/src/cobalt/content/icu/icudt56l/zone/en_AU.res
+++ b/src/cobalt/content/icu/icudt56l/zone/en_AU.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/en_CA.res b/src/cobalt/content/icu/icudt56l/zone/en_CA.res
index a0ccf7c..92a64b5 100644
--- a/src/cobalt/content/icu/icudt56l/zone/en_CA.res
+++ b/src/cobalt/content/icu/icudt56l/zone/en_CA.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/en_GB.res b/src/cobalt/content/icu/icudt56l/zone/en_GB.res
index b2340ce..62b5cd5 100644
--- a/src/cobalt/content/icu/icudt56l/zone/en_GB.res
+++ b/src/cobalt/content/icu/icudt56l/zone/en_GB.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/en_IN.res b/src/cobalt/content/icu/icudt56l/zone/en_IN.res
index 4dae4de..8c37488 100644
--- a/src/cobalt/content/icu/icudt56l/zone/en_IN.res
+++ b/src/cobalt/content/icu/icudt56l/zone/en_IN.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/en_NZ.res b/src/cobalt/content/icu/icudt56l/zone/en_NZ.res
index 2cee9fe..472c851 100644
--- a/src/cobalt/content/icu/icudt56l/zone/en_NZ.res
+++ b/src/cobalt/content/icu/icudt56l/zone/en_NZ.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/en_ZA.res b/src/cobalt/content/icu/icudt56l/zone/en_ZA.res
index 0de2632..6061649 100644
--- a/src/cobalt/content/icu/icudt56l/zone/en_ZA.res
+++ b/src/cobalt/content/icu/icudt56l/zone/en_ZA.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/es.res b/src/cobalt/content/icu/icudt56l/zone/es.res
index a678c63..d0e1844 100644
--- a/src/cobalt/content/icu/icudt56l/zone/es.res
+++ b/src/cobalt/content/icu/icudt56l/zone/es.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/es_419.res b/src/cobalt/content/icu/icudt56l/zone/es_419.res
index a2ce67b..5361981 100644
--- a/src/cobalt/content/icu/icudt56l/zone/es_419.res
+++ b/src/cobalt/content/icu/icudt56l/zone/es_419.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/es_AR.res b/src/cobalt/content/icu/icudt56l/zone/es_AR.res
index 4ee9778..565e293 100644
--- a/src/cobalt/content/icu/icudt56l/zone/es_AR.res
+++ b/src/cobalt/content/icu/icudt56l/zone/es_AR.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/es_MX.res b/src/cobalt/content/icu/icudt56l/zone/es_MX.res
index 800004b..ba6a4f6 100644
--- a/src/cobalt/content/icu/icudt56l/zone/es_MX.res
+++ b/src/cobalt/content/icu/icudt56l/zone/es_MX.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/es_US.res b/src/cobalt/content/icu/icudt56l/zone/es_US.res
index de33554..53d28ff 100644
--- a/src/cobalt/content/icu/icudt56l/zone/es_US.res
+++ b/src/cobalt/content/icu/icudt56l/zone/es_US.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/et.res b/src/cobalt/content/icu/icudt56l/zone/et.res
index 9a5a38b..ef24a3b 100644
--- a/src/cobalt/content/icu/icudt56l/zone/et.res
+++ b/src/cobalt/content/icu/icudt56l/zone/et.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/fa.res b/src/cobalt/content/icu/icudt56l/zone/fa.res
index 0c46d63..5714cb5 100644
--- a/src/cobalt/content/icu/icudt56l/zone/fa.res
+++ b/src/cobalt/content/icu/icudt56l/zone/fa.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/fi.res b/src/cobalt/content/icu/icudt56l/zone/fi.res
index 18e01f3..6a5e620 100644
--- a/src/cobalt/content/icu/icudt56l/zone/fi.res
+++ b/src/cobalt/content/icu/icudt56l/zone/fi.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/fil.res b/src/cobalt/content/icu/icudt56l/zone/fil.res
index e9c8898..e129a7d 100644
--- a/src/cobalt/content/icu/icudt56l/zone/fil.res
+++ b/src/cobalt/content/icu/icudt56l/zone/fil.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/fr.res b/src/cobalt/content/icu/icudt56l/zone/fr.res
index 7b11d57..6478e5c 100644
--- a/src/cobalt/content/icu/icudt56l/zone/fr.res
+++ b/src/cobalt/content/icu/icudt56l/zone/fr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/fr_CA.res b/src/cobalt/content/icu/icudt56l/zone/fr_CA.res
index 4581455..bfc2acd 100644
--- a/src/cobalt/content/icu/icudt56l/zone/fr_CA.res
+++ b/src/cobalt/content/icu/icudt56l/zone/fr_CA.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/gu.res b/src/cobalt/content/icu/icudt56l/zone/gu.res
index 837e497..4b74231 100644
--- a/src/cobalt/content/icu/icudt56l/zone/gu.res
+++ b/src/cobalt/content/icu/icudt56l/zone/gu.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/he.res b/src/cobalt/content/icu/icudt56l/zone/he.res
index eea5121..c237cdf 100644
--- a/src/cobalt/content/icu/icudt56l/zone/he.res
+++ b/src/cobalt/content/icu/icudt56l/zone/he.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/hi.res b/src/cobalt/content/icu/icudt56l/zone/hi.res
index 890d0d6e..8da58fd 100644
--- a/src/cobalt/content/icu/icudt56l/zone/hi.res
+++ b/src/cobalt/content/icu/icudt56l/zone/hi.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/hr.res b/src/cobalt/content/icu/icudt56l/zone/hr.res
index 422cc73..4b68b94 100644
--- a/src/cobalt/content/icu/icudt56l/zone/hr.res
+++ b/src/cobalt/content/icu/icudt56l/zone/hr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/hu.res b/src/cobalt/content/icu/icudt56l/zone/hu.res
index bcf5a18..8b91cf2 100644
--- a/src/cobalt/content/icu/icudt56l/zone/hu.res
+++ b/src/cobalt/content/icu/icudt56l/zone/hu.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/id.res b/src/cobalt/content/icu/icudt56l/zone/id.res
index e59ebcc..6b944c0 100644
--- a/src/cobalt/content/icu/icudt56l/zone/id.res
+++ b/src/cobalt/content/icu/icudt56l/zone/id.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/in.res b/src/cobalt/content/icu/icudt56l/zone/in.res
index 6c9d80f..8ba67ac 100644
--- a/src/cobalt/content/icu/icudt56l/zone/in.res
+++ b/src/cobalt/content/icu/icudt56l/zone/in.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/it.res b/src/cobalt/content/icu/icudt56l/zone/it.res
index 3243f92..d8d1e1f 100644
--- a/src/cobalt/content/icu/icudt56l/zone/it.res
+++ b/src/cobalt/content/icu/icudt56l/zone/it.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/iw.res b/src/cobalt/content/icu/icudt56l/zone/iw.res
index 26c3f5d..3a64c91 100644
--- a/src/cobalt/content/icu/icudt56l/zone/iw.res
+++ b/src/cobalt/content/icu/icudt56l/zone/iw.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/ja.res b/src/cobalt/content/icu/icudt56l/zone/ja.res
index 81e07bf..ca870bb 100644
--- a/src/cobalt/content/icu/icudt56l/zone/ja.res
+++ b/src/cobalt/content/icu/icudt56l/zone/ja.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/kn.res b/src/cobalt/content/icu/icudt56l/zone/kn.res
index e1a67d9..0aa5fd5 100644
--- a/src/cobalt/content/icu/icudt56l/zone/kn.res
+++ b/src/cobalt/content/icu/icudt56l/zone/kn.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/ko.res b/src/cobalt/content/icu/icudt56l/zone/ko.res
index 2a13eef..e91d1f2 100644
--- a/src/cobalt/content/icu/icudt56l/zone/ko.res
+++ b/src/cobalt/content/icu/icudt56l/zone/ko.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/lt.res b/src/cobalt/content/icu/icudt56l/zone/lt.res
index c951cdf..c1fb729 100644
--- a/src/cobalt/content/icu/icudt56l/zone/lt.res
+++ b/src/cobalt/content/icu/icudt56l/zone/lt.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/lv.res b/src/cobalt/content/icu/icudt56l/zone/lv.res
index fbc0d3a..8187c0a 100644
--- a/src/cobalt/content/icu/icudt56l/zone/lv.res
+++ b/src/cobalt/content/icu/icudt56l/zone/lv.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/ml.res b/src/cobalt/content/icu/icudt56l/zone/ml.res
index 0bbb558..5e517c5 100644
--- a/src/cobalt/content/icu/icudt56l/zone/ml.res
+++ b/src/cobalt/content/icu/icudt56l/zone/ml.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/mr.res b/src/cobalt/content/icu/icudt56l/zone/mr.res
index c427585..f065500 100644
--- a/src/cobalt/content/icu/icudt56l/zone/mr.res
+++ b/src/cobalt/content/icu/icudt56l/zone/mr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/ms.res b/src/cobalt/content/icu/icudt56l/zone/ms.res
index 74c35f0..0681ef9c 100644
--- a/src/cobalt/content/icu/icudt56l/zone/ms.res
+++ b/src/cobalt/content/icu/icudt56l/zone/ms.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/nb.res b/src/cobalt/content/icu/icudt56l/zone/nb.res
index 8964a4c..fb69575 100644
--- a/src/cobalt/content/icu/icudt56l/zone/nb.res
+++ b/src/cobalt/content/icu/icudt56l/zone/nb.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/nl.res b/src/cobalt/content/icu/icudt56l/zone/nl.res
index e4fd809..a0817f6 100644
--- a/src/cobalt/content/icu/icudt56l/zone/nl.res
+++ b/src/cobalt/content/icu/icudt56l/zone/nl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/no.res b/src/cobalt/content/icu/icudt56l/zone/no.res
index d674a96..707257a 100644
--- a/src/cobalt/content/icu/icudt56l/zone/no.res
+++ b/src/cobalt/content/icu/icudt56l/zone/no.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/pl.res b/src/cobalt/content/icu/icudt56l/zone/pl.res
index 6b54d59..643202a 100644
--- a/src/cobalt/content/icu/icudt56l/zone/pl.res
+++ b/src/cobalt/content/icu/icudt56l/zone/pl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/pool.res b/src/cobalt/content/icu/icudt56l/zone/pool.res
index 20ff031..6be0d1a 100644
--- a/src/cobalt/content/icu/icudt56l/zone/pool.res
+++ b/src/cobalt/content/icu/icudt56l/zone/pool.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/pt.res b/src/cobalt/content/icu/icudt56l/zone/pt.res
index 5cc633e..c582c3c 100644
--- a/src/cobalt/content/icu/icudt56l/zone/pt.res
+++ b/src/cobalt/content/icu/icudt56l/zone/pt.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/pt_PT.res b/src/cobalt/content/icu/icudt56l/zone/pt_PT.res
index f935c23..c27e411 100644
--- a/src/cobalt/content/icu/icudt56l/zone/pt_PT.res
+++ b/src/cobalt/content/icu/icudt56l/zone/pt_PT.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/ro.res b/src/cobalt/content/icu/icudt56l/zone/ro.res
index 793b79d..602535c 100644
--- a/src/cobalt/content/icu/icudt56l/zone/ro.res
+++ b/src/cobalt/content/icu/icudt56l/zone/ro.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/root.res b/src/cobalt/content/icu/icudt56l/zone/root.res
index 4b5d6a5..ccf6129 100644
--- a/src/cobalt/content/icu/icudt56l/zone/root.res
+++ b/src/cobalt/content/icu/icudt56l/zone/root.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/ru.res b/src/cobalt/content/icu/icudt56l/zone/ru.res
index c1f7cc5..7640ffe 100644
--- a/src/cobalt/content/icu/icudt56l/zone/ru.res
+++ b/src/cobalt/content/icu/icudt56l/zone/ru.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/sk.res b/src/cobalt/content/icu/icudt56l/zone/sk.res
index 960272e..265d646 100644
--- a/src/cobalt/content/icu/icudt56l/zone/sk.res
+++ b/src/cobalt/content/icu/icudt56l/zone/sk.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/sl.res b/src/cobalt/content/icu/icudt56l/zone/sl.res
index 2b9d73b..f8b0996 100644
--- a/src/cobalt/content/icu/icudt56l/zone/sl.res
+++ b/src/cobalt/content/icu/icudt56l/zone/sl.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/sr.res b/src/cobalt/content/icu/icudt56l/zone/sr.res
index 04aafaf..1caa8c6 100644
--- a/src/cobalt/content/icu/icudt56l/zone/sr.res
+++ b/src/cobalt/content/icu/icudt56l/zone/sr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/sv.res b/src/cobalt/content/icu/icudt56l/zone/sv.res
index 6acfde0..ffc1ca7 100644
--- a/src/cobalt/content/icu/icudt56l/zone/sv.res
+++ b/src/cobalt/content/icu/icudt56l/zone/sv.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/sw.res b/src/cobalt/content/icu/icudt56l/zone/sw.res
index d29d17f..90e7f83 100644
--- a/src/cobalt/content/icu/icudt56l/zone/sw.res
+++ b/src/cobalt/content/icu/icudt56l/zone/sw.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/ta.res b/src/cobalt/content/icu/icudt56l/zone/ta.res
index 3dabd4b..14e7724 100644
--- a/src/cobalt/content/icu/icudt56l/zone/ta.res
+++ b/src/cobalt/content/icu/icudt56l/zone/ta.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/te.res b/src/cobalt/content/icu/icudt56l/zone/te.res
index 6964555..b31f348 100644
--- a/src/cobalt/content/icu/icudt56l/zone/te.res
+++ b/src/cobalt/content/icu/icudt56l/zone/te.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/th.res b/src/cobalt/content/icu/icudt56l/zone/th.res
index dc1cd79..7be82bf 100644
--- a/src/cobalt/content/icu/icudt56l/zone/th.res
+++ b/src/cobalt/content/icu/icudt56l/zone/th.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/tr.res b/src/cobalt/content/icu/icudt56l/zone/tr.res
index e9f0f1e..7672569 100644
--- a/src/cobalt/content/icu/icudt56l/zone/tr.res
+++ b/src/cobalt/content/icu/icudt56l/zone/tr.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/tzdbNames.res b/src/cobalt/content/icu/icudt56l/zone/tzdbNames.res
index 1e36cea..463ab0f 100644
--- a/src/cobalt/content/icu/icudt56l/zone/tzdbNames.res
+++ b/src/cobalt/content/icu/icudt56l/zone/tzdbNames.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/uk.res b/src/cobalt/content/icu/icudt56l/zone/uk.res
index e51f2e4..ca07a8f 100644
--- a/src/cobalt/content/icu/icudt56l/zone/uk.res
+++ b/src/cobalt/content/icu/icudt56l/zone/uk.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/vi.res b/src/cobalt/content/icu/icudt56l/zone/vi.res
index e1147c7..21162bc 100644
--- a/src/cobalt/content/icu/icudt56l/zone/vi.res
+++ b/src/cobalt/content/icu/icudt56l/zone/vi.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/zh.res b/src/cobalt/content/icu/icudt56l/zone/zh.res
index 1d14841..9a55369 100644
--- a/src/cobalt/content/icu/icudt56l/zone/zh.res
+++ b/src/cobalt/content/icu/icudt56l/zone/zh.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/zh_CN.res b/src/cobalt/content/icu/icudt56l/zone/zh_CN.res
index 73058b5..20d5db9 100644
--- a/src/cobalt/content/icu/icudt56l/zone/zh_CN.res
+++ b/src/cobalt/content/icu/icudt56l/zone/zh_CN.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/zh_HK.res b/src/cobalt/content/icu/icudt56l/zone/zh_HK.res
index 22b133b..7da02f8 100644
--- a/src/cobalt/content/icu/icudt56l/zone/zh_HK.res
+++ b/src/cobalt/content/icu/icudt56l/zone/zh_HK.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/zh_Hans.res b/src/cobalt/content/icu/icudt56l/zone/zh_Hans.res
index 750bf38..0b2c050 100644
--- a/src/cobalt/content/icu/icudt56l/zone/zh_Hans.res
+++ b/src/cobalt/content/icu/icudt56l/zone/zh_Hans.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/zh_Hans_CN.res b/src/cobalt/content/icu/icudt56l/zone/zh_Hans_CN.res
index c48febe..1de3818 100644
--- a/src/cobalt/content/icu/icudt56l/zone/zh_Hans_CN.res
+++ b/src/cobalt/content/icu/icudt56l/zone/zh_Hans_CN.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/zh_Hans_SG.res b/src/cobalt/content/icu/icudt56l/zone/zh_Hans_SG.res
index 2d2abc8..c9a5bb5 100644
--- a/src/cobalt/content/icu/icudt56l/zone/zh_Hans_SG.res
+++ b/src/cobalt/content/icu/icudt56l/zone/zh_Hans_SG.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/zh_Hant.res b/src/cobalt/content/icu/icudt56l/zone/zh_Hant.res
index adfd75b..07262fa 100644
--- a/src/cobalt/content/icu/icudt56l/zone/zh_Hant.res
+++ b/src/cobalt/content/icu/icudt56l/zone/zh_Hant.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/zh_Hant_HK.res b/src/cobalt/content/icu/icudt56l/zone/zh_Hant_HK.res
index 49d0732..14edaca 100644
--- a/src/cobalt/content/icu/icudt56l/zone/zh_Hant_HK.res
+++ b/src/cobalt/content/icu/icudt56l/zone/zh_Hant_HK.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/zh_Hant_TW.res b/src/cobalt/content/icu/icudt56l/zone/zh_Hant_TW.res
index c48febe..1de3818 100644
--- a/src/cobalt/content/icu/icudt56l/zone/zh_Hant_TW.res
+++ b/src/cobalt/content/icu/icudt56l/zone/zh_Hant_TW.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/zh_SG.res b/src/cobalt/content/icu/icudt56l/zone/zh_SG.res
index a92d327..bc7f82f 100644
--- a/src/cobalt/content/icu/icudt56l/zone/zh_SG.res
+++ b/src/cobalt/content/icu/icudt56l/zone/zh_SG.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/zh_TW.res b/src/cobalt/content/icu/icudt56l/zone/zh_TW.res
index 001b973..6f12dcb 100644
--- a/src/cobalt/content/icu/icudt56l/zone/zh_TW.res
+++ b/src/cobalt/content/icu/icudt56l/zone/zh_TW.res
Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zu.res b/src/cobalt/content/icu/icudt56l/zu.res
index ea22475..1b918d8 100644
--- a/src/cobalt/content/icu/icudt56l/zu.res
+++ b/src/cobalt/content/icu/icudt56l/zu.res
Binary files differ
diff --git a/src/cobalt/css_parser/grammar.y b/src/cobalt/css_parser/grammar.y
index 52f988e..63f869d 100644
--- a/src/cobalt/css_parser/grammar.y
+++ b/src/cobalt/css_parser/grammar.y
@@ -4304,8 +4304,12 @@
 
 // Specifies the minimum content height of boxes.
 //   https://www.w3.org/TR/CSS21/visudet.html#propdef-min-height
+//   https://www.w3.org/TR/css-sizing-3/#min-size-properties
 min_height_property_value:
-    positive_length_percent_property_value
+    kAutoToken maybe_whitespace {
+    $$ = AddRef(cssom::KeywordValue::GetAuto().get());
+  }
+  | positive_length_percent_property_value
   | common_values
   ;
 
@@ -5736,8 +5740,12 @@
 
 // Specifies the minimum content width of boxes.
 //   https://www.w3.org/TR/CSS2/visudet.html#propdef-min-width
+//   https://www.w3.org/TR/css-sizing-3/#min-size-properties
 min_width_property_value:
-    positive_length_percent_property_value
+    kAutoToken maybe_whitespace {
+    $$ = AddRef(cssom::KeywordValue::GetAuto().get());
+  }
+  | positive_length_percent_property_value
   | common_values
   ;
 
diff --git a/src/cobalt/css_parser/parser_test.cc b/src/cobalt/css_parser/parser_test.cc
index db63e85..fa1511c 100644
--- a/src/cobalt/css_parser/parser_test.cc
+++ b/src/cobalt/css_parser/parser_test.cc
@@ -6346,6 +6346,20 @@
   EXPECT_EQ(cssom::kPixelsUnit, min_height->unit());
 }
 
+TEST_F(ParserTest, ParsesMinHeightAuto) {
+  // 'auto' is also the initial value for min-height in CSS3. It is set to a
+  // length value first, to ensure that the property does not have the initial
+  // value for the test.
+  //   https://www.w3.org/TR/css-sizing-3/#min-size-properties
+  scoped_refptr<cssom::CSSDeclaredStyleData> style =
+      parser_.ParseStyleDeclarationList("min-height: 100px; min-height: auto;",
+                                        source_location_);
+
+  ASSERT_TRUE(style->IsDeclared(cssom::kMinHeightProperty));
+  EXPECT_EQ(cssom::KeywordValue::GetAuto(),
+            style->GetPropertyValue(cssom::kMinHeightProperty));
+}
+
 TEST_F(ParserTest, ParsesMinWidth) {
   scoped_refptr<cssom::CSSDeclaredStyleData> style =
       parser_.ParseStyleDeclarationList("min-width: 100px;", source_location_);
@@ -6359,6 +6373,20 @@
   EXPECT_EQ(cssom::kPixelsUnit, min_width->unit());
 }
 
+TEST_F(ParserTest, ParsesMinWidthAuto) {
+  // 'auto' is also the initial value for min-width in CSS3. It is set to a
+  // length value first, to ensure that the property does not have the initial
+  // value for the test.
+  //   https://www.w3.org/TR/css-sizing-3/#min-size-properties
+  scoped_refptr<cssom::CSSDeclaredStyleData> style =
+      parser_.ParseStyleDeclarationList("min-width: 100px; min-width: auto;",
+                                        source_location_);
+
+  ASSERT_TRUE(style->IsDeclared(cssom::kMinWidthProperty));
+  EXPECT_EQ(cssom::KeywordValue::GetAuto(),
+            style->GetPropertyValue(cssom::kMinWidthProperty));
+}
+
 TEST_F(ParserTest, ParsesOpacity) {
   scoped_refptr<cssom::CSSDeclaredStyleData> style =
       parser_.ParseStyleDeclarationList("opacity: 0.5;", source_location_);
diff --git a/src/cobalt/cssom/property_definitions.cc b/src/cobalt/cssom/property_definitions.cc
index f140fde..72d36ac 100644
--- a/src/cobalt/cssom/property_definitions.cc
+++ b/src/cobalt/cssom/property_definitions.cc
@@ -570,18 +570,18 @@
                         kImpactsBoxCrossReferencesNo, KeywordValue::GetNone());
 
   // https://www.w3.org/TR/CSS2/visudet.html#propdef-min-height
+  // https://www.w3.org/TR/css-sizing-3/#min-size-properties
   SetPropertyDefinition(kMinHeightProperty, "min-height", kInheritedNo,
                         kAnimatableNo, kImpactsChildComputedStyleNo,
                         kImpactsBoxGenerationNo, kImpactsBoxSizesYes,
-                        kImpactsBoxCrossReferencesNo,
-                        new LengthValue(0, kPixelsUnit));
+                        kImpactsBoxCrossReferencesNo, KeywordValue::GetAuto());
 
   // https://www.w3.org/TR/CSS2/visudet.html#propdef-min-width
+  // https://www.w3.org/TR/css-sizing-3/#min-size-properties
   SetPropertyDefinition(kMinWidthProperty, "min-width", kInheritedNo,
                         kAnimatableNo, kImpactsChildComputedStyleNo,
                         kImpactsBoxGenerationNo, kImpactsBoxSizesYes,
-                        kImpactsBoxCrossReferencesNo,
-                        new LengthValue(0, kPixelsUnit));
+                        kImpactsBoxCrossReferencesNo, KeywordValue::GetAuto());
 
   // https://www.w3.org/TR/css3-color/#opacity
   SetPropertyDefinition(kOpacityProperty, "opacity", kInheritedNo,
diff --git a/src/cobalt/debug/backend/content/css_agent.js b/src/cobalt/debug/backend/content/css_agent.js
index 7745a6c..e7747b6 100644
--- a/src/cobalt/debug/backend/content/css_agent.js
+++ b/src/cobalt/debug/backend/content/css_agent.js
@@ -131,13 +131,5 @@
   this.matchedCSSRules = _matchedRules(node);
 }
 
-// Polyfill Element.matches()
-// https://developer.mozilla.org/en-US/docs/Web/API/Element/matches
-Element.prototype.matches = Element.prototype.matches || function(s) {
-  var matches = document.querySelectorAll(s), i = matches.length;
-  while (--i >= 0 && matches.item(i) != this) {}
-  return i > -1;
-};
-
 // TODO: Pass debugBackend from C++ instead of getting it from the window.
 })(window.debugBackend);
diff --git a/src/cobalt/debug/backend/content/runtime_agent.js b/src/cobalt/debug/backend/content/runtime_agent.js
new file mode 100644
index 0000000..f426e65
--- /dev/null
+++ b/src/cobalt/debug/backend/content/runtime_agent.js
@@ -0,0 +1,473 @@
+// Copyright 2016 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// This implementation of the "Runtime" Devtools protocol domain is only used
+// for mozjs. When using V8, we use the built-in inspector backend which
+// implements this for us.
+
+(function(debugBackend) {
+
+// Attach methods to handle commands in the 'Runtime' devtools domain.
+// https://chromedevtools.github.io/devtools-protocol/1-3/Runtime
+var commands = debugBackend.Runtime = {};
+
+// Calls a function on a previously accessed RemoteObject with an argument list
+// and returns a new RemoteObject. Used extensively by devtools for
+// auto-completion. The new RemoteObject uses the same |objectGroup| as the
+// original object.
+// https://chromedevtools.github.io/devtools-protocol/1-3/Runtime#method-callFunctionOn
+commands.callFunctionOn = function(params) {
+  var result = {};
+  var value = null;
+  try {
+    eval('var f = ' + params.functionDeclaration);
+    var objectEntry = _objectStore[params.objectId];
+    var thisArg = objectEntry.object;
+    var objectGroup = objectEntry.objectGroup;
+    value = f.apply(thisArg, params.arguments);
+    result.wasThrown = false;
+  } catch(e) {
+    value = e;
+    result.exceptionDetails = e;
+    result.wasThrown = true;
+  }
+
+  result.result =
+      new devtools.RemoteObject(value, objectGroup, params.returnByValue);
+  return JSON.stringify(result);
+}
+
+// Evaluates a string and returns a RemoteObject.
+// https://chromedevtools.github.io/devtools-protocol/1-3/Runtime#method-evaluate
+commands.evaluate = function(params) {
+  var result = {};
+  var value = null;
+  try {
+    if (params.includeCommandLineAPI) {
+      _addCommandLineAPI();
+    }
+
+    // Use |eval| indirectly, to cause evaluation at global scope.
+    // This is so subsequent calls can access variables declared here, etc.
+    var geval = eval;
+    value = geval(params.expression);
+
+    // Store the last result if we're doing a "real" evaluation, not an
+    // auto-complete. Seems a little special case-y, but this is taken from
+    // Chrome's implementation, and looks like the only way to differentiate.
+    if (params.objectGroup == 'console') {
+      _lastResult = value;
+    }
+
+    result.wasThrown = false;
+  } catch(e) {
+    value = e;
+    result.exceptionDetails = e;
+    result.wasThrown = true;
+  }
+
+  // Create the RemoteObject corresponding to the result.
+  result.result =
+      new devtools.RemoteObject(value, params.objectGroup, params.returnByValue);
+
+  // Add the preview, if requested.
+  if (params.generatePreview) {
+    var preview = _generatePreview(value);
+    if (preview) {
+      result.result.preview = preview;
+    }
+  }
+
+  if (params.includeCommandLineAPI) {
+    _removeCommandLineAPI();
+  }
+
+  return JSON.stringify(result);
+}
+
+// Returns all let, const and class variables from global scope.
+// https://chromedevtools.github.io/devtools-protocol/1-3/Runtime#method-globalLexicalScopeNames
+commands.globalLexicalScopeNames = function(params) {
+  var result = [];
+  // TODO: Get the globals.
+  return JSON.stringify(result);
+}
+
+// Returns the properties of a previously accessed object as an array of
+// PropertyDescriptor objects.
+// The parameters specifify several options:
+// * ownProperties - only include immediate properties, not the prototype chain.
+// * accessorPropertiesOnly - only include accessor properties.
+// https://chromedevtools.github.io/devtools-protocol/1-3/Runtime#method-getProperties
+commands.getProperties = function(params) {
+  var result = {};
+  var properties = [];
+  try {
+    var objectEntry = _objectStore[params.objectId];
+    var object = objectEntry.object;
+    var objectGroup = objectEntry.objectGroup;
+    _addProperties(object, objectGroup, !params.ownProperties, properties);
+
+    if (params.accessorPropertiesOnly) {
+      properties = properties.filter(function(element, index, array) {
+          return (element.get || element.set);
+        });
+    }
+    result.wasThrown = false;
+  } catch(e) {
+    value = e;
+    result.exceptionDetails = e;
+    result.wasThrown = true;
+  }
+
+  result.result = properties;
+  return JSON.stringify(result);
+}
+
+// Releases our reference to a previously accessed object.
+// https://chromedevtools.github.io/devtools-protocol/1-3/Runtime#method-releaseObject
+commands.releaseObject = function(params) {
+  delete _objectStore[params.objectId];
+}
+
+// Releases our references to a group of previously accessed objects.
+// https://chromedevtools.github.io/devtools-protocol/1-3/Runtime#method-releaseObjectGroup
+commands.releaseObjectGroup = function(params) {
+  for (var objectId in _objectStore) {
+    var objectEntry = _objectStore[objectId];
+    if (objectEntry && objectEntry.objectGroup == params.objectGroup) {
+      delete _objectStore[objectId];
+    }
+  }
+}
+
+// Adds the properties of |object| to the |result| array as new
+// PropertyDescriptor objects. Some properties may be objects themselves,
+// in which case new RemoteObjects are created using the specified
+// |objectGroup|, which should be that of |object|.
+// If |includePrototype| is set, the function will be called recursively on
+// the prototype chain of the object.
+var _addProperties = function(object, objectGroup, includePrototype, result) {
+  var properties = Object.getOwnPropertyNames(object);
+  var foundProto = false;
+  for (var i = 0; i < properties.length; i++) {
+    var key = properties[i];
+    foundProto = foundProto || (key == '__proto__');
+
+    // If we can't find the property, and its name corresponds to a number,
+    // try it as an array index (integer instead of string).
+    if (object[key] == null) {
+      if (!isNaN(key)) {
+        key = parseInt(key);
+      } else {
+        continue;
+      }
+    }
+
+    var propertyDescriptor =
+        new devtools.PropertyDescriptor(object, objectGroup, key);
+    result.push(propertyDescriptor);
+  }
+
+  var proto = null;
+  try {
+    proto = Object.getPrototypeOf(object);
+  } catch (e) {}
+
+  if (includePrototype) {
+    // Recursively add the properties from the prototype chain.
+    if (proto) {
+      _addProperties(proto, objectGroup, includePrototype, result);
+    }
+  } else if (proto && !foundProto) {
+    // |getOwnPropertyNames| may not include the object prototype,
+    // so if that's the case, add it now. It's a deprecated name, but devtools
+    // still uses it.
+    var propertyDescriptor =
+        new devtools.PropertyDescriptor(object, objectGroup, '__proto__');
+    result.push(propertyDescriptor);
+  }
+}
+
+// Gets an object from the internal object store.
+var _getObject = function(objectId) {
+  return _objectStore[objectId].object;
+}
+
+// Adds an object to the internal object store and returns a unique id that can
+// be used to access it again.
+var _addObject = function(object, objectGroup) {
+  // If we've already added this object, then use the same objectId.
+  for (var objectId in _objectStore) {
+    var objectEntry = _objectStore[objectId];
+    if (objectEntry.object === object &&
+        objectEntry.objectGroup == objectGroup) {
+      return objectId;
+    }
+  }
+
+  var objectId = _nextObjectId.toString();
+  _nextObjectId += 1;
+  _objectStore[objectId] = {};
+  _objectStore[objectId].object = object;
+  _objectStore[objectId].objectGroup = objectGroup;
+  return objectId;
+}
+
+// Generates an object preview, which may be requested for the evaluate
+// command.
+var _generatePreview = function(object) {
+  if (!object || (typeof object != 'object')) {
+    return null;
+  } else {
+    return new devtools.ObjectPreview(object);
+  }
+}
+
+// Returns the subtype of an object, or null if the specified value is not an
+// object.
+var _getSubtype = function(object) {
+  if (typeof object == 'object') {
+    if (object instanceof Array) {
+      return 'array';
+    } else if (object instanceof Date) {
+      return 'date';
+    } else if (object instanceof Error) {
+      return 'error';
+    } else if (object instanceof Node) {
+      return 'node';
+    } else if (object instanceof RegExp) {
+      return 'regexp';
+    }
+  }
+  return null;
+}
+
+// Tries to get the classname of an object by following the prototype chain
+// and looking for a constructor.
+var _getClassName = function(object) {
+  try {
+    for (var obj = object; obj && !this.className;
+         obj = Object.getPrototypeOf(obj)) {
+      if (obj.constructor) {
+        return obj.constructor.name;
+      }
+    }
+  } catch(e) {}
+
+  return null;
+}
+
+// Namespace for constructors of types defined in the Devtools protocol.
+var devtools = {};
+
+// Creates a RemoteObject, which is the type used to return many values to
+// devtools. If |value| is an object, then is it inserted into |_objectStore|
+// and the |objectId| key used to access it is included in the RemoteObject. If
+// |value| is not an object, or |returnByValue| is true, then |value| is
+// directly included in the RemoteObject.
+devtools.RemoteObject = function(value, objectGroup, returnByValue) {
+  this.type = typeof value;
+
+  if (value == null) {
+    this.subtype == 'null';
+    this.value = null;
+    return;
+  }
+
+  if (this.type == 'object') {
+    this.objectId = _addObject(value, objectGroup);
+    this.subtype = _getSubtype(value);
+    this.className = _getClassName(value);
+  }
+
+  // Fill in the description field. Devtools will only display arrays correctly
+  // if their description follows a particular format. For other values, try to
+  // use the generic string conversion, and fall back to the className if that
+  // fails.
+  if (this.subtype == 'array') {
+    this.description = 'Array[' + value.length + ']';
+  } else {
+    try {
+      this.description = value.toString();
+    } catch(e) {
+      this.description = this.className;
+    }
+  }
+
+  if (returnByValue || this.type != 'object') {
+    this.value = value;
+  }
+}
+
+// Creates a PropertyDescriptor for |property| of |object|, which is the type
+// used to return object properties to devtools. Some properties may be objects,
+// in which case new RemoteObjects are created and inserted into |_objectStore|
+// using the specified |objectGroup|, which should be that of |object|.
+devtools.PropertyDescriptor = function(object, objectGroup, property) {
+  this.name = property.toString();
+  var descriptor = Object.getOwnPropertyDescriptor(object, property);
+  // Some Cobalt objects don't seem to support |getOwnPropertyDescriptor|,
+  // so we handle that case in the else clause below.
+  if (descriptor) {
+    this.configurable = descriptor.configurable;
+    this.enumerable = descriptor.enumerable;
+    if (descriptor.get) {
+      this.get = new devtools.RemoteObject(descriptor.get, objectGroup, false);
+    }
+    if (descriptor.set) {
+      this.set = new devtools.RemoteObject(descriptor.set, objectGroup, false);
+    }
+    if (descriptor.value != null) {
+      this.value =
+          new devtools.RemoteObject(descriptor.value, objectGroup, false);
+    }
+    this.writable = descriptor.writable;
+  } else if (object[property] != null) {
+    this.configurable = false;
+    this.enumerable = object.propertyIsEnumerable(property);
+    if (object.__lookupGetter__(property)) {
+      this.get = object.__lookupGetter__(property);
+    }
+    if (object.__lookupSetter__(property)) {
+      this.set = object.__lookupSetter__(property);
+    }
+    this.value =
+        new devtools.RemoteObject(object[property], objectGroup, false);
+  }
+}
+
+// Creates an ObjectPreview, the type to represent a preview of an object,
+// which may be requested by devtools in the evaluate command.
+devtools.ObjectPreview = function(value) {
+  this.type = typeof value;
+  this.subtype = _getSubtype(value);
+  this.lossless = true;
+  this.overflow = false;
+  this.properties = [];
+
+  // Use the className as the preview description. This matches Chrome.
+  this.description = _getClassName(value);
+
+  // If we have an array-like object, add the array items, or append the
+  // length to the description if there's too many.
+  if (value.length != null) {
+    var MAX_ARRAY_ITEMS = 99;
+    if (value.length <= MAX_ARRAY_ITEMS) {
+      for (var i = 0; i < value.length; i++) {
+        var property = new devtools.PropertyPreview(i, value[i]);
+        this.properties.push(property);
+        if (typeof value[i] == 'object') {
+          this.lossless = false;
+        }
+      }
+    } else {
+      this.description += '[' + value.length + ']';
+      this.lossless = false;
+      this.overflow = true;
+    }
+    return;
+  }
+
+  // Add object properties, up to a maximum.
+  var MAX_PROPERTIES = 5;
+  var numProperties = 0;
+  for (var name in value) {
+    if (value[name] != null) {
+      if (++numProperties > MAX_PROPERTIES) {
+        this.lossless = false;
+        this.overflow = true;
+        break;
+      }
+      if (typeof property == 'object') {
+        this.lossless = false;
+      }
+      var property = new devtools.PropertyPreview(name, value[name]);
+      this.properties.push(property);
+    }
+  }
+}
+
+// Creates a PropertyPreview, the type to represent a preview of a single
+// object property.
+devtools.PropertyPreview = function(name, value) {
+  this.name = name.toString();
+  this.type = typeof value;
+
+  try {
+    this.value = value.toString();
+  } catch(e) {}
+
+  if (this.type == 'object') {
+    this.subtype = _getSubtype(value);
+  }
+}
+
+// The object store used to reference objects by internally generated id.
+var _objectStore = {};
+var _nextObjectId = 0;
+
+// The last evaluated result.
+var _lastResult = null;
+
+// Values in the global scope that have been overridden by corresponding
+// members of the Command Line API for the duration of an evaluation. We use
+// this to restore the original values after the evaluation.
+var _globalOverrides = {};
+
+// Command Line API implementation.
+// This is a set of convenience variables/functions that are not present in
+// the global scope by default, but can be specified as available to the
+// Runtime.evaluate function by the includeCommandLineAPI parameter.
+// https://developers.google.com/web/tools/chrome-devtools/console/utilities
+var _commandLineAPI = {};
+
+_commandLineAPI.$_ = _lastResult;
+
+_commandLineAPI.$ = document.querySelector.bind(document);
+
+_commandLineAPI.$$ = document.querySelectorAll.bind(document);
+
+_commandLineAPI.keys = Object.keys;
+
+_commandLineAPI.values = function(object) {
+  var keys = Object.keys(object);
+  var result = [];
+  for (var i = 0; i < keys.length; i++) {
+    result.push(object[keys[i]]);
+  }
+  return result;
+}
+
+var _addCommandLineAPI = function() {
+  _commandLineAPI.$_ = _lastResult;
+  for (var property in _commandLineAPI) {
+    if (_commandLineAPI.hasOwnProperty(property)) {
+      _globalOverrides[property] = window[property];
+      window[property] = _commandLineAPI[property];
+    }
+  }
+}
+
+var _removeCommandLineAPI = function() {
+  for (var property in _globalOverrides) {
+    if (_globalOverrides.hasOwnProperty(property)) {
+      window[property] = _globalOverrides[property];
+      delete _globalOverrides[property];
+    }
+  }
+}
+
+// TODO: Pass debugBackend from C++ instead of getting it from the window.
+})(window.debugBackend);
diff --git a/src/cobalt/debug/backend/debug_module.cc b/src/cobalt/debug/backend/debug_module.cc
index 1b82307..e1849a9 100644
--- a/src/cobalt/debug/backend/debug_module.cc
+++ b/src/cobalt/debug/backend/debug_module.cc
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
 #include "cobalt/debug/backend/debug_module.h"
 
+#include <memory>
+
 #include "cobalt/debug/backend/render_layer.h"
 
 namespace cobalt {
@@ -24,6 +24,7 @@
 
 namespace {
 constexpr char kScriptDebuggerAgent[] = "ScriptDebuggerAgent";
+constexpr char kRuntimeAgent[] = "RuntimeAgent";
 constexpr char kConsoleAgent[] = "ConsoleAgent";
 constexpr char kLogAgent[] = "LogAgent";
 constexpr char kDomAgent[] = "DomAgent";
@@ -154,6 +155,10 @@
   // directly handle one or more protocol domains.
   script_debugger_agent_.reset(
       new ScriptDebuggerAgent(debug_dispatcher_.get(), script_debugger_.get()));
+  if (!script_debugger_agent_->IsSupportedDomain("Runtime")) {
+    runtime_agent_.reset(
+        new RuntimeAgent(debug_dispatcher_.get(), data.window));
+  }
   console_agent_.reset(new ConsoleAgent(debug_dispatcher_.get(), data.console));
   log_agent_.reset(new LogAgent(debug_dispatcher_.get()));
   dom_agent_.reset(
@@ -183,6 +188,9 @@
                                      : data.debugger_state->agents_state.get();
   script_debugger_agent_->Thaw(
       RemoveAgentState(kScriptDebuggerAgent, agents_state));
+  if (runtime_agent_) {
+    runtime_agent_->Thaw(RemoveAgentState(kRuntimeAgent, agents_state));
+  }
   console_agent_->Thaw(RemoveAgentState(kConsoleAgent, agents_state));
   log_agent_->Thaw(RemoveAgentState(kLogAgent, agents_state));
   dom_agent_->Thaw(RemoveAgentState(kDomAgent, agents_state));
@@ -207,6 +215,9 @@
   base::DictionaryValue* agents_state = debugger_state->agents_state.get();
   StoreAgentState(agents_state, kScriptDebuggerAgent,
                   script_debugger_agent_->Freeze());
+  if (runtime_agent_) {
+    StoreAgentState(agents_state, kRuntimeAgent, runtime_agent_->Freeze());
+  }
   StoreAgentState(agents_state, kConsoleAgent, console_agent_->Freeze());
   StoreAgentState(agents_state, kLogAgent, log_agent_->Freeze());
   StoreAgentState(agents_state, kDomAgent, dom_agent_->Freeze());
diff --git a/src/cobalt/debug/backend/debug_module.h b/src/cobalt/debug/backend/debug_module.h
index 6abfa5c..ccf942c 100644
--- a/src/cobalt/debug/backend/debug_module.h
+++ b/src/cobalt/debug/backend/debug_module.h
@@ -29,6 +29,7 @@
 #include "cobalt/debug/backend/log_agent.h"
 #include "cobalt/debug/backend/page_agent.h"
 #include "cobalt/debug/backend/render_overlay.h"
+#include "cobalt/debug/backend/runtime_agent.h"
 #include "cobalt/debug/backend/script_debugger_agent.h"
 #include "cobalt/debug/backend/tracing_agent.h"
 #include "cobalt/debug/json_object.h"
@@ -140,6 +141,7 @@
   std::unique_ptr<DOMAgent> dom_agent_;
   scoped_refptr<CSSAgent> css_agent_;
   std::unique_ptr<PageAgent> page_agent_;
+  std::unique_ptr<RuntimeAgent> runtime_agent_;
   std::unique_ptr<ScriptDebuggerAgent> script_debugger_agent_;
   std::unique_ptr<TracingAgent> tracing_agent_;
 };
diff --git a/src/cobalt/debug/backend/runtime_agent.cc b/src/cobalt/debug/backend/runtime_agent.cc
new file mode 100644
index 0000000..70c7acb
--- /dev/null
+++ b/src/cobalt/debug/backend/runtime_agent.cc
@@ -0,0 +1,90 @@
+// Copyright 2016 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "cobalt/debug/backend/runtime_agent.h"
+
+#include <string>
+
+#include "base/bind.h"
+
+namespace cobalt {
+namespace debug {
+namespace backend {
+
+namespace {
+// Definitions from the set specified here:
+// https://chromedevtools.github.io/devtools-protocol/tot/Runtime
+constexpr char kInspectorDomain[] = "Runtime";
+
+// File to load JavaScript runtime implementation from.
+constexpr char kScriptFile[] = "runtime_agent.js";
+}  // namespace
+
+RuntimeAgent::RuntimeAgent(DebugDispatcher* dispatcher, dom::Window* window)
+    : dispatcher_(dispatcher),
+      window_(window),
+      ALLOW_THIS_IN_INITIALIZER_LIST(commands_(this, kInspectorDomain)) {
+  DCHECK(dispatcher_);
+  if (!dispatcher_->RunScriptFile(kScriptFile)) {
+    DLOG(WARNING) << "Cannot execute Runtime initialization script.";
+  }
+
+  commands_["enable"] = &RuntimeAgent::Enable;
+  commands_["disable"] = &RuntimeAgent::Disable;
+  commands_["compileScript"] = &RuntimeAgent::CompileScript;
+}
+
+void RuntimeAgent::Thaw(JSONObject agent_state) {
+  dispatcher_->AddDomain(kInspectorDomain, commands_.Bind());
+  script_loaded_ = dispatcher_->RunScriptFile(kScriptFile);
+  DLOG_IF(ERROR, !script_loaded_) << "Failed to load " << kScriptFile;
+}
+
+JSONObject RuntimeAgent::Freeze() {
+  dispatcher_->RemoveDomain(kInspectorDomain);
+  return JSONObject();
+}
+
+void RuntimeAgent::Enable(const Command& command) {
+  if (!script_loaded_) {
+    command.SendErrorResponse(Command::kInternalError,
+                              "Cannot create Runtime inspector.");
+    return;
+  }
+
+  // Send an executionContextCreated event.
+  // https://chromedevtools.github.io/devtools-protocol/1-3/Runtime#event-executionContextCreated
+  JSONObject params(new base::DictionaryValue());
+  params->SetInteger("context.id", 1);
+  params->SetString("context.origin", window_->location()->origin());
+  params->SetString("context.name", "Cobalt");
+  params->SetBoolean("context.auxData.isDefault", true);
+  dispatcher_->SendEvent(
+      std::string(kInspectorDomain) + ".executionContextCreated", params);
+
+  command.SendResponse();
+}
+
+void RuntimeAgent::Disable(const Command& command) { command.SendResponse(); }
+
+void RuntimeAgent::CompileScript(const Command& command) {
+  // TODO: Parse the JS without eval-ing it... This is to support:
+  // a) Multi-line input from the devtools console
+  // b) https://developers.google.com/web/tools/chrome-devtools/snippets
+  command.SendResponse();
+}
+
+}  // namespace backend
+}  // namespace debug
+}  // namespace cobalt
diff --git a/src/cobalt/debug/backend/runtime_agent.h b/src/cobalt/debug/backend/runtime_agent.h
new file mode 100644
index 0000000..3be3f37
--- /dev/null
+++ b/src/cobalt/debug/backend/runtime_agent.h
@@ -0,0 +1,58 @@
+// Copyright 2016 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef COBALT_DEBUG_BACKEND_RUNTIME_AGENT_H_
+#define COBALT_DEBUG_BACKEND_RUNTIME_AGENT_H_
+
+#include "cobalt/debug/backend/command_map.h"
+#include "cobalt/debug/backend/debug_dispatcher.h"
+#include "cobalt/debug/command.h"
+#include "cobalt/debug/json_object.h"
+#include "cobalt/dom/window.h"
+
+namespace cobalt {
+namespace debug {
+namespace backend {
+
+// Implements a small part of the the "Runtime" inspector protocol domain with
+// just enough to support console input. When using the V8 JavaScript engine,
+// this class is not needed since the V8 inspector implements the Runtime domain
+// for us.
+class RuntimeAgent {
+ public:
+  RuntimeAgent(DebugDispatcher* dispatcher, dom::Window* window);
+
+  void Thaw(JSONObject agent_state);
+  JSONObject Freeze();
+
+ private:
+  void CompileScript(const Command& command);
+  void Disable(const Command& command);
+  void Enable(const Command& command);
+
+  DebugDispatcher* dispatcher_;
+  dom::Window* window_;
+
+  // Map of member functions implementing commands.
+  CommandMap<RuntimeAgent> commands_;
+
+  // Whether we successfully loaded the agent's JavaScript implementation.
+  bool script_loaded_ = false;
+};
+
+}  // namespace backend
+}  // namespace debug
+}  // namespace cobalt
+
+#endif  // COBALT_DEBUG_BACKEND_RUNTIME_AGENT_H_
diff --git a/src/cobalt/debug/debug.gyp b/src/cobalt/debug/debug.gyp
index c4d50ff..a59acd7 100644
--- a/src/cobalt/debug/debug.gyp
+++ b/src/cobalt/debug/debug.gyp
@@ -44,6 +44,8 @@
         'backend/render_layer.h',
         'backend/render_overlay.cc',
         'backend/render_overlay.h',
+        'backend/runtime_agent.cc',
+        'backend/runtime_agent.h',
         'backend/script_debugger_agent.cc',
         'backend/script_debugger_agent.h',
         'backend/tracing_agent.cc',
diff --git a/src/cobalt/doc/device_authentication.md b/src/cobalt/doc/device_authentication.md
new file mode 100644
index 0000000..d121237
--- /dev/null
+++ b/src/cobalt/doc/device_authentication.md
@@ -0,0 +1,47 @@
+# Device Authentication
+
+Starting in Cobalt 20, initial URL requests will now have query parameters
+appended to them signed by the platform's secret key, provided to them during
+the certification process.  The key must be stored in secure storage on the
+device.
+
+## Message
+
+When constructing the URL for the initial browse request, according to the
+logic in
+[cobalt/browser/device_authentication.cc](../browser/device_authentication.cc),
+it will fetch from the platform a "certification scope" string provided to
+the device during certification.  The certification scope will be queried
+by a call to `SbSystemGetProperty(kSbSystemPropertyCertificationScope, ...)`,
+which the platform is expected to implement.  Along with the current system
+time, this forms the message that must be signed by the device's secret key.
+
+## Signing
+
+The message defined above must be signed with the HMAC-SHA256 algorithm. The
+resulting digest (encoded as base64), alongside the unencrypted message
+contents, will be appended to the initial URL.
+
+Two choices exists for how platforms can expose the secret key to Cobalt.
+Cobalt will first attempt to have the platform sign the message, and if that
+functionality is not implemented Cobalt will query the platform for the secret
+key and sign the message itself.  If neither choice is implemented, then Cobalt
+will log a warning and not append anything to the URL.
+
+### Platform signing
+
+Cobalt will first attempt to use the `SbSystemSignWithCertificationSecretKey()`
+function to sign the message using the secret key.  This method is preferred
+since it enables implementations where the key exists only in secure hardware
+and never enters the system's main memory.  A reference implementation, which
+depends on BoringSSL exists at
+[starboard/linux/x64x11/internal/system_sign_with_certification_secret_key.cc](../../starboard/linux/x64x11/internal/system_sign_with_certification_secret_key.cc).
+
+### Cobalt signing
+
+If the function `SbSystemSignWithCertificationSecretKey()` is unimplemented (e.g. it returns `false`, as is done in
+[starboard/shared/stub/system_sign_with_certification_secret_key.cc](../../starboard/shared/stub/system_sign_with_certification_secret_key.cc)),
+then Cobalt will instead attempt to retrieve the secret key from the system by
+a call to
+`SbSystemGetProperty(kSbSystemPropertyBase64EncodedCertificationSecret, ...)`,
+and use it to produce the HMAC-SHA256 digest of the message itself.
diff --git a/src/cobalt/doc/performance_tuning.md b/src/cobalt/doc/performance_tuning.md
index 5a7abab..e6d9994 100644
--- a/src/cobalt/doc/performance_tuning.md
+++ b/src/cobalt/doc/performance_tuning.md
@@ -408,11 +408,12 @@
 1. The command line option, "--timed_trace=XX" will instruct Cobalt to trace
    upon startup, for XX seconds (e.g. "--timed_trace=25").  When completed,
    the output will be written to the file `timed_trace.json`.
-2. Using the debug console (hit CTRL+O on a keyboard once or twice), type in the
-   command "d.trace()" and hit enter.  Cobalt will begin a trace.  After
-   some time has passed (and presumably you have performed some actions), you
-   can open the debug console again and type "d.trace()" again to end the trace.
-   The trace output will be written to the file `triggered_trace.json`.
+2. Using the debug console (hit CTRL+O on a keyboard once or twice), type in
+   the command "h5vcc.traceEvent.start()" and hit enter.  Cobalt will begin a
+   trace.  After some time has passed (and presumably you have performed some
+   actions), you can open the debug console again and type
+   "h5vcc.traceEvent.stop()" again to end the trace.
+   The trace output will be written to the file `h5vcc_trace_event.json`.
 
 The directory the output files will be placed within is the directory that the
 Starboard function `SbSystemGetPath()` returns with a `path_id` of
diff --git a/src/cobalt/doc/web_debugging.md b/src/cobalt/doc/web_debugging.md
new file mode 100644
index 0000000..ca1d90d
--- /dev/null
+++ b/src/cobalt/doc/web_debugging.md
@@ -0,0 +1,176 @@
+# Cobalt Web Debugging
+
+## Overview
+
+Cobalt includes the [Chrome
+DevTools](https://developers.google.com/web/tools/chrome-devtools/) frontend for
+debugging web apps. It's available in the **20.lts.1+** and newer branches of
+Cobalt.
+
+Cobalt only supports a subset of what DevTools can do, but we make a point of
+hiding UI elements that don't work so everything you see in the UI should work.
+As we get more implemented in the backend the respective UI will be enabled in
+the frontend.
+
+The following panels are supported:
+
+*   **Elements** - view the DOM tree and CSS styles
+*   **Console** - JavaScript "command line" and logging output
+*   **Sources** - interactive JavaScript debugging
+*   **Performance** - profile JavaScript execution
+
+> Cobalt DevTools relies heavily on V8 for its backend implementation. When
+> Cobalt is built with MozJs only basic Elements and Console functionality is
+> supported, but the UI remains the same as when building with V8 and some
+> things don't work.
+
+## Using DevTools
+
+The DevTools frontend is loaded in Chrome from a small HTTP server built into
+**non-gold** Cobalt. Even though it looks mostly the same as Chrome's inspector
+(it's built from the same source code), Cobalt's DevTools is a separate app,
+and Cobalt is *not* a remote target that you can debug with Chrome's built-in
+debugger.
+
+After building and running Cobalt as usual, use Chrome on your desktop to load
+the start page from port 9222 on the target device where Cobalt is running.
+Click through to the only inspectable page shown on the start page.
+
+> If you have trouble connecting:
+> * Ensure you have an IP route from your desktop to the target device that
+>   allows traffic on the debugging port (default 9222).
+> * If both IPv4 andIPv6 networks are available, the debug server will prefer to
+>   bind to the IPv4 network interface.
+> * If you are running Cobalt locally on your desktop, then use your actual IP
+>   address (not localhost nor 127.0.0.1).
+
+If you're not sure what IP address to use, look in the terminal log output for a
+message telling you the URL of Cobalt's DevTools (which you may be able to open
+with a ctrl-click in many terminal programs):
+
+```
+---------------------------------
+ Connect to the web debugger at:
+ http://192.168.1.1:9222
+---------------------------------
+```
+
+### Wait for web debugger
+
+If you're debugging the initial page as it's loading you need use the
+`--wait_for_web_debugger` switch to tell Cobalt to wait until you attach
+DevTools before actually loading the initial URL:
+
+```
+out/linux-x64x11_devel/cobalt --wait_for_web_debugger --url="http://test.example.com"
+```
+
+When this switch is specified, Cobalt will appear to hang with just a black
+window until you load DevTools. In the terminal log output you'll see that
+Cobalt is waiting with message like:
+
+```
+-------------------------------------
+ Waiting for web debugger to connect
+-------------------------------------
+```
+
+If you're debugging a page in a series of redirects, you can specify a number to
+make Cobalt wait before loading the Nth page. If no number is specified with the
+switch, the default value is 1 to wait before the initial page load. For
+example:
+
+```
+out/linux-x64x11_devel/cobalt --wait_for_web_debugger=2 --url="http://test.example.com"
+```
+
+## Panels
+
+### Elements
+
+The Elements panel displays the DOM as a tree with expandable nodes to dig into
+it. The right side bar shows the CSS styles affecting the selected node in the
+DOM. The *Styles* tab shows matching rules, inherited rules, and inline style.
+The *Computed* tab shows the computed style for the selected node. The box model
+properties are shown graphically in both the *Styles* and *Computed* tabs.
+
+> Cobalt currently only supports a read-only view of the DOM and CSS.
+
+Chrome docs:
+
+*   https://developers.google.com/web/tools/chrome-devtools/dom/
+*   https://developers.google.com/web/tools/chrome-devtools/css/
+
+### Console
+
+Cobalt has two consoles:
+* Overlay console in Cobalt itself (shown with ctrl-O or F1).
+* Remote console shown in a connected DevTools session.
+
+Both console UIs show messages logged from JavaScript (with `console.log()`,
+etc.), and have a command line to evaluate arbitrary JavaScript in the context
+of the page being debugged.
+
+The overlay console also shows non-JavaScript logging from Cobalt itself, which
+is mostly interesting to Cobalt developers rather than web app developers.
+
+The console in DevTools is a richer UI that can show evaluated objects with an
+expander so you can dig in to their properties. Logging from JavaScript with
+`console.log()` can show objects and exceptions as well, in contrast to the
+text-only messages shown in the console overlay.
+
+> There may be some things (e.g.  timers) that still need to be hooked up to the
+> V8 backend, so please file a bug if something isn't working as expected.
+
+> When built with MozJs instead of V8, the functionality of the console is
+> limited to showing only text log messages.
+
+Chrome docs:
+
+*   https://developers.google.com/web/tools/chrome-devtools/console/
+
+### Sources
+
+Source-level JavaScript debugging can be done on the Sources panel. You can
+inspect sources, set breakpoints, see call stacks and scoped variables, add
+watch expressions, and all that good stuff.
+
+> Source debugging only works when Cobalt is built with V8.
+
+Chrome docs:
+
+*   https://developers.google.com/web/tools/chrome-devtools/javascript/
+
+### Performance
+
+The Performance panel allows you to record a profile of sampled call stacks
+while Cobalt is running your JavaScript code. The recorded profile is displayed
+in a flame chart showing the relationship and timing of function calls.
+
+> Performance profiling only works when Cobalt is built with V8, and the
+> platform implements the `SbThreadSampler` Starboard API.
+
+> The profiler can't currently identify which is the main thread, but you can
+> easily see it as the one with the most events.
+
+Chrome docs:
+
+*   https://developers.google.com/web/tools/chrome-devtools/evaluate-performance/
+
+## Tips
+
+*   Don't open Cobalt's console overlay before attaching the remote DevTools as
+    that can cause the latter not to work.
+
+*   You can make Cobalt reload the current page by pressing F5 in the Cobalt
+    window, or ctrl-R in the remote DevTools. This may be useful for debugging
+    startup code in the web app. It may also help in case some source file is
+    not appearing in the DevTools Sources panel.
+
+*   The DevTools frontend remembers your breakpoints, so if you need to restart
+    Cobalt completely you can just kill it with ctrl-C in the terminal where you
+    launched it and re-run it. Then click the *Reconnect DevTools* button shown
+    in the DevTools UI or refresh the page to reload the DevTools UI.
+
+*   You can use the `--remote_debugging_port` command line switch to specify a
+    remote debugging port other than the default 9222.
diff --git a/src/cobalt/dom/c_val_key_list.cc b/src/cobalt/dom/c_val_key_list.cc
deleted file mode 100644
index 859f662..0000000
--- a/src/cobalt/dom/c_val_key_list.cc
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2016 The Cobalt Authors. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "cobalt/dom/c_val_key_list.h"
-
-#include <algorithm>
-#include <iterator>
-
-namespace cobalt {
-namespace dom {
-
-CValKeyList::CValKeyList() {}
-
-base::Optional<std::string> CValKeyList::Item(uint32 item) {
-  if (item < keys_.size()) {
-    return keys_[item];
-  }
-  return base::nullopt;
-}
-
-uint32 CValKeyList::length() { return static_cast<uint32>(keys_.size()); }
-
-int32 CValKeyList::IndexOf(const std::string& key) {
-  auto iter = std::find(keys_.begin(), keys_.end(), key);
-  return iter == keys_.end()
-             ? -1
-             : static_cast<int32>(std::distance(keys_.begin(), iter));
-}
-
-void CValKeyList::AppendKey(const std::string& key) { keys_.push_back(key); }
-
-}  // namespace dom
-}  // namespace cobalt
diff --git a/src/cobalt/dom/c_val_key_list.h b/src/cobalt/dom/c_val_key_list.h
deleted file mode 100644
index 1eb3cbb..0000000
--- a/src/cobalt/dom/c_val_key_list.h
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright 2016 The Cobalt Authors. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#ifndef COBALT_DOM_C_VAL_KEY_LIST_H_
-#define COBALT_DOM_C_VAL_KEY_LIST_H_
-
-#include <string>
-#include <vector>
-
-#include "base/optional.h"
-#include "cobalt/script/wrappable.h"
-
-namespace cobalt {
-namespace dom {
-
-class CValKeyList : public script::Wrappable {
- public:
-  CValKeyList();
-
-  base::Optional<std::string> Item(uint32 item);
-  uint32 length();
-  int32 IndexOf(const std::string& key);
-
-  void AppendKey(const std::string& key);
-
-  DEFINE_WRAPPABLE_TYPE(CValKeyList);
-
- private:
-  std::vector<std::string> keys_;
-
-  DISALLOW_COPY_AND_ASSIGN(CValKeyList);
-};
-
-}  // namespace dom
-}  // namespace cobalt
-
-#endif  // COBALT_DOM_C_VAL_KEY_LIST_H_
diff --git a/src/cobalt/dom/c_val_view.cc b/src/cobalt/dom/c_val_view.cc
index 577eecf..37c08c1 100644
--- a/src/cobalt/dom/c_val_view.cc
+++ b/src/cobalt/dom/c_val_view.cc
@@ -14,23 +14,21 @@
 
 #include "cobalt/dom/c_val_view.h"
 
-#include <set>
+#include <algorithm>
 
 #include "cobalt/base/c_val.h"
+#include "cobalt/base/polymorphic_downcast.h"
+#include "cobalt/dom/dom_settings.h"
 
 namespace cobalt {
 namespace dom {
 
 CValView::CValView() {}
 
-scoped_refptr<CValKeyList> CValView::Keys() {
-  scoped_refptr<CValKeyList> key_list(new CValKeyList);
-  typedef std::set<std::string> CValKeySet;
-  CValKeySet key_set = base::CValManager::GetInstance()->GetOrderedCValNames();
-  for (CValKeySet::iterator key_iter = key_set.begin();
-       key_iter != key_set.end(); ++key_iter) {
-    key_list->AppendKey(*key_iter);
-  }
+script::Sequence<std::string> CValView::Keys() {
+  auto key_set = base::CValManager::GetInstance()->GetOrderedCValNames();
+  script::Sequence<std::string> key_list;
+  std::copy(key_set.begin(), key_set.end(), std::back_inserter(key_list));
   return key_list;
 }
 
diff --git a/src/cobalt/dom/c_val_view.h b/src/cobalt/dom/c_val_view.h
index cb1565b..50905ee 100644
--- a/src/cobalt/dom/c_val_view.h
+++ b/src/cobalt/dom/c_val_view.h
@@ -19,8 +19,8 @@
 
 #include "base/memory/ref_counted.h"
 #include "base/optional.h"
-#include "cobalt/dom/c_val_key_list.h"
 #include "cobalt/script/wrappable.h"
+#include "cobalt/script/sequence.h"
 
 namespace cobalt {
 namespace dom {
@@ -29,7 +29,7 @@
  public:
   CValView();
 
-  scoped_refptr<CValKeyList> Keys();
+  script::Sequence<std::string> Keys();
   base::Optional<std::string> GetValue(const std::string& name);
   std::string GetPrettyValue(const std::string& name);
 
diff --git a/src/cobalt/dom/c_val_view.idl b/src/cobalt/dom/c_val_view.idl
index dddb584..7dbcbc2 100644
--- a/src/cobalt/dom/c_val_view.idl
+++ b/src/cobalt/dom/c_val_view.idl
@@ -14,7 +14,7 @@
 
 // This is a non-standard API, used to access Cobalt's CVal system.
 interface CValView {
-  [NewObject] CValKeyList keys();
+  [NewObject] sequence<DOMString> keys();
   DOMString? getValue(DOMString name);
   DOMString getPrettyValue(DOMString name);
 };
diff --git a/src/cobalt/dom/document.cc b/src/cobalt/dom/document.cc
index 09f158f..f14bfa4 100644
--- a/src/cobalt/dom/document.cc
+++ b/src/cobalt/dom/document.cc
@@ -927,7 +927,7 @@
 
     scoped_refptr<HTMLHtmlElement> current_html = html();
     if (current_html) {
-      current_html->ClearRuleMatchingStateOnElementAndDescendants();
+      current_html->ClearRuleMatchingStateOnElementAndSiblingsAndDescendants();
     }
 
     is_selector_tree_dirty_ = false;
diff --git a/src/cobalt/dom/dom.gyp b/src/cobalt/dom/dom.gyp
index f20646d..569d9eb 100644
--- a/src/cobalt/dom/dom.gyp
+++ b/src/cobalt/dom/dom.gyp
@@ -39,8 +39,6 @@
         'blob_property_bag.h',
         'buffer_source.cc',
         'buffer_source.h',
-        'c_val_key_list.cc',
-        'c_val_key_list.h',
         'c_val_view.cc',
         'c_val_view.h',
         'camera_3d.cc',
diff --git a/src/cobalt/dom/element.cc b/src/cobalt/dom/element.cc
index 04aff96..2c576e1 100644
--- a/src/cobalt/dom/element.cc
+++ b/src/cobalt/dom/element.cc
@@ -32,8 +32,10 @@
 #include "cobalt/dom/html_element_context.h"
 #include "cobalt/dom/mutation_reporter.h"
 #include "cobalt/dom/named_node_map.h"
+#include "cobalt/dom/node.h"
 #include "cobalt/dom/parser.h"
 #include "cobalt/dom/pointer_state.h"
+#include "cobalt/dom/rule_matching.h"
 #include "cobalt/dom/serializer.h"
 #include "cobalt/dom/text.h"
 #include "cobalt/math/rect_f.h"
@@ -106,6 +108,36 @@
   return HasAttribute(name);
 }
 
+bool Element::Matches(const std::string& selectors,
+                             script::ExceptionState* exception_state) {
+  TRACK_MEMORY_SCOPE("DOM");
+  // Referenced from:
+  // https://dom.spec.whatwg.org/#dom-element-matches
+
+  // 1. Let s be the result of parse a selector from selectors.
+  cssom::CSSParser* css_parser =
+      this->node_document()->html_element_context()->css_parser();
+  scoped_refptr<cssom::CSSRule> css_rule =
+      css_parser->ParseRule(selectors + " {}", this->GetInlineSourceLocation());
+
+  // 2. If s is failure, throw a "SyntaxError" DOMException.
+  if (!css_rule) {
+    DOMException::Raise(dom::DOMException::kSyntaxErr, exception_state);
+    return false;
+  }
+  scoped_refptr<cssom::CSSStyleRule> css_style_rule =
+      css_rule->AsCSSStyleRule();
+  if (!css_style_rule) {
+    DOMException::Raise(dom::DOMException::kSyntaxErr, exception_state);
+    return false;
+  }
+
+  // 3. Return true if the result of match a selector against an element,
+  //    using s, element, and :scope element context object, returns success,
+  //    and false otherwise.
+  return MatchRuleAndElement(css_style_rule, this);
+}
+
 scoped_refptr<NamedNodeMap> Element::attributes() {
   TRACK_MEMORY_SCOPE("DOM");
   scoped_refptr<NamedNodeMap> named_node_map = named_node_map_.get();
diff --git a/src/cobalt/dom/element.h b/src/cobalt/dom/element.h
index d37f9bc..a0c50e2 100644
--- a/src/cobalt/dom/element.h
+++ b/src/cobalt/dom/element.h
@@ -99,6 +99,7 @@
                                              const std::string& name) const;
   bool HasAttributeNS(const std::string& namespace_uri,
                       const std::string& name) const;
+  bool Matches(const std::string& selectors,script::ExceptionState* exception_state);
 
   scoped_refptr<HTMLCollection> GetElementsByTagName(
       const std::string& local_name) const;
diff --git a/src/cobalt/dom/element.idl b/src/cobalt/dom/element.idl
index f6a0ca4..af71ed6 100644
--- a/src/cobalt/dom/element.idl
+++ b/src/cobalt/dom/element.idl
@@ -29,6 +29,7 @@
   boolean hasAttribute(DOMString name);
   boolean hasAttributeNS(DOMString namespace_uri, DOMString localName);
   DOMString? getAttributeNS(DOMString namespace_uri, DOMString name);
+  [RaisesException] boolean matches(DOMString selectors);
   HTMLCollection getElementsByTagName(DOMString localName);
   HTMLCollection getElementsByClassName(DOMString classNames);
 };
diff --git a/src/cobalt/dom/element_intersection_observer_module.cc b/src/cobalt/dom/element_intersection_observer_module.cc
index 01fb8a3..d7ce51b 100644
--- a/src/cobalt/dom/element_intersection_observer_module.cc
+++ b/src/cobalt/dom/element_intersection_observer_module.cc
@@ -14,6 +14,8 @@
 
 #include "cobalt/dom/element_intersection_observer_module.h"
 
+#include <algorithm>
+
 #include "cobalt/dom/document.h"
 #include "cobalt/dom/dom_rect_read_only.h"
 #include "cobalt/dom/element.h"
@@ -29,11 +31,10 @@
 
 void ElementIntersectionObserverModule::RegisterIntersectionObserverForRoot(
     IntersectionObserver* observer) {
-  for (auto it = root_registered_intersection_observers_.begin();
-       it != root_registered_intersection_observers_.end(); ++it) {
-    if (*it == observer) {
-      return;
-    }
+  auto it = std::find(root_registered_intersection_observers_.begin(),
+                      root_registered_intersection_observers_.end(), observer);
+  if (it != root_registered_intersection_observers_.end()) {
+    return;
   }
   root_registered_intersection_observers_.push_back(
       base::WrapRefCounted(observer));
@@ -50,13 +51,12 @@
 
 void ElementIntersectionObserverModule::UnregisterIntersectionObserverForRoot(
     IntersectionObserver* observer) {
-  for (auto it = root_registered_intersection_observers_.begin();
-       it != root_registered_intersection_observers_.end(); ++it) {
-    if (*it == observer) {
-      root_registered_intersection_observers_.erase(it);
-      InvalidateLayoutBoxesForElement();
-      return;
-    }
+  auto it = std::find(root_registered_intersection_observers_.begin(),
+                      root_registered_intersection_observers_.end(), observer);
+  if (it != root_registered_intersection_observers_.end()) {
+    root_registered_intersection_observers_.erase(it);
+    InvalidateLayoutBoxesForElement();
+    return;
   }
   NOTREACHED()
       << "Did not find an intersection observer to unregister for the root.";
@@ -64,11 +64,11 @@
 
 void ElementIntersectionObserverModule::RegisterIntersectionObserverForTarget(
     IntersectionObserver* observer) {
-  for (auto it = target_registered_intersection_observers_.begin();
-       it != target_registered_intersection_observers_.end(); ++it) {
-    if (*it == observer) {
-      return;
-    }
+  auto it =
+      std::find(target_registered_intersection_observers_.begin(),
+                target_registered_intersection_observers_.end(), observer);
+  if (it != target_registered_intersection_observers_.end()) {
+    return;
   }
   target_registered_intersection_observers_.push_back(
       base::WrapRefCounted(observer));
@@ -79,14 +79,14 @@
 
 void ElementIntersectionObserverModule::UnregisterIntersectionObserverForTarget(
     IntersectionObserver* observer) {
-  for (auto it = target_registered_intersection_observers_.begin();
-       it != target_registered_intersection_observers_.end(); ++it) {
-    if (*it == observer) {
-      target_registered_intersection_observers_.erase(it);
-      RemoveLayoutTargetForObserver(observer);
-      InvalidateLayoutBoxesForElement();
-      return;
-    }
+  auto it =
+      std::find(target_registered_intersection_observers_.begin(),
+                target_registered_intersection_observers_.end(), observer);
+  if (it != target_registered_intersection_observers_.end()) {
+    target_registered_intersection_observers_.erase(it);
+    RemoveLayoutTargetForObserver(observer);
+    InvalidateLayoutBoxesForElement();
+    return;
   }
   NOTREACHED()
       << "Did not find an intersection observer to unregister for the target.";
diff --git a/src/cobalt/dom/eme/media_key_session.cc b/src/cobalt/dom/eme/media_key_session.cc
index f20e528..8cf2253 100644
--- a/src/cobalt/dom/eme/media_key_session.cc
+++ b/src/cobalt/dom/eme/media_key_session.cc
@@ -41,10 +41,8 @@
     : ALLOW_THIS_IN_INITIALIZER_LIST(event_queue_(this)),
       drm_system_(drm_system),
       drm_system_session_(drm_system->CreateSession(
-#if SB_HAS(DRM_KEY_STATUSES)
           base::Bind(&MediaKeySession::OnSessionUpdateKeyStatuses,
                      base::AsWeakPtr(this))
-#endif  // SB_HAS(DRM_KEY_STATUSES)
 #if SB_HAS(DRM_SESSION_CLOSED)
               ,
           base::Bind(&MediaKeySession::OnSessionClosed,
diff --git a/src/cobalt/dom/html_element.cc b/src/cobalt/dom/html_element.cc
index 636ef72..c52faae8 100644
--- a/src/cobalt/dom/html_element.cc
+++ b/src/cobalt/dom/html_element.cc
@@ -910,6 +910,24 @@
   }
 }
 
+void HTMLElement::ClearRuleMatchingStateOnElementAndSiblingsAndDescendants() {
+  HTMLElement::ClearRuleMatchingStateOnElementAndDescendants();
+  for (Element* element = previous_element_sibling(); element;
+       element = element->previous_element_sibling()) {
+    HTMLElement* html_element = element->AsHTMLElement();
+    if (html_element) {
+      html_element->ClearRuleMatchingStateOnElementAndDescendants();
+    }
+  }
+  for (Element* element = next_element_sibling(); element;
+       element = element->next_element_sibling()) {
+    HTMLElement* html_element = element->AsHTMLElement();
+    if (html_element) {
+      html_element->ClearRuleMatchingStateOnElementAndDescendants();
+    }
+  }
+}
+
 void HTMLElement::InvalidateMatchingRulesRecursively() {
   InvalidateMatchingRulesRecursivelyInternal(true /*is_initial_element*/);
 }
@@ -1327,6 +1345,13 @@
 
   // Set the focus item for the UI navigation system.
   if (ui_nav_item_ && !ui_nav_item_->IsContainer()) {
+    // Only navigation items attached to the root container are interactable.
+    // If the item is not registered with a container, then force a layout to
+    // connect items to their containers and eventually to the root container.
+    if (!ui_nav_item_->GetContainerItem()) {
+      // UI navigation items are updated as part of generating the render tree.
+      node_document()->DoSynchronousLayoutAndGetRenderTree();
+    }
     ui_nav_item_->Focus();
   }
 }
diff --git a/src/cobalt/dom/html_element.h b/src/cobalt/dom/html_element.h
index abb2f2e..5cf5a48 100644
--- a/src/cobalt/dom/html_element.h
+++ b/src/cobalt/dom/html_element.h
@@ -233,6 +233,7 @@
   void ClearRuleMatchingStateOnElementAndAncestors(
       bool invalidate_tree_matching_rules);
   void ClearRuleMatchingStateOnElementAndDescendants();
+  void ClearRuleMatchingStateOnElementAndSiblingsAndDescendants();
 
   // Returns the cached matching rules of this element.
   cssom::RulesWithCascadePrecedence* matching_rules() {
diff --git a/src/cobalt/dom/rule_matching.cc b/src/cobalt/dom/rule_matching.cc
index b38802c..c58f6e6 100644
--- a/src/cobalt/dom/rule_matching.cc
+++ b/src/cobalt/dom/rule_matching.cc
@@ -356,18 +356,6 @@
   return selector_matcher.element();
 }
 
-bool MatchRuleAndElement(cssom::CSSStyleRule* rule, Element* element) {
-  for (cssom::Selectors::const_iterator selector_iterator =
-           rule->selectors().begin();
-       selector_iterator != rule->selectors().end(); ++selector_iterator) {
-    DCHECK(*selector_iterator);
-    if (MatchSelectorAndElement(selector_iterator->get(), element, true)) {
-      return true;
-    }
-  }
-  return false;
-}
-
 void GatherCandidateNodesFromSelectorNodesMap(
     cssom::SimpleSelectorType simple_selector_type,
     cssom::CombinatorType combinator_type,
@@ -960,6 +948,18 @@
   return NULL;
 }
 
+bool MatchRuleAndElement(cssom::CSSStyleRule* rule, Element* element) {
+  for (cssom::Selectors::const_iterator selector_iterator =
+           rule->selectors().begin();
+       selector_iterator != rule->selectors().end(); ++selector_iterator) {
+    DCHECK(*selector_iterator);
+    if (MatchSelectorAndElement(selector_iterator->get(), element, true)) {
+      return true;
+    }
+  }
+  return false;
+}
+
 scoped_refptr<NodeList> QuerySelectorAll(Node* node,
                                          const std::string& selectors,
                                          cssom::CSSParser* css_parser) {
diff --git a/src/cobalt/dom/rule_matching.h b/src/cobalt/dom/rule_matching.h
index 4b53a6b..b473c27 100644
--- a/src/cobalt/dom/rule_matching.h
+++ b/src/cobalt/dom/rule_matching.h
@@ -19,6 +19,7 @@
 
 #include "base/memory/ref_counted.h"
 #include "cobalt/cssom/css_parser.h"
+#include "cobalt/cssom/css_style_rule.h"
 
 namespace cobalt {
 namespace dom {
@@ -48,6 +49,9 @@
                                          const std::string& selectors,
                                          cssom::CSSParser* css_parser);
 
+// Returns true  if any of the selectors in the rule matches the given element.
+bool MatchRuleAndElement(cssom::CSSStyleRule* rule, Element* element);
+
 }  // namespace dom
 }  // namespace cobalt
 
diff --git a/src/cobalt/dom/rule_matching_test.cc b/src/cobalt/dom/rule_matching_test.cc
index 84a5a88..18531c3 100644
--- a/src/cobalt/dom/rule_matching_test.cc
+++ b/src/cobalt/dom/rule_matching_test.cc
@@ -35,12 +35,17 @@
 #include "cobalt/dom/testing/stub_window.h"
 #include "cobalt/dom_parser/parser.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "cobalt/script/script_exception.h"
+#include "cobalt/script/testing/mock_exception_state.h"
 
 using cobalt::cssom::ViewportSize;
 
 namespace cobalt {
 namespace dom {
 
+using script::testing::MockExceptionState;
+using ::testing::StrictMock;
+
 class RuleMatchingTest : public ::testing::Test {
  protected:
   RuleMatchingTest()
@@ -776,6 +781,13 @@
   EXPECT_EQ(0, node_list->length());
 }
 
+TEST_F(RuleMatchingTest, ElementMatches) {
+  scoped_refptr<Element> root = new Element(document_, base::Token("root"));
+  StrictMock<MockExceptionState> exception_state;
+  EXPECT_TRUE(root->Matches("root", &exception_state));
+  EXPECT_FALSE(root->Matches("r", &exception_state));
+}
+
 TEST_F(RuleMatchingTest, StyleElementRemoval) {
   head_->set_inner_html("<style>* {}</style>");
   body_->set_inner_html("<div/>");
diff --git a/src/cobalt/h5vcc/h5vcc.cc b/src/cobalt/h5vcc/h5vcc.cc
index 701d785..5ba9959 100644
--- a/src/cobalt/h5vcc/h5vcc.cc
+++ b/src/cobalt/h5vcc/h5vcc.cc
@@ -33,7 +33,6 @@
 #if defined(COBALT_ENABLE_SSO)
   sso_ = new H5vccSso();
 #endif
-  storage_ = new H5vccStorage(settings.network_module);
   system_ = new H5vccSystem();
   trace_event_ = new H5vccTraceEvent();
 }
@@ -47,7 +46,6 @@
   tracer->Trace(runtime_);
   tracer->Trace(settings_);
   tracer->Trace(sso_);
-  tracer->Trace(storage_);
   tracer->Trace(system_);
   tracer->Trace(trace_event_);
 }
diff --git a/src/cobalt/h5vcc/h5vcc.gyp b/src/cobalt/h5vcc/h5vcc.gyp
index 18a74fe..3378152 100644
--- a/src/cobalt/h5vcc/h5vcc.gyp
+++ b/src/cobalt/h5vcc/h5vcc.gyp
@@ -48,8 +48,6 @@
         'h5vcc_runtime_event_target.h',
         'h5vcc_settings.cc',
         'h5vcc_settings.h',
-        'h5vcc_storage.cc',
-        'h5vcc_storage.h',
         'h5vcc_system.cc',
         'h5vcc_system.h',
         'h5vcc_trace_event.cc',
diff --git a/src/cobalt/h5vcc/h5vcc.h b/src/cobalt/h5vcc/h5vcc.h
index d87120f..210f29e 100644
--- a/src/cobalt/h5vcc/h5vcc.h
+++ b/src/cobalt/h5vcc/h5vcc.h
@@ -28,7 +28,6 @@
 #include "cobalt/h5vcc/h5vcc_runtime.h"
 #include "cobalt/h5vcc/h5vcc_settings.h"
 #include "cobalt/h5vcc/h5vcc_sso.h"
-#include "cobalt/h5vcc/h5vcc_storage.h"
 #include "cobalt/h5vcc/h5vcc_system.h"
 #include "cobalt/h5vcc/h5vcc_trace_event.h"
 #include "cobalt/script/wrappable.h"
@@ -69,7 +68,6 @@
 #if defined(COBALT_ENABLE_SSO)
   const scoped_refptr<H5vccSso>& sso() const { return sso_; }
 #endif
-  const scoped_refptr<H5vccStorage>& storage() const { return storage_; }
   const scoped_refptr<H5vccSystem>& system() const { return system_; }
   const scoped_refptr<H5vccTraceEvent>& trace_event() const {
     return trace_event_;
@@ -87,7 +85,6 @@
   scoped_refptr<H5vccRuntime> runtime_;
   scoped_refptr<H5vccSettings> settings_;
   scoped_refptr<H5vccSso> sso_;
-  scoped_refptr<H5vccStorage> storage_;
   scoped_refptr<H5vccSystem> system_;
   scoped_refptr<H5vccTraceEvent> trace_event_;
 
diff --git a/src/cobalt/h5vcc/h5vcc.idl b/src/cobalt/h5vcc/h5vcc.idl
index 5155763..ed7818d 100644
--- a/src/cobalt/h5vcc/h5vcc.idl
+++ b/src/cobalt/h5vcc/h5vcc.idl
@@ -18,9 +18,9 @@
 // APIs which allow clients to call non-standard native functions that we
 // expose.
 //
-// For example we provide a h5vcc.storage.ClearCookies(), which can empty the
-// cookie jar in response to the user's request. Other H5vcc modules expose
-// audio capabilities about the platform, or run an in-app DIAL server.
+// For example we provide a h5vcc.accessibility.textToSpeech, which tells
+// whether the platform supports text-to-speech capability. Other H5vcc
+// modules can run an in-app DIAL server or expose availables CVals.
 //
 // The H5vcc node should just be a collection of readonly sub-nodes.
 // This is created by the BrowserModule and passed directly to the Window
@@ -37,7 +37,6 @@
   readonly attribute H5vccSettings settings;
   [Conditional=COBALT_ENABLE_SSO]
       readonly attribute H5vccSso sso;
-  readonly attribute H5vccStorage storage;
   readonly attribute H5vccSystem system;
   readonly attribute H5vccTraceEvent traceEvent;
 };
diff --git a/src/cobalt/h5vcc/h5vcc_accessibility.cc b/src/cobalt/h5vcc/h5vcc_accessibility.cc
index 9c4a8ba..29fbc3d 100644
--- a/src/cobalt/h5vcc/h5vcc_accessibility.cc
+++ b/src/cobalt/h5vcc/h5vcc_accessibility.cc
@@ -16,9 +16,6 @@
 
 #include "base/command_line.h"
 #include "base/message_loop/message_loop.h"
-#include "cobalt/accessibility/starboard_tts_engine.h"
-#include "cobalt/accessibility/tts_engine.h"
-#include "cobalt/accessibility/tts_logger.h"
 #include "cobalt/base/accessibility_settings_changed_event.h"
 #include "cobalt/browser/switches.h"
 #include "starboard/accessibility.h"
@@ -40,20 +37,6 @@
   return false;
 }
 
-#if SB_HAS(SPEECH_SYNTHESIS)
-bool IsTextToSpeechEnabled() {
-  // Check if the tts feature is enabled in Starboard.
-  SbAccessibilityTextToSpeechSettings tts_settings = {0};
-  // Check platform settings.
-  if (SbAccessibilityGetTextToSpeechSettings(&tts_settings)) {
-    return tts_settings.has_text_to_speech_setting &&
-           tts_settings.is_text_to_speech_enabled;
-  }
-
-  return false;
-}
-#endif  // SB_HAS(SPEECH_SYNTHESIS)
-
 }  // namespace
 
 H5vccAccessibility::H5vccAccessibility(
@@ -67,26 +50,6 @@
   event_dispatcher_->AddEventCallback(
       base::AccessibilitySettingsChangedEvent::TypeId(),
       on_application_event_callback_);
-  if (ShouldForceTextToSpeech()) {
-#if SB_HAS(SPEECH_SYNTHESIS)
-    // Create a StarboardTTSEngine if the platform has speech synthesis.
-    tts_engine_.reset(new accessibility::StarboardTTSEngine());
-#else
-    tts_engine_.reset(new accessibility::TTSLogger());
-#endif
-  }
-
-#if SB_HAS(SPEECH_SYNTHESIS)
-  if (!tts_engine_ && IsTextToSpeechEnabled()) {
-    // Create a StarboardTTSEngine if TTS is enabled.
-    tts_engine_.reset(new accessibility::StarboardTTSEngine());
-  }
-#endif
-
-  if (tts_engine_) {
-    screen_reader_.reset(new accessibility::ScreenReader(
-        window->document(), tts_engine_.get(), mutation_observer_task_manager));
-  }
 }
 
 H5vccAccessibility::~H5vccAccessibility() {
@@ -95,16 +58,12 @@
       on_application_event_callback_);
 }
 
-bool H5vccAccessibility::built_in_screen_reader() const {
-  return screen_reader_ && screen_reader_->enabled();
-}
+bool H5vccAccessibility::built_in_screen_reader() const { return false; }
 
 void H5vccAccessibility::set_built_in_screen_reader(bool value) {
-  if (!screen_reader_) {
+  if (value) {
     LOG(WARNING) << "h5vcc.accessibility.builtInScreenReader: not available";
-    return;
   }
-  screen_reader_->set_enabled(value);
 }
 
 bool H5vccAccessibility::high_contrast_text() const {
diff --git a/src/cobalt/h5vcc/h5vcc_accessibility.h b/src/cobalt/h5vcc/h5vcc_accessibility.h
index a3cc95f..f3b5c45 100644
--- a/src/cobalt/h5vcc/h5vcc_accessibility.h
+++ b/src/cobalt/h5vcc/h5vcc_accessibility.h
@@ -18,8 +18,6 @@
 #include <memory>
 
 #include "base/message_loop/message_loop.h"
-#include "cobalt/accessibility/screen_reader.h"
-#include "cobalt/accessibility/tts_engine.h"
 #include "cobalt/base/event_dispatcher.h"
 #include "cobalt/dom/window.h"
 #include "cobalt/script/callback_function.h"
@@ -65,8 +63,6 @@
   base::EventDispatcher* event_dispatcher_;
   std::unique_ptr<H5vccAccessibilityCallbackReference>
       high_contrast_text_listener_;
-  std::unique_ptr<accessibility::TTSEngine> tts_engine_;
-  std::unique_ptr<accessibility::ScreenReader> screen_reader_;
 
   DISALLOW_COPY_AND_ASSIGN(H5vccAccessibility);
 };
diff --git a/src/cobalt/h5vcc/h5vcc_storage.cc b/src/cobalt/h5vcc/h5vcc_storage.cc
deleted file mode 100644
index 8bc8c5d..0000000
--- a/src/cobalt/h5vcc/h5vcc_storage.cc
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2015 The Cobalt Authors. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "cobalt/h5vcc/h5vcc_storage.h"
-
-#include "cobalt/storage/storage_manager.h"
-#include "net/url_request/url_request_context.h"
-
-namespace cobalt {
-namespace h5vcc {
-
-H5vccStorage::H5vccStorage(network::NetworkModule* network_module)
-    : network_module_(network_module) {}
-
-void H5vccStorage::ClearCookies() {
-  net::CookieStore* cookie_store =
-      network_module_->url_request_context()->cookie_store();
-  auto* cookie_monster = static_cast<net::CookieMonster*>(cookie_store);
-  network_module_->task_runner()->PostBlockingTask(
-      FROM_HERE,
-      base::Bind(&net::CookieMonster::DeleteAllMatchingInfoAsync,
-                 base::Unretained(cookie_monster), net::CookieDeletionInfo(),
-                 base::Passed(net::CookieStore::DeleteCallback())));
-}
-
-void H5vccStorage::Flush(const base::Optional<bool>& sync) {
-  if (sync.value_or(false) == true) {
-    DLOG(WARNING) << "Synchronous flush is not supported.";
-  }
-
-  network_module_->storage_manager()->FlushNow(base::Closure());
-}
-
-bool H5vccStorage::GetCookiesEnabled() {
-  return network_module_->network_delegate()->cookies_enabled();
-}
-
-void H5vccStorage::SetCookiesEnabled(bool enabled) {
-  network_module_->network_delegate()->set_cookies_enabled(enabled);
-}
-
-}  // namespace h5vcc
-}  // namespace cobalt
diff --git a/src/cobalt/h5vcc/h5vcc_storage.h b/src/cobalt/h5vcc/h5vcc_storage.h
deleted file mode 100644
index 613f024..0000000
--- a/src/cobalt/h5vcc/h5vcc_storage.h
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2015 The Cobalt Authors. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#ifndef COBALT_H5VCC_H5VCC_STORAGE_H_
-#define COBALT_H5VCC_H5VCC_STORAGE_H_
-
-#include "base/optional.h"
-#include "cobalt/network/network_module.h"
-#include "cobalt/script/wrappable.h"
-
-namespace cobalt {
-namespace h5vcc {
-
-class H5vccStorage : public script::Wrappable {
- public:
-  explicit H5vccStorage(network::NetworkModule* network_module);
-  void ClearCookies();
-  void Flush(const base::Optional<bool>& sync);
-  bool GetCookiesEnabled();
-  void SetCookiesEnabled(bool enabled);
-
-  DEFINE_WRAPPABLE_TYPE(H5vccStorage);
-
- private:
-  network::NetworkModule* network_module_;
-
-  DISALLOW_COPY_AND_ASSIGN(H5vccStorage);
-};
-
-}  // namespace h5vcc
-}  // namespace cobalt
-
-#endif  // COBALT_H5VCC_H5VCC_STORAGE_H_
diff --git a/src/cobalt/h5vcc/h5vcc_storage.idl b/src/cobalt/h5vcc/h5vcc_storage.idl
deleted file mode 100644
index 7a30dec..0000000
--- a/src/cobalt/h5vcc/h5vcc_storage.idl
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2015 The Cobalt Authors. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-interface H5vccStorage {
-  void clearCookies();
-  // We don't support synchronous flush, this is legacy.
-  void flush(optional boolean sync = false);
-  boolean getCookiesEnabled();
-  void setCookiesEnabled(boolean value);
-};
diff --git a/src/cobalt/layout/block_container_box.cc b/src/cobalt/layout/block_container_box.cc
index c3076e4..006baff 100644
--- a/src/cobalt/layout/block_container_box.cc
+++ b/src/cobalt/layout/block_container_box.cc
@@ -207,15 +207,15 @@
     // computed value for 'width'.
     //   https://www.w3.org/TR/CSS21/visudet.html#min-max-widths
     bool min_width_depends_on_containing_block;
-    base::Optional<LayoutUnit> min_width =
-        GetUsedMinWidth(computed_style(), layout_params.containing_block_size,
-                        &min_width_depends_on_containing_block);
-    if (width() < min_width.value()) {
-      UpdateContentWidthAndMargins(layout_params.containing_block_size.width(),
-                                   layout_params.shrink_to_fit_width_forced,
-                                   min_width_depends_on_containing_block,
-                                   maybe_left, maybe_right, maybe_margin_left,
-                                   maybe_margin_right, min_width, maybe_height);
+    base::Optional<LayoutUnit> maybe_min_width = GetUsedMinWidthIfNotAuto(
+        computed_style(), layout_params.containing_block_size,
+        &min_width_depends_on_containing_block);
+    if (maybe_min_width && (width() < maybe_min_width.value_or(LayoutUnit()))) {
+      UpdateContentWidthAndMargins(
+          layout_params.containing_block_size.width(),
+          layout_params.shrink_to_fit_width_forced,
+          min_width_depends_on_containing_block, maybe_left, maybe_right,
+          maybe_margin_left, maybe_margin_right, maybe_min_width, maybe_height);
     }
   }
 
@@ -239,9 +239,9 @@
   // applied again, but this time using the value of 'min-height' as the
   // computed value for 'height'.
   //   https://www.w3.org/TR/CSS21/visudet.html#min-max-heights
-  base::Optional<LayoutUnit> min_height =
-      GetUsedMinHeight(computed_style(), layout_params.containing_block_size);
-  if (height() < min_height.value()) {
+  base::Optional<LayoutUnit> min_height = GetUsedMinHeightIfNotAuto(
+      computed_style(), layout_params.containing_block_size);
+  if (min_height && (height() < min_height.value())) {
     UpdateContentHeightAndMargins(layout_params.containing_block_size,
                                   maybe_top, maybe_bottom, maybe_margin_top,
                                   maybe_margin_bottom, min_height);
diff --git a/src/cobalt/layout/box_intersection_observer_module.cc b/src/cobalt/layout/box_intersection_observer_module.cc
index d09d3b6..124d36c 100644
--- a/src/cobalt/layout/box_intersection_observer_module.cc
+++ b/src/cobalt/layout/box_intersection_observer_module.cc
@@ -14,6 +14,7 @@
 
 #include "cobalt/layout/box_intersection_observer_module.h"
 
+#include "base/trace_event/trace_event.h"
 #include "cobalt/layout/box.h"
 
 namespace cobalt {
@@ -45,6 +46,9 @@
 }
 
 void BoxIntersectionObserverModule::UpdateIntersectionObservations() {
+  TRACE_EVENT0(
+      "cobalt::layout",
+      "BoxIntersectionObserverModule::UpdateIntersectionObservations()");
   ContainerBox* container_box = box_->AsContainerBox();
   if (!container_box) {
     return;
diff --git a/src/cobalt/layout/flex_container_box.cc b/src/cobalt/layout/flex_container_box.cc
index 73067f4..b62921d 100644
--- a/src/cobalt/layout/flex_container_box.cc
+++ b/src/cobalt/layout/flex_container_box.cc
@@ -15,6 +15,7 @@
 #include "cobalt/layout/flex_container_box.h"
 
 #include <algorithm>
+#include <vector>
 
 #include "cobalt/cssom/computed_style.h"
 #include "cobalt/cssom/keyword_value.h"
@@ -54,12 +55,12 @@
       computed_style(), layout_params.containing_block_size,
       &height_depends_on_containing_block);
 
-  LayoutUnit min_width = GetUsedMinWidth(
+  base::Optional<LayoutUnit> min_width = GetUsedMinWidthIfNotAuto(
       computed_style(), layout_params.containing_block_size, NULL);
   base::Optional<LayoutUnit> max_width = GetUsedMaxWidthIfNotNone(
       computed_style(), layout_params.containing_block_size, NULL);
-  LayoutUnit min_height =
-      GetUsedMinHeight(computed_style(), layout_params.containing_block_size);
+  base::Optional<LayoutUnit> min_height = GetUsedMinHeightIfNotAuto(
+      computed_style(), layout_params.containing_block_size);
   base::Optional<LayoutUnit> max_height = GetUsedMaxHeightIfNotNone(
       computed_style(), layout_params.containing_block_size);
 
@@ -147,20 +148,20 @@
   }
 
   if (main_space) {
-    if (max_main_space_ && main_space.value() > max_main_space_.value()) {
+    if (max_main_space_ && *main_space > *max_main_space_) {
       main_space = max_main_space_;
     }
-    if (main_space.value() < min_main_space_) {
+    if (min_main_space_ && *main_space < *min_main_space_) {
       main_space = min_main_space_;
     }
   }
 
   if (cross_space) {
-    if (max_cross_space_ && cross_space_.value() > max_cross_space_.value()) {
+    if (max_cross_space_ && *cross_space_ > *max_cross_space_) {
       cross_space = max_cross_space_;
     }
-    if (cross_space.value() < min_cross_space_) {
-      cross_space = min_cross_space_;
+    if (min_cross_space_ && *cross_space < *min_cross_space_) {
+      cross_space = *min_cross_space_;
     }
   }
 
@@ -168,85 +169,6 @@
   cross_space_ = cross_space;
 }
 
-LayoutUnit FlexContainerBox::DetermineFlexBaseSize(
-    Box* item, const LayoutParams& layout_params,
-    bool container_shrink_to_fit_width_forced) {
-  // Absolutely positioned boxes are not flex items.
-  DCHECK(!item->IsAbsolutelyPositioned());
-
-  // All flex items are block container boxes.
-  DCHECK(item->AsBlockContainerBox());
-
-  bool main_direction_is_horizontal = MainDirectionIsHorizontal();
-
-  // Algorithm for determine the flex base size and hypothetical main size of
-  // each item.
-  //   https://www.w3.org/TR/css-flexbox-1/#algo-main-item
-
-  // A. If the item has a definite used flex basis, that's the flex base size.
-  bool flex_basis_depends_on_available_space;
-  base::Optional<LayoutUnit> flex_basis = GetUsedFlexBasisIfNotContent(
-      item->computed_style(), main_direction_is_horizontal,
-      layout_params.containing_block_size,
-      &flex_basis_depends_on_available_space);
-  bool flex_basis_is_definite =
-      flex_basis && (!flex_basis_depends_on_available_space || main_space_);
-  if (flex_basis_is_definite) {
-    return flex_basis.value();
-  }
-
-  // B. If the flex item has an intrinsic aspect ratio, a used flex basis of
-  //    content, and a definite cross size, then the flex base size is
-  //    calculated from its inner cross size and the flex item's intrinsic
-  //    aspect ratio.
-  // Sizing from intrinsic ratio is not supported.
-
-  bool flex_basis_is_content_or_depends_on_available_space =
-      !flex_basis || flex_basis_depends_on_available_space;
-  // C. If the used flex basis is content or depends on its available space, and
-  //    the flex container is being sized under a min-content or max-content
-  //    constraint, size the item under that constraint. The flex base size is
-  //    the item's resulting main size.
-  if (flex_basis_is_content_or_depends_on_available_space &&
-      container_shrink_to_fit_width_forced) {
-    LayoutParams child_layout_params(layout_params);
-    child_layout_params.shrink_to_fit_width_forced = true;
-    item->UpdateSize(child_layout_params);
-    return main_direction_is_horizontal ? item->width() : item->height();
-  }
-
-  // D. Otherwise, if the used flex basis is content or depends on its available
-  //    space, the available main size is infinite, and the flex item's inline
-  //    axis is parallel to the main axis, lay the item out using the rules for
-  //    a box in an orthogonal flow. The flex base size is the item's
-  //    max-content main size.
-  //
-  if (flex_basis_is_content_or_depends_on_available_space &&
-      main_direction_is_horizontal && !main_space_) {
-    // Calculate the max-content main size.
-    LayoutParams child_layout_params(layout_params);
-    child_layout_params.shrink_to_fit_width_forced = true;
-    item->UpdateSize(child_layout_params);
-    return item->width();
-  }
-
-  // E. Otherwise, size the item into the available space using its used flex
-  //    basis in place of its main size, treating a value of content as
-  //    max-content. If a cross size is needed to determine the main size (e.g.
-  //    when the flex item's main size is in its block axis) and the flex item's
-  //    cross size is auto and not definite, in this calculation use fit-content
-  //    as the flex item's cross size. The flex base size is the item's
-  //    resulting main size.
-  // TODO: handle 'if (!main_direction_is_horizontal)' and auto
-  // height, see above.
-  LayoutParams child_layout_params(layout_params);
-  if (!flex_basis) {
-    child_layout_params.shrink_to_fit_width_forced = true;
-  }
-  item->UpdateSize(child_layout_params);
-  return main_direction_is_horizontal ? item->width() : item->height();
-}
-
 // From |Box|.
 void FlexContainerBox::UpdateContentSizeAndMargins(
     const LayoutParams& layout_params) {
@@ -281,51 +203,24 @@
   LayoutParams child_layout_params;
   child_layout_params.containing_block_size = available_space;
 
-  // TODO: Verify if this is correct, including the call to |UpdateRect| below.
-  // Not setting this appears to result in incorrect hypothetical main size.
-  child_layout_params.shrink_to_fit_width_forced = true;
-
   FlexFormattingContext flex_formatting_context(
       child_layout_params, main_direction_is_horizontal, DirectionIsReversed());
 
+  std::vector<std::unique_ptr<FlexItem>> items;
+  items.reserve(child_boxes().size());
+
   for (Boxes::const_iterator child_box_iterator = child_boxes().begin();
        child_box_iterator != child_boxes().end(); ++child_box_iterator) {
     Box* child_box = *child_box_iterator;
-    if (child_box->IsAbsolutelyPositioned()) {
-      flex_formatting_context.EstimateStaticPosition(child_box);
-    } else {
+    if (!child_box->IsAbsolutelyPositioned()) {
       flex_formatting_context.UpdateRect(child_box);
 
-      FlexFormattingContext::ItemParameters parameters;
-      parameters.flex_base_size =
-          DetermineFlexBaseSize(child_box, child_layout_params,
-                                layout_params.shrink_to_fit_width_forced);
-      // The hypothetical main size is the item's flex base size clamped
-      // according to its used min and max main sizes.
-      if (main_direction_is_horizontal) {
-        LayoutUnit min_width =
-            GetUsedMinWidth(child_box->computed_style(), available_space, NULL);
-        parameters.hypothetical_main_size =
-            std::max(min_width, parameters.flex_base_size);
-        base::Optional<LayoutUnit> max_width = GetUsedMaxWidthIfNotNone(
-            child_box->computed_style(), available_space, NULL);
-        if (max_width) {
-          parameters.hypothetical_main_size =
-              std::min(max_width.value(), parameters.hypothetical_main_size);
-        }
-      } else {
-        LayoutUnit min_height =
-            GetUsedMinHeight(child_box->computed_style(), available_space);
-        parameters.hypothetical_main_size =
-            std::max(min_height, parameters.flex_base_size);
-        base::Optional<LayoutUnit> max_height = GetUsedMaxHeightIfNotNone(
-            child_box->computed_style(), available_space);
-        if (max_height) {
-          parameters.hypothetical_main_size =
-              std::min(max_height.value(), parameters.hypothetical_main_size);
-        }
-      }
-      flex_formatting_context.SetItemParameters(child_box, parameters);
+      auto item = FlexItem::Create(child_box, main_direction_is_horizontal);
+      item->DetermineFlexBaseSize(child_layout_params, main_space_,
+                                  layout_params.shrink_to_fit_width_forced);
+      item->DetermineHypotheticalMainSize(
+          child_layout_params.containing_block_size);
+      items.emplace_back(std::move(item));
     }
   }
 
@@ -371,11 +266,11 @@
   }
 
   LayoutUnit main_size = flex_formatting_context.main_size();
-  if (max_main_space_ && main_size > max_main_space_.value()) {
-    main_size = max_main_space_.value();
+  if (max_main_space_ && main_size > *max_main_space_) {
+    main_size = *max_main_space_;
   }
-  if (main_size < min_main_space_) {
-    main_size = min_main_space_;
+  if (min_main_space_ && main_size < *min_main_space_) {
+    main_size = *min_main_space_;
   }
   flex_formatting_context.set_main_size(main_size);
 
@@ -384,16 +279,14 @@
   } else {
     set_height(main_size);
   }
+  flex_formatting_context.SetContainerMainSize(main_size);
 
   // Main Size Determination:
   // 5. Collect flex items into flex lines.
   flex_formatting_context.set_multi_line(ContainerIsMultiLine());
-  for (Boxes::const_iterator child_box_iterator = child_boxes().begin();
-       child_box_iterator != child_boxes().end(); ++child_box_iterator) {
-    Box* child_box = *child_box_iterator;
-    if (!child_box->IsAbsolutelyPositioned()) {
-      flex_formatting_context.CollectItemIntoLine(child_box);
-    }
+  for (auto& item : items) {
+    DCHECK(!item->box()->IsAbsolutelyPositioned());
+    flex_formatting_context.CollectItemIntoLine(std::move(item));
   }
 
   // Perform remaining steps of the layout of the items.
@@ -407,17 +300,6 @@
     set_width(flex_formatting_context.cross_size());
   }
 
-  // Layout positioned child boxes.
-
-  // TODO: Check if this should be content box instead of padding box.
-  //  https://www.w3.org/TR/css-flexbox-1/#abspos-items
-  LayoutParams absolute_child_layout_params;
-  absolute_child_layout_params.containing_block_size.set_width(
-      GetPaddingBoxWidth());
-  absolute_child_layout_params.containing_block_size.set_height(
-      GetPaddingBoxHeight());
-  UpdateRectOfPositionedChildBoxes(layout_params, absolute_child_layout_params);
-
   base::Optional<LayoutUnit> maybe_margin_left = GetUsedMarginLeftIfNotAuto(
       computed_style(), layout_params.containing_block_size);
   base::Optional<LayoutUnit> maybe_margin_right = GetUsedMarginRightIfNotAuto(
@@ -433,7 +315,11 @@
 
   set_margin_top(maybe_margin_top.value_or(LayoutUnit()));
   set_margin_bottom(maybe_margin_bottom.value_or(LayoutUnit()));
-  baseline_ = flex_formatting_context.GetBaseline();
+  if (child_boxes().empty()) {
+    baseline_ = GetBorderBoxHeight();
+  } else {
+    baseline_ = flex_formatting_context.GetBaseline();
+  }
 }
 
 WrapResult FlexContainerBox::TryWrapAt(
@@ -481,8 +367,6 @@
 }
 
 LayoutUnit FlexContainerBox::GetBaselineOffsetFromTopMarginEdge() const {
-  // TODO: Complete implementation of flex container baselines.
-  //   https://www.w3.org/TR/css-flexbox-1/#flex-baselines
   return GetContentBoxOffsetFromMarginBox().y() + baseline_;
 }
 
@@ -500,12 +384,8 @@
   TextBox* text_box = child_box->AsTextBox();
   switch (child_box->GetLevel()) {
     case kBlockLevel:
-      if (!child_box->IsAbsolutelyPositioned()) {
-        PushBackDirectChild(child_box);
-        break;
-      }
-    // Fall through if child is out-of-flow.
-
+      PushBackDirectChild(child_box);
+      break;
     case kInlineLevel:
       if (text_box && !text_box->HasNonCollapsibleText()) {
         // Text boxes with only white space are not rendered, just as if
diff --git a/src/cobalt/layout/flex_container_box.h b/src/cobalt/layout/flex_container_box.h
index 0c4be6c..5c5007b 100644
--- a/src/cobalt/layout/flex_container_box.h
+++ b/src/cobalt/layout/flex_container_box.h
@@ -88,10 +88,10 @@
   base::Optional<LayoutUnit> main_space_;
   base::Optional<LayoutUnit> cross_space_;
 
-  LayoutUnit min_main_space_;
+  base::Optional<LayoutUnit> min_main_space_;
   base::Optional<LayoutUnit> max_main_space_;
 
-  LayoutUnit min_cross_space_;
+  base::Optional<LayoutUnit> min_cross_space_;
   base::Optional<LayoutUnit> max_cross_space_;
 
   LayoutUnit baseline_;
diff --git a/src/cobalt/layout/flex_formatting_context.cc b/src/cobalt/layout/flex_formatting_context.cc
index be295e6..b106ffe 100644
--- a/src/cobalt/layout/flex_formatting_context.cc
+++ b/src/cobalt/layout/flex_formatting_context.cc
@@ -35,7 +35,11 @@
 
 void FlexFormattingContext::UpdateRect(Box* child_box) {
   DCHECK(!child_box->IsAbsolutelyPositioned());
-  child_box->UpdateSize(layout_params_);
+  {
+    LayoutParams child_layout_params(layout_params_);
+    child_layout_params.shrink_to_fit_width_forced = true;
+    child_box->UpdateSize(child_layout_params);
+  }
 
   // Shrink-to-fit doesn't exists anymore by itself in CSS3. It is called the
   // fit-content size, which is derived from the 'min-content' and 'max-content'
@@ -51,13 +55,8 @@
   set_auto_height(child_box->height());
 }
 
-void FlexFormattingContext::EstimateStaticPosition(Box* child_box) {
-  DCHECK(child_box->IsAbsolutelyPositioned());
-  child_box->UpdateSize(layout_params_);
-  // TODO set static position? Also, memoize because there may be multiple...
-}
-
-void FlexFormattingContext::CollectItemIntoLine(Box* item) {
+void FlexFormattingContext::CollectItemIntoLine(
+    std::unique_ptr<FlexItem>&& item) {
   // Collect flex items into flex lines:
   //   https://www.w3.org/TR/css-flexbox-1/#algo-line-break
   if (lines_.empty()) {
@@ -65,31 +64,21 @@
                                      main_direction_is_horizontal_,
                                      direction_is_reversed_, main_size_));
   }
-  ItemParameters parameters = GetItemParameters(item);
 
-  if (multi_line_) {
-    if (lines_.back()->TryAddItem(item, parameters.flex_base_size,
-                                  parameters.hypothetical_main_size)) {
-      return;
-    } else {
-      lines_.emplace_back(new FlexLine(layout_params_,
-                                       main_direction_is_horizontal_,
-                                       direction_is_reversed_, main_size_));
-    }
+  if (multi_line_ && !lines_.back()->CanAddItem(*item)) {
+    lines_.emplace_back(new FlexLine(layout_params_,
+                                     main_direction_is_horizontal_,
+                                     direction_is_reversed_, main_size_));
   }
 
-  lines_.back()->AddItem(item, parameters.flex_base_size,
-                         parameters.hypothetical_main_size);
+  lines_.back()->AddItem(std::move(item));
 }
 
 void FlexFormattingContext::ResolveFlexibleLengthsAndCrossSizes(
-    const base::Optional<LayoutUnit>& cross_space, LayoutUnit min_cross_space,
+    const base::Optional<LayoutUnit>& cross_space,
+    const base::Optional<LayoutUnit>& min_cross_space,
     const base::Optional<LayoutUnit>& max_cross_space,
     const scoped_refptr<cssom::PropertyValue>& align_content) {
-  if (lines_.empty()) {
-    return;
-  }
-
   // Algorithm for Flex Layout:
   //   https://www.w3.org/TR/css-flexbox-1/#layout-algorithm
 
@@ -118,8 +107,8 @@
   //   https://www.w3.org/TR/css-flexbox-1/#change-201403-clamp-single-line
   if (!multi_line_) {
     LayoutUnit line_cross_size = lines_.front()->cross_size();
-    if (line_cross_size < min_cross_space) {
-      lines_.front()->set_cross_size(min_cross_space);
+    if (min_cross_space && line_cross_size < *min_cross_space) {
+      lines_.front()->set_cross_size(*min_cross_space);
     } else if (max_cross_space && line_cross_size > *max_cross_space) {
       lines_.front()->set_cross_size(*max_cross_space);
     }
@@ -142,12 +131,16 @@
     cross_size_ = total_cross_size;
   }
   // Clamped by the used min and max cross sizes of the flex container.
-  if (cross_size_ < min_cross_space) {
-    cross_size_ = min_cross_space;
+  if (min_cross_space && cross_size_ < *min_cross_space) {
+    cross_size_ = *min_cross_space;
   } else if (max_cross_space && cross_size_ > *max_cross_space) {
     cross_size_ = *max_cross_space;
   }
 
+  if (lines_.empty()) {
+    return;
+  }
+
   LayoutUnit leftover_cross_size = cross_size_ - total_cross_size;
   // 9. Handle 'align-content: stretch'.
   if (align_content == cssom::KeywordValue::GetStretch()) {
@@ -213,12 +206,9 @@
     NOTIMPLEMENTED() << "Column flex boxes not yet implemented.";
   }
 
-  // TODO: Complete implementation of flex container baselines.
-  //   https://www.w3.org/TR/css-flexbox-1/#flex-baselines
-
-  LayoutUnit baseline = LayoutUnit();
+  LayoutUnit baseline = cross_size_;
   if (!lines_.empty()) {
-    if (direction_is_reversed_) {
+    if (direction_is_reversed_ && !main_direction_is_horizontal_) {
       baseline = lines_.back()->GetBaseline();
     } else {
       baseline = lines_.front()->GetBaseline();
diff --git a/src/cobalt/layout/flex_formatting_context.h b/src/cobalt/layout/flex_formatting_context.h
index 3217380..9df264e 100644
--- a/src/cobalt/layout/flex_formatting_context.h
+++ b/src/cobalt/layout/flex_formatting_context.h
@@ -28,11 +28,6 @@
 
 class FlexFormattingContext : public FormattingContext {
  public:
-  struct ItemParameters {
-    LayoutUnit flex_base_size;
-    LayoutUnit hypothetical_main_size;
-  };
-
   FlexFormattingContext(const LayoutParams& layout_params,
                         bool main_direction_is_horizontal,
                         bool direction_is_reversed);
@@ -42,16 +37,13 @@
   // the internal state in the preparation for the next child.
   void UpdateRect(Box* child_box);
 
-  // Estimates the static position of the given child box. In CSS 2.1 the static
-  // position is only defined for absolutely positioned boxes.
-  void EstimateStaticPosition(Box* child_box);
-
   // Collects the flex item into a flex line.
-  void CollectItemIntoLine(Box* item);
+  void CollectItemIntoLine(std::unique_ptr<FlexItem>&& item);
 
   // layout flex items and determine cross size.
   void ResolveFlexibleLengthsAndCrossSizes(
-      const base::Optional<LayoutUnit>& cross_space, LayoutUnit min_cross_space,
+      const base::Optional<LayoutUnit>& cross_space,
+      const base::Optional<LayoutUnit>& min_cross_space,
       const base::Optional<LayoutUnit>& max_cross_space,
       const scoped_refptr<cssom::PropertyValue>& align_content);
 
@@ -65,20 +57,12 @@
     return layout_params_.containing_block_size;
   }
 
-  const ItemParameters& GetItemParameters(Box* item) {
-    return item_parameters_.find(item)->second;
-  }
-
-  void SetItemParameters(Box* item, const ItemParameters& parameters) {
-    item_parameters_.insert(std::make_pair(item, parameters));
-  }
-
-  LayoutUnit GetFlexBaseSize(Box* item) {
-    return GetItemParameters(item).flex_base_size;
-  }
-
-  LayoutUnit GetHypotheticalMainSize(Box* item) {
-    return GetItemParameters(item).hypothetical_main_size;
+  void SetContainerMainSize(LayoutUnit size) {
+    if (main_direction_is_horizontal_) {
+      layout_params_.containing_block_size.set_width(size);
+    } else {
+      layout_params_.containing_block_size.set_height(size);
+    }
   }
 
   void set_multi_line(bool val) { multi_line_ = val; }
@@ -86,7 +70,7 @@
   LayoutUnit GetBaseline();
 
  private:
-  const LayoutParams layout_params_;
+  LayoutParams layout_params_;
   const bool main_direction_is_horizontal_;
   const bool direction_is_reversed_;
   bool multi_line_ = false;
@@ -94,7 +78,6 @@
   LayoutUnit main_size_;
   LayoutUnit cross_size_;
 
-  base::hash_map<Box*, ItemParameters> item_parameters_;
   std::vector<std::unique_ptr<FlexLine>> lines_;
 
   DISALLOW_COPY_AND_ASSIGN(FlexFormattingContext);
diff --git a/src/cobalt/layout/flex_item.cc b/src/cobalt/layout/flex_item.cc
index e49cf0b..45370f9 100644
--- a/src/cobalt/layout/flex_item.cc
+++ b/src/cobalt/layout/flex_item.cc
@@ -14,9 +14,13 @@
 
 #include "cobalt/layout/flex_item.h"
 
+#include <algorithm>
+
+#include "base/logging.h"
 #include "base/memory/ptr_util.h"
 #include "cobalt/cssom/css_computed_style_data.h"
 #include "cobalt/cssom/number_value.h"
+#include "cobalt/layout/box.h"
 #include "cobalt/layout/container_box.h"
 #include "cobalt/layout/used_style.h"
 
@@ -28,69 +32,79 @@
 // flex containers.
 class MainAxisHorizontalFlexItem : public FlexItem {
  public:
-  MainAxisHorizontalFlexItem(Box* box, LayoutUnit flex_base_size,
-                             LayoutUnit hypothetical_main_size)
-      : FlexItem(box, flex_base_size, hypothetical_main_size) {}
-
+  explicit MainAxisHorizontalFlexItem(Box* box) : FlexItem(box, true) {}
   ~MainAxisHorizontalFlexItem() override {}
 
-  LayoutUnit GetContentToMarginMainAxis() override;
-  LayoutUnit GetContentToMarginCrossAxis() override;
-  LayoutUnit GetUsedMinMainAxisSize(
-      const SizeLayoutUnit& containing_block_size) override;
-  LayoutUnit GetUsedMinCrossAxisSize(
-      const SizeLayoutUnit& containing_block_size) override;
+  LayoutUnit GetContentToMarginMainAxis() const override;
+  LayoutUnit GetContentToMarginCrossAxis() const override;
+  base::Optional<LayoutUnit> GetUsedMainAxisSizeIfNotAuto(
+      const SizeLayoutUnit& containing_block_size) const override;
+  base::Optional<LayoutUnit> GetUsedMinMainAxisSizeIfNotAuto(
+      const SizeLayoutUnit& containing_block_size) const override;
+  base::Optional<LayoutUnit> GetUsedMinCrossAxisSizeIfNotAuto(
+      const SizeLayoutUnit& containing_block_size) const override;
   base::Optional<LayoutUnit> GetUsedMaxMainAxisSizeIfNotNone(
-      const SizeLayoutUnit& containing_block_size) override;
+      const SizeLayoutUnit& containing_block_size) const override;
   base::Optional<LayoutUnit> GetUsedMaxCrossAxisSizeIfNotNone(
-      const SizeLayoutUnit& containing_block_size) override;
+      const SizeLayoutUnit& containing_block_size) const override;
 
   void DetermineHypotheticalCrossSize(
       const LayoutParams& layout_params) override;
-  LayoutUnit GetMarginBoxMainSize() override;
-  LayoutUnit GetMarginBoxCrossSize() override;
 
-  bool CrossSizeIsAuto() override;
-  bool MarginMainStartIsAuto() override;
-  bool MarginMainEndIsAuto() override;
-  bool MarginCrossStartIsAuto() override;
-  bool MarginCrossEndIsAuto() override;
+  LayoutUnit GetContentBoxMainSize() const override;
+  LayoutUnit GetMarginBoxMainSize() const override;
+  LayoutUnit GetMarginBoxCrossSize() const override;
+
+  bool CrossSizeIsAuto() const override;
+  bool MarginMainStartIsAuto() const override;
+  bool MarginMainEndIsAuto() const override;
+  bool MarginCrossStartIsAuto() const override;
+  bool MarginCrossEndIsAuto() const override;
 
   void SetCrossSize(LayoutUnit cross_size) override;
   void SetMainAxisStart(LayoutUnit position) override;
   void SetCrossAxisStart(LayoutUnit position) override;
 };
 
-LayoutUnit MainAxisHorizontalFlexItem::GetContentToMarginMainAxis() {
+LayoutUnit MainAxisHorizontalFlexItem::GetContentToMarginMainAxis() const {
   return box()->GetContentToMarginHorizontal();
 }
 
-LayoutUnit MainAxisHorizontalFlexItem::GetContentToMarginCrossAxis() {
+LayoutUnit MainAxisHorizontalFlexItem::GetContentToMarginCrossAxis() const {
   return box()->GetContentToMarginVertical();
 }
 
-LayoutUnit MainAxisHorizontalFlexItem::GetUsedMinMainAxisSize(
-    const SizeLayoutUnit& containing_block_size) {
-  return GetUsedMinWidth(box()->computed_style(), containing_block_size, NULL);
+base::Optional<LayoutUnit>
+MainAxisHorizontalFlexItem::GetUsedMainAxisSizeIfNotAuto(
+    const SizeLayoutUnit& containing_block_size) const {
+  return GetUsedWidthIfNotAuto(computed_style(), containing_block_size, NULL);
 }
 
-LayoutUnit MainAxisHorizontalFlexItem::GetUsedMinCrossAxisSize(
-    const SizeLayoutUnit& containing_block_size) {
-  return GetUsedMinHeight(box()->computed_style(), containing_block_size);
+base::Optional<LayoutUnit>
+MainAxisHorizontalFlexItem::GetUsedMinMainAxisSizeIfNotAuto(
+    const SizeLayoutUnit& containing_block_size) const {
+  base::Optional<LayoutUnit> maybe_used_min_space =
+      GetUsedMinWidthIfNotAuto(computed_style(), containing_block_size, NULL);
+  return maybe_used_min_space;
+}
+
+base::Optional<LayoutUnit>
+MainAxisHorizontalFlexItem::GetUsedMinCrossAxisSizeIfNotAuto(
+    const SizeLayoutUnit& containing_block_size) const {
+  return GetUsedMinHeightIfNotAuto(computed_style(), containing_block_size);
 }
 
 base::Optional<LayoutUnit>
 MainAxisHorizontalFlexItem::GetUsedMaxMainAxisSizeIfNotNone(
-    const SizeLayoutUnit& containing_block_size) {
-  return GetUsedMaxWidthIfNotNone(box()->computed_style(),
-                                  containing_block_size, NULL);
+    const SizeLayoutUnit& containing_block_size) const {
+  return GetUsedMaxWidthIfNotNone(computed_style(), containing_block_size,
+                                  NULL);
 }
 
 base::Optional<LayoutUnit>
 MainAxisHorizontalFlexItem::GetUsedMaxCrossAxisSizeIfNotNone(
-    const SizeLayoutUnit& containing_block_size) {
-  return GetUsedMaxHeightIfNotNone(box()->computed_style(),
-                                   containing_block_size);
+    const SizeLayoutUnit& containing_block_size) const {
+  return GetUsedMaxHeightIfNotNone(computed_style(), containing_block_size);
 }
 
 void MainAxisHorizontalFlexItem::DetermineHypotheticalCrossSize(
@@ -109,36 +123,36 @@
   box()->UpdateSize(child_layout_params);
 }
 
-LayoutUnit MainAxisHorizontalFlexItem::GetMarginBoxMainSize() {
+LayoutUnit MainAxisHorizontalFlexItem::GetContentBoxMainSize() const {
+  return box()->width();
+}
+
+LayoutUnit MainAxisHorizontalFlexItem::GetMarginBoxMainSize() const {
   return box()->GetMarginBoxWidth();
 }
 
-LayoutUnit MainAxisHorizontalFlexItem::GetMarginBoxCrossSize() {
+LayoutUnit MainAxisHorizontalFlexItem::GetMarginBoxCrossSize() const {
   return box()->GetMarginBoxHeight();
 }
 
-bool MainAxisHorizontalFlexItem::CrossSizeIsAuto() {
-  return box()->computed_style()->height() == cssom::KeywordValue::GetAuto();
+bool MainAxisHorizontalFlexItem::CrossSizeIsAuto() const {
+  return computed_style()->height() == cssom::KeywordValue::GetAuto();
 }
 
-bool MainAxisHorizontalFlexItem::MarginMainStartIsAuto() {
-  return box()->computed_style()->margin_left() ==
-         cssom::KeywordValue::GetAuto();
+bool MainAxisHorizontalFlexItem::MarginMainStartIsAuto() const {
+  return computed_style()->margin_left() == cssom::KeywordValue::GetAuto();
 }
 
-bool MainAxisHorizontalFlexItem::MarginMainEndIsAuto() {
-  return box()->computed_style()->margin_right() ==
-         cssom::KeywordValue::GetAuto();
+bool MainAxisHorizontalFlexItem::MarginMainEndIsAuto() const {
+  return computed_style()->margin_right() == cssom::KeywordValue::GetAuto();
 }
 
-bool MainAxisHorizontalFlexItem::MarginCrossStartIsAuto() {
-  return box()->computed_style()->margin_top() ==
-         cssom::KeywordValue::GetAuto();
+bool MainAxisHorizontalFlexItem::MarginCrossStartIsAuto() const {
+  return computed_style()->margin_top() == cssom::KeywordValue::GetAuto();
 }
 
-bool MainAxisHorizontalFlexItem::MarginCrossEndIsAuto() {
-  return box()->computed_style()->margin_bottom() ==
-         cssom::KeywordValue::GetAuto();
+bool MainAxisHorizontalFlexItem::MarginCrossEndIsAuto() const {
+  return computed_style()->margin_bottom() == cssom::KeywordValue::GetAuto();
 }
 
 void MainAxisHorizontalFlexItem::SetCrossSize(LayoutUnit cross_size) {
@@ -158,70 +172,79 @@
 // flex containers.
 class MainAxisVerticalFlexItem : public FlexItem {
  public:
-  MainAxisVerticalFlexItem(Box* box, LayoutUnit flex_base_size,
-                           LayoutUnit hypothetical_main_size)
-      : FlexItem(box, flex_base_size, hypothetical_main_size) {}
-
+  explicit MainAxisVerticalFlexItem(Box* box) : FlexItem(box, false) {}
   ~MainAxisVerticalFlexItem() override {}
 
-  LayoutUnit GetContentToMarginMainAxis() override;
-  LayoutUnit GetContentToMarginCrossAxis() override;
+  LayoutUnit GetContentToMarginMainAxis() const override;
+  LayoutUnit GetContentToMarginCrossAxis() const override;
 
-  LayoutUnit GetUsedMinMainAxisSize(
-      const SizeLayoutUnit& containing_block_size) override;
-  LayoutUnit GetUsedMinCrossAxisSize(
-      const SizeLayoutUnit& containing_block_size) override;
+  base::Optional<LayoutUnit> GetUsedMainAxisSizeIfNotAuto(
+      const SizeLayoutUnit& containing_block_size) const override;
+  base::Optional<LayoutUnit> GetUsedMinMainAxisSizeIfNotAuto(
+      const SizeLayoutUnit& containing_block_size) const override;
+  base::Optional<LayoutUnit> GetUsedMinCrossAxisSizeIfNotAuto(
+      const SizeLayoutUnit& containing_block_size) const override;
   base::Optional<LayoutUnit> GetUsedMaxMainAxisSizeIfNotNone(
-      const SizeLayoutUnit& containing_block_size) override;
+      const SizeLayoutUnit& containing_block_size) const override;
   base::Optional<LayoutUnit> GetUsedMaxCrossAxisSizeIfNotNone(
-      const SizeLayoutUnit& containing_block_size) override;
+      const SizeLayoutUnit& containing_block_size) const override;
 
   void DetermineHypotheticalCrossSize(
       const LayoutParams& layout_params) override;
-  LayoutUnit GetMarginBoxMainSize() override;
-  LayoutUnit GetMarginBoxCrossSize() override;
 
-  bool CrossSizeIsAuto() override;
-  bool MarginMainStartIsAuto() override;
-  bool MarginMainEndIsAuto() override;
-  bool MarginCrossStartIsAuto() override;
-  bool MarginCrossEndIsAuto() override;
+  LayoutUnit GetContentBoxMainSize() const override;
+  LayoutUnit GetMarginBoxMainSize() const override;
+  LayoutUnit GetMarginBoxCrossSize() const override;
+
+  bool CrossSizeIsAuto() const override;
+  bool MarginMainStartIsAuto() const override;
+  bool MarginMainEndIsAuto() const override;
+  bool MarginCrossStartIsAuto() const override;
+  bool MarginCrossEndIsAuto() const override;
 
   void SetCrossSize(LayoutUnit cross_size) override;
   void SetMainAxisStart(LayoutUnit position) override;
   void SetCrossAxisStart(LayoutUnit position) override;
 };
 
-LayoutUnit MainAxisVerticalFlexItem::GetContentToMarginMainAxis() {
+LayoutUnit MainAxisVerticalFlexItem::GetContentToMarginMainAxis() const {
   return box()->GetContentToMarginVertical();
 }
 
-LayoutUnit MainAxisVerticalFlexItem::GetContentToMarginCrossAxis() {
+LayoutUnit MainAxisVerticalFlexItem::GetContentToMarginCrossAxis() const {
   return box()->GetContentToMarginHorizontal();
 }
 
-LayoutUnit MainAxisVerticalFlexItem::GetUsedMinMainAxisSize(
-    const SizeLayoutUnit& containing_block_size) {
-  return GetUsedMinHeight(box()->computed_style(), containing_block_size);
+base::Optional<LayoutUnit>
+MainAxisVerticalFlexItem::GetUsedMainAxisSizeIfNotAuto(
+    const SizeLayoutUnit& containing_block_size) const {
+  return GetUsedHeightIfNotAuto(computed_style(), containing_block_size, NULL);
 }
 
-LayoutUnit MainAxisVerticalFlexItem::GetUsedMinCrossAxisSize(
-    const SizeLayoutUnit& containing_block_size) {
-  return GetUsedMinWidth(box()->computed_style(), containing_block_size, NULL);
+base::Optional<LayoutUnit>
+MainAxisVerticalFlexItem::GetUsedMinMainAxisSizeIfNotAuto(
+    const SizeLayoutUnit& containing_block_size) const {
+  return GetUsedMinHeightIfNotAuto(computed_style(), containing_block_size);
+}
+
+base::Optional<LayoutUnit>
+MainAxisVerticalFlexItem::GetUsedMinCrossAxisSizeIfNotAuto(
+    const SizeLayoutUnit& containing_block_size) const {
+  return GetUsedMinWidthIfNotAuto(computed_style(), containing_block_size,
+                                  NULL);
 }
 
 base::Optional<LayoutUnit>
 MainAxisVerticalFlexItem::GetUsedMaxMainAxisSizeIfNotNone(
-    const SizeLayoutUnit& containing_block_size) {
-  return GetUsedMaxHeightIfNotNone(box()->computed_style(),
-                                   containing_block_size);
+    const SizeLayoutUnit& containing_block_size) const {
+  return GetUsedMaxHeightIfNotNone(computed_style(), containing_block_size);
 }
 
 base::Optional<LayoutUnit>
 MainAxisVerticalFlexItem::GetUsedMaxCrossAxisSizeIfNotNone(
-    const SizeLayoutUnit& containing_block_size) {
-  return GetUsedMaxWidthIfNotNone(box()->computed_style(),
-                                  containing_block_size, NULL);
+    const SizeLayoutUnit& containing_block_size) const {
+  return GetUsedMaxWidthIfNotNone(computed_style(), containing_block_size,
+                                  NULL);
 }
 
 void MainAxisVerticalFlexItem::DetermineHypotheticalCrossSize(
@@ -235,36 +258,36 @@
   box()->set_height(target_main_size());
 }
 
-LayoutUnit MainAxisVerticalFlexItem::GetMarginBoxMainSize() {
+LayoutUnit MainAxisVerticalFlexItem::GetContentBoxMainSize() const {
+  return box()->height();
+}
+
+LayoutUnit MainAxisVerticalFlexItem::GetMarginBoxMainSize() const {
   return box()->GetMarginBoxHeight();
 }
 
-LayoutUnit MainAxisVerticalFlexItem::GetMarginBoxCrossSize() {
+LayoutUnit MainAxisVerticalFlexItem::GetMarginBoxCrossSize() const {
   return box()->GetMarginBoxWidth();
 }
 
-bool MainAxisVerticalFlexItem::CrossSizeIsAuto() {
-  return box()->computed_style()->width() == cssom::KeywordValue::GetAuto();
+bool MainAxisVerticalFlexItem::CrossSizeIsAuto() const {
+  return computed_style()->width() == cssom::KeywordValue::GetAuto();
 }
 
-bool MainAxisVerticalFlexItem::MarginMainStartIsAuto() {
-  return box()->computed_style()->margin_top() ==
-         cssom::KeywordValue::GetAuto();
+bool MainAxisVerticalFlexItem::MarginMainStartIsAuto() const {
+  return computed_style()->margin_top() == cssom::KeywordValue::GetAuto();
 }
 
-bool MainAxisVerticalFlexItem::MarginMainEndIsAuto() {
-  return box()->computed_style()->margin_bottom() ==
-         cssom::KeywordValue::GetAuto();
+bool MainAxisVerticalFlexItem::MarginMainEndIsAuto() const {
+  return computed_style()->margin_bottom() == cssom::KeywordValue::GetAuto();
 }
 
-bool MainAxisVerticalFlexItem::MarginCrossStartIsAuto() {
-  return box()->computed_style()->margin_left() ==
-         cssom::KeywordValue::GetAuto();
+bool MainAxisVerticalFlexItem::MarginCrossStartIsAuto() const {
+  return computed_style()->margin_left() == cssom::KeywordValue::GetAuto();
 }
 
-bool MainAxisVerticalFlexItem::MarginCrossEndIsAuto() {
-  return box()->computed_style()->margin_right() ==
-         cssom::KeywordValue::GetAuto();
+bool MainAxisVerticalFlexItem::MarginCrossEndIsAuto() const {
+  return computed_style()->margin_right() == cssom::KeywordValue::GetAuto();
 }
 
 void MainAxisVerticalFlexItem::SetCrossSize(LayoutUnit cross_size) {
@@ -279,21 +302,15 @@
   box()->set_left(position);
 }
 
-FlexItem::FlexItem(Box* box, LayoutUnit flex_base_size,
-                   LayoutUnit hypothetical_main_size)
-    : box_(box),
-      flex_base_size_(flex_base_size),
-      hypothetical_main_size_(hypothetical_main_size) {}
+FlexItem::FlexItem(Box* box, bool main_direction_is_horizontal)
+    : box_(box), main_direction_is_horizontal_(main_direction_is_horizontal) {}
 
-std::unique_ptr<FlexItem> FlexItem::Create(bool main_direction_is_horizontal,
-                                           Box* box, LayoutUnit flex_base_size,
-                                           LayoutUnit hypothetical_main_size) {
+std::unique_ptr<FlexItem> FlexItem::Create(Box* box,
+                                           bool main_direction_is_horizontal) {
   if (main_direction_is_horizontal) {
-    return base::WrapUnique(new MainAxisHorizontalFlexItem(
-        box, flex_base_size, hypothetical_main_size));
+    return base::WrapUnique(new MainAxisHorizontalFlexItem(box));
   } else {
-    return base::WrapUnique(new MainAxisVerticalFlexItem(
-        box, flex_base_size, hypothetical_main_size));
+    return base::WrapUnique(new MainAxisVerticalFlexItem(box));
   }
 }
 
@@ -309,8 +326,7 @@
 const scoped_refptr<cobalt::cssom::PropertyValue>&
 FlexItem::GetUsedAlignSelfPropertyValue() {
   DCHECK(box()->parent());
-  return GetUsedAlignSelf(box()->computed_style(),
-                          box()->parent()->computed_style());
+  return GetUsedAlignSelf(computed_style(), box()->parent()->computed_style());
 }
 
 const scoped_refptr<cobalt::cssom::PropertyValue>&
@@ -319,6 +335,150 @@
   return box()->parent()->computed_style()->justify_content();
 }
 
+bool FlexItem::OverflowIsVisible() const {
+  return computed_style()->overflow() == cssom::KeywordValue::GetVisible();
+}
+
+void FlexItem::DetermineFlexBaseSize(
+    const LayoutParams& layout_params,
+    const base::Optional<LayoutUnit>& main_space,
+    bool container_shrink_to_fit_width_forced) {
+  // Absolutely positioned boxes are not flex items.
+  DCHECK(!box()->IsAbsolutelyPositioned());
+
+  // All flex items are block container boxes.
+  DCHECK(box()->AsBlockContainerBox());
+
+  // Algorithm for determine the flex base size and hypothetical main size of
+  // each item.
+  //   https://www.w3.org/TR/css-flexbox-1/#algo-main-item
+
+  // A. If the item has a definite used flex basis, that's the flex base size.
+  bool flex_basis_depends_on_available_space;
+  base::Optional<LayoutUnit> flex_basis = GetUsedFlexBasisIfNotContent(
+      computed_style(), main_direction_is_horizontal_,
+      layout_params.containing_block_size,
+      &flex_basis_depends_on_available_space);
+  bool flex_basis_is_definite =
+      flex_basis && (!flex_basis_depends_on_available_space || main_space);
+  if (flex_basis_is_definite) {
+    flex_base_size_ = *flex_basis;
+    return;
+  }
+
+  // B. If the flex item has an intrinsic aspect ratio, a used flex basis of
+  //    content, and a definite cross size, then the flex base size is
+  //    calculated from its inner cross size and the flex item's intrinsic
+  //    aspect ratio.
+  // Sizing from intrinsic ratio is not supported.
+
+  bool flex_basis_is_content_or_depends_on_available_space =
+      !flex_basis || flex_basis_depends_on_available_space;
+  // C. If the used flex basis is content or depends on its available space, and
+  //    the flex container is being sized under a min-content or max-content
+  //    constraint, size the item under that constraint. The flex base size is
+  //    the item's resulting main size.
+  if (flex_basis_is_content_or_depends_on_available_space &&
+      container_shrink_to_fit_width_forced) {
+    flex_base_size_ =
+        main_direction_is_horizontal_ ? box()->width() : box()->height();
+    return;
+  }
+
+  // D. Otherwise, if the used flex basis is content or depends on its available
+  //    space, the available main size is infinite, and the flex item's inline
+  //    axis is parallel to the main axis, lay the item out using the rules for
+  //    a box in an orthogonal flow. The flex base size is the item's
+  //    max-content main size.
+  if (flex_basis_is_content_or_depends_on_available_space &&
+      main_direction_is_horizontal_ && !main_space) {
+    flex_base_size_ = box()->width();
+    return;
+  }
+
+  // E. Otherwise, size the item into the available space using its used flex
+  //    basis in place of its main size, treating a value of content as
+  //    max-content. If a cross size is needed to determine the main size (e.g.
+  //    when the flex item's main size is in its block axis) and the flex item's
+  //    cross size is auto and not definite, in this calculation use fit-content
+  //    as the flex item's cross size. The flex base size is the item's
+  //    resulting main size.
+  // TODO: handle 'if (!main_direction_is_horizontal)' and auto
+  // height, see above.
+  flex_base_size_ =
+      main_direction_is_horizontal_ ? box()->width() : box()->height();
+}
+
+void FlexItem::DetermineHypotheticalMainSize(
+    const SizeLayoutUnit& available_space) {
+  // The hypothetical main size is the item's flex base size clamped
+  // according to its used min and max main sizes.
+  base::Optional<LayoutUnit> maybe_min_main_size =
+      GetUsedMinMainAxisSizeIfNotAuto(available_space);
+  LayoutUnit main_size =
+      std::max(maybe_min_main_size.value_or(LayoutUnit()), flex_base_size());
+  base::Optional<LayoutUnit> maybe_max_main_size =
+      GetUsedMaxMainAxisSizeIfNotNone(available_space);
+  if (maybe_max_main_size) {
+    main_size = std::min(*maybe_max_main_size, main_size);
+  }
+  hypothetical_main_size_ = main_size;
+}
+
+base::Optional<LayoutUnit> FlexItem::GetContentBasedMinimumSize(
+    const SizeLayoutUnit& containing_block_size) const {
+  // Automatic Minimum Size of Flex Items.
+  //   https://www.w3.org/TR/css-flexbox-1/#min-size-auto
+
+  // If the item's computed main size property is definite, then the specified
+  // size suggestion is that size (clamped by its max main size property if
+  // it's definite). It is otherwise undefined.
+  //   https://www.w3.org/TR/css-flexbox-1/#specified-size-suggestion
+  base::Optional<LayoutUnit> specified_min_size_suggestion =
+      GetUsedMinMainAxisSizeIfNotAuto(containing_block_size);
+
+  base::Optional<LayoutUnit> specified_size_suggestion =
+      GetUsedMainAxisSizeIfNotAuto(containing_block_size);
+  if (specified_size_suggestion.has_value()) {
+    return specified_min_size_suggestion;
+  }
+
+  base::Optional<LayoutUnit> maybe_max_main_size =
+      GetUsedMaxMainAxisSizeIfNotNone(containing_block_size);
+  if (specified_min_size_suggestion.has_value() &&
+      maybe_max_main_size.has_value()) {
+    specified_min_size_suggestion =
+        std::min(*maybe_max_main_size, *specified_min_size_suggestion);
+  }
+
+  // The content size suggestion is the min-content size in the main axis,
+  // clamped by the max main size property if that is definite.
+  //   https://www.w3.org/TR/css-flexbox-1/#content-size-suggestion
+  base::Optional<LayoutUnit> content_size_suggestion;
+  if (OverflowIsVisible()) {
+    content_size_suggestion = GetContentBoxMainSize();
+    if (maybe_max_main_size.has_value()) {
+      content_size_suggestion =
+          std::min(*maybe_max_main_size, *content_size_suggestion);
+    }
+  }
+
+  if (!specified_min_size_suggestion.has_value()) {
+    // If the box has neither a specified size suggestion nor an aspect ratio,
+    // its content-based minimum size is the content size suggestion.
+    return content_size_suggestion;
+  } else {
+    if (content_size_suggestion.has_value()) {
+      // In general, the content-based minimum size of a flex item is the
+      // smaller of its content size suggestion and its specified size
+      // suggestion.
+      specified_min_size_suggestion =
+          std::min(*content_size_suggestion, *specified_min_size_suggestion);
+      return specified_min_size_suggestion;
+    }
+  }
+  return specified_min_size_suggestion;
+}
 
 }  // namespace layout
 }  // namespace cobalt
diff --git a/src/cobalt/layout/flex_item.h b/src/cobalt/layout/flex_item.h
index 8f12150..91d16bf 100644
--- a/src/cobalt/layout/flex_item.h
+++ b/src/cobalt/layout/flex_item.h
@@ -18,6 +18,7 @@
 #include <vector>
 
 #include "base/logging.h"
+#include "base/optional.h"
 #include "cobalt/layout/box.h"
 #include "cobalt/layout/layout_unit.h"
 
@@ -28,22 +29,23 @@
 class FlexItem {
  public:
   // Disallow Copy and Assign.
-  FlexItem(const FlexItem&) = delete;
+  explicit FlexItem(const FlexItem&) = delete;
   FlexItem& operator=(const FlexItem&) = delete;
-
-  // Default move constructor to make the class emplace constructible.
-  FlexItem(FlexItem&& that) = default;
+  explicit FlexItem(FlexItem&& that) = delete;
 
   virtual ~FlexItem() = default;
 
-  FlexItem(Box* box, LayoutUnit flex_base_size,
-           LayoutUnit hypothetical_main_size);
+  FlexItem(Box* box, bool main_direction_is_horizontal);
 
-  static std::unique_ptr<FlexItem> Create(bool main_direction_is_horizontal_,
-                                          Box* box, LayoutUnit flex_base_size,
-                                          LayoutUnit hypothetical_main_size);
+  static std::unique_ptr<FlexItem> Create(Box* box,
+                                          bool main_direction_is_horizontal);
 
   Box* box() const { return box_; }
+  const scoped_refptr<const cssom::CSSComputedStyleData>& computed_style()
+      const {
+    return box()->computed_style();
+  }
+
   LayoutUnit flex_base_size() const { return flex_base_size_; }
   LayoutUnit hypothetical_main_size() const { return hypothetical_main_size_; }
 
@@ -76,57 +78,79 @@
   const scoped_refptr<cobalt::cssom::PropertyValue>&
   GetUsedJustifyContentPropertyValue();
 
+  // Determine the flex base size.
+  //   https://www.w3.org/TR/css-flexbox-1/#flex-base-size
+  void DetermineFlexBaseSize(const LayoutParams& layout_params,
+                             const base::Optional<LayoutUnit>& main_space,
+                             bool container_shrink_to_fit_width_forced);
+
+  // Determine the hypothetical main size.
+  //   https://www.w3.org/TR/css-flexbox-1/#hypothetical-main-size
+  void DetermineHypotheticalMainSize(const SizeLayoutUnit& available_space);
+
+  base::Optional<LayoutUnit> GetContentBasedMinimumSize(
+      const SizeLayoutUnit& containing_block_size) const;
+
   // Return the size difference between the content and margin box on the main
   // axis.
-  virtual LayoutUnit GetContentToMarginMainAxis() = 0;
+  virtual LayoutUnit GetContentToMarginMainAxis() const = 0;
 
   // Return the size difference between the content and margin box on the cross
   // axis.
-  virtual LayoutUnit GetContentToMarginCrossAxis() = 0;
+  virtual LayoutUnit GetContentToMarginCrossAxis() const = 0;
+
+  // Return the used style for the size in the main axis.
+  virtual base::Optional<LayoutUnit> GetUsedMainAxisSizeIfNotAuto(
+      const SizeLayoutUnit& containing_block_size) const = 0;
 
   // Return the used style for the min size in the main axis.
-  virtual LayoutUnit GetUsedMinMainAxisSize(
-      const SizeLayoutUnit& containing_block_size) = 0;
+  virtual base::Optional<LayoutUnit> GetUsedMinMainAxisSizeIfNotAuto(
+      const SizeLayoutUnit& containing_block_size) const = 0;
 
   // Return the used style for the min size in the cross axis.
-  virtual LayoutUnit GetUsedMinCrossAxisSize(
-      const SizeLayoutUnit& containing_block_size) = 0;
+  virtual base::Optional<LayoutUnit> GetUsedMinCrossAxisSizeIfNotAuto(
+      const SizeLayoutUnit& containing_block_size) const = 0;
 
   // Return the used style for the max size in the main axis.
   virtual base::Optional<LayoutUnit> GetUsedMaxMainAxisSizeIfNotNone(
-      const SizeLayoutUnit& containing_block_size) = 0;
+      const SizeLayoutUnit& containing_block_size) const = 0;
 
   // Return the used style for the max size in the cross axis.
   virtual base::Optional<LayoutUnit> GetUsedMaxCrossAxisSizeIfNotNone(
-      const SizeLayoutUnit& containing_block_size) = 0;
+      const SizeLayoutUnit& containing_block_size) const = 0;
 
   // Determine the hypothetical cross size.
-  // https://www.w3.org/TR/css-flexbox-1/#algo-cross-item
+  //   https://www.w3.org/TR/css-flexbox-1/#algo-cross-item
   virtual void DetermineHypotheticalCrossSize(
       const LayoutParams& layout_params) = 0;
 
-  virtual LayoutUnit GetMarginBoxMainSize() = 0;
-  virtual LayoutUnit GetMarginBoxCrossSize() = 0;
+  virtual LayoutUnit GetContentBoxMainSize() const = 0;
+  virtual LayoutUnit GetMarginBoxMainSize() const = 0;
+  virtual LayoutUnit GetMarginBoxCrossSize() const = 0;
 
   // Return true if the computed cross axis size is auto.
-  virtual bool CrossSizeIsAuto() = 0;
+  virtual bool CrossSizeIsAuto() const = 0;
   // Return true if the margin at the main axis start is auto.
-  virtual bool MarginMainStartIsAuto() = 0;
+  virtual bool MarginMainStartIsAuto() const = 0;
   // Return true if the margin at the main axis end is auto.
-  virtual bool MarginMainEndIsAuto() = 0;
+  virtual bool MarginMainEndIsAuto() const = 0;
   // Return true if the margin at the cross axis start is auto.
-  virtual bool MarginCrossStartIsAuto() = 0;
+  virtual bool MarginCrossStartIsAuto() const = 0;
   // Return true if the margin at the cross axis end is auto.
-  virtual bool MarginCrossEndIsAuto() = 0;
+  virtual bool MarginCrossEndIsAuto() const = 0;
 
   virtual void SetCrossSize(LayoutUnit cross_size) = 0;
   virtual void SetMainAxisStart(LayoutUnit position) = 0;
   virtual void SetCrossAxisStart(LayoutUnit position) = 0;
 
  private:
+  // Return true if the overflow is visible
+  bool OverflowIsVisible() const;
+
   Box* const box_ = nullptr;
-  const LayoutUnit flex_base_size_ = LayoutUnit();
-  const LayoutUnit hypothetical_main_size_ = LayoutUnit();
+  const bool main_direction_is_horizontal_;
+  LayoutUnit flex_base_size_ = LayoutUnit();
+  LayoutUnit hypothetical_main_size_ = LayoutUnit();
 
   LayoutUnit target_main_size_ = LayoutUnit();
   LayoutUnit flex_space_ = LayoutUnit();
@@ -136,6 +160,19 @@
   bool min_violation_ = false;
 };
 
+#ifdef COBALT_BOX_DUMP_ENABLED
+
+inline std::ostream& operator<<(std::ostream& stream, const FlexItem& item) {
+  stream << "flex_base_size= " << item.flex_base_size()
+         << " hypothetical_main_size = " << item.hypothetical_main_size()
+         << " target_main_size = " << item.target_main_size()
+         << " flex_space =" << item.flex_space() << "  box " << *item.box()
+         << " flex_factor = " << item.flex_factor();
+  return stream;
+}
+
+#endif  // COBALT_BOX_DUMP_ENABLED
+
 }  // namespace layout
 }  // namespace cobalt
 
diff --git a/src/cobalt/layout/flex_line.cc b/src/cobalt/layout/flex_line.cc
index 87d2f12..124099a 100644
--- a/src/cobalt/layout/flex_line.cc
+++ b/src/cobalt/layout/flex_line.cc
@@ -35,35 +35,22 @@
   items_outer_main_size_ = LayoutUnit(0);
 }
 
-bool FlexLine::TryAddItem(Box* box, LayoutUnit flex_base_size,
-                          LayoutUnit hypothetical_main_size) {
-  auto item = FlexItem::Create(main_direction_is_horizontal_, box,
-                               flex_base_size, hypothetical_main_size);
-
+bool FlexLine::CanAddItem(const FlexItem& item) const {
   LayoutUnit outer_main_size =
-      hypothetical_main_size + item->GetContentToMarginMainAxis();
-
+      item.hypothetical_main_size() + item.GetContentToMarginMainAxis();
   LayoutUnit next_main_size = items_outer_main_size_ + outer_main_size;
-
   if (!items_.empty() && next_main_size > main_size_) {
     return false;
   }
-
-  items_outer_main_size_ = next_main_size;
-  items_.emplace_back(item.release());
   return true;
 }
 
-void FlexLine::AddItem(Box* box, LayoutUnit flex_base_size,
-                       LayoutUnit hypothetical_main_size) {
-  auto item = FlexItem::Create(main_direction_is_horizontal_, box,
-                               flex_base_size, hypothetical_main_size);
-
+void FlexLine::AddItem(std::unique_ptr<FlexItem>&& item) {
   LayoutUnit outer_main_size =
-      hypothetical_main_size + item->GetContentToMarginMainAxis();
+      item->hypothetical_main_size() + item->GetContentToMarginMainAxis();
 
   items_outer_main_size_ += outer_main_size;
-  items_.emplace_back(item.release());
+  items_.emplace_back(std::move(item));
 }
 
 void FlexLine::ResolveFlexibleLengthsAndCrossSize() {
@@ -91,13 +78,22 @@
     //   greater than its hypothetical main size.
     // - if using the flex shrink factor: any item that has a flex base size
     //   smaller than its hypothetical main size.
+    LayoutUnit hypothetical_main_size = item->hypothetical_main_size();
+
     if (0 == item->flex_factor() ||
         (flex_factor_grow_ &&
-         (item->flex_base_size() > item->hypothetical_main_size())) ||
+         (item->flex_base_size() > hypothetical_main_size)) ||
         (!flex_factor_grow_ &&
-         (item->flex_base_size() < item->hypothetical_main_size()))) {
+         (item->flex_base_size() < hypothetical_main_size))) {
       // Freeze, setting its target main size to its hypothetical main size.
-      item->set_target_main_size(item->hypothetical_main_size());
+      base::Optional<LayoutUnit> content_based_minimum_size =
+          item->GetContentBasedMinimumSize(
+              layout_params_.containing_block_size);
+      if (content_based_minimum_size.has_value()) {
+        hypothetical_main_size =
+            std::max(hypothetical_main_size, *content_based_minimum_size);
+      }
+      item->set_target_main_size(hypothetical_main_size);
 
       // 3. Calculate initial free space.
       // For frozen items, use their outer target main size;
@@ -149,7 +145,10 @@
           initial_free_space * unfrozen_flex_factor_sum;
       // If the magnitude of this value is less than the magnitude of the
       // remaining free space, use this as the remaining free space.
-      if (free_space_magnitude < remaining_free_space) {
+      if ((free_space_magnitude >= LayoutUnit() &&
+           free_space_magnitude < remaining_free_space) ||
+          (free_space_magnitude < LayoutUnit() &&
+           free_space_magnitude > remaining_free_space)) {
         remaining_free_space = free_space_magnitude;
       }
     }
@@ -190,15 +189,22 @@
     LayoutUnit unclamped_size = LayoutUnit();
     LayoutUnit clamped_size = LayoutUnit();
     for (auto& item : flexible_items) {
-      LayoutUnit used_min_space =
-          item->GetUsedMinMainAxisSize(layout_params_.containing_block_size);
+      base::Optional<LayoutUnit> maybe_used_min_space;
+      if (flex_factor_grow_) {
+        maybe_used_min_space = item->GetUsedMinMainAxisSizeIfNotAuto(
+            layout_params_.containing_block_size);
+      } else {
+        maybe_used_min_space = item->GetContentBasedMinimumSize(
+            layout_params_.containing_block_size);
+      }
       base::Optional<LayoutUnit> used_max_space =
           item->GetUsedMaxMainAxisSizeIfNotNone(
               layout_params_.containing_block_size);
 
       unclamped_size += item->target_main_size();
-      if (item->target_main_size() < used_min_space) {
-        item->set_target_main_size(used_min_space);
+      if (maybe_used_min_space &&
+          (item->target_main_size() < *maybe_used_min_space)) {
+        item->set_target_main_size(*maybe_used_min_space);
         item->set_min_violation(true);
       } else if (used_max_space && item->target_main_size() > *used_max_space) {
         item->set_target_main_size(*used_max_space);
@@ -262,7 +268,6 @@
   // Algorithm for Calculate the cross size of each flex line.
   //   https://www.w3.org/TR/css-flexbox-1/#algo-cross-line
 
-  LayoutUnit max_baseline_to_top = LayoutUnit();
   LayoutUnit max_baseline_to_bottom = LayoutUnit();
   LayoutUnit max_hypothetical_cross_size = LayoutUnit();
   for (auto& item : items_) {
@@ -277,15 +282,13 @@
       // hypothetical outer cross-start edge,
       LayoutUnit baseline_to_top =
           item->box()->GetBaselineOffsetFromTopMarginEdge();
-      if (baseline_to_top > max_baseline_to_top) {
-        max_baseline_to_top = baseline_to_top;
-      }
+      max_baseline_to_top_ = std::max(
+          max_baseline_to_top_.value_or(LayoutUnit()), baseline_to_top);
       // and the largest of the distances between each item's baseline and its
       // hypothetical outer cross-end edge,
       LayoutUnit baseline_to_bottom = item->box()->height() - baseline_to_top;
-      if (baseline_to_bottom > max_baseline_to_bottom) {
-        max_baseline_to_bottom = baseline_to_bottom;
-      }
+      max_baseline_to_bottom =
+          std::max(max_baseline_to_bottom, baseline_to_bottom);
     } else {
       // 2. Among all the items not collected by the previous step, find the
       // largest outer hypothetical cross size.
@@ -297,7 +300,7 @@
   }
   // ... and sum these two values.
   LayoutUnit max_baseline_cross_size =
-      max_baseline_to_top + max_baseline_to_bottom;
+      max_baseline_to_top_.value_or(LayoutUnit()) + max_baseline_to_bottom;
 
   // 3. The used cross-size of the flex line is the largest of the numbers
   // found in the previous two steps and zero.
@@ -307,40 +310,34 @@
 void FlexLine::DetermineUsedCrossSizes(LayoutUnit container_cross_size) {
   // 11. Determine the used cross size of each flex item->
   //   https://www.w3.org/TR/css-flexbox-1/#algo-stretch
-  if (main_direction_is_horizontal_) {
-    SizeLayoutUnit containing_block_size(LayoutUnit(), container_cross_size);
-    for (auto& item : items_) {
-      // If a flex item has align-self: stretch,
-      // its computed cross size property is auto,
-      // and neither of its cross-axis margins are auto,
-      if (item->GetUsedAlignSelfPropertyValue() ==
-              cssom::KeywordValue::GetStretch() &&
-          item->CrossSizeIsAuto() && !item->MarginCrossStartIsAuto() &&
-          !item->MarginCrossEndIsAuto()) {
-        // The used outer cross size is the used cross size of its flex line,
-        // clamped according to the item's used min and max cross sizes.
-        LayoutUnit cross_size =
-            cross_size_ - item->GetContentToMarginCrossAxis();
-        LayoutUnit min_cross_size =
-            item->GetUsedMinMainAxisSize(containing_block_size);
-        if (min_cross_size > cross_size) {
-          cross_size = min_cross_size;
-        }
-        base::Optional<LayoutUnit> max_cross_size =
-            item->GetUsedMaxCrossAxisSizeIfNotNone(containing_block_size);
-        if (max_cross_size && *max_cross_size < cross_size) {
-          cross_size = *max_cross_size;
-        }
-        item->SetCrossSize(cross_size);
-
-        // TODO: If the flex item has align-self: stretch, redo layout for its
-        // contents, treating this used size as its definite cross size so that
-        // percentage-sized children can be resolved.
+  SizeLayoutUnit containing_block_size(LayoutUnit(), container_cross_size);
+  for (auto& item : items_) {
+    // If a flex item has align-self: stretch,
+    // its computed cross size property is auto,
+    // and neither of its cross-axis margins are auto,
+    if (item->GetUsedAlignSelfPropertyValue() ==
+            cssom::KeywordValue::GetStretch() &&
+        item->CrossSizeIsAuto() && !item->MarginCrossStartIsAuto() &&
+        !item->MarginCrossEndIsAuto()) {
+      // The used outer cross size is the used cross size of its flex line,
+      // clamped according to the item's used min and max cross sizes.
+      LayoutUnit cross_size = cross_size_ - item->GetContentToMarginCrossAxis();
+      base::Optional<LayoutUnit> min_cross_size =
+          item->GetUsedMinCrossAxisSizeIfNotAuto(containing_block_size);
+      if (min_cross_size && (*min_cross_size > cross_size)) {
+        cross_size = *min_cross_size;
       }
+      base::Optional<LayoutUnit> max_cross_size =
+          item->GetUsedMaxCrossAxisSizeIfNotNone(containing_block_size);
+      if (max_cross_size && *max_cross_size < cross_size) {
+        cross_size = *max_cross_size;
+      }
+      item->SetCrossSize(cross_size);
+
+      // TODO: If the flex item has align-self: stretch, redo layout for its
+      // contents, treating this used size as its definite cross size so that
+      // percentage-sized children can be resolved.
     }
-  } else {
-    // TODO: implement this for column flex containers.
-    NOTIMPLEMENTED() << "Column flex boxes not yet implemented.";
   }
 }
 
@@ -358,12 +355,6 @@
   // 12. Distribute any remaining free space.
   //   https://www.w3.org/TR/css-flexbox-1/#algo-main-align
 
-  // TODO implement for row-reverse, column, and column-reverse.
-  if (!main_direction_is_horizontal_) {
-    // TODO: implement this for column flex containers.
-    NOTIMPLEMENTED() << "Column flex boxes not yet implemented.";
-  }
-
   // If the remaining free space is positive and at least one main-axis margin
   // on this line is auto, distribute the free space equally among these
   // margins.
@@ -377,8 +368,8 @@
     auto_margins[margin_idx++] = auto_main_end;
     auto_margin_count += (auto_main_start ? 1 : 0) + (auto_main_end ? 1 : 0);
   }
+  LayoutUnit leftover_free_space = main_size_ - items_outer_main_size_;
   if (auto_margin_count > 0) {
-    LayoutUnit leftover_free_space = main_size_ - items_outer_main_size_;
     LayoutUnit free_space_between = leftover_free_space / auto_margin_count;
 
     margin_idx = 0;
@@ -400,9 +391,16 @@
   const scoped_refptr<cobalt::cssom::PropertyValue>& justify_content =
       items_.front()->GetUsedJustifyContentPropertyValue();
 
-  if (justify_content == cssom::KeywordValue::GetFlexStart()) {
+  bool leftover_free_space_is_negative = leftover_free_space < LayoutUnit();
+
+  if (justify_content == cssom::KeywordValue::GetFlexStart() ||
+      (leftover_free_space_is_negative &&
+       justify_content == cssom::KeywordValue::GetSpaceBetween())) {
     // Flex items are packed toward the start of the line.
     //   https://www.w3.org/TR/css-flexbox-1/#valdef-justify-content-flex-start
+    // If the leftover free-space is negative, space-between is identical to
+    // flex-start.
+    //   https://www.w3.org/TR/css-flexbox-1/#valdef-justify-content-space-between
     LayoutUnit pos = LayoutUnit();
     for (auto& item : items_) {
       LayoutUnit main_size = item->GetMarginBoxMainSize();
@@ -420,10 +418,15 @@
       pos -= main_size;
       SetMainAxisPosition(pos, item.get());
     }
-  } else if (justify_content == cssom::KeywordValue::GetCenter()) {
+  } else if (justify_content == cssom::KeywordValue::GetCenter() ||
+             (leftover_free_space_is_negative &&
+              justify_content == cssom::KeywordValue::GetSpaceAround())) {
     // Flex items are packed toward the center of the line.
     //   https://www.w3.org/TR/css-flexbox-1/#valdef-justify-content-center
-    LayoutUnit pos = (main_size_ - items_outer_main_size_) / 2;
+    // If the leftover free-space is negative, space-around is identical to
+    // center.
+    //   https://www.w3.org/TR/css-flexbox-1/#valdef-justify-content-space-around
+    LayoutUnit pos = leftover_free_space / 2;
     for (auto& item : items_) {
       LayoutUnit main_size = item->GetMarginBoxMainSize();
       SetMainAxisPosition(pos, item.get());
@@ -432,7 +435,6 @@
   } else if (justify_content == cssom::KeywordValue::GetSpaceBetween()) {
     // Flex items are evenly distributed in the line.
     //   https://www.w3.org/TR/css-flexbox-1/#valdef-justify-content-space-between
-    LayoutUnit leftover_free_space = main_size_ - items_outer_main_size_;
     LayoutUnit free_space_between =
         (items_.size() < 2)
             ? LayoutUnit()
@@ -447,7 +449,6 @@
     // Flex items are evenly distributed in the line, with half-size spaces on
     // either end.
     //   https://www.w3.org/TR/css-flexbox-1/#valdef-justify-content-space-around
-    LayoutUnit leftover_free_space = main_size_ - items_outer_main_size_;
     LayoutUnit free_space_between =
         leftover_free_space / static_cast<int>(items_.size());
     LayoutUnit free_space_before = free_space_between / 2;
@@ -465,11 +466,6 @@
 }
 
 void FlexLine::DoCrossAxisAlignment(LayoutUnit line_cross_axis_start) {
-  if (!main_direction_is_horizontal_) {
-    NOTIMPLEMENTED() << "Column flex boxes not yet implemented.";
-  }
-
-  line_cross_axis_start_ = line_cross_axis_start;
   // Algorithm for cross axis alignment:
   //   https://www.w3.org/TR/css-flexbox-1/#cross-alignment
   // 13. Resolve cross-axis auto margins.
@@ -494,6 +490,11 @@
       } else if (align_self == cssom::KeywordValue::GetCenter()) {
         cross_axis_start = (cross_size_ - cross_size) / 2;
       } else if (align_self == cssom::KeywordValue::GetBaseline()) {
+        if (main_direction_is_horizontal_ && max_baseline_to_top_.has_value()) {
+          LayoutUnit baseline_to_top =
+              item->box()->GetBaselineOffsetFromTopMarginEdge();
+          cross_axis_start = *max_baseline_to_top_ - baseline_to_top;
+        }
       } else {
         DCHECK((align_self == cssom::KeywordValue::GetFlexStart()) ||
                (align_self == cssom::KeywordValue::GetStretch()));
@@ -504,14 +505,15 @@
 }
 
 LayoutUnit FlexLine::GetBaseline() {
-  // TODO: Complete implementation of flex container baselines.
-  //   https://www.w3.org/TR/css-flexbox-1/#flex-baselines
-
-  LayoutUnit baseline = LayoutUnit();
-  if (!items_.empty()) {
-    baseline = items_.front()->box()->GetBaselineOffsetFromTopMarginEdge();
+  if (max_baseline_to_top_.has_value()) {
+    return *max_baseline_to_top_;
   }
-  return line_cross_axis_start_ + baseline;
+  LayoutUnit baseline = cross_size_;
+  if (!items_.empty()) {
+    Box* box = items_.front()->box();
+    baseline = box->top() + box->GetBaselineOffsetFromTopMarginEdge();
+  }
+  return baseline;
 }
 
 }  // namespace layout
diff --git a/src/cobalt/layout/flex_line.h b/src/cobalt/layout/flex_line.h
index 4d4a9ee..1cca9e5 100644
--- a/src/cobalt/layout/flex_line.h
+++ b/src/cobalt/layout/flex_line.h
@@ -15,9 +15,11 @@
 #ifndef COBALT_LAYOUT_FLEX_LINE_H_
 #define COBALT_LAYOUT_FLEX_LINE_H_
 
+#include <memory>
 #include <vector>
 
 #include "base/logging.h"
+#include "base/optional.h"
 #include "cobalt/layout/box.h"
 #include "cobalt/layout/flex_item.h"
 #include "cobalt/layout/layout_unit.h"
@@ -34,14 +36,12 @@
   FlexLine(const LayoutParams& layout_params, bool main_direction_is_horizontal,
            bool direction_is_reversed, LayoutUnit main_size);
 
-  // Attempt to add the item to the line. Returns true if the box was
-  // added to the line.
-  bool TryAddItem(Box* box, LayoutUnit flex_base_size,
-                  LayoutUnit hypothetical_main_size);
+  // Return whether the item to can be added to the line. Returns false if the
+  // item does not fit.
+  bool CanAddItem(const FlexItem& item) const;
 
   // Add the item to the line.
-  void AddItem(Box* box, LayoutUnit flex_base_size,
-               LayoutUnit hypothetical_main_size);
+  void AddItem(std::unique_ptr<FlexItem>&& item);
 
   void ResolveFlexibleLengthsAndCrossSize();
   void CalculateCrossSize();
@@ -68,10 +68,10 @@
 
   bool flex_factor_grow_;
   LayoutUnit items_outer_main_size_;
-  LayoutUnit line_cross_axis_start_;
   std::vector<std::unique_ptr<FlexItem>> items_;
 
   LayoutUnit cross_size_;
+  base::Optional<LayoutUnit> max_baseline_to_top_;
 };
 
 }  // namespace layout
diff --git a/src/cobalt/layout/intersection_observer_target.cc b/src/cobalt/layout/intersection_observer_target.cc
index 19fd041..24741e2 100644
--- a/src/cobalt/layout/intersection_observer_target.cc
+++ b/src/cobalt/layout/intersection_observer_target.cc
@@ -17,6 +17,7 @@
 #include <algorithm>
 #include <vector>
 
+#include "base/trace_event/trace_event.h"
 #include "cobalt/cssom/computed_style_utils.h"
 #include "cobalt/cssom/keyword_value.h"
 #include "cobalt/layout/box.h"
@@ -29,6 +30,9 @@
 
 void IntersectionObserverTarget::UpdateIntersectionObservationsForTarget(
     ContainerBox* target_box) {
+  TRACE_EVENT0(
+      "cobalt::layout",
+      "IntersectionObserverTarget::UpdateIntersectionObservationsForTarget()");
   // Walk up the containing block chain looking for the box referencing the
   // IntersectionObserverRoot corresponding to this IntersectionObserverTarget.
   // Skip further processing for the target if it is not a descendant of the
@@ -64,16 +68,14 @@
   // Let intersectionArea be intersectionRect's area.
   float intersection_area = intersection_rect.size().GetArea();
 
-  // Let isIntersecting be true if targetRect and rootBounds intersect or are
-  // edge-adjacent, even if the intersection has zero area (because rootBounds
-  // or targetRect have zero area); otherwise, let isIntersecting be false.
-  bool is_intersecting =
-      intersection_rect.width() != 0 || intersection_rect.height() != 0;
-
   // If targetArea is non-zero, let intersectionRatio be intersectionArea
   // divided by targetArea. Otherwise, let intersectionRatio be 1 if
-  // isIntersecting is true, or 0 if isIntersecting is false.
-  float intersection_ratio = is_intersecting ? 1.0f : 0.0f;
+  // targetRect and rootBounds are edge-adjacent (in the case that targetRect or
+  // rootbounds have zero area), and 0 otherwise.
+  float intersection_ratio =
+      (intersection_rect.width() != 0 || intersection_rect.height() != 0)
+          ? 1.0f
+          : 0.0f;
   if (target_area != 0) {
     intersection_ratio = intersection_area / target_area;
   }
@@ -92,6 +94,9 @@
     }
   }
 
+  // Set isIntersecting to true if |threshold_index| > 0, and false otherwise.
+  bool is_intersecting = threshold_index > 0;
+
   // If thresholdIndex does not equal previousThresholdIndex or if
   // isIntersecting does not equal previousIsIntersecting, queue an
   // IntersectionObserverEntry, passing in observer, time, rootBounds,
diff --git a/src/cobalt/layout/replaced_box.cc b/src/cobalt/layout/replaced_box.cc
index b5b3dac..3d2a447 100644
--- a/src/cobalt/layout/replaced_box.cc
+++ b/src/cobalt/layout/replaced_box.cc
@@ -449,12 +449,16 @@
 
     base::Optional<LayoutUnit> maybe_max_width = GetUsedMaxWidthIfNotNone(
         computed_style(), layout_params.containing_block_size, NULL);
-    LayoutUnit min_width = GetUsedMinWidth(
-        computed_style(), layout_params.containing_block_size, NULL);
+    LayoutUnit min_width =
+        GetUsedMinWidthIfNotAuto(computed_style(),
+                                 layout_params.containing_block_size, NULL)
+            .value_or(LayoutUnit());
     base::Optional<LayoutUnit> maybe_max_height = GetUsedMaxHeightIfNotNone(
         computed_style(), layout_params.containing_block_size);
     LayoutUnit min_height =
-        GetUsedMinHeight(computed_style(), layout_params.containing_block_size);
+        GetUsedMinHeightIfNotAuto(computed_style(),
+                                  layout_params.containing_block_size)
+            .value_or(LayoutUnit());
 
     // The values w and h stand for the results of the width and height
     // computations ignoring the 'min-width', 'min-height', 'max-width' and
diff --git a/src/cobalt/layout/used_style.cc b/src/cobalt/layout/used_style.cc
index 7a811f7..76ce1cc 100644
--- a/src/cobalt/layout/used_style.cc
+++ b/src/cobalt/layout/used_style.cc
@@ -1475,6 +1475,93 @@
   }
 };
 
+class UsedMinLengthProvider : public UsedLengthValueProvider {
+ public:
+  explicit UsedMinLengthProvider(LayoutUnit percentage_base)
+      : UsedLengthValueProvider(percentage_base) {}
+
+  void VisitKeyword(cssom::KeywordValue* keyword) override {
+    switch (keyword->value()) {
+      case cssom::KeywordValue::kAuto:
+        depends_on_containing_block_ = false;
+        // Leave |used_length_| in disengaged state to indicate that "auto"
+        // was the value.
+        break;
+
+      case cssom::KeywordValue::kAbsolute:
+      case cssom::KeywordValue::kAlternate:
+      case cssom::KeywordValue::kAlternateReverse:
+      case cssom::KeywordValue::kBackwards:
+      case cssom::KeywordValue::kBaseline:
+      case cssom::KeywordValue::kBlock:
+      case cssom::KeywordValue::kBoth:
+      case cssom::KeywordValue::kBottom:
+      case cssom::KeywordValue::kBreakWord:
+      case cssom::KeywordValue::kCenter:
+      case cssom::KeywordValue::kClip:
+      case cssom::KeywordValue::kCollapse:
+      case cssom::KeywordValue::kColumn:
+      case cssom::KeywordValue::kColumnReverse:
+      case cssom::KeywordValue::kContain:
+      case cssom::KeywordValue::kContent:
+      case cssom::KeywordValue::kCover:
+      case cssom::KeywordValue::kCurrentColor:
+      case cssom::KeywordValue::kCursive:
+      case cssom::KeywordValue::kEllipsis:
+      case cssom::KeywordValue::kEnd:
+      case cssom::KeywordValue::kEquirectangular:
+      case cssom::KeywordValue::kFantasy:
+      case cssom::KeywordValue::kFixed:
+      case cssom::KeywordValue::kFlex:
+      case cssom::KeywordValue::kFlexEnd:
+      case cssom::KeywordValue::kFlexStart:
+      case cssom::KeywordValue::kForwards:
+      case cssom::KeywordValue::kHidden:
+      case cssom::KeywordValue::kInfinite:
+      case cssom::KeywordValue::kInherit:
+      case cssom::KeywordValue::kInitial:
+      case cssom::KeywordValue::kInline:
+      case cssom::KeywordValue::kInlineBlock:
+      case cssom::KeywordValue::kInlineFlex:
+      case cssom::KeywordValue::kLeft:
+      case cssom::KeywordValue::kLineThrough:
+      case cssom::KeywordValue::kMiddle:
+      case cssom::KeywordValue::kMonoscopic:
+      case cssom::KeywordValue::kMonospace:
+      case cssom::KeywordValue::kNone:
+      case cssom::KeywordValue::kNoRepeat:
+      case cssom::KeywordValue::kNormal:
+      case cssom::KeywordValue::kNowrap:
+      case cssom::KeywordValue::kPre:
+      case cssom::KeywordValue::kPreLine:
+      case cssom::KeywordValue::kPreWrap:
+      case cssom::KeywordValue::kRelative:
+      case cssom::KeywordValue::kRepeat:
+      case cssom::KeywordValue::kReverse:
+      case cssom::KeywordValue::kRight:
+      case cssom::KeywordValue::kRow:
+      case cssom::KeywordValue::kRowReverse:
+      case cssom::KeywordValue::kSansSerif:
+      case cssom::KeywordValue::kScroll:
+      case cssom::KeywordValue::kSerif:
+      case cssom::KeywordValue::kSolid:
+      case cssom::KeywordValue::kSpaceAround:
+      case cssom::KeywordValue::kSpaceBetween:
+      case cssom::KeywordValue::kStart:
+      case cssom::KeywordValue::kStatic:
+      case cssom::KeywordValue::kStereoscopicLeftRight:
+      case cssom::KeywordValue::kStereoscopicTopBottom:
+      case cssom::KeywordValue::kStretch:
+      case cssom::KeywordValue::kTop:
+      case cssom::KeywordValue::kUppercase:
+      case cssom::KeywordValue::kVisible:
+      case cssom::KeywordValue::kWrap:
+      case cssom::KeywordValue::kWrapReverse:
+        NOTREACHED();
+    }
+  }
+};
+
 class UsedFlexBasisProvider : public UsedLengthValueProvider {
  public:
   explicit UsedFlexBasisProvider(LayoutUnit percentage_base)
@@ -1485,6 +1572,7 @@
   void VisitKeyword(cssom::KeywordValue* keyword) override {
     switch (keyword->value()) {
       case cssom::KeywordValue::kAuto: {
+        depends_on_containing_block_ = false;
         flex_basis_is_auto_ = true;
         // Leave |used_length_| in disengaged state to indicate that "auto"
         // was the value.
@@ -1691,29 +1779,29 @@
   return used_length_provider.used_length();
 }
 
-LayoutUnit GetUsedMinHeight(
+base::Optional<LayoutUnit> GetUsedMinHeightIfNotAuto(
     const scoped_refptr<const cssom::CSSComputedStyleData>& computed_style,
     const SizeLayoutUnit& containing_block_size) {
   // Percentages: refer to height of containing block.
   //   https://www.w3.org/TR/CSS21/visudet.html#propdef-max-height
-  UsedLengthValueProvider used_length_provider(containing_block_size.height());
+  UsedMinLengthProvider used_length_provider(containing_block_size.height());
   computed_style->min_height()->Accept(&used_length_provider);
-  return *used_length_provider.used_length();
+  return used_length_provider.used_length();
 }
 
-LayoutUnit GetUsedMinWidth(
+base::Optional<LayoutUnit> GetUsedMinWidthIfNotAuto(
     const scoped_refptr<const cssom::CSSComputedStyleData>& computed_style,
     const SizeLayoutUnit& containing_block_size,
     bool* width_depends_on_containing_block) {
   // Percentages: refer to width of containing block.
   //   https://www.w3.org/TR/CSS21/visudet.html#propdef-min-width
-  UsedLengthValueProvider used_length_provider(containing_block_size.width());
+  UsedMinLengthProvider used_length_provider(containing_block_size.width());
   computed_style->min_width()->Accept(&used_length_provider);
   if (width_depends_on_containing_block != NULL) {
     *width_depends_on_containing_block =
         used_length_provider.depends_on_containing_block();
   }
-  return *used_length_provider.used_length();
+  return used_length_provider.used_length();
 }
 
 base::Optional<LayoutUnit> GetUsedHeightIfNotAuto(
diff --git a/src/cobalt/layout/used_style.h b/src/cobalt/layout/used_style.h
index 6aede9f..f2a859a 100644
--- a/src/cobalt/layout/used_style.h
+++ b/src/cobalt/layout/used_style.h
@@ -395,10 +395,10 @@
     const scoped_refptr<const cssom::CSSComputedStyleData>& computed_style,
     const SizeLayoutUnit& containing_block_size,
     bool* width_depends_on_containing_block);
-LayoutUnit GetUsedMinHeight(
+base::Optional<LayoutUnit> GetUsedMinHeightIfNotAuto(
     const scoped_refptr<const cssom::CSSComputedStyleData>& computed_style,
     const SizeLayoutUnit& containing_block_size);
-LayoutUnit GetUsedMinWidth(
+base::Optional<LayoutUnit> GetUsedMinWidthIfNotAuto(
     const scoped_refptr<const cssom::CSSComputedStyleData>& computed_style,
     const SizeLayoutUnit& containing_block_size,
     bool* width_depends_on_containing_block);
diff --git a/src/cobalt/layout/used_style_test.cc b/src/cobalt/layout/used_style_test.cc
index 267fea5..f19fa22 100644
--- a/src/cobalt/layout/used_style_test.cc
+++ b/src/cobalt/layout/used_style_test.cc
@@ -526,7 +526,7 @@
   EXPECT_EQ(*used_width, LayoutUnit(25.0f));
 }
 
-TEST(UsedStyleTest, UsedMaxHeightNoneDependsOnContainingBlock) {
+TEST(UsedStyleTest, UsedMaxHeightNone) {
   scoped_refptr<cssom::MutableCSSComputedStyleData> computed_style(
       new cssom::MutableCSSComputedStyleData());
   computed_style->set_max_height(cssom::KeywordValue::GetNone());
@@ -598,14 +598,25 @@
   EXPECT_EQ(*used_max_width, LayoutUnit(25.0f));
 }
 
+TEST(UsedStyleTest, UsedMinHeightAuto) {
+  scoped_refptr<cssom::MutableCSSComputedStyleData> computed_style(
+      new cssom::MutableCSSComputedStyleData());
+  computed_style->set_min_height(cssom::KeywordValue::GetAuto());
+  SizeLayoutUnit containing_block_size(LayoutUnit(200.0f), LayoutUnit(400.0f));
+  auto used_min_height =
+      GetUsedMinHeightIfNotAuto(computed_style, containing_block_size);
+  EXPECT_FALSE(used_min_height);
+}
+
 TEST(UsedStyleTest, UsedMinHeightPercentDependsOnContainingBlockHeight) {
   scoped_refptr<cssom::MutableCSSComputedStyleData> computed_style(
       new cssom::MutableCSSComputedStyleData());
   computed_style->set_min_height(new cssom::PercentageValue(0.25f));
   SizeLayoutUnit containing_block_size(LayoutUnit(200.0f), LayoutUnit(400.0f));
   auto used_min_height =
-      GetUsedMinHeight(computed_style, containing_block_size);
-  EXPECT_EQ(used_min_height, LayoutUnit(100.0f));
+      GetUsedMinHeightIfNotAuto(computed_style, containing_block_size);
+  EXPECT_TRUE(used_min_height);
+  EXPECT_EQ(*used_min_height, LayoutUnit(100.0f));
 }
 
 TEST(UsedStyleTest, UsedMinHeightLengthValue) {
@@ -615,8 +626,21 @@
       new cssom::LengthValue(25.0f, cssom::kPixelsUnit));
   SizeLayoutUnit containing_block_size(LayoutUnit(200.0f), LayoutUnit(400.0f));
   auto used_min_height =
-      GetUsedMinHeight(computed_style, containing_block_size);
-  EXPECT_EQ(used_min_height, LayoutUnit(25.0f));
+      GetUsedMinHeightIfNotAuto(computed_style, containing_block_size);
+  EXPECT_TRUE(used_min_height);
+  EXPECT_EQ(*used_min_height, LayoutUnit(25.0f));
+}
+
+TEST(UsedStyleTest, UsedMinWidthAutoDoesNotDependOnContainingBlockWidth) {
+  scoped_refptr<cssom::MutableCSSComputedStyleData> computed_style(
+      new cssom::MutableCSSComputedStyleData());
+  computed_style->set_min_width(cssom::KeywordValue::GetAuto());
+  SizeLayoutUnit containing_block_size(LayoutUnit(200.0f), LayoutUnit(400.0f));
+  bool depends_on_containing_block = false;
+  auto used_min_width = GetUsedMinWidthIfNotAuto(
+      computed_style, containing_block_size, &depends_on_containing_block);
+  EXPECT_FALSE(depends_on_containing_block);
+  EXPECT_FALSE(used_min_width);
 }
 
 TEST(UsedStyleTest, UsedMinWidthPercentDependsOnContainingBlockWidth) {
@@ -625,10 +649,11 @@
   computed_style->set_min_width(new cssom::PercentageValue(0.25f));
   SizeLayoutUnit containing_block_size(LayoutUnit(200.0f), LayoutUnit(400.0f));
   bool depends_on_containing_block = false;
-  auto used_min_width = GetUsedMinWidth(computed_style, containing_block_size,
-                                        &depends_on_containing_block);
+  auto used_min_width = GetUsedMinWidthIfNotAuto(
+      computed_style, containing_block_size, &depends_on_containing_block);
   EXPECT_TRUE(depends_on_containing_block);
-  EXPECT_EQ(used_min_width, LayoutUnit(50.0f));
+  EXPECT_TRUE(used_min_width);
+  EXPECT_EQ(*used_min_width, LayoutUnit(50.0f));
 }
 
 TEST(UsedStyleTest, UsedMinWidthLengthValue) {
@@ -638,10 +663,11 @@
       new cssom::LengthValue(25.0f, cssom::kPixelsUnit));
   SizeLayoutUnit containing_block_size(LayoutUnit(200.0f), LayoutUnit(400.0f));
   bool depends_on_containing_block = false;
-  auto used_min_width = GetUsedMinWidth(computed_style, containing_block_size,
-                                        &depends_on_containing_block);
+  auto used_min_width = GetUsedMinWidthIfNotAuto(
+      computed_style, containing_block_size, &depends_on_containing_block);
   EXPECT_FALSE(depends_on_containing_block);
-  EXPECT_EQ(used_min_width, LayoutUnit(25.0f));
+  EXPECT_TRUE(used_min_width);
+  EXPECT_EQ(*used_min_width, LayoutUnit(25.0f));
 }
 
 TEST(UsedStyleTest, UsedHeightAutoDependsOnContainingBlock) {
diff --git a/src/cobalt/layout_tests/layout_benchmarks.cc b/src/cobalt/layout_tests/layout_benchmarks.cc
deleted file mode 100644
index c8fbb43..0000000
--- a/src/cobalt/layout_tests/layout_benchmarks.cc
+++ /dev/null
@@ -1,332 +0,0 @@
-// Copyright 2015 The Cobalt Authors. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include <memory>
-
-#include "base/strings/string_util.h"
-#include "base/synchronization/waitable_event.h"
-#include "cobalt/base/event_dispatcher.h"
-#include "cobalt/cssom/viewport_size.h"
-#include "cobalt/dom/benchmark_stat_names.h"
-#include "cobalt/layout/benchmark_stat_names.h"
-#include "cobalt/layout_tests/layout_snapshot.h"
-#include "cobalt/layout_tests/test_parser.h"
-#include "cobalt/math/size.h"
-#include "cobalt/renderer/pipeline.h"
-#include "cobalt/renderer/renderer_module.h"
-#include "cobalt/renderer/submission.h"
-#include "cobalt/system_window/system_window.h"
-#include "cobalt/trace_event/benchmark.h"
-#include "url/gurl.h"
-
-using cobalt::cssom::ViewportSize;
-
-namespace cobalt {
-namespace layout_tests {
-
-namespace {
-const int kViewportWidth = 1920;
-const int kViewportHeight = 1080;
-
-const ViewportSize kViewSize(kViewportWidth, kViewportHeight);
-
-// The RendererBenchmarkRunner sets up an environment where we can control
-// the number of benchmark samples we acquire from the renderer by counting
-// each time the renderer submit complete callback is made.  It also manages
-// the skipping of the first frame to avoid the first frame outlier.
-class RendererBenchmarkRunner {
- public:
-  RendererBenchmarkRunner()
-      : done_gathering_samples_(
-            base::WaitableEvent::ResetPolicy::MANUAL,
-            base::WaitableEvent::InitialState::NOT_SIGNALED),
-        system_window_(new system_window::SystemWindow(
-            &event_dispatcher_, kViewSize.width_height())) {
-    // Since we'd like to measure the renderer, we force it to rasterize each
-    // frame despite the fact that the render tree may not be changing.
-    renderer::RendererModule::Options renderer_options;
-    renderer_options.submit_even_if_render_tree_is_unchanged = true;
-    renderer_module_.emplace(system_window_.get(), renderer_options);
-  }
-
-  // Return the resource provider from the internal renderer so that it can
-  // be used during layout.
-  render_tree::ResourceProvider* GetResourceProvider() {
-    return renderer_module_->pipeline()->GetResourceProvider();
-  }
-
-  // Run the renderer benchmarks and perform the measurements.
-  void RunBenchmarks(const browser::WebModule::LayoutResults& layout_results,
-                     int samples_to_gather) {
-    // Initialize our per-RunBenchmarks() state.
-    samples_to_gather_ = samples_to_gather;
-    done_gathering_samples_.Reset();
-
-    renderer::Submission submission_with_callback(layout_results.render_tree,
-                                                  layout_results.layout_time);
-    submission_with_callback.on_rasterized_callbacks.emplace_back(base::Bind(
-        &RendererBenchmarkRunner::OnSubmitComplete, base::Unretained(this)));
-
-    renderer_module_->pipeline()->Submit(submission_with_callback);
-
-    done_gathering_samples_.Wait();
-
-    renderer_module_->pipeline()->Clear();
-  }
-
- private:
-  // Called whenever the renderer completes a frame submission.  This allows us
-  // to count how many frames have been submitted so we know when to stop (via
-  // the signaling of the done_gathering_samples_ event).
-  void OnSubmitComplete() {
-    --samples_to_gather_;
-
-    // We wait for samples_to_gather + 1 submits to complete because we actually
-    // want samples_to_gather, but we skipped the first submit.
-    if (samples_to_gather_ <= 0) {
-      done_gathering_samples_.Signal();
-    }
-  }
-
-  int samples_to_gather_;
-  base::WaitableEvent done_gathering_samples_;
-  base::EventDispatcher event_dispatcher_;
-
-  std::unique_ptr<system_window::SystemWindow> system_window_;
-  base::Optional<renderer::RendererModule> renderer_module_;
-};
-
-}  // namespace
-
-class LayoutBenchmark : public trace_event::Benchmark {
- public:
-  explicit LayoutBenchmark(const TestInfo& test_info);
-  ~LayoutBenchmark() override {}
-
-  void Experiment() override;
-  void AnalyzeTraceEvent(
-      const scoped_refptr<trace_event::EventParser::ScopedEvent>& event)
-      override;
-  std::vector<trace_event::Benchmark::Result> CompileResults() override;
-
- private:
-  typedef base::hash_map<std::string, double> IntermediateResultsMap;
-  typedef base::hash_map<std::string, std::vector<double> >
-      FinalResultsSampleMap;
-
-  void OnIterationComplete();
-  static std::string FilePathToBenchmarkName(const base::FilePath& filepath);
-
-  TestInfo test_info_;
-
-  // During each iteration, we accumulate intermediate results by *adding*
-  // task times together.  Only when the iteration is complete do we consider
-  // our result a sample.
-  IntermediateResultsMap intermediate_results_;
-
-  // A list of accumulated intermediate results.  The vectors in this map are
-  // pushed to at the end of each iteration.
-  FinalResultsSampleMap layout_samples_;
-  FinalResultsSampleMap renderer_samples_;
-
-  // Is this our first iteration?
-  bool first_iteration_;
-
-  // We setup the renderer benchmark runner first so that we can gain access
-  // to the resource provider and so that we can also benchmark the rendering
-  // of the layed out web pages.
-  RendererBenchmarkRunner renderer_benchmark_runner_;
-};
-
-LayoutBenchmark::LayoutBenchmark(const TestInfo& test_info)
-    : test_info_(test_info), first_iteration_(true) {
-  // Setup the name's benchmark based on the test entry file path.
-  set_name(FilePathToBenchmarkName(test_info_.base_file_path));
-  set_num_iterations(10, base::Bind(&LayoutBenchmark::OnIterationComplete,
-                                    base::Unretained(this)));
-
-  // Define the set of event names that we would like to watch for by
-  // initializing their map entries to the default constructed values (e.g.
-  // std::vector<double>()).
-  layout_samples_[layout::kBenchmarkStatLayout];
-  layout_samples_[dom::kBenchmarkStatUpdateSelectorTree];
-  layout_samples_[dom::kBenchmarkStatUpdateComputedStyles];
-  layout_samples_[layout::kBenchmarkStatBoxGeneration];
-  layout_samples_[layout::kBenchmarkStatUpdateCrossReferences];
-  layout_samples_[layout::kBenchmarkStatUpdateUsedSizes];
-  layout_samples_[layout::kBenchmarkStatRenderAndAnimate];
-  renderer_samples_["AnimateNode::Apply()"];
-  renderer_samples_["VisitRenderTree"];
-  renderer_samples_["Skia Flush"];
-}
-
-std::string LayoutBenchmark::FilePathToBenchmarkName(
-    const base::FilePath& filepath) {
-  std::vector<base::FilePath::StringType> components;
-  filepath.GetComponents(&components);
-
-  // Don't include the "benchmarks" directory as part of the benchmark name.
-  components.erase(components.begin());
-
-  return base::JoinString(components, "/");
-}
-
-void LayoutBenchmark::Experiment() {
-  base::MessageLoop message_loop(base::MessageLoop::TYPE_DEFAULT);
-
-  // We prepare a layout_results variable where we place the results from each
-  // layout.  We will then use the final layout_results as input to the renderer
-  // benchmark.
-  base::Optional<browser::WebModule::LayoutResults> layout_results;
-
-  ViewportSize viewport_size =
-      test_info_.viewport_size ? *test_info_.viewport_size : kViewSize;
-
-  // Set up a WebModule, load the URL and trigger layout to get layout benchmark
-  // results.
-  layout_results =
-      SnapshotURL(test_info_.url, viewport_size,
-                  renderer_benchmark_runner_.GetResourceProvider(),
-                  dom::ScreenshotManager::ProvideScreenshotFunctionCallback());
-
-  // Finally run the renderer benchmarks to acquire performance data on
-  // rendering.
-  renderer_benchmark_runner_.RunBenchmarks(*layout_results, 60);
-}
-
-namespace {
-
-// Return true if the event has an ancestor with the specified named event.
-bool HasAncestorEvent(
-    const scoped_refptr<trace_event::EventParser::ScopedEvent>& event,
-    const std::string& ancestor_event_string) {
-  scoped_refptr<trace_event::EventParser::ScopedEvent> ancestor_event =
-      event->parent();
-  while (ancestor_event) {
-    if (ancestor_event->name() == ancestor_event_string) {
-      break;
-    }
-    ancestor_event = ancestor_event->parent();
-  }
-
-  return ancestor_event.get() != NULL;
-}
-
-}  // namespace
-
-void LayoutBenchmark::AnalyzeTraceEvent(
-    const scoped_refptr<trace_event::EventParser::ScopedEvent>& event) {
-  // Check if this is a layout sample.
-  if (event->name() == layout::kBenchmarkStatNonMeasuredLayout) {
-    // If this is a layout that should not be measured, use that as a signal
-    // that we are measuring partial layout, and clear out all measured data
-    // so far and start fresh for the eventual measured layout.
-    intermediate_results_.clear();
-    return;
-  }
-
-  FinalResultsSampleMap::iterator found_layout =
-      layout_samples_.find(event->name());
-  if (found_layout != layout_samples_.end() &&
-      !HasAncestorEvent(event, layout::kBenchmarkStatNonMeasuredLayout)) {
-    if (!base::ContainsKey(intermediate_results_, found_layout->first)) {
-      intermediate_results_[found_layout->first] = 0;
-    }
-
-    double event_duration = event->in_scope_duration()->InSecondsF();
-    intermediate_results_[found_layout->first] += event_duration;
-
-    if (event->name() != layout::kBenchmarkStatLayout &&
-        !HasAncestorEvent(event, layout::kBenchmarkStatLayout)) {
-      // If the event (which we have specifically requested to include in
-      // the benchmark results) does not fall under the scope of the official
-      // layout event, artificially increase the tracked layout time to include
-      // it.  This way events can occur at any time, and the scoped layout
-      // event still gives us a way to measure unaccounted for time that we
-      // know is devoted to layout.
-      intermediate_results_[layout::kBenchmarkStatLayout] += event_duration;
-    }
-  }
-
-  FinalResultsSampleMap::iterator found_renderer =
-      renderer_samples_.find(event->name());
-  if (found_renderer != renderer_samples_.end()) {
-    found_renderer->second.push_back(event->in_scope_duration()->InSecondsF());
-  }
-}
-
-void LayoutBenchmark::OnIterationComplete() {
-  // Skip recording the results of the first iteration, since a few things
-  // may have been lazily initialized and we'd like to avoid recording that.
-  if (first_iteration_) {
-    for (FinalResultsSampleMap::iterator iter = renderer_samples_.begin();
-         iter != renderer_samples_.end(); ++iter) {
-      iter->second.clear();
-    }
-  } else {
-    // Save our finalized intermediate results into our finalized results, and
-    // then clear out our intermediate results for the next iteration.
-    for (FinalResultsSampleMap::iterator iter = layout_samples_.begin();
-         iter != layout_samples_.end(); ++iter) {
-      if (base::ContainsKey(intermediate_results_, iter->first)) {
-        iter->second.push_back(intermediate_results_[iter->first]);
-      }
-    }
-  }
-
-  first_iteration_ = false;
-  intermediate_results_.clear();
-}
-
-std::vector<trace_event::Benchmark::Result> LayoutBenchmark::CompileResults() {
-  std::vector<trace_event::Benchmark::Result> results;
-  for (FinalResultsSampleMap::iterator iter = layout_samples_.begin();
-       iter != layout_samples_.end(); ++iter) {
-    results.push_back(trace_event::Benchmark::Result(
-        iter->first + " in-scope duration in seconds", iter->second));
-  }
-  for (FinalResultsSampleMap::iterator iter = renderer_samples_.begin();
-       iter != renderer_samples_.end(); ++iter) {
-    results.push_back(trace_event::Benchmark::Result(
-        iter->first + " in-scope duration in seconds", iter->second));
-  }
-  return results;
-}
-
-class LayoutBenchmarkCreator : public trace_event::BenchmarkCreator {
- public:
-  std::vector<CreateBenchmarkFunction> GetBenchmarkCreators() override {
-    std::vector<CreateBenchmarkFunction> benchmarks;
-
-    std::vector<TestInfo> benchmark_infos = EnumerateLayoutTests("benchmarks");
-    for (std::vector<TestInfo>::const_iterator iter = benchmark_infos.begin();
-         iter != benchmark_infos.end(); ++iter) {
-      benchmarks.push_back(
-          base::Bind(&LayoutBenchmarkCreator::CreateLayoutBenchmark, *iter));
-    }
-
-    return benchmarks;
-  }
-
- private:
-  static std::unique_ptr<trace_event::Benchmark> CreateLayoutBenchmark(
-      const TestInfo& test_info) {
-    return std::unique_ptr<trace_event::Benchmark>(
-        new LayoutBenchmark(test_info));
-  }
-};
-LayoutBenchmarkCreator g_benchmark_creator;
-
-}  // namespace layout_tests
-}  // namespace cobalt
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/-9-kyTW8ZkZNDHQJ6FgpwQ/1.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/-9-kyTW8ZkZNDHQJ6FgpwQ/1.jpg
deleted file mode 100644
index fc5fc1c..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/-9-kyTW8ZkZNDHQJ6FgpwQ/1.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/4R8DWoMoI7CAwX8_LjQHig/1.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/4R8DWoMoI7CAwX8_LjQHig/1.jpg
deleted file mode 100644
index 0b1dda7..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/4R8DWoMoI7CAwX8_LjQHig/1.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/Egdi0XIXXZ-qJOFPf4JSKw/1.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/Egdi0XIXXZ-qJOFPf4JSKw/1.jpg
deleted file mode 100644
index 5abfe0e..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/Egdi0XIXXZ-qJOFPf4JSKw/1.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/F0pVplsI8R5kcAqgtoRqoA/1.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/F0pVplsI8R5kcAqgtoRqoA/1.jpg
deleted file mode 100644
index 429bdae..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/F0pVplsI8R5kcAqgtoRqoA/1.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/OpNcN46UbXVtpKMrmU4Abg/1.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/OpNcN46UbXVtpKMrmU4Abg/1.jpg
deleted file mode 100644
index 861caa9..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/OpNcN46UbXVtpKMrmU4Abg/1.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/YfdidRxbB8Qhf0Nx7ioOYw/1.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/YfdidRxbB8Qhf0Nx7ioOYw/1.jpg
deleted file mode 100644
index 75357d6..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/YfdidRxbB8Qhf0Nx7ioOYw/1.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/i-g4cjqGV7jvU8aeSuj0jQ/1.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/i-g4cjqGV7jvU8aeSuj0jQ/1.jpg
deleted file mode 100644
index e8b0b20..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/i-g4cjqGV7jvU8aeSuj0jQ/1.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/xAgnFbkxldX6YUEvdcNjnA/1.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/xAgnFbkxldX6YUEvdcNjnA/1.jpg
deleted file mode 100644
index 40edb65..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/xAgnFbkxldX6YUEvdcNjnA/1.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/0vEKItRNIb0/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/0vEKItRNIb0/hqdefault.jpg
deleted file mode 100644
index e686f50..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/0vEKItRNIb0/hqdefault.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/1dXVzBU5p-Q/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/1dXVzBU5p-Q/hqdefault.jpg
deleted file mode 100644
index e686f50..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/1dXVzBU5p-Q/hqdefault.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/2A07xMhKC6g/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/2A07xMhKC6g/hqdefault.jpg
deleted file mode 100644
index e686f50..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/2A07xMhKC6g/hqdefault.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/59_zMJRhFM0/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/59_zMJRhFM0/hqdefault.jpg
deleted file mode 100644
index e686f50..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/59_zMJRhFM0/hqdefault.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/8VstEBbwhnc/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/8VstEBbwhnc/hqdefault.jpg
deleted file mode 100644
index e686f50..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/8VstEBbwhnc/hqdefault.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/D-YPnDvTCmI/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/D-YPnDvTCmI/hqdefault.jpg
deleted file mode 100644
index e686f50..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/D-YPnDvTCmI/hqdefault.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/F50yjSws9gQ/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/F50yjSws9gQ/hqdefault.jpg
deleted file mode 100644
index e686f50..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/F50yjSws9gQ/hqdefault.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/GwzBLYGRj6c/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/GwzBLYGRj6c/hqdefault.jpg
deleted file mode 100644
index e686f50..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/GwzBLYGRj6c/hqdefault.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/LZoilVdo7Hw/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/LZoilVdo7Hw/hqdefault.jpg
deleted file mode 100644
index e686f50..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/LZoilVdo7Hw/hqdefault.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/M9WlASe5ThU/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/M9WlASe5ThU/hqdefault.jpg
deleted file mode 100644
index e686f50..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/M9WlASe5ThU/hqdefault.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/MODTYlzxY9U/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/MODTYlzxY9U/hqdefault.jpg
deleted file mode 100644
index e686f50..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/MODTYlzxY9U/hqdefault.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/RL7grUEo960/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/RL7grUEo960/hqdefault.jpg
deleted file mode 100644
index e686f50..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/RL7grUEo960/hqdefault.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/XilhAJZ2qxs/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/XilhAJZ2qxs/hqdefault.jpg
deleted file mode 100644
index e686f50..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/XilhAJZ2qxs/hqdefault.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/Z31LDqbhN8U/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/Z31LDqbhN8U/hqdefault.jpg
deleted file mode 100644
index e686f50..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/Z31LDqbhN8U/hqdefault.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/_TWbD3MKfMI/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/_TWbD3MKfMI/hqdefault.jpg
deleted file mode 100644
index e686f50..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/_TWbD3MKfMI/hqdefault.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/eOOyxSMI0aE/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/eOOyxSMI0aE/hqdefault.jpg
deleted file mode 100644
index e686f50..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/eOOyxSMI0aE/hqdefault.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/q14aPbvbvl8/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/q14aPbvbvl8/hqdefault.jpg
deleted file mode 100644
index e686f50..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/q14aPbvbvl8/hqdefault.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/qkKRkfZYhlE/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/qkKRkfZYhlE/hqdefault.jpg
deleted file mode 100644
index e686f50..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/qkKRkfZYhlE/hqdefault.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/qrZcKwcVwk8/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/qrZcKwcVwk8/hqdefault.jpg
deleted file mode 100644
index e686f50..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/qrZcKwcVwk8/hqdefault.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/rs-Ou-gjReQ/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/rs-Ou-gjReQ/hqdefault.jpg
deleted file mode 100644
index e686f50..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/rs-Ou-gjReQ/hqdefault.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/rtzlT78OEks/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/rtzlT78OEks/hqdefault.jpg
deleted file mode 100644
index e686f50..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/rtzlT78OEks/hqdefault.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/spC883rn6zk/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/spC883rn6zk/hqdefault.jpg
deleted file mode 100644
index e686f50..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/spC883rn6zk/hqdefault.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/tCehxI5a1y0/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/tCehxI5a1y0/hqdefault.jpg
deleted file mode 100644
index e686f50..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/tCehxI5a1y0/hqdefault.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/tnfPNYpi8rc/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/tnfPNYpi8rc/hqdefault.jpg
deleted file mode 100644
index e686f50..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/tnfPNYpi8rc/hqdefault.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/vvFHyFW_jFc/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/vvFHyFW_jFc/hqdefault.jpg
deleted file mode 100644
index e686f50..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/vvFHyFW_jFc/hqdefault.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/wNRUzu4fTgw/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/wNRUzu4fTgw/hqdefault.jpg
deleted file mode 100644
index e686f50..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/wNRUzu4fTgw/hqdefault.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/x5ZxRObLLzE/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/x5ZxRObLLzE/hqdefault.jpg
deleted file mode 100644
index e686f50..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/x5ZxRObLLzE/hqdefault.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/zzmrTdAtEu4/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/zzmrTdAtEu4/hqdefault.jpg
deleted file mode 100644
index e686f50..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/zzmrTdAtEu4/hqdefault.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/layout_tests.txt b/src/cobalt/layout_tests/testdata/benchmarks/layout_tests.txt
deleted file mode 100644
index c86c38e..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/layout_tests.txt
+++ /dev/null
@@ -1 +0,0 @@
-youtube-2015-q3-initial-layout:1920x1080
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/fonts/CutiveMono-Regular.woff b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/fonts/CutiveMono-Regular.woff
deleted file mode 100644
index 6ab1ca1..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/fonts/CutiveMono-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/fonts/DancingScript-Regular.woff b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/fonts/DancingScript-Regular.woff
deleted file mode 100644
index 71b2e76..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/fonts/DancingScript-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/fonts/Handlee-Regular.woff b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/fonts/Handlee-Regular.woff
deleted file mode 100644
index c8f2418..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/fonts/Handlee-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/fonts/MarcellusSC-Regular.woff b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/fonts/MarcellusSC-Regular.woff
deleted file mode 100644
index 1740d4f..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/fonts/MarcellusSC-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/fonts/PTM55FT.woff b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/fonts/PTM55FT.woff
deleted file mode 100644
index e7e96d1..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/fonts/PTM55FT.woff
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/fonts/PT_Sans-Caption-Web-Regular.woff b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/fonts/PT_Sans-Caption-Web-Regular.woff
deleted file mode 100644
index c0e6a2f..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/fonts/PT_Sans-Caption-Web-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/fonts/PT_Serif-Caption-Web-Regular.woff b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/fonts/PT_Serif-Caption-Web-Regular.woff
deleted file mode 100644
index f5599f7..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/fonts/PT_Serif-Caption-Web-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/app-prod.css b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/app-prod.css
deleted file mode 100644
index c78c202..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/app-prod.css
+++ /dev/null
@@ -1 +0,0 @@
-.icon-cast_off:before{content:"\00e675"}.icon-cast_on:before{content:"\00e676"}.icon-mr_meh_android:before{content:"\00e677"}.icon-settings-signin-android:before{content:"\00e678"}.icon-settings-signout-android:before{content:"\00e679"}.icon-roku-back:before{content:"\00e674"}.icon-hats-happy:before{content:"\00e66f"}.icon-hats-neutral:before{content:"\00e670"}.icon-hats-sad:before{content:"\00e671"}.icon-hats-very-happy:before{content:"\00e672"}.icon-hats-very-sad:before{content:"\00e673"}.icon-search-keyboard:before{content:"\00e66e"}.icon-multiaudio:before{content:"\00e62d"}.icon-settings-check:before{content:"\00e66d"}.icon-settings-uncheck:before{content:"\00e659"}.icon-popular:before{content:"\00e66c"}.icon-airplane:before{content:"\00e600"}.icon-back:before{content:"\00e601"}.icon-check:before{content:"\00e602"}.icon-chevron-single:before{content:"\00e603"}.icon-delete:before{content:"\00e604"}.icon-desktop-arrowkeys:before{content:"\00e605"}.icon-desktop-delete:before{content:"\00e606"}.icon-desktop-esc:before{content:"\00e607"}.icon-desktop-g:before{content:"\00e608"}.icon-desktop-s:before{content:"\00e609"}.icon-dislike:before{content:"\00e60a"}.icon-double-chevron-right:before{content:"\00e60b"}.icon-edit:before{content:"\00e60c"}.icon-education:before{content:"\00e60d"}.icon-ellipsis:before{content:"\00e60e"}.icon-entertainment:before{content:"\00e60f"}.icon-exit:before{content:"\00e610"}.icon-film:before{content:"\00e611"}.icon-flag:before{content:"\00e612"}.icon-gaming:before{content:"\00e613"}.icon-guide-history:before{content:"\00e614"}.icon-guide-my-subs:before{content:"\00e615"}.icon-guide-purchases:before{content:"\00e616"}.icon-guide-social:before{content:"\00e617"}.icon-guide-what-to-watch:before{content:"\00e618"}.icon-home:before{content:"\00e619"}.icon-hourglass:before{content:"\00e61a"}.icon-key-delete:before{content:"\00e61b"}.icon-key-globe:before{content:"\00e61c"}.icon-key-space-sm:before{content:"\00e61d"}.icon-key-space:before{content:"\00e61e"}.icon-like:before{content:"\00e61f"}.icon-lips:before{content:"\00e620"}.icon-logo-lozenge:before{content:"\00e621"}.icon-lol:before{content:"\00e622"}.icon-lozenge:before{content:"\00e623"}.icon-mix:before{content:"\00e624"}.icon-music:before{content:"\00e625"}.icon-news:before{content:"\00e626"}.icon-people:before{content:"\00e627"}.icon-pets:before{content:"\00e628"}.icon-player-3d:before{content:"\00e629"}.icon-player-annotations:before{content:"\00e62a"}.icon-player-closedcaptions:before{content:"\00e62b"}.icon-player-ff:before{content:"\00e62c"}.icon-player-HD-circle:before{content:"\00e651"}.icon-player-HD:before{content:"\00e62e"}.icon-player-info:before{content:"\00e62f"}.icon-player-instantreplay:before{content:"\00e630"}.icon-player-less:before{content:"\00e631"}.icon-player-more:before{content:"\00e632"}.icon-player-mute:before{content:"\00e633"}.icon-player-next:before{content:"\00e634"}.icon-player-pause:before{content:"\00e635"}.icon-player-play:before{content:"\00e636"}.icon-player-prev:before{content:"\00e637"}.icon-player-replay:before{content:"\00e638"}.icon-player-rew:before{content:"\00e639"}.icon-player-settings:before{content:"\00e63a"}.icon-player-share:before{content:"\00e63b"}.icon-player-size-fullscreen:before{content:"\00e63c"}.icon-player-size-medium:before{content:"\00e63d"}.icon-player-size-minimize:before{content:"\00e63e"}.icon-player-stop:before{content:"\00e63f"}.icon-player-subtitles:before{content:"\00e640"}.icon-player-volume-45:before{content:"\00e641"}.icon-player-volume-48:before{content:"\00e642"}.icon-playlist:before{content:"\00e643"}.icon-playstation-circle:before{content:"\00e644"}.icon-playstation-square:before{content:"\00e645"}.icon-playstation-triangle:before{content:"\00e646"}.icon-playstation-x:before{content:"\00e647"}.icon-privacy-link:before{content:"\00e648"}.icon-privacy-locked:before{content:"\00e649"}.icon-privacy-public:before{content:"\00e64a"}.icon-related:before{content:"\00e64b"}.icon-remoteque:before{content:"\00e64c"}.icon-reward:before{content:"\00e64d"}.icon-rocket:before{content:"\00e64e"}.icon-search-clear:before{content:"\00e64f"}.icon-search:before{content:"\00e650"}.icon-settings-clear-cookies:before{content:"\00e652"}.icon-settings-clear-history:before{content:"\00e653"}.icon-settings-feedback:before{content:"\00e654"}.icon-settings-help:before{content:"\00e655"}.icon-settings-pair:before{content:"\00e656"}.icon-settings-phone:before{content:"\00e657"}.icon-settings-term:before{content:"\00e658"}.icon-speechbubble:before{content:"\00e65a"}.icon-sports:before{content:"\00e65b"}.icon-star:before{content:"\00e65c"}.icon-trash:before{content:"\00e65d"}.icon-trends:before{content:"\00e65e"}.icon-tv-dpad:before{content:"\00e65f"}.icon-upload-arrow:before{content:"\00e660"}.icon-upload:before{content:"\00e661"}.icon-watch-later:before{content:"\00e662"}.icon-wii-1:before{content:"\00e663"}.icon-wii-2:before{content:"\00e664"}.icon-wii-A:before{content:"\00e665"}.icon-wii-B:before{content:"\00e666"}.icon-wii-minus:before{content:"\00e667"}.icon-wii-plus:before{content:"\00e668"}.icon-wii-x:before{content:"\00e669"}.icon-wii-y:before{content:"\00e66a"}.icon-youtube-logo:before{content:"\00e66b"}.icon-youtube-unlimited-logo:before{content:"\00e67a"}@font-face{font-family:'Cutive Mono';src:url('/s/tv/fonts/CutiveMono-Regular.woff') format('woff')}@font-face{font-family:'PT Mono';src:url('/s/tv/fonts/PTM55FT.woff') format('woff')}@font-face{font-family:'PT Serif Caption';src:url('/s/tv/fonts/PT_Serif-Caption-Web-Regular.woff') format('woff')}@font-face{font-family:'PT Sans Caption';src:url('/s/tv/fonts/PT_Sans-Caption-Web-Regular.woff') format('woff')}@font-face{font-family:'Handlee';src:url('/s/tv/fonts/Handlee-Regular.woff') format('woff')}@font-face{font-family:'Dancing Script';src:url('/s/tv/fonts/DancingScript-Regular.woff') format('woff')}@font-face{font-family:'Marcellus SC';src:url('/s/tv/fonts/MarcellusSC-Regular.woff') format('woff')}body,html{font-size:100%;height:100%;margin:auto;overflow:hidden;padding:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}input{font:inherit;margin:0;padding:0}body{background-color:#1c1a1a}p,ul,li{border:0;margin:0;outline:none;padding:0}ul{list-style:none}.focused,:focus{outline:0 solid}.hidden{display:none!important}.invisible{visibility:hidden}ul.list li{display:inline}ul.list.vertical li{display:block}.device-plugin{height:0;margin:0;position:absolute;visibility:hidden;width:0}#loader{}#leanback{height:100%}#app-markup{background-size:100% 100%;height:100%}#background{background-size:100% 100%;bottom:0;left:0;position:absolute;overflow:hidden;right:0;top:0}.limited-memory.sets-ui #app-markup{background-color:#283337}#app-markup.watch-state{background-color:#000!important}.wiiu #app-markup.watch-state{background-image:none!important}#playstation-buttons{display:none;position:absolute}#spinner{position:absolute;top:17.17em;width:100%}.browse-state .loading-indicator{display:none}.browse-state .fallback-loading-indicator{display:block}.opera #spinner{top:20em}.loading-indicator{height:5.33em;margin:0 auto;position:relative;width:5.33em}.dot{background-color:#cbcbcb;border-radius:50%;height:1.17em;position:absolute;width:1.17em}@-webkit-keyframes fade1{0%,100%{opacity:0}50%{opacity:1}}@-webkit-keyframes fade2{0%,100%{opacity:.25}37.5%{opacity:1}87.5%{opacity:0}}@-webkit-keyframes fade3{0%,100%{opacity:.5}25%{opacity:1}75%{opacity:0}}@-webkit-keyframes fade4{0%,100%{opacity:.75}12.5%{opacity:1}62.5%{opacity:0}}@-webkit-keyframes fade5{0%,100%{opacity:1}50%{opacity:0}}@-webkit-keyframes fade6{0%,100%{opacity:.75}37.5%{opacity:0}87.5%{opacity:1}}@-webkit-keyframes fade7{0%,100%{opacity:.5}25%{opacity:0}75%{opacity:1}}@-webkit-keyframes fade8{0%,100%{opacity:.25}12.5%{opacity:0}62.5%{opacity:1}}@-o-keyframes fade1{0%,100%{opacity:0}50%{opacity:1}}@-o-keyframes fade2{0%,100%{opacity:.25}37.5%{opacity:1}87.5%{opacity:0}}@-o-keyframes fade3{0%,100%{opacity:.5}25%{opacity:1}75%{opacity:0}}@-o-keyframes fade4{0%,100%{opacity:.75}12.5%{opacity:1}62.5%{opacity:0}}@-o-keyframes fade5{0%,100%{opacity:1}50%{opacity:0}}@-o-keyframes fade6{0%,100%{opacity:.75}37.5%{opacity:0}87.5%{opacity:1}}@-o-keyframes fade7{0%,100%{opacity:.5}25%{opacity:0}75%{opacity:1}}@-o-keyframes fade8{0%,100%{opacity:.25}12.5%{opacity:0}62.5%{opacity:1}}@keyframes fade1{0%,100%{opacity:0}50%{opacity:1}}@keyframes fade2{0%,100%{opacity:.25}37.5%{opacity:1}87.5%{opacity:0}}@keyframes fade3{0%,100%{opacity:.5}25%{opacity:1}75%{opacity:0}}@keyframes fade4{0%,100%{opacity:.75}12.5%{opacity:1}62.5%{opacity:0}}@keyframes fade5{0%,100%{opacity:1}50%{opacity:0}}@keyframes fade6{0%,100%{opacity:.75}37.5%{opacity:0}87.5%{opacity:1}}@keyframes fade7{0%,100%{opacity:.5}25%{opacity:0}75%{opacity:1}}@keyframes fade8{0%,100%{opacity:.25}12.5%{opacity:0}62.5%{opacity:1}}#dot1{-o-animation:fade8 .72s infinite ease;-webkit-animation:fade8 .72s infinite ease;animation:fade8 .72s infinite ease;left:0;top:2.09em}#dot2{-o-animation:fade7 .72s infinite ease;-webkit-animation:fade7 .72s infinite ease;animation:fade7 .72s infinite ease;left:.61em;top:.61em}#dot3{-o-animation:fade6 .72s infinite ease;-webkit-animation:fade6 .72s infinite ease;animation:fade6 .72s infinite ease;left:2.09em;top:0}#dot4{-o-animation:fade5 .72s infinite ease;-webkit-animation:fade5 .72s infinite ease;animation:fade5 .72s infinite ease;right:.61em;top:.61em}#dot5{-o-animation:fade4 .72s infinite ease;-webkit-animation:fade4 .72s infinite ease;animation:fade4 .72s infinite ease;right:0;top:2.09em}#dot6{-o-animation:fade3 .72s infinite ease;-webkit-animation:fade3 .72s infinite ease;animation:fade3 .72s infinite ease;bottom:.61em;right:.61em}#dot7{-o-animation:fade2 .72s infinite ease;-webkit-animation:fade2 .72s infinite ease;animation:fade2 .72s infinite ease;bottom:0;left:2.09em}#dot8{-o-animation:fade1 .72s infinite ease;-webkit-animation:fade1 .72s infinite ease;animation:fade1 .72s infinite ease;bottom:.61em;left:.61em}.spinner.transitions .dot{-o-animation:initial!important;-webkit-animation:initial!important;animation:initial!important;background:url(img/circle.png) no-repeat center;background-size:100%}.spinner.transitions.spin .loading-indicator{transition:transform 25s linear;transform:rotate(-7200deg)}.transitions #dot1{opacity:1}.transitions #dot2{opacity:0.875}.transitions #dot3{opacity:0.75}.transitions #dot4{opacity:0.625}.transitions #dot5{opacity:0.5}.transitions #dot6{opacity:0.375}.transitions #dot7{opacity:0.25}.transitions #dot8{opacity:0.125}.fallback-loading-indicator{color:#f1f1f1;display:none;font-size:1.8em;margin:2px auto 0 auto;text-align:center}.scrollbar{background-color:rgba(255,255,255,.1);height:100%;position:absolute;top:0;width:.1em}.scrollbar .handle{background-color:#f1f1f1;position:absolute;width:.1em}.application-message{color:#f1f1f1;font-size:1.8em;position:absolute;text-align:center;text-shadow:#000 .04em .04em;top:50%;width:100%}.debug-watermark{background-color:rgba(235,49,3,0.7);color:#0e0202;display:none;font-size:100%;left:0;padding:1em;position:absolute;bottom:0;width:70%}.debug-watermark.visible{display:block}.debug-console{background:rgba(0,0,0,.9);color:#fff;height:95%;overflow:scroll;padding:1em;position:absolute;right:0;top:0;width:40em;z-index:1}#player-controls .button,#player-controls .toggle-button{font-family:'youtube-icons';speak:none}.fps{position:absolute;right:0;bottom:0;text-align:center;padding-top:0.3em;width:5em;height:1.7em;background-color:#0f0;z-index:100}#html5-player-messages{display:none}#button-list>.icon-player-more:before{content:"\00e632"}.icon-player-play.toggle-selected:before{content:"\00e635"}#loader{z-index:1000}.sliding-highlighter,.pivot-sliding-highlighter{background:white;box-shadow:0 0 60px rgba(153,153,153,.3);display:none;height:26em;position:absolute;width:24em}#settings-items .sliding-highlighter{height:26.2em;width:24.2em}.horizontal-list.focused .sliding-highlighter,.video-uploads.focused .sliding-highlighter,#settings-items.focused .sliding-highlighter{display:block}.video-uploads .sliding-highlighter{height:20em;width:18em}.carousel .item:hover{background-color:#5a5a5a;cursor:pointer}.feed-title.preview{color:#f1f1f1;font-size:1.3em;height:1.3em;opacity:.7;padding-bottom:.6em;padding-left:1.9em}.feed-title .unread-count{background-color:rgba(187,0,0,.9);font-size:.6em;margin-left:.5em;padding:.05em .3em;position:relative;top:-0.265em}.prev-feed{height:3.6em;left:4%;position:absolute;top:5%}.next-feed{height:2em;left:4%;position:absolute;top:84%}.tile{background-color:#000;color:#666;height:26em;list-style:none;overflow:hidden;position:absolute;width:24em}.tile-focus-target{height:0;width:0}.tile-top{background-color:#000;height:50%;width:100%}.channel-top{height:62%;margin:5.25% 16%;width:68%}.channel-top .video-thumb,.tile-top .video-thumb{background-color:#252525;background-position:center;background-repeat:no-repeat;background-size:100%;height:100%}.browse-header-avatar.preloaded,.tile-top .video-thumb.preloaded{background:no-repeat center;background-color:#252525;background-image:url('img/icon-playbutton.png');background-size:auto}.auto-play-tile{overflow:visible}.post-play-title{font-size:1.4em;overflow:hidden;position:absolute;text-overflow:ellipsis;text-shadow:#000 .08em .08em;top:-1.8em;width:15.5em}.auto-play-tile .video-tile{top:0}.auto-play-tile .default-title,.auto-play-tile .next-up-title{color:#cccccc}.post-play-countdown{display:none}.countdown-active .post-play-countdown{color:#fff;display:block;font-size:5em;position:relative;text-align:center;text-shadow:#000 .06em .06em;top:14%}.playlist-tile.focused,.playlist-tile.focused:hover,.auto-play-tile.focused .video-tile,.auto-play-tile.focused:hover .video-tile,.recent-search-tile.focused,.recent-search-tile.focused:hover,.video-tile.focused,.video-tile.focused:hover{background-color:#f1f1f1}.item .overlay{display:none}.playlist-tile .overlay,.video-tile .overlay{background:#000;display:block;height:53%;margin-left:56%;margin-top:-57.5%;opacity:.8;width:45%}.playlist-tile.focused .overlay,.video-tile.focused .overlay{color:#f1f1f1}.playlist-tile .overlay strong{font-size:1.75em;font-weight:normal}.playlist-tile .overlay .count,.video-tile .overlay .count{font-size:1.5em;line-height:1.2em;padding-top:1.7em;text-align:center}.playlist-tile .overlay .icon,.video-tile .overlay .icon{font-family:'youtube-icons';font-size:3em;height:50%;overflow:hidden;padding:.2em;text-align:center}.tile-bottom{height:50%;padding:.25em 0 0 1em;width:23em}.channel-bottom{height:25%;margin-top:2.65em;width:100%}.channel-bottom .title,.tile-bottom .title{color:#999;font-size:1.7em;height:2.45em;line-height:1.25em;margin:.6em .6em 0 0;overflow:hidden;text-align:left;white-space:normal}.channel-bottom .title{height:1.2em;margin:0;padding:0 .6em;text-align:center;text-overflow:ellipsis;white-space:nowrap}.tile.selected.focused .tile-bottom{color:#222}.tile.selected.focused .channel-bottom .details,.tile.selected.focused .tile-bottom .details{color:#999}.tile.selected.focused .channel-bottom .title,.tile.selected.focused .tile-bottom .title{color:#444}.channel-tile .channel-top .decoration{margin-top:-19%;text-align:right;width:97%}.video-tile .tile-top .decoration{margin-top:-2em;text-align:right;width:97.3%}.channel-top .badge,.tile-top .badge,.tile-top .duration{background:rgba(0,0,0,.7);border-radius:0.1em;color:#fff;display:inline-block;font-size:1.4em;padding:0em .1em}.tile-top .badge,.tile-top .duration{text-transform:uppercase}.tile-top .live-badge{background-color:rgba(230,33,23,.8);border:0;color:#fff}.playlist-tile:hover,.video-tile:hover{background-color:#222}.channel-tile .details,.playlist-tile .details,.recent-search-tile .details,.video-tile .details{color:#999;font-size:1.3em;font-weight:300;height:40%;overflow:hidden;padding:0;white-space:normal;word-break:break-all}.channel-tile .details{text-align:center}.playlist-tile .details,.recent-search-tile .details,.video-tile .details{margin:.7em 0em 0em}.custom-playlist-image-tile .tile-top .video-thumb{background-position-x:0%;background-repeat:no-repeat;background-size:56.25%}.playlist-tile.focused .details,.recent-search-tile.focused .details,.video-tile.focused .details{color:#666}.playlist-tile .details .by,.recent-search-tile .results,.video-tile .details .by{height:1.4em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.playlist-tile .details .views,.video-tile .details .views{display:inline-block;padding-right:1.5em}.playlist-tile .details .views:empty,.video-tile .details .views:empty{display:none}.action-tile{border:2px rgba(255,255,255,0.1) solid;color:#fff;height:26em;overflow:visible}.action-tile.focused,.channel-tile.focused{background-color:#fff;color:#222}.action-tile .content{height:26em;white-space:normal}.video-tile .live-start-time{display:inline-block;vertical-align:middle}.tile-top .count-overlay{background:rgba(0,0,0,0.75);font-size:1.4em;height:100%;position:absolute;right:0;text-align:center;top:0;width:30%}.tile-top .count-overlay .video-count{display:block;font-size:2.2em;font-weight:bold;line-height:.8em;margin-top:1.6em}.action-tile .title{font-size:2.4em;height:24%;overflow:hidden;padding-top:0.5em;text-align:center;text-overflow:ellipsis;text-transform:uppercase;white-space:normal}.action-tile .long-title{font-size:2em;text-align:center;white-space:normal}.action-tile .description,.action-tile .remote-pair-text,.action-tile .remote-reset-help{color:#fff;font-size:1.4em;opacity:0;padding:0.5em;text-align:center;white-space:normal}.action-tile.focused .description,.action-tile.focused .remote-pair-text,.action-tile.focused .remote-reset-help,.action-tile.focused .sign-out-username{opacity:1}.action-tile .sign-out-username{font-size:1.7em;margin:1em auto;overflow:hidden;text-align:center;text-overflow:ellipsis;white-space:nowrap;width:80%}.action-tile .remote-count{font-size:.4em;position:absolute;top:40%;width:100%}.action-tile .remote-standing{display:inline-block;font-size:1.4em;margin:.2em auto;padding:.8em .4em .1em}.action-tile .remote-reset-help{height:2.7em}.action-tile .status{font-size:2em;text-align:center}.row-playing{display:none}.action-tile .large-action-icon{font-family:'youtube-icons';font-size:11em;margin-top:0;text-align:center;width:100%}.action-tile .sign-out-user-icon{background-size:cover;border-radius:20em;height:9em;margin:0 auto;width:9em}.action-tile .search-tile .description{font-size:1.4em;margin-top:2em;position:inherit;text-align:center}.large-action-icon.icon-guide-history{font-size:8em;margin-top:0.2em}.toggle-tile .icon{margin-top:0}.toggle-tile .content .title{height:12%;white-space:nowrap}.toggle-tile .label{font-size:1.8em;max-height:13%;text-align:center;width:100%}.selected .icon-search,.tile.selected .icon-search-clear{color:#222}.exp-densityBrowse .horizontal-list>.content{font-size:100%}.exp-densityBrowse .horizontal-list .no-content-message{display:none}.exp-densityBrowse .horizontal-list .pivot-sliding-highlighter{background:transparent;border:.5em #fff solid;box-shadow:.083em .083em .75em .167em #000 inset;height:7.5em;margin-left:-.4em;margin-top:-.4em;pointer-events:none;width:13.8em}.exp-densityBrowse .horizontal-list.focused .pivot-sliding-highlighter{display:block}.exp-densityBrowse .horizontal-list.focused.channel-selected .pivot-sliding-highlighter{border-radius:50%;height:7.5em;-moz-transform:translateX(3.2em);-o-transform:translateX(3.2em);-webkit-transform:translateX(3.2em);transform:translateX(3.2em);width:7.5em}.exp-densityBrowse .browse-sets .action-tile,.exp-densityBrowse .horizontal-list .channel-tile,.exp-densityBrowse .horizontal-list .video-tile{height:14em;width:14em}.exp-densityBrowse .shelf .horizontal-list .channel-tile,.exp-densityBrowse .shelf .horizontal-list .video-tile,.exp-densityBrowse .shelf .horizontal-list .channel-tile.selected,.exp-densityBrowse .shelf .horizontal-list .video-tile.selected{opacity:.5}.exp-densityBrowse .shelf.selected .horizontal-list .channel-tile,.exp-densityBrowse .shelf.selected .horizontal-list .video-tile,.exp-densityBrowse .horizontal-list .channel-tile,.exp-densityBrowse .horizontal-list .video-tile{opacity:.7}.exp-densityBrowse .shelf.selected .horizontal-list .channel-tile.selected,.exp-densityBrowse .shelf.selected .horizontal-list .video-tile.selected,.exp-densityBrowse .horizontal-list .channel-tile.selected,.exp-densityBrowse .horizontal-list .video-tile.selected,.exp-densityBrowse .horizontal-list .auto-play-tile.selected .video-tile,.limited-animation .exp-densityBrowse .shelf .horizontal-list .channel-tile,.limited-animation .exp-densityBrowse .shelf .horizontal-list .video-tile,.limited-animation .exp-densityBrowse .shelf .horizontal-list .channel-tile.selected,.limited-animation .exp-densityBrowse .shelf .horizontal-list .video-tile.selected,.limited-animation .exp-densityBrowse .shelf.selected .horizontal-list .channel-tile,.limited-animation .exp-densityBrowse .shelf.selected .horizontal-list .video-tile,.limited-animation .exp-densityBrowse .horizontal-list .channel-tile,.limited-animation .exp-densityBrowse .horizontal-list .video-tile{opacity:1}.exp-densityBrowse .horizontal-list .tile-top{height:7.83em}.exp-densityBrowse .channel-top .badge,.exp-densityBrowse .tile-top .badge{font-size:1em;padding:.2em}.exp-densityBrowse .horizontal-list .tile-bottom,.exp-densityBrowse .horizontal-list .channel-bottom{height:4.25em;margin-top:.83em;padding:0;width:100%}.exp-densityBrowse .shelf .horizontal-list .tile-bottom,.exp-densityBrowse .shelf .horizontal-list .channel-bottom{display:none}.exp-densityBrowse .shelf.selected .horizontal-list .tile-bottom,.exp-densityBrowse .shelf.selected .horizontal-list .channel-bottom{display:block}.exp-densityBrowse .browse-sets .action-tile .description,.exp-densityBrowse .horizontal-list .tile-bottom .title,.exp-densityBrowse .horizontal-list .channel-bottom .title{font-size:1.16em;height:initial;line-height:1.25em;margin:0;max-height:2.5em;text-overflow:ellipsis}.exp-densityBrowse .horizontal-list .channel-bottom .title{white-space:normal}.exp-densityBrowse .horizontal-list .video-tile .details{color:#cdcdcd;font-size:.83em;height:initial;margin:.4em 0}.exp-densityBrowse .horizontal-list .video-tile .tile-top .decoration{display:none;line-height:1em;margin-top:0;-moz-transform:translateY(-100%);-o-transform:translateY(-100%);-webkit-transform:translateY(-100%);transform:translateY(-100%);width:100%}.exp-densityBrowse #search .tile-top .decoration,.exp-densityBrowse #post-play-list .tile-top .decoration,.exp-densityBrowse .shelf.selected .horizontal-list .tile-top .decoration{display:block}.exp-densityBrowse .horizontal-list .video-tile .tile-top .badge{border-radius:0}.exp-densityBrowse .horizontal-list .video-tile .tile-top .duration{background:rgba(0,0,0,.5);font-size:1em;font-weight:bold;padding:.5em}.exp-densityBrowse .horizontal-list .channel-bottom .details{display:none}.exp-densityBrowse .horizontal-list .video-tile .details .views,.exp-densityBrowse .horizontal-list .video-tile .details .age{display:inline-block}.exp-densityBrowse .horizontal-list .video-tile .details .views{padding-right:.5em}.sets-ui .exp-densityBrowse .horizontal-list .channel-tile.selected .channel-bottom>.title,.sets-ui .exp-densityBrowse .horizontal-list .auto-play-tile.selected .tile-bottom>.title,.sets-ui .exp-densityBrowse .horizontal-list .video-tile.selected .tile-bottom>.title{color:#fff}.exp-densityBrowse .video-tile .overlay{height:7.83em;margin-left:60%;margin-top:-7.83em;width:40%}.exp-densityBrowse .video-tile .overlay .count{font-size:1em;line-height:1em;padding-top:1.5em}.exp-densityBrowse .video-tile .overlay .icon{font-size:2em;padding:0}.exp-densityBrowse .horizontal-list .channel-top{height:7.83em;margin:0 auto;width:7.83em}.exp-densityBrowse .horizontal-list .channel-top .video-thumb{border-radius:50%}.exp-densityBrowse .browse-sets .shelf>.title{font-size:1em;margin-bottom:.9em;margin-top:0}.exp-densityBrowse .browse-sets .shelf>.title .main{font-size:1.5em}.exp-densityBrowse .browse-sets .shelf>.title .annotation{font-size:1em}.exp-densityBrowse .browse-sets .shelf>.title{color:#cdcdcd}.engaged.exp-densityBrowse .channel-tile .voice-command,.engaged.exp-densityBrowse .video-tile .voice-command{font-size:1em;line-height:1em;margin-top:-2em}.limited-animation.sets-ui .exp-densityBrowse .video-tile:hover:not(.focused),.limited-animation.sets-ui .exp-densityBrowse .channel-tile:hover:not(.focused),.sets-ui .exp-densityBrowse .carousel .item:hover,.sets-ui .exp-densityBrowse .carousel .auto-play-tile:hover,.sets-ui .exp-densityBrowse .carousel .channel-tile:hover{background-color:inherit!important;opacity:1}.exp-densityBrowse .browse-sets .action-tile{border:none}.exp-densityBrowse .browse-sets .action-tile .content{height:7.83em;margin-bottom:.83em}.exp-densityBrowse .browse-sets .action-tile .title{display:none}.exp-densityBrowse .browse-sets .action-tile .large-action-icon{background-color:#232323;color:#fff;font-size:6em;height:1.3em;line-height:1.3em}.exp-densityBrowse .browse-sets .action-tile .description{opacity:inherit;padding:0}.exp-densityBrowse .auto-play-tile{height:14em;width:14em}.exp-densityBrowse .post-play-countdown{top:7%}.limited-animation .exp-densityBrowse .browse-content .list{margin-left:-7.5em;width:inherit}.limited-animation .exp-densityBrowse .browse-content .shelf>.title{margin-left:7.5em}.limited-animation .exp-densityBrowse .browse-content .list .shelf:nth-child(1){margin-bottom:6.5em}.limited-animation .exp-densityBrowse .browse-content .list .shelf{margin-bottom:-.1em}.limited-animation.sets-ui .exp-densityBrowse .channel-tile:not(.focused),.limited-animation.sets-ui .exp-densityBrowse .video-tile:not(.focused){background-color:inherit}.limited-animation .exp-densityBrowse .channel-tile.focused,.limited-animation .exp-densityBrowse .video-tile.focused{background-color:inherit}.limited-animation .exp-densityBrowse .video-tile{margin-right:.5em}.limited-animation .exp-densityBrowse .video-tile .overlay{height:7.03em;margin-left:8em;margin-top:-7.43em;width:5.6em}.limited-animation .exp-densityBrowse .video-tile .tile-top{background:inherit;height:7.03em;padding:.4em;width:13.2em}.limited-animation .exp-densityBrowse .channel-tile{margin-right:.5em}.limited-animation .exp-densityBrowse .channel-tile .channel-top{height:6.83em;padding:.4em;width:6.83em}.limited-animation .exp-densityBrowse .video-tile.focused .tile-top{background:#fff}.limited-animation .exp-densityBrowse .channel-tile.focused .channel-top{background:#fff;border-radius:50%}.limited-animation .exp-densityBrowse .search .placeholder-tile,.limited-animation .exp-densityBrowse .browse-content .list .placeholder-tile{height:14em;margin-right:.5em;width:14em}#dialog.remote-reset-dialog>.title{font-size:3em;padding-bottom:.5em}#dialog.remote-reset-dialog .buttons{bottom:.5em;position:absolute}#dialog.remote-reset-dialog{left:0;position:absolute;white-space:normal}.remote-reset-dialog #dialog-view{color:#aaa;font-size:1.8em;padding-top:0.5em}.connection-instructions{padding-top:.5em;font-size:2em}.text-dialog .connection-instructions{font-size:1.3em}.browse-sets-state .login-dialog{margin-top:5em}#search .pairing .pairing-content>*,#dialog .pairing .pairing-content>*{display:inline-block}#search .pairing .pairing-content .step2,#dialog .pairing .pairing-content .step2{display:block}#search .dial-upsell .connection-steps .no-dial-connect-step1,#search .manual-connect .connection-steps .with-dial-connect-step1{display:none}.connection-instructions .step1,.connection-instructions .step2,.qr-code .scan,.pairing .connected-header,.remote-reset-dialog .connected-header{color:#aaa;font-size:.7em}.connection-instructions .pair-url,.connection-instructions .pair-code{color:#f1f1f1}.connection-instructions .step2{margin-top:2em}.pairing .qr-code,.pairing .connected-list{display:inline-block;margin-left:1em;vertical-align:top}.pairing .dial-upsell{color:#aaa;display:inline-block;font-size:95%;overflow:hidden;padding-left:2em;padding-top:0.8em;text-align:initial;vertical-align:top;white-space:normal;width:16em}.pairing .cast-icon{background:url(img/cast_disconnected_blue.png) no-repeat center;background-size:contain;display:inline-block;height:1em;margin:.1em .3em;vertical-align:middle;width:1em}.pairing .qr-code .scan{margin-bottom:.5em;white-space:normal;width:5em}.pairing .qr-code img{height:5.1em;width:5.1em}.pairing .icon-settings-pair,.login-dialog .icon-settings-pair{background-image:none;display:inline-block;font:5em 'youtube-icons';height:1em;margin-top:.1em;width:1.4em}.remote-reset-dialog .connected-header,.pairing .connected-header{margin-bottom:.3em}.remote-reset-dialog .devices,.pairing .devices{list-style:none;font-size:1.5em;color:#f1f1f1}.remote-reset-dialog .devices>div,.pairing .devices>div{display:block;height:1.5em;line-height:1.5em;overflow:hidden;padding-left:1.5em;text-overflow:ellipsis;white-space:nowrap;width:11.5em}.remote-reset-dialog .devices .connected:before{background-position:0 100%}.remote-reset-dialog .devices .connected{color:#f1f1f1}#search{bottom:0;color:#f1f1f1;left:0;overflow:hidden;position:absolute;right:0;text-align:center;top:0}.watch-state #search{left:0}#search>.controls{left:8em;margin-right:18em;position:absolute;right:2.5em;text-align:left;top:2.5em}#search-text-box{background-color:#e1e1e1;font-size:1.6em;height:100%;margin:0 auto;overflow:hidden;position:relative}#search-text-box>.icon-search{display:none}#search-input{background:none;border:none;color:#111;height:100%;padding-left:.5em;width:100%}#search-input:disabled{color:#111}#search-query{color:#111;height:100%;overflow:hidden;padding-left:.5em;padding-top:.3em;position:absolute;text-overflow:ellipsis;white-space:pre;width:95%}#search-suggestions{font-size:1.2em;position:relative;display:inline-block;left:0;width:100%}.search-state #spinner{top:26em}#suggest-list{overflow:hidden}#suggest-list>div{border-radius:1px;color:#e1e1e1;display:inline-block;padding:.2em .5em}#search-keyboard{font-size:1em;text-align:left;width:65%}#search-suggestions,#search-keyboard,#letter-suggest{white-space:nowrap}#search-keyboard,#letter-suggest{z-index:1}#keyboard-grid{display:inline-block;font-size:1.6em;margin:0 auto;overflow:hidden;text-align:left}#keyboard-grid,#keyboard-spacebar{color:#a3a3a3}#keyboard-grid .button{border-radius:1px;display:inline-block;margin:.3em .6em .3em 0;padding:0 .1em;text-align:center;text-transform:uppercase;width:1em;vertical-align:top}#keyboard-grid .list{text-align:left;text-shadow:none}#search-keyboard #keyboard-grid .icon-key-delete.button{font-family:'youtube-icons';font-size:.7em;line-height:1.2em;margin-left:2.25em;padding:.25em;width:2.25em}#keyboard-spacebar{border-radius:1px;display:inline-block;font-family:'youtube-icons';font-size:1.44em;margin:.1em 7em 0 2.1em;padding:.1em;text-align:left}#search-keyboard #keyboard-grid .clear-query-tile.button{font-size:.7em;margin-left:2.25em;padding:.25em;text-transform:uppercase;width:auto}#keyboard-grid .icon-key-globe{font-family:'youtube-icons';margin:.25em 0 .25em 1.6em;padding:.1em;width:1.2em}#search-keyboard .button.focused{background-color:#e1e1e1;color:#212121}#letter-suggest{font-size:1.6em;position:fixed;text-align:center;width:1.2em}.letter-suggest-visible #keyboard-grid .list.selected .button.selected:not(.focused){background-color:rgba(153,153,153,.85);color:#000;text-shadow:none}#keyboard-grid .button.numbers-toggle-tile{font-size:.75em;padding:.22em;margin:.25em 0 0 2.1em;width:auto}#search .pairing .icon-settings-pair{display:none}#search .search-message{display:inline-block;margin-left:2em;margin-top:1.5em;vertical-align:top;white-space:normal;width:50%}#search .search-pairing{background-color:rgba(0,0,0,.3);bottom:0;display:inline-block;left:5em;padding:2em 2.5em 4em;position:absolute;text-align:left;text-shadow:-1px 1px 2px black;width:100%}.limited-animation #search .search-pairing{background-color:#000}#search .search-pairing .search-img{background-image:url(img/pair_promo.png);background-size:cover;display:inline-block;height:11em;width:11em}#search .search-pairing .title{font-size:1.9em}#search .search-pairing .connection-instructions{font-size:1.6em}#search .search-pairing .dial-upsell-content{color:#aaa}#search .search-pairing .manual-connect-content .connection-steps{padding:0}#search .search-pairing .manual-connect-content .connection-steps .pair-code,#search .search-pairing .manual-connect-content .connection-steps .pair-url{display:block}#search .search-pairing .manual-connect-content .connection-steps .step2{margin-top:1em}#search .search-pairing .manual-connect-content .connection-steps .label,#search .search-pairing .manual-connect .dial-upsell-content,#search .search-pairing .dial-upsell .manual-connect-content{display:none}#search .pairing .no-dial-connect-step1,#search .pairing .no-dial-connect-step2{display:inline-block}#search .pairing .no-dial-connect-step2{margin-left:2em}#search .pairing .connection-steps{text-align:left}#search .pairing .connected-list,#search .pairing .qr-code-wrapper{display:none}#search.hide-input .search-pairing{margin-top:8em}#letter-suggest div{background-color:rgba(153,153,153,.85);color:rgba(0,0,0,.8);height:1.4em;text-shadow:none}#letter-suggest .focused{color:#f1f1f1}#transliteration-container{display:none}#search-keyboard.transliterable #transliteration-container{display:block}#transliteration .list{font-size:2em;height:1.2em;margin:0 auto;overflow:hidden;padding:.2em 0;text-align:center;width:77%}#transliteration .list>div{display:inline;padding:0 .5em;position:relative}#suggest-list>div.focused,#transliteration .list .focused{background-color:#fefefe;color:#212121}#transliteration .button:hover{background-color:rgba(153,153,153,.4)}#transliteration .button:hover,#search-keyboard .button:hover{cursor:pointer}#search .horizontal-list>.content{text-align:left}.limited-animation.sets-ui #search .horizontal-list>.content{margin-left:-21.8em;width:126em}#search .horizontal-list{left:7.5em;height:inherit;position:absolute;right:0;top:38%;-o-transform:translateY(7.5em);-webkit-transform:translateY(7.5em);transform:translateY(7.5em);-o-transition:opacity .25s -o-transform .25s;-webkit-transition:opacity .25s,-webkit-transform .25s;transition:opacity .25s,transform .25s;width:initial}#search.input-collapsed .horizontal-list{-o-transform:none!important;-webkit-transform:none!important;transform:none!important}#search-keyboard{-o-transition:opacity .25s -o-transform .25s;-webkit-transition:opacity .25s,-webkit-transform .25s;transition:opacity .25s,transform .25s;transform-origin:top}#search-keyboard.hidden{display:block!important;opacity:0;-o-transform:scaleY(.5);-webkit-transform:scaleY(.5);transform:scaleY(.5)}#search #search-text-entry{height:2.4em}#search #search-suggestions,#search #search-text-entry{background-color:rgba(0,0,0,0);padding-top:.25em;-o-transform-origin:top;-webkit-transform-origin:top;transform-origin:top;-o-transition:opacity .25s -o-transform .25s;-webkit-transition:opacity .25s,-webkit-transform .25s;transition:opacity .25s,transform .25s}.limited-animation #search .horizontal-list,.limited-animation #search #search-suggestions,.limited-animation #search #search-text-entry,.limited-animation #search #search-keyboard{-o-transition:none;-webkit-transition:none;transition:none}#search-text-entry{padding-bottom:.4em}#search-text-entry,#text-box-background{height:3em}#keyboard-icon{display:none;font-family:'youtube-icons';font-size:1.2em;padding-bottom:.4em;text-align:center;vertical-align:bottom;width:2em}.input-collapsed #keyboard-icon{display:inline-block}#search-text-entry .suggestions-container{white-space:nowrap;overflow:hidden;height:2.4em}.exp-densityBrowse #search .horizontal-list{font-size:100%;height:14em;top:35%;-moz-transform:translateY(8em);-o-transform:translateY(8em);-webkit-transform:translateY(8em);transform:translateY(8em)}.limited-animation .exp-densityBrowse #search .horizontal-list .list{margin-left:-14em}.exp-densityBrowse #search .horizontal-list .video-tile{height:14em}.exp-densityBrowse #search .horizontal-list .video-tile .details .views,.exp-densityBrowse #search .horizontal-list .video-tile .details .age{display:inline-block}.exp-densityBrowse #search .horizontal-list .video-tile .details .views{padding-right:.5em}.limited-animation.sets-ui .exp-densityBrowse #search .horizontal-list>.content{margin-left:0;width:inherit}#player{height:100%;width:100%}.watch-state #watch{display:block}.wiiu #watch{background-color:#000;height:100%}#player-facade{height:100%;position:absolute;width:100%}#player-video{height:100%}#watch,.dialog-focused .standard-caption-window,#caption-window-99,.countdowntimer,.ytp-cued-icon,.ytp-fallback,.html5-context-menu,.html5-dialog-holder,.html5-endscreen,.html5-info-bar,.html5-modal-panel,.html5-player-chrome,.html5-show-video-info-template,.html5-storyboard,.html5-text-button,.html5-video-player .hid,.html5-ypc-module,.player-actions-container,.video-ad-status-bar,.video-annotations,.html5-watermark,.video-fallback-content,.video-ads,.title-card.hidden{display:none}.html5-video-player{overflow:visible}.html5-video-info-panel{background-color:rgba(0,0,0,.7);color:#f1f1f1;display:none;margin:20%;position:absolute;top:0;z-index:1}.html5-video-info-panel-close{display:none}.html5-video-info-panel-content>div>div{display:inline-block;font-weight:bold;padding:0 .5em;text-align:right;width:10em}.ad-video{width:100%;height:100%}.ad-showing .video-ads{display:block;overflow:hidden}.ad-interrupting.tag-pool-enabled .html5-main-video{position:absolute;left:-1px;top:-1px;overflow:hidden;width:1px!important;height:1px!important}.html5-video-player .video-stream{position:absolute;top:0;left:0;display:block}.opera .video-stream{height:720px;width:1280px}.advertisement-info,.skip-ad-button{position:absolute;top:9.5em}.advertisement-info{left:12.5%;text-align:left;width:30%;overflow:hidden}.advertisement-info-top{height:3em}.advertisement-avatar{width:3em;height:3em;display:inline-block;margin-right:.4em;background-position:right center;background-repeat:no-repeat;background-size:contain}.advertisement-info-details{display:inline-block;vertical-align:top;width:79%}.advertisement-title,.advertisement-advertiser,.third-party{color:#fff;text-shadow:2px 1px #000;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.third-party{position:absolute;bottom:0}.advertisement-title{font-size:1.4em;line-height:1em;height:1.1em}.advertisement-advertiser{font-size:1.1em;line-height:1.3em;height:1.4em}.advertisement-info .ad-badge{background-color:#e6bc27;padding:1px 5px;text-shadow:none;border-radius:.15em;font-size:.9em;text-transform:capitalize}.skip-ad-button{right:12.5%;border-radius:.15em;background-color:rgba(0,0,0,.4);padding:.6em}.canskip.mdx-skip.skip-ad-button{height:4.0em;width:18em}.canskip.mdx-skip .skip-button-text{font-size:1.1em;height:3em;left:2.0em;line-height:1.5em;position:absolute;top:.7em;width:75%}#transport-controls.ad-active .player-controls #button-list div.skip-ad-button .label,.skip-ad-button .label{font-size:1.1em;padding:0 1.4em;height:2.5em;line-height:2.5em;border-radius:.12em;cursor:pointer;background-color:rgba(0,0,0,0);color:#e1e1e1}.skip-ad-button.canskip.mdx-skip .label{height:3.7em}#transport-controls.ad-active .player-controls #button-list div.skip-ad-button.canskip:hover .label,.skip-ad-button.canskip:hover .label{background-color:#fff;color:#212121;border-radius:.12em}#transport-controls.ad-active .player-controls #button-list div.skip-ad-button.canskip.focused .label,.skip-ad-button.canskip.focused .label{background-color:#e1e1e1;color:#212121;border-radius:.12em}.skip-ad-button .skip-symbol{display:none;font-family:'youtube-icons'}.skip-ad-button.canskip .skip-symbol.icon-player-next{display:inline;font-size:1.3em;margin-left:.5em;vertical-align:middle}.exp-newMdxSkipButtonCast .canskip.mdx-skip.skip-ad-button .skip-symbol.icon-cast_on{display:inline;font-size:2.5em;position:absolute;right:.7em;text-align:right;top:.5em;width:25%}.exp-newMdxSkipButtonPair .canskip.mdx-skip.skip-ad-button .skip-symbol.icon-settings-pair{display:inline;font-size:4em;position:absolute;right:.4em;text-align:right;top:.3em;width:25%}.canskip.mdx-skip.skip-ad-button .skip-symbol.icon-player-next{display:none}#player-controls{text-align:center}#bottom-half{bottom:0;height:50%;position:absolute;width:100%}#transport-controls{background:-o-linear-gradient(rgba(0,0,0,0),rgba(0,0,0,1));background:-webkit-linear-gradient(rgba(0,0,0,0),rgba(0,0,0,1));background:linear-gradient(rgba(0,0,0,0),rgba(0,0,0,1));bottom:0;height:100%;position:absolute;-o-transition:-o-transform .25s,opacity .25s;-webkit-transition:-webkit-transform .25s,opacity .25s;transition:transform .25s,opacity .25s;width:100%}#transport-controls.hidden{display:block!important;opacity:0}.limited-animation #transport-controls.hidden{display:none!important}#transport-controls,#transport-controls.focused{display:block}.player-controls-widget{border:0;margin-top:8.4em}.fresh-transport-controls.seeking-forward .seeking-icon.icon-player-rew:before{content:"\00e62c"}.seeking-icon{bottom:3em;color:#fff;display:none;position:absolute;left:0;margin:0 auto;right:0}.seeking-icon span{display:none}.fresh-watch.watch-seeking .seeking-icon{display:block}.fresh-watch .title-card{background:-webkit-linear-gradient(top,rgba(0,0,0,.75),transparent);background:-o-linear-gradient(top,rgba(0,0,0,.75),transparent);background:linear-gradient(to bottom,rgba(0,0,0,.75),transparent);height:35.9%}#transport-controls.fresh-transport-controls{background:-webkit-linear-gradient(bottom,#000,transparent);background:-o-linear-gradient(bottom,#000,transparent);background:linear-gradient(to top,#000,transparent)}.fresh-watch .player-video-title{color:rgba(255,255,255,1);font-size:1.936em}.fresh-watch .player-meta .player-video-details{color:rgba(255,255,255,0.7);font-size:1.455em}.fresh-watch .pivot-shelf-list{margin-top:14.5em;padding-left:3.871em}#fresh-rows-container{border:0;color:#fff;margin-top:7.7em}.fresh-transport-controls .storyboards{position:absolute}.fresh-transport-controls .more-row,.fresh-transport-controls .main-row{margin-left:5%;width:95%}.fresh-transport-controls .button span,.fresh-transport-controls .toggle-button span{display:none;font-family:'roboto-regular';color:rgba(255,255,255,1)}.lang-case-sensitive .fresh-transport-controls span:first-letter{text-transform:uppercase}.fresh-transport-controls .button.disabled:hover,.fresh-transport-controls .toggle-button.disabled:hover{background-color:transparent}.fresh-transport-controls .button.disabled,.fresh-transport-controls .toggle-button.disabled{opacity:.45}.fresh-transport-controls .button.focused,.fresh-transport-controls .toggle-button.focused,.fresh-transport-controls .button:hover,.fresh-transport-controls .toggle-button:hover{background-color:rgba(255,255,255,.5);color:#fff}.fresh-transport-controls .button,.fresh-transport-controls .toggle-button,.seeking-icon{border-radius:4px;font-family:'youtube-icons';font-size:1.4em;height:1em;padding:.55em;speak:none;text-align:center;width:1em}.fresh-transport-controls .button,.fresh-transport-controls .toggle-button{color:rgba(255,255,255,.7);cursor:pointer;display:inline-block;position:relative}.fresh-transport-controls #transport-more-button:before{display:inline-block;left:19%;position:absolute;top:-9%}.fresh-transport-controls #transport-more-button{font-size:2em;height:.7em;margin-right:1.452em;padding:.385em;width:.7em}.fresh-transport-controls #transport-more-button span{color:#fff;display:inline-block;font-size:.485em;left:4.5em;position:absolute;text-align:left;top:1em;width:15em}.fresh-transport-controls #transport-more-button.top-row-active span{display:none}.fresh-transport-controls #transport-more-options-list{display:inline-block}.fresh-transport-controls .progress-bar{display:inline-block;height:3em;left:0;padding:0;position:relative;top:0;width:76.55%}.fresh-transport-controls.live-playback #play-pause-button{margin-right:1em}.fresh-transport-controls.live-playback .progress-bar{width:77.55%}.fresh-transport-controls.live-playback .live-indicator{display:inline-block;left:0;margin-left:1em;position:relative;top:0}.fresh-transport-controls #player-time-elapsed,.fresh-transport-controls .player-time-total{color:rgba(255,255,255,1);display:inline-block;font-size:1.3em;position:relative;text-align:center;top:0;width:8%}.fresh-transport-controls .more-row{margin-bottom:5px}.fresh-transport-controls .more-row .button,.fresh-transport-controls .more-row .toggle-button{margin-right:2.075em;vertical-align:top}.fresh-transport-controls .icon-like.toggle-selected,.fresh-transport-controls .icon-dislike.toggle-selected,.fresh-transport-controls .icon-player-closedcaptions.toggle-selected{color:#2793e6}.fresh-transport-controls .icon-logo-lozenge.toggle-selected{color:#f00}.fresh-transport-controls .more-row .button span,.fresh-transport-controls .more-row .toggle-button span{font-size:.692em;left:-3.45em;position:relative;top:-4.4em;width:8.3em}.fresh-transport-controls .more-row .button.focused span,.fresh-transport-controls .more-row .toggle-button.focused span,.fresh-transport-controls .more-row .button:hover span,.fresh-transport-controls .more-row .toggle-button:hover span{display:inline-block}.fresh-transport-controls .progress-bar .progress-bar-line div{height:.242em}.fresh-transport-controls .progress-bar .progress-bar-line .progress-bar-background{background-color:rgba(255,255,255,0.45)}.fresh-transport-controls .progress-bar .progress-bar-line .progress-bar-loaded{background-color:#fff}.fresh-transport-controls .progress-bar .progress-bar-line .progress-bar-played{background-color:#df2323}.fresh-transport-controls .progress-bar.ad-active .progress-bar-played{background-color:#e7bd00}.ypc-playback .fresh-transport-controls .progress-bar-line .progress-bar-played{background-color:#2793e6}.fresh-watch .ad-point-separator,.fresh-transport-controls .progress-bar .progress-bar-disc,.fresh-transport-controls.ad-active #player-time-elapsed,.fresh-transport-controls.ad-active .player-time-total{display:none}.fresh-transport-controls.ad-active .progress-bar{padding-left:1em;width:88%}.fresh-transport-controls.ad-active .more-row,.fresh-watch.watch-seeking .more-row{visibility:hidden}.fresh-watch .skip-ad-button,.fresh-watch .advertisement-info{top:6.7em}.fresh-watch .advertisement-info{left:5%}.fresh-watch .advertisement-info .advertisement-info-top{height:3.065em;position:relative}.fresh-watch .skip-ad-button{border-radius:4px;background-color:rgba(0,0,0,.5);padding:0;right:6%;z-index:1}.fresh-watch .skip-ad-button .label{color:#fff;font-size:1.13em;height:2.57em;line-height:2.57em;padding:0 1.3em}.fresh-watch .skip-ad-button .skip-symbol{font-size:1.1em}.fresh-watch .skip-ad-button.canskip:hover,.fresh-watch .skip-ad-button.canskip.focused{background-color:rgba(255,255,255,.5)}.fresh-watch .skip-ad-button.canskip:hover .label,.fresh-watch .skip-ad-button.canskip.focused .label{background:none;color:#fff}.fresh-watch .advertisement-info{color:#fff}.fresh-watch .advertisement-info .advertisement-advertiser{font-size:100%;height:1.4em;line-height:1.3em}.fresh-watch .advertisement-info .advertisement-advertiser>span{vertical-align:bottom}.fresh-watch .advertisement-info .advertisement-advertiser,.fresh-watch .advertisement-info .advertisement-title,.fresh-watch .advertisement-info .third-party{overflow:hidden;text-shadow:none;text-overflow:ellipsis;white-space:nowrap}.fresh-watch .advertisement-info .third-party{bottom:0;position:absolute;vertical-align:top;width:79%}.fresh-watch .advertisement-info .third-party>span{vertical-align:middle}.fresh-watch .advertisement-info .advertisement-title{font-size:1.35em;font-weight:bold;line-height:1em;height:1.1em;padding-bottom:1%;text-shadow:none}.fresh-watch .advertisement-info .ad-badge{background-color:#e7bd00;border-radius:.15em;font-size:.85em;font-weight:bold;padding:1px 7px;text-shadow:none;text-transform:capitalize}.fresh-watch .advertisement-info .remaining-duration,.fresh-watch .advertisement-info .ad-by{font-size:1.13em}.fresh-watch .advertisement-info .remaining-duration{padding:0 2%}.fresh-watch .advertisement-info .advertisement-avatar{background-repeat:no-repeat;background-size:contain;border-radius:50%;display:inline-block;height:3.065em;margin-right:1.4em;width:3.065em}.title-card{background:-o-linear-gradient(top,rgba(0,0,0,.9),rgba(0,0,0,.8),transparent);background:-webkit-linear-gradient(top,rgba(0,0,0,.9),rgba(0,0,0,.8),transparent);background:linear-gradient(to bottom,rgba(0,0,0,.9),rgba(0,0,0,.8),transparent);display:block;height:25%;position:absolute;top:0;-o-transition:-o-transform .25s,opacity .25s;-webkit-transition:-webkit-transform .25s,opacity .25s;transition:transform .25s,opacity .25s;width:100%}.ypc-playback .title-card{height:30%}.title-card.hidden{display:block!important;opacity:0}.limited-animation .title-card.hidden{display:none!important}.title-card .badges span{border:1px solid #ddd;border-radius:2px;display:inline-block;font-size:.9em;margin-left:1em;padding:0 .5em 0;text-transform:uppercase;vertical-align:middle}.title-card .badges span.live-badge{color:#fff;border:0;background-color:rgba(230,33,23,.8);margin-left:0}.selected-title .views{margin-top:-.6em}.player-meta{color:#f1f1f1;margin:2.6em 0 0 3.5em;white-space:nowrap;width:90%}.player-meta .user-details{position:absolute;right:5%}.player-meta .user-details>div{display:inline-block;vertical-align:top}.player-meta .user-details .avatar{background-size:cover;height:4em;width:4em}.player-meta .user-details .message{font-size:80%;margin:.2em 1em 0 1.1em;max-width:50%;overflow:hidden;text-overflow:ellipsis}.player-meta .player-video-text{display:inline-block;padding-left:1.5em;width:90%}.player-meta .player-video-details{font-size:1.5em;white-space:initial}.player-meta .player-video-details>div{margin:.2em 1em 0 0;vertical-align:top}.player-meta .player-video-details .username{max-width:45%;overflow:hidden;text-overflow:ellipsis}.player-meta .player-video-details .set-context{max-width:45%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.player-meta .player-video-details .set-context,.player-meta .player-video-details .set-context-position,.player-meta .player-video-details .uploaded-date,.player-meta .player-video-details .view-count,.player-meta .player-video-details .badges,.player-meta .player-video-details .username{display:inline-block}.player-video-avatar{background-size:contain;border-radius:50%;display:inline-block;height:5.5em;vertical-align:top;width:5.5em}.player-video-title{font-size:2.4em;margin:-.1em 0 0 0;overflow:hidden;text-overflow:ellipsis}.quality-status{display:none;padding-top:.2em}.title-tray-inflated .quality-status{display:inline-block}.quality-status-hd-badge{background:#f1f1f1;border-radius:2px;color:#414141;font-size:.6em;font-weight:bold;padding:.125em .5em}.ypc-preview{display:none}.ypc-playback .ypc-preview{display:block}.player-controls #button-list .focused,.player-controls #button-list div:hover{-webkit-border-radius:.05em;color:#000}.player-controls #button-list .focused{background-color:#fff}.player-controls #button-list div:hover{background-color:#9d9495}.player-controls #button-list .button,.player-controls #button-list .toggle-button{display:inline-block;font-size:1.4em;height:1.3em;margin:1em 1em;padding-bottom:.4em;padding-top:.8em;top:0;width:2.3em}.player-controls #button-list .button span,.player-controls #button-list .toggle-button span{font-family:'roboto-regular';font-size:.7em;left:-10%;margin:.5em 0 0;width:120%;height:120%}.player-controls #button-list .button.spacer{visibility:hidden;cursor:auto}#transport-controls.focused .player-controls #button-list div{color:#fff}#transport-controls.focused .player-controls #button-list .focused{color:#222}.player-controls #button-list div{color:#aaa;cursor:pointer;vertical-align:middle}#transport-controls.ad-active .player-controls #button-list div.disabled{visibility:hidden}#transport-controls.ad-active .player-controls #button-list div.skip-ad-button.disabled{visibility:visible;opacity:1}.player-controls #button-list div.disabled:hover{background-color:transparent;color:#fff}.player-controls #button-list div.focused{opacity:1}.player-controls #button-list div.disabled{opacity:.2}.player-controls #button-list .icon-player-closedcaptions.toggle-selected,.player-controls #button-list .icon-like.toggle-selected,.player-controls #button-list .icon-dislike.toggle-selected{color:#2793e6!important}.player-controls #button-list .icon-logo-lozenge.toggle-selected{color:#f00!important}#transport-controls .player-controls #button-list div.icon-player-more,#transport-controls .player-controls #button-list div.icon-player-less{color:#858585}.player-controls .toggle-button span,.player-controls .button span,.player-controls .toggle-button.disabled span,.player-controls .button.disabled span{display:none;margin-top:1em;color:#fff;font-size:.75em;padding:0;position:relative;text-align:center;top:1em;width:100%}.lang-case-sensitive .player-controls .button span:first-letter,.lang-case-sensitive .player-controls .toggle-button span:first-letter{text-transform:uppercase}#transport-controls.focused,.player-controls .toggle-button.focused span,.player-controls div:hover.toggle-button span,.player-controls .button.focused span,.player-controls div:hover.button span{display:block}.player-seekbar{position:relative}.progress-bar{height:4em;left:11%;position:absolute;top:-9em;width:75%;padding:0 1.5%}.progress-bar .progress-bar-playhead,.progress-bar .progress-bar-line{top:2.5em}.progress-bar .progress-bar-line{position:relative;width:100%}.progress-bar .progress-bar-line div{height:2px;position:absolute}.progress-bar .progress-bar-playhead{height:2px;position:relative;width:100%}.progress-bar .progress-bar-line .progress-bar-background{width:100%;background-color:#5b5b5b}.progress-bar .progress-bar-line .progress-bar-played{background-color:#e32c29}.progress-bar .progress-bar-line .progress-bar-loaded{background-color:#999}.ypc-playback .progress-bar-line .progress-bar-played{background-color:#2793e6}.progress-bar .progress-bar-disc{background-color:#ccc;border-radius:50%;height:.6em;margin:-.25em 0 0 -.25em;position:absolute;width:.6em}.progress-bar .cue-range-markers{height:100%;position:absolute;width:100%}.progress-bar-disc{pointer-events:none}.ad-active .progress-bar .cue-range-markers{visibility:hidden}.progress-bar .cue-range-markers .cue-range-marker{background-color:rgba(255,255,255,0);height:2px;margin:0 0 0 -.1em;position:absolute;width:.2em}.progress-bar .cue-range-markers .ad-marker{background-color:#e6bc27}.progress-bar.ad-active .progress-bar-played{background-color:#d6cb23}#player-time-elapsed,.player-time-total,.live-indicator{color:rgba(255,255,255,.75);font-size:1.2em;position:absolute;top:-6em;width:12%}.limited-graphics #player-time-elapsed,.limited-graphics .player-time-total{color:#fff}#player-time-elapsed{left:0;text-align:right}.player-time-total,.live-indicator{right:0;text-align:left}#transport-controls.ad-active #player-time-elapsed,#transport-controls.ad-active .player-time-total{display:none}.live-indicator{display:none;font-size:1.3em;position:absolute;top:-5.6em;width:11.7%}.live-playback .live-indicator{display:block}.live-playback .player-time-total,.live-playback .elapsed-time,.fresh-transport-controls.live-playback .player-time-total,.fresh-transport-controls.live-playback #player-time-elapsed{display:none}.live-playback .progress-bar-disc{background-color:#e62117}#watch .loading-indicator{top:30%}#transport-spacer:hover{background:none}.html5-video-controls{position:absolute;width:100%;height:0;bottom:2em;-moz-transition:all .6s ease;-ms-transition:all .6s ease;-o-transition:all .6s ease;-webkit-transition:all .6s ease}.ytp-player-content{position:absolute;bottom:0;height:0;left:0;right:0}.html5-video-content{position:absolute}.caption-window{position:absolute;pointer-events:none}.standard-caption-window{position:absolute;white-space:normal;width:80%}.caption-window-transform{display:inline-block;line-height:1.32em}.html5-video-player .captions-text{position:relative}.html5-video-player .caption-row{padding-bottom:5px;padding-top:5px}.anchor-point-1{-moz-transform:translate(-50%,0);-ms-transform:translate(-50%,0);-o-transform:translate(-50%,0);-webkit-transform:translate(-50%,0);transform:translate(-50%,0)}.anchor-point-2{-moz-transform:translate(-100%,0);-ms-transform:translate(-100%,0);-o-transform:translate(-100%,0);-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}.anchor-point-3{-moz-transform:translate(0,-50%);-ms-transform:translate(0,-50%);-o-transform:translate(0,-50%);-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}.anchor-point-4{-moz-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);-o-transform:translate(-50%,-50%);-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.anchor-point-5{-moz-transform:translate(-100%,-50%);-ms-transform:translate(-100%,-50%);-o-transform:translate(-100%,-50%);-webkit-transform:translate(-100%,-50%);transform:translate(-100%,-50%)}.anchor-point-6{-moz-transform:translate(0,-100%);-ms-transform:translate(0,-100%);-o-transform:translate(0,-100%);-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}.anchor-point-7{-moz-transform:translate(-50%,-100%);-ms-transform:translate(-50%,-100%);-o-transform:translate(-50%,-100%);-webkit-transform:translate(-50%,-100%);transform:translate(-50%,-100%)}.anchor-point-8{-moz-transform:translate(-100%,-100%);-ms-transform:translate(-100%,-100%);-o-transform:translate(-100%,-100%);-webkit-transform:translate(-100%,-100%);transform:translate(-100%,-100%)}.anchor-point-0,.anchor-point-1,.anchor-point-2{padding-top:3em}.watch.transport-showing .anchor-point-0,.watch.transport-showing .anchor-point-1,.watch.transport-showing .anchor-point-2{padding-top:9em}.anchor-point-0,.anchor-point-3,.anchor-point-6{padding-left:3em}.anchor-point-2,.anchor-point-5,.anchor-point-8{padding-right:3em}.anchor-point-6,.anchor-point-7,.anchor-point-8,.eureka .watch.transport-showing .anchor-point-6,.eureka .watch.transport-showing .anchor-point-7,.eureka .watch.transport-showing .anchor-point-8{padding-bottom:3em}.watch.transport-showing .anchor-point-6,.watch.transport-showing .anchor-point-7,.watch.transport-showing .anchor-point-8{padding-bottom:15em}.watch.pivot-focused .anchor-point-6{padding-bottom:17.5em}.watch.pivot-focused .anchor-point-7,.watch.pivot-focused .anchor-point-8{padding-bottom:16em}.watch .ytp-fresca-module,.search-focused .watch.message .ytp-fresca-module{display:none}.watch.message .ytp-fresca-module{background-color:rgba(0,0,0,.5);color:#fff;display:block;font-size:2em;padding-left:1.5em;position:absolute;top:30%;width:100%}.watch.message .ytp-fresca-show-countdown{padding-bottom:1.3em}.ytp-fresca-countdown{font-size:1.4em}.pivot-shelf-list{margin-top:12.5em;padding-left:7em;-o-transition:-o-transform .25s,opacity .25s;-webkit-transition:-webkit-transform .25s,opacity .25s;transition:transform .25s,opacity .25s;-webkit-transform:translateZ(0);-o-transform:translateY(10em);-webkit-transform:translateY(10em);transform:translateY(10em)}.pivot-shelf-list.hidden{display:block!important;opacity:0}.limited-animation .pivot-shelf-list.hidden,.forced-limited-animation.pivot-shelf-list.hidden{display:none!important}.pivot-shelf-list.animate-in{-o-transform:translateY(0);-webkit-transform:translateY(0);transform:translateY(0)}.pivot-shelf-list>.carousel{opacity:.5;-o-transition:opacity .25s;-webkit-transition:opacity .25s;transition:opacity .25s}.limited-memory .pivot-shelf-list{opacity:1}.pivot-shelf-list .title-container{color:#fff}.pivot-shelf .tile-title .author,.pivot-shelf .tile-title .view{color:#e1e1e1}.pivot-shelf-list.focused,.post-play .pivot-shelf-list{background:-o-linear-gradient(rgba(0,0,0,0),rgba(0,0,0,1));background:-webkit-linear-gradient(rgba(0,0,0,0),rgba(0,0,0,1));background:linear-gradient(rgba(0,0,0,0),rgba(0,0,0,1));height:17.5em;margin-top:2.5em;padding-top:10em;-o-transform:translateY(-7.5em);-webkit-transform:translateY(-7.5em);transform:translateY(-7.5em)}.post-play .pivot-shelf{opacity:.5}.post-play .pivot-shelf-list.focused .pivot-shelf,.pivot-shelf-list.focused>.carousel{opacity:1}.pivot-shelf-list .focused.list{height:0}.pivot-shelf-list .no-content-message{display:none}.pivot-shelf-list.forced-limited-animation,.limited-animation .pivot-shelf-list,.limited-animation .pivot-shelf-list>.carousel{-o-transition:none;-webkit-transition:none;transition:none}.pivot-shelf-list.forced-limited-animation .placeholder-tile,.limited-animation .pivot-shelf-list .placeholder-tile{height:7.83em;width:14em}#pivot-post-play .pivot-video-tile,#pivot-post-play .placeholder-tile{height:10.625em;width:18.5em}#pivot-post-play .tile-top{height:10.625em}.limited-animation #pivot-post-play .tile-top,#pivot-post-play.forced-limited-animation .tile-top{height:9.825em;width:17.7em}.pivot-video-tile,.pivot-channel-tile{height:7.83em;width:14em}.forced-limited-animation .pivot-video-tile,.forced-limited-animation .pivot-auto-play-tile,.forced-limited-animation .pivot-channel-tile,.pivot-shelf-list.forced-limited-animation .placeholder-tile,#pivot-post-play.forced-limited-animation .placeholder-tile,.limited-animation .pivot-video-tile,.limited-animation .pivot-auto-play-tile,.limited-animation .pivot-channel-tile,.limited-animation #pivot-post-play .placeholder-tile,.limited-animation .pivot-shelf-list .placeholder-tile{background:none;display:inline-block;margin-right:.5em;position:relative;vertical-align:bottom}.forced-limited-animation .pivot-channel-tile,.limited-animation .pivot-channel-tile{border-radius:100%;width:10.625em}.forced-limited-animation .pivot-video-tile.focused,.forced-limited-animation .pivot-auto-play-tile.focused .pivot-video-tile,.limited-animation .pivot-video-tile.focused,.limited-animation .pivot-auto-play-tile.focused .pivot-video-tile{background-color:#fff}.pivot-video-tile .tile-top{height:7.83em}.forced-limited-animation .pivot-video-tile .tile-top,.limited-animation .pivot-video-tile .tile-top{background-color:inherit;height:7.03em;padding:.4em;width:13.2em}.forced-limited-animation .pivot-video-tile.focused .tile-top,.limited-animation .pivot-video-tile.focused .tile-top{background-color:#fff}.pivot-video-tile .tile-overlay{background-color:rgba(0,0,0,.5);color:#fff;display:none;height:100%;margin-top:-7.83em;text-align:center;width:100%}.forced-limited-animation .pivot-video-tile .tile-overlay,.limited-animation .pivot-video-tile .tile-overlay{margin-top:-7.03em}#pivot-post-play .pivot-video-tile .tile-overlay{margin-top:-10.625em}.limited-animation #pivot-post-play .pivot-video-tile .tile-overlay,#pivot-post-play.forced-limited-animation .pivot-video-tile .tile-overlay{margin-top:-9.875em}.pivot-video-tile.has-overlay .tile-overlay{display:block}#pivot-post-play .pivot-video-tile.has-overlay .tile-overlay{opacity:0}#pivot-post-play.focused .pivot-video-tile.has-overlay .tile-overlay{opacity:1}.post-play .pivot-shelf-list .pivot-video-tile.has-overlay .label{display:none}.post-play .pivot-shelf-list .pivot-video-tile.has-overlay .icon-player-play{font-size:4em}.post-play .pivot-shelf-list .pivot-video-tile.has-overlay .icon-player-play:before{content:"\00e638"}.pivot-video-tile .tile-overlay .icon{font-family:'youtube-icons';font-size:3em;padding-top:.5em}.pivot-video-tile .tile-overlay .label{font-size:1.2em}#pivot-post-play .pivot-video-tile .tile-overlay{color:#e1e1e1}#pivot-post-play .pivot-video-tile .tile-overlay .icon{font-size:4.5em;padding-bottom:.15em;padding-top:.4em}#pivot-post-play .pivot-video-tile .tile-overlay .label,#pivot-post-play .pivot-video-tile .tile-overlay .icon{opacity:0;-o-transition:opacity .25s;-webkit-transition:opacity .25s;transition:opacity .25s}#pivot-post-play.focused .pivot-video-tile .tile-overlay .label,#pivot-post-play.focused .pivot-video-tile .tile-overlay .icon{opacity:1}.limited-animation #pivot-post-play .pivot-video-tile .tile-overlay .label,.limited-animation #pivot-post-play .pivot-video-tile .tile-overlay .icon,#pivot-post-play.forced-limited-animation .pivot-video-tile .tile-overlay .label,#pivot-post-play.forced-limited-animation .pivot-video-tile .tile-overlay .icon{-o-transition:none;-webkit-transition:none;transition:none}.pivot-video-tile .video-thumb{background-position:center;background-repeat:no-repeat;background-size:100%;height:100%;width:100%}.pivot-video-tile .decoration{margin-top:-2.1em;text-align:right}.pivot-video-tile .duration{background-color:rgba(0,0,0,.7);font-size:1em;font-weight:bold;padding:.5em}.pivot-auto-play-tile{background:none;height:10.625em;overflow:visible;width:18.5em}.forced-limited-animation .pivot-auto-play-tile,.limited-animation .pivot-auto-play-tile{height:10.625em;width:18.5em}.pivot-auto-play-tile .post-play-countdown{display:block;font-size:1.8em;margin-left:10.8em;opacity:0;pointer-events:none;position:absolute;text-align:left;text-shadow:none;top:0;width:17.5em}.pivot-auto-play-tile.countdown-active .post-play-countdown{opacity:1;pointer-events:inherit}.pivot-auto-play-tile .details,.pivot-auto-play-tile .title{color:#fff;opacity:0;pointer-events:none}.pivot-auto-play-tile.focused .details,.pivot-auto-play-tile.focused .title{opacity:1;pointer-events:inherit}.pivot-auto-play-tile .title{font-size:1.4em;margin-left:14em;max-height:2.5em;overflow:hidden;position:absolute;top:2.2em;width:20em}.pivot-auto-play-tile .details{font-size:1.1em;margin-left:17.8em;position:absolute;top:6em;width:37em}.pivot-auto-play-tile .details,.pivot-auto-play-tile .title,.pivot-auto-play-tile .post-play-countdown{-o-transition:opacity .25s;-webkit-transition:opacity .25s;transition:opacity .25s}.limited-animation .pivot-auto-play-tile .details,.limited-animation .pivot-auto-play-tile .title,.limited-animation .pivot-auto-play-tile .post-play-countdown{-o-transition:opacity none;-webkit-transition:none;transition:none}#pivot-post-play .pivot-auto-play-tile .pivot-video-tile{padding-left:0;padding-top:0}#pivot-post-play #post-play-list .no-content-message{display:none}.forced-limited-animation .pivot-horizontal-list,.limited-animation .pivot-horizontal-list{margin-left:-15em}.pivot-horizontal-list.focused .pivot-sliding-highlighter,.post-play #post-play-list.focused .pivot-sliding-highlighter{display:block}.pivot-horizontal-list .pivot-sliding-highlighter,.post-play .pivot-sliding-highlighter{background:transparent;border:.5em #fff solid;box-shadow:.083em .083em .75em .167em #000 inset;height:7.5em;margin-left:-.4em;margin-top:-.4em;pointer-events:none;width:13.8em}.pivot-shelf{position:absolute;width:0}.forced-limited-animation .pivot-shelf,.limited-animation .pivot-shelf{opacity:.5;position:relative}.forced-limited-animation .pivot-shelf.focused,.limited-animation .pivot-shelf.focused{opacity:1}.limited-memory.limited-animation .pivot-shelf{opacity:1}.pivot-shelf .title-container{margin-bottom:1em;visibility:hidden;white-space:nowrap}.pivot-shelf .title-container .icon{font-family:'youtube-icons';vertical-align:middle}.pivot-shelf .tile-title span{display:inline-block;overflow:hidden;text-overflow:ellipsis}.pivot-shelf.focused .title-container{visibility:visible}.pivot-shelf .tile-title,.pivot-shelf .shelf-title{margin-bottom:.3em}.pivot-shelf .tile-title{height:1.7em}.pivot-shelf .tile-title .title{font-size:1.3em;max-width:30em}.pivot-shelf .tile-title .author,.pivot-shelf .tile-title .view{margin-left:.3em;max-width:20em}.pivot-shelf .tile-title .author,.pivot-sliding-highlighter .select{display:none}.pivot-shelf.has-author .tile-title .author{display:inline-block}.forced-limited-animation .pivot-horizontal-list .list,.limited-animation .pivot-horizontal-list .list{width:98em}.forced-limited-animation .postplay-horizontal-list .list,.limited-animation .postplay-horizontal-list .list{margin-left:-13.4em;width:98em}.forced-limited-animation .pivot-channel-tile.focused .tile-top,.limited-animation .pivot-channel-tile.focused .tile-top{background-color:#fff}.forced-limited-animation .pivot-channel-tile .tile-top,.limited-animation .pivot-channel-tile .tile-top{height:6.83em;padding:.4em;width:6.83em}.pivot-channel-tile .tile-top{background:none;border-radius:50%;height:7.83em;margin:0 auto;overflow:hidden;width:7.83em}.pivot-channel-tile .tile-top .video-thumb{background-color:rgba(0,0,0,0)}.pivot-channel-tile .video-thumb{border-radius:50%}.pivot-shelf .pivot-horizontal-list.channel-selected .pivot-sliding-highlighter{border-radius:50%;height:7.5em;margin-left:-.3em;margin-top:-.3em;-moz-transform:translateX(3.2em);-o-transform:translateX(3.2em);-webkit-transform:translateX(3.2em);transform:translateX(3.2em);width:7.5em}.pivot-shelf.channel-selected .shelf-title{visibility:hidden}.pivot-footer{height:9em}.pivot-button-list{padding-top:4em}.pivot-button-list .icon-button{display:inline-block;padding:.5em 1em}.pivot-button-list .icon-button .icon{font-family:'youtube-icons';margin-right:.3em}.pivot-footer.focused .pivot-button-list .icon-button.selected{background-color:#fff}.pivot-button-list .icon-button span{color:#fff;font-size:1.5em}.pivot-footer.focused .pivot-button-list .icon-button.selected span{color:#000}#pivot-post-play{padding-left:6em;padding-top:10em}.limited-animation #pivot-post-play,#pivot-post-play.forced-limited-animation{padding-left:0}#pivot-post-play #post-play-list{font-size:1.1em;margin-left:.1em}.forced-limited-animation .pivot-auto-play-tile,.limited-animation .pivot-auto-play-tile{padding-left:0;vertical-align:bottom}#pivot-post-play.forced-limited-animation .pivot-video-tile,.limited-animation #pivot-post-play .pivot-video-tile{vertical-align:bottom}.forced-limited-animation .pivot-auto-play-tile .pivot-video-tile,.limited-animation .pivot-auto-play-tile .pivot-video-tile{display:block;position:absolute}#pivot-post-play .pivot-sliding-highlighter{border-width:.5em;height:9.9em;margin-top:0;width:18.4em}.limited-animation.sets-ui .exp-densityBrowse .auto-play-tile:not(.focused) .video-tile,.limited-animation .exp-densityBrowse .auto-play-tile.focused .video-tile,.limited-animation .exp-densityBrowse .auto-play-tile{background-color:inherit}.limited-animation .exp-densityBrowse .auto-play-tile.focused .tile-top{background:#fff}.limited-animation .exp-densityBrowse .auto-play-tile .post-play-countdown{top:-2.67em}.loki-video-source{color:#fff;font-size:1.5em;left:5.0em;position:absolute;top:2.6em}.loki-title-card{background:-o-linear-gradient(bottom,rgba(0,0,0,.9) 0%,rgba(0,0,0,.6) 80%,transparent 100%);background:-webkit-linear-gradient(bottom,rgba(0,0,0,.9) 0%,rgba(0,0,0,.6) 80%,transparent 100%);background:linear-gradient(to top,rgba(0,0,0,.9) 0%,rgba(0,0,0,.6) 80%,transparent 100%);bottom:0;display:block;height:25%;position:absolute;width:100%}.loki-title-card .loki-metadata{color:#f1f1f1;height:100%;margin-bottom:2.6em;margin-left:8.0em;overflow:hidden;white-space:nowrap;width:100%}.loki-metadata #loki-progress-bar{display:block;height:2.0em;left:8.0em;padding:0;position:absolute;top:-4.0em;width:80%}#loki-progress-bar .progress-bar-playhead{display:none}.loki-metadata .loki-video-avatar{background-size:contain;display:inline-block;height:8.0em;width:8.0em}.loki-metadata .loki-video-text{display:inline-block;height:100%;margin:0 5.0em 0 3.5em;width:80%}.loki-video-text .loki-video-title{font-size:2.4em;margin-top:-.1em;overflow:hidden;text-overflow:ellipsis;width:80%}.loki-video-text .loki-channel-name{font-size:1.5em;margin-top:.4em;overflow:hidden;text-overflow:ellipsis;width:80%}.loki-video-text .loki-video-description{line-height:1.4em;margin-top:.4em;max-height:4.2em;overflow:hidden;white-space:normal;width:80%}.toaster{color:#aaa;font-size:133%;position:absolute;top:0;width:100%}.toaster .list{margin-top:.8em;position:absolute;width:100%}.toaster .toast{min-height:3.5em;overflow:hidden;position:relative;text-align:center;width:100%;-moz-transition:all .6s ease;-ms-transition:all .6s ease;-o-transition:all .6s ease;-webkit-transition:all .6s ease}.toaster .toast-container{background-color:rgba(27,25,26,0.8);border:1px solid black;display:inline-block;margin:.2em 0 1em;max-width:60%;opacity:1;padding:.5em 1em .6em;-moz-transition:all .3s ease;-ms-transition:all .3s ease;-o-transition:all .3s ease;-webkit-transition:all .3s ease}.toaster .toast.toast-removing .toast-container{opacity:0}.toaster .toast-container>div{display:inline-block;vertical-align:middle}.toaster .toast-icon{background-position:center;background-repeat:no-repeat;background-size:1.1em 1.1em;height:1.2em;width:1.2em}.device-toast .toast-container{padding:0.7em}.toaster .device-toast .toast-msg{background-position:center left;background-repeat:no-repeat;background-size:1.1em 1.1em;padding-left:0.8em}.toaster .avatar{height:2.6em;width:2.6em}.toaster .avatar>div{background-position:center;background-size:cover;height:inherit;width:inherit}.toaster .video-image>div{background-position:center;background-size:cover;height:100%;width:100%}.toast .update-playlist-toast{bottom:0;max-width:14em;padding:0.8em;position:fixed;right:0;text-align:left}.update-playlist-toast .overlay{background:#000;height:55%;margin-left:56%;margin-top:-55%;opacity:.8;width:44%}.update-playlist-toast .video-count{font-size:2.3em;font-weight:normal;line-height:1.2em;padding-top:0.8em;text-align:center}.update-playlist-toast .icon-playlist{font-family:'youtube-icons';font-size:2.2em;height:50%;overflow:hidden;padding:.2em;text-align:center}.update-playlist-toast .avatar{padding:0.3em}.update-playlist-toast .contrast-container{background-color:rgba(0,0,0,0.8);padding:0.4em}.update-playlist-toast .tile-top{height:7.7em;width:14em}.update-playlist-toast .toast-msg{font-size:85%;padding-left:0.6em}.update-playlist-toast .truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:13.2em}.update-playlist-toast .toast-msg.avatar{height:2.1em;width:10em;overflow:hidden}.update-playlist-toast .toast-msg.truncate{white-space:normal}.update-playlist-toast .toast-msg.no-user-avatar{font-size:85%;margin-left:-2.2em}.update-playlist-toast .wrapper>div{display:inline-block;vertical-align:middle}.toaster .toast-icon{background-image:url(img/dial-sprite.png);background-size:100%;max-width:100%}.toast-icon.avatar{background-image:none}.toaster .android-phone-connected{background-position:0 0%}.toaster .android-phone-disconnected{background-position:0 10.14%}.toaster .android-tablet-connected{background-position:0 20.29%}.toaster .android-tablet-disconnected{background-position:0 30.43%}.toaster .ios-phone-connected{background-position:0 40.58%}.toaster .ios-phone-disconnected{background-position:0 50.72%}.toaster .ios-tablet-connected{background-position:0 60.87%}.toaster .ios-tablet-disconnected{background-position:0 71.0%}.toaster .laptop-connected{background-position:0 81.16%}.toaster .laptop-disconnected{background-position:0 91.3%}.toaster .remote-connected{background-position:0 100%;background-size:233.33%}.toaster .remote-disconnected{background-position:0 100%;background-size:233.33%}.toaster .toast-progress{border:1px solid #aaa;width:10em}.toaster .toast-progress .progress{background-color:#666;height:1em}.toaster .volume-muted{background-image:url(img/volume_mute_pressed.png)}.toaster .volume-low{background-image:url(img/volume_0_pressed.png)}.toaster .volume-mid{background-image:url(img/volume_1_pressed.png)}.toaster .volume-high{background-image:url(img/volume_2_pressed.png)}.toaster .volume-toast .toast-msg{text-align:right;width:1.2em}.toaster .volume-toast .toast-container{-moz-transition-delay:.3s;-ms-transition-delay:.3s;-o-transition-delay:.3s;-webkit-transition-delay:.3s}.toaster .volume-toast.toast-removing .toast-container{-moz-transition-delay:0s;-ms-transition-delay:0s;-o-transition-delay:0s;-webkit-transition-delay:0s}.unlimited-welcome-toast .toast-container{box-shadow:0em 0em .6em .02em #000;height:6.5em;margin:0em;padding-right:1em;padding:0;position:fixed;right:0;text-align:left;top:0;width:24.5em;transform:translateX(0);opacity:1;-moz-transition:all .6s ease;-ms-transition:all .6s ease;-o-transition:all .6s ease;-webkit-transition:all .6s ease}.unlimited-welcome-toast.toast-displaying .toast-container{opacity:0;transform:translateX(18em)}.limited-animation .unlimited-welcome-toast .toast-container{opacity:1;-o-transition:none;-webkit-transition:none;transition:none;transform:none}.unlimited-toast-messages{position:absolute;padding-top:2.1em;padding-left:1.3em;width:12em}.unlimited-toast-msg-top{color:#ddd;line-height:1.0em}.unlimited-toast-msg-bottom{padding-top:0.5em;font-size:0.7em}.unlimited-toast-background{background-size:100%;background-position:left;background-repeat:no-repeat;height:100%;width:9em}.unlimited-toast-logo{background-size:100%;background-repeat:no-repeat;height:100%}#dialog{color:#fff;display:none;height:100%;left:0;position:absolute;top:0;width:100%}#error-markup #dialog{display:block}#dialog.focused{display:block}#dialog-wrapper{background-color:#000;height:30em;margin-top:11.1em;padding:1.3em 6em;position:relative}#dialog.browse-sets #dialog-wrapper{background-color:rgba(32,32,32,.5);height:100%;margin-top:0;padding:1.3em 10%}#dialog .dialog-contents{background:no-repeat 90% 30%}#dialog.browse-sets .dialog-contents .icon-simple-dialog{color:#fff}#dialog .dialog-contents .dialog-large-icon{display:none}#dialog.browse-sets .dialog-contents .dialog-large-icon{display:inline-block;font-family:'youtube-icons';font-size:10em;height:2.5em;line-height:2.5em;text-align:center;width:35%}#dialog.browse-sets .icon-simple-dialog .icon-dialog-content .extra-info{color:rgba(255,255,255,.75);display:block;font-family:monospace;font-size:1.5em;line-height:1.4em;padding-top:.8em}#dialog.browse-sets .icon-simple-dialog .icon-dialog-content .label{display:block;font-size:1.8em;line-height:1.1em;padding-top:6.45em}#dialog .dialog-contents .header .title{font-size:2.5em}#dialog.browse-sets.browse-sets-titled-dialog .dialog-contents .header{border-bottom:1px solid rgba(255,255,255,.2);height:3.4em;margin:0 1.5em}#dialog.browse-sets.browse-sets-titled-dialog .dialog-contents .header .title{color:rgba(255,255,255,.5);display:block;font-size:1.3em;font-weight:300;height:3em;line-height:3em}#dialog.browse-sets .buttons{font-size:1.8em;margin-right:2%;margin-top:.8em;text-align:right}#dialog.browse-sets .connection-steps{padding:0}#dialog.browse-sets.exit .dialog-contents .header .title{display:block;padding:1em 6.5em 3em 6.5em}#dialog.browse-sets .dialog-contents{background-color:#000;height:80%;margin-top:5%}#dialog.browse-sets.closed-captions .dialog-contents{height:75%}#dialog.browse-sets .dialog-cancel-button{text-align:center}.video-overview .dialog-contents{font-size:2em}#dialog.qr-dialog .dialog-contents{color:#ccc;font-size:1.1em;overflow:hidden;padding-top:4em}#dialog.qr-dialog .dialog-contents .header .title{color:#fff;font-size:2em}#dialog .box{padding-top:1.5em}#dialog.qr-dialog a{color:#fff;display:block;font-size:1.5em}#dialog.qr-dialog .qr{height:7em;margin:.2em 0;width:7em;background-size:100%}#dialog.qr-dialog .dialog-icon{display:block;background-size:12em}#dialog.help .dialog-icon{background-image:url(img/icon-help.png)}#dialog.feedback .dialog-icon{background-image:url(img/icon-feedback.png)}#dialog.system-error .dialog-icon{font-family:'youtube-icons';font-size:10em;margin-right:0;padding-right:.5em;padding-top:.5em;text-align:right;width:2em}#dialog.system-error .dialog-icon:before{content:"\00e656"}#dialog.qr-dialog.browse-sets .dialog-icon{display:none}#dialog .text-dialog{bottom:1.5em;left:0;padding:2em 20em 0 6em;position:absolute;white-space:normal}#dialog.text-dialog .dialog-contents .header .title{font-size:3em;padding-bottom:.5em}.text-dialog #dialog-view{color:#aaa;padding-bottom:1em;width:90%}.text-dialog #dialog-view .dialog-contents{font-size:1.8em}#dialog.browse-sets .icon-dialog-content{display:inline-block;height:25em;vertical-align:top;width:60%}#dialog-view .url{color:#fff;font-size:1.25em;padding-bottom:.8em}#dialog-view .flag-claim .url{padding-bottom:.5em}#dialog-view .reset-help{display:block;width:25em}#dialog.browse-sets .tos-dialog .icon-dialog-content{padding-top:9em}#dialog.browse-sets .tos-dialog .icon-dialog-content .subtitle{color:#aaa}#dialog.browse-sets .tos-dialog .icon-dialog-content .url{font-size:2em}#dialog.browse-sets.qr-dialog .dialog-contents{padding-top:0}#dialog.browse-sets.qr-dialog .icon-dialog-content .link{margin-top:5em;padding-top:0}#dialog.browse-sets.qr-dialog .icon-dialog-content .qr-code-wrapper{margin-top:2em}#dialog.browse-sets.qr-dialog .icon-dialog-content .qr-code-wrapper .qr{border:.2em rgba(255,255,255,.1) solid;padding:.5em}#dialog .signed-out-dialog{font-size:1.8em}.connection-error,.connection-steps{display:inline-block;font-weight:300;padding:0 1em 1em 2em;white-space:normal}.connection-error{vertical-align:top}.connection-error div{margin-bottom:1em}#dialog .login-dialog .activation-code{font-size:1.3em;letter-spacing:.1em;line-height:1.3em}#dialog .sets-login-dialog .body-text{display:inline-block;height:25em;vertical-align:top;width:50%}#dialog .sets-login-dialog .body-text .connection-instructions{font-size:1.9em;margin-top:3.5em}#dialog .sets-login-dialog .standard-message,#dialog .sets-login-dialog .like-dislike-message,#dialog .sets-login-dialog .subscribe-message,#dialog .sets-login-dialog .upload-message,#dialog .sets-login-dialog .player-message{display:none}#dialog.standard-login .sets-login-dialog .standard-message,#dialog.like-dislike-login .sets-login-dialog .like-dislike-message,#dialog.subscribe-login .sets-login-dialog .subscribe-message,#dialog.upload-login .sets-login-dialog .upload-message,#dialog.player-login .sets-login-dialog .player-message{display:block}#dialog .pairing .qr-code-wrapper{display:inline-block;vertical-align:top}#dialog .manual-connect-content .connection-steps{padding:0}#dialog .manual-connect-content .connection-steps .label{color:#aaa;font-size:.7em;margin-top:1em}#dialog .manual-connect-content .connection-steps .step1,#dialog .manual-connect-content .connection-steps .step2{margin-top:.7em}#dialog .manual-connect-content .connection-steps .pair-url,#dialog .manual-connect-content .connection-steps .pair-code{margin-left:.3em}#dialog.browse-sets .manual-connect-content .connection-steps .label{font-size:1.3em}#dialog.browse-sets .manual-connect-content .connection-steps .step1,#dialog.browse-sets .manual-connect-content .connection-steps .step2{display:inline-block;font-size:1.3em}#dialog.browse-sets .manual-connect-content .connection-steps .pair-url,#dialog.browse-sets .manual-connect-content .connection-steps .pair-code{display:inline-block;font-size:1.3em;margin-left:.3em}#dialog.browse-sets .pairing .connection-instructions{font-size:1em;padding-top:10em}#dialog .manual-connect .dial-upsell-content{display:none}#dialog .dial-upsell .manual-connect-content .connection-steps .no-dial-connect-step1,#dialog .manual-connect .manual-connect-content .connection-steps .with-dial-connect-step1{display:none}#dialog .manual-connect .manual-connect-content .connection-steps{font-size:1.5em}#dialog .manual-connect .manual-connect-content .connection-steps .label{display:none}#dialog.browse-sets .dial-upsell .dial-upsell-content{font-size:1.8em;white-space:normal;width:80%}#dialog.browse-sets .dial-upsell .dial-upsell-content .cast-icon{height:1.3em;margin:0;width:1.5em}#dialog.browse-sets .dial-upsell .manual-connect-content{color:#aaa;font-size:1.4em;line-height:1em}#dialog.browse-sets .remote-reset-dialog .connected-list .connected-header{color:#fff;font-size:1.5em;margin-top:6em}#dialog.browse-sets .remote-reset-dialog .connected-list .devices{display:inline-block;font-size:1em}#dialog.browse-sets .remote-reset-dialog .connected-list .devices>div{display:inline-block;font-size:1em;padding-left:0;padding-right:1.5em;width:10em}#dialog.browse-sets .remote-reset-dialog .reset-help{font-size:1.5em;margin-top:1em}#dialog .logout-authenticated-info{padding:2.5em 0}#dialog .login-user-icon{background-size:cover;display:inline-block;height:4em;margin:2em 2em 0 0;width:4em}#dialog.browse-sets .login-user-icon{margin:0 15%;border-radius:20em}#dialog .login-user-info{display:inline-block;margin-left:1.7em;margin-top:-.8em;font-size:2em;font-weight:300;width:82%}#dialog .login-user-info h3{font-size:2.2em;font-weight:normal;margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#dialog.browse-sets .logout-authenticated-info{padding:0}#dialog.browse-sets .login-user-info{height:13em;margin:0;width:100%}#dialog.browse-sets .login-user-info .display-name,#dialog.browse-sets .login-user-info .platform-container{display:none}#dialog.browse-sets .login-user-info .signed-in-message{display:inline-block;width:50%}#dialog.browse-sets .login-user-info .signed-in-label strong{color:#fff;display:block;font-size:2.5em;overflow:hidden;text-overflow:ellipsis}#dialog.browse-sets .login-user-info .signed-in-label{color:#aaa;font-size:.5em;margin-top:10em}#dialog.browse-sets .login-user-info .sign-out-label{margin-top:1em}#dialog .spinner{height:10em;width:10em}#dialog .spinner .loading-indicator{background-size:contain;height:100%;width:100%}#dialog .buttons{font-size:3em;font-weight:300;padding-top:.3em}#dialog .buttons>div{background-color:#333;color:#000;cursor:pointer;display:inline-block;min-width:2.4em;padding:0 .3em;text-align:center}#dialog.browse-sets .buttons .button{background-color:#000;color:rgba(255,255,255,.5);min-width:3em;padding:.2em .8em}#dialog.browse-sets .buttons .focused,#dialog.browse-sets .buttons .button.focused:hover{background-color:#f1f1f1;color:#666}#dialog .buttons .button:hover,#dialog.browse-sets .buttons .button:hover{background-color:#666}#dialog .buttons div{margin-left:.5em}#dialog .buttons .focused,#dialog .buttons .focused:hover{background-color:#f1f1f1;color:#666}#dialog .ps4-logout-dialog .logout-prompt{font-size:1.7em}#dialog .logout-prompt{margin-top:6em}.scrolling-text{font-size:1.3em;height:15em;margin-right:1.1em;margin-top:1em;overflow:hidden}.scrolling-text h4{margin:0;padding:0}.scrolling-text>div{overflow:hidden;padding-bottom:1em}.flag-list-container{margin-top:.5em}.flag-list .button{color:#868686;cursor:pointer;display:inline-block;font-size:1.8em;padding:.4em;vertical-align:top}.flag-list .button{width:12em}.flag-list .button:hover{background-color:#444}.flag-list .button.focused,.flag-list .button.focused:hover{background-color:#fff;color:#676767}#flag-widget{font-weight:300}.flag-video{color:#676767;font-size:1.8em;font-weight:300;padding-top:1em;width:47%}.flag-video .url{color:#fff;display:block;font-size:1.6em;padding-top:.5em}.flag-example{background:url(img/flag.png) no-repeat 0 0;background-size:contain;display:inline-block;height:57%;position:absolute;right:18%;top:9%;width:23%}.flag-claim .metadata{display:block;font-size:1em;font-weight:500;padding-top:.2em;white-space:normal}.flag-claim .url{color:#868686;display:block;font-weight:300}.flag-claim{color:#676767;font-size:1.6em;font-weight:300;margin:1em 0 0 2em;white-space:nowrap}.flag-claim .copyright-infringment{display:inline-block;white-space:normal;width:50%}.flag-claim .privacy-invasion{display:inline-block;margin-left:4%;vertical-align:top;white-space:normal;width:40%}.flag-claim .email{color:#868686}.flag-claim .subtitle{font-size:1.2em;font-weight:500}.player-error-dialog.player-error{color:#aaa;font-size:1.8em;padding:1em 0 8em 0em}#dialog .scrollbar{height:70%;margin-top:5em;right:5em}#dialog .scrollbar .handle{height:5em}.paid-channel-info{font-size:1.4em;padding-top:1em}.paid-channel-info .channel-url{font-weight:bold}.status-dialog #dialog-wrapper{background-color:rgba(0,0,0,.5)}.status-dialog .icon{background:url(img/pairing-promo-combo.png) center center no-repeat;background-size:contain;display:inline-block;height:11em;vertical-align:middle;width:25%}.status-dialog .info{display:inline-block;padding-left:.5em;vertical-align:middle;width:70%}.status-dialog .message{color:#ccc;font-size:2em}.status-dialog #dialog-view{padding-top:7em}.dialog-focused #legend{bottom:12%;display:block}#legend.legend-for-dialog-closed-captions{bottom:6%}#dialog.confirm-cookies .dialog-contents .header .title{font-size:3em}#dialog.confirm-cookies #dialog-view{color:#aaa;font-size:1.8em;height:8em;padding-top:.9em}.single-pane-selector{padding-bottom:1em;padding-top:1em;white-space:nowrap}.single-pane-selector .list{display:inline-block;margin-right:.5em;padding-left:.5em;padding-right:.5em;vertical-align:top;width:94%}.single-pane-selector .button .label{width:90%}.single-pane-selector .check-button.previously-selected .icon-check{display:inline-block}.split-pane-selector{border-bottom:.1em solid rgba(255,255,255,.2);padding-bottom:1em;padding-top:1em;white-space:nowrap}.check-button .icon-check{display:none;font-family:youtube-icons}.single-pane-selector .labeled-value,.split-pane-selector .labeled-value{color:#868686;font-size:1.4em;height:2.8em;line-height:1.5em;overflow:hidden;padding:0 1em;white-space:normal}.single-pane-selector .labeled-value .value,.split-pane-selector .labeled-value .value{color:#666;display:block;font-size:.7em;line-height:1.4em}.single-pane-selector .button,.split-pane-selector .button{color:#868686;cursor:pointer;font-size:1.4em;height:2.8em;line-height:2.8em;overflow:hidden;padding:0 .4em;white-space:normal}.single-pane-selector .button .label,.split-pane-selector .button .label{display:inline-block;line-height:1.3em;vertical-align:middle}.single-pane-selector .subtitled-button,.split-pane-selector .subtitled-button{line-height:1.5em}.single-pane-selector .button.no-model,.split-pane-selector .button.no-model{visibility:hidden}.split-pane-selector .list{display:inline-block;vertical-align:top;width:47%}.split-pane-selector .list:first-child{border-right:.1em solid rgba(255,255,255,.2);margin-right:.5em;padding-right:.5em}.single-pane-selector .button:hover,.single-pane-selector .list:not(.focused) .button.selected,.split-pane-selector .button:hover,.split-pane-selector .list:not(.focused) .button.selected{background-color:#444;color:#fff}.single-pane-selector .button.focused,.single-pane-selector .button.focused:hover,.split-pane-selector .button.focused,.split-pane-selector .button.focused:hover{background-color:#fff;color:black}.single-pane-selector .subtitled-button span.subtitle,.split-pane-selector .subtitled-button span.subtitle{color:#666;display:block;font-size:.7em;line-height:1.4em}.color-button .preview{border-width:2px;border-color:#000;border-style:solid;color:#868686;display:inline-block;height:1em;margin:0 .2em .2em .2em;vertical-align:middle;width:1em}.color-button .preview.rounded{border-radius:50%}.preview.black{background-color:#000;border-width:1px;border-color:#fff;border-style:solid}.preview.red{background-color:#f00}.preview.magenta{background-color:#f0f}.preview.blue{background-color:#00f}.preview.cyan{background-color:#0ff}.preview.green{background-color:#0f0}.preview.yellow{background-color:#ff0}.preview.white{background-color:#fff}.debug-dialog{font-size:.9em}.debug-dialog span.label{font-weight:bold}#dialog.browse-sets .video-upload-dialog-contents{display:inline-block;font-size:1.6em;margin:1em 3% 0 3%;text-align:left;vertical-align:top;width:55%}#dialog.browse-sets .modify-video .video-upload-dialog-contents{margin-top:2em;text-align:center}.video-upload-status .video-url{color:#2793e6}.delete-video{padding-bottom:6em}.modify-video .list .button{background-position:50% 20%;background-repeat:no-repeat;background-size:60% 60%;color:#848484;display:inline-block;height:8em;margin-right:1em;text-align:center;width:8em}.modify-video .list .button.focused{background-color:#fff;color:#282828}.modify-video .list .button span{display:block;font-size:1.2em;margin:4.6em .5em .5em .5em;overflow:hidden;white-space:nowrap}.modify-video .modify-edit-button{background-image:url('img/edit_tile_light.png')}.modify-video .modify-edit-button.focused{background-image:url('img/edit_tile_dark.png')}.modify-video .modify-delete-button{background-image:url('img/trash_tile_light.png')}.modify-video .modify-delete-button.focused{background-image:url('img/trash_tile_dark.png')}.delete-video-dialog .video-tile .details,.modify-video .video-tile .details{margin-top:-.1em}.browse-sets #modify-list .button{height:7.5em;margin-right:.9em;width:7.5em}.browse-sets #modify-list .button span{font-size:1.1em;margin-top:5.2em}.delete-video-dialog{margin-bottom:14em}.browse-sets .delete-video-dialog{margin-bottom:1em}.video-processing,.video-upload-error{font-size:1.5em}.video-upload-error .error-container{color:#aaa;margin-top:1em}#dialog .buttons .upload-terms,#dialog .buttons .upload-terms:hover{background-color:#000;color:#555;display:block;font-size:.6em;margin-left:1.5em;text-align:left}.upload-progress{margin-bottom:1em;width:100%}.upload-progress-value{text-align:left;width:100%}.upload-progress span{margin-left:-1em;position:relative;width:4em}.upload-progress .upload-progress-bar{background-color:#aaa;width:100%}.upload-progress .upload-progress-bar .completed{background-color:#2793e6;height:1em}.privacy-button{background:.4em 50% no-repeat;background-size:1.5em;cursor:pointer;position:relative}.privacy-button .checkbox{background-position:100%;background-size:2em;height:2em;left:85%;position:absolute;top:0;width:2em}.privacy-button.checked .checkbox{background-image:url(img/icon-privacy-check-light.png)}.privacy-button.focused.checked .checkbox{background-image:url(img/icon-privacy-check-dark.png)}.privacy-button .label .name{background-position:0 .5em;background-size:2em;line-height:1.5em;text-indent:1.8em}.privacy-button .description{font-size:.6em;line-height:.8em;padding-left:2.9em}.privacy-button .name{font-size:1em;line-height:1.2em;padding-left:1.7em}.private-state,.video-tile .private{background-image:url(img/icon-privacy-private-light.png)}.private-state.focused{background-image:url(img/icon-privacy-private-dark.png)}.public-state,.video-tile .public{background-image:url(img/icon-privacy-public-light.png)}.public-state.focused{background-image:url(img/icon-privacy-public-dark.png)}.unlisted-state,.video-tile .unlisted{background-image:url(img/icon-privacy-unlisted-light.png)}.unlisted-state.focused{background-image:url(img/icon-privacy-unlisted-dark.png)}.video-tile .private,.video-tile .public,.video-tile .unlisted{background-position:left;background-repeat:no-repeat;background-size:1.5em;min-height:1.5em;min-width:1.5em;padding-left:1.5em}.video-privacy .button,.video-overview .button{display:inline-block;height:2em;line-height:2em;margin:.1em 0;overflow:hidden;padding:.1em .5em;vertical-align:top;white-space:nowrap;width:65%}.video-privacy .button{width:85%}.video-overview .button:first-child{width:20%}.video-privacy .button.focused,.video-privacy .button:not(.disabled):hover,.video-overview .button.focused,.video-overview .button:not(.disabled):hover{background-color:#fff;color:#676767}#dialog.browse-sets .video-privacy .button:nth-child(2){width:11em}#dialog.browse-sets .video-uploads{margin:3em 1em 2em}#dialog.browse-sets .video-uploads .carousel{overflow:hidden}#dialog.browse-sets .video-uploads .carousel .video-tile .details{text-align:left}.video-overview .title-button{line-height:1em;white-space:normal}#dialog.browse-sets .video-overview .title-button .label{display:inline-block;line-height:2em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:95%}.video-overview .channel-button{background-position:.35em 50%;background-repeat:no-repeat;background-size:1.5em;line-height:2em;overflow:hidden;text-indent:1.8em;text-overflow:ellipsis}.video-uploads .carousel{height:20em;position:relative;white-space:nowrap}.video-tile-container{display:inline-block;margin-top:1.7em;text-align:right;width:35%}.video-tile-container .video-tile{border:.1em rgba(255,255,255,.2) solid;display:inline-block;height:22em;position:static;text-align:left;width:20em}.video-tile-container .video-tile .tile-top{height:51%}.video-tile-container .video-tile .tile-bottom .details{height:inherit}.video-uploads .carousel .video-tile{height:20em;width:18em}.video-uploads .video-tile .decoration{top:7em}.video-tile-container .video-tile .tile-bottom,.video-uploads .video-tile .tile-bottom{width:initial}.dialog.closed-captions #dialog-wrapper{margin-top:5em}#dialog.closed-captions-language-only #dialog-wrapper{padding:1.6em 26%}#dialog.closed-captions-language-only #options-list{display:none}#legend.legend-for-dialog-closedCaptionsDialog{bottom:24%}#dialog.closed-captions-language-only~#legend{right:29%}.simple-dialog{margin:3em;font-size:1.6em}.lang-ja_JP .connection-instructions .step1,.lang-ja_JP .connection-instructions .step2,.lang-ko_KR .connection-instructions .step1,.lang-ko_KR .connection-instructions .step2,.lang-zh_CN .connection-instructions .step1,.lang-zh_CN .connection-instructions .step2,.lang-zh_HK .connection-instructions .step1,.lang-zh_HK .connection-instructions .step2,.lang-zh_TW .connection-instructions .step1,.lang-zh_TW .connection-instructions .step2{font-size:.8em}.lang-de_DE .action-tile .content .title,.lang-el_GR .action-tile .content .title,.lang-es_ES .action-tile .content .title,.lang-es_MX .action-tile .content .title,.lang-fr_FR .action-tile .content .title,.lang-fr_CA .action-tile .content .title,.lang-ko_KR .action-tile .content .title,.lang-nl_NL .action-tile .content .title,.lang-pl_PL .action-tile .content .title,.lang-pt_BR .action-tile .content .title,.lang-pt_PT .action-tile .content .title,.lang-ru_RU .action-tile .content .title,.lang-uk_UA .action-tile .content .title{font-size:2em}.lang-it_IT .action-tile .content .title{font-size:1.8em}.lang-es_ES .action-tile .improve-yt-tile .title,.lang-fr_CA .action-tile .history-tile .title,.lang-fr_FR .action-tile .history-tile .title,.lang-de_DE .action-tile .terms-tile .title,.lang-fr_CA .action-tile .terms-tile .title,.lang-fr_FR .action-tile .terms-tile .title{font-size:1.7em}.lang-es_ES .action-tile .videoinfo-tile .title,.lang-es_MX .action-tile .videoinfo-tile .title,.lang-fr_CA .action-tile .videoinfo-tile .title,.lang-fr_FR .action-tile .videoinfo-tile .title,.lang-pt_BR .action-tile .videoinfo-tile .title{font-size:1.5em;white-space:normal}.lang-de_DE .action-tile .videoinfo-tile .title{font-size:1.45em;padding-left:.5em;padding-right:.5em;white-space:normal}.lang-es_ES .action-tile .videoinfo-tile .label,.lang-es_MX .action-tile .videoinfo-tile .label,.lang-fr_CA .action-tile .videoinfo-tile .label,.lang-fr_FR .action-tile .videoinfo-tile .label,.lang-pt_BR .action-tile .videoinfo-tile .label{padding-top:.6em}.lang-de_DE .action-tile .videoinfo-tile .label{font-size:1.6em;padding-top:.7em}.lang-ja_JP .action-tile .terms-tile .title{font-size:2em}.lang-ja_JP #transliteration .list{font-size:1.2em}.lang-ja_JP #keyboard-grid{font-size:1.5em}.lang-ja_JP #keyboard-spacebar{margin-left:5.5em}.lang-zh_CN #search .horizontal-list,.lang-zh_HK #search .horizontal-list,.lang-zh_TW #search .horizontal-list,.lang-ja_JP #search .horizontal-list{-o-transform:translateY(9.5em);-webkit-transform:translateY(9.5em);transform:translateY(9.5em)}.lang-ko_KR #search .horizontal-list{-o-transform:translateY(10.5em);-webkit-transform:translateY(10.5em);transform:translateY(10.5em)}.lang-ko_KR #search-keyboard{font-size:1.82em}.lang-ko_KR #letter-suggest .button{width:1em}.lang-ko_KR #keyboard-grid,.lang-ru_RU #keyboard-grid,.lang-uk_UA #keyboard-grid{margin-top:0.3em}.lang-ko_KR #keyboard-grid.lang-ko .numbers-toggle-tile.button,.lang-ru_RU #keyboard-grid.lang-ru .numbers-toggle-tile.button,.lang-uk_UA #keyboard-grid.lang-ua .numbers-toggle-tile.button{font-size:0.75em}.lang-ko_KR #keyboard-grid .button,.lang-ru_RU #keyboard-grid .button,.lang-uk_UA #keyboard-grid .button{height:1.2em;line-height:1.1em;margin-top:0.6em}.lang-ko_KR #letter-suggest .button,.lang-ru_RU #letter-suggest .button,.lang-uk_UA #letter-suggest .button{height:1.2em;line-height:1.1em;width:1.2em}.lang-ko_KR .search-state #spinner,.lang-ru_RU .search-state #spinner,.lang-uk_UA .search-state #spinner,.lang-ja_JP .search-state #spinner{top:25em}.lang-ko_KR .search-state .application-message,.lang-ru_RU .search-state .application-message,.lang-uk_UA .search-state .application-message,.lang-ja_JP .search-state .application-message{top:55%}.lang-ru_RU #keyboard-grid.lang-ru .button,.lang-uk_UA #keyboard-grid.lang-ua .button,.lang-ko_KR #keyboard-grid,.lang-ko_KR #letter-suggest,.lang-ko_KR #keyboard-spacebar{font-size:1em}.lang-ru_RU #keyboard-spacebar,.lang-uk_UA #keyboard-spacebar{margin-left:4.2em}.lang-de_DE .countdown-ad-callout .time-left-label,.lang-de_DE .countdown-ad-callout .skip-time-label{font-size:1.1em}.lang-cs_CZ .action-tile .description,.lang-de_DE .action-tile .description,.lang-hi_IN .action-tile .description,.lang-pl_PL .action-tile .description,.lang-pt_BR .action-tile .description,.lang-pt_PT .action-tile .description,.lang-ru_RU .action-tile .description,.lang-uk_UA .action-tile .description{font-size:1.3em}.lang-de_DE .guide-button.footer .guide-button-title{width:27.81em}.lang-de_DE .guide-user-name{width:13.5em}.lang-nl_NL .guide-button.disabled .guide-button-title,.lang-de_DE .guide-button.disabled .guide-button-title,.lang-fr_FR .guide-button.disabled .guide-button-title,.lang-pt_PT .guide-button.disabled .guide-button-title{width:13em}.lang-tr_TR #search #keyboard-grid .button.clear-query-tile,.lang-tr_TR .action-tile .title,.lang-tr_TR .guide-button-icon,.lang-tr_TR #keyboard-grid .button,.lang-tr_TR .tile-top .badge,.lang-tr_TR .tile-top .duration,.lang-tr_TR .title-card .badges span .lang-tr_TR.lang-case-sensitive .player-controls .button span:first-letter,.lang-tr_TR.lang-case-sensitive .player-controls .toggle-button span:first-letter,.lang-tr_TR.lang-case-sensitive .snap-controls .speakable span:first-letter,.lang-tr_TR.lang-case-sensitive .voice-command:first-letter{text-transform:none}.voice-command{display:none}.lang-case-sensitive .voice-command:first-letter{text-transform:uppercase}.engaged .voice-command{background-color:rgba(22,22,22,.7);color:#5dc21e;display:block;font-size:1em}.engaged .horizontal-list .carousel .voice-command{display:none}.engaged .horizontal-list.focused .carousel .voice-command{display:block}.engaged .pivot-video-tile .voice-command,.engaged .pivot-channel-tile .voice-command{display:none}.engaged .pivot-video-tile.speakable .voice-command,.engaged .pivot-channel-tile.speakable .voice-command{display:block}.engaged .video-tile .voice-command,.engaged .pivot-video-tile .voice-command,.engaged .pivot-channel-tile .voice-command,.engaged .playlist-tile .voice-command,.engaged .channel-tile .voice-command{bottom:50%;font-size:1.5em;margin-top:-2.17em;padding:.5em .9em;opacity:0.999}.engaged .video-tile.disabled .voice-command,.engaged .pivot-video-tile.disabled .voice-command,.engaged .pivot-channel-tile.disabled .voice-command{display:none}.engagement-indicator{bottom:0.8em;display:none;font-size:1.5em;left:1.8em;position:absolute;width:16em}.engaged .engagement-indicator{background-color:transparent;color:#5dc21e;display:block}.engagement-indicator .icon{background:no-repeat center;display:inline-block;height:2em;vertical-align:middle;width:2em}.engagement-indicator .stop-listening{padding:.5em}.engagement-indicator .stop-listening .icon{background-image:url('img/icon-xboxone-engaged.png')}.engagement-indicator .text{text-align:center}.engagement-indicator .title{display:inline-block;font-size:0.9em}.browse-sets-state.engaged .engagement-indicator,.browse-state.engaged .engagement-indicator,.post-play-state.engaged .engagement-indicator,.post-play-state.engaged .engagement-indicator,.settings-state.engaged .engagement-indicator,.search-state.engaged .engagement-indicator{display:block}.watch-state.engaged .engagement-indicator{display:block;height:3em;left:0;margin-left:auto;margin-right:auto;right:0;text-align:center;top:20%}.watch-focused .engagement-indicator .stop-listening{background-color:rgba(22,22,22,.7)}.sliding-highlighter .select,.engaged .legend-item,.engaged #dialog .speakable.button,.engaged .context-menu .speakable.button,.engaged .speakable.action-tile .title,.engaged .modify-video .speakable,.engaged .modify-video .speakable.focused{color:#5dc21e}.voice-footer{background-color:rgba(22,22,22,.7);bottom:0;color:#5dc21e;font-size:1.5em;height:3em;padding:1em 0 0.6em 0;position:absolute;text-align:center;width:100%}.voice-footer .list{font-size:0.65em;margin:auto;margin-top:-1.3em;padding-top:1em;width:29em}.voice-footer .component{display:inline-block;padding-right:1em}.engaged .voice-footer{color:#5dc21e}.engaged .voice-footer li{display:inline;padding:0 2%}.engaged .player-controls .button span,.engaged .player-controls .toggle-button span{color:#5dc21e;display:block}.engaged .player-controls .button.disabled span,.engaged .player-controls .toggle-button.disabled span{display:none}.engaged #transport-controls.ad-active .player-controls #button-list div.skip-ad-button.canskip .label,.engaged .skip-ad-button.canskip .label{color:#5dc21e}.engaged .player-controls-widget{margin-top:7.4em}.engaged .player-controls .voice-command.transport{top:1em}.legend{bottom:5.5%;color:#f1f1f1;position:absolute;right:5.5%;text-shadow:2px 2px 4px #000;display:none;background:-webkit-radial-gradient(ellipse closest-side,rgba(0,0,0,0.2) 25%,rgba(0,0,0,0.1) 60%,rgba(0,0,0,0));background:-o-radial-gradient(ellipse closest-side,rgba(0,0,0,0.2) 25%,rgba(0,0,0,0.1) 60%,rgba(0,0,0,0));background:-moz-radial-gradient(ellipse closest-side,rgba(0,0,0,0.2) 25%,rgba(0,0,0,0.1) 60%,rgba(0,0,0,0));background:radial-gradient(ellipse closest-side,rgba(0,0,0,0.2) 25%,rgba(0,0,0,0.1) 60%,rgba(0,0,0,0))}.limited-memory .legend{background:none}.legend-item{cursor:pointer;display:none;margin:0 0 0 .5em}.legend-item span{vertical-align:middle}.legend-item .icon{background-size:100%;display:block;height:2.5em;margin:auto;max-width:100%;text-align:center;width:2.5em}.legend-item.more>.icon.icon-player-more{background-size:0}.legend-item.more>.icon:before{font-family:'youtube-icons';color:#fff;font-size:1.9em;margin:auto;position:relative;top:.2em}.legend-item .title{display:block;font-size:1.1em;margin-top:0;text-align:center;text-transform:none}#legend.back .back,#legend.close-guide .close-guide,#legend.delete .delete,#legend.exit .exit,#legend.guide .guide,#legend.search .search,#legend.space .space,#legend.home .home,#legend.modify .modify,#legend.more .more,.reversed-keys #legend.back .reversed-back{display:inline-block}.reversed-keys #legend.back .back{display:none}.desktop .legend,.game-console .legend,.tv .legend{display:inline-block}.wiiu .legend{font-size:1.2em}.desktop .legend-item .icon{background-image:url(img/legend-sprite-desktop.png)}.game-console.sony .legend-item .icon{background-image:url(img/legend-sprite-ps3.png)}.roku #legend .legend-item .icon{background-image:url(img/legend-sprite-roku.png)}.skip-ad-callout .icon,.tv .legend-item .icon{background-image:url(img/legend-sprite-tv.png)}.wiiu .legend-item .icon{background-image:url(img/legend-sprite-wiiu.png)}.wiiu #user-info-background{-webkit-transform:translateZ(0)}.wiiu #search .horizontal-list{top:30%;-webkit-transform:none;transform:none}.wiiu .search-state #spinner{top:20em}.xboxone .legend-item .icon{background-image:url(img/legend-sprite-xboxone.png)}.xbox360 .legend-item .icon{background-image:url(img/legend-sprite-xbox360.png)}.desktop .legend-item.back .icon,.desktop .legend-item.exit .icon{background-position:0 47.4%;background-size:240%}.desktop .legend-item.search .icon{background-position:0 100%;background-size:240%}.desktop .legend-item.close-guide .icon,.desktop .legend-item.guide .icon,.desktop .legend-item.home .icon,.desktop .legend-item.space .icon{background-position:0 73.7%;background-size:240%}.desktop .skip-ad-callout .icon{background-position:31% 67.5%;background-size:520%;width:6.6em}.game-console.sony .legend-item .icon,.tv .legend-item .icon,.wiiu .legend-item .icon{background-repeat:no-repeat;height:1.5em;position:relative;bottom:.5em;width:1.5em}.game-console.sony .legend-item.more>.icon:before,.tv .legend-item.more>.icon:before,.wiiu .legend-item.more>.icon:before{top:initial}.game-console.microsoft .legend-item{margin-left:1.4em}.game-console.microsoft .legend-item.back .icon,.game-console.microsoft .legend-item.exit .icon,.game-console.microsoft .legend-item.reversed-back .icon{background-position:0 27.5%}.game-console.microsoft .legend-item.search .icon,.game-console.microsoft .legend-item.space .icon{background-position:0 82%}.game-console.microsoft .legend-item.close-guide .icon,.game-console.microsoft .legend-item.delete .icon,.game-console.microsoft .legend-item.guide .icon,.game-console.microsoft .legend-item.home .icon,.game-console.microsoft .legend-item.modify .icon{background-position:0 54.9%}.roku #legend .legend-item.back .icon,.roku #legend .legend-item.exit .icon{background-position:0 105%}.game-console.sony .legend-item.back .icon,.game-console.sony .legend-item.exit .icon{background-position:0 0%}.game-console.sony .legend-item.reversed-back .icon{background-position:0 100%}.game-console.sony .legend-item.search .icon,.game-console.sony .legend-item.space .icon{background-position:0 87.5%}.game-console.sony .legend-item.close-guide .icon,.game-console.sony .legend-item.delete .icon,.game-console.sony .legend-item.guide .icon,.game-console.sony .legend-item.home .icon{background-position:0 75%}.game-console.sony #dialog .logout-authenticated-info,.game-console.microsoft #dialog .logout-authenticated-info{padding-top:0}.game-console.sony .action-tile .platform-container,.game-console.microsoft .action-tile .platform-container{margin:1em;text-align:center}.game-console.sony .login-user-info .platform-user-name,.game-console.sony .platform-user-name,.game-console.microsoft .login-user-info .platform-user-name,.game-console.microsoft .platform-user-name{vertical-align:middle}.game-console.sony .login-user-info .platform-user-icon,.game-console.sony .platform-user-icon,.game-console.microsoft .platform-user-icon,.game-console.microsoft .login-user-info .platform-user-icon{background-size:cover;display:inline-block;height:3em;vertical-align:middle;width:3em}.game-console.sony #dialog .login-user-info .platform-container>div,.game-console.microsoft #dialog .login-user-info .platform-container>div{font-size:1em}.wiiu .advertisement-callout,.wiiu .advertisement-info,.wiiu #leanback-player-container,.wiiu .skip-ad-button,.wiiu .title-card,.wiiu #watch,.wiiu .toaster{-h5vcc-target-screen:screen-all}.wiiu .pivot-shelf-list{opacity:1}.wiiu .legend-item.back .icon,.wiiu .legend-item.exit .icon{background-position:0 33.3%}.wiiu .legend-item.search .icon{background-position:0 100%}.wiiu .legend-item.close-guide .icon,.wiiu .legend-item.delete .icon,.wiiu .legend-item.guide .icon,.wiiu .legend-item.home .icon{background-position:0 66.7%}.wiiu .qr-code-wrapper{display:none}.wiiu #search .search-pairing{display:none}.wiiu #search-suggestions{font-size:1.6em;height:1.6em}.wiiu .search-state .application-message{top:35%}.tv .legend-item.guide .icon,.tv .legend-item.close-guide .icon,.tv .skip-ad-callout .icon{background-position:0 100%}.lg .legend-item.back,.lg .legend-item.exit{cursor:pointer}.tv .legend-item.back .icon,.tv .legend-item.exit .icon{background-position:0% 0%}.lg .legend-item.back .icon,.lg .legend-item.exit .icon{opacity:0.8}.lg .legend-item.back:hover .icon,.lg .legend-item.exit:hover .icon{opacity:1}body.samsung{background-color:transparent!important}body.lg{background-color:transparent!important;background-image:url(tv:)!important}body.limited-memory{background-color:#111}.limited-memory .bg,.eureka .bg{background-image:none;background-color:#2e2e2e}.limited-animation .loading-indicator,.opera .loading-indicator,.lg .loading-indicator{display:none}.limited-animation .fallback-loading-indicator,.opera .fallback-loading-indicator,.lg .fallback-loading-indicator{display:block}.limited-animation .video-tile .video-thumb{opacity:1}.limited-memory .video-tile .video-thumb{background-size:cover}.limited-memory .video-tile .video-thumb.preloaded{background-size:auto}.roku.limited-memory .video-tile .video-thumb{background-size:100%;opacity:1}.limited-animation.playlist-tile .count-overlay{background-color:#000}.search .placeholder-tile,.settings .placeholder-tile,.limited-animation .browse-content .list .placeholder-tile{height:24em;width:20.75em}.guide .placeholder-tile{width:100%;height:2em}.limited-animation .action-tile,.limited-animation .channel-tile,.limited-animation .playlist-tile,.limited-animation .auto-play-tile,.limited-animation .recent-search-tile,.limited-animation .video-tile,.limited-animation .browse-content .list .placeholder-tile,.search .placeholder-tile,.settings .placeholder-tile,.shelf .placeholder-tile{display:inline-block;margin-right:1.1em;position:relative;vertical-align:top}.limited-animation .shelves{margin-top:2.5%}.limited-animation .playlist-tile .overlay,.limited-animation .video-tile .overlay,.limited-memory .playlist-tile .overlay,.limited-memory .video-tile .overlay{opacity:1}.limited-memory .auto-play-tile .video-tile{margin:0}.limited-animation .auto-play-tile .post-play-countdown{top:-4em}.limited-animation .hide-background.video-tile .video-thumb{background-image:url(img/icon-playbutton.png)!important;background-repeat:no-repeat;opacity:1}.limited-animation .action-tile.focused .content{text-shadow:none}.limited-animation .post-play-countdown{text-shadow:none}.limited-animation #keyboard-grid .button.disabled,.limited-animation #keyboard-grid .button.focused,.limited-animation #letter-suggest .button{background-color:rgba(153,153,153,1)}.limited-animation #search #text-box-background,.limited-animation #search #search-text-entry{background-color:#000}.limited-animation #search-keyboard,.limited-animation #letter-suggest{text-shadow:none}.limited-animation #search-keyboard .disabled,.limited-animation #letter-suggest .button{color:#000;text-shadow:none}.limited-animation #letter-suggest .button.focused,.limited-animation #search-keyboard .button.focused{background-color:#e1e1e1;color:#212121}.limited-animation #transliteration .list .button{border-right-color:#f1f1f1}.limited-animation #transliteration .list .button.focused{background-color:rgba(153,153,153,1)}.limited-animation .toaster .toast-container{background-color:rgba(27,25,26,1)}.limited-animation .title-card,.limited-memory.limited-animation.sets-ui .title-card{background:#000;height:20%}.opera .focused,.opera :focus{outline:invert none medium}.eureka #browse-sets,.eureka #dialog .buttons,.eureka .legend,.eureka #transport-controls{display:none}#eureka-player-controls-container{display:none;position:absolute;top:17em;width:100%}.eureka #eureka-player-controls-container{display:block}.eureka .loading #eureka-player-controls-container{opacity:0}#eureka-player-controls{background-size:100%;border-radius:1em;height:11.5em;margin:0 auto;overflow:hidden;width:11.5em}.eureka #eureka-player-controls{opacity:0}@-webkit-keyframes showAndShrinkPause{from{-webkit-transform:scale(1.5);opacity:0}to{opacity:.7}}@-webkit-keyframes hideAndGrowPlay{from{opacity:.7}to{-webkit-transform:scale(1.5);opacity:0}}.eureka #watch.play #eureka-player-controls{background-image:url(img/player-play.png);-webkit-animation:hideAndGrowPlay linear 0.25s 0s 1 normal none}.eureka #watch.pause #eureka-player-controls{background-image:url(img/player-pause.png);-webkit-animation:showAndShrinkPause linear 0.25s 0s 1 normal none;opacity:.7}.xboxone .action-tile,.xboxone .legend-item.back,.xboxone .legend-item.delete,.xboxone .legend-item.exit,.xboxone .legend-item.home,.xboxone .legend-item.modify,.xboxone .legend-item.reversed-back,.xboxone .legend-item.search,.xboxone .player-controls div,.xboxone .auto-play-tile,.xboxone .video-stream,.xboxone .video-tile,.xboxone #browse-search-bar,.xboxone #guide.focused .guide-button,.xboxone #player-controls .item,.xboxone #snap-buttons>div{-h5vcc-gesturable:gesture-clickable}.xboxone #browse-sets{-h5vcc-gesturable:gesture-scroll-both}.xboxone #guide.focused .carousel{-h5vcc-gesturable:gesture-scroll-vertical}.xboxone .settings-shelf{-h5vcc-gesturable:gesture-scroll-horizontal}.xboxone #transliteration .button:hover,.xboxone #keyboard-grid .button:hover{background:none;cursor:default}.search-hint{display:none}.xboxone .search-hint,.xbox360 .search-hint{color:#6b6b6b;display:block;font-size:1.4em;line-height:2em}.context-menu-defocuser{background-color:rgba(0,0,0,0.5);height:100%;left:0;position:absolute;top:0;width:100%}.context-menu-list{background-color:#000;height:initial;left:50%;padding-top:2.5em;position:relative;top:50%;-moz-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);-o-transform:translate(-50%,-50%);-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);width:30%}.context-menu-list .button{-h5vcc-gesturable:gesture-clickable;border:#000 solid;border-width:0.5em 1em 0.5em 1em;color:#e1e1e1;cursor:pointer;font-family:roboto-regular;font-size:1.5em;height:auto;line-height:2.5em;margin:0;text-align:left;text-indent:1em;transition-duration:200ms;transition-property:background-color,color;transition-timing-function:cubic-bezier(0.4,0,0.2,1);-webkit-transition-duration:200ms;-webkit-transition-property:background-color,color;-webkit-transition-timing-function:cubic-bezier(0.4,0,0.2,1)}.context-menu-list .button:before{font-family:youtube-icons;padding-right:1em}.context-menu-list .button.icon-platform-switch-users{background:#1f1f1f url() no-repeat;background-position:0.5em center;background-size:2em 2em;border:solid #1f1f1f;border-width:2em 1em 2em 1em;height:initial;line-height:initial;margin-top:1em;padding:0.5em 0 0.5em 3em;text-indent:0}.context-menu-list .button.focused{background-color:#e1e1e1;color:#000}.call-to-cast{display:none}.call-to-cast.focused{bottom:0;display:block;left:0;position:absolute;right:0;top:0}.call-to-cast-text{color:#f1f1f1;font-weight:normal;text-shadow:#000 .06em .06em;width:38%}h2.call-to-cast-text{font-size:3.2em;margin-bottom:0.3em;margin-top:0;padding-top:1.5em}h3.call-to-cast-text{font-size:1.7em}.call-to-cast .end-screen{background-position:center center;background-repeat:no-repeat;background-size:cover;display:none;height:100%}.call-to-cast .end-screen.active{display:block}.call-to-cast .end-screen .call-to-cast-text{color:#fff;width:40%}.call-to-cast .end-screen .call-to-cast-text em{color:#0090ff;font-style:normal}.call-to-cast .end-screen h2.call-to-cast-text{margin-bottom:0.5em;padding-top:2em}.call-to-cast .end-screen h3.call-to-cast-text{line-height:1.5em}.call-to-cast .end-screen.left .call-to-cast-text{margin-left:5%}.call-to-cast .end-screen.right .call-to-cast-text{margin-left:50%}.call-to-cast .end-screen .yt-logo,.call-to-cast .end-screen .yt-kids-logo{background-image:url(img/call-to-cast-yt-logo.png);background-repeat:no-repeat;background-size:contain;bottom:8%;height:13.88%;position:fixed;width:100%}.call-to-cast .end-screen.left .yt-logo,.call-to-cast .end-screen.left .yt-kids-logo{background-position:left center;left:4%}.call-to-cast .end-screen.right .yt-logo,.call-to-cast .end-screen.right .yt-kids-logo{background-position:right center;right:4%}.call-to-cast .end-screen .yt-kids-logo{background-image:url(img/yt-kids-logo.png);height:20%}.call-to-cast .end-screen.multi-user{background-image:url(img/call-to-cast-end-screen-multi-user.jpg)}.call-to-cast .end-screen.yt-mix{background-image:url(img/call-to-cast-end-screen-yt-mix.jpg)}.call-to-cast .end-screen.tv-queue{background-image:url(img/call-to-cast-end-screen-tv-queue.jpg)}.call-to-cast .end-screen.kids-promo{background-image:url(img/call-to-cast-end-screen-kids-promo.jpg)}.call-to-cast .end-screen.kids-mother-goose{background-image:url(img/call-to-cast-end-screen-kids-mother-goose.jpg)}.call-to-cast .end-screen.kids-rainbow{background-image:url(img/call-to-cast-end-screen-kids-rainbow.jpg)}.call-to-cast .end-screen.kids-sesame{background-image:url(img/call-to-cast-end-screen-kids-sesame.jpg)}.call-to-cast .end-screen.kids-talking-tom{background-image:url(img/call-to-cast-end-screen-kids-talking-tom.jpg)}.call-to-cast .end-screen.kids-wonderquest{background-image:url(img/call-to-cast-end-screen-kids-wonderquest.jpg)}.call-to-cast .THEME-cl.end-screen.kids-promo h2.call-to-cast-text{width:80%}.call-to-cast .THEME-k.end-screen h3.call-to-cast-text{font-size:3em;line-height:1.4em;margin-top:0;padding-top:10%;padding-left:5%;width:45%}.call-to-cast .end-screen.gaming-heart{background-image:url(img/call-to-cast-end-screen-gaming-heart.jpg)}.call-to-cast .THEME-g.end-screen h3.call-to-cast-text{font-size:2.2em;padding-top:0%;width:100%}.call-to-cast .end-screen.loki{background-image:url(img/call-to-cast-end-screen-loki.jpg)}.call-to-cast .THEME-up.end-screen h3.call-to-cast-text{font-size:2.2em;margin-left:0%;padding-top:17em;text-align:center;width:100%}.call-to-cast .THEME-m.end-screen h2.call-to-cast-text{font-size:2.2em;margin-bottom:0;text-align:center;width:100%}.call-to-cast .THEME-m.end-screen h3.call-to-cast-text{margin-top:0;text-align:center;width:100%}.call-to-cast .THEME-m.end-screen.music-ready{background-image:url(img/call-to-cast-music.jpg)}.call-to-cast .THEME-m.end-screen.music-ready .call-to-cast-logo{background:url(img/yt-music-logo.png) no-repeat center bottom;height:60%}.call-to-cast .THEME-m.end-screen.music-ready h2.call-to-cast-text{padding-top:10%}.call-to-cast .THEME-m.end-screen.music-party{background-image:url(img/call-to-cast-music.jpg);height:100%}.call-to-cast .THEME-m.end-screen.music-party .call-to-cast-logo{background:url(img/call-to-cast-music-party-logo.png) no-repeat center bottom;height:55%}.call-to-cast .THEME-m.end-screen.music-party .footer{background:url(img/yt-music-logo-small.png) no-repeat center top;height:10%}.snap-controls{height:90%;padding:.5em;position:relative}.snapped.blurred #snap-buttons,.snapped.blurred #unsupported-mode,.snapped.blurred #ad-callout,.snapped.blurred .logo-container,.snapped.blurred .title-card,.snapped.blurred .up-next{opacity:.25!important}.snapped #dialog,.snapped #guide,.snapped #search,.snapped #settings,.snapped #title-tray,.snapped #transport-controls,.snapped .ad-showing .video-ads,.snapped .advertisement-info,.snapped .application-message,.snapped .browse,.snapped .browse-sets,.snapped .caption-window,.snapped .countdown-ad-callout,.snapped .html5-video-info-panel,.snapped .legend,.snapped .player-video-avatar,.snapped .quality-status,.snapped .skip-ad-button,.snapped .skip-ad-callout,.snapped .toaster,.snapped.blurred.browse-sets-state .title-card,.snapped.blurred.search-state .title-card,.snapped.blurred.settings-state .title-card,.snapped.dialog-focused #snap-progress-bar,.snapped.dialog-focused #watch{display:none!important}.snapped .advertisement-tooltip{color:#a0a0a0;font-size:.4em;left:0;top:0}.snapped .advertisement-tooltip .remaining_duration{color:#717171}.snapped #ad-callout{left:5%;top:18%}.snapped .debug-watermark{font-size:.2em;width:100%}#app-markup.snapped{background-color:#231f20}.snapped #background{display:none}.snapped{font-size:2em}.snapped.watch-state .logo-container{opacity:inherit}.snapped .icon-youtube-logo:before{content:''}.snap-controls .logo-container{background:url(img/yt-logo-fullcolor.png) no-repeat center top;display:inherit;height:2.5em;left:0;position:absolute;right:0;top:5%}.snapped .ad-video,.snapped .ad-created .video-stream{height:270px!important;width:480px!important}.snapped .video-stream,.snapped .html5-video-content{-webkit-transform:scale(.9)!important;max-height:5.6em;top:4.4em!important}.snapped .html5-video-controls{top:9.8em!important}.snapped .player-video-title{color:#a0a0a0;font-size:.7em;line-height:1.1em;margin:0;max-height:2.2em;white-space:normal;width:12em}.snapped .player-meta{left:0;margin:0;position:inherit;top:0}.snapped .player-meta .player-video-text{padding-left:0}.snapped .player-meta .player-video-details{color:#717171;font-size:.5em;line-height:1.1em}.snapped .player-meta .player-video-details>div{margin-left:0}.snapped .player-video-details .uploaded-date,.snapped .player-video-details .set-context,.snapped .player-video-details .view-count{font-size:.9em;margin-top:0}.watch-state.snapped #snap-progress-bar{display:block}#snap-progress-bar{background-position:top left;display:none;height:.1em;left:0;margin-top:9.25em;padding:0;position:relative;top:0;width:100%}#snap-progress-bar .progress-bar-disc,#snap-progress-bar .progress-bar-playhead{display:none}#snap-progress-bar div{height:5px;top:0}.snapped .title-card{background:none;border:none;height:initial;padding-top:.3em;position:inherit}#unsupported-mode{color:#fff;font-size:.9em;line-height:1.2em;padding:80% 1em 0;width:8em}.snap-controls .mute{background-image:url(img/icon-mute.png)}.snap-controls .mute.toggle-selected{background-image:url(img/icon-unmute.png)}.snap-controls .fullscreen{background-image:url(img/icon-fullscreen.png)}.snapped .loading-indicator{height:5em;width:5em}.snapped #spinner{top:19%;-o-transform:scale(.5);-webkit-transform:scale(.5);transform:scale(.5)}.engaged.snapped .engagement-indicator{display:inline-block;font-size:.6em!important;left:0;margin-left:auto;margin-right:auto;position:absolute;right:0;text-align:center;top:4.2em!important}.engaged.snapped .engagement-indicator .stop-listening{background:transparent}.snap-controls #snap-buttons{bottom:0;position:absolute}.snap-controls #snap-buttons .focused,.snap-controls #snap-buttons :hover{-webkit-border-radius:.15em;background-color:#fff;color:#000}.snap-controls #snap-buttons .button,.snap-controls #snap-buttons .toggle-button{display:inline-block;font-size:.8em;height:1em;margin-left:.5em;padding:1em;position:relative;text-align:center;top:0;width:1em}.snap-controls #snap-buttons div{color:#fff;cursor:pointer;vertical-align:middle}.snap-controls #snap-buttons div.disabled:hover{background-color:transparent;color:#fff}.snap-controls #snap-buttons div.focused{opacity:1}.snap-controls #snap-buttons div.disabled{opacity:.2}.snap-controls .speakable span,.snap-controls .disabled span{display:none}.engaged .snap-controls .speakable:not(.disabled) span{color:#5dc21e;display:block;font-size:.6em;left:0;overflow:hidden;pointer-events:none;position:absolute;text-align:center;top:-1.5em;width:100%;word-break:break-all}.lang-case-sensitive .snap-controls .speakable span:first-letter{text-transform:uppercase}.snap-controls .icon-player-play{font-family:'youtube-icons'}.snap-controls .icon-mute,.snap-controls .icon-fullscreen{background-position:center center;background-repeat:no-repeat;background-size:3em}.snap-controls .icon-mute,.snap-controls .icon-mute.disabled{background-image:url(img/button-unmute-active.png)}.snap-controls .icon-mute.focused,.snap-controls .icon-mute:hover:not(.disabled){background-image:url(img/button-unmute-onhover-active.png)}.snap-controls .icon-mute.toggle-selected{background-image:url(img/button-mute-active.png)}.snap-controls .icon-mute.toggle-selected.focused,.snap-controls .icon-mute.toggle-selected:hover{background-image:url(img/button-mute-onhover-active.png)}.snap-controls .icon-fullscreen{background-image:url(img/button-fullscreen-active.png)}.snap-controls .icon-fullscreen.focused,.snap-controls .icon-fullscreen:hover{background-image:url(img/button-fullscreen-onhover-active.png)}.up-next{height:3em;padding-top:1em}.up-next div{color:#a0a0a0;font-size:.6em}.up-next .video-title{height:1.2em;line-height:1.2em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.up-next .video-thumb{background:no-repeat center/100%;display:inline-block;height:100%;margin-top:.2em;max-height:2.5em;vertical-align:top;width:5em}#browse-sets{background-color:#222;height:100%;left:0;overflow:hidden;position:absolute;right:0}#browse-sets.no-background,.limited-memory #browse-sets{background-color:rgba(0,0,0,0)}#browse-search-bar{background-color:rgba(153,153,153,.2);cursor:pointer;height:3em;left:8em;margin-right:18em;position:absolute;right:2.5em;top:2.5em}.limited-animation #browse-search-bar{background-color:#4f575a}#browse-search-bar.focused,#browse-search-bar:hover{background:#fff}#browse-search-bar .icon{color:rgba(255,255,255,.4);display:block;font-family:'youtube-icons';font-size:1.8em;margin:0;padding:.35em 0 0 .5em;text-align:left}.limited-animation #browse-search-bar .icon{color:#e1e1e1}.youtube-logo-top{height:3.4em;position:absolute;right:9.5em;top:2.3em;width:8.4em;font-family:'youtube-icons'}#browse-sets.has-header-content .youtube-logo-top{display:none}.youtube-logo:before{color:rgba(153,153,153,.5);display:block;font-size:3.4em}.youtube-unlimited-logo:before{color:rgba(153,153,153,.5);display:none;font-size:3.4em;position:relative;right:.5em}.unlimited .youtube-logo:before{display:none}.unlimited .youtube-unlimited-logo:before{display:block}.limited-animation .youtube-unlimited-logo:before,.limited-animation .youtube-logo:before{color:#4f575a}#browse-search-bar.focused .icon,#browse-search-bar:hover .icon{color:#444}#platform-user-icon{background-position:center;background-repeat:no-repeat;background-size:contain;height:4em;position:absolute;right:3em;top:2em;width:4em}#browse-header{background-position:0 -8em;background-size:cover;height:60%;position:relative}.limited-memory.limited-animation #browse-header{background-position:6em 0;background-repeat:no-repeat;background-size:contain}.no-background #browse-header{background-image:none!important}.browse-sets #browse-header.collapsed{-o-transform:translateY(-27%);-webkit-transform:translateY(-27%);transform:translateY(-27%)}.limited-memory .browse-sets #browse-header.collapsed{top:-7em;-o-transform:none;-webkit-transform:none;transform:none}#browse-header .title{color:#e1e1e1;display:inline-block;font-size:2.25em;margin-bottom:-.23em;overflow:hidden;text-overflow:ellipsis;-o-transform-origin:left;-webkit-transform-origin:left;transform-origin:left;white-space:nowrap;width:23.7em}#browse-header.one-button .title{width:18.7em}#browse-header.two-buttons .title{width:14em}#browse-header.collapsed .title{overflow:visible;-o-transform:scale(.8,.8) translateY(-5em) translateX(-1.5em);-webkit-transform:scale(.8,.8) translateY(-5em) translateX(-1.5em);transform:scale(.8,.8) translateY(-5em) translateX(-1.5em)}.browse-header-gradient{background:-o-linear-gradient(top,rgba(34,34,34,0) 0%,rgba(34,34,34,0) 15%,rgba(34,34,34,1) 100%);background:-webkit-linear-gradient(top,rgba(34,34,34,0) 0%,rgba(34,34,34,0) 15%,rgba(34,34,34,1) 100%);background:linear-gradient(to bottom,rgba(34,34,34,0) 0%,rgba(34,34,34,0) 15%,rgba(34,34,34,1) 100%);height:100%;width:100%}.limited-memory .browse-header-gradient{display:none}.no-background .browse-header-gradient{visibility:hidden}.browse-header-metadata{left:8em;position:absolute;-o-transform:translateZ(0);-webkit-transform:translateZ(0);transform:translateZ(0)}.limited-memory.limited-animation .browse-header-metadata{top:11.6em}.limited-memory.limited-animation #browse-header.collapsed .browse-header-metadata{font-size:inherit;left:8em;top:11em}.limited-memory.limited-animation #browse-header.collapsed .browse-header-metadata .browse-header-avatar{height:4em;margin-right:1em;width:4em}.browse-header-avatar{background-size:contain;display:inline-block;height:5em;margin-right:1.3em;-o-transform-origin:left;-webkit-transform-origin:left;transform-origin:left;width:5em}#browse-header.collapsed .browse-header-avatar{-o-transform:scale(.61,.61) translateY(-13.5em);-webkit-transform:scale(.61,.61) translateY(-13.5em);transform:scale(.61,.61) translateY(-13.5em)}#browse-header.collapsed .browse-header-button-bar{-o-transform:translateY(-6.25em);-webkit-transform:translateY(-6.25em);transform:translateY(-6.25em);opacity:0}.browse-header-button-bar{background:rgba(0,0,0,.4);border-radius:.15em;font-size:1.1em;height:2.4em;margin-bottom:-.59em;padding:.59em;position:absolute;right:3.5em}.limited-animation .browse-header-button-bar{background:#1f2426}.limited-memory.limited-animation .browse-header-button-bar{top:13em}.browse-header-button-bar,.browse-header-metadata{bottom:3.9em}.browse-header-button-bar .button{border-radius:.12em;color:#e1e1e1;cursor:default;display:inline-block;height:2.4em;min-width:8.2em;overflow:hidden;padding-right:1em;white-space:nowrap}.browse-header-button-bar .button span{line-height:2.4em;vertical-align:middle}.browse-header-button-bar .button.focused,.browse-header-button-bar .button.focused:hover{background:#e1e1e1;color:#212121}.browse-header-button-bar .button:hover{background-color:#666}.browse-header-button-bar .button .icon{display:inline-block;font-family:'youtube-icons';height:2.4em;margin:0 1em 0 1em}.browse-header-subscribe .icon:before{font-size:2em}.browse-header-subscribe.toggle-selected .icon:before{content:"\00e602";font-size:1em}.browse-header-subscribe.toggle-selected.focused{color:#ce292d}.browse-header-subscribe.disabled{background-color:rgba(0,0,0,0)}.browse-content{height:80%;left:8em;position:absolute;top:14.5%;width:100%}.browse-sets.collapsed .browse-content{-o-transform:translateY(44%);-webkit-transform:translateY(44%);transform:translateY(44%)}.limited-memory .browse-sets.collapsed .browse-content{top:20em;-o-transform:none;-webkit-transform:none;transform:none}#browse-header,.browse-header-avatar,.browse-header-button-bar,.browse-content,#browse-header .title{-o-transform:translateZ(0);-webkit-transform:translateZ(0);transform:translateZ(0);-o-transition:-o-transform .25s;-webkit-transition:-webkit-transform .25s;transition:-webkit-transform .25s}.browse-header-button-bar{-o-transition:opacity .25s -o-transform .25s;-webkit-transition:opacity .25s,-webkit-transform .25s;transition:opacity .25s,transform .25s}.limited-animation #browse-header,.limited-animation .browse-header-avatar,.limited-animation #browse-header.collapsed .browse-header-avatar,.limited-animation .browse-content,.limited-animation .browse-header-button-bar,.limited-animation #browse-header .title,.limited-animation .browse-content .shelves,.limited-animation .browse-header-metadata,.limited-animation .shelf #content-container,.limited-animation .shelves>.title,.limited-animation .shelf>.title,.limited-animation .horizontal-list>.content,.limited-animation .horizontal-list,.limited-animation .shelves .carousel{-o-transition:all 0;-webkit-transition:none;transition:none;-o-transform:none;-webkit-transform:none;transform:none}.limited-animation #browse-header.collapsed .browse-header-metadata{font-size:.6em;left:13.25em;top:17.75em}.limited-animation #browse-header.collapsed .browse-header-metadata .title{font-size:3em}.limited-memory #browse-header.collapsed .browse-header-metadata .title{font-size:1.8em}.limited-animation .browse-content .list{margin-left:-9.5em;width:126em}.limited-animation .browse-content .shelf>.title{margin-left:6em}.limited-animation.sets-ui .action-tile:not(.focused),.limited-animation.sets-ui .auto-play-tile:not(.focused) .video-tile,.limited-animation.sets-ui .channel-tile:not(.focused),.limited-animation.sets-ui .playlist-tile:not(.focused),.limited-animation.sets-ui .recent-search-tile:not(.focused),.limited-animation.sets-ui .video-tile:not(.focused),.roku.limited-animation.sets-ui .action-tile:hover:not(.focused),.roku.limited-animation.sets-ui .auto-play-tile:hover:not(.focused) .video-tile,.roku.limited-animation.sets-ui .channel-tile:hover:not(.focused),.roku.limited-animation.sets-ui .playlist-tile:hover:not(.focused),.roku.limited-animation.sets-ui .video-tile:hover:not(.focused){background-color:#212121}.limited-animation.sets-ui .action-tile:hover:not(.focused),.limited-animation.sets-ui .auto-play-tile:hover:not(.focused) .video-tile,.limited-animation.sets-ui .channel-tile:hover:not(.focused),.limited-animation.sets-ui .playlist-tile:hover:not(.focused),.limited-animation.sets-ui .recent-search-tile:hover:not(.focused),.limited-animation.sets-ui .video-tile:hover:not(.focused){background-color:#414141}.browse-content .shelves{margin-left:0em;-o-transform:translateZ(0);-webkit-transform:translateZ(0);transform:translateZ(0)}.browse-content .shelves>.no-content-message,.browse-content .horizontal-list>.no-content-message{margin-left:-8em}.shelves>.no-content-message,.horizontal-list>.no-content-message{display:none;position:absolute;top:8em;width:100%}.shelves.no-content>.no-content-message,.horizontal-list.no-content>.no-content-message{display:block}.shelves>.no-content-message .text,.horizontal-list>.no-content-message .text{color:#f1f1f1;font-size:1.8em;text-align:center;text-shadow:#000 .04em .04em}.shelf{width:100%}.limited-animation .shelf{margin-bottom:1.8em}.carousel .shelf{position:absolute}.shelf #content-container{-o-transform:translateZ(0);-webkit-transform:translateZ(0);transform:translateZ(0)}.shelves>.title,.shelf>.title{color:#999;font-size:1.6em;margin-bottom:1.0em;margin-top:.2em;-o-transform:translateZ(0);-webkit-transform:translateZ(0);transform:translateZ(0);white-space:nowrap}.shelves>.title,.shelf.selected>.title{color:#fff}.shelf>.title .annotation{color:#777;font-size:70%;margin-left:.5em}.shelf.selected>.title .annotation{color:#ddd}.horizontal-list.no-model,.shelf.no-model,.survey-shelf.no-model{display:none}.shelf>.icon{display:none}.horizontal-list>.content{font-size:79%;height:26em;opacity:1;-o-transform:translateZ(0);-webkit-transform:translateZ(0);transform:translateZ(0)}.horizontal-list.focused>.content{opacity:1}.horizontal-list,.shelves .carousel,.browse-header-metadata{-o-transform:translateZ(0);-webkit-transform:translateZ(0);transform:translateZ(0)}.shelf0to0{opacity:1;-webkit-transform:translateY(0%) scale(1);-o-transform:translateY(0%) scale(1)}@-webkit-keyframes shelf0to1-anim{from{-webkit-transform:translateY(0%)}to{-webkit-transform:translateY(100%)}}@-o-keyframes shelf0to1-anim{from{-o-transform:translateY(0%)}to{-o-transform:translateY(100%)}}.shelf0to1{-webkit-animation:shelf0to1-anim 200ms forwards;-o-animation:shelf0to1-anim 200ms forwards}@-webkit-keyframes shelf0to2-anim{from{opacity:1;-webkit-transform:translateX(0%) translateY(0%) scale(1.0)}100%{opacity:0;-webkit-transform:translateX(-2%) translateY(-11%) scale(0.75)}}@-o-keyframes shelf0to2-anim{from{opacity:1;-o-transform:translateX(0%) translateY(0%) scale(1.0)}100%{opacity:0;-o-transform:translateX(-2%) translateY(-11%) scale(0.75)}}.shelf0to2{-webkit-animation:shelf0to2-anim 200ms forwards;-o-animation:shelf0to2-anim 200ms forwards}@-webkit-keyframes shelf1to0-anim{from{-webkit-transform:translateX(0%) translateY(100%)}to{-webkit-transform:translateX(0%) translateY(0%)}}@-o-keyframes shelf1to0-anim{from{-o-transform:translateX(0%) translateY(100%)}to{-o-transform:translateX(0%) translateY(0%)}}.shelf1to0{-webkit-animation:shelf1to0-anim 200ms forwards;-o-animation:shelf1to0-anim 200ms forwards}.shelf1to1{opacity:1;-webkit-transform:translateX(0%) translateY(100%) scale(1);-o-transform:translateX(0%) translateY(100%) scale(1)}@-webkit-keyframes shelf1to2-anim{from{-webkit-transform:translateX(0%) translateY(100%)}99%{-webkit-transform:translateX(0%) translateY(200%)}100%{opacity:0;-webkit-transform:translateX(-2%) translateY(-11%) scale(0.75)}}@-o-keyframes shelf1to2-anim{from{-o-transform:translateX(0%) translateY(100%)}99%{-o-transform:translateX(0%) translateY(200%)}100%{opacity:0;-o-transform:translateX(-2%) translateY(-11%) scale(0.75)}}.shelf1to2{-webkit-animation:shelf1to2-anim 200ms forwards;-o-animation:shelf1to2-anim 200ms forwards}@-webkit-keyframes shelf2to0-anim{from{opacity:0;-webkit-transform:translateX(-2%) translateY(-11%) scale(0.75)}to{opacity:1;-webkit-transform:translateX(0%) translateY(0%) scale(1.0)}}@-o-keyframes shelf2to0-anim{from{opacity:0;-o-transform:translateX(-2%) translateY(-11%) scale(0.75)}to{opacity:1;-o-transform:translateX(0%) translateY(0%) scale(1.0)}}.shelf2to0{-webkit-animation:shelf2to0-anim 200ms forwards;-o-animation:shelf2to0-anim 200ms forwards}@-webkit-keyframes shelf2to1-anim{from{opacity:1;-webkit-transform:translateX(0%) translateY(200%)}to{opacity:1;-webkit-transform:translateX(0%) translateY(100%)}}@-o-keyframes shelf2to1-anim{from{opacity:1;-o-transform:translateX(0%) translateY(200%)}to{opacity:1;-o-transform:translateX(0%) translateY(100%)}}.shelf2to1{-webkit-animation:shelf2to1-anim 200ms forwards;-o-animation:shelf2to1-anim 200ms forwards}.shelf2to2{opacity:0;-webkit-transform:translateX(-2%) translateY(-11%) scale(0.75);-o-transform:translateX(-2%) translateY(-11%) scale(0.75)}.limited-memory .shelves .list .video-tile:nth-child(1) .video-thumb,.limited-memory .shelves .list .channel-tile:nth-child(1) .video-thumb,.limited-memory.sets-ui #search .horizontal-list .list .video-tile:nth-child(1) .video-thumb,.limited-memory.sets-ui #search .horizontal-list .list .channel-tile:nth-child(1) .video-thumb,.limited-memory.sets-ui #browse .list .video-tile:nth-child(1) .video-thumb,.limited-memory.sets-ui #browse .list .channel-tile:nth-child(1) .video-thumb,.limited-memory.sets-ui #browse .list .video-tile:last-child .video-thumb,.limited-memory.sets-ui #browse .list .channel-tile:last-child .video-thumb{background:none!important}.survey-shelf{position:absolute}.survey-shelf>.title{color:#fff;display:inline-block;font-size:1.6em;margin-bottom:1.0em;margin-top:0.2em}.survey-shelf .action-tile .content>.title{display:none}.survey-shelf .horizontal-list>.content{font-size:79%;height:26em}.survey-shelf .description{color:#fff;visibility:visible}.survey-shelf .button{display:inline-block;margin-bottom:1em;margin-left:2em}.survey-shelf .sliding-highlighter{height:8em;width:8em}.survey-shelf .action-tile,.exp-densityBrowse .survey-shelf .action-tile{border:0;height:8em;width:8em}.survey-shelf .action-tile .content{height:8em;width:8em}.survey-shelf .action-tile .description{color:#777;font-size:1.2em;margin-top:-1.3em;opacity:1;white-space:nowrap}.exp-densityBrowse .survey-shelf.focused .action-tile .description{display:block}.exp-densityBrowse .survey-shelf .action-tile .description{display:none}.survey-shelf .action-tile .large-action-icon,.exp-densityBrowse .survey-shelf .action-tile .large-action-icon{background-color:transparent;font-size:5em;margin-top:.26em;padding-right:.2em}.survey-shelf .action-tile.selected .large-action-icon,.exp-densityBrowse .survey-shelf .action-tile.selected .large-action-icon{color:#fff}.survey-shelf .action-tile.focused .large-action-icon,.exp-densityBrowse .survey-shelf .action-tile.focused .large-action-icon{color:#222}.survey-shelf .button.focused{background-color:#fff;border-radius:.1em;color:#222;padding:.2em}.survey-shelf .button{color:#777}.limited-animation .survey-shelf{margin-bottom:5em;position:relative}.limited-animation .survey-shelf>.title{margin-left:6em}.limited-animation .exp-densityBrowse .survey-shelf>.title{margin-left:5em}.limited-animation .survey-shelf .horizontal-list{margin-left:17.5em}.limited-animation .exp-densityBrowse .survey-shelf .horizontal-list{margin-left:13.5em}.limited-animation .exp-densityBrowse .survey-shelf .action-tile .large-action-icon{margin-top:.12em}.limited-animation .exp-densityBrowse .survey-shelf .action-tile .description{display:block}#guide{box-shadow:.1em 0 1em 0em black;height:100%;left:0;overflow:hidden;position:absolute;-o-transform:translateX(-23em);-webkit-transform:translateX(-23em) translateZ(0);transform:translateX(-23em) translateZ(0);-o-transition:-o-transform 400ms cubic-bezier(0.4,0.0,0.2,1);-webkit-transition:-webkit-transform 400ms cubic-bezier(0.4,0.0,0.2,1);transition:transform 400ms cubic-bezier(0.4,0.0,0.2,1);width:28em}.limited-memory.limited-animation #guide{box-shadow:none;-o-transform:none;-webkit-transform:none;transform:none}.limited-memory #guide.focused{border-right:none}#guide.focused{-o-transform:translateX(0);-webkit-transform:translateX(0);transform:translateX(0)}#guide:hover{background-color:rgba(255,255,255,.2)}.limited-animation #guide:hover{background:none}.limited-animation #guide,.limited-animation #guide #user-info-background,.limited-animation .guide-carousel-background{-o-transition:none;-webkit-transition:none;transition:none}.guide-carousel-background{background-color:rgba(0,0,0,.2);height:100%;left:0em;position:absolute;top:0em;width:100%;-o-transition:background-color 400ms;-webkit-transition:background-color 400ms;transition:background-color 400ms}.limited-animation .guide-carousel-background,.limited-animation #guide #user-info-background{background-color:#1f2426}.limited-animation #guide:hover .guide-carousel-background,.limited-animation #guide:hover #user-info-background{background-color:#384145}.limited-animation.limited-memory .guide-carousel-background,.limited-animation.limited-memory #guide #user-info-background{background-color:#df2323}.limited-memory .guide-carousel-background,.limited-memory #guide #user-info-background,#guide .list{display:none}.limited-memory #guide.focused .guide-carousel-background,.limited-memory #guide.focused.logged-in #user-info-background,#guide.focused .list{display:block}.logged-in .guide-carousel-background{top:8.5em}#guide.focused .guide-carousel-background,#guide.focused:hover .guide-carousel-background{background-color:#df2323}.collapsed-guide,#guide.focused .collapsed-guide{display:none}.collapsed-guide-icons{color:#85888a;font-size:1.6em;left:15em;opacity:1;position:absolute;top:7.5em}.collapsed-guide-icon{font-family:'youtube-icons';margin-top:1em;margin-bottom:1em;text-align:center;width:2em}#guide .collapsed-guide-icons{-o-transition:opacity 150ms 450ms;-webkit-transition:opacity 150ms 450ms;transition:opacity 150ms 450ms}.limited-memory .collapsed-guide-icons{left:1em}.limited-animation #guide .collapsed-guide-icons{-o-transition:none;-webkit-transition:none;transition:none}#guide.focused .collapsed-guide-icons{opacity:0;-o-transition:none;-webkit-transition:none;transition:none}#guide .collapsed-guide-icon.icon-guide-my-subs{display:none}#guide.logged-in .collapsed-guide-icon.icon-guide-my-subs{display:block}#guide.logged-in .collapsed-guide-icon.icon-popular{display:none}.collapsed-guide-icon.icon-music{font-size:.925em;padding-left:.0375em}.limited-memory .collapsed-guide{background-color:#1f2426;border-right:.2em solid #111;display:block;height:100%;left:0;width:6em}#error-message{display:none}#guide.error.focused #error-message{color:#fff;display:block;font-size:2em;padding:2em;position:absolute;text-align:center;top:12em}#guide .sliding-highlighter{display:none;width:100%;height:4.2em;opacity:0}#guide.focused .sliding-highlighter{opacity:1}#guide.focused .sliding-highlighter{display:block}#guide.focused #user-info-background{visibility:visible}#guide #user-info-background{background-color:rgba(0,0,0,.2);-o-transition:background-color 400ms;-webkit-transition:background-color 400ms;transition:background-color 400ms}#guide.focused #user-info-background,#guide.focused:hover #user-info-background{background-color:#931717}.logged-in #user-info-background{display:block}#guide.focused .guide-user-text{visibility:visible}#guide .carousel,#guide .list,#guide .sliding-highlighter{color:#fff;margin-top:2em}#guide.logged-in .carousel,#guide.logged-in .list,#guide.logged-in .sliding-highlighter{margin-top:1em}#guide .carousel.hidden{display:block!important;visibility:hidden}#guide .list{position:relative}.carousel .guide-button{position:absolute}.list .guide-button{margin-bottom:.1em}.guide-button{font-size:1.6em;height:1.83em;overflow:hidden;padding:.5em .27em .3em 2.9em;white-space:nowrap}.guide-button:hover{background:#900;cursor:pointer;padding-right:1.78em}.guide-button.selected:hover{background:transparent}.guide-button.disabled:hover{background:transparent;cursor:inherit;padding-right:inherit}.guide-button.disabled{padding-left:2.1em;text-transform:uppercase}.guide-button.disabled.footer{text-transform:none}.guide-button-icon{color:#ef9191;display:inline-block;font-family:'youtube-icons';font-size:1.2em;margin-top:.2em;text-align:center;width:1.8em}.guide-button.disabled .guide-button-icon{display:none}.guide-user-text,.guide-button-title{color:#fbdada;display:inline-block;line-height:1.7em;overflow:hidden;padding-left:.5em;text-overflow:ellipsis;vertical-align:top}.guide-button.disabled .guide-button-title{color:#ef9191}.guide-user-text{visibility:hidden;margin-left:-0.4em;position:relative;top:30%;text-overflow:ellipsis;width:9.5em}.guide-button-title{width:11em}.engaged .guide-button-title{width:8em}.guide-button.footer .guide-button-title{font-size:75%;padding-top:.8em;width:21.15em}.guide-button-icon .image,#guide-user-avatar{background:no-repeat center;background-size:100%;height:1em;width:1em}.guide-button-icon .image{background-color:#fff;box-shadow:0 0 0 1px #ef9191;margin:0 .4em 0 .4em}.guide-button.focused .guide-button-icon .image{box-shadow:none}.guide-button .image{display:none}.guide-button.has-image .image{display:block}#guide-user-avatar{border-radius:50%;box-shadow:0 0 0 .05em rgba(239,145,145,.4),0 0 .05em #ef9191;display:inline-block;font-size:2.31em;margin:.2em .2em .2em .4em}#guide-user-avatar,.guide-user-text,.guide-button-icon,.guide-button-title{-o-transition:color 50ms;-webkit-transition:color 50ms;transition:color 50ms;transition-delay:25ms}.no-transition .guide-button .guide-button-icon,.no-transition .guide-button .guide-button-title,.limited-animation .guide-button .guide-button-icon,.limited-animation .guide-button .guide-button-title,.limited-animation #guide-user-avatar,.limited-animation .guide-user-text{-o-transition:none;-webkit-transition:none;transition:none}.guide-button.focused .guide-button-icon,.guide-button.focused .guide-button-title{color:#df2323}.limited-animation .guide-button.focused{background-color:#fff}.user-info-container{height:2.6em;padding:1.1em 0em 0em 1.8em;font-size:1.6em;white-space:nowrap}#user-info-background{display:none;height:8.53em;position:relative;width:inherit;z-index:1}.sliding-highlighter .select{background-color:rgba(0,0,0,0.8);display:none;height:2.9em;min-width:3.5em;padding:1.3em 0.6em 0em 0.6em;position:absolute;right:0;text-align:center}.engaged .guide .sliding-highlighter .select{display:block}.unlimited .guide-user-text{line-height:1.0em}.guide-user-unlimited{font-size:0.8em;color:#a88;text-transform:uppercase}#settings{height:100%;overflow:visible;position:absolute;right:0;left:4.5em}.settings-shelf{height:24em;margin-left:3.5em;margin-top:1em;position:absolute;top:19%;width:100%}.settings-title{color:#fff;font-size:1.2em;line-height:3em;white-space:nowrap}.limited-animation .settings .content .list{width:130em}.limited-animation #settings-items{margin-left:-17em}.settings-horizontal-list>.content{font-size:79%}.settings-horizontal-list>.no-content-message{display:none}.pointer-overlay{display:block}.pointer-overlay .nav-arrow{background-image:url(img/motion-control-sprite.png);background-repeat:no-repeat;background-size:100%;cursor:pointer;display:none;height:5em;opacity:.5;position:absolute;width:5em}.pointer-overlay.enabled .nav-arrow{display:block}.pointer-overlay .nav-arrow:hover{opacity:1}.pointer-overlay .up-arrow{background-position:0 100%;left:45%;top:18%}.pointer-overlay .down-arrow{background-position:0 0%;bottom:11%;left:45%}.pointer-overlay .left-arrow{background-position:0 33.3%;top:50%;left:5%}.settings-focused .pointer-overlay .left-arrow,.browse-sets-state .pointer-overlay .left-arrow,.search-state .pointer-overlay .left-arrow{left:7%}.pointer-overlay .right-arrow{background-position:0 66.7%;top:50%;right:5%}#search.input-open+.pointer-overlay .up-arrow,.post-play-state .pointer-overlay .up-arrow,.post-play-state .pointer-overlay .down-arrow{display:none}.watch-state .pointer-overlay .down-arrow{bottom:2%}.search-state.guide-focused .pointer-overlay .up-arrow{top:20%}@media screen and (aspect-ratio:5/4){#dialog.browse-sets #dialog-wrapper{padding:1.3em 2em}.flag-list-container.flag-options-dialog{font-size:.875em}}@media screen and (max-aspect-ratio:4/3){.player-controls #button-list{font-size:.875em}#transport-controls.ad-active .player-controls-widget .player-controls #button-list{font-size:1em}.fresh-transport-controls .progress-bar{width:70%}.fresh-transport-controls #player-time-elapsed,.fresh-transport-controls .player-time-total{font-size:1.1em;width:10%}}@media screen and (aspect-ratio:4/3){#browse-header .title{width:18.3em}#browse-header.one-button .title{width:13.2em}#browse-header.two-buttons .title{width:8.5em}.sets-ui .flag-list.grid{font-size:0.8em}.flag-claim{font-size:1.4em}#search .search-pairing{font-size:0.7em}.sets-ui .debug-dialog{font-size:0.8em}.voice-footer .list{padding-top:0;width:16em}}@media screen and (min-width:3840px){.player-controls{top:21px}}@media screen and (min-width:1919px){.opera .video-stream{height:1080px;width:1920px}.watch-video-tile,.watch-list .button{padding:10px}}@media screen and (min-width:640px) and (max-width:1024px) and (max-height:576px){.countdown-ad-callout{font-size:1.3em;right:10%}.opera .video-stream{height:576px;width:1024px}#keyboard-grid .button{width:.7em}#dialog-wrapper{padding-left:4em;padding-right:4em}.pairing{-moz-transform-origin:0 50%;-ms-transform-origin:0 50%;-o-transform-origin:0 50%;-webkit-transform-origin:0 50%;-moz-transform:scale(.7);-ms-transform:scale(.7);-o-transform:scale(.7);-webkit-transform:scale(.7)}.browse-sets #browse-header.collapsed{-o-transform:translateY(-19%);-webkit-transform:translateY(-19%);transform:translateY(-19%)}}@media screen and (max-width:720px) and (max-height:480px){.countdown-ad-callout{font-size:.9em;right:5%}.skip-ad-callout{right:3%}.opera .video-stream{height:480px;width:720}#search .pairing .alternatives{margin:0 0 0 1em}#keyboard-grid .button{width:.8em}#search .pairing .search-message .title{margin-top:0.7em}#dialog-view .pairing{font-size:0.8em;margin-top:2em}.watch-list .list{margin-left:-4em}}@media screen and (max-width:640px) and (max-height:480px){.opera .video-stream{height:480px;width:640px}#keyboard-grid .button{width:.7em}#dialog-view .reset-help{display:block;width:27em}.watch-video-tile,.watch-list .button{padding:4px}.browse-header-metadata{bottom:3.9em}.browse-sets #browse-header.collapsed{-o-transform:translateY(-27%);-webkit-transform:translateY(-27%);transform:translateY(-27%)}.voice-footer .list{font-size:.6em;margin-left:35%;padding-top:-3em;width:35%}.engaged .engagement-indicator{display:inline-block;font-size:1.3em;height:3em;margin-bottom:1.5em}.engaged .engagement-indicator .title{display:inline-block}.engagement-indicator .stop-listening .icon{display:inline-block;height:3em;left:0px;top:0px;width:15%}}@media screen and (min-height:1080px) and (max-width:1440px){.video-tile-container{-moz-transform:scale(.7);-ms-transform:scale(.7);-o-transform:scale(.7);-webkit-transform:scale(.7);transform:scale(.7);-moz-transform-origin:top right;-ms-transform-origin:top right;-o-transform-origin:top right;-webkit-transform-origin:top right;transform-origin:top right}.player-controls #button-list .button,.player-controls #button-list .toggle-button{margin-right:.2em;margin-left:.2em}.fresh-transport-controls .progress-bar{width:59%}.fresh-transport-controls #player-time-elapsed,.fresh-transport-controls .player-time-total{font-size:1em;width:14%}.fresh-transport-controls .button,.fresh-transport-controls .toggle-button{font-size:1.1em}.fresh-transport-controls #transport-more-button{font-size:1.7em}#dialog-wrapper{padding:1.3em 3em}.dialog-contents{font-size:95%}#dialog-wrapper .connection-steps{padding:0}#dialog-wrapper .pairing .qr-code,#dialog-wrapper .pairing .connected-list{margin:.2em}.context-menu-list{left:30%;right:30%}.voice-footer .list{font-size:0.65em;padding-left:22em;padding-right:18em;padding-top:1.3em}}.sets-ui .carousel .item,.sets-ui .carousel .channel-tile,.sets-ui .carousel .auto-play-tile{background-color:inherit!important}.sets-ui .carousel .item:hover,.sets-ui .carousel .channel-tile:hover,.sets-ui .carousel .auto-play-tile:hover{background-color:rgba(255,255,255,.1)!important}.sets-ui .tile .channel-bottom>.title,.sets-ui .tile .tile-bottom>.title{color:#e1e1e1}.sets-ui .tile .channel-bottom>.details,.sets-ui .tile .tile-bottom>.details{color:#646464}.sets-ui .tile.focused.selected .channel-bottom>.title,.sets-ui .tile.focused.selected .tile-bottom>.title{color:#212121}.sets-ui .tile.focused.selected .channel-bottom>.details,.sets-ui .tile.focused.selected .tile-bottom>.details{color:#8d8d8d}.sets-ui #transport-controls .player-controls #button-list div.icon-player-more,.sets-ui #transport-controls .player-controls #button-list div.icon-player-less{color:#fff}.sets-ui #transport-controls .player-controls #button-list div.icon-player-more.focused,.sets-ui #transport-controls .player-controls #button-list div.icon-player-less.focused{color:#222}.sets-ui .settings-title{font-size:1.5em}.sets-ui .action-tile .title{font-size:2.4em;margin-left:.1em;margin-right:.1em}.sets-ui .flag-list.grid{margin:3.25em}.sets-ui .flag-list .list{text-align:left}.sets-ui .flag-list .button{width:14em;text-align:center}.sets-ui .flag-example{top:20%}.sets-ui .flag-video{margin-left:2em;text-align:left}.sets-ui .flag-claim .privacy-invasion{margin:auto;width:50%}.sets-ui .authentication-error-dialog,.sets-ui .delete-video-error,.sets-ui .missing-channel-error,.sets-ui .server-unavailable,.sets-ui .network-error-dialog{margin-top:1em}.sets-ui .eureka-authorization-dialog .icon,.sets-ui .eureka-player-error-dialog .icon{margin-left:3em}.sets-ui .eureka-authorization-dialog .info,.sets-ui .eureka-player-error-dialog .info{width:50%}.sets-ui .debug-dialog{padding:0 1em;text-align:left}.sets-ui .text-dialog #dialog-view{width:auto}.sets-ui #dialog .platform-container{font-size:.6em;margin-bottom:.5em}.sets-ui .paid-channel-dialog{margin:1em}.sets-ui #dialog .connection-instructions .icon-settings-pair{display:none}.sets-ui .closed-captions-dialog{text-align:left;padding-left:1em}.sets-ui .delete-video-error,.sets-ui .paid-scope-dialog,.sets-ui .video-edit-error,.sets-ui .video-processing,.sets-ui .video-upload-error{margin:3em;font-size:1.6em}.limited-animation .auto-play-tile.focused .video-tile{background-color:#f1f1f1}.limited-animation.sets-ui .title-card{background:-o-linear-gradient(top,rgba(0,0,0,0.9),rgba(0,0,0,0.8),transparent);background:-webkit-linear-gradient(top,rgba(0,0,0,0.9),rgba(0,0,0,0.8),transparent);background:linear-gradient(to bottom,rgba(0,0,0,0.9),rgba(0,0,0,0.8),transparent)}.limited-animation.sets-ui #search #text-box-background,.limited-animation.sets-ui #search #search-text-entry{background-color:rgba(0,0,0,0)}.sets-ui .scrolling-text{text-align:left;padding-left:1em;height:20em}.sets-ui #dialog .scrollbar{right:11em}.sets-ui #dialog-view .reset-help{width:20em}.sets-ui #dialog.remote-reset-dialog .buttons{position:inherit}.sets-ui #dialog.remote-reset-dialog .reset-help{height:11em;padding-left:1em;text-align:left}.sets-ui #dialog.remote-reset-dialog .connected-list{margin-right:2em}.sets-ui .dialog-focused #legend{bottom:17%;right:16%}.exp-densityFiveTiles .horizontal-list>.content{font-size:59%}.exp-densityFiveTiles .shelf>.title{font-size:1.5em;margin-bottom:.75em;margin-top:0}.exp-densityFiveTiles .channel-bottom .title,.exp-densityFiveTiles .tile-bottom .title{font-size:1.75em}.exp-densityFiveTiles .tile-bottom .details{font-size:1.5em;height:50%;margin:.2em 1em 0 0}.exp-densityFiveTiles .channel-top .video-thumb{border-radius:50%}.limited-animation .exp-densityFiveTiles .browse-content .list{margin-left:-8em;width:155em}.exp-densityFourTiles .horizontal-list>.content{font-size:67%}.exp-densityFourTiles .shelf>.title{font-size:1.5em;margin-bottom:.75em;margin-top:0}.exp-densityFourTiles .channel-bottom .title,.exp-densityFourTiles .tile-bottom .title{font-size:1.75em}.exp-densityFourTiles .tile-bottom .details{font-size:1.5em;height:50%;margin:.2em 1em 0 0}.limited-animation .exp-densityFourTiles .browse-content .list{margin-left:-8.5em;width:155em}.exp-densityFourTiles .channel-top .video-thumb{border-radius:50%}.exp-densityHideMetadata .shelf .horizontal-list .tile-bottom,.exp-densityHideMetadata .shelf .horizontal-list .channel-bottom{display:none}.exp-densityHideMetadata .shelf.selected .horizontal-list .tile-bottom,.exp-densityHideMetadata .shelf.selected .horizontal-list .channel-bottom{display:block}.exp-densityHideMetadata .horizontal-list .video-tile .tile-top .decoration{display:none}.exp-densityHideMetadata #search .tile-top .decoration,.exp-densityHideMetadata #post-play-list .tile-top .decoration,.exp-densityHideMetadata .shelf.selected .horizontal-list .tile-top .decoration{display:block}.exp-densityHideMetadata .shelf:not(.selected) .channel-tile .video-thumb{height:70%;width:70%}.sets-ui .exp-densityHideMetadata .shelf:not(.selected) .carousel .item:hover,.sets-ui .exp-densityHideMetadata .shelf:not(.selected) .carousel .channel-tile:hover{background-color:inherit!important}.limited-animation .exp-densityHideMetadata .browse-content .list .shelf:nth-child(1){margin-bottom:9.5em}.limited-animation.sets-ui .exp-densityHideMetadata .channel-tile:not(.focused),.limited-animation.sets-ui .exp-densityHideMetadata .video-tile:not(.focused){background-color:inherit}.roku.limited-animation.sets-ui .exp-densityHideMetadata .channel-tile:hover:not(.focused),.roku.limited-animation.sets-ui .exp-densityHideMetadata .video-tile:hover:not(.focused){background-color:inherit}
\ No newline at end of file
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/button-fullscreen-active.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/button-fullscreen-active.png
deleted file mode 100644
index 14a8c41..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/button-fullscreen-active.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/button-fullscreen-onhover-active.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/button-fullscreen-onhover-active.png
deleted file mode 100644
index 79b4fbb..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/button-fullscreen-onhover-active.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/button-mute-active.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/button-mute-active.png
deleted file mode 100644
index 1022073..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/button-mute-active.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/button-mute-onhover-active.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/button-mute-onhover-active.png
deleted file mode 100644
index a1cb606..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/button-mute-onhover-active.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/button-unmute-active.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/button-unmute-active.png
deleted file mode 100644
index 6e017dc..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/button-unmute-active.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/button-unmute-onhover-active.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/button-unmute-onhover-active.png
deleted file mode 100644
index 2efdf75..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/button-unmute-onhover-active.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-gaming-heart.jpg b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-gaming-heart.jpg
deleted file mode 100644
index 4cf9844..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-gaming-heart.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-mother-goose.jpg b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-mother-goose.jpg
deleted file mode 100644
index 4cf9844..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-mother-goose.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-promo.jpg b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-promo.jpg
deleted file mode 100644
index 4cf9844..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-promo.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-rainbow.jpg b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-rainbow.jpg
deleted file mode 100644
index 4cf9844..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-rainbow.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-sesame.jpg b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-sesame.jpg
deleted file mode 100644
index 4cf9844..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-sesame.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-talking-tom.jpg b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-talking-tom.jpg
deleted file mode 100644
index 4cf9844..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-talking-tom.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-wonderquest.jpg b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-wonderquest.jpg
deleted file mode 100644
index 4cf9844..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-wonderquest.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-loki.jpg b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-loki.jpg
deleted file mode 100644
index 4cf9844..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-loki.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-multi-user.jpg b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-multi-user.jpg
deleted file mode 100644
index 4cf9844..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-multi-user.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-tv-queue.jpg b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-tv-queue.jpg
deleted file mode 100644
index 4cf9844..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-tv-queue.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-yt-mix.jpg b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-yt-mix.jpg
deleted file mode 100644
index 4cf9844..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-yt-mix.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-music-party-logo.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-music-party-logo.png
deleted file mode 100644
index bae7f19..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-music-party-logo.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-music.jpg b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-music.jpg
deleted file mode 100644
index 4cf9844..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-music.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-yt-logo.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-yt-logo.png
deleted file mode 100644
index fdd416d..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-yt-logo.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/cast_disconnected_blue.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/cast_disconnected_blue.png
deleted file mode 100644
index da20b33..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/cast_disconnected_blue.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/circle.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/circle.png
deleted file mode 100644
index 9222c60..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/circle.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/default_bg.jpg b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/default_bg.jpg
deleted file mode 100644
index a55be3c..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/default_bg.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/dial-sprite.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/dial-sprite.png
deleted file mode 100644
index 6c86373..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/dial-sprite.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/edit_tile_dark.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/edit_tile_dark.png
deleted file mode 100644
index fbafd90..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/edit_tile_dark.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/edit_tile_light.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/edit_tile_light.png
deleted file mode 100644
index 1bbade8..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/edit_tile_light.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/flag.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/flag.png
deleted file mode 100644
index 0f17309..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/flag.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-aaa-engaged.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-aaa-engaged.png
deleted file mode 100644
index 35a3db2..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-aaa-engaged.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-feedback.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-feedback.png
deleted file mode 100644
index 426b4b3..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-feedback.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-fullscreen.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-fullscreen.png
deleted file mode 100644
index c708e76..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-fullscreen.png
+++ /dev/null
@@ -1,11 +0,0 @@
-<!DOCTYPE html>
-<html lang=en>
-  <meta charset=utf-8>
-  <meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">
-  <title>Error 404 (Not Found)!!1</title>
-  <style>
-    *{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png) no-repeat;margin-left:-5px}@media only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:54px;width:150px}
-  </style>
-  <a href=//www.google.com/><span id=logo aria-label=Google></span></a>
-  <p><b>404.</b> <ins>That’s an error.</ins>
-  <p>The requested URL <code>/s/tv/html5/f0d770f4/img/icon-fullscreen.png</code> was not found on this server.  <ins>That’s all we know.</ins>
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-help.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-help.png
deleted file mode 100644
index 21839e2..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-help.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-mute.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-mute.png
deleted file mode 100644
index 999078d..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-mute.png
+++ /dev/null
@@ -1,11 +0,0 @@
-<!DOCTYPE html>
-<html lang=en>
-  <meta charset=utf-8>
-  <meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">
-  <title>Error 404 (Not Found)!!1</title>
-  <style>
-    *{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png) no-repeat;margin-left:-5px}@media only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:54px;width:150px}
-  </style>
-  <a href=//www.google.com/><span id=logo aria-label=Google></span></a>
-  <p><b>404.</b> <ins>That’s an error.</ins>
-  <p>The requested URL <code>/s/tv/html5/f0d770f4/img/icon-mute.png</code> was not found on this server.  <ins>That’s all we know.</ins>
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-playbutton.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-playbutton.png
deleted file mode 100644
index 8ac546c..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-playbutton.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-check-dark.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-check-dark.png
deleted file mode 100644
index e6f1240..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-check-dark.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-check-light.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-check-light.png
deleted file mode 100644
index b39bd87..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-check-light.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-private-dark.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-private-dark.png
deleted file mode 100644
index 2a16694..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-private-dark.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-private-light.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-private-light.png
deleted file mode 100644
index c7b3d38..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-private-light.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-public-dark.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-public-dark.png
deleted file mode 100644
index 87b0492..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-public-dark.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-public-light.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-public-light.png
deleted file mode 100644
index 42faaa1..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-public-light.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-unlisted-dark.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-unlisted-dark.png
deleted file mode 100644
index 248782d..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-unlisted-dark.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-unlisted-light.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-unlisted-light.png
deleted file mode 100644
index 9f37410..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-unlisted-light.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-unmute.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-unmute.png
deleted file mode 100644
index 70da26b..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-unmute.png
+++ /dev/null
@@ -1,11 +0,0 @@
-<!DOCTYPE html>
-<html lang=en>
-  <meta charset=utf-8>
-  <meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">
-  <title>Error 404 (Not Found)!!1</title>
-  <style>
-    *{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png) no-repeat;margin-left:-5px}@media only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:54px;width:150px}
-  </style>
-  <a href=//www.google.com/><span id=logo aria-label=Google></span></a>
-  <p><b>404.</b> <ins>That’s an error.</ins>
-  <p>The requested URL <code>/s/tv/html5/f0d770f4/img/icon-unmute.png</code> was not found on this server.  <ins>That’s all we know.</ins>
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icons.ttf b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icons.ttf
deleted file mode 100644
index 929a78f..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icons.ttf
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-bbb.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-bbb.png
deleted file mode 100644
index ea9e5b8..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-bbb.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-ccc.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-ccc.png
deleted file mode 100644
index 7727e8c..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-ccc.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-ddd.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-ddd.png
deleted file mode 100644
index f6b0382..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-ddd.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-desktop.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-desktop.png
deleted file mode 100644
index 99979f0..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-desktop.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-eee.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-eee.png
deleted file mode 100644
index 1d2930b..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-eee.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-fff.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-fff.png
deleted file mode 100644
index 056ccf9..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-fff.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-ggg.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-ggg.png
deleted file mode 100644
index 8d846cb..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-ggg.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/motion-control-sprite.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/motion-control-sprite.png
deleted file mode 100644
index 0ecee6d..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/motion-control-sprite.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/pair_promo.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/pair_promo.png
deleted file mode 100644
index 7bbb8ba..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/pair_promo.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/pairing-promo-combo.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/pairing-promo-combo.png
deleted file mode 100644
index 7442d55..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/pairing-promo-combo.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/player-pause.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/player-pause.png
deleted file mode 100644
index afab54d..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/player-pause.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/player-play.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/player-play.png
deleted file mode 100644
index bdd2471..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/player-play.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/trash_tile_dark.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/trash_tile_dark.png
deleted file mode 100644
index 495f00f..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/trash_tile_dark.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/trash_tile_light.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/trash_tile_light.png
deleted file mode 100644
index 049ef34..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/trash_tile_light.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/volume_0_pressed.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/volume_0_pressed.png
deleted file mode 100644
index 7abd5c6..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/volume_0_pressed.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/volume_1_pressed.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/volume_1_pressed.png
deleted file mode 100644
index d283c5a..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/volume_1_pressed.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/volume_2_pressed.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/volume_2_pressed.png
deleted file mode 100644
index 8eb2ac0..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/volume_2_pressed.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/volume_mute_pressed.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/volume_mute_pressed.png
deleted file mode 100644
index b867b7f..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/volume_mute_pressed.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/yt-kids-logo.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/yt-kids-logo.png
deleted file mode 100644
index 2de9041..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/yt-kids-logo.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/yt-logo-fullcolor.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/yt-logo-fullcolor.png
deleted file mode 100644
index 1fa0d1a..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/yt-logo-fullcolor.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/yt-music-logo-small.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/yt-music-logo-small.png
deleted file mode 100644
index e73e0fc..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/yt-music-logo-small.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/yt-music-logo.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/yt-music-logo.png
deleted file mode 100644
index 8e60577..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/yt-music-logo.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/misc/fonts/Roboto-Regular-20140804.ttf b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/misc/fonts/Roboto-Regular-20140804.ttf
deleted file mode 100644
index 0e58508..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/misc/fonts/Roboto-Regular-20140804.ttf
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/youtube-2015-q3-initial-layout.html b/src/cobalt/layout_tests/testdata/benchmarks/youtube-2015-q3-initial-layout.html
deleted file mode 100644
index 5d33c44..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/youtube-2015-q3-initial-layout.html
+++ /dev/null
@@ -1,1751 +0,0 @@
-<html xmlns:yt="http://youtube.com"><head><meta charset="utf-8">
-    
-    
-    <title>YouTube TV</title>
-    
-  <style>#loader { height: 100%; left: 0px; position: absolute; top: 0px; width: 100%; z-index: 0; background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAmwAAAEsCAYAAAB+Je/UAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAABVsSURBVFjD7dntcavAGYDRWwIlUIJKoARKoASVQAcqgRIogRJUAiVQArETPKN4LFsfC7sL5505kx9JrvXF7sPyb57nfwAApMuHAAAg2AAAEGwAAIINAADBBgCAYAMAEGwAAAg2AADBBgCAYAMAQLABAAg2AAAEGwAAgg0AQLABACDYAAAEGwAAgg0AAMEGACDYAAAQbAAAgg0AAMEGAIBgAwAQbAAACDYAAAQbAIBgAwBAsAEACDYAAAQbAACCDQBAsAEAINgAAAQbAACCDQAAwQYAINgAABBsAAAINgAAwQYAgGADABBsAAAINgAABBsAgGADAECwAQAINgAABBsAAIINAECwAQAg2AAAEGwAAIINAADBBgAg2AB4Qfmh+kX9oX3A5cPwgmne70wvfibtg+o/vrvS7xvBBrCd0w+b8U8beHcnAMbZmP+f8c5vpbvz2/r++zu5LhFswF59bXbNt83w+6ZpTI7z20lhLfQEG0BKipsTsF6AGfNr4PU3J3iF9UOwAaz9yPLy4WoPNuatuS7XkpM4wQYQRLmcDIz2WGNWmXG5xpy8CTaAl0Kts5cas+l0y7VnDRJsAL8qhJox0efixE2wAdxz/jDZK41JYj6vxdq6JNgAbk/VBvujMUlO77RNsAGcnKoZk/yMy7VqzRJswAE19kFjsnpE2li3BBsg1owx6Y9oE2yAWDPGiDYEGyDWjDGiTbAB3FXZ44zZ1Zysa4IN2Jfiw2R/M2ZXMy7XtjVOsAE70dvbjNnl9NY3wQbsQ21PM2bXU1nnBBuQv9F+ZszuH41a6wQbkLHGXmbMIaax3gk2wOmaMcYpG4INcLpmjHHKJtiA47nav4w51AzWPcEG5KWydxlzyCmtf4INyEdn3zLmkHOx/gk2IB+TfcuYQ85k/RNsQB5qe5Yxh57aOijYAI9DjTFpT2cdFGyAx6HGmLTHY1HBlrUhoC2Om9uAr9f373GoMeZYc7IeCrZcXTM7bg51SnL13R/KJdDvpt258WCPx3xWx5vWeijYcnUOeCGMK7/WU8DXevbduzF5YY5w4n6UqXxWhxxPVwRbtsrAF0OZSVw6Fj+OIuDvRrAJNsGW/1gXBZvHoiufXPWZnASSltpCL0IEmwn43SPYdvFYtF/xdU6BXuPFd34oF8EmQgSbuZnWuijYPBb9X1St8RpPAV9j7Ts/lJAbq89KsAm2/GewLgo2C/V6x81t4kFJukKOdUCwCbb8xz4g2LLWJH7cHGpx7HzXh3IKvNALNsEm2PYxpfVRsOWqCHghXBM+JWl814dSCzYRItjMRk+CEGyb6QNeDEXA11Ul+rpIXyvYRIhgMxs9CUKwZflYtE5w0x18x4fTCTYRItiMYBNsHoven0uCm8jZd3w4oTdVn5dgE2z7GDfwgs1j0WXGBCOy9P0ezlWwiRDBZgSbYPNYdP1AqhMLSPISegSbYBNs+5jJ+ijY9mAKdEE0AV7LJcFHtAg2wSbYBFv+Y40UbNnrAl0MfUKPtCrf6+FUFngRItjML1NYJwVb7kI9hnz3yLlw9I1gE2yCzST6G0Cw7eqx6CmBcOx8n248As0QUMjICmWyWQs2vwEE2zEfi7ZvvIZLoNdQ+z4PqU18swj1Po1gM6/N2Top2JxO/P+JxKuvYQz0Ggrfp2ATbEawmYAHCgi2pIQKplf+dhnob/e+R6fEgs0INiPYBNuexXwk2TjyZucbqmATbCbuDNZJwbYXp0AXxSXi6UjpexRsgs0INiPYBJvHon/PNaO/y35Mgs0INiPYBJvHouuddJURT/bYj9RHsAk2s5/rEMG2m8eizRN/swn0N0++P8Em2IxgM4JNsHks+vh0T/y9PsDfm3xvh1YeaKMwgs0INsHGf7UbB9S0cSCyP5VgM4LNeBIj2JxWrHdhhHoEW/veBJtgM4LNrPw7QLAl5xrgwjg/8HfOgS7CYsXPolgu8nYx/KBf/rvGgiDYBJtgM4JNsLGVECHVP/B3+o3+zrM+T/4uH8Y3X1ezckx+19wJyme8+sjgEuBvv/q+W8FmEgu26eZGrvqmWa6Xawaf27C81p/ex5fzzc3sJNgEG3k+Fv3r74S4uJsVgifkfL7HbvlM1/7e2ogL2rDB70WwhZnul833Ed2bv693pB5sn/+7+smbwy6h3+m0BNo7n1eIG961prW/CzaPRZ9fJEM9xgoRQqeNHnm0K5+4CTbBtsWm1Ub8HFINtuHNv1FFPp0aA9/8fqnntB4nCzbB5rHonbmsvMleE4mcZxfG0yzYBJtg20OwTctaGeK7LebtH5NOK4XaT08vUnhcKtgEm8eiLwTVEPni+1wc+4iPHdZYJI8abP2c/gi2/QXbdYWbr2LDsOlXPvFPac0VbILNY9EHplhx4znN+dzJ/jSho+2owZbSIxfBdoxgG1aMnWrn4RLzRLy3rws2j0Wfi5IQC9KYeaytEW2CTbAJtvWDrdtg7e0yulF89RFpjBns64LNY9H7060UFl2CC2GszUSwCTbBtk2wdRutvWs9Gk0h1mJGm2ATbB6LPnkSFuKEq450YrjGTIEerwg2wSbY1gu264qPQbe4uWzn9PaXi2ATbKT1WLT8ducYYwM8Jb6hh1hIjhps05z+CLa8g+2ycayFXrP6HR8KCDbBRsDHouebf6+OtPjkcApTz4ItVsQINsGWojGhE/w195itbrpGe7pg81j08cAKcQTePPn6q0w29XEWbIJNsAm2sI9FmwzeZ5vhtYhg2+Vj0Snw8fezd4vDnM/Us2ATbIJNsP1Pc5ATpWLDUzZ7umDzWPSBBbMI8O9cn3ztpzmv6WfBJtgEm2AL83TgnNF7vWR2LSLYdvtYtF1Oj+aNF6DQi0C3vIZqeT9toFPD2ykFm2ATbFkE22n5t9vlP8sV/saWTyP+OgWrllO/5uYmPKWDAcEm2AjwWPS6xM67c3rydY8BT75+W5zqgEf6jWATbIIt2WArls/g3toyBA636Y01K1SUDn/cxIZ6v9eMrkUE264fi44B/v8x7tj6Jxa2acO/J9gEm2DbNtjqB9ex6YWby9DXVhPgbzcPrmmh3u85o2sRwbbrx6LvzuWFxebdmZ489j8H+puC7TGVYBNsGwXbs+/7GjnY3j31Kp+8AX12rbx30yvYBBsBXCJvevWTrzfEI9jzC59TiMewp1mwCTbBlkqwvbr2NZHW3XGOE4pdIr9xwSbYDu8UccN75dQpxIlgMccJ23oWbIJNsKUSbK/+vocIJ3uf00dc64tIn7VgE2yscHo0b7QAvTvDHC9s21mwCTbBlnuwhQiYNsJ3/M5NZzOn/STHPi7YDqOLtOE9uwiUkTe2GIEq2ASbYEsv2KoIn3fM9/vuY9GzYBNshFFH2vCevUsNsZHXc7xj/WEWbIJNsO0h2NoIa24V8Xd2ffNvV5lciwi2LGw9wxwnLKs5XrCNgk2wCTbB9uJv/J2/V0b+vQs2wUZA/cab3TlSvJRvfEaXCAuLYBNsgi29YBvmvIKtSuD3LtgEG4GcN97syjlOvMTa1ASbYBNsgi3nYKtmwSbYSEK54UY3zvkEk2ATbIJNsMUOthiBKNgEGwkbN9roLgcOtkKwCTbBJtgOGGxjBtcigi0bl402umo+brBVs2ATbIJNsB0v2IYMrkUEWzbqDTa5KbNHkoJNsAk2wSbYBJtgIzlrTyfYBJtgE2yCTbAJNsFGuhfV5zSCTbAJNsEm2ASbYBNsxI+S36YQbIJNsAk2wSbYBJtgI/6FfW/6BIJJsAk2wSbYBJtgQ7DtwlpzFmyCTbAJNsEm2ASbYCOMtS6sUrAJNsEm2ATb5sF2Wv6Nd5wEm2AjPe0KF9Q1kdcl2ASbYBNsRwu2PR8ECDbBdmhrbJgXwSbYBJtgE2yCTbAJNsIpVrigTrNgE2yCTbAJNsEm2AQbQV0DXkxTQo9qBZtgE2yCTbAJNgTbbnQBL6ZOsAk2wSbYBJtgE2yCjfDOAS+mWrAJNsEm2ASbYBNsgo3wQm6a1SzYBJtgE2yCTbAJNsGGYBNsgk2wCTbBJtgQbIJNsAk2wSbYBJtgE2yCDcEm2ASbYBNsgk2wCTbBhmATbIJNsAk2wSbYEGyCTbAJNsEm2ASbYBNsgg3BJtgEm2ATbIJNsAk2wYZgE2wRg+3fnMcINsGWS7DlchMk2AQbgk2wCTbBJtgEm2BDsAk2wSbYBJtgE2yCTbAJNgSbYBNsgk2wCTbBJtgEG4JNsAk2wSbYBJtgE2w+BMEm2ASbYBNsgk2wCTbBhmATbIJNsAk2wXaUYLvarwWbYBNsgi3e5z0JNsEm2ATbBp8Ngk2wCTbBFmkzFWyCTbAJNgSbYBNsgk2wCTbBJtgEm2BDsAk2wSbYBJtgE2yCTbAh2ASbYBNsgk2wbRhFa13Tvf1asAk2wSbY4n3evWATbIJNsG3w20ewCTbBJtgif9aCTbAJNsGGYBNsgk2wCTbBJtgEm2ATbAi2PQZbIdgEm2ATbIJNsAk2BFvawZbDqV4KwXYWbIJNsAm2DfcXBJtgE2yCLfLvT7AJttyDbdpBsF0Fm2BDsD0zpzf+fifYBJtgE2yRTrxyD7a1RrAJNsGW4AVVRX4t7wbMKNgEm2DbRbBdMgu2046DrbRfCzbBts9gayIe6Q+zYHtUIdgEW8LB1kZYy6qIv7M+4WCzXws2wZZgsJUBXssl4oLTZRRsVQKLqWBLP9gu8zGDrY7web/7fq8Rf1+CTbBxsGALcdFfX/y7daRNNUawfZ5uTYJNsD1wLRUHDbYywuf97nd8ifRkYs3rebJXCzbSDbYQj+leWWy7AH+3ntMPtiLAo99QUTMKtmSDbQoQLbkG2xjgPb9yXfcR1/R3v+vTStfgYK8WbKQbbCHC6dnHOKFOnMo5TrDVG3++oaJmmNOePQXb+clYOyXw/t9dV/qIjwdfua5DhOIrN0Ehoqhe6RoUbIKNhIOtCfSantlwLgH+3rThwv5KoBZvbGCCLf9gOz3xOz4FXmtirSvFCzcoU6DHwK/+tssI63qI9btd6RrsZ3u1YCPZYCsDvabrgwtvE3lhCbHQjQ9s1teVFtTYp6mCLdzpy3WFWPuXwLryzDVWB/qbrwZbs/FNbxP5/W7xu0ewCbaVgu3VY/17IVP/cvd9CfgZNHPcO9PuzntsAz3uXSNq2jnt2VuwVXd+C9PKG2MqN4LdHydrdQJrWKgTpfqP1zAFjLVixWtQsAk2Eg+2S+CLflwWwnb5t9e4GywS+B7G5f21Gz5uFGzbBNsQMFzaG02gR4CpB9vt+282+AxirCX31pf2mzrwe21WvAbP9mrBRtrBVs55TZ/I95Bb1NSCbfNgiyGlYNvCu+tXbpFyXfEarGZ7tWAj6WD7t+EJUez3f+Rgq3b83gTbcYPt3RuR8aD7iGATbGQabLmEzPXN91kcONhOgu3hmQRbNtoA33eTyXtd+8a6mO3Vgo3kgy2XU7YqkQ0916gRbNu/nmd0gi3KujVlECtNRtcggk2wrbywlsvCler0gd7nNcJr7wJtLIJtu/e4dcBcIn/H777fNsK6WgS+RlPdP4oN1uacT5UFG4cLtq3u4l6ZMeAdcLfxax8CngTkGKu5Bts50ulJrsE2RIiec+DfYKqPRocN1ykEm2DL6M6/S2wj/7zzOyW8yP8215vQTCHYhjndSS3YtoqPJpFT1CrQb2vLaBtX+B2m9mh4q/VYsAk2Mgy21KIt9F1vueFj0CJwLO0txlMOtinSdZZ7sG0VbWs9DQh9g5jLzWU726cFG1kGWyqb+1qPKNZ+NNitdLr17vtuBVsSv7/il+trD8G2drQVS1iteapfH+RkTbAJNnYQbDGjbVr5fdYrvvbzio8jU37fewy2cYXfXvnHDcNegu2nU+ZQ+h1HTLHh+0v5UbBgQ7C9+Ohh2nDhuC6b2trvq19hcz89uaFtHTUnwRbktPSdR1zTyp9DSsH2dT2HfMS49U3ksNF69LVPjJGuv3K2Tws2sg+2r1OBte/6pl9Op9a6kw31aPTywElCCsH2b053/iX8/s4Brp9ho88htWC7Pa0q3rxeu4i/z27FqNliff1r7bVPCzZ2Emy372ONk6l3F/N3NoF3QuqZu+9Ugm2Y05yUg21efvfPbtinFyJjr8H2da03L1zrMU+efgq3OuDTixSux94eLdj4/zuoNpAykfdzfmOxGQMvfCEWzkdP26blRK184W+8+92HeK/tbEJs2MUvcdEGPL3d40w3n2P5y+d4TijUfnoP/fJdVw+sB+XNb6NP7L2EWlsQbGRygngbJN0Sc8O34HhkYYsdol/v47K8/q9F+bycmOT+XdV6IfgJ8eBj8DnezHV5L7lEe8ynNoIN4JfHwMYY8zXWRcEGJMrjOmPMvJwEWhMFG5Coi33KGPMxZ+uhYAPSVdmnjDEfc7IeCjYgbZO9yphDz2gdFGxA+jr7lTGHnot1ULAB6avtV8YcejwOFWxAJjwWNeaYM1r/BBvgsagxJu3xOFSwARk52beMOeSU1j/BBuRlsHcZc6gZrHuCDchPY/8y5lBTWfcEG5Cn0R5mzCFmtN4JNsApmzEm7Wmsd4INcMpmjEl3BuucYAPyV9nPjNn1VNY5wQbsQ29PM2aXc7G+CTZgPwqPRo3Z3VyXa9saJ9iAHTnZ34zZzUzLNW1tE2zADjX2OWN2MbX1TLABos0Yk+401jHBBog2Y4xYQ7ABiag+TPY/Y7KYz2v1ZN0SbMAxlR+u9kJjkp7rcq1aswQbcHCtPdGYJOfyobBGCTaA29O2wf5oTBIzfqisS4IN4J5KuBkTbablxNupmmADeDjcOvunMUINwQak73MDaT709lRjgs91ub6EmmADCBpv9YeLx6bGvDyfNz/nD6U1RbABbOW0RFy7PEL9DLnRnmzMf0/PhuUGp1muFWuGYANI8kSuWk4T2puTuS+TPd1kMtO3326//Ka/NMtvvXLdCzaAvStvNr0vzbeN8Uv/bQMVguZrxju/i/7Ob6n+4XdXuB4RbADpheFPznc2+HuGF007iqLf9E98ln99N4IKwQYAgGADABBsAAAINgAAwQYAgGADAECwAQAINgAABBsAAIINAECwAQAg2AAABBsAAIINAADBBgAg2AAAEGwAAIINAADBBgCAYAMAEGwAAAg2AAAEGwCAYAMAQLABAAg2AAAEGwAAgg0AQLABACDYAAAEmw8BAECwAQAg2AAABBsAAIINAADBBgAg2AAAEGwAAIINAADBBgCAYAMAEGwAAAg2AAB8CAAAgg0AAMEGACDYAAAQbAAACDYAAMEGAIBgAwAQbAAACDYAAAQbAIBgAwBAsAEA8OE/SZR9m3dtGpgAAAAASUVORK5CYII=); background-color: rgb(230, 45, 39); background-size: 60%; background-position: 50% 50%; background-repeat: no-repeat; }</style><style>.icon-cast_off::before { content: ""; }
-.icon-cast_on::before { content: ""; }
-.icon-mr_meh_android::before { content: ""; }
-.icon-settings-signin-android::before { content: ""; }
-.icon-settings-signout-android::before { content: ""; }
-.icon-rockandroll-back::before { content: ""; }
-.icon-hats-happy::before { content: ""; }
-.icon-hats-neutral::before { content: ""; }
-.icon-hats-sad::before { content: ""; }
-.icon-hats-very-happy::before { content: ""; }
-.icon-hats-very-sad::before { content: ""; }
-.icon-search-keyboard::before { content: ""; }
-.icon-multiaudio::before { content: ""; }
-.icon-settings-check::before { content: ""; }
-.icon-settings-uncheck::before { content: ""; }
-.icon-popular::before { content: ""; }
-.icon-airplane::before { content: ""; }
-.icon-back::before { content: ""; }
-.icon-check::before { content: ""; }
-.icon-chevron-single::before { content: ""; }
-.icon-delete::before { content: ""; }
-.icon-desktop-arrowkeys::before { content: ""; }
-.icon-desktop-delete::before { content: ""; }
-.icon-desktop-esc::before { content: ""; }
-.icon-desktop-g::before { content: ""; }
-.icon-desktop-s::before { content: ""; }
-.icon-dislike::before { content: ""; }
-.icon-double-chevron-right::before { content: ""; }
-.icon-edit::before { content: ""; }
-.icon-education::before { content: ""; }
-.icon-ellipsis::before { content: ""; }
-.icon-entertainment::before { content: ""; }
-.icon-exit::before { content: ""; }
-.icon-film::before { content: ""; }
-.icon-flag::before { content: ""; }
-.icon-gaming::before { content: ""; }
-.icon-guide-history::before { content: ""; }
-.icon-guide-my-subs::before { content: ""; }
-.icon-guide-purchases::before { content: ""; }
-.icon-guide-social::before { content: ""; }
-.icon-guide-what-to-watch::before { content: ""; }
-.icon-home::before { content: ""; }
-.icon-hourglass::before { content: ""; }
-.icon-key-delete::before { content: ""; }
-.icon-key-globe::before { content: ""; }
-.icon-key-space-sm::before { content: ""; }
-.icon-key-space::before { content: ""; }
-.icon-like::before { content: ""; }
-.icon-lips::before { content: ""; }
-.icon-logo-lozenge::before { content: ""; }
-.icon-lol::before { content: ""; }
-.icon-lozenge::before { content: ""; }
-.icon-mix::before { content: ""; }
-.icon-music::before { content: ""; }
-.icon-news::before { content: ""; }
-.icon-people::before { content: ""; }
-.icon-pets::before { content: ""; }
-.icon-player-3d::before { content: ""; }
-.icon-player-annotations::before { content: ""; }
-.icon-player-closedcaptions::before { content: ""; }
-.icon-player-ff::before { content: ""; }
-.icon-player-HD-circle::before { content: ""; }
-.icon-player-HD::before { content: ""; }
-.icon-player-info::before { content: ""; }
-.icon-player-instantreplay::before { content: ""; }
-.icon-player-less::before { content: ""; }
-.icon-player-more::before { content: ""; }
-.icon-player-mute::before { content: ""; }
-.icon-player-next::before { content: ""; }
-.icon-player-pause::before { content: ""; }
-.icon-player-play::before { content: ""; }
-.icon-player-prev::before { content: ""; }
-.icon-player-replay::before { content: ""; }
-.icon-player-rew::before { content: ""; }
-.icon-player-settings::before { content: ""; }
-.icon-player-share::before { content: ""; }
-.icon-player-size-fullscreen::before { content: ""; }
-.icon-player-size-medium::before { content: ""; }
-.icon-player-size-minimize::before { content: ""; }
-.icon-player-stop::before { content: ""; }
-.icon-player-subtitles::before { content: ""; }
-.icon-player-volume-45::before { content: ""; }
-.icon-player-volume-48::before { content: ""; }
-.icon-playlist::before { content: ""; }
-.icon-playstation-circle::before { content: ""; }
-.icon-playstation-square::before { content: ""; }
-.icon-playstation-triangle::before { content: ""; }
-.icon-playstation-x::before { content: ""; }
-.icon-privacy-link::before { content: ""; }
-.icon-privacy-locked::before { content: ""; }
-.icon-privacy-public::before { content: ""; }
-.icon-related::before { content: ""; }
-.icon-remoteque::before { content: ""; }
-.icon-reward::before { content: ""; }
-.icon-rocket::before { content: ""; }
-.icon-search-clear::before { content: ""; }
-.icon-search::before { content: ""; }
-.icon-settings-clear-cookies::before { content: ""; }
-.icon-settings-clear-history::before { content: ""; }
-.icon-settings-feedback::before { content: ""; }
-.icon-settings-help::before { content: ""; }
-.icon-settings-pair::before { content: ""; }
-.icon-settings-phone::before { content: ""; }
-.icon-settings-term::before { content: ""; }
-.icon-speechbubble::before { content: ""; }
-.icon-sports::before { content: ""; }
-.icon-star::before { content: ""; }
-.icon-trash::before { content: ""; }
-.icon-trends::before { content: ""; }
-.icon-tv-dpad::before { content: ""; }
-.icon-upload-arrow::before { content: ""; }
-.icon-upload::before { content: ""; }
-.icon-watch-later::before { content: ""; }
-.icon-wii-1::before { content: ""; }
-.icon-wii-2::before { content: ""; }
-.icon-wii-A::before { content: ""; }
-.icon-wii-B::before { content: ""; }
-.icon-wii-minus::before { content: ""; }
-.icon-wii-plus::before { content: ""; }
-.icon-wii-x::before { content: ""; }
-.icon-wii-y::before { content: ""; }
-.icon-youtube-logo::before { content: ""; }
-.icon-youtube-unlimited-logo::before { content: ""; }
-@font-face { font-family: 'Cutive Mono'; src: url(www.youtube.com/s/tv/fonts/CutiveMono-Regular.woff) format(woff); }
-@font-face { font-family: 'PT Mono'; src: url(www.youtube.com/s/tv/fonts/PTM55FT.woff) format(woff); }
-@font-face { font-family: 'PT Serif Caption'; src: url(www.youtube.com/s/tv/fonts/PT_Serif-Caption-Web-Regular.woff) format(woff); }
-@font-face { font-family: 'PT Sans Caption'; src: url(www.youtube.com/s/tv/fonts/PT_Sans-Caption-Web-Regular.woff) format(woff); }
-@font-face { font-family: Handlee; src: url(www.youtube.com/s/tv/fonts/Handlee-Regular.woff) format(woff); }
-@font-face { font-family: 'Dancing Script'; src: url(www.youtube.com/s/tv/fonts/DancingScript-Regular.woff) format(woff); }
-@font-face { font-family: 'Marcellus SC'; src: url(www.youtube.com/s/tv/fonts/MarcellusSC-Regular.woff) format(woff); }
-body, html { font-size: 100%; height: 100%; margin: auto; overflow: hidden; padding: 0px; -webkit-user-select: none; }
-input { font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; font-size: inherit; line-height: inherit; font-family: inherit; margin: 0px; padding: 0px; }
-body { background-color: rgb(28, 26, 26); }
-p, ul, li { border: 0px; margin: 0px; outline: none; padding: 0px; }
-ul { list-style: none; }
-.focused, :focus { outline: solid 0px; }
-.hidden { display: none !important; }
-.invisible { visibility: hidden; }
-ul.list li { display: inline; }
-ul.list.vertical li { display: block; }
-.device-plugin { height: 0px; margin: 0px; position: absolute; visibility: hidden; width: 0px; }
-#loader { }
-#leanback { height: 100%; }
-#app-markup { height: 100%; background-size: 100% 100%; }
-#background { bottom: 0px; left: 0px; position: absolute; overflow: hidden; right: 0px; top: 0px; background-size: 100% 100%; }
-.limited-memory.sets-ui #app-markup { background-color: rgb(40, 51, 55); }
-#app-markup.watch-state { background-color: rgb(0, 0, 0) !important; }
-.veryvibrant #app-markup.watch-state { background-image: none !important; }
-#playstation-buttons { display: none; position: absolute; }
-#spinner { position: absolute; top: 17.17em; width: 100%; }
-.browse-state .loading-indicator { display: none; }
-.browse-state .fallback-loading-indicator { display: block; }
-.opera #spinner { top: 20em; }
-.loading-indicator { height: 5.33em; margin: 0px auto; position: relative; width: 5.33em; }
-.dot { border-radius: 50%; height: 1.17em; position: absolute; width: 1.17em; background-color: rgb(203, 203, 203); }
-@-webkit-keyframes fade1 { 
-  0%,100% { opacity: 0; }
-  50% { opacity: 1; }
-}
-@-webkit-keyframes fade2 { 
-  0%,100% { opacity: 0.25; }
-  37.5% { opacity: 1; }
-  87.5% { opacity: 0; }
-}
-@-webkit-keyframes fade3 { 
-  0%,100% { opacity: 0.5; }
-  25% { opacity: 1; }
-  75% { opacity: 0; }
-}
-@-webkit-keyframes fade4 { 
-  0%,100% { opacity: 0.75; }
-  12.5% { opacity: 1; }
-  62.5% { opacity: 0; }
-}
-@-webkit-keyframes fade5 { 
-  0%,100% { opacity: 1; }
-  50% { opacity: 0; }
-}
-@-webkit-keyframes fade6 { 
-  0%,100% { opacity: 0.75; }
-  37.5% { opacity: 0; }
-  87.5% { opacity: 1; }
-}
-@-webkit-keyframes fade7 { 
-  0%,100% { opacity: 0.5; }
-  25% { opacity: 0; }
-  75% { opacity: 1; }
-}
-@-webkit-keyframes fade8 { 
-  0%,100% { opacity: 0.25; }
-  12.5% { opacity: 0; }
-  62.5% { opacity: 1; }
-}
-@keyframes fade1 { 
-  0%,100% { opacity: 0; }
-  50% { opacity: 1; }
-}
-@keyframes fade2 { 
-  0%,100% { opacity: 0.25; }
-  37.5% { opacity: 1; }
-  87.5% { opacity: 0; }
-}
-@keyframes fade3 { 
-  0%,100% { opacity: 0.5; }
-  25% { opacity: 1; }
-  75% { opacity: 0; }
-}
-@keyframes fade4 { 
-  0%,100% { opacity: 0.75; }
-  12.5% { opacity: 1; }
-  62.5% { opacity: 0; }
-}
-@keyframes fade5 { 
-  0%,100% { opacity: 1; }
-  50% { opacity: 0; }
-}
-@keyframes fade6 { 
-  0%,100% { opacity: 0.75; }
-  37.5% { opacity: 0; }
-  87.5% { opacity: 1; }
-}
-@keyframes fade7 { 
-  0%,100% { opacity: 0.5; }
-  25% { opacity: 0; }
-  75% { opacity: 1; }
-}
-@keyframes fade8 { 
-  0%,100% { opacity: 0.25; }
-  12.5% { opacity: 0; }
-  62.5% { opacity: 1; }
-}
-#dot1 { animation: fade8 0.72s ease infinite; left: 0px; top: 2.09em; }
-#dot2 { animation: fade7 0.72s ease infinite; left: 0.61em; top: 0.61em; }
-#dot3 { animation: fade6 0.72s ease infinite; left: 2.09em; top: 0px; }
-#dot4 { animation: fade5 0.72s ease infinite; right: 0.61em; top: 0.61em; }
-#dot5 { animation: fade4 0.72s ease infinite; right: 0px; top: 2.09em; }
-#dot6 { animation: fade3 0.72s ease infinite; bottom: 0.61em; right: 0.61em; }
-#dot7 { animation: fade2 0.72s ease infinite; bottom: 0px; left: 2.09em; }
-#dot8 { animation: fade1 0.72s ease infinite; bottom: 0.61em; left: 0.61em; }
-.spinner.transitions .dot { animation: initial !important; background: url(www.youtube.com/s/tv/html5/f0d770f4/img/circle.png) 50% 50% / 100% no-repeat; }
-.spinner.transitions.spin .loading-indicator { transition: transform 25s linear; transform: rotate(-7200deg); }
-.transitions #dot1 { opacity: 1; }
-.transitions #dot2 { opacity: 0.875; }
-.transitions #dot3 { opacity: 0.75; }
-.transitions #dot4 { opacity: 0.625; }
-.transitions #dot5 { opacity: 0.5; }
-.transitions #dot6 { opacity: 0.375; }
-.transitions #dot7 { opacity: 0.25; }
-.transitions #dot8 { opacity: 0.125; }
-.fallback-loading-indicator { color: rgb(241, 241, 241); display: none; font-size: 1.8em; margin: 2px auto 0px; text-align: center; }
-.scrollbar { height: 100%; position: absolute; top: 0px; width: 0.1em; background-color: rgba(255, 255, 255, 0.0980392); }
-.scrollbar .handle { position: absolute; width: 0.1em; background-color: rgb(241, 241, 241); }
-.application-message { color: rgb(241, 241, 241); font-size: 1.8em; position: absolute; text-align: center; text-shadow: rgb(0, 0, 0) 0.04em 0.04em; top: 50%; width: 100%; }
-.debug-watermark { color: rgb(14, 2, 2); display: none; font-size: 100%; left: 0px; padding: 1em; position: absolute; bottom: 0px; width: 70%; background-color: rgba(235, 49, 3, 0.701961); }
-.debug-watermark.visible { display: block; }
-.debug-console { color: rgb(255, 255, 255); height: 95%; overflow: scroll; padding: 1em; position: absolute; right: 0px; top: 0px; width: 40em; z-index: 1; background: rgba(0, 0, 0, 0.901961); }
-#player-controls .button, #player-controls .toggle-button { font-family: youtube-icons; speak: none; }
-.fps { position: absolute; right: 0px; bottom: 0px; text-align: center; padding-top: 0.3em; width: 5em; height: 1.7em; z-index: 100; background-color: rgb(0, 255, 0); }
-#html5-player-messages { display: none; }
-#button-list > .icon-player-more::before { content: ""; }
-.icon-player-play.toggle-selected::before { content: ""; }
-#loader { z-index: 1000; }
-.sliding-highlighter, .pivot-sliding-highlighter { box-shadow: rgba(153, 153, 153, 0.298039) 0px 0px 60px; display: none; height: 26em; position: absolute; width: 24em; background: white; }
-#settings-items .sliding-highlighter { height: 26.2em; width: 24.2em; }
-.horizontal-list.focused .sliding-highlighter, .video-uploads.focused .sliding-highlighter, #settings-items.focused .sliding-highlighter { display: block; }
-.video-uploads .sliding-highlighter { height: 20em; width: 18em; }
-.carousel .item:hover { cursor: pointer; background-color: rgb(90, 90, 90); }
-.feed-title.preview { color: rgb(241, 241, 241); font-size: 1.3em; height: 1.3em; opacity: 0.7; padding-bottom: 0.6em; padding-left: 1.9em; }
-.feed-title .unread-count { font-size: 0.6em; margin-left: 0.5em; padding: 0.05em 0.3em; position: relative; top: -0.265em; background-color: rgba(187, 0, 0, 0.901961); }
-.prev-feed { height: 3.6em; left: 4%; position: absolute; top: 5%; }
-.next-feed { height: 2em; left: 4%; position: absolute; top: 84%; }
-.tile { color: rgb(102, 102, 102); height: 26em; list-style: none; overflow: hidden; position: absolute; width: 24em; background-color: rgb(0, 0, 0); }
-.tile-focus-target { height: 0px; width: 0px; }
-.tile-top { height: 50%; width: 100%; background-color: rgb(0, 0, 0); }
-.channel-top { height: 62%; margin: 5.25% 16%; width: 68%; }
-.channel-top .video-thumb, .tile-top .video-thumb { height: 100%; background-color: rgb(37, 37, 37); background-size: 100%; background-position: 50% 50%; background-repeat: no-repeat; }
-.browse-header-avatar.preloaded, .tile-top .video-thumb.preloaded { background: url(www.youtube.com/s/tv/html5/f0d770f4/img/icon-playbutton.png) 50% 50% / auto no-repeat rgb(37, 37, 37); }
-.auto-play-tile { overflow: visible; }
-.post-play-title { font-size: 1.4em; overflow: hidden; position: absolute; text-overflow: ellipsis; text-shadow: rgb(0, 0, 0) 0.08em 0.08em; top: -1.8em; width: 15.5em; }
-.auto-play-tile .video-tile { top: 0px; }
-.auto-play-tile .default-title, .auto-play-tile .next-up-title { color: rgb(204, 204, 204); }
-.post-play-countdown { display: none; }
-.countdown-active .post-play-countdown { color: rgb(255, 255, 255); display: block; font-size: 5em; position: relative; text-align: center; text-shadow: rgb(0, 0, 0) 0.06em 0.06em; top: 14%; }
-.playlist-tile.focused, .playlist-tile.focused:hover, .auto-play-tile.focused .video-tile, .auto-play-tile.focused:hover .video-tile, .recent-search-tile.focused, .recent-search-tile.focused:hover, .video-tile.focused, .video-tile.focused:hover { background-color: rgb(241, 241, 241); }
-.item .overlay { display: none; }
-.playlist-tile .overlay, .video-tile .overlay { display: block; height: 53%; margin-left: 56%; margin-top: -57.5%; opacity: 0.8; width: 45%; background: rgb(0, 0, 0); }
-.playlist-tile.focused .overlay, .video-tile.focused .overlay { color: rgb(241, 241, 241); }
-.playlist-tile .overlay strong { font-size: 1.75em; font-weight: normal; }
-.playlist-tile .overlay .count, .video-tile .overlay .count { font-size: 1.5em; line-height: 1.2em; padding-top: 1.7em; text-align: center; }
-.playlist-tile .overlay .icon, .video-tile .overlay .icon { font-family: youtube-icons; font-size: 3em; height: 50%; overflow: hidden; padding: 0.2em; text-align: center; }
-.tile-bottom { height: 50%; padding: 0.25em 0px 0px 1em; width: 23em; }
-.channel-bottom { height: 25%; margin-top: 2.65em; width: 100%; }
-.channel-bottom .title, .tile-bottom .title { color: rgb(153, 153, 153); font-size: 1.7em; height: 2.45em; line-height: 1.25em; margin: 0.6em 0.6em 0px 0px; overflow: hidden; text-align: left; white-space: normal; }
-.channel-bottom .title { height: 1.2em; margin: 0px; padding: 0px 0.6em; text-align: center; text-overflow: ellipsis; white-space: nowrap; }
-.tile.selected.focused .tile-bottom { color: rgb(34, 34, 34); }
-.tile.selected.focused .channel-bottom .details, .tile.selected.focused .tile-bottom .details { color: rgb(153, 153, 153); }
-.tile.selected.focused .channel-bottom .title, .tile.selected.focused .tile-bottom .title { color: rgb(68, 68, 68); }
-.channel-tile .channel-top .decoration { margin-top: -19%; text-align: right; width: 97%; }
-.video-tile .tile-top .decoration { margin-top: -2em; text-align: right; width: 97.3%; }
-.channel-top .badge, .tile-top .badge, .tile-top .duration { border-radius: 0.1em; color: rgb(255, 255, 255); display: inline-block; font-size: 1.4em; padding: 0em 0.1em; background: rgba(0, 0, 0, 0.701961); }
-.tile-top .badge, .tile-top .duration { text-transform: uppercase; }
-.tile-top .live-badge { border: 0px; color: rgb(255, 255, 255); background-color: rgba(230, 33, 23, 0.8); }
-.playlist-tile:hover, .video-tile:hover { background-color: rgb(34, 34, 34); }
-.channel-tile .details, .playlist-tile .details, .recent-search-tile .details, .video-tile .details { color: rgb(153, 153, 153); font-size: 1.3em; font-weight: 300; height: 40%; overflow: hidden; padding: 0px; white-space: normal; word-break: break-all; }
-.channel-tile .details { text-align: center; }
-.playlist-tile .details, .recent-search-tile .details, .video-tile .details { margin: 0.7em 0em 0em; }
-.custom-playlist-image-tile .tile-top .video-thumb { background-size: 56.25%; background-position-x: 0%; background-repeat: no-repeat; }
-.playlist-tile.focused .details, .recent-search-tile.focused .details, .video-tile.focused .details { color: rgb(102, 102, 102); }
-.playlist-tile .details .by, .recent-search-tile .results, .video-tile .details .by { height: 1.4em; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
-.playlist-tile .details .views, .video-tile .details .views { display: inline-block; padding-right: 1.5em; }
-.playlist-tile .details .views:empty, .video-tile .details .views:empty { display: none; }
-.action-tile { border: 2px solid rgba(255, 255, 255, 0.0980392); color: rgb(255, 255, 255); height: 26em; overflow: visible; }
-.action-tile.focused, .channel-tile.focused { color: rgb(34, 34, 34); background-color: rgb(255, 255, 255); }
-.action-tile .content { height: 26em; white-space: normal; }
-.video-tile .live-start-time { display: inline-block; vertical-align: middle; }
-.tile-top .count-overlay { font-size: 1.4em; height: 100%; position: absolute; right: 0px; text-align: center; top: 0px; width: 30%; background: rgba(0, 0, 0, 0.74902); }
-.tile-top .count-overlay .video-count { display: block; font-size: 2.2em; font-weight: bold; line-height: 0.8em; margin-top: 1.6em; }
-.action-tile .title { font-size: 2.4em; height: 24%; overflow: hidden; padding-top: 0.5em; text-align: center; text-overflow: ellipsis; text-transform: uppercase; white-space: normal; }
-.action-tile .long-title { font-size: 2em; text-align: center; white-space: normal; }
-.action-tile .description, .action-tile .remote-pair-text, .action-tile .remote-reset-help { color: rgb(255, 255, 255); font-size: 1.4em; opacity: 0; padding: 0.5em; text-align: center; white-space: normal; }
-.action-tile.focused .description, .action-tile.focused .remote-pair-text, .action-tile.focused .remote-reset-help, .action-tile.focused .sign-out-username { opacity: 1; }
-.action-tile .sign-out-username { font-size: 1.7em; margin: 1em auto; overflow: hidden; text-align: center; text-overflow: ellipsis; white-space: nowrap; width: 80%; }
-.action-tile .remote-count { font-size: 0.4em; position: absolute; top: 40%; width: 100%; }
-.action-tile .remote-standing { display: inline-block; font-size: 1.4em; margin: 0.2em auto; padding: 0.8em 0.4em 0.1em; }
-.action-tile .remote-reset-help { height: 2.7em; }
-.action-tile .status { font-size: 2em; text-align: center; }
-.row-playing { display: none; }
-.action-tile .large-action-icon { font-family: youtube-icons; font-size: 11em; margin-top: 0px; text-align: center; width: 100%; }
-.action-tile .sign-out-user-icon { border-radius: 20em; height: 9em; margin: 0px auto; width: 9em; background-size: cover; }
-.action-tile .search-tile .description { font-size: 1.4em; margin-top: 2em; position: inherit; text-align: center; }
-.large-action-icon.icon-guide-history { font-size: 8em; margin-top: 0.2em; }
-.toggle-tile .icon { margin-top: 0px; }
-.toggle-tile .content .title { height: 12%; white-space: nowrap; }
-.toggle-tile .label { font-size: 1.8em; max-height: 13%; text-align: center; width: 100%; }
-.selected .icon-search, .tile.selected .icon-search-clear { color: rgb(34, 34, 34); }
-.exp-densityBrowse .horizontal-list > .content { font-size: 100%; }
-.exp-densityBrowse .horizontal-list .no-content-message { display: none; }
-.exp-densityBrowse .horizontal-list .pivot-sliding-highlighter { border: 0.5em solid rgb(255, 255, 255); box-shadow: rgb(0, 0, 0) 0.083em 0.083em 0.75em 0.167em inset; height: 7.5em; margin-left: -0.4em; margin-top: -0.4em; pointer-events: none; width: 13.8em; background: transparent; }
-.exp-densityBrowse .horizontal-list.focused .pivot-sliding-highlighter { display: block; }
-.exp-densityBrowse .horizontal-list.focused.channel-selected .pivot-sliding-highlighter { border-radius: 50%; height: 7.5em; transform: translateX(3.2em); width: 7.5em; }
-.exp-densityBrowse .browse-sets .action-tile, .exp-densityBrowse .horizontal-list .channel-tile, .exp-densityBrowse .horizontal-list .video-tile { height: 14em; width: 14em; }
-.exp-densityBrowse .shelf .horizontal-list .channel-tile, .exp-densityBrowse .shelf .horizontal-list .video-tile, .exp-densityBrowse .shelf .horizontal-list .channel-tile.selected, .exp-densityBrowse .shelf .horizontal-list .video-tile.selected { opacity: 0.5; }
-.exp-densityBrowse .shelf.selected .horizontal-list .channel-tile, .exp-densityBrowse .shelf.selected .horizontal-list .video-tile, .exp-densityBrowse .horizontal-list .channel-tile, .exp-densityBrowse .horizontal-list .video-tile { opacity: 0.7; }
-.exp-densityBrowse .shelf.selected .horizontal-list .channel-tile.selected, .exp-densityBrowse .shelf.selected .horizontal-list .video-tile.selected, .exp-densityBrowse .horizontal-list .channel-tile.selected, .exp-densityBrowse .horizontal-list .video-tile.selected, .exp-densityBrowse .horizontal-list .auto-play-tile.selected .video-tile, .limited-animation .exp-densityBrowse .shelf .horizontal-list .channel-tile, .limited-animation .exp-densityBrowse .shelf .horizontal-list .video-tile, .limited-animation .exp-densityBrowse .shelf .horizontal-list .channel-tile.selected, .limited-animation .exp-densityBrowse .shelf .horizontal-list .video-tile.selected, .limited-animation .exp-densityBrowse .shelf.selected .horizontal-list .channel-tile, .limited-animation .exp-densityBrowse .shelf.selected .horizontal-list .video-tile, .limited-animation .exp-densityBrowse .horizontal-list .channel-tile, .limited-animation .exp-densityBrowse .horizontal-list .video-tile { opacity: 1; }
-.exp-densityBrowse .horizontal-list .tile-top { height: 7.83em; }
-.exp-densityBrowse .channel-top .badge, .exp-densityBrowse .tile-top .badge { font-size: 1em; padding: 0.2em; }
-.exp-densityBrowse .horizontal-list .tile-bottom, .exp-densityBrowse .horizontal-list .channel-bottom { height: 4.25em; margin-top: 0.83em; padding: 0px; width: 100%; }
-.exp-densityBrowse .shelf .horizontal-list .tile-bottom, .exp-densityBrowse .shelf .horizontal-list .channel-bottom { display: none; }
-.exp-densityBrowse .shelf.selected .horizontal-list .tile-bottom, .exp-densityBrowse .shelf.selected .horizontal-list .channel-bottom { display: block; }
-.exp-densityBrowse .browse-sets .action-tile .description, .exp-densityBrowse .horizontal-list .tile-bottom .title, .exp-densityBrowse .horizontal-list .channel-bottom .title { font-size: 1.16em; height: initial; line-height: 1.25em; margin: 0px; max-height: 2.5em; text-overflow: ellipsis; }
-.exp-densityBrowse .horizontal-list .channel-bottom .title { white-space: normal; }
-.exp-densityBrowse .horizontal-list .video-tile .details { color: rgb(205, 205, 205); font-size: 0.83em; height: initial; margin: 0.4em 0px; }
-.exp-densityBrowse .horizontal-list .video-tile .tile-top .decoration { display: none; line-height: 1em; margin-top: 0px; transform: translateY(-100%); width: 100%; }
-.exp-densityBrowse #search .tile-top .decoration, .exp-densityBrowse #post-play-list .tile-top .decoration, .exp-densityBrowse .shelf.selected .horizontal-list .tile-top .decoration { display: block; }
-.exp-densityBrowse .horizontal-list .video-tile .tile-top .badge { border-radius: 0px; }
-.exp-densityBrowse .horizontal-list .video-tile .tile-top .duration { font-size: 1em; font-weight: bold; padding: 0.5em; background: rgba(0, 0, 0, 0.498039); }
-.exp-densityBrowse .horizontal-list .channel-bottom .details { display: none; }
-.exp-densityBrowse .horizontal-list .video-tile .details .views, .exp-densityBrowse .horizontal-list .video-tile .details .age { display: inline-block; }
-.exp-densityBrowse .horizontal-list .video-tile .details .views { padding-right: 0.5em; }
-.sets-ui .exp-densityBrowse .horizontal-list .channel-tile.selected .channel-bottom > .title, .sets-ui .exp-densityBrowse .horizontal-list .auto-play-tile.selected .tile-bottom > .title, .sets-ui .exp-densityBrowse .horizontal-list .video-tile.selected .tile-bottom > .title { color: rgb(255, 255, 255); }
-.exp-densityBrowse .video-tile .overlay { height: 7.83em; margin-left: 60%; margin-top: -7.83em; width: 40%; }
-.exp-densityBrowse .video-tile .overlay .count { font-size: 1em; line-height: 1em; padding-top: 1.5em; }
-.exp-densityBrowse .video-tile .overlay .icon { font-size: 2em; padding: 0px; }
-.exp-densityBrowse .horizontal-list .channel-top { height: 7.83em; margin: 0px auto; width: 7.83em; }
-.exp-densityBrowse .horizontal-list .channel-top .video-thumb { border-radius: 50%; }
-.exp-densityBrowse .browse-sets .shelf > .title { font-size: 1em; margin-bottom: 0.9em; margin-top: 0px; }
-.exp-densityBrowse .browse-sets .shelf > .title .main { font-size: 1.5em; }
-.exp-densityBrowse .browse-sets .shelf > .title .annotation { font-size: 1em; }
-.exp-densityBrowse .browse-sets .shelf > .title { color: rgb(205, 205, 205); }
-.engaged.exp-densityBrowse .channel-tile .voice-command, .engaged.exp-densityBrowse .video-tile .voice-command { font-size: 1em; line-height: 1em; margin-top: -2em; }
-.limited-animation.sets-ui .exp-densityBrowse .video-tile:hover:not(.focused), .limited-animation.sets-ui .exp-densityBrowse .channel-tile:hover:not(.focused), .sets-ui .exp-densityBrowse .carousel .item:hover, .sets-ui .exp-densityBrowse .carousel .auto-play-tile:hover, .sets-ui .exp-densityBrowse .carousel .channel-tile:hover { opacity: 1; background-color: inherit !important; }
-.exp-densityBrowse .browse-sets .action-tile { border: none; }
-.exp-densityBrowse .browse-sets .action-tile .content { height: 7.83em; margin-bottom: 0.83em; }
-.exp-densityBrowse .browse-sets .action-tile .title { display: none; }
-.exp-densityBrowse .browse-sets .action-tile .large-action-icon { color: rgb(255, 255, 255); font-size: 6em; height: 1.3em; line-height: 1.3em; background-color: rgb(35, 35, 35); }
-.exp-densityBrowse .browse-sets .action-tile .description { opacity: inherit; padding: 0px; }
-.exp-densityBrowse .auto-play-tile { height: 14em; width: 14em; }
-.exp-densityBrowse .post-play-countdown { top: 7%; }
-.limited-animation .exp-densityBrowse .browse-content .list { margin-left: -7.5em; width: inherit; }
-.limited-animation .exp-densityBrowse .browse-content .shelf > .title { margin-left: 7.5em; }
-.limited-animation .exp-densityBrowse .browse-content .list .shelf:nth-child(1) { margin-bottom: 6.5em; }
-.limited-animation .exp-densityBrowse .browse-content .list .shelf { margin-bottom: -0.1em; }
-.limited-animation.sets-ui .exp-densityBrowse .channel-tile:not(.focused), .limited-animation.sets-ui .exp-densityBrowse .video-tile:not(.focused) { background-color: inherit; }
-.limited-animation .exp-densityBrowse .channel-tile.focused, .limited-animation .exp-densityBrowse .video-tile.focused { background-color: inherit; }
-.limited-animation .exp-densityBrowse .video-tile { margin-right: 0.5em; }
-.limited-animation .exp-densityBrowse .video-tile .overlay { height: 7.03em; margin-left: 8em; margin-top: -7.43em; width: 5.6em; }
-.limited-animation .exp-densityBrowse .video-tile .tile-top { height: 7.03em; padding: 0.4em; width: 13.2em; background: inherit; }
-.limited-animation .exp-densityBrowse .channel-tile { margin-right: 0.5em; }
-.limited-animation .exp-densityBrowse .channel-tile .channel-top { height: 6.83em; padding: 0.4em; width: 6.83em; }
-.limited-animation .exp-densityBrowse .video-tile.focused .tile-top { background: rgb(255, 255, 255); }
-.limited-animation .exp-densityBrowse .channel-tile.focused .channel-top { border-radius: 50%; background: rgb(255, 255, 255); }
-.limited-animation .exp-densityBrowse .search .placeholder-tile, .limited-animation .exp-densityBrowse .browse-content .list .placeholder-tile { height: 14em; margin-right: 0.5em; width: 14em; }
-#dialog.remote-reset-dialog > .title { font-size: 3em; padding-bottom: 0.5em; }
-#dialog.remote-reset-dialog .buttons { bottom: 0.5em; position: absolute; }
-#dialog.remote-reset-dialog { left: 0px; position: absolute; white-space: normal; }
-.remote-reset-dialog #dialog-view { color: rgb(170, 170, 170); font-size: 1.8em; padding-top: 0.5em; }
-.connection-instructions { padding-top: 0.5em; font-size: 2em; }
-.text-dialog .connection-instructions { font-size: 1.3em; }
-.browse-sets-state .login-dialog { margin-top: 5em; }
-#search .pairing .pairing-content > *, #dialog .pairing .pairing-content > * { display: inline-block; }
-#search .pairing .pairing-content .step2, #dialog .pairing .pairing-content .step2 { display: block; }
-#search .dial-upsell .connection-steps .no-dial-connect-step1, #search .manual-connect .connection-steps .with-dial-connect-step1 { display: none; }
-.connection-instructions .step1, .connection-instructions .step2, .qr-code .scan, .pairing .connected-header, .remote-reset-dialog .connected-header { color: rgb(170, 170, 170); font-size: 0.7em; }
-.connection-instructions .pair-url, .connection-instructions .pair-code { color: rgb(241, 241, 241); }
-.connection-instructions .step2 { margin-top: 2em; }
-.pairing .qr-code, .pairing .connected-list { display: inline-block; margin-left: 1em; vertical-align: top; }
-.pairing .dial-upsell { color: rgb(170, 170, 170); display: inline-block; font-size: 95%; overflow: hidden; padding-left: 2em; padding-top: 0.8em; text-align: initial; vertical-align: top; white-space: normal; width: 16em; }
-.pairing .cast-icon { display: inline-block; height: 1em; margin: 0.1em 0.3em; vertical-align: middle; width: 1em; background: url(www.youtube.com/s/tv/html5/f0d770f4/img/cast_disconnected_blue.png) 50% 50% / contain no-repeat; }
-.pairing .qr-code .scan { margin-bottom: 0.5em; white-space: normal; width: 5em; }
-.pairing .qr-code img { height: 5.1em; width: 5.1em; }
-.pairing .icon-settings-pair, .login-dialog .icon-settings-pair { display: inline-block; font-style: normal; font-variant: normal; font-weight: normal; font-stretch: normal; font-size: 5em; line-height: normal; font-family: youtube-icons; height: 1em; margin-top: 0.1em; width: 1.4em; background-image: none; }
-.remote-reset-dialog .connected-header, .pairing .connected-header { margin-bottom: 0.3em; }
-.remote-reset-dialog .devices, .pairing .devices { list-style: none; font-size: 1.5em; color: rgb(241, 241, 241); }
-.remote-reset-dialog .devices > div, .pairing .devices > div { display: block; height: 1.5em; line-height: 1.5em; overflow: hidden; padding-left: 1.5em; text-overflow: ellipsis; white-space: nowrap; width: 11.5em; }
-.remote-reset-dialog .devices .connected::before { background-position: 0px 100%; }
-.remote-reset-dialog .devices .connected { color: rgb(241, 241, 241); }
-#search { bottom: 0px; color: rgb(241, 241, 241); left: 0px; overflow: hidden; position: absolute; right: 0px; text-align: center; top: 0px; }
-.watch-state #search { left: 0px; }
-#search > .controls { left: 8em; margin-right: 18em; position: absolute; right: 2.5em; text-align: left; top: 2.5em; }
-#search-text-box { font-size: 1.6em; height: 100%; margin: 0px auto; overflow: hidden; position: relative; background-color: rgb(225, 225, 225); }
-#search-text-box > .icon-search { display: none; }
-#search-input { border: none; color: rgb(17, 17, 17); height: 100%; padding-left: 0.5em; width: 100%; background: none; }
-#search-input:disabled { color: rgb(17, 17, 17); }
-#search-query { color: rgb(17, 17, 17); height: 100%; overflow: hidden; padding-left: 0.5em; padding-top: 0.3em; position: absolute; text-overflow: ellipsis; white-space: pre; width: 95%; }
-#search-suggestions { font-size: 1.2em; position: relative; display: inline-block; left: 0px; width: 100%; }
-.search-state #spinner { top: 26em; }
-#suggest-list { overflow: hidden; }
-#suggest-list > div { border-radius: 1px; color: rgb(225, 225, 225); display: inline-block; padding: 0.2em 0.5em; }
-#search-keyboard { font-size: 1em; text-align: left; width: 65%; }
-#search-suggestions, #search-keyboard, #letter-suggest { white-space: nowrap; }
-#search-keyboard, #letter-suggest { z-index: 1; }
-#keyboard-grid { display: inline-block; font-size: 1.6em; margin: 0px auto; overflow: hidden; text-align: left; }
-#keyboard-grid, #keyboard-spacebar { color: rgb(163, 163, 163); }
-#keyboard-grid .button { border-radius: 1px; display: inline-block; margin: 0.3em 0.6em 0.3em 0px; padding: 0px 0.1em; text-align: center; text-transform: uppercase; width: 1em; vertical-align: top; }
-#keyboard-grid .list { text-align: left; text-shadow: none; }
-#search-keyboard #keyboard-grid .icon-key-delete.button { font-family: youtube-icons; font-size: 0.7em; line-height: 1.2em; margin-left: 2.25em; padding: 0.25em; width: 2.25em; }
-#keyboard-spacebar { border-radius: 1px; display: inline-block; font-family: youtube-icons; font-size: 1.44em; margin: 0.1em 7em 0px 2.1em; padding: 0.1em; text-align: left; }
-#search-keyboard #keyboard-grid .clear-query-tile.button { font-size: 0.7em; margin-left: 2.25em; padding: 0.25em; text-transform: uppercase; width: auto; }
-#keyboard-grid .icon-key-globe { font-family: youtube-icons; margin: 0.25em 0px 0.25em 1.6em; padding: 0.1em; width: 1.2em; }
-#search-keyboard .button.focused { color: rgb(33, 33, 33); background-color: rgb(225, 225, 225); }
-#letter-suggest { font-size: 1.6em; position: fixed; text-align: center; width: 1.2em; }
-.letter-suggest-visible #keyboard-grid .list.selected .button.selected:not(.focused) { color: rgb(0, 0, 0); text-shadow: none; background-color: rgba(153, 153, 153, 0.85098); }
-#keyboard-grid .button.numbers-toggle-tile { font-size: 0.75em; padding: 0.22em; margin: 0.25em 0px 0px 2.1em; width: auto; }
-#search .pairing .icon-settings-pair { display: none; }
-#search .search-message { display: inline-block; margin-left: 2em; margin-top: 1.5em; vertical-align: top; white-space: normal; width: 50%; }
-#search .search-pairing { bottom: 0px; display: inline-block; left: 5em; padding: 2em 2.5em 4em; position: absolute; text-align: left; text-shadow: black -1px 1px 2px; width: 100%; background-color: rgba(0, 0, 0, 0.298039); }
-.limited-animation #search .search-pairing { background-color: rgb(0, 0, 0); }
-#search .search-pairing .search-img { display: inline-block; height: 11em; width: 11em; background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/pair_promo.png); background-size: cover; }
-#search .search-pairing .title { font-size: 1.9em; }
-#search .search-pairing .connection-instructions { font-size: 1.6em; }
-#search .search-pairing .dial-upsell-content { color: rgb(170, 170, 170); }
-#search .search-pairing .manual-connect-content .connection-steps { padding: 0px; }
-#search .search-pairing .manual-connect-content .connection-steps .pair-code, #search .search-pairing .manual-connect-content .connection-steps .pair-url { display: block; }
-#search .search-pairing .manual-connect-content .connection-steps .step2 { margin-top: 1em; }
-#search .search-pairing .manual-connect-content .connection-steps .label, #search .search-pairing .manual-connect .dial-upsell-content, #search .search-pairing .dial-upsell .manual-connect-content { display: none; }
-#search .pairing .no-dial-connect-step1, #search .pairing .no-dial-connect-step2 { display: inline-block; }
-#search .pairing .no-dial-connect-step2 { margin-left: 2em; }
-#search .pairing .connection-steps { text-align: left; }
-#search .pairing .connected-list, #search .pairing .qr-code-wrapper { display: none; }
-#search.hide-input .search-pairing { margin-top: 8em; }
-#letter-suggest div { color: rgba(0, 0, 0, 0.8); height: 1.4em; text-shadow: none; background-color: rgba(153, 153, 153, 0.85098); }
-#letter-suggest .focused { color: rgb(241, 241, 241); }
-#transliteration-container { display: none; }
-#search-keyboard.transliterable #transliteration-container { display: block; }
-#transliteration .list { font-size: 2em; height: 1.2em; margin: 0px auto; overflow: hidden; padding: 0.2em 0px; text-align: center; width: 77%; }
-#transliteration .list > div { display: inline; padding: 0px 0.5em; position: relative; }
-#suggest-list > div.focused, #transliteration .list .focused { color: rgb(33, 33, 33); background-color: rgb(254, 254, 254); }
-#transliteration .button:hover { background-color: rgba(153, 153, 153, 0.4); }
-#transliteration .button:hover, #search-keyboard .button:hover { cursor: pointer; }
-#search .horizontal-list > .content { text-align: left; }
-.limited-animation.sets-ui #search .horizontal-list > .content { margin-left: -21.8em; width: 126em; }
-#search .horizontal-list { left: 7.5em; height: inherit; position: absolute; right: 0px; top: 38%; transform: translateY(7.5em); transition: opacity 0.25s, transform 0.25s; width: initial; }
-#search.input-collapsed .horizontal-list { transform: none !important; }
-#search-keyboard { transition: opacity 0.25s, transform 0.25s; transform-origin: 50% top 0px; }
-#search-keyboard.hidden { opacity: 0; transform: scaleY(0.5); display: block !important; }
-#search #search-text-entry { height: 2.4em; }
-#search #search-suggestions, #search #search-text-entry { padding-top: 0.25em; transform-origin: 50% top 0px; transition: opacity 0.25s, transform 0.25s; background-color: rgba(0, 0, 0, 0); }
-.limited-animation #search .horizontal-list, .limited-animation #search #search-suggestions, .limited-animation #search #search-text-entry, .limited-animation #search #search-keyboard { transition: none; }
-#search-text-entry { padding-bottom: 0.4em; }
-#search-text-entry, #text-box-background { height: 3em; }
-#keyboard-icon { display: none; font-family: youtube-icons; font-size: 1.2em; padding-bottom: 0.4em; text-align: center; vertical-align: bottom; width: 2em; }
-.input-collapsed #keyboard-icon { display: inline-block; }
-#search-text-entry .suggestions-container { white-space: nowrap; overflow: hidden; height: 2.4em; }
-.exp-densityBrowse #search .horizontal-list { font-size: 100%; height: 14em; top: 35%; transform: translateY(8em); }
-.limited-animation .exp-densityBrowse #search .horizontal-list .list { margin-left: -14em; }
-.exp-densityBrowse #search .horizontal-list .video-tile { height: 14em; }
-.exp-densityBrowse #search .horizontal-list .video-tile .details .views, .exp-densityBrowse #search .horizontal-list .video-tile .details .age { display: inline-block; }
-.exp-densityBrowse #search .horizontal-list .video-tile .details .views { padding-right: 0.5em; }
-.limited-animation.sets-ui .exp-densityBrowse #search .horizontal-list > .content { margin-left: 0px; width: inherit; }
-#player { height: 100%; width: 100%; }
-.watch-state #watch { display: block; }
-.veryvibrant #watch { height: 100%; background-color: rgb(0, 0, 0); }
-#player-facade { height: 100%; position: absolute; width: 100%; }
-#player-video { height: 100%; }
-#watch, .dialog-focused .standard-caption-window, #caption-window-99, .countdowntimer, .ytp-cued-icon, .ytp-fallback, .html5-context-menu, .html5-dialog-holder, .html5-endscreen, .html5-info-bar, .html5-modal-panel, .html5-player-chrome, .html5-show-video-info-template, .html5-storyboard, .html5-text-button, .html5-video-player .hid, .html5-ypc-module, .player-actions-container, .video-ad-status-bar, .video-annotations, .html5-watermark, .video-fallback-content, .video-ads, .title-card.hidden { display: none; }
-.html5-video-player { overflow: visible; }
-.html5-video-info-panel { color: rgb(241, 241, 241); display: none; margin: 20%; position: absolute; top: 0px; z-index: 1; background-color: rgba(0, 0, 0, 0.701961); }
-.html5-video-info-panel-close { display: none; }
-.html5-video-info-panel-content > div > div { display: inline-block; font-weight: bold; padding: 0px 0.5em; text-align: right; width: 10em; }
-.ad-video { width: 100%; height: 100%; }
-.ad-showing .video-ads { display: block; overflow: hidden; }
-.ad-interrupting.tag-pool-enabled .html5-main-video { position: absolute; left: -1px; top: -1px; overflow: hidden; width: 1px !important; height: 1px !important; }
-.html5-video-player .video-stream { position: absolute; top: 0px; left: 0px; display: block; }
-.opera .video-stream { height: 720px; width: 1280px; }
-.advertisement-info, .skip-ad-button { position: absolute; top: 9.5em; }
-.advertisement-info { left: 12.5%; text-align: left; width: 30%; overflow: hidden; }
-.advertisement-info-top { height: 3em; }
-.advertisement-avatar { width: 3em; height: 3em; display: inline-block; margin-right: 0.4em; background-size: contain; background-position: 100% 50%; background-repeat: no-repeat; }
-.advertisement-info-details { display: inline-block; vertical-align: top; width: 79%; }
-.advertisement-title, .advertisement-advertiser, .third-party { color: rgb(255, 255, 255); text-shadow: rgb(0, 0, 0) 2px 1px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
-.third-party { position: absolute; bottom: 0px; }
-.advertisement-title { font-size: 1.4em; line-height: 1em; height: 1.1em; }
-.advertisement-advertiser { font-size: 1.1em; line-height: 1.3em; height: 1.4em; }
-.advertisement-info .ad-badge { padding: 1px 5px; text-shadow: none; border-radius: 0.15em; font-size: 0.9em; text-transform: capitalize; background-color: rgb(230, 188, 39); }
-.skip-ad-button { right: 12.5%; border-radius: 0.15em; padding: 0.6em; background-color: rgba(0, 0, 0, 0.4); }
-.canskip.mdx-skip.skip-ad-button { height: 4em; width: 18em; }
-.canskip.mdx-skip .skip-button-text { font-size: 1.1em; height: 3em; left: 2em; line-height: 1.5em; position: absolute; top: 0.7em; width: 75%; }
-#transport-controls.ad-active .player-controls #button-list div.skip-ad-button .label, .skip-ad-button .label { font-size: 1.1em; padding: 0px 1.4em; height: 2.5em; line-height: 2.5em; border-radius: 0.12em; cursor: pointer; color: rgb(225, 225, 225); background-color: rgba(0, 0, 0, 0); }
-.skip-ad-button.canskip.mdx-skip .label { height: 3.7em; }
-#transport-controls.ad-active .player-controls #button-list div.skip-ad-button.canskip:hover .label, .skip-ad-button.canskip:hover .label { color: rgb(33, 33, 33); border-radius: 0.12em; background-color: rgb(255, 255, 255); }
-#transport-controls.ad-active .player-controls #button-list div.skip-ad-button.canskip.focused .label, .skip-ad-button.canskip.focused .label { color: rgb(33, 33, 33); border-radius: 0.12em; background-color: rgb(225, 225, 225); }
-.skip-ad-button .skip-symbol { display: none; font-family: youtube-icons; }
-.skip-ad-button.canskip .skip-symbol.icon-player-next { display: inline; font-size: 1.3em; margin-left: 0.5em; vertical-align: middle; }
-.exp-newMdxSkipButtonCast .canskip.mdx-skip.skip-ad-button .skip-symbol.icon-cast_on { display: inline; font-size: 2.5em; position: absolute; right: 0.7em; text-align: right; top: 0.5em; width: 25%; }
-.exp-newMdxSkipButtonPair .canskip.mdx-skip.skip-ad-button .skip-symbol.icon-settings-pair { display: inline; font-size: 4em; position: absolute; right: 0.4em; text-align: right; top: 0.3em; width: 25%; }
-.canskip.mdx-skip.skip-ad-button .skip-symbol.icon-player-next { display: none; }
-#player-controls { text-align: center; }
-#bottom-half { bottom: 0px; height: 50%; position: absolute; width: 100%; }
-#transport-controls { bottom: 0px; height: 100%; position: absolute; transition: transform 0.25s, opacity 0.25s; width: 100%; background: linear-gradient(rgba(0, 0, 0, 0), rgb(0, 0, 0)); }
-#transport-controls.hidden { opacity: 0; display: block !important; }
-.limited-animation #transport-controls.hidden { display: none !important; }
-#transport-controls, #transport-controls.focused { display: block; }
-.player-controls-widget { border: 0px; margin-top: 8.4em; }
-.fresh-transport-controls.seeking-forward .seeking-icon.icon-player-rew::before { content: ""; }
-.seeking-icon { bottom: 3em; color: rgb(255, 255, 255); display: none; position: absolute; left: 0px; margin: 0px auto; right: 0px; }
-.seeking-icon span { display: none; }
-.fresh-watch.watch-seeking .seeking-icon { display: block; }
-.fresh-watch .title-card { height: 35.9%; background: linear-gradient(rgba(0, 0, 0, 0.74902), transparent); }
-#transport-controls.fresh-transport-controls { background: linear-gradient(to top, rgb(0, 0, 0), transparent); }
-.fresh-watch .player-video-title { color: rgb(255, 255, 255); font-size: 1.936em; }
-.fresh-watch .player-meta .player-video-details { color: rgba(255, 255, 255, 0.701961); font-size: 1.455em; }
-.fresh-watch .pivot-shelf-list { margin-top: 14.5em; padding-left: 3.871em; }
-#fresh-rows-container { border: 0px; color: rgb(255, 255, 255); margin-top: 7.7em; }
-.fresh-transport-controls .storyboards { position: absolute; }
-.fresh-transport-controls .more-row, .fresh-transport-controls .main-row { margin-left: 5%; width: 95%; }
-.fresh-transport-controls .button span, .fresh-transport-controls .toggle-button span { display: none; font-family: roboto-regular; color: rgb(255, 255, 255); }
-.lang-case-sensitive .fresh-transport-controls span::first-letter { text-transform: uppercase; }
-.fresh-transport-controls .button.disabled:hover, .fresh-transport-controls .toggle-button.disabled:hover { background-color: transparent; }
-.fresh-transport-controls .button.disabled, .fresh-transport-controls .toggle-button.disabled { opacity: 0.45; }
-.fresh-transport-controls .button.focused, .fresh-transport-controls .toggle-button.focused, .fresh-transport-controls .button:hover, .fresh-transport-controls .toggle-button:hover { color: rgb(255, 255, 255); background-color: rgba(255, 255, 255, 0.498039); }
-.fresh-transport-controls .button, .fresh-transport-controls .toggle-button, .seeking-icon { border-radius: 4px; font-family: youtube-icons; font-size: 1.4em; height: 1em; padding: 0.55em; speak: none; text-align: center; width: 1em; }
-.fresh-transport-controls .button, .fresh-transport-controls .toggle-button { color: rgba(255, 255, 255, 0.701961); cursor: pointer; display: inline-block; position: relative; }
-.fresh-transport-controls #transport-more-button::before { display: inline-block; left: 19%; position: absolute; top: -9%; }
-.fresh-transport-controls #transport-more-button { font-size: 2em; height: 0.7em; margin-right: 1.452em; padding: 0.385em; width: 0.7em; }
-.fresh-transport-controls #transport-more-button span { color: rgb(255, 255, 255); display: inline-block; font-size: 0.485em; left: 4.5em; position: absolute; text-align: left; top: 1em; width: 15em; }
-.fresh-transport-controls #transport-more-button.top-row-active span { display: none; }
-.fresh-transport-controls #transport-more-options-list { display: inline-block; }
-.fresh-transport-controls .progress-bar { display: inline-block; height: 3em; left: 0px; padding: 0px; position: relative; top: 0px; width: 76.55%; }
-.fresh-transport-controls.live-playback #play-pause-button { margin-right: 1em; }
-.fresh-transport-controls.live-playback .progress-bar { width: 77.55%; }
-.fresh-transport-controls.live-playback .live-indicator { display: inline-block; left: 0px; margin-left: 1em; position: relative; top: 0px; }
-.fresh-transport-controls #player-time-elapsed, .fresh-transport-controls .player-time-total { color: rgb(255, 255, 255); display: inline-block; font-size: 1.3em; position: relative; text-align: center; top: 0px; width: 8%; }
-.fresh-transport-controls .more-row { margin-bottom: 5px; }
-.fresh-transport-controls .more-row .button, .fresh-transport-controls .more-row .toggle-button { margin-right: 2.075em; vertical-align: top; }
-.fresh-transport-controls .icon-like.toggle-selected, .fresh-transport-controls .icon-dislike.toggle-selected, .fresh-transport-controls .icon-player-closedcaptions.toggle-selected { color: rgb(39, 147, 230); }
-.fresh-transport-controls .icon-logo-lozenge.toggle-selected { color: rgb(255, 0, 0); }
-.fresh-transport-controls .more-row .button span, .fresh-transport-controls .more-row .toggle-button span { font-size: 0.692em; left: -3.45em; position: relative; top: -4.4em; width: 8.3em; }
-.fresh-transport-controls .more-row .button.focused span, .fresh-transport-controls .more-row .toggle-button.focused span, .fresh-transport-controls .more-row .button:hover span, .fresh-transport-controls .more-row .toggle-button:hover span { display: inline-block; }
-.fresh-transport-controls .progress-bar .progress-bar-line div { height: 0.242em; }
-.fresh-transport-controls .progress-bar .progress-bar-line .progress-bar-background { background-color: rgba(255, 255, 255, 0.45098); }
-.fresh-transport-controls .progress-bar .progress-bar-line .progress-bar-loaded { background-color: rgb(255, 255, 255); }
-.fresh-transport-controls .progress-bar .progress-bar-line .progress-bar-played { background-color: rgb(223, 35, 35); }
-.fresh-transport-controls .progress-bar.ad-active .progress-bar-played { background-color: rgb(231, 189, 0); }
-.ypc-playback .fresh-transport-controls .progress-bar-line .progress-bar-played { background-color: rgb(39, 147, 230); }
-.fresh-watch .ad-point-separator, .fresh-transport-controls .progress-bar .progress-bar-disc, .fresh-transport-controls.ad-active #player-time-elapsed, .fresh-transport-controls.ad-active .player-time-total { display: none; }
-.fresh-transport-controls.ad-active .progress-bar { padding-left: 1em; width: 88%; }
-.fresh-transport-controls.ad-active .more-row, .fresh-watch.watch-seeking .more-row { visibility: hidden; }
-.fresh-watch .skip-ad-button, .fresh-watch .advertisement-info { top: 6.7em; }
-.fresh-watch .advertisement-info { left: 5%; }
-.fresh-watch .advertisement-info .advertisement-info-top { height: 3.065em; position: relative; }
-.fresh-watch .skip-ad-button { border-radius: 4px; padding: 0px; right: 6%; z-index: 1; background-color: rgba(0, 0, 0, 0.498039); }
-.fresh-watch .skip-ad-button .label { color: rgb(255, 255, 255); font-size: 1.13em; height: 2.57em; line-height: 2.57em; padding: 0px 1.3em; }
-.fresh-watch .skip-ad-button .skip-symbol { font-size: 1.1em; }
-.fresh-watch .skip-ad-button.canskip:hover, .fresh-watch .skip-ad-button.canskip.focused { background-color: rgba(255, 255, 255, 0.498039); }
-.fresh-watch .skip-ad-button.canskip:hover .label, .fresh-watch .skip-ad-button.canskip.focused .label { color: rgb(255, 255, 255); background: none; }
-.fresh-watch .advertisement-info { color: rgb(255, 255, 255); }
-.fresh-watch .advertisement-info .advertisement-advertiser { font-size: 100%; height: 1.4em; line-height: 1.3em; }
-.fresh-watch .advertisement-info .advertisement-advertiser > span { vertical-align: bottom; }
-.fresh-watch .advertisement-info .advertisement-advertiser, .fresh-watch .advertisement-info .advertisement-title, .fresh-watch .advertisement-info .third-party { overflow: hidden; text-shadow: none; text-overflow: ellipsis; white-space: nowrap; }
-.fresh-watch .advertisement-info .third-party { bottom: 0px; position: absolute; vertical-align: top; width: 79%; }
-.fresh-watch .advertisement-info .third-party > span { vertical-align: middle; }
-.fresh-watch .advertisement-info .advertisement-title { font-size: 1.35em; font-weight: bold; line-height: 1em; height: 1.1em; padding-bottom: 1%; text-shadow: none; }
-.fresh-watch .advertisement-info .ad-badge { border-radius: 0.15em; font-size: 0.85em; font-weight: bold; padding: 1px 7px; text-shadow: none; text-transform: capitalize; background-color: rgb(231, 189, 0); }
-.fresh-watch .advertisement-info .remaining-duration, .fresh-watch .advertisement-info .ad-by { font-size: 1.13em; }
-.fresh-watch .advertisement-info .remaining-duration { padding: 0px 2%; }
-.fresh-watch .advertisement-info .advertisement-avatar { border-radius: 50%; display: inline-block; height: 3.065em; margin-right: 1.4em; width: 3.065em; background-size: contain; background-repeat: no-repeat; }
-.title-card { display: block; height: 25%; position: absolute; top: 0px; transition: transform 0.25s, opacity 0.25s; width: 100%; background: linear-gradient(rgba(0, 0, 0, 0.901961), rgba(0, 0, 0, 0.8), transparent); }
-.ypc-playback .title-card { height: 30%; }
-.title-card.hidden { opacity: 0; display: block !important; }
-.limited-animation .title-card.hidden { display: none !important; }
-.title-card .badges span { border: 1px solid rgb(221, 221, 221); border-radius: 2px; display: inline-block; font-size: 0.9em; margin-left: 1em; padding: 0px 0.5em; text-transform: uppercase; vertical-align: middle; }
-.title-card .badges span.live-badge { color: rgb(255, 255, 255); border: 0px; margin-left: 0px; background-color: rgba(230, 33, 23, 0.8); }
-.selected-title .views { margin-top: -0.6em; }
-.player-meta { color: rgb(241, 241, 241); margin: 2.6em 0px 0px 3.5em; white-space: nowrap; width: 90%; }
-.player-meta .user-details { position: absolute; right: 5%; }
-.player-meta .user-details > div { display: inline-block; vertical-align: top; }
-.player-meta .user-details .avatar { height: 4em; width: 4em; background-size: cover; }
-.player-meta .user-details .message { font-size: 80%; margin: 0.2em 1em 0px 1.1em; max-width: 50%; overflow: hidden; text-overflow: ellipsis; }
-.player-meta .player-video-text { display: inline-block; padding-left: 1.5em; width: 90%; }
-.player-meta .player-video-details { font-size: 1.5em; white-space: initial; }
-.player-meta .player-video-details > div { margin: 0.2em 1em 0px 0px; vertical-align: top; }
-.player-meta .player-video-details .username { max-width: 45%; overflow: hidden; text-overflow: ellipsis; }
-.player-meta .player-video-details .set-context { max-width: 45%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
-.player-meta .player-video-details .set-context, .player-meta .player-video-details .set-context-position, .player-meta .player-video-details .uploaded-date, .player-meta .player-video-details .view-count, .player-meta .player-video-details .badges, .player-meta .player-video-details .username { display: inline-block; }
-.player-video-avatar { border-radius: 50%; display: inline-block; height: 5.5em; vertical-align: top; width: 5.5em; background-size: contain; }
-.player-video-title { font-size: 2.4em; margin: -0.1em 0px 0px; overflow: hidden; text-overflow: ellipsis; }
-.quality-status { display: none; padding-top: 0.2em; }
-.title-tray-inflated .quality-status { display: inline-block; }
-.quality-status-hd-badge { border-radius: 2px; color: rgb(65, 65, 65); font-size: 0.6em; font-weight: bold; padding: 0.125em 0.5em; background: rgb(241, 241, 241); }
-.ypc-preview { display: none; }
-.ypc-playback .ypc-preview { display: block; }
-.player-controls #button-list .focused, .player-controls #button-list div:hover { border-radius: 0.05em; color: rgb(0, 0, 0); }
-.player-controls #button-list .focused { background-color: rgb(255, 255, 255); }
-.player-controls #button-list div:hover { background-color: rgb(157, 148, 149); }
-.player-controls #button-list .button, .player-controls #button-list .toggle-button { display: inline-block; font-size: 1.4em; height: 1.3em; margin: 1em; padding-bottom: 0.4em; padding-top: 0.8em; top: 0px; width: 2.3em; }
-.player-controls #button-list .button span, .player-controls #button-list .toggle-button span { font-family: roboto-regular; font-size: 0.7em; left: -10%; margin: 0.5em 0px 0px; width: 120%; height: 120%; }
-.player-controls #button-list .button.spacer { visibility: hidden; cursor: auto; }
-#transport-controls.focused .player-controls #button-list div { color: rgb(255, 255, 255); }
-#transport-controls.focused .player-controls #button-list .focused { color: rgb(34, 34, 34); }
-.player-controls #button-list div { color: rgb(170, 170, 170); cursor: pointer; vertical-align: middle; }
-#transport-controls.ad-active .player-controls #button-list div.disabled { visibility: hidden; }
-#transport-controls.ad-active .player-controls #button-list div.skip-ad-button.disabled { visibility: visible; opacity: 1; }
-.player-controls #button-list div.disabled:hover { color: rgb(255, 255, 255); background-color: transparent; }
-.player-controls #button-list div.focused { opacity: 1; }
-.player-controls #button-list div.disabled { opacity: 0.2; }
-.player-controls #button-list .icon-player-closedcaptions.toggle-selected, .player-controls #button-list .icon-like.toggle-selected, .player-controls #button-list .icon-dislike.toggle-selected { color: rgb(39, 147, 230) !important; }
-.player-controls #button-list .icon-logo-lozenge.toggle-selected { color: rgb(255, 0, 0) !important; }
-#transport-controls .player-controls #button-list div.icon-player-more, #transport-controls .player-controls #button-list div.icon-player-less { color: rgb(133, 133, 133); }
-.player-controls .toggle-button span, .player-controls .button span, .player-controls .toggle-button.disabled span, .player-controls .button.disabled span { display: none; margin-top: 1em; color: rgb(255, 255, 255); font-size: 0.75em; padding: 0px; position: relative; text-align: center; top: 1em; width: 100%; }
-.lang-case-sensitive .player-controls .button span::first-letter, .lang-case-sensitive .player-controls .toggle-button span::first-letter { text-transform: uppercase; }
-#transport-controls.focused, .player-controls .toggle-button.focused span, .player-controls div:hover.toggle-button span, .player-controls .button.focused span, .player-controls div:hover.button span { display: block; }
-.player-seekbar { position: relative; }
-.progress-bar { height: 4em; left: 11%; position: absolute; top: -9em; width: 75%; padding: 0px 1.5%; }
-.progress-bar .progress-bar-playhead, .progress-bar .progress-bar-line { top: 2.5em; }
-.progress-bar .progress-bar-line { position: relative; width: 100%; }
-.progress-bar .progress-bar-line div { height: 2px; position: absolute; }
-.progress-bar .progress-bar-playhead { height: 2px; position: relative; width: 100%; }
-.progress-bar .progress-bar-line .progress-bar-background { width: 100%; background-color: rgb(91, 91, 91); }
-.progress-bar .progress-bar-line .progress-bar-played { background-color: rgb(227, 44, 41); }
-.progress-bar .progress-bar-line .progress-bar-loaded { background-color: rgb(153, 153, 153); }
-.ypc-playback .progress-bar-line .progress-bar-played { background-color: rgb(39, 147, 230); }
-.progress-bar .progress-bar-disc { border-radius: 50%; height: 0.6em; margin: -0.25em 0px 0px -0.25em; position: absolute; width: 0.6em; background-color: rgb(204, 204, 204); }
-.progress-bar .cue-range-markers { height: 100%; position: absolute; width: 100%; }
-.progress-bar-disc { pointer-events: none; }
-.ad-active .progress-bar .cue-range-markers { visibility: hidden; }
-.progress-bar .cue-range-markers .cue-range-marker { height: 2px; margin: 0px 0px 0px -0.1em; position: absolute; width: 0.2em; background-color: rgba(255, 255, 255, 0); }
-.progress-bar .cue-range-markers .ad-marker { background-color: rgb(230, 188, 39); }
-.progress-bar.ad-active .progress-bar-played { background-color: rgb(214, 203, 35); }
-#player-time-elapsed, .player-time-total, .live-indicator { color: rgba(255, 255, 255, 0.74902); font-size: 1.2em; position: absolute; top: -6em; width: 12%; }
-.limited-graphics #player-time-elapsed, .limited-graphics .player-time-total { color: rgb(255, 255, 255); }
-#player-time-elapsed { left: 0px; text-align: right; }
-.player-time-total, .live-indicator { right: 0px; text-align: left; }
-#transport-controls.ad-active #player-time-elapsed, #transport-controls.ad-active .player-time-total { display: none; }
-.live-indicator { display: none; font-size: 1.3em; position: absolute; top: -5.6em; width: 11.7%; }
-.live-playback .live-indicator { display: block; }
-.live-playback .player-time-total, .live-playback .elapsed-time, .fresh-transport-controls.live-playback .player-time-total, .fresh-transport-controls.live-playback #player-time-elapsed { display: none; }
-.live-playback .progress-bar-disc { background-color: rgb(230, 33, 23); }
-#watch .loading-indicator { top: 30%; }
-#transport-spacer:hover { background: none; }
-.html5-video-controls { position: absolute; width: 100%; height: 0px; bottom: 2em; transition: all 0.6s ease; }
-.ytp-player-content { position: absolute; bottom: 0px; height: 0px; left: 0px; right: 0px; }
-.html5-video-content { position: absolute; }
-.caption-window { position: absolute; pointer-events: none; }
-.standard-caption-window { position: absolute; white-space: normal; width: 80%; }
-.caption-window-transform { display: inline-block; line-height: 1.32em; }
-.html5-video-player .captions-text { position: relative; }
-.html5-video-player .caption-row { padding-bottom: 5px; padding-top: 5px; }
-.anchor-point-1 { transform: translate(-50%, 0px); }
-.anchor-point-2 { transform: translate(-100%, 0px); }
-.anchor-point-3 { transform: translate(0px, -50%); }
-.anchor-point-4 { transform: translate(-50%, -50%); }
-.anchor-point-5 { transform: translate(-100%, -50%); }
-.anchor-point-6 { transform: translate(0px, -100%); }
-.anchor-point-7 { transform: translate(-50%, -100%); }
-.anchor-point-8 { transform: translate(-100%, -100%); }
-.anchor-point-0, .anchor-point-1, .anchor-point-2 { padding-top: 3em; }
-.watch.transport-showing .anchor-point-0, .watch.transport-showing .anchor-point-1, .watch.transport-showing .anchor-point-2 { padding-top: 9em; }
-.anchor-point-0, .anchor-point-3, .anchor-point-6 { padding-left: 3em; }
-.anchor-point-2, .anchor-point-5, .anchor-point-8 { padding-right: 3em; }
-.anchor-point-6, .anchor-point-7, .anchor-point-8, .eureka .watch.transport-showing .anchor-point-6, .eureka .watch.transport-showing .anchor-point-7, .eureka .watch.transport-showing .anchor-point-8 { padding-bottom: 3em; }
-.watch.transport-showing .anchor-point-6, .watch.transport-showing .anchor-point-7, .watch.transport-showing .anchor-point-8 { padding-bottom: 15em; }
-.watch.pivot-focused .anchor-point-6 { padding-bottom: 17.5em; }
-.watch.pivot-focused .anchor-point-7, .watch.pivot-focused .anchor-point-8 { padding-bottom: 16em; }
-.watch .ytp-fresca-module, .search-focused .watch.message .ytp-fresca-module { display: none; }
-.watch.message .ytp-fresca-module { color: rgb(255, 255, 255); display: block; font-size: 2em; padding-left: 1.5em; position: absolute; top: 30%; width: 100%; background-color: rgba(0, 0, 0, 0.498039); }
-.watch.message .ytp-fresca-show-countdown { padding-bottom: 1.3em; }
-.ytp-fresca-countdown { font-size: 1.4em; }
-.pivot-shelf-list { margin-top: 12.5em; padding-left: 7em; transition: transform 0.25s, opacity 0.25s; transform: translateY(10em); }
-.pivot-shelf-list.hidden { opacity: 0; display: block !important; }
-.limited-animation .pivot-shelf-list.hidden, .forced-limited-animation.pivot-shelf-list.hidden { display: none !important; }
-.pivot-shelf-list.animate-in { transform: translateY(0px); }
-.pivot-shelf-list > .carousel { opacity: 0.5; transition: opacity 0.25s; }
-.limited-memory .pivot-shelf-list { opacity: 1; }
-.pivot-shelf-list .title-container { color: rgb(255, 255, 255); }
-.pivot-shelf .tile-title .author, .pivot-shelf .tile-title .view { color: rgb(225, 225, 225); }
-.pivot-shelf-list.focused, .post-play .pivot-shelf-list { height: 17.5em; margin-top: 2.5em; padding-top: 10em; transform: translateY(-7.5em); background: linear-gradient(rgba(0, 0, 0, 0), rgb(0, 0, 0)); }
-.post-play .pivot-shelf { opacity: 0.5; }
-.post-play .pivot-shelf-list.focused .pivot-shelf, .pivot-shelf-list.focused > .carousel { opacity: 1; }
-.pivot-shelf-list .focused.list { height: 0px; }
-.pivot-shelf-list .no-content-message { display: none; }
-.pivot-shelf-list.forced-limited-animation, .limited-animation .pivot-shelf-list, .limited-animation .pivot-shelf-list > .carousel { transition: none; }
-.pivot-shelf-list.forced-limited-animation .placeholder-tile, .limited-animation .pivot-shelf-list .placeholder-tile { height: 7.83em; width: 14em; }
-#pivot-post-play .pivot-video-tile, #pivot-post-play .placeholder-tile { height: 10.625em; width: 18.5em; }
-#pivot-post-play .tile-top { height: 10.625em; }
-.limited-animation #pivot-post-play .tile-top, #pivot-post-play.forced-limited-animation .tile-top { height: 9.825em; width: 17.7em; }
-.pivo`t-video-tile, .pivot-channel-tile { height: 7.83em; width: 14em; }
-.forced-limited-animation .pivot-video-tile, .forced-limited-animation .pivot-auto-play-tile, .forced-limited-animation .pivot-channel-tile, .pivot-shelf-list.forced-limited-animation .placeholder-tile, #pivot-post-play.forced-limited-animation .placeholder-tile, .limited-animation .pivot-video-tile, .limited-animation .pivot-auto-play-tile, .limited-animation .pivot-channel-tile, .limited-animation #pivot-post-play .placeholder-tile, .limited-animation .pivot-shelf-list .placeholder-tile { display: inline-block; margin-right: 0.5em; position: relative; vertical-align: bottom; background: none; }
-.forced-limited-animation .pivot-channel-tile, .limited-animation .pivot-channel-tile { border-radius: 100%; width: 10.625em; }
-.forced-limited-animation .pivot-video-tile.focused, .forced-limited-animation .pivot-auto-play-tile.focused .pivot-video-tile, .limited-animation .pivot-video-tile.focused, .limited-animation .pivot-auto-play-tile.focused .pivot-video-tile { background-color: rgb(255, 255, 255); }
-.pivot-video-tile .tile-top { height: 7.83em; }
-.forced-limited-animation .pivot-video-tile .tile-top, .limited-animation .pivot-video-tile .tile-top { height: 7.03em; padding: 0.4em; width: 13.2em; background-color: inherit; }
-.forced-limited-animation .pivot-video-tile.focused .tile-top, .limited-animation .pivot-video-tile.focused .tile-top { background-color: rgb(255, 255, 255); }
-.pivot-video-tile .tile-overlay { color: rgb(255, 255, 255); display: none; height: 100%; margin-top: -7.83em; text-align: center; width: 100%; background-color: rgba(0, 0, 0, 0.498039); }
-.forced-limited-animation .pivot-video-tile .tile-overlay, .limited-animation .pivot-video-tile .tile-overlay { margin-top: -7.03em; }
-#pivot-post-play .pivot-video-tile .tile-overlay { margin-top: -10.625em; }
-.limited-animation #pivot-post-play .pivot-video-tile .tile-overlay, #pivot-post-play.forced-limited-animation .pivot-video-tile .tile-overlay { margin-top: -9.875em; }
-.pivot-video-tile.has-overlay .tile-overlay { display: block; }
-#pivot-post-play .pivot-video-tile.has-overlay .tile-overlay { opacity: 0; }
-#pivot-post-play.focused .pivot-video-tile.has-overlay .tile-overlay { opacity: 1; }
-.post-play .pivot-shelf-list .pivot-video-tile.has-overlay .label { display: none; }
-.post-play .pivot-shelf-list .pivot-video-tile.has-overlay .icon-player-play { font-size: 4em; }
-.post-play .pivot-shelf-list .pivot-video-tile.has-overlay .icon-player-play::before { content: ""; }
-.pivot-video-tile .tile-overlay .icon { font-family: youtube-icons; font-size: 3em; padding-top: 0.5em; }
-.pivot-video-tile .tile-overlay .label { font-size: 1.2em; }
-#pivot-post-play .pivot-video-tile .tile-overlay { color: rgb(225, 225, 225); }
-#pivot-post-play .pivot-video-tile .tile-overlay .icon { font-size: 4.5em; padding-bottom: 0.15em; padding-top: 0.4em; }
-#pivot-post-play .pivot-video-tile .tile-overlay .label, #pivot-post-play .pivot-video-tile .tile-overlay .icon { opacity: 0; transition: opacity 0.25s; }
-#pivot-post-play.focused .pivot-video-tile .tile-overlay .label, #pivot-post-play.focused .pivot-video-tile .tile-overlay .icon { opacity: 1; }
-.limited-animation #pivot-post-play .pivot-video-tile .tile-overlay .label, .limited-animation #pivot-post-play .pivot-video-tile .tile-overlay .icon, #pivot-post-play.forced-limited-animation .pivot-video-tile .tile-overlay .label, #pivot-post-play.forced-limited-animation .pivot-video-tile .tile-overlay .icon { transition: none; }
-.pivot-video-tile .video-thumb { height: 100%; width: 100%; background-size: 100%; background-position: 50% 50%; background-repeat: no-repeat; }
-.pivot-video-tile .decoration { margin-top: -2.1em; text-align: right; }
-.pivot-video-tile .duration { font-size: 1em; font-weight: bold; padding: 0.5em; background-color: rgba(0, 0, 0, 0.701961); }
-.pivot-auto-play-tile { height: 10.625em; overflow: visible; width: 18.5em; background: none; }
-.forced-limited-animation .pivot-auto-play-tile, .limited-animation .pivot-auto-play-tile { height: 10.625em; width: 18.5em; }
-.pivot-auto-play-tile .post-play-countdown { display: block; font-size: 1.8em; margin-left: 10.8em; opacity: 0; pointer-events: none; position: absolute; text-align: left; text-shadow: none; top: 0px; width: 17.5em; }
-.pivot-auto-play-tile.countdown-active .post-play-countdown { opacity: 1; pointer-events: inherit; }
-.pivot-auto-play-tile .details, .pivot-auto-play-tile .title { color: rgb(255, 255, 255); opacity: 0; pointer-events: none; }
-.pivot-auto-play-tile.focused .details, .pivot-auto-play-tile.focused .title { opacity: 1; pointer-events: inherit; }
-.pivot-auto-play-tile .title { font-size: 1.4em; margin-left: 14em; max-height: 2.5em; overflow: hidden; position: absolute; top: 2.2em; width: 20em; }
-.pivot-auto-play-tile .details { font-size: 1.1em; margin-left: 17.8em; position: absolute; top: 6em; width: 37em; }
-.pivot-auto-play-tile .details, .pivot-auto-play-tile .title, .pivot-auto-play-tile .post-play-countdown { transition: opacity 0.25s; }
-.limited-animation .pivot-auto-play-tile .details, .limited-animation .pivot-auto-play-tile .title, .limited-animation .pivot-auto-play-tile .post-play-countdown { transition: none; }
-#pivot-post-play .pivot-auto-play-tile .pivot-video-tile { padding-left: 0px; padding-top: 0px; }
-#pivot-post-play #post-play-list .no-content-message { display: none; }
-.forced-limited-animation .pivot-horizontal-list, .limited-animation .pivot-horizontal-list { margin-left: -15em; }
-.pivot-horizontal-list.focused .pivot-sliding-highlighter, .post-play #post-play-list.focused .pivot-sliding-highlighter { display: block; }
-.pivot-horizontal-list .pivot-sliding-highlighter, .post-play .pivot-sliding-highlighter { border: 0.5em solid rgb(255, 255, 255); box-shadow: rgb(0, 0, 0) 0.083em 0.083em 0.75em 0.167em inset; height: 7.5em; margin-left: -0.4em; margin-top: -0.4em; pointer-events: none; width: 13.8em; background: transparent; }
-.pivot-shelf { position: absolute; width: 0px; }
-.forced-limited-animation .pivot-shelf, .limited-animation .pivot-shelf { opacity: 0.5; position: relative; }
-.forced-limited-animation .pivot-shelf.focused, .limited-animation .pivot-shelf.focused { opacity: 1; }
-.limited-memory.limited-animation .pivot-shelf { opacity: 1; }
-.pivot-shelf .title-container { margin-bottom: 1em; visibility: hidden; white-space: nowrap; }
-.pivot-shelf .title-container .icon { font-family: youtube-icons; vertical-align: middle; }
-.pivot-shelf .tile-title span { display: inline-block; overflow: hidden; text-overflow: ellipsis; }
-.pivot-shelf.focused .title-container { visibility: visible; }
-.pivot-shelf .tile-title, .pivot-shelf .shelf-title { margin-bottom: 0.3em; }
-.pivot-shelf .tile-title { height: 1.7em; }
-.pivot-shelf .tile-title .title { font-size: 1.3em; max-width: 30em; }
-.pivot-shelf .tile-title .author, .pivot-shelf .tile-title .view { margin-left: 0.3em; max-width: 20em; }
-.pivot-shelf .tile-title .author, .pivot-sliding-highlighter .select { display: none; }
-.pivot-shelf.has-author .tile-title .author { display: inline-block; }
-.forced-limited-animation .pivot-horizontal-list .list, .limited-animation .pivot-horizontal-list .list { width: 98em; }
-.forced-limited-animation .postplay-horizontal-list .list, .limited-animation .postplay-horizontal-list .list { margin-left: -13.4em; width: 98em; }
-.forced-limited-animation .pivot-channel-tile.focused .tile-top, .limited-animation .pivot-channel-tile.focused .tile-top { background-color: rgb(255, 255, 255); }
-.forced-limited-animation .pivot-channel-tile .tile-top, .limited-animation .pivot-channel-tile .tile-top { height: 6.83em; padding: 0.4em; width: 6.83em; }
-.pivot-channel-tile .tile-top { border-radius: 50%; height: 7.83em; margin: 0px auto; overflow: hidden; width: 7.83em; background: none; }
-.pivot-channel-tile .tile-top .video-thumb { background-color: rgba(0, 0, 0, 0); }
-.pivot-channel-tile .video-thumb { border-radius: 50%; }
-.pivot-shelf .pivot-horizontal-list.channel-selected .pivot-sliding-highlighter { border-radius: 50%; height: 7.5em; margin-left: -0.3em; margin-top: -0.3em; transform: translateX(3.2em); width: 7.5em; }
-.pivot-shelf.channel-selected .shelf-title { visibility: hidden; }
-.pivot-footer { height: 9em; }
-.pivot-button-list { padding-top: 4em; }
-.pivot-button-list .icon-button { display: inline-block; padding: 0.5em 1em; }
-.pivot-button-list .icon-button .icon { font-family: youtube-icons; margin-right: 0.3em; }
-.pivot-footer.focused .pivot-button-list .icon-button.selected { background-color: rgb(255, 255, 255); }
-.pivot-button-list .icon-button span { color: rgb(255, 255, 255); font-size: 1.5em; }
-.pivot-footer.focused .pivot-button-list .icon-button.selected span { color: rgb(0, 0, 0); }
-#pivot-post-play { padding-left: 6em; padding-top: 10em; }
-.limited-animation #pivot-post-play, #pivot-post-play.forced-limited-animation { padding-left: 0px; }
-#pivot-post-play #post-play-list { font-size: 1.1em; margin-left: 0.1em; }
-.forced-limited-animation .pivot-auto-play-tile, .limited-animation .pivot-auto-play-tile { padding-left: 0px; vertical-align: bottom; }
-#pivot-post-play.forced-limited-animation .pivot-video-tile, .limited-animation #pivot-post-play .pivot-video-tile { vertical-align: bottom; }
-.forced-limited-animation .pivot-auto-play-tile .pivot-video-tile, .limited-animation .pivot-auto-play-tile .pivot-video-tile { display: block; position: absolute; }
-#pivot-post-play .pivot-sliding-highlighter { border-width: 0.5em; height: 9.9em; margin-top: 0px; width: 18.4em; }
-.limited-animation.sets-ui .exp-densityBrowse .auto-play-tile:not(.focused) .video-tile, .limited-animation .exp-densityBrowse .auto-play-tile.focused .video-tile, .limited-animation .exp-densityBrowse .auto-play-tile { background-color: inherit; }
-.limited-animation .exp-densityBrowse .auto-play-tile.focused .tile-top { background: rgb(255, 255, 255); }
-.limited-animation .exp-densityBrowse .auto-play-tile .post-play-countdown { top: -2.67em; }
-.loki-video-source { color: rgb(255, 255, 255); font-size: 1.5em; left: 5em; position: absolute; top: 2.6em; }
-.loki-title-card { bottom: 0px; display: block; height: 25%; position: absolute; width: 100%; background: linear-gradient(to top, rgba(0, 0, 0, 0.901961) 0%, rgba(0, 0, 0, 0.6) 80%, transparent 100%); }
-.loki-title-card .loki-metadata { color: rgb(241, 241, 241); height: 100%; margin-bottom: 2.6em; margin-left: 8em; overflow: hidden; white-space: nowrap; width: 100%; }
-.loki-metadata #loki-progress-bar { display: block; height: 2em; left: 8em; padding: 0px; position: absolute; top: -4em; width: 80%; }
-#loki-progress-bar .progress-bar-playhead { display: none; }
-.loki-metadata .loki-video-avatar { display: inline-block; height: 8em; width: 8em; background-size: contain; }
-.loki-metadata .loki-video-text { display: inline-block; height: 100%; margin: 0px 5em 0px 3.5em; width: 80%; }
-.loki-video-text .loki-video-title { font-size: 2.4em; margin-top: -0.1em; overflow: hidden; text-overflow: ellipsis; width: 80%; }
-.loki-video-text .loki-channel-name { font-size: 1.5em; margin-top: 0.4em; overflow: hidden; text-overflow: ellipsis; width: 80%; }
-.loki-video-text .loki-video-description { line-height: 1.4em; margin-top: 0.4em; max-height: 4.2em; overflow: hidden; white-space: normal; width: 80%; }
-.toaster { color: rgb(170, 170, 170); font-size: 133%; position: absolute; top: 0px; width: 100%; }
-.toaster .list { margin-top: 0.8em; position: absolute; width: 100%; }
-.toaster .toast { min-height: 3.5em; overflow: hidden; position: relative; text-align: center; width: 100%; transition: all 0.6s ease; }
-.toaster .toast-container { border: 1px solid black; display: inline-block; margin: 0.2em 0px 1em; max-width: 60%; opacity: 1; padding: 0.5em 1em 0.6em; transition: all 0.3s ease; background-color: rgba(27, 25, 26, 0.8); }
-.toaster .toast.toast-removing .toast-container { opacity: 0; }
-.toaster .toast-container > div { display: inline-block; vertical-align: middle; }
-.toaster .toast-icon { height: 1.2em; width: 1.2em; background-size: 1.1em 1.1em; background-position: 50% 50%; background-repeat: no-repeat; }
-.device-toast .toast-container { padding: 0.7em; }
-.toaster .device-toast .toast-msg { padding-left: 0.8em; background-size: 1.1em 1.1em; background-position: 0% 50%; background-repeat: no-repeat; }
-.toaster .avatar { height: 2.6em; width: 2.6em; }
-.toaster .avatar > div { height: inherit; width: inherit; background-size: cover; background-position: 50% 50%; }
-.toaster .video-image > div { height: 100%; width: 100%; background-size: cover; background-position: 50% 50%; }
-.toast .update-playlist-toast { bottom: 0px; max-width: 14em; padding: 0.8em; position: fixed; right: 0px; text-align: left; }
-.update-playlist-toast .overlay { height: 55%; margin-left: 56%; margin-top: -55%; opacity: 0.8; width: 44%; background: rgb(0, 0, 0); }
-.update-playlist-toast .video-count { font-size: 2.3em; font-weight: normal; line-height: 1.2em; padding-top: 0.8em; text-align: center; }
-.update-playlist-toast .icon-playlist { font-family: youtube-icons; font-size: 2.2em; height: 50%; overflow: hidden; padding: 0.2em; text-align: center; }
-.update-playlist-toast .avatar { padding: 0.3em; }
-.update-playlist-toast .contrast-container { padding: 0.4em; background-color: rgba(0, 0, 0, 0.8); }
-.update-playlist-toast .tile-top { height: 7.7em; width: 14em; }
-.update-playlist-toast .toast-msg { font-size: 85%; padding-left: 0.6em; }
-.update-playlist-toast .truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; width: 13.2em; }
-.update-playlist-toast .toast-msg.avatar { height: 2.1em; width: 10em; overflow: hidden; }
-.update-playlist-toast .toast-msg.truncate { white-space: normal; }
-.update-playlist-toast .toast-msg.no-user-avatar { font-size: 85%; margin-left: -2.2em; }
-.update-playlist-toast .wrapper > div { display: inline-block; vertical-align: middle; }
-.toaster .toast-icon { max-width: 100%; background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/dial-sprite.png); background-size: 100%; }
-.toast-icon.avatar { background-image: none; }
-.toaster .android-phone-connected { background-position: 0px 0%; }
-.toaster .android-phone-disconnected { background-position: 0px 10.14%; }
-.toaster .android-tablet-connected { background-position: 0px 20.29%; }
-.toaster .android-tablet-disconnected { background-position: 0px 30.43%; }
-.toaster .ios-phone-connected { background-position: 0px 40.58%; }
-.toaster .ios-phone-disconnected { background-position: 0px 50.72%; }
-.toaster .ios-tablet-connected { background-position: 0px 60.87%; }
-.toaster .ios-tablet-disconnected { background-position: 0px 71%; }
-.toaster .laptop-connected { background-position: 0px 81.16%; }
-.toaster .laptop-disconnected { background-position: 0px 91.3%; }
-.toaster .remote-connected { background-size: 233.33%; background-position: 0px 100%; }
-.toaster .remote-disconnected { background-size: 233.33%; background-position: 0px 100%; }
-.toaster .toast-progress { border: 1px solid rgb(170, 170, 170); width: 10em; }
-.toaster .toast-progress .progress { height: 1em; background-color: rgb(102, 102, 102); }
-.toaster .volume-muted { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/volume_mute_pressed.png); }
-.toaster .volume-low { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/volume_0_pressed.png); }
-.toaster .volume-mid { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/volume_1_pressed.png); }
-.toaster .volume-high { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/volume_2_pressed.png); }
-.toaster .volume-toast .toast-msg { text-align: right; width: 1.2em; }
-.toaster .volume-toast .toast-container { transition-delay: 0.3s; }
-.toaster .volume-toast.toast-removing .toast-container { transition-delay: 0s; }
-.unlimited-welcome-toast .toast-container { box-shadow: rgb(0, 0, 0) 0em 0em 0.6em 0.02em; height: 6.5em; margin: 0em; padding: 0px; position: fixed; right: 0px; text-align: left; top: 0px; width: 24.5em; transform: translateX(0px); opacity: 1; transition: all 0.6s ease; }
-.unlimited-welcome-toast.toast-displaying .toast-container { opacity: 0; transform: translateX(18em); }
-.limited-animation .unlimited-welcome-toast .toast-container { opacity: 1; transition: none; transform: none; }
-.unlimited-toast-messages { position: absolute; padding-top: 2.1em; padding-left: 1.3em; width: 12em; }
-.unlimited-toast-msg-top { color: rgb(221, 221, 221); line-height: 1em; }
-.unlimited-toast-msg-bottom { padding-top: 0.5em; font-size: 0.7em; }
-.unlimited-toast-background { height: 100%; width: 9em; background-size: 100%; background-position: 0% 50%; background-repeat: no-repeat; }
-.unlimited-toast-logo { height: 100%; background-size: 100%; background-repeat: no-repeat; }
-#dialog { color: rgb(255, 255, 255); display: none; height: 100%; left: 0px; position: absolute; top: 0px; width: 100%; }
-#error-markup #dialog { display: block; }
-#dialog.focused { display: block; }
-#dialog-wrapper { height: 30em; margin-top: 11.1em; padding: 1.3em 6em; position: relative; background-color: rgb(0, 0, 0); }
-#dialog.browse-sets #dialog-wrapper { height: 100%; margin-top: 0px; padding: 1.3em 10%; background-color: rgba(32, 32, 32, 0.498039); }
-#dialog .dialog-contents { background: 90% 30% no-repeat; }
-#dialog.browse-sets .dialog-contents .icon-simple-dialog { color: rgb(255, 255, 255); }
-#dialog .dialog-contents .dialog-large-icon { display: none; }
-#dialog.browse-sets .dialog-contents .dialog-large-icon { display: inline-block; font-family: youtube-icons; font-size: 10em; height: 2.5em; line-height: 2.5em; text-align: center; width: 35%; }
-#dialog.browse-sets .icon-simple-dialog .icon-dialog-content .extra-info { color: rgba(255, 255, 255, 0.74902); display: block; font-family: monospace; font-size: 1.5em; line-height: 1.4em; padding-top: 0.8em; }
-#dialog.browse-sets .icon-simple-dialog .icon-dialog-content .label { display: block; font-size: 1.8em; line-height: 1.1em; padding-top: 6.45em; }
-#dialog .dialog-contents .header .title { font-size: 2.5em; }
-#dialog.browse-sets.browse-sets-titled-dialog .dialog-contents .header { border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgba(255, 255, 255, 0.2); height: 3.4em; margin: 0px 1.5em; }
-#dialog.browse-sets.browse-sets-titled-dialog .dialog-contents .header .title { color: rgba(255, 255, 255, 0.498039); display: block; font-size: 1.3em; font-weight: 300; height: 3em; line-height: 3em; }
-#dialog.browse-sets .buttons { font-size: 1.8em; margin-right: 2%; margin-top: 0.8em; text-align: right; }
-#dialog.browse-sets .connection-steps { padding: 0px; }
-#dialog.browse-sets.exit .dialog-contents .header .title { display: block; padding: 1em 6.5em 3em; }
-#dialog.browse-sets .dialog-contents { height: 80%; margin-top: 5%; background-color: rgb(0, 0, 0); }
-#dialog.browse-sets.closed-captions .dialog-contents { height: 75%; }
-#dialog.browse-sets .dialog-cancel-button { text-align: center; }
-.video-overview .dialog-contents { font-size: 2em; }
-#dialog.qr-dialog .dialog-contents { color: rgb(204, 204, 204); font-size: 1.1em; overflow: hidden; padding-top: 4em; }
-#dialog.qr-dialog .dialog-contents .header .title { color: rgb(255, 255, 255); font-size: 2em; }
-#dialog .box { padding-top: 1.5em; }
-#dialog.qr-dialog a { color: rgb(255, 255, 255); display: block; font-size: 1.5em; }
-#dialog.qr-dialog .qr { height: 7em; margin: 0.2em 0px; width: 7em; background-size: 100%; }
-#dialog.qr-dialog .dialog-icon { display: block; background-size: 12em; }
-#dialog.help .dialog-icon { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/icon-help.png); }
-#dialog.feedback .dialog-icon { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/icon-feedback.png); }
-#dialog.system-error .dialog-icon { font-family: youtube-icons; font-size: 10em; margin-right: 0px; padding-right: 0.5em; padding-top: 0.5em; text-align: right; width: 2em; }
-#dialog.system-error .dialog-icon::before { content: ""; }
-#dialog.qr-dialog.browse-sets .dialog-icon { display: none; }
-#dialog .text-dialog { bottom: 1.5em; left: 0px; padding: 2em 20em 0px 6em; position: absolute; white-space: normal; }
-#dialog.text-dialog .dialog-contents .header .title { font-size: 3em; padding-bottom: 0.5em; }
-.text-dialog #dialog-view { color: rgb(170, 170, 170); padding-bottom: 1em; width: 90%; }
-.text-dialog #dialog-view .dialog-contents { font-size: 1.8em; }
-#dialog.browse-sets .icon-dialog-content { display: inline-block; height: 25em; vertical-align: top; width: 60%; }
-#dialog-view .url { color: rgb(255, 255, 255); font-size: 1.25em; padding-bottom: 0.8em; }
-#dialog-view .flag-claim .url { padding-bottom: 0.5em; }
-#dialog-view .reset-help { display: block; width: 25em; }
-#dialog.browse-sets .tos-dialog .icon-dialog-content { padding-top: 9em; }
-#dialog.browse-sets .tos-dialog .icon-dialog-content .subtitle { color: rgb(170, 170, 170); }
-#dialog.browse-sets .tos-dialog .icon-dialog-content .url { font-size: 2em; }
-#dialog.browse-sets.qr-dialog .dialog-contents { padding-top: 0px; }
-#dialog.browse-sets.qr-dialog .icon-dialog-content .link { margin-top: 5em; padding-top: 0px; }
-#dialog.browse-sets.qr-dialog .icon-dialog-content .qr-code-wrapper { margin-top: 2em; }
-#dialog.browse-sets.qr-dialog .icon-dialog-content .qr-code-wrapper .qr { border: 0.2em solid rgba(255, 255, 255, 0.0980392); padding: 0.5em; }
-#dialog .signed-out-dialog { font-size: 1.8em; }
-.connection-error, .connection-steps { display: inline-block; font-weight: 300; padding: 0px 1em 1em 2em; white-space: normal; }
-.connection-error { vertical-align: top; }
-.connection-error div { margin-bottom: 1em; }
-#dialog .login-dialog .activation-code { font-size: 1.3em; letter-spacing: 0.1em; line-height: 1.3em; }
-#dialog .sets-login-dialog .body-text { display: inline-block; height: 25em; vertical-align: top; width: 50%; }
-#dialog .sets-login-dialog .body-text .connection-instructions { font-size: 1.9em; margin-top: 3.5em; }
-#dialog .sets-login-dialog .standard-message, #dialog .sets-login-dialog .like-dislike-message, #dialog .sets-login-dialog .subscribe-message, #dialog .sets-login-dialog .upload-message, #dialog .sets-login-dialog .player-message { display: none; }
-#dialog.standard-login .sets-login-dialog .standard-message, #dialog.like-dislike-login .sets-login-dialog .like-dislike-message, #dialog.subscribe-login .sets-login-dialog .subscribe-message, #dialog.upload-login .sets-login-dialog .upload-message, #dialog.player-login .sets-login-dialog .player-message { display: block; }
-#dialog .pairing .qr-code-wrapper { display: inline-block; vertical-align: top; }
-#dialog .manual-connect-content .connection-steps { padding: 0px; }
-#dialog .manual-connect-content .connection-steps .label { color: rgb(170, 170, 170); font-size: 0.7em; margin-top: 1em; }
-#dialog .manual-connect-content .connection-steps .step1, #dialog .manual-connect-content .connection-steps .step2 { margin-top: 0.7em; }
-#dialog .manual-connect-content .connection-steps .pair-url, #dialog .manual-connect-content .connection-steps .pair-code { margin-left: 0.3em; }
-#dialog.browse-sets .manual-connect-content .connection-steps .label { font-size: 1.3em; }
-#dialog.browse-sets .manual-connect-content .connection-steps .step1, #dialog.browse-sets .manual-connect-content .connection-steps .step2 { display: inline-block; font-size: 1.3em; }
-#dialog.browse-sets .manual-connect-content .connection-steps .pair-url, #dialog.browse-sets .manual-connect-content .connection-steps .pair-code { display: inline-block; font-size: 1.3em; margin-left: 0.3em; }
-#dialog.browse-sets .pairing .connection-instructions { font-size: 1em; padding-top: 10em; }
-#dialog .manual-connect .dial-upsell-content { display: none; }
-#dialog .dial-upsell .manual-connect-content .connection-steps .no-dial-connect-step1, #dialog .manual-connect .manual-connect-content .connection-steps .with-dial-connect-step1 { display: none; }
-#dialog .manual-connect .manual-connect-content .connection-steps { font-size: 1.5em; }
-#dialog .manual-connect .manual-connect-content .connection-steps .label { display: none; }
-#dialog.browse-sets .dial-upsell .dial-upsell-content { font-size: 1.8em; white-space: normal; width: 80%; }
-#dialog.browse-sets .dial-upsell .dial-upsell-content .cast-icon { height: 1.3em; margin: 0px; width: 1.5em; }
-#dialog.browse-sets .dial-upsell .manual-connect-content { color: rgb(170, 170, 170); font-size: 1.4em; line-height: 1em; }
-#dialog.browse-sets .remote-reset-dialog .connected-list .connected-header { color: rgb(255, 255, 255); font-size: 1.5em; margin-top: 6em; }
-#dialog.browse-sets .remote-reset-dialog .connected-list .devices { display: inline-block; font-size: 1em; }
-#dialog.browse-sets .remote-reset-dialog .connected-list .devices > div { display: inline-block; font-size: 1em; padding-left: 0px; padding-right: 1.5em; width: 10em; }
-#dialog.browse-sets .remote-reset-dialog .reset-help { font-size: 1.5em; margin-top: 1em; }
-#dialog .logout-authenticated-info { padding: 2.5em 0px; }
-#dialog .login-user-icon { display: inline-block; height: 4em; margin: 2em 2em 0px 0px; width: 4em; background-size: cover; }
-#dialog.browse-sets .login-user-icon { margin: 0px 15%; border-radius: 20em; }
-#dialog .login-user-info { display: inline-block; margin-left: 1.7em; margin-top: -0.8em; font-size: 2em; font-weight: 300; width: 82%; }
-#dialog .login-user-info h3 { font-size: 2.2em; font-weight: normal; margin: 0px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
-#dialog.browse-sets .logout-authenticated-info { padding: 0px; }
-#dialog.browse-sets .login-user-info { height: 13em; margin: 0px; width: 100%; }
-#dialog.browse-sets .login-user-info .display-name, #dialog.browse-sets .login-user-info .platform-container { display: none; }
-#dialog.browse-sets .login-user-info .signed-in-message { display: inline-block; width: 50%; }
-#dialog.browse-sets .login-user-info .signed-in-label strong { color: rgb(255, 255, 255); display: block; font-size: 2.5em; overflow: hidden; text-overflow: ellipsis; }
-#dialog.browse-sets .login-user-info .signed-in-label { color: rgb(170, 170, 170); font-size: 0.5em; margin-top: 10em; }
-#dialog.browse-sets .login-user-info .sign-out-label { margin-top: 1em; }
-#dialog .spinner { height: 10em; width: 10em; }
-#dialog .spinner .loading-indicator { height: 100%; width: 100%; background-size: contain; }
-#dialog .buttons { font-size: 3em; font-weight: 300; padding-top: 0.3em; }
-#dialog .buttons > div { color: rgb(0, 0, 0); cursor: pointer; display: inline-block; min-width: 2.4em; padding: 0px 0.3em; text-align: center; background-color: rgb(51, 51, 51); }
-#dialog.browse-sets .buttons .button { color: rgba(255, 255, 255, 0.498039); min-width: 3em; padding: 0.2em 0.8em; background-color: rgb(0, 0, 0); }
-#dialog.browse-sets .buttons .focused, #dialog.browse-sets .buttons .button.focused:hover { color: rgb(102, 102, 102); background-color: rgb(241, 241, 241); }
-#dialog .buttons .button:hover, #dialog.browse-sets .buttons .button:hover { background-color: rgb(102, 102, 102); }
-#dialog .buttons div { margin-left: 0.5em; }
-#dialog .buttons .focused, #dialog .buttons .focused:hover { color: rgb(102, 102, 102); background-color: rgb(241, 241, 241); }
-#dialog .whichOneIsThis-logout-dialog .logout-prompt { font-size: 1.7em; }
-#dialog .logout-prompt { margin-top: 6em; }
-.scrolling-text { font-size: 1.3em; height: 15em; margin-right: 1.1em; margin-top: 1em; overflow: hidden; }
-.scrolling-text h4 { margin: 0px; padding: 0px; }
-.scrolling-text > div { overflow: hidden; padding-bottom: 1em; }
-.flag-list-container { margin-top: 0.5em; }
-.flag-list .button { color: rgb(134, 134, 134); cursor: pointer; display: inline-block; font-size: 1.8em; padding: 0.4em; vertical-align: top; }
-.flag-list .button { width: 12em; }
-.flag-list .button:hover { background-color: rgb(68, 68, 68); }
-.flag-list .button.focused, .flag-list .button.focused:hover { color: rgb(103, 103, 103); background-color: rgb(255, 255, 255); }
-#flag-widget { font-weight: 300; }
-.flag-video { color: rgb(103, 103, 103); font-size: 1.8em; font-weight: 300; padding-top: 1em; width: 47%; }
-.flag-video .url { color: rgb(255, 255, 255); display: block; font-size: 1.6em; padding-top: 0.5em; }
-.flag-example { display: inline-block; height: 57%; position: absolute; right: 18%; top: 9%; width: 23%; background: url(www.youtube.com/s/tv/html5/f0d770f4/img/flag.png) 0px 0px / contain no-repeat; }
-.flag-claim .metadata { display: block; font-size: 1em; font-weight: 500; padding-top: 0.2em; white-space: normal; }
-.flag-claim .url { color: rgb(134, 134, 134); display: block; font-weight: 300; }
-.flag-claim { color: rgb(103, 103, 103); font-size: 1.6em; font-weight: 300; margin: 1em 0px 0px 2em; white-space: nowrap; }
-.flag-claim .copyright-infringment { display: inline-block; white-space: normal; width: 50%; }
-.flag-claim .privacy-invasion { display: inline-block; margin-left: 4%; vertical-align: top; white-space: normal; width: 40%; }
-.flag-claim .email { color: rgb(134, 134, 134); }
-.flag-claim .subtitle { font-size: 1.2em; font-weight: 500; }
-.player-error-dialog.player-error { color: rgb(170, 170, 170); font-size: 1.8em; padding: 1em 0px 8em 0em; }
-#dialog .scrollbar { height: 70%; margin-top: 5em; right: 5em; }
-#dialog .scrollbar .handle { height: 5em; }
-.paid-channel-info { font-size: 1.4em; padding-top: 1em; }
-.paid-channel-info .channel-url { font-weight: bold; }
-.status-dialog #dialog-wrapper { background-color: rgba(0, 0, 0, 0.498039); }
-.status-dialog .icon { display: inline-block; height: 11em; vertical-align: middle; width: 25%; background: url(www.youtube.com/s/tv/html5/f0d770f4/img/pairing-promo-combo.png) 50% 50% / contain no-repeat; }
-.status-dialog .info { display: inline-block; padding-left: 0.5em; vertical-align: middle; width: 70%; }
-.status-dialog .message { color: rgb(204, 204, 204); font-size: 2em; }
-.status-dialog #dialog-view { padding-top: 7em; }
-.dialog-focused #legend { bottom: 12%; display: block; }
-#legend.legend-for-dialog-closed-captions { bottom: 6%; }
-#dialog.confirm-cookies .dialog-contents .header .title { font-size: 3em; }
-#dialog.confirm-cookies #dialog-view { color: rgb(170, 170, 170); font-size: 1.8em; height: 8em; padding-top: 0.9em; }
-.single-pane-selector { padding-bottom: 1em; padding-top: 1em; white-space: nowrap; }
-.single-pane-selector .list { display: inline-block; margin-right: 0.5em; padding-left: 0.5em; padding-right: 0.5em; vertical-align: top; width: 94%; }
-.single-pane-selector .button .label { width: 90%; }
-.single-pane-selector .check-button.previously-selected .icon-check { display: inline-block; }
-.split-pane-selector { border-bottom-width: 0.1em; border-bottom-style: solid; border-bottom-color: rgba(255, 255, 255, 0.2); padding-bottom: 1em; padding-top: 1em; white-space: nowrap; }
-.check-button .icon-check { display: none; font-family: youtube-icons; }
-.single-pane-selector .labeled-value, .split-pane-selector .labeled-value { color: rgb(134, 134, 134); font-size: 1.4em; height: 2.8em; line-height: 1.5em; overflow: hidden; padding: 0px 1em; white-space: normal; }
-.single-pane-selector .labeled-value .value, .split-pane-selector .labeled-value .value { color: rgb(102, 102, 102); display: block; font-size: 0.7em; line-height: 1.4em; }
-.single-pane-selector .button, .split-pane-selector .button { color: rgb(134, 134, 134); cursor: pointer; font-size: 1.4em; height: 2.8em; line-height: 2.8em; overflow: hidden; padding: 0px 0.4em; white-space: normal; }
-.single-pane-selector .button .label, .split-pane-selector .button .label { display: inline-block; line-height: 1.3em; vertical-align: middle; }
-.single-pane-selector .subtitled-button, .split-pane-selector .subtitled-button { line-height: 1.5em; }
-.single-pane-selector .button.no-model, .split-pane-selector .button.no-model { visibility: hidden; }
-.split-pane-selector .list { display: inline-block; vertical-align: top; width: 47%; }
-.split-pane-selector .list:first-child { border-right-width: 0.1em; border-right-style: solid; border-right-color: rgba(255, 255, 255, 0.2); margin-right: 0.5em; padding-right: 0.5em; }
-.single-pane-selector .button:hover, .single-pane-selector .list:not(.focused) .button.selected, .split-pane-selector .button:hover, .split-pane-selector .list:not(.focused) .button.selected { color: rgb(255, 255, 255); background-color: rgb(68, 68, 68); }
-.single-pane-selector .button.focused, .single-pane-selector .button.focused:hover, .split-pane-selector .button.focused, .split-pane-selector .button.focused:hover { color: black; background-color: rgb(255, 255, 255); }
-.single-pane-selector .subtitled-button span.subtitle, .split-pane-selector .subtitled-button span.subtitle { color: rgb(102, 102, 102); display: block; font-size: 0.7em; line-height: 1.4em; }
-.color-button .preview { border: 2px solid rgb(0, 0, 0); color: rgb(134, 134, 134); display: inline-block; height: 1em; margin: 0px 0.2em 0.2em; vertical-align: middle; width: 1em; }
-.color-button .preview.rounded { border-radius: 50%; }
-.preview.black { border: 1px solid rgb(255, 255, 255); background-color: rgb(0, 0, 0); }
-.preview.red { background-color: rgb(255, 0, 0); }
-.preview.magenta { background-color: rgb(255, 0, 255); }
-.preview.blue { background-color: rgb(0, 0, 255); }
-.preview.cyan { background-color: rgb(0, 255, 255); }
-.preview.green { background-color: rgb(0, 255, 0); }
-.preview.yellow { background-color: rgb(255, 255, 0); }
-.preview.white { background-color: rgb(255, 255, 255); }
-.debug-dialog { font-size: 0.9em; }
-.debug-dialog span.label { font-weight: bold; }
-#dialog.browse-sets .video-upload-dialog-contents { display: inline-block; font-size: 1.6em; margin: 1em 3% 0px; text-align: left; vertical-align: top; width: 55%; }
-#dialog.browse-sets .modify-video .video-upload-dialog-contents { margin-top: 2em; text-align: center; }
-.video-upload-status .video-url { color: rgb(39, 147, 230); }
-.delete-video { padding-bottom: 6em; }
-.modify-video .list .button { color: rgb(132, 132, 132); display: inline-block; height: 8em; margin-right: 1em; text-align: center; width: 8em; background-size: 60% 60%; background-position: 50% 20%; background-repeat: no-repeat; }
-.modify-video .list .button.focused { color: rgb(40, 40, 40); background-color: rgb(255, 255, 255); }
-.modify-video .list .button span { display: block; font-size: 1.2em; margin: 4.6em 0.5em 0.5em; overflow: hidden; white-space: nowrap; }
-.modify-video .modify-edit-button { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/edit_tile_light.png); }
-.modify-video .modify-edit-button.focused { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/edit_tile_dark.png); }
-.modify-video .modify-delete-button { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/trash_tile_light.png); }
-.modify-video .modify-delete-button.focused { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/trash_tile_dark.png); }
-.delete-video-dialog .video-tile .details, .modify-video .video-tile .details { margin-top: -0.1em; }
-.browse-sets #modify-list .button { height: 7.5em; margin-right: 0.9em; width: 7.5em; }
-.browse-sets #modify-list .button span { font-size: 1.1em; margin-top: 5.2em; }
-.delete-video-dialog { margin-bottom: 14em; }
-.browse-sets .delete-video-dialog { margin-bottom: 1em; }
-.video-processing, .video-upload-error { font-size: 1.5em; }
-.video-upload-error .error-container { color: rgb(170, 170, 170); margin-top: 1em; }
-#dialog .buttons .upload-terms, #dialog .buttons .upload-terms:hover { color: rgb(85, 85, 85); display: block; font-size: 0.6em; margin-left: 1.5em; text-align: left; background-color: rgb(0, 0, 0); }
-.upload-progress { margin-bottom: 1em; width: 100%; }
-.upload-progress-value { text-align: left; width: 100%; }
-.upload-progress span { margin-left: -1em; position: relative; width: 4em; }
-.upload-progress .upload-progress-bar { width: 100%; background-color: rgb(170, 170, 170); }
-.upload-progress .upload-progress-bar .completed { height: 1em; background-color: rgb(39, 147, 230); }
-.privacy-button { cursor: pointer; position: relative; background: 0.4em 50% / 1.5em no-repeat; }
-.privacy-button .checkbox { height: 2em; left: 85%; position: absolute; top: 0px; width: 2em; background-size: 2em; background-position: 100% 50%; }
-.privacy-button.checked .checkbox { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-check-light.png); }
-.privacy-button.focused.checked .checkbox { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-check-dark.png); }
-.privacy-button .label .name { line-height: 1.5em; text-indent: 1.8em; background-size: 2em; background-position: 0px 0.5em; }
-.privacy-button .description { font-size: 0.6em; line-height: 0.8em; padding-left: 2.9em; }
-.privacy-button .name { font-size: 1em; line-height: 1.2em; padding-left: 1.7em; }
-.private-state, .video-tile .private { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-private-light.png); }
-.private-state.focused { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-private-dark.png); }
-.public-state, .video-tile .public { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-public-light.png); }
-.public-state.focused { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-public-dark.png); }
-.unlisted-state, .video-tile .unlisted { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-unlisted-light.png); }
-.unlisted-state.focused { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-unlisted-dark.png); }
-.video-tile .private, .video-tile .public, .video-tile .unlisted { min-height: 1.5em; min-width: 1.5em; padding-left: 1.5em; background-size: 1.5em; background-position: 0% 50%; background-repeat: no-repeat; }
-.video-privacy .button, .video-overview .button { display: inline-block; height: 2em; line-height: 2em; margin: 0.1em 0px; overflow: hidden; padding: 0.1em 0.5em; vertical-align: top; white-space: nowrap; width: 65%; }
-.video-privacy .button { width: 85%; }
-.video-overview .button:first-child { width: 20%; }
-.video-privacy .button.focused, .video-privacy .button:not(.disabled):hover, .video-overview .button.focused, .video-overview .button:not(.disabled):hover { color: rgb(103, 103, 103); background-color: rgb(255, 255, 255); }
-#dialog.browse-sets .video-privacy .button:nth-child(2) { width: 11em; }
-#dialog.browse-sets .video-uploads { margin: 3em 1em 2em; }
-#dialog.browse-sets .video-uploads .carousel { overflow: hidden; }
-#dialog.browse-sets .video-uploads .carousel .video-tile .details { text-align: left; }
-.video-overview .title-button { line-height: 1em; white-space: normal; }
-#dialog.browse-sets .video-overview .title-button .label { display: inline-block; line-height: 2em; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; width: 95%; }
-.video-overview .channel-button { line-height: 2em; overflow: hidden; text-indent: 1.8em; text-overflow: ellipsis; background-size: 1.5em; background-position: 0.35em 50%; background-repeat: no-repeat; }
-.video-uploads .carousel { height: 20em; position: relative; white-space: nowrap; }
-.video-tile-container { display: inline-block; margin-top: 1.7em; text-align: right; width: 35%; }
-.video-tile-container .video-tile { border: 0.1em solid rgba(255, 255, 255, 0.2); display: inline-block; height: 22em; position: static; text-align: left; width: 20em; }
-.video-tile-container .video-tile .tile-top { height: 51%; }
-.video-tile-container .video-tile .tile-bottom .details { height: inherit; }
-.video-uploads .carousel .video-tile { height: 20em; width: 18em; }
-.video-uploads .video-tile .decoration { top: 7em; }
-.video-tile-container .video-tile .tile-bottom, .video-uploads .video-tile .tile-bottom { width: initial; }
-.dialog.closed-captions #dialog-wrapper { margin-top: 5em; }
-#dialog.closed-captions-language-only #dialog-wrapper { padding: 1.6em 26%; }
-#dialog.closed-captions-language-only #options-list { display: none; }
-#legend.legend-for-dialog-closedCaptionsDialog { bottom: 24%; }
-#dialog.closed-captions-language-only ~ #legend { right: 29%; }
-.simple-dialog { margin: 3em; font-size: 1.6em; }
-.lang-ja_JP .connection-instructions .step1, .lang-ja_JP .connection-instructions .step2, .lang-ko_KR .connection-instructions .step1, .lang-ko_KR .connection-instructions .step2, .lang-zh_CN .connection-instructions .step1, .lang-zh_CN .connection-instructions .step2, .lang-zh_HK .connection-instructions .step1, .lang-zh_HK .connection-instructions .step2, .lang-zh_TW .connection-instructions .step1, .lang-zh_TW .connection-instructions .step2 { font-size: 0.8em; }
-.lang-de_DE .action-tile .content .title, .lang-el_GR .action-tile .content .title, .lang-es_ES .action-tile .content .title, .lang-es_MX .action-tile .content .title, .lang-fr_FR .action-tile .content .title, .lang-fr_CA .action-tile .content .title, .lang-ko_KR .action-tile .content .title, .lang-nl_NL .action-tile .content .title, .lang-pl_PL .action-tile .content .title, .lang-pt_BR .action-tile .content .title, .lang-pt_PT .action-tile .content .title, .lang-ru_RU .action-tile .content .title, .lang-uk_UA .action-tile .content .title { font-size: 2em; }
-.lang-it_IT .action-tile .content .title { font-size: 1.8em; }
-.lang-es_ES .action-tile .improve-yt-tile .title, .lang-fr_CA .action-tile .history-tile .title, .lang-fr_FR .action-tile .history-tile .title, .lang-de_DE .action-tile .terms-tile .title, .lang-fr_CA .action-tile .terms-tile .title, .lang-fr_FR .action-tile .terms-tile .title { font-size: 1.7em; }
-.lang-es_ES .action-tile .videoinfo-tile .title, .lang-es_MX .action-tile .videoinfo-tile .title, .lang-fr_CA .action-tile .videoinfo-tile .title, .lang-fr_FR .action-tile .videoinfo-tile .title, .lang-pt_BR .action-tile .videoinfo-tile .title { font-size: 1.5em; white-space: normal; }
-.lang-de_DE .action-tile .videoinfo-tile .title { font-size: 1.45em; padding-left: 0.5em; padding-right: 0.5em; white-space: normal; }
-.lang-es_ES .action-tile .videoinfo-tile .label, .lang-es_MX .action-tile .videoinfo-tile .label, .lang-fr_CA .action-tile .videoinfo-tile .label, .lang-fr_FR .action-tile .videoinfo-tile .label, .lang-pt_BR .action-tile .videoinfo-tile .label { padding-top: 0.6em; }
-.lang-de_DE .action-tile .videoinfo-tile .label { font-size: 1.6em; padding-top: 0.7em; }
-.lang-ja_JP .action-tile .terms-tile .title { font-size: 2em; }
-.lang-ja_JP #transliteration .list { font-size: 1.2em; }
-.lang-ja_JP #keyboard-grid { font-size: 1.5em; }
-.lang-ja_JP #keyboard-spacebar { margin-left: 5.5em; }
-.lang-zh_CN #search .horizontal-list, .lang-zh_HK #search .horizontal-list, .lang-zh_TW #search .horizontal-list, .lang-ja_JP #search .horizontal-list { transform: translateY(9.5em); }
-.lang-ko_KR #search .horizontal-list { transform: translateY(10.5em); }
-.lang-ko_KR #search-keyboard { font-size: 1.82em; }
-.lang-ko_KR #letter-suggest .button { width: 1em; }
-.lang-ko_KR #keyboard-grid, .lang-ru_RU #keyboard-grid, .lang-uk_UA #keyboard-grid { margin-top: 0.3em; }
-.lang-ko_KR #keyboard-grid.lang-ko .numbers-toggle-tile.button, .lang-ru_RU #keyboard-grid.lang-ru .numbers-toggle-tile.button, .lang-uk_UA #keyboard-grid.lang-ua .numbers-toggle-tile.button { font-size: 0.75em; }
-.lang-ko_KR #keyboard-grid .button, .lang-ru_RU #keyboard-grid .button, .lang-uk_UA #keyboard-grid .button { height: 1.2em; line-height: 1.1em; margin-top: 0.6em; }
-.lang-ko_KR #letter-suggest .button, .lang-ru_RU #letter-suggest .button, .lang-uk_UA #letter-suggest .button { height: 1.2em; line-height: 1.1em; width: 1.2em; }
-.lang-ko_KR .search-state #spinner, .lang-ru_RU .search-state #spinner, .lang-uk_UA .search-state #spinner, .lang-ja_JP .search-state #spinner { top: 25em; }
-.lang-ko_KR .search-state .application-message, .lang-ru_RU .search-state .application-message, .lang-uk_UA .search-state .application-message, .lang-ja_JP .search-state .application-message { top: 55%; }
-.lang-ru_RU #keyboard-grid.lang-ru .button, .lang-uk_UA #keyboard-grid.lang-ua .button, .lang-ko_KR #keyboard-grid, .lang-ko_KR #letter-suggest, .lang-ko_KR #keyboard-spacebar { font-size: 1em; }
-.lang-ru_RU #keyboard-spacebar, .lang-uk_UA #keyboard-spacebar { margin-left: 4.2em; }
-.lang-de_DE .countdown-ad-callout .time-left-label, .lang-de_DE .countdown-ad-callout .skip-time-label { font-size: 1.1em; }
-.lang-cs_CZ .action-tile .description, .lang-de_DE .action-tile .description, .lang-hi_IN .action-tile .description, .lang-pl_PL .action-tile .description, .lang-pt_BR .action-tile .description, .lang-pt_PT .action-tile .description, .lang-ru_RU .action-tile .description, .lang-uk_UA .action-tile .description { font-size: 1.3em; }
-.lang-de_DE .guide-button.footer .guide-button-title { width: 27.81em; }
-.lang-de_DE .guide-user-name { width: 13.5em; }
-.lang-nl_NL .guide-button.disabled .guide-button-title, .lang-de_DE .guide-button.disabled .guide-button-title, .lang-fr_FR .guide-button.disabled .guide-button-title, .lang-pt_PT .guide-button.disabled .guide-button-title { width: 13em; }
-.lang-tr_TR #search #keyboard-grid .button.clear-query-tile, .lang-tr_TR .action-tile .title, .lang-tr_TR .guide-button-icon, .lang-tr_TR #keyboard-grid .button, .lang-tr_TR .tile-top .badge, .lang-tr_TR .tile-top .duration, .lang-tr_TR .title-card .badges span .lang-tr_TR.lang-case-sensitive .player-controls .button span::first-letter, .lang-tr_TR.lang-case-sensitive .player-controls .toggle-button span::first-letter, .lang-tr_TR.lang-case-sensitive .snap-controls .speakable span::first-letter, .lang-tr_TR.lang-case-sensitive .voice-command::first-letter { text-transform: none; }
-.voice-command { display: none; }
-.lang-case-sensitive .voice-command::first-letter { text-transform: uppercase; }
-.engaged .voice-command { color: rgb(93, 194, 30); display: block; font-size: 1em; background-color: rgba(22, 22, 22, 0.701961); }
-.engaged .horizontal-list .carousel .voice-command { display: none; }
-.engaged .horizontal-list.focused .carousel .voice-command { display: block; }
-.engaged .pivot-video-tile .voice-command, .engaged .pivot-channel-tile .voice-command { display: none; }
-.engaged .pivot-video-tile.speakable .voice-command, .engaged .pivot-channel-tile.speakable .voice-command { display: block; }
-.engaged .video-tile .voice-command, .engaged .pivot-video-tile .voice-command, .engaged .pivot-channel-tile .voice-command, .engaged .playlist-tile .voice-command, .engaged .channel-tile .voice-command { bottom: 50%; font-size: 1.5em; margin-top: -2.17em; padding: 0.5em 0.9em; opacity: 0.999; }
-.engaged .video-tile.disabled .voice-command, .engaged .pivot-video-tile.disabled .voice-command, .engaged .pivot-channel-tile.disabled .voice-command { display: none; }
-.engagement-indicator { bottom: 0.8em; display: none; font-size: 1.5em; left: 1.8em; position: absolute; width: 16em; }
-.engaged .engagement-indicator { color: rgb(93, 194, 30); display: block; background-color: transparent; }
-.engagement-indicator .icon { display: inline-block; height: 2em; vertical-align: middle; width: 2em; background: 50% 50% no-repeat; }
-.engagement-indicator .stop-listening { padding: 0.5em; }
-.engagement-indicator .stop-listening .icon { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/icon-aaa-engaged.png); }
-.engagement-indicator .text { text-align: center; }
-.engagement-indicator .title { display: inline-block; font-size: 0.9em; }
-.browse-sets-state.engaged .engagement-indicator, .browse-state.engaged .engagement-indicator, .post-play-state.engaged .engagement-indicator, .post-play-state.engaged .engagement-indicator, .settings-state.engaged .engagement-indicator, .search-state.engaged .engagement-indicator { display: block; }
-.watch-state.engaged .engagement-indicator { display: block; height: 3em; left: 0px; margin-left: auto; margin-right: auto; right: 0px; text-align: center; top: 20%; }
-.watch-focused .engagement-indicator .stop-listening { background-color: rgba(22, 22, 22, 0.701961); }
-.sliding-highlighter .select, .engaged .legend-item, .engaged #dialog .speakable.button, .engaged .context-menu .speakable.button, .engaged .speakable.action-tile .title, .engaged .modify-video .speakable, .engaged .modify-video .speakable.focused { color: rgb(93, 194, 30); }
-.voice-footer { bottom: 0px; color: rgb(93, 194, 30); font-size: 1.5em; height: 3em; padding: 1em 0px 0.6em; position: absolute; text-align: center; width: 100%; background-color: rgba(22, 22, 22, 0.701961); }
-.voice-footer .list { font-size: 0.65em; margin: -1.3em auto auto; padding-top: 1em; width: 29em; }
-.voice-footer .component { display: inline-block; padding-right: 1em; }
-.engaged .voice-footer { color: rgb(93, 194, 30); }
-.engaged .voice-footer li { display: inline; padding: 0px 2%; }
-.engaged .player-controls .button span, .engaged .player-controls .toggle-button span { color: rgb(93, 194, 30); display: block; }
-.engaged .player-controls .button.disabled span, .engaged .player-controls .toggle-button.disabled span { display: none; }
-.engaged #transport-controls.ad-active .player-controls #button-list div.skip-ad-button.canskip .label, .engaged .skip-ad-button.canskip .label { color: rgb(93, 194, 30); }
-.engaged .player-controls-widget { margin-top: 7.4em; }
-.engaged .player-controls .voice-command.transport { top: 1em; }
-.legend { bottom: 5.5%; color: rgb(241, 241, 241); position: absolute; right: 5.5%; text-shadow: rgb(0, 0, 0) 2px 2px 4px; display: none; background: radial-gradient(closest-side, rgba(0, 0, 0, 0.2) 25%, rgba(0, 0, 0, 0.0980392) 60%, rgba(0, 0, 0, 0)); }
-.limited-memory .legend { background: none; }
-.legend-item { cursor: pointer; display: none; margin: 0px 0px 0px 0.5em; }
-.legend-item span { vertical-align: middle; }
-.legend-item .icon { display: block; height: 2.5em; margin: auto; max-width: 100%; text-align: center; width: 2.5em; background-size: 100%; }
-.legend-item.more > .icon.icon-player-more { background-size: 0px; }
-.legend-item.more > .icon::before { font-family: youtube-icons; color: rgb(255, 255, 255); font-size: 1.9em; margin: auto; position: relative; top: 0.2em; }
-.legend-item .title { display: block; font-size: 1.1em; margin-top: 0px; text-align: center; text-transform: none; }
-#legend.back .back, #legend.close-guide .close-guide, #legend.delete .delete, #legend.exit .exit, #legend.guide .guide, #legend.search .search, #legend.space .space, #legend.home .home, #legend.modify .modify, #legend.more .more, .reversed-keys #legend.back .reversed-back { display: inline-block; }
-.reversed-keys #legend.back .back { display: none; }
-.desktop .legend, .game-console .legend, .tv .legend { display: inline-block; }
-.veryvibrant .legend { font-size: 1.2em; }
-.desktop .legend-item .icon { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-desktop.png); }
-.game-console.sony .legend-item .icon { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-bbb.png); }
-.rockandroll #legend .legend-item .icon { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-ccc.png); }
-.skip-ad-callout .icon, .tv .legend-item .icon { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-ddd.png); }
-.veryvibrant .legend-item .icon { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-eee.png); }
-.veryvibrant #user-info-background { transform: translateZ(0px); }
-.veryvibrant #search .horizontal-list { top: 30%; transform: none; }
-.veryvibrant .search-state #spinner { top: 20em; }
-.sellingApples .legend-item .icon { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-ggg.png); }
-.nothingHere .legend-item .icon { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-fff.png); }
-.desktop .legend-item.back .icon, .desktop .legend-item.exit .icon { background-size: 240%; background-position: 0px 47.4%; }
-.desktop .legend-item.search .icon { background-size: 240%; background-position: 0px 100%; }
-.desktop .legend-item.close-guide .icon, .desktop .legend-item.guide .icon, .desktop .legend-item.home .icon, .desktop .legend-item.space .icon { background-size: 240%; background-position: 0px 73.7%; }
-.desktop .skip-ad-callout .icon { width: 6.6em; background-size: 520%; background-position: 31% 67.5%; }
-.game-console.sony .legend-item .icon, .tv .legend-item .icon, .veryvibrant .legend-item .icon { height: 1.5em; position: relative; bottom: 0.5em; width: 1.5em; background-repeat: no-repeat; }
-.game-console.sony .legend-item.more > .icon::before, .tv .legend-item.more > .icon::before, .veryvibrant .legend-item.more > .icon::before { top: initial; }
-.game-console.microsoft .legend-item { margin-left: 1.4em; }
-.game-console.microsoft .legend-item.back .icon, .game-console.microsoft .legend-item.exit .icon, .game-console.microsoft .legend-item.reversed-back .icon { background-position: 0px 27.5%; }
-.game-console.microsoft .legend-item.search .icon, .game-console.microsoft .legend-item.space .icon { background-position: 0px 82%; }
-.game-console.microsoft .legend-item.close-guide .icon, .game-console.microsoft .legend-item.delete .icon, .game-console.microsoft .legend-item.guide .icon, .game-console.microsoft .legend-item.home .icon, .game-console.microsoft .legend-item.modify .icon { background-position: 0px 54.9%; }
-.rockandroll #legend .legend-item.back .icon, .rockandroll #legend .legend-item.exit .icon { background-position: 0px 105%; }
-.game-console.sony .legend-item.back .icon, .game-console.sony .legend-item.exit .icon { background-position: 0px 0%; }
-.game-console.sony .legend-item.reversed-back .icon { background-position: 0px 100%; }
-.game-console.sony .legend-item.search .icon, .game-console.sony .legend-item.space .icon { background-position: 0px 87.5%; }
-.game-console.sony .legend-item.close-guide .icon, .game-console.sony .legend-item.delete .icon, .game-console.sony .legend-item.guide .icon, .game-console.sony .legend-item.home .icon { background-position: 0px 75%; }
-.game-console.sony #dialog .logout-authenticated-info, .game-console.microsoft #dialog .logout-authenticated-info { padding-top: 0px; }
-.game-console.sony .action-tile .platform-container, .game-console.microsoft .action-tile .platform-container { margin: 1em; text-align: center; }
-.game-console.sony .login-user-info .platform-user-name, .game-console.sony .platform-user-name, .game-console.microsoft .login-user-info .platform-user-name, .game-console.microsoft .platform-user-name { vertical-align: middle; }
-.game-console.sony .login-user-info .platform-user-icon, .game-console.sony .platform-user-icon, .game-console.microsoft .platform-user-icon, .game-console.microsoft .login-user-info .platform-user-icon { display: inline-block; height: 3em; vertical-align: middle; width: 3em; background-size: cover; }
-.game-console.sony #dialog .login-user-info .platform-container > div, .game-console.microsoft #dialog .login-user-info .platform-container > div { font-size: 1em; }
-.veryvibrant .advertisement-callout, .veryvibrant .advertisement-info, .veryvibrant #leanback-player-container, .veryvibrant .skip-ad-button, .veryvibrant .title-card, .veryvibrant #watch, .veryvibrant .toaster { }
-.veryvibrant .pivot-shelf-list { opacity: 1; }
-.veryvibrant .legend-item.back .icon, .veryvibrant .legend-item.exit .icon { background-position: 0px 33.3%; }
-.veryvibrant .legend-item.search .icon { background-position: 0px 100%; }
-.veryvibrant .legend-item.close-guide .icon, .veryvibrant .legend-item.delete .icon, .veryvibrant .legend-item.guide .icon, .veryvibrant .legend-item.home .icon { background-position: 0px 66.7%; }
-.veryvibrant .qr-code-wrapper { display: none; }
-.veryvibrant #search .search-pairing { display: none; }
-.veryvibrant #search-suggestions { font-size: 1.6em; height: 1.6em; }
-.veryvibrant .search-state .application-message { top: 35%; }
-.tv .legend-item.guide .icon, .tv .legend-item.close-guide .icon, .tv .skip-ad-callout .icon { background-position: 0px 100%; }
-.lg .legend-item.back, .lg .legend-item.exit { cursor: pointer; }
-.tv .legend-item.back .icon, .tv .legend-item.exit .icon { background-position: 0% 0%; }
-.lg .legend-item.back .icon, .lg .legend-item.exit .icon { opacity: 0.8; }
-.lg .legend-item.back:hover .icon, .lg .legend-item.exit:hover .icon { opacity: 1; }
-body.samsung { background-color: transparent !important; }
-body.lg { background-image: url(tv:) !important; background-color: transparent !important; }
-body.limited-memory { background-color: rgb(17, 17, 17); }
-.limited-memory .bg, .eureka .bg { background-image: none; background-color: rgb(46, 46, 46); }
-.limited-animation .loading-indicator, .opera .loading-indicator, .lg .loading-indicator { display: none; }
-.limited-animation .fallback-loading-indicator, .opera .fallback-loading-indicator, .lg .fallback-loading-indicator { display: block; }
-.limited-animation .video-tile .video-thumb { opacity: 1; }
-.limited-memory .video-tile .video-thumb { background-size: cover; }
-.limited-memory .video-tile .video-thumb.preloaded { background-size: auto; }
-.rockandroll.limited-memory .video-tile .video-thumb { opacity: 1; background-size: 100%; }
-.limited-animation.playlist-tile .count-overlay { background-color: rgb(0, 0, 0); }
-.search .placeholder-tile, .settings .placeholder-tile, .limited-animation .browse-content .list .placeholder-tile { height: 24em; width: 20.75em; }
-.guide .placeholder-tile { width: 100%; height: 2em; }
-.limited-animation .action-tile, .limited-animation .channel-tile, .limited-animation .playlist-tile, .limited-animation .auto-play-tile, .limited-animation .recent-search-tile, .limited-animation .video-tile, .limited-animation .browse-content .list .placeholder-tile, .search .placeholder-tile, .settings .placeholder-tile, .shelf .placeholder-tile { display: inline-block; margin-right: 1.1em; position: relative; vertical-align: top; }
-.limited-animation .shelves { margin-top: 2.5%; }
-.limited-animation .playlist-tile .overlay, .limited-animation .video-tile .overlay, .limited-memory .playlist-tile .overlay, .limited-memory .video-tile .overlay { opacity: 1; }
-.limited-memory .auto-play-tile .video-tile { margin: 0px; }
-.limited-animation .auto-play-tile .post-play-countdown { top: -4em; }
-.limited-animation .hide-background.video-tile .video-thumb { opacity: 1; background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/icon-playbutton.png) !important; background-repeat: no-repeat; }
-.limited-animation .action-tile.focused .content { text-shadow: none; }
-.limited-animation .post-play-countdown { text-shadow: none; }
-.limited-animation #keyboard-grid .button.disabled, .limited-animation #keyboard-grid .button.focused, .limited-animation #letter-suggest .button { background-color: rgb(153, 153, 153); }
-.limited-animation #search #text-box-background, .limited-animation #search #search-text-entry { background-color: rgb(0, 0, 0); }
-.limited-animation #search-keyboard, .limited-animation #letter-suggest { text-shadow: none; }
-.limited-animation #search-keyboard .disabled, .limited-animation #letter-suggest .button { color: rgb(0, 0, 0); text-shadow: none; }
-.limited-animation #letter-suggest .button.focused, .limited-animation #search-keyboard .button.focused { color: rgb(33, 33, 33); background-color: rgb(225, 225, 225); }
-.limited-animation #transliteration .list .button { border-right-color: rgb(241, 241, 241); }
-.limited-animation #transliteration .list .button.focused { background-color: rgb(153, 153, 153); }
-.limited-animation .toaster .toast-container { background-color: rgb(27, 25, 26); }
-.limited-animation .title-card, .limited-memory.limited-animation.sets-ui .title-card { height: 20%; background: rgb(0, 0, 0); }
-.opera .focused, .opera :focus { outline: invert none medium; }
-.eureka #browse-sets, .eureka #dialog .buttons, .eureka .legend, .eureka #transport-controls { display: none; }
-#eureka-player-controls-container { display: none; position: absolute; top: 17em; width: 100%; }
-.eureka #eureka-player-controls-container { display: block; }
-.eureka .loading #eureka-player-controls-container { opacity: 0; }
-#eureka-player-controls { border-radius: 1em; height: 11.5em; margin: 0px auto; overflow: hidden; width: 11.5em; background-size: 100%; }
-.eureka #eureka-player-controls { opacity: 0; }
-@-webkit-keyframes showAndShrinkPause { 
-  0% { transform: scale(1.5); opacity: 0; }
-  100% { opacity: 0.7; }
-}
-@-webkit-keyframes hideAndGrowPlay { 
-  0% { opacity: 0.7; }
-  100% { transform: scale(1.5); opacity: 0; }
-}
-.eureka #watch.play #eureka-player-controls { animation: hideAndGrowPlay 0.25s linear 0s 1 normal none; background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/player-play.png); }
-.eureka #watch.pause #eureka-player-controls { animation: showAndShrinkPause 0.25s linear 0s 1 normal none; opacity: 0.7; background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/player-pause.png); }
-.sellingApples .action-tile, .sellingApples .legend-item.back, .sellingApples .legend-item.delete, .sellingApples .legend-item.exit, .sellingApples .legend-item.home, .sellingApples .legend-item.modify, .sellingApples .legend-item.reversed-back, .sellingApples .legend-item.search, .sellingApples .player-controls div, .sellingApples .auto-play-tile, .sellingApples .video-stream, .sellingApples .video-tile, .sellingApples #browse-search-bar, .sellingApples #guide.focused .guide-button, .sellingApples #player-controls .item, .sellingApples #snap-buttons > div { }
-.sellingApples #browse-sets { }
-.sellingApples #guide.focused .carousel { }
-.sellingApples .settings-shelf { }
-.sellingApples #transliteration .button:hover, .sellingApples #keyboard-grid .button:hover { cursor: default; background: none; }
-.search-hint { display: none; }
-.sellingApples .search-hint, .nothingHere .search-hint { color: rgb(107, 107, 107); display: block; font-size: 1.4em; line-height: 2em; }
-.context-menu-defocuser { height: 100%; left: 0px; position: absolute; top: 0px; width: 100%; background-color: rgba(0, 0, 0, 0.498039); }
-.context-menu-list { height: initial; left: 50%; padding-top: 2.5em; position: relative; top: 50%; transform: translate(-50%, -50%); width: 30%; background-color: rgb(0, 0, 0); }
-.context-menu-list .button { border-color: rgb(0, 0, 0); border-style: solid; border-width: 0.5em 1em; color: rgb(225, 225, 225); cursor: pointer; font-family: roboto-regular; font-size: 1.5em; height: auto; line-height: 2.5em; margin: 0px; text-align: left; text-indent: 1em; transition-duration: 200ms; transition-property: background-color, color; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); }
-.context-menu-list .button::before { font-family: youtube-icons; padding-right: 1em; }
-.context-menu-list .button.icon-platform-switch-users { border-style: solid; border-color: rgb(31, 31, 31); border-width: 2em 1em; height: initial; line-height: initial; margin-top: 1em; padding: 0.5em 0px 0.5em 3em; text-indent: 0px; background: url(www.youtube.com/s/tv/html5/f0d770f4/app-prod.css) 0.5em 50% / 2em 2em no-repeat rgb(31, 31, 31); }
-.context-menu-list .button.focused { color: rgb(0, 0, 0); background-color: rgb(225, 225, 225); }
-.call-to-cast { display: none; }
-.call-to-cast.focused { bottom: 0px; display: block; left: 0px; position: absolute; right: 0px; top: 0px; }
-.call-to-cast-text { color: rgb(241, 241, 241); font-weight: normal; text-shadow: rgb(0, 0, 0) 0.06em 0.06em; width: 38%; }
-h2.call-to-cast-text { font-size: 3.2em; margin-bottom: 0.3em; margin-top: 0px; padding-top: 1.5em; }
-h3.call-to-cast-text { font-size: 1.7em; }
-.call-to-cast .end-screen { display: none; height: 100%; background-size: cover; background-position: 50% 50%; background-repeat: no-repeat; }
-.call-to-cast .end-screen.active { display: block; }
-.call-to-cast .end-screen .call-to-cast-text { color: rgb(255, 255, 255); width: 40%; }
-.call-to-cast .end-screen .call-to-cast-text em { color: rgb(0, 144, 255); font-style: normal; }
-.call-to-cast .end-screen h2.call-to-cast-text { margin-bottom: 0.5em; padding-top: 2em; }
-.call-to-cast .end-screen h3.call-to-cast-text { line-height: 1.5em; }
-.call-to-cast .end-screen.left .call-to-cast-text { margin-left: 5%; }
-.call-to-cast .end-screen.right .call-to-cast-text { margin-left: 50%; }
-.call-to-cast .end-screen .yt-logo, .call-to-cast .end-screen .yt-kids-logo { bottom: 8%; height: 13.88%; position: fixed; width: 100%; background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-yt-logo.png); background-size: contain; background-repeat: no-repeat; }
-.call-to-cast .end-screen.left .yt-logo, .call-to-cast .end-screen.left .yt-kids-logo { left: 4%; background-position: 0% 50%; }
-.call-to-cast .end-screen.right .yt-logo, .call-to-cast .end-screen.right .yt-kids-logo { right: 4%; background-position: 100% 50%; }
-.call-to-cast .end-screen .yt-kids-logo { height: 20%; background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/yt-kids-logo.png); }
-.call-to-cast .end-screen.multi-user { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-multi-user.jpg); }
-.call-to-cast .end-screen.yt-mix { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-yt-mix.jpg); }
-.call-to-cast .end-screen.tv-queue { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-tv-queue.jpg); }
-.call-to-cast .end-screen.kids-promo { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-promo.jpg); }
-.call-to-cast .end-screen.kids-mother-goose { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-mother-goose.jpg); }
-.call-to-cast .end-screen.kids-rainbow { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-rainbow.jpg); }
-.call-to-cast .end-screen.kids-sesame { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-sesame.jpg); }
-.call-to-cast .end-screen.kids-talking-tom { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-talking-tom.jpg); }
-.call-to-cast .end-screen.kids-wonderquest { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-wonderquest.jpg); }
-.call-to-cast .THEME-cl.end-screen.kids-promo h2.call-to-cast-text { width: 80%; }
-.call-to-cast .THEME-k.end-screen h3.call-to-cast-text { font-size: 3em; line-height: 1.4em; margin-top: 0px; padding-top: 10%; padding-left: 5%; width: 45%; }
-.call-to-cast .end-screen.gaming-heart { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-gaming-heart.jpg); }
-.call-to-cast .THEME-g.end-screen h3.call-to-cast-text { font-size: 2.2em; padding-top: 0%; width: 100%; }
-.call-to-cast .end-screen.loki { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-loki.jpg); }
-.call-to-cast .THEME-up.end-screen h3.call-to-cast-text { font-size: 2.2em; margin-left: 0%; padding-top: 17em; text-align: center; width: 100%; }
-.call-to-cast .THEME-m.end-screen h2.call-to-cast-text { font-size: 2.2em; margin-bottom: 0px; text-align: center; width: 100%; }
-.call-to-cast .THEME-m.end-screen h3.call-to-cast-text { margin-top: 0px; text-align: center; width: 100%; }
-.call-to-cast .THEME-m.end-screen.music-ready { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-music.jpg); }
-.call-to-cast .THEME-m.end-screen.music-ready .call-to-cast-logo { height: 60%; background: url(www.youtube.com/s/tv/html5/f0d770f4/img/yt-music-logo.png) 50% 100% no-repeat; }
-.call-to-cast .THEME-m.end-screen.music-ready h2.call-to-cast-text { padding-top: 10%; }
-.call-to-cast .THEME-m.end-screen.music-party { height: 100%; background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-music.jpg); }
-.call-to-cast .THEME-m.end-screen.music-party .call-to-cast-logo { height: 55%; background: url(www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-music-party-logo.png) 50% 100% no-repeat; }
-.call-to-cast .THEME-m.end-screen.music-party .footer { height: 10%; background: url(www.youtube.com/s/tv/html5/f0d770f4/img/yt-music-logo-small.png) 50% 0% no-repeat; }
-.snap-controls { height: 90%; padding: 0.5em; position: relative; }
-.snapped.blurred #snap-buttons, .snapped.blurred #unsupported-mode, .snapped.blurred #ad-callout, .snapped.blurred .logo-container, .snapped.blurred .title-card, .snapped.blurred .up-next { opacity: 0.25 !important; }
-.snapped #dialog, .snapped #guide, .snapped #search, .snapped #settings, .snapped #title-tray, .snapped #transport-controls, .snapped .ad-showing .video-ads, .snapped .advertisement-info, .snapped .application-message, .snapped .browse, .snapped .browse-sets, .snapped .caption-window, .snapped .countdown-ad-callout, .snapped .html5-video-info-panel, .snapped .legend, .snapped .player-video-avatar, .snapped .quality-status, .snapped .skip-ad-button, .snapped .skip-ad-callout, .snapped .toaster, .snapped.blurred.browse-sets-state .title-card, .snapped.blurred.search-state .title-card, .snapped.blurred.settings-state .title-card, .snapped.dialog-focused #snap-progress-bar, .snapped.dialog-focused #watch { display: none !important; }
-.snapped .advertisement-tooltip { color: rgb(160, 160, 160); font-size: 0.4em; left: 0px; top: 0px; }
-.snapped .advertisement-tooltip .remaining_duration { color: rgb(113, 113, 113); }
-.snapped #ad-callout { left: 5%; top: 18%; }
-.snapped .debug-watermark { font-size: 0.2em; width: 100%; }
-#app-markup.snapped { background-color: rgb(35, 31, 32); }
-.snapped #background { display: none; }
-.snapped { font-size: 2em; }
-.snapped.watch-state .logo-container { opacity: inherit; }
-.snapped .icon-youtube-logo::before { content: ""; }
-.snap-controls .logo-container { display: inherit; height: 2.5em; left: 0px; position: absolute; right: 0px; top: 5%; background: url(www.youtube.com/s/tv/html5/f0d770f4/img/yt-logo-fullcolor.png) 50% 0% no-repeat; }
-.snapped .ad-video, .snapped .ad-created .video-stream { height: 270px !important; width: 480px !important; }
-.snapped .video-stream, .snapped .html5-video-content { max-height: 5.6em; transform: scale(0.9) !important; top: 4.4em !important; }
-.snapped .html5-video-controls { top: 9.8em !important; }
-.snapped .player-video-title { color: rgb(160, 160, 160); font-size: 0.7em; line-height: 1.1em; margin: 0px; max-height: 2.2em; white-space: normal; width: 12em; }
-.snapped .player-meta { left: 0px; margin: 0px; position: inherit; top: 0px; }
-.snapped .player-meta .player-video-text { padding-left: 0px; }
-.snapped .player-meta .player-video-details { color: rgb(113, 113, 113); font-size: 0.5em; line-height: 1.1em; }
-.snapped .player-meta .player-video-details > div { margin-left: 0px; }
-.snapped .player-video-details .uploaded-date, .snapped .player-video-details .set-context, .snapped .player-video-details .view-count { font-size: 0.9em; margin-top: 0px; }
-.watch-state.snapped #snap-progress-bar { display: block; }
-#snap-progress-bar { display: none; height: 0.1em; left: 0px; margin-top: 9.25em; padding: 0px; position: relative; top: 0px; width: 100%; background-position: 0% 0%; }
-#snap-progress-bar .progress-bar-disc, #snap-progress-bar .progress-bar-playhead { display: none; }
-#snap-progress-bar div { height: 5px; top: 0px; }
-.snapped .title-card { border: none; height: initial; padding-top: 0.3em; position: inherit; background: none; }
-#unsupported-mode { color: rgb(255, 255, 255); font-size: 0.9em; line-height: 1.2em; padding: 80% 1em 0px; width: 8em; }
-.snapped .loading-indicator { height: 5em; width: 5em; }
-.snapped #spinner { top: 19%; transform: scale(0.5); }
-.engaged.snapped .engagement-indicator { display: inline-block; left: 0px; margin-left: auto; margin-right: auto; position: absolute; right: 0px; text-align: center; font-size: 0.6em !important; top: 4.2em !important; }
-.engaged.snapped .engagement-indicator .stop-listening { background: transparent; }
-.snap-controls #snap-buttons { bottom: 0px; position: absolute; }
-.snap-controls #snap-buttons .focused, .snap-controls #snap-buttons :hover { border-radius: 0.15em; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); }
-.snap-controls #snap-buttons .button, .snap-controls #snap-buttons .toggle-button { display: inline-block; font-size: 0.8em; height: 1em; margin-left: 0.5em; padding: 1em; position: relative; text-align: center; top: 0px; width: 1em; }
-.snap-controls #snap-buttons div { color: rgb(255, 255, 255); cursor: pointer; vertical-align: middle; }
-.snap-controls #snap-buttons div.disabled:hover { color: rgb(255, 255, 255); background-color: transparent; }
-.snap-controls #snap-buttons div.focused { opacity: 1; }
-.snap-controls #snap-buttons div.disabled { opacity: 0.2; }
-.snap-controls .speakable span, .snap-controls .disabled span { display: none; }
-.engaged .snap-controls .speakable:not(.disabled) span { color: rgb(93, 194, 30); display: block; font-size: 0.6em; left: 0px; overflow: hidden; pointer-events: none; position: absolute; text-align: center; top: -1.5em; width: 100%; word-break: break-all; }
-.lang-case-sensitive .snap-controls .speakable span::first-letter { text-transform: uppercase; }
-.snap-controls .icon-player-play { font-family: youtube-icons; }
-.snap-controls .icon-mute, .snap-controls .icon-fullscreen { background-size: 3em; background-position: 50% 50%; background-repeat: no-repeat; }
-.snap-controls .icon-mute, .snap-controls .icon-mute.disabled { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/button-unmute-active.png); }
-.snap-controls .icon-mute.focused, .snap-controls .icon-mute:hover:not(.disabled) { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/button-unmute-onhover-active.png); }
-.snap-controls .icon-mute.toggle-selected { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/button-mute-active.png); }
-.snap-controls .icon-mute.toggle-selected.focused, .snap-controls .icon-mute.toggle-selected:hover { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/button-mute-onhover-active.png); }
-.snap-controls .icon-fullscreen { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/button-fullscreen-active.png); }
-.snap-controls .icon-fullscreen.focused, .snap-controls .icon-fullscreen:hover { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/button-fullscreen-onhover-active.png); }
-.up-next { height: 3em; padding-top: 1em; }
-.up-next div { color: rgb(160, 160, 160); font-size: 0.6em; }
-.up-next .video-title { height: 1.2em; line-height: 1.2em; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; width: 100%; }
-.up-next .video-thumb { display: inline-block; height: 100%; margin-top: 0.2em; max-height: 2.5em; vertical-align: top; width: 5em; background: 50% 50% / 100% no-repeat; }
-#browse-sets { height: 100%; left: 0px; overflow: hidden; position: absolute; right: 0px; background-color: rgb(34, 34, 34); }
-#browse-sets.no-background, .limited-memory #browse-sets { background-color: rgba(0, 0, 0, 0); }
-#browse-search-bar { cursor: pointer; height: 3em; left: 8em; margin-right: 18em; position: absolute; right: 2.5em; top: 2.5em; background-color: rgba(153, 153, 153, 0.2); }
-.limited-animation #browse-search-bar { background-color: rgb(79, 87, 90); }
-#browse-search-bar.focused, #browse-search-bar:hover { background: rgb(255, 255, 255); }
-#browse-search-bar .icon { color: rgba(255, 255, 255, 0.4); display: block; font-family: youtube-icons; font-size: 1.8em; margin: 0px; padding: 0.35em 0px 0px 0.5em; text-align: left; }
-.limited-animation #browse-search-bar .icon { color: rgb(225, 225, 225); }
-.youtube-logo-top { height: 3.4em; position: absolute; right: 9.5em; top: 2.3em; width: 8.4em; font-family: youtube-icons; }
-#browse-sets.has-header-content .youtube-logo-top { display: none; }
-.youtube-logo::before { color: rgba(153, 153, 153, 0.498039); display: block; font-size: 3.4em; }
-.youtube-unlimited-logo::before { color: rgba(153, 153, 153, 0.498039); display: none; font-size: 3.4em; position: relative; right: 0.5em; }
-.unlimited .youtube-logo::before { display: none; }
-.unlimited .youtube-unlimited-logo::before { display: block; }
-.limited-animation .youtube-unlimited-logo::before, .limited-animation .youtube-logo::before { color: rgb(79, 87, 90); }
-#browse-search-bar.focused .icon, #browse-search-bar:hover .icon { color: rgb(68, 68, 68); }
-#platform-user-icon { height: 4em; position: absolute; right: 3em; top: 2em; width: 4em; background-size: contain; background-position: 50% 50%; background-repeat: no-repeat; }
-#browse-header { height: 60%; position: relative; background-size: cover; background-position: 0px -8em; }
-.limited-memory.limited-animation #browse-header { background-size: contain; background-position: 6em 0px; background-repeat: no-repeat; }
-.no-background #browse-header { background-image: none !important; }
-.browse-sets #browse-header.collapsed { transform: translateY(-27%); }
-.limited-memory .browse-sets #browse-header.collapsed { top: -7em; transform: none; }
-#browse-header .title { color: rgb(225, 225, 225); display: inline-block; font-size: 2.25em; margin-bottom: -0.23em; overflow: hidden; text-overflow: ellipsis; transform-origin: left 50% 0px; white-space: nowrap; width: 23.7em; }
-#browse-header.one-button .title { width: 18.7em; }
-#browse-header.two-buttons .title { width: 14em; }
-#browse-header.collapsed .title { overflow: visible; transform: scale(0.8, 0.8) translateY(-5em) translateX(-1.5em); }
-.browse-header-gradient { height: 100%; width: 100%; background: linear-gradient(rgba(34, 34, 34, 0) 0%, rgba(34, 34, 34, 0) 15%, rgb(34, 34, 34) 100%); }
-.limited-memory .browse-header-gradient { display: none; }
-.no-background .browse-header-gradient { visibility: hidden; }
-.browse-header-metadata { left: 8em; position: absolute; transform: translateZ(0px); }
-.limited-memory.limited-animation .browse-header-metadata { top: 11.6em; }
-.limited-memory.limited-animation #browse-header.collapsed .browse-header-metadata { font-size: inherit; left: 8em; top: 11em; }
-.limited-memory.limited-animation #browse-header.collapsed .browse-header-metadata .browse-header-avatar { height: 4em; margin-right: 1em; width: 4em; }
-.browse-header-avatar { display: inline-block; height: 5em; margin-right: 1.3em; transform-origin: left 50% 0px; width: 5em; background-size: contain; }
-#browse-header.collapsed .browse-header-avatar { transform: scale(0.61, 0.61) translateY(-13.5em); }
-#browse-header.collapsed .browse-header-button-bar { transform: translateY(-6.25em); opacity: 0; }
-.browse-header-button-bar { border-radius: 0.15em; font-size: 1.1em; height: 2.4em; margin-bottom: -0.59em; padding: 0.59em; position: absolute; right: 3.5em; background: rgba(0, 0, 0, 0.4); }
-.limited-animation .browse-header-button-bar { background: rgb(31, 36, 38); }
-.limited-memory.limited-animation .browse-header-button-bar { top: 13em; }
-.browse-header-button-bar, .browse-header-metadata { bottom: 3.9em; }
-.browse-header-button-bar .button { border-radius: 0.12em; color: rgb(225, 225, 225); cursor: default; display: inline-block; height: 2.4em; min-width: 8.2em; overflow: hidden; padding-right: 1em; white-space: nowrap; }
-.browse-header-button-bar .button span { line-height: 2.4em; vertical-align: middle; }
-.browse-header-button-bar .button.focused, .browse-header-button-bar .button.focused:hover { color: rgb(33, 33, 33); background: rgb(225, 225, 225); }
-.browse-header-button-bar .button:hover { background-color: rgb(102, 102, 102); }
-.browse-header-button-bar .button .icon { display: inline-block; font-family: youtube-icons; height: 2.4em; margin: 0px 1em; }
-.browse-header-subscribe .icon::before { font-size: 2em; }
-.browse-header-subscribe.toggle-selected .icon::before { content: ""; font-size: 1em; }
-.browse-header-subscribe.toggle-selected.focused { color: rgb(206, 41, 45); }
-.browse-header-subscribe.disabled { background-color: rgba(0, 0, 0, 0); }
-.browse-content { height: 80%; left: 8em; position: absolute; top: 14.5%; width: 100%; }
-.browse-sets.collapsed .browse-content { transform: translateY(44%); }
-.limited-memory .browse-sets.collapsed .browse-content { top: 20em; transform: none; }
-#browse-header, .browse-header-avatar, .browse-header-button-bar, .browse-content, #browse-header .title { transform: translateZ(0px); transition: -webkit-transform 0.25s; }
-.browse-header-button-bar { transition: opacity 0.25s, transform 0.25s; }
-.limited-animation #browse-header, .limited-animation .browse-header-avatar, .limited-animation #browse-header.collapsed .browse-header-avatar, .limited-animation .browse-content, .limited-animation .browse-header-button-bar, .limited-animation #browse-header .title, .limited-animation .browse-content .shelves, .limited-animation .browse-header-metadata, .limited-animation .shelf #content-container, .limited-animation .shelves > .title, .limited-animation .shelf > .title, .limited-animation .horizontal-list > .content, .limited-animation .horizontal-list, .limited-animation .shelves .carousel { transition: none; transform: none; }
-.limited-animation #browse-header.collapsed .browse-header-metadata { font-size: 0.6em; left: 13.25em; top: 17.75em; }
-.limited-animation #browse-header.collapsed .browse-header-metadata .title { font-size: 3em; }
-.limited-memory #browse-header.collapsed .browse-header-metadata .title { font-size: 1.8em; }
-.limited-animation .browse-content .list { margin-left: -9.5em; width: 126em; }
-.limited-animation .browse-content .shelf > .title { margin-left: 6em; }
-.limited-animation.sets-ui .action-tile:not(.focused), .limited-animation.sets-ui .auto-play-tile:not(.focused) .video-tile, .limited-animation.sets-ui .channel-tile:not(.focused), .limited-animation.sets-ui .playlist-tile:not(.focused), .limited-animation.sets-ui .recent-search-tile:not(.focused), .limited-animation.sets-ui .video-tile:not(.focused), .rockandroll.limited-animation.sets-ui .action-tile:hover:not(.focused), .rockandroll.limited-animation.sets-ui .auto-play-tile:hover:not(.focused) .video-tile, .rockandroll.limited-animation.sets-ui .channel-tile:hover:not(.focused), .rockandroll.limited-animation.sets-ui .playlist-tile:hover:not(.focused), .rockandroll.limited-animation.sets-ui .video-tile:hover:not(.focused) { background-color: rgb(33, 33, 33); }
-.limited-animation.sets-ui .action-tile:hover:not(.focused), .limited-animation.sets-ui .auto-play-tile:hover:not(.focused) .video-tile, .limited-animation.sets-ui .channel-tile:hover:not(.focused), .limited-animation.sets-ui .playlist-tile:hover:not(.focused), .limited-animation.sets-ui .recent-search-tile:hover:not(.focused), .limited-animation.sets-ui .video-tile:hover:not(.focused) { background-color: rgb(65, 65, 65); }
-.browse-content .shelves { margin-left: 0em; transform: translateZ(0px); }
-.browse-content .shelves > .no-content-message, .browse-content .horizontal-list > .no-content-message { margin-left: -8em; }
-.shelves > .no-content-message, .horizontal-list > .no-content-message { display: none; position: absolute; top: 8em; width: 100%; }
-.shelves.no-content > .no-content-message, .horizontal-list.no-content > .no-content-message { display: block; }
-.shelves > .no-content-message .text, .horizontal-list > .no-content-message .text { color: rgb(241, 241, 241); font-size: 1.8em; text-align: center; text-shadow: rgb(0, 0, 0) 0.04em 0.04em; }
-.shelf { width: 100%; }
-.limited-animation .shelf { margin-bottom: 1.8em; }
-.carousel .shelf { position: absolute; }
-.shelf #content-container { transform: translateZ(0px); }
-.shelves > .title, .shelf > .title { color: rgb(153, 153, 153); font-size: 1.6em; margin-bottom: 1em; margin-top: 0.2em; transform: translateZ(0px); white-space: nowrap; }
-.shelves > .title, .shelf.selected > .title { color: rgb(255, 255, 255); }
-.shelf > .title .annotation { color: rgb(119, 119, 119); font-size: 70%; margin-left: 0.5em; }
-.shelf.selected > .title .annotation { color: rgb(221, 221, 221); }
-.horizontal-list.no-model, .shelf.no-model, .survey-shelf.no-model { display: none; }
-.shelf > .icon { display: none; }
-.horizontal-list > .content { font-size: 79%; height: 26em; opacity: 1; transform: translateZ(0px); }
-.horizontal-list.focused > .content { opacity: 1; }
-.horizontal-list, .shelves .carousel, .browse-header-metadata { transform: translateZ(0px); }
-.shelf0to0 { opacity: 1; transform: translateY(0%) scale(1); }
-@-webkit-keyframes shelf0to1-anim { 
-  0% { transform: translateY(0%); }
-  100% { transform: translateY(100%); }
-}
-.shelf0to1 { animation: shelf0to1-anim 200ms forwards; }
-@-webkit-keyframes shelf0to2-anim { 
-  0% { opacity: 1; transform: translateX(0%) translateY(0%) scale(1); }
-  100% { opacity: 0; transform: translateX(-2%) translateY(-11%) scale(0.75); }
-}
-.shelf0to2 { animation: shelf0to2-anim 200ms forwards; }
-@-webkit-keyframes shelf1to0-anim { 
-  0% { transform: translateX(0%) translateY(100%); }
-  100% { transform: translateX(0%) translateY(0%); }
-}
-.shelf1to0 { animation: shelf1to0-anim 200ms forwards; }
-.shelf1to1 { opacity: 1; transform: translateX(0%) translateY(100%) scale(1); }
-@-webkit-keyframes shelf1to2-anim { 
-  0% { transform: translateX(0%) translateY(100%); }
-  99% { transform: translateX(0%) translateY(200%); }
-  100% { opacity: 0; transform: translateX(-2%) translateY(-11%) scale(0.75); }
-}
-.shelf1to2 { animation: shelf1to2-anim 200ms forwards; }
-@-webkit-keyframes shelf2to0-anim { 
-  0% { opacity: 0; transform: translateX(-2%) translateY(-11%) scale(0.75); }
-  100% { opacity: 1; transform: translateX(0%) translateY(0%) scale(1); }
-}
-.shelf2to0 { animation: shelf2to0-anim 200ms forwards; }
-@-webkit-keyframes shelf2to1-anim { 
-  0% { opacity: 1; transform: translateX(0%) translateY(200%); }
-  100% { opacity: 1; transform: translateX(0%) translateY(100%); }
-}
-.shelf2to1 { animation: shelf2to1-anim 200ms forwards; }
-.shelf2to2 { opacity: 0; transform: translateX(-2%) translateY(-11%) scale(0.75); }
-.limited-memory .shelves .list .video-tile:nth-child(1) .video-thumb, .limited-memory .shelves .list .channel-tile:nth-child(1) .video-thumb, .limited-memory.sets-ui #search .horizontal-list .list .video-tile:nth-child(1) .video-thumb, .limited-memory.sets-ui #search .horizontal-list .list .channel-tile:nth-child(1) .video-thumb, .limited-memory.sets-ui #browse .list .video-tile:nth-child(1) .video-thumb, .limited-memory.sets-ui #browse .list .channel-tile:nth-child(1) .video-thumb, .limited-memory.sets-ui #browse .list .video-tile:last-child .video-thumb, .limited-memory.sets-ui #browse .list .channel-tile:last-child .video-thumb { background: none !important; }
-.survey-shelf { position: absolute; }
-.survey-shelf > .title { color: rgb(255, 255, 255); display: inline-block; font-size: 1.6em; margin-bottom: 1em; margin-top: 0.2em; }
-.survey-shelf .action-tile .content > .title { display: none; }
-.survey-shelf .horizontal-list > .content { font-size: 79%; height: 26em; }
-.survey-shelf .description { color: rgb(255, 255, 255); visibility: visible; }
-.survey-shelf .button { display: inline-block; margin-bottom: 1em; margin-left: 2em; }
-.survey-shelf .sliding-highlighter { height: 8em; width: 8em; }
-.survey-shelf .action-tile, .exp-densityBrowse .survey-shelf .action-tile { border: 0px; height: 8em; width: 8em; }
-.survey-shelf .action-tile .content { height: 8em; width: 8em; }
-.survey-shelf .action-tile .description { color: rgb(119, 119, 119); font-size: 1.2em; margin-top: -1.3em; opacity: 1; white-space: nowrap; }
-.exp-densityBrowse .survey-shelf.focused .action-tile .description { display: block; }
-.exp-densityBrowse .survey-shelf .action-tile .description { display: none; }
-.survey-shelf .action-tile .large-action-icon, .exp-densityBrowse .survey-shelf .action-tile .large-action-icon { font-size: 5em; margin-top: 0.26em; padding-right: 0.2em; background-color: transparent; }
-.survey-shelf .action-tile.selected .large-action-icon, .exp-densityBrowse .survey-shelf .action-tile.selected .large-action-icon { color: rgb(255, 255, 255); }
-.survey-shelf .action-tile.focused .large-action-icon, .exp-densityBrowse .survey-shelf .action-tile.focused .large-action-icon { color: rgb(34, 34, 34); }
-.survey-shelf .button.focused { border-radius: 0.1em; color: rgb(34, 34, 34); padding: 0.2em; background-color: rgb(255, 255, 255); }
-.survey-shelf .button { color: rgb(119, 119, 119); }
-.limited-animation .survey-shelf { margin-bottom: 5em; position: relative; }
-.limited-animation .survey-shelf > .title { margin-left: 6em; }
-.limited-animation .exp-densityBrowse .survey-shelf > .title { margin-left: 5em; }
-.limited-animation .survey-shelf .horizontal-list { margin-left: 17.5em; }
-.limited-animation .exp-densityBrowse .survey-shelf .horizontal-list { margin-left: 13.5em; }
-.limited-animation .exp-densityBrowse .survey-shelf .action-tile .large-action-icon { margin-top: 0.12em; }
-.limited-animation .exp-densityBrowse .survey-shelf .action-tile .description { display: block; }
-#guide { box-shadow: black 0.1em 0px 1em 0em; height: 100%; left: 0px; overflow: hidden; position: absolute; transform: translateX(-23em) translateZ(0px); transition: transform 400ms cubic-bezier(0.4, 0, 0.2, 1); width: 28em; }
-.limited-memory.limited-animation #guide { box-shadow: none; transform: none; }
-.limited-memory #guide.focused { border-right-style: none; }
-#guide.focused { transform: translateX(0px); }
-#guide:hover { background-color: rgba(255, 255, 255, 0.2); }
-.limited-animation #guide:hover { background: none; }
-.limited-animation #guide, .limited-animation #guide #user-info-background, .limited-animation .guide-carousel-background { transition: none; }
-.guide-carousel-background { height: 100%; left: 0em; position: absolute; top: 0em; width: 100%; transition: background-color 400ms; background-color: rgba(0, 0, 0, 0.2); }
-.limited-animation .guide-carousel-background, .limited-animation #guide #user-info-background { background-color: rgb(31, 36, 38); }
-.limited-animation #guide:hover .guide-carousel-background, .limited-animation #guide:hover #user-info-background { background-color: rgb(56, 65, 69); }
-.limited-animation.limited-memory .guide-carousel-background, .limited-animation.limited-memory #guide #user-info-background { background-color: rgb(223, 35, 35); }
-.limited-memory .guide-carousel-background, .limited-memory #guide #user-info-background, #guide .list { display: none; }
-.limited-memory #guide.focused .guide-carousel-background, .limited-memory #guide.focused.logged-in #user-info-background, #guide.focused .list { display: block; }
-.logged-in .guide-carousel-background { top: 8.5em; }
-#guide.focused .guide-carousel-background, #guide.focused:hover .guide-carousel-background { background-color: rgb(223, 35, 35); }
-.collapsed-guide, #guide.focused .collapsed-guide { display: none; }
-.collapsed-guide-icons { color: rgb(133, 136, 138); font-size: 1.6em; left: 15em; opacity: 1; position: absolute; top: 7.5em; }
-.collapsed-guide-icon { font-family: youtube-icons; margin-top: 1em; margin-bottom: 1em; text-align: center; width: 2em; }
-#guide .collapsed-guide-icons { transition: opacity 150ms 450ms; }
-.limited-memory .collapsed-guide-icons { left: 1em; }
-.limited-animation #guide .collapsed-guide-icons { transition: none; }
-#guide.focused .collapsed-guide-icons { opacity: 0; transition: none; }
-#guide .collapsed-guide-icon.icon-guide-my-subs { display: none; }
-#guide.logged-in .collapsed-guide-icon.icon-guide-my-subs { display: block; }
-#guide.logged-in .collapsed-guide-icon.icon-popular { display: none; }
-.collapsed-guide-icon.icon-music { font-size: 0.925em; padding-left: 0.0375em; }
-.limited-memory .collapsed-guide { border-right-width: 0.2em; border-right-style: solid; border-right-color: rgb(17, 17, 17); display: block; height: 100%; left: 0px; width: 6em; background-color: rgb(31, 36, 38); }
-#error-message { display: none; }
-#guide.error.focused #error-message { color: rgb(255, 255, 255); display: block; font-size: 2em; padding: 2em; position: absolute; text-align: center; top: 12em; }
-#guide .sliding-highlighter { display: none; width: 100%; height: 4.2em; opacity: 0; }
-#guide.focused .sliding-highlighter { opacity: 1; }
-#guide.focused .sliding-highlighter { display: block; }
-#guide.focused #user-info-background { visibility: visible; }
-#guide #user-info-background { transition: background-color 400ms; background-color: rgba(0, 0, 0, 0.2); }
-#guide.focused #user-info-background, #guide.focused:hover #user-info-background { background-color: rgb(147, 23, 23); }
-.logged-in #user-info-background { display: block; }
-#guide.focused .guide-user-text { visibility: visible; }
-#guide .carousel, #guide .list, #guide .sliding-highlighter { color: rgb(255, 255, 255); margin-top: 2em; }
-#guide.logged-in .carousel, #guide.logged-in .list, #guide.logged-in .sliding-highlighter { margin-top: 1em; }
-#guide .carousel.hidden { visibility: hidden; display: block !important; }
-#guide .list { position: relative; }
-.carousel .guide-button { position: absolute; }
-.list .guide-button { margin-bottom: 0.1em; }
-.guide-button { font-size: 1.6em; height: 1.83em; overflow: hidden; padding: 0.5em 0.27em 0.3em 2.9em; white-space: nowrap; }
-.guide-button:hover { cursor: pointer; padding-right: 1.78em; background: rgb(153, 0, 0); }
-.guide-button.selected:hover { background: transparent; }
-.guide-button.disabled:hover { cursor: inherit; padding-right: inherit; background: transparent; }
-.guide-button.disabled { padding-left: 2.1em; text-transform: uppercase; }
-.guide-button.disabled.footer { text-transform: none; }
-.guide-button-icon { color: rgb(239, 145, 145); display: inline-block; font-family: youtube-icons; font-size: 1.2em; margin-top: 0.2em; text-align: center; width: 1.8em; }
-.guide-button.disabled .guide-button-icon { display: none; }
-.guide-user-text, .guide-button-title { color: rgb(251, 218, 218); display: inline-block; line-height: 1.7em; overflow: hidden; padding-left: 0.5em; text-overflow: ellipsis; vertical-align: top; }
-.guide-button.disabled .guide-button-title { color: rgb(239, 145, 145); }
-.guide-user-text { visibility: hidden; margin-left: -0.4em; position: relative; top: 30%; text-overflow: ellipsis; width: 9.5em; }
-.guide-button-title { width: 11em; }
-.engaged .guide-button-title { width: 8em; }
-.guide-button.footer .guide-button-title { font-size: 75%; padding-top: 0.8em; width: 21.15em; }
-.guide-button-icon .image, #guide-user-avatar { height: 1em; width: 1em; background: 50% 50% / 100% no-repeat; }
-.guide-button-icon .image { box-shadow: rgb(239, 145, 145) 0px 0px 0px 1px; margin: 0px 0.4em; background-color: rgb(255, 255, 255); }
-.guide-button.focused .guide-button-icon .image { box-shadow: none; }
-.guide-button .image { display: none; }
-.guide-button.has-image .image { display: block; }
-#guide-user-avatar { border-radius: 50%; box-shadow: rgba(239, 145, 145, 0.4) 0px 0px 0px 0.05em, rgb(239, 145, 145) 0px 0px 0.05em; display: inline-block; font-size: 2.31em; margin: 0.2em 0.2em 0.2em 0.4em; }
-#guide-user-avatar, .guide-user-text, .guide-button-icon, .guide-button-title { transition: color 50ms 25ms; }
-.no-transition .guide-button .guide-button-icon, .no-transition .guide-button .guide-button-title, .limited-animation .guide-button .guide-button-icon, .limited-animation .guide-button .guide-button-title, .limited-animation #guide-user-avatar, .limited-animation .guide-user-text { transition: none; }
-.guide-button.focused .guide-button-icon, .guide-button.focused .guide-button-title { color: rgb(223, 35, 35); }
-.limited-animation .guide-button.focused { background-color: rgb(255, 255, 255); }
-.user-info-container { height: 2.6em; padding: 1.1em 0em 0em 1.8em; font-size: 1.6em; white-space: nowrap; }
-#user-info-background { display: none; height: 8.53em; position: relative; width: inherit; z-index: 1; }
-.sliding-highlighter .select { display: none; height: 2.9em; min-width: 3.5em; padding: 1.3em 0.6em 0em; position: absolute; right: 0px; text-align: center; background-color: rgba(0, 0, 0, 0.8); }
-.engaged .guide .sliding-highlighter .select { display: block; }
-.unlimited .guide-user-text { line-height: 1em; }
-.guide-user-unlimited { font-size: 0.8em; color: rgb(170, 136, 136); text-transform: uppercase; }
-#settings { height: 100%; overflow: visible; position: absolute; right: 0px; left: 4.5em; }
-.settings-shelf { height: 24em; margin-left: 3.5em; margin-top: 1em; position: absolute; top: 19%; width: 100%; }
-.settings-title { color: rgb(255, 255, 255); font-size: 1.2em; line-height: 3em; white-space: nowrap; }
-.limited-animation .settings .content .list { width: 130em; }
-.limited-animation #settings-items { margin-left: -17em; }
-.settings-horizontal-list > .content { font-size: 79%; }
-.settings-horizontal-list > .no-content-message { display: none; }
-.pointer-overlay { display: block; }
-.pointer-overlay .nav-arrow { cursor: pointer; display: none; height: 5em; opacity: 0.5; position: absolute; width: 5em; background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/motion-control-sprite.png); background-size: 100%; background-repeat: no-repeat; }
-.pointer-overlay.enabled .nav-arrow { display: block; }
-.pointer-overlay .nav-arrow:hover { opacity: 1; }
-.pointer-overlay .up-arrow { left: 45%; top: 18%; background-position: 0px 100%; }
-.pointer-overlay .down-arrow { bottom: 11%; left: 45%; background-position: 0px 0%; }
-.pointer-overlay .left-arrow { top: 50%; left: 5%; background-position: 0px 33.3%; }
-.settings-focused .pointer-overlay .left-arrow, .browse-sets-state .pointer-overlay .left-arrow, .search-state .pointer-overlay .left-arrow { left: 7%; }
-.pointer-overlay .right-arrow { top: 50%; right: 5%; background-position: 0px 66.7%; }
-#search.input-open + .pointer-overlay .up-arrow, .post-play-state .pointer-overlay .up-arrow, .post-play-state .pointer-overlay .down-arrow { display: none; }
-.watch-state .pointer-overlay .down-arrow { bottom: 2%; }
-.search-state.guide-focused .pointer-overlay .up-arrow { top: 20%; }
-@media screen and (aspect-ratio: 5/4) { 
-  #dialog.browse-sets #dialog-wrapper { padding: 1.3em 2em; }
-  .flag-list-container.flag-options-dialog { font-size: 0.875em; }
-}
-@media screen and (max-aspect-ratio: 4/3) { 
-  .player-controls #button-list { font-size: 0.875em; }
-  #transport-controls.ad-active .player-controls-widget .player-controls #button-list { font-size: 1em; }
-  .fresh-transport-controls .progress-bar { width: 70%; }
-  .fresh-transport-controls #player-time-elapsed, .fresh-transport-controls .player-time-total { font-size: 1.1em; width: 10%; }
-}
-@media screen and (aspect-ratio: 4/3) { 
-  #browse-header .title { width: 18.3em; }
-  #browse-header.one-button .title { width: 13.2em; }
-  #browse-header.two-buttons .title { width: 8.5em; }
-  .sets-ui .flag-list.grid { font-size: 0.8em; }
-  .flag-claim { font-size: 1.4em; }
-  #search .search-pairing { font-size: 0.7em; }
-  .sets-ui .debug-dialog { font-size: 0.8em; }
-  .voice-footer .list { padding-top: 0px; width: 16em; }
-}
-@media screen and (min-width: 3840px) { 
-  .player-controls { top: 21px; }
-}
-@media screen and (min-width: 1919px) { 
-  .opera .video-stream { height: 1080px; width: 1920px; }
-  .watch-video-tile, .watch-list .button { padding: 10px; }
-}
-@media screen and (max-height: 576px) and (max-width: 1024px) and (min-width: 640px) { 
-  .countdown-ad-callout { font-size: 1.3em; right: 10%; }
-  .opera .video-stream { height: 576px; width: 1024px; }
-  #keyboard-grid .button { width: 0.7em; }
-  #dialog-wrapper { padding-left: 4em; padding-right: 4em; }
-  .pairing { transform-origin: 0px 50% 0px; transform: scale(0.7); }
-  .browse-sets #browse-header.collapsed { transform: translateY(-19%); }
-}
-@media screen and (max-height: 480px) and (max-width: 720px) { 
-  .countdown-ad-callout { font-size: 0.9em; right: 5%; }
-  .skip-ad-callout { right: 3%; }
-  .opera .video-stream { height: 480px; }
-  #search .pairing .alternatives { margin: 0px 0px 0px 1em; }
-  #keyboard-grid .button { width: 0.8em; }
-  #search .pairing .search-message .title { margin-top: 0.7em; }
-  #dialog-view .pairing { font-size: 0.8em; margin-top: 2em; }
-  .watch-list .list { margin-left: -4em; }
-}
-@media screen and (max-height: 480px) and (max-width: 640px) { 
-  .opera .video-stream { height: 480px; width: 640px; }
-  #keyboard-grid .button { width: 0.7em; }
-  #dialog-view .reset-help { display: block; width: 27em; }
-  .watch-video-tile, .watch-list .button { padding: 4px; }
-  .browse-header-metadata { bottom: 3.9em; }
-  .browse-sets #browse-header.collapsed { transform: translateY(-27%); }
-  .voice-footer .list { font-size: 0.6em; margin-left: 35%; width: 35%; }
-  .engaged .engagement-indicator { display: inline-block; font-size: 1.3em; height: 3em; margin-bottom: 1.5em; }
-  .engaged .engagement-indicator .title { display: inline-block; }
-  .engagement-indicator .stop-listening .icon { display: inline-block; height: 3em; left: 0px; top: 0px; width: 15%; }
-}
-@media screen and (max-width: 1440px) and (min-height: 1080px) { 
-  .video-tile-container { transform: scale(0.7); transform-origin: right top 0px; }
-  .player-controls #button-list .button, .player-controls #button-list .toggle-button { margin-right: 0.2em; margin-left: 0.2em; }
-  .fresh-transport-controls .progress-bar { width: 59%; }
-  .fresh-transport-controls #player-time-elapsed, .fresh-transport-controls .player-time-total { font-size: 1em; width: 14%; }
-  .fresh-transport-controls .button, .fresh-transport-controls .toggle-button { font-size: 1.1em; }
-  .fresh-transport-controls #transport-more-button { font-size: 1.7em; }
-  #dialog-wrapper { padding: 1.3em 3em; }
-  .dialog-contents { font-size: 95%; }
-  #dialog-wrapper .connection-steps { padding: 0px; }
-  #dialog-wrapper .pairing .qr-code, #dialog-wrapper .pairing .connected-list { margin: 0.2em; }
-  .context-menu-list { left: 30%; right: 30%; }
-  .voice-footer .list { font-size: 0.65em; padding-left: 22em; padding-right: 18em; padding-top: 1.3em; }
-}
-.sets-ui .carousel .item, .sets-ui .carousel .channel-tile, .sets-ui .carousel .auto-play-tile { background-color: inherit !important; }
-.sets-ui .carousel .item:hover, .sets-ui .carousel .channel-tile:hover, .sets-ui .carousel .auto-play-tile:hover { background-color: rgba(255, 255, 255, 0.0980392) !important; }
-.sets-ui .tile .channel-bottom > .title, .sets-ui .tile .tile-bottom > .title { color: rgb(225, 225, 225); }
-.sets-ui .tile .channel-bottom > .details, .sets-ui .tile .tile-bottom > .details { color: rgb(100, 100, 100); }
-.sets-ui .tile.focused.selected .channel-bottom > .title, .sets-ui .tile.focused.selected .tile-bottom > .title { color: rgb(33, 33, 33); }
-.sets-ui .tile.focused.selected .channel-bottom > .details, .sets-ui .tile.focused.selected .tile-bottom > .details { color: rgb(141, 141, 141); }
-.sets-ui #transport-controls .player-controls #button-list div.icon-player-more, .sets-ui #transport-controls .player-controls #button-list div.icon-player-less { color: rgb(255, 255, 255); }
-.sets-ui #transport-controls .player-controls #button-list div.icon-player-more.focused, .sets-ui #transport-controls .player-controls #button-list div.icon-player-less.focused { color: rgb(34, 34, 34); }
-.sets-ui .settings-title { font-size: 1.5em; }
-.sets-ui .action-tile .title { font-size: 2.4em; margin-left: 0.1em; margin-right: 0.1em; }
-.sets-ui .flag-list.grid { margin: 3.25em; }
-.sets-ui .flag-list .list { text-align: left; }
-.sets-ui .flag-list .button { width: 14em; text-align: center; }
-.sets-ui .flag-example { top: 20%; }
-.sets-ui .flag-video { margin-left: 2em; text-align: left; }
-.sets-ui .flag-claim .privacy-invasion { margin: auto; width: 50%; }
-.sets-ui .authentication-error-dialog, .sets-ui .delete-video-error, .sets-ui .missing-channel-error, .sets-ui .server-unavailable, .sets-ui .network-error-dialog { margin-top: 1em; }
-.sets-ui .eureka-authorization-dialog .icon, .sets-ui .eureka-player-error-dialog .icon { margin-left: 3em; }
-.sets-ui .eureka-authorization-dialog .info, .sets-ui .eureka-player-error-dialog .info { width: 50%; }
-.sets-ui .debug-dialog { padding: 0px 1em; text-align: left; }
-.sets-ui .text-dialog #dialog-view { width: auto; }
-.sets-ui #dialog .platform-container { font-size: 0.6em; margin-bottom: 0.5em; }
-.sets-ui .paid-channel-dialog { margin: 1em; }
-.sets-ui #dialog .connection-instructions .icon-settings-pair { display: none; }
-.sets-ui .closed-captions-dialog { text-align: left; padding-left: 1em; }
-.sets-ui .delete-video-error, .sets-ui .paid-scope-dialog, .sets-ui .video-edit-error, .sets-ui .video-processing, .sets-ui .video-upload-error { margin: 3em; font-size: 1.6em; }
-.limited-animation .auto-play-tile.focused .video-tile { background-color: rgb(241, 241, 241); }
-.limited-animation.sets-ui .title-card { background: linear-gradient(rgba(0, 0, 0, 0.901961), rgba(0, 0, 0, 0.8), transparent); }
-.limited-animation.sets-ui #search #text-box-background, .limited-animation.sets-ui #search #search-text-entry { background-color: rgba(0, 0, 0, 0); }
-.sets-ui .scrolling-text { text-align: left; padding-left: 1em; height: 20em; }
-.sets-ui #dialog .scrollbar { right: 11em; }
-.sets-ui #dialog-view .reset-help { width: 20em; }
-.sets-ui #dialog.remote-reset-dialog .buttons { position: inherit; }
-.sets-ui #dialog.remote-reset-dialog .reset-help { height: 11em; padding-left: 1em; text-align: left; }
-.sets-ui #dialog.remote-reset-dialog .connected-list { margin-right: 2em; }
-.sets-ui .dialog-focused #legend { bottom: 17%; right: 16%; }
-.exp-densityFiveTiles .horizontal-list > .content { font-size: 59%; }
-.exp-densityFiveTiles .shelf > .title { font-size: 1.5em; margin-bottom: 0.75em; margin-top: 0px; }
-.exp-densityFiveTiles .channel-bottom .title, .exp-densityFiveTiles .tile-bottom .title { font-size: 1.75em; }
-.exp-densityFiveTiles .tile-bottom .details { font-size: 1.5em; height: 50%; margin: 0.2em 1em 0px 0px; }
-.exp-densityFiveTiles .channel-top .video-thumb { border-radius: 50%; }
-.limited-animation .exp-densityFiveTiles .browse-content .list { margin-left: -8em; width: 155em; }
-.exp-densityFourTiles .horizontal-list > .content { font-size: 67%; }
-.exp-densityFourTiles .shelf > .title { font-size: 1.5em; margin-bottom: 0.75em; margin-top: 0px; }
-.exp-densityFourTiles .channel-bottom .title, .exp-densityFourTiles .tile-bottom .title { font-size: 1.75em; }
-.exp-densityFourTiles .tile-bottom .details { font-size: 1.5em; height: 50%; margin: 0.2em 1em 0px 0px; }
-.limited-animation .exp-densityFourTiles .browse-content .list { margin-left: -8.5em; width: 155em; }
-.exp-densityFourTiles .channel-top .video-thumb { border-radius: 50%; }
-.exp-densityHideMetadata .shelf .horizontal-list .tile-bottom, .exp-densityHideMetadata .shelf .horizontal-list .channel-bottom { display: none; }
-.exp-densityHideMetadata .shelf.selected .horizontal-list .tile-bottom, .exp-densityHideMetadata .shelf.selected .horizontal-list .channel-bottom { display: block; }
-.exp-densityHideMetadata .horizontal-list .video-tile .tile-top .decoration { display: none; }
-.exp-densityHideMetadata #search .tile-top .decoration, .exp-densityHideMetadata #post-play-list .tile-top .decoration, .exp-densityHideMetadata .shelf.selected .horizontal-list .tile-top .decoration { display: block; }
-.exp-densityHideMetadata .shelf:not(.selected) .channel-tile .video-thumb { height: 70%; width: 70%; }
-.sets-ui .exp-densityHideMetadata .shelf:not(.selected) .carousel .item:hover, .sets-ui .exp-densityHideMetadata .shelf:not(.selected) .carousel .channel-tile:hover { background-color: inherit !important; }
-.limited-animation .exp-densityHideMetadata .browse-content .list .shelf:nth-child(1) { margin-bottom: 9.5em; }
-.limited-animation.sets-ui .exp-densityHideMetadata .channel-tile:not(.focused), .limited-animation.sets-ui .exp-densityHideMetadata .video-tile:not(.focused) { background-color: inherit; }
-.rockandroll.limited-animation.sets-ui .exp-densityHideMetadata .channel-tile:hover:not(.focused), .rockandroll.limited-animation.sets-ui .exp-densityHideMetadata .video-tile:hover:not(.focused) { background-color: inherit; }</style><style>@font-face { font-family: roboto-regular; src: url(www.youtube.com/s/tv/html5/misc/fonts/Roboto-Regular-20140804.ttf) format(truetype); }
-html { font-family: roboto-regular; }
-body { font-family: roboto-regular; }
-.button span { font-family: roboto-regular; }
-.toggle-button span { font-family: roboto-regular; }
-@font-face { font-family: youtube-icons; src: url(www.youtube.com/s/tv/html5/f0d770f4/img/icons.ttf) format(truetype); }</style><script>(function (resourcePaths) {
-    var imageContainer = document.createElement('div');
-    imageContainer.style.position = 'absolute';
-    imageContainer.style.left = '0px';
-    imageContainer.style.top = '0px';
-    imageContainer.style.visibility = 'hidden';
-
-    var pendingResourceCount = 0;
-    resourcePaths.forEach(function(resourcePath) {
-      console.log(resourcePath);
-      if (/\.(jpeg|jpg|png)$/i.test(resourcePath)) {
-        ++pendingResourceCount;
-        console.log(pendingResourceCount);
-        var imageElement = new Image();
-        imageElement.src = resourcePath;
-        imageContainer.appendChild(imageElement);
-      }
-    });
-  })(["www.youtube.com/s/tv/fonts/CutiveMono-Regular.woff","www.youtube.com/s/tv/fonts/PTM55FT.woff","www.youtube.com/s/tv/fonts/PT_Serif-Caption-Web-Regular.woff","www.youtube.com/s/tv/fonts/PT_Sans-Caption-Web-Regular.woff","www.youtube.com/s/tv/fonts/Handlee-Regular.woff","www.youtube.com/s/tv/fonts/DancingScript-Regular.woff","www.youtube.com/s/tv/fonts/MarcellusSC-Regular.woff","www.youtube.com/s/tv/html5/f0d770f4/img/circle.png","www.youtube.com/s/tv/html5/f0d770f4/img/icon-playbutton.png","www.youtube.com/s/tv/html5/f0d770f4/img/cast_disconnected_blue.png","www.youtube.com/s/tv/html5/f0d770f4/img/pair_promo.png","www.youtube.com/s/tv/html5/f0d770f4/img/dial-sprite.png","www.youtube.com/s/tv/html5/f0d770f4/img/volume_mute_pressed.png","www.youtube.com/s/tv/html5/f0d770f4/img/volume_0_pressed.png","www.youtube.com/s/tv/html5/f0d770f4/img/volume_1_pressed.png","www.youtube.com/s/tv/html5/f0d770f4/img/volume_2_pressed.png","www.youtube.com/s/tv/html5/f0d770f4/img/icon-help.png","www.youtube.com/s/tv/html5/f0d770f4/img/icon-feedback.png","www.youtube.com/s/tv/html5/f0d770f4/img/flag.png","www.youtube.com/s/tv/html5/f0d770f4/img/pairing-promo-combo.png","www.youtube.com/s/tv/html5/f0d770f4/img/edit_tile_light.png","www.youtube.com/s/tv/html5/f0d770f4/img/edit_tile_dark.png","www.youtube.com/s/tv/html5/f0d770f4/img/trash_tile_light.png","www.youtube.com/s/tv/html5/f0d770f4/img/trash_tile_dark.png","www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-check-light.png","www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-check-dark.png","www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-private-light.png","www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-private-dark.png","www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-public-light.png","www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-public-dark.png","www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-unlisted-light.png","www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-unlisted-dark.png","www.youtube.com/s/tv/html5/f0d770f4/img/icon-aaa-engaged.png","www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-desktop.png","www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-bbb.png","www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-ccc.png","www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-ddd.png","www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-eee.png","www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-fff.png","www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-ggg.png","www.youtube.com/s/tv/html5/f0d770f4/img/icon-playbutton.png","www.youtube.com/s/tv/html5/f0d770f4/img/player-play.png","www.youtube.com/s/tv/html5/f0d770f4/img/player-pause.png","www.youtube.com/s/tv/html5/f0d770f4/app-prod.css","www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-yt-logo.png","www.youtube.com/s/tv/html5/f0d770f4/img/yt-kids-logo.png","www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-multi-user.jpg","www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-yt-mix.jpg","www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-tv-queue.jpg","www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-promo.jpg","www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-mother-goose.jpg","www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-rainbow.jpg","www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-sesame.jpg","www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-talking-tom.jpg","www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-wonderquest.jpg","www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-gaming-heart.jpg","www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-loki.jpg","www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-music.jpg","www.youtube.com/s/tv/html5/f0d770f4/img/yt-music-logo.png","www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-music.jpg","www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-music-party-logo.png","www.youtube.com/s/tv/html5/f0d770f4/img/yt-music-logo-small.png","www.youtube.com/s/tv/html5/f0d770f4/img/yt-logo-fullcolor.png","www.youtube.com/s/tv/html5/f0d770f4/img/button-unmute-active.png","www.youtube.com/s/tv/html5/f0d770f4/img/button-unmute-onhover-active.png","www.youtube.com/s/tv/html5/f0d770f4/img/button-mute-active.png","www.youtube.com/s/tv/html5/f0d770f4/img/button-mute-onhover-active.png","www.youtube.com/s/tv/html5/f0d770f4/img/button-fullscreen-active.png","www.youtube.com/s/tv/html5/f0d770f4/img/button-fullscreen-onhover-active.png","www.youtube.com/s/tv/html5/f0d770f4/img/motion-control-sprite.png","www.youtube.com/s/tv/html5/misc/fonts/Roboto-Regular-20140804.ttf","www.youtube.com/s/tv/html5/f0d770f4/img/icons.ttf","www.youtube.com/s/tv/html5/f0d770f4/img/default_bg.jpg","i.ytimg.com/vi/_TWbD3MKfMI/hqdefault.jpg","i.ytimg.com/vi/vvFHyFW_jFc/hqdefault.jpg","i.ytimg.com/vi/q14aPbvbvl8/hqdefault.jpg","i.ytimg.com/vi/M9WlASe5ThU/hqdefault.jpg","i.ytimg.com/vi/59_zMJRhFM0/hqdefault.jpg","i.ytimg.com/vi/tnfPNYpi8rc/hqdefault.jpg","i.ytimg.com/vi/F50yjSws9gQ/hqdefault.jpg","i.ytimg.com/vi/rs-Ou-gjReQ/hqdefault.jpg","i.ytimg.com/vi/x5ZxRObLLzE/hqdefault.jpg","i.ytimg.com/vi/LZoilVdo7Hw/hqdefault.jpg","i.ytimg.com/vi/0vEKItRNIb0/hqdefault.jpg","i.ytimg.com/vi/8VstEBbwhnc/hqdefault.jpg","i.ytimg.com/vi/qkKRkfZYhlE/hqdefault.jpg","i.ytimg.com/vi/MODTYlzxY9U/hqdefault.jpg","i.ytimg.com/vi/D-YPnDvTCmI/hqdefault.jpg","i.ytimg.com/vi/wNRUzu4fTgw/hqdefault.jpg","i.ytimg.com/vi/GwzBLYGRj6c/hqdefault.jpg","i.ytimg.com/vi/rtzlT78OEks/hqdefault.jpg","i.ytimg.com/vi/eOOyxSMI0aE/hqdefault.jpg","i.ytimg.com/vi/RL7grUEo960/hqdefault.jpg","i.ytimg.com/vi/2A07xMhKC6g/hqdefault.jpg","i.ytimg.com/vi/Z31LDqbhN8U/hqdefault.jpg","i.ytimg.com/vi/zzmrTdAtEu4/hqdefault.jpg","i.ytimg.com/vi/1dXVzBU5p-Q/hqdefault.jpg","i.ytimg.com/vi/spC883rn6zk/hqdefault.jpg","i.ytimg.com/vi/XilhAJZ2qxs/hqdefault.jpg","i.ytimg.com/vi/tCehxI5a1y0/hqdefault.jpg","i.ytimg.com/vi/qrZcKwcVwk8/hqdefault.jpg","i.ytimg.com/i/F0pVplsI8R5kcAqgtoRqoA/1.jpg","i.ytimg.com/i/-9-kyTW8ZkZNDHQJ6FgpwQ/1.jpg","i.ytimg.com/i/Egdi0XIXXZ-qJOFPf4JSKw/1.jpg","i.ytimg.com/i/OpNcN46UbXVtpKMrmU4Abg/1.jpg","i.ytimg.com/i/YfdidRxbB8Qhf0Nx7ioOYw/1.jpg","i.ytimg.com/i/4R8DWoMoI7CAwX8_LjQHig/1.jpg","yt3.ggpht.com/-dL2jeHlm2Ok/AAAAAAAAAAI/AAAAAAAAAAA/ZCMMkRj-hrw/s88-c-k-no/photo.jpg","i.ytimg.com/i/xAgnFbkxldX6YUEvdcNjnA/1.jpg","i.ytimg.com/i/i-g4cjqGV7jvU8aeSuj0jQ/1.jpg"]);</script></head>
-  <body class="desktop sets-ui lang-en_US lang-case-sensitive" style="font-size: 150%;">
-    
-    <div id="leanback"><div id="app-markup" class="focused exp-autoOpenGuide exp-mdxIgnoreFlings exp-innertubeCountdown exp-enableSafetyModeRename exp-atomSubscriptionsMultirowShelves browse-sets-state guide-focused     application" tabindex="-1">  <div id="background" class="no-model background" tabindex="-1" style="background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/default_bg.jpg);"></div>  <div id="watch" class="no-model watch" tabindex="-1">  <div id="leanback-player-container"><div class="html5-video-player el-leanback ytp-no-controls" tabindex="-1" id="movie_player" data-version="//s.ytimg.com/yts/jsbin/html5player-new-en_GB-vflmdFuIW/html5player-new.js"><div class="html5-video-container"><video class="video-stream html5-main-video" style="width: 1920px; height: 1080px; left: 0px; top: -1080px; transform: none;"></video><div class="html5-video-content" style="width: 1920px; height: 1080px; left: 0px; top: 0px;"></div></div></div></div>  <div class="title-card no-model watch-title-tray" id="title-tray" tabindex="-1">  <div class="player-meta">    <div class="user-details hidden">      <div class="message">Added by </div>      <div class="avatar no-model image" data-image-url="{{addedByUserAvatarUrl}}" tabindex="-1"></div>    </div>    <div class="player-video-avatar no-model image" data-image-url="{{channelAvatarUrl}}" tabindex="-1"></div>    <div class="player-video-text">      <div class="player-video-title"></div>      <div class="player-video-details">        <div class="username"></div>        <div class="set-context hidden"></div>        <div class="set-context-position hidden">0 of 0</div>        <div class="uploaded-date"></div>        <div class="view-count"><span class="view-count-label"></span></div>        <div class="hidden no-model quality-status" tabindex="-1">  <div class="quality-status-hd-badge"></div></div>        <div id="badges" class="badges hidden">          <span class="live-badge">Live</span>        </div>        <div class="ypc-preview">Preview: This video requires payment to watch.</div>      </div>    </div>  </div></div>  <div id="eureka-player-controls-container">    <div id="eureka-player-controls"></div>  </div>  <div id="pivot-post-play" class="hidden no-model pivot-post-play" tabindex="-1">  <div id="post-play-list" class="no-model no-content postplay-horizontal-list" tabindex="-1">  <div class="no-content-message">    <div class="text">No videos are available</div>  </div>  <div class="content"><div class="no-model carousel" tabindex="-1"></div><div class="hidden no-model pivot-sliding-highlighter" tabindex="-1">  <div class="select">Select</div></div></div></div></div>  <div id="bottom-half">    <div id="transport-controls" class="no-model transport-controls" tabindex="-1">  <div class="player-controls-widget">    <div id="player-controls" class="player-controls">      <div id="button-list" class=" list" data-model="{{buttonCollection}}" data-enable-sounds="false" tabindex="-1"><div class="icon-ellipsis button" tabindex="-1"><span class="label">more actions</span></div><div class="icon-home button" tabindex="-1"><span class="label">Go Home</span></div><div class="icon-player-prev button" tabindex="-1"><span class="label">skip backward</span></div><div class="icon-player-rew button" tabindex="-1"><span class="label">rewind</span></div><div class="selected icon-player-play toggle-button" tabindex="-1"><span>play</span></div><div class="icon-player-ff button" tabindex="-1"><span class="label">forward</span></div><div class="icon-player-next button" tabindex="-1"><span class="label">skip forward</span></div><div class="icon-player-closedcaptions toggle-button" tabindex="-1"><span>captions</span></div><div class="disabled spacer button" tabindex="-1"><span class="label"></span></div></div>    </div>    <div class="player-seekbar">      <div id="progress-bar" class=" progress-bar" tabindex="-1">  <div class="progress-bar-line">    <div class="progress-bar-background"></div>    <div class="progress-bar-loaded" style="width:0%"></div>    <div class="progress-bar-played" style="width:0%"></div>  </div>  <div class="progress-bar-playhead">    <div class="no-model cue-range-markers" tabindex="-1"></div>    <div class="progress-bar-disc" style="left:0%"></div>  </div></div>      <div id="player-time-elapsed" class="no-model elapsed-time" tabindex="-1">0:00</div>      <div class="player-time-total"></div>      <div class="live-indicator">Live</div>    </div>  </div></div>    <div class="hidden skip-ad-button" tabindex="-1">  <div class="label">    <span class="skip-button-text"></span>    <span class="skip-symbol icon-player-next"></span>    <span class="skip-symbol icon-settings-pair"></span>    <span class="skip-symbol icon-cast_on"></span>  </div></div>    <div class="hidden no-model advertisement-info" tabindex="-1">  <div class="advertisement-info-top">    <div class="youtube-hosted">      <div class="advertisement-avatar no-model image" data-image-url="{{advertiserAvatar}}" tabindex="-1"></div>      <div class="advertisement-info-details">        <div class="advertisement-title"></div>        <div class="advertisement-advertiser">          <span class="ad-badge">Ad</span>          <span class="remaining-duration"></span>          <span class="ad-point-separator">•</span>          <span class="ad-by">by </span>        </div>      </div>    </div>    <div class="third-party">      <span class="ad-badge">Ad</span>      <span class="ad-point-separator">•</span>      <span class="remaining-duration"></span>    </div>  </div></div>  <div class="no-model no-content pivot-shelf-list" tabindex="-1">  <div class="no-content-message">    <div class="text">No videos are available</div>  </div><div class=" carousel" tabindex="-1"></div></div></div></div>  <div id="call-to-cast" class="no-model call-to-cast" tabindex="-1">  <div class="THEME-cl end-screen multi-user left">    <h2 class="call-to-cast-text">Everyone's connected.</h2>    <h3 class="call-to-cast-text">Friends and family can <em>join in</em> and add videos to your TV Queue.</h3>    <div class="yt-logo"></div>  </div>  <div class="THEME-cl end-screen yt-mix right">    <h2 class="call-to-cast-text">Find the perfect mix.</h2>    <h3 class="call-to-cast-text">Play a nonstop <em>YouTube Mix</em> inspired by your favorite artist or video.</h3>    <div class="yt-logo"></div>  </div>  <div class="THEME-cl end-screen kids-promo left">    <h2 class="call-to-cast-text">      Have the YouTube Kids app?    </h2>    <h3 class="call-to-cast-text">      Get the family <em>together</em> and watch your favorite videos on the big screen.    </h3>    <div class="yt-kids-logo"></div>  </div>  <div class="THEME-cl end-screen tv-queue left">    <h2 class="call-to-cast-text">What's up next?</h2>    <h3 class="call-to-cast-text">Browse and add videos to your <em>TV Queue</em> while your current video keeps playing.</h3>    <div class="yt-logo"></div>  </div>  <div class="THEME-k end-screen kids-mother-goose left">    <h3 class="call-to-cast-text">Tap a video to watch on your TV.</h3>  </div>  <div class="THEME-k end-screen kids-rainbow left">    <h3 class="call-to-cast-text">Tap a video to watch on your TV.</h3>  </div>  <div class="THEME-k end-screen kids-sesame left">    <h3 class="call-to-cast-text">Tap a video to watch on your TV.</h3>  </div>  <div class="THEME-k end-screen kids-talking-tom left">    <h3 class="call-to-cast-text">Tap a video to watch on your TV.</h3>  </div>  <div class="THEME-k end-screen kids-wonderquest left">    <h3 class="call-to-cast-text">Tap a video to watch on your TV.</h3>  </div>  <div class="THEME-g end-screen gaming-heart left">    <h3 class="call-to-cast-text"></h3>  </div>  <div class="THEME-up end-screen loki left">    <h3 class="call-to-cast-text">Pick a video, yo.</h3>  </div>  <div class="THEME-m end-screen music-ready">    <div class="call-to-cast-logo"></div>    <h2 class="call-to-cast-text">Ready to play</h2>    <h3 class="call-to-cast-text">Choose some music in YouTube Music and play it here</h3>  </div>  <div class="THEME-m end-screen music-party">    <div class="call-to-cast-logo"></div>    <h3 class="call-to-cast-text">Need a soundtrack for your party?</h3>    <h3 class="call-to-cast-text">Stream endless video or audio stations to match the mood.</h3>    <div class="footer"></div>  </div></div>  <div id="browse-sets" class="no-background browse-sets" tabindex="-1">  <div id="browse-search-bar" class="no-model icon-button" tabindex="-1">  <span class="icon icon-search"></span>  <span class="label"></span></div>  <div class="youtube-logo-top">    <div class="youtube-logo icon-youtube-logo"></div>    <div class="youtube-unlimited-logo icon-youtube-unlimited-logo"></div>  </div>  <div id="browse-header" class="hidden no-model collapsed two-buttons browse-header" tabindex="-1">  <div class="browse-header-gradient"></div>  <div class="browse-header-metadata">    <div class="browse-header-avatar no-model image" data-image-url="{{avatarImageURL}}" tabindex="-1"></div>    <div class="title"></div>  </div>  <div class="browse-header-button-bar no-model component" tabindex="-1">    <div class="button browse-header-trailer no-model icon-button" tabindex="-1">  <span class="icon icon-player-play"></span>  <span class="label"></span></div>    <div class="button browse-header-subscribe no-model subscribe-button" tabindex="-1">  <span class="icon icon-logo-lozenge"></span>  <span class="label"></span></div>  </div></div>  <div id="platform-user-icon" class="hidden no-model image" data-image-url="{{platformUserIcon}}" tabindex="-1"></div>  <div class="browse-content">    <div id="shelves" class=" shelves" tabindex="-1">  <div class="title"></div>  <div class="no-content-message">    <div class="text">No videos are available</div>  </div><div class=" carousel" tabindex="-1"><div class="selected shelf" tabindex="-1" style="height: 24em; opacity: 1; z-index: 1; transform: translateX(0%) translateY(0%) scale(1) translateZ(0px); transition: none 0s;">  <div class="icon "></div>  <div class="title">    <span class="main">Screen Rant</span>    <span class="annotation">Recommended channel</span>  </div>  <div class="content-container"><div class=" horizontal-list" tabindex="-1">  <div class="no-content-message">    <div class="text">No videos are available</div>  </div>  <div class="content"><div class=" sliding-highlighter" tabindex="-1" style="transform: translateX(0%) translateZ(0px); transition: none 0s;">  <div class="select">Select</div></div><div class=" carousel" tabindex="-1"><div class="item tile selected video-tile" tabindex="-1" style="transform: translateX(0%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div>  <div class="tile-top">    <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/_TWbD3MKfMI/hqdefault.jpg);"></div>    <div class="voice-command">Cat Video</div>    <div class="decoration">      <div class="live-badge badge hidden"></div>      <div class="text-badge badge hidden"></div>      <div class="duration">7:30</div>    </div>  </div>  <div class="overlay hidden">    <div class="count"><div><strong></strong></div>videos</div>    <div class="icon"></div>  </div>  <div class="tile-bottom">    <div class="title">Cat Video</div>    <div class="details">      <div class="by">by Not a Cat</div>      <div class="views">16,573,823 views</div>      <div class="age">3 months ago</div>    </div>  </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(107%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div>  <div class="tile-top">    <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/vvFHyFW_jFc/hqdefault.jpg);"></div>    <div class="voice-command">Cat Video</div>    <div class="decoration">      <div class="live-badge badge hidden"></div>      <div class="text-badge badge hidden"></div>      <div class="duration">7:06</div>    </div>  </div>  <div class="overlay hidden">    <div class="count"><div><strong></strong></div>videos</div>    <div class="icon"></div>  </div>  <div class="tile-bottom">    <div class="title">Cat Video</div>    <div class="details">      <div class="by">by Not a Cat</div>      <div class="views">11,425,149 views</div>      <div class="age">3 months ago</div>    </div>  </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(214%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div>  <div class="tile-top">    <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/q14aPbvbvl8/hqdefault.jpg);"></div>    <div class="voice-command">Cat Video</div>    <div class="decoration">      <div class="live-badge badge hidden"></div>      <div class="text-badge badge hidden"></div>      <div class="duration">7:25</div>    </div>  </div>  <div class="overlay hidden">    <div class="count"><div><strong></strong></div>videos</div>    <div class="icon"></div>  </div>  <div class="tile-bottom">    <div class="title">Cat Video</div>    <div class="details">      <div class="by">by Not a Cat</div>      <div class="views">8,454,555 views</div>      <div class="age">5 months ago</div>    </div>  </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(321%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div>  <div class="tile-top">    <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/M9WlASe5ThU/hqdefault.jpg);"></div>    <div class="voice-command">Cat Video</div>    <div class="decoration">      <div class="live-badge badge hidden"></div>      <div class="text-badge badge hidden"></div>      <div class="duration">6:24</div>    </div>  </div>  <div class="overlay hidden">    <div class="count"><div><strong></strong></div>videos</div>    <div class="icon"></div>  </div>  <div class="tile-bottom">    <div class="title">Cat Video</div>    <div class="details">      <div class="by">by Not a Cat</div>      <div class="views">3,804,435 views</div>      <div class="age">2 months ago</div>    </div>  </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(428%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div>  <div class="tile-top">    <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/59_zMJRhFM0/hqdefault.jpg);"></div>    <div class="voice-command">Cat Video</div>    <div class="decoration">      <div class="live-badge badge hidden"></div>      <div class="text-badge badge hidden"></div>      <div class="duration">7:14</div>    </div>  </div>  <div class="overlay hidden">    <div class="count"><div><strong></strong></div>videos</div>    <div class="icon"></div>  </div>  <div class="tile-bottom">    <div class="title">Cat Video</div>    <div class="details">      <div class="by">by Not a Cat</div>      <div class="views">487,432 views</div>      <div class="age">3 weeks ago</div>    </div>  </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(535%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div>  <div class="tile-top">    <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/tnfPNYpi8rc/hqdefault.jpg);"></div>    <div class="voice-command">Cat Video</div>    <div class="decoration">      <div class="live-badge badge hidden"></div>      <div class="text-badge badge hidden"></div>      <div class="duration">9:22</div>    </div>  </div>  <div class="overlay hidden">    <div class="count"><div><strong></strong></div>videos</div>    <div class="icon"></div>  </div>  <div class="tile-bottom">    <div class="title">Cat Video</div>    <div class="details">      <div class="by">by Not a Cat</div>      <div class="views">3,156,426 views</div>      <div class="age">7 months ago</div>    </div>  </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(642%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div>  <div class="tile-top">    <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/F50yjSws9gQ/hqdefault.jpg);"></div>    <div class="voice-command">Cat Video</div>    <div class="decoration">      <div class="live-badge badge hidden"></div>      <div class="text-badge badge hidden"></div>      <div class="duration">5:27</div>    </div>  </div>  <div class="overlay hidden">    <div class="count"><div><strong></strong></div>videos</div>    <div class="icon"></div>  </div>  <div class="tile-bottom">    <div class="title">Cat Video</div>    <div class="details">      <div class="by">by Not a Cat</div>      <div class="views">1,108,695 views</div>      <div class="age">3 weeks ago</div>    </div>  </div></div></div></div></div></div></div><div class=" shelf" tabindex="-1" style="height: 24em; opacity: 1; z-index: 2; transform: translateX(0%) translateY(106%) scale(1) translateZ(0px); transition: none 0s;">  <div class="icon "></div>  <div class="title">    <span class="main">FailArmy</span>    <span class="annotation">Recommended channel</span>  </div>  <div class="content-container"><div class=" horizontal-list" tabindex="-1">  <div class="no-content-message">    <div class="text">No videos are available</div>  </div>  <div class="content"><div class=" sliding-highlighter" tabindex="-1" style="transform: translateX(0%) translateZ(0px); transition: none 0s;">  <div class="select">Select</div></div><div class=" carousel" tabindex="-1"><div class="item tile selected video-tile" tabindex="-1" style="transform: translateX(0%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div>  <div class="tile-top">    <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/rs-Ou-gjReQ/hqdefault.jpg);"></div>    <div class="voice-command">Cat Video</div>    <div class="decoration">      <div class="live-badge badge hidden"></div>      <div class="text-badge badge hidden"></div>      <div class="duration">7:01</div>    </div>  </div>  <div class="overlay hidden">    <div class="count"><div><strong></strong></div>videos</div>    <div class="icon"></div>  </div>  <div class="tile-bottom">    <div class="title">Cat Video</div>    <div class="details">      <div class="by">by Not a Cat</div>      <div class="views">4,792,124 views</div>      <div class="age">1 month ago</div>    </div>  </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(107%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div>  <div class="tile-top">    <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/x5ZxRObLLzE/hqdefault.jpg);"></div>    <div class="voice-command">Cat Video</div>    <div class="decoration">      <div class="live-badge badge hidden"></div>      <div class="text-badge badge hidden"></div>      <div class="duration">6:49</div>    </div>  </div>  <div class="overlay hidden">    <div class="count"><div><strong></strong></div>videos</div>    <div class="icon"></div>  </div>  <div class="tile-bottom">    <div class="title">Cat Video</div>    <div class="details">      <div class="by">by Not a Cat</div>      <div class="views">5,144,308 views</div>      <div class="age">2 weeks ago</div>    </div>  </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(214%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div>  <div class="tile-top">    <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/LZoilVdo7Hw/hqdefault.jpg);"></div>    <div class="voice-command">Cat Video</div>    <div class="decoration">      <div class="live-badge badge hidden"></div>      <div class="text-badge badge hidden"></div>      <div class="duration">7:06</div>    </div>  </div>  <div class="overlay hidden">    <div class="count"><div><strong></strong></div>videos</div>    <div class="icon"></div>  </div>  <div class="tile-bottom">    <div class="title">Cat Video</div>    <div class="details">      <div class="by">by Not a Cat</div>      <div class="views">3,485,342 views</div>      <div class="age">3 weeks ago</div>    </div>  </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(321%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div>  <div class="tile-top">    <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/0vEKItRNIb0/hqdefault.jpg);"></div>    <div class="voice-command">Cat Video</div>    <div class="decoration">      <div class="live-badge badge hidden"></div>      <div class="text-badge badge hidden"></div>      <div class="duration">6:54</div>    </div>  </div>  <div class="overlay hidden">    <div class="count"><div><strong></strong></div>videos</div>    <div class="icon"></div>  </div>  <div class="tile-bottom">    <div class="title">KidsCat Video</div>    <div class="details">      <div class="by">by Not a Cat</div>      <div class="views">3,469,457 views</div>      <div class="age">3 weeks ago</div>    </div>  </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(428%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div>  <div class="tile-top">    <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/8VstEBbwhnc/hqdefault.jpg);"></div>    <div class="voice-command">Cat Video</div>    <div class="decoration">      <div class="live-badge badge hidden"></div>      <div class="text-badge badge hidden"></div>      <div class="duration">6:52</div>    </div>  </div>  <div class="overlay hidden">    <div class="count"><div><strong></strong></div>videos</div>    <div class="icon"></div>  </div>  <div class="tile-bottom">    <div class="title">Cat Video</div>    <div class="details">      <div class="by">by Not a Cat</div>      <div class="views">4,334,756 views</div>      <div class="age">1 week ago</div>    </div>  </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(535%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div>  <div class="tile-top">    <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/qkKRkfZYhlE/hqdefault.jpg);"></div>    <div class="voice-command">Cat Video</div>    <div class="decoration">      <div class="live-badge badge hidden"></div>      <div class="text-badge badge hidden"></div>      <div class="duration">6:37</div>    </div>  </div>  <div class="overlay hidden">    <div class="count"><div><strong></strong></div>videos</div>    <div class="icon"></div>  </div>  <div class="tile-bottom">    <div class="title">Cat Video</div>    <div class="details">      <div class="by">by Not a Cat</div>      <div class="views">3,053,167 views</div>      <div class="age">2 weeks ago</div>    </div>  </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(642%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div>  <div class="tile-top">    <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/MODTYlzxY9U/hqdefault.jpg);"></div>    <div class="voice-command">Cat Video</div>    <div class="decoration">      <div class="live-badge badge hidden"></div>      <div class="text-badge badge hidden"></div>      <div class="duration">6:44</div>    </div>  </div>  <div class="overlay hidden">    <div class="count"><div><strong></strong></div>videos</div>    <div class="icon"></div>  </div>  <div class="tile-bottom">    <div class="title">Cat Video</div>    <div class="details">      <div class="by">by Not a Cat</div>      <div class="views">2,734,235 views</div>      <div class="age">1 week ago</div>    </div>  </div></div></div></div></div></div></div><div class=" shelf" tabindex="-1" style="height: 24em; opacity: 1; z-index: 3; transform: translateX(0%) translateY(212%) scale(1) translateZ(0px); transition: none 0s;">  <div class="icon "></div>  <div class="title">    <span class="main">Cyprien</span>    <span class="annotation">Recommended channel</span>  </div>  <div class="content-container"><div class=" horizontal-list" tabindex="-1">  <div class="no-content-message">    <div class="text">No videos are available</div>  </div>  <div class="content"><div class=" sliding-highlighter" tabindex="-1" style="transform: translateX(0%) translateZ(0px); transition: none 0s;">  <div class="select">Select</div></div><div class=" carousel" tabindex="-1"><div class="item tile selected video-tile" tabindex="-1" style="transform: translateX(0%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div>  <div class="tile-top">    <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/D-YPnDvTCmI/hqdefault.jpg);"></div>    <div class="voice-command">Cat Video</div>    <div class="decoration">      <div class="live-badge badge hidden"></div>      <div class="text-badge badge hidden"></div>      <div class="duration">5:02</div>    </div>  </div>  <div class="overlay hidden">    <div class="count"><div><strong></strong></div>videos</div>    <div class="icon"></div>  </div>  <div class="tile-bottom">    <div class="title">Cat Video</div>    <div class="details">      <div class="by">byby Not a Cat</div>      <div class="views">9,832,315 views</div>      <div class="age">1 month ago</div>    </div>  </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(107%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div>  <div class="tile-top">    <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/wNRUzu4fTgw/hqdefault.jpg);"></div>    <div class="voice-command">Cat Video</div>    <div class="decoration">      <div class="live-badge badge hidden"></div>      <div class="text-badge badge hidden"></div>      <div class="duration">11:44</div>    </div>  </div>  <div class="overlay hidden">    <div class="count"><div><strong></strong></div>videos</div>    <div class="icon"></div>  </div>  <div class="tile-bottom">    <div class="title">Cat Video</div>    <div class="details">      <div class="by">by Not a Cat</div>      <div class="views">15,035,125 views</div>      <div class="age">8 months ago</div>    </div>  </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(214%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div>  <div class="tile-top">    <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/GwzBLYGRj6c/hqdefault.jpg);"></div>    <div class="voice-command">Cat Video</div>    <div class="decoration">      <div class="live-badge badge hidden"></div>      <div class="text-badge badge hidden"></div>      <div class="duration">6:32</div>    </div>  </div>  <div class="overlay hidden">    <div class="count"><div><strong></strong></div>videos</div>    <div class="icon"></div>  </div>  <div class="tile-bottom">    <div class="title">Cat Video</div>    <div class="details">      <div class="by">by Not a Cat</div>      <div class="views">10,769,981 views</div>      <div class="age">4 months ago</div>    </div>  </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(321%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div>  <div class="tile-top">    <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/rtzlT78OEks/hqdefault.jpg);"></div>    <div class="voice-command">Cat Video</div>    <div class="decoration">      <div class="live-badge badge hidden"></div>      <div class="text-badge badge hidden"></div>      <div class="duration">6:32</div>    </div>  </div>  <div class="overlay hidden">    <div class="count"><div><strong></strong></div>videos</div>    <div class="icon"></div>  </div>  <div class="tile-bottom">    <div class="title">Cat Video</div>    <div class="details">      <div class="by">by Not a Cat</div>      <div class="views">12,174,818 views</div>      <div class="age">4 months ago</div>    </div>  </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(428%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div>  <div class="tile-top">    <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/eOOyxSMI0aE/hqdefault.jpg);"></div>    <div class="voice-command">Cat Video</div>    <div class="decoration">      <div class="live-badge badge hidden"></div>      <div class="text-badge badge hidden"></div>      <div class="duration">6:32</div>    </div>  </div>  <div class="overlay hidden">    <div class="count"><div><strong></strong></div>videos</div>    <div class="icon"></div>  </div>  <div class="tile-bottom">    <div class="title">Cat Video</div>    <div class="details">      <div class="by">by Not a Cat</div>      <div class="views">11,402,149 views</div>      <div class="age">5 months ago</div>    </div>  </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(535%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div>  <div class="tile-top">    <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/RL7grUEo960/hqdefault.jpg);"></div>    <div class="voice-command">Cat Video</div>    <div class="decoration">      <div class="live-badge badge hidden"></div>      <div class="text-badge badge hidden"></div>      <div class="duration">4:50</div>    </div>  </div>  <div class="overlay hidden">    <div class="count"><div><strong></strong></div>videos</div>    <div class="icon"></div>  </div>  <div class="tile-bottom">    <div class="title">Cat Video</div>    <div class="details">      <div class="by">by Not a Cat</div>      <div class="views">27,077,657 views</div>      <div class="age">1 year ago</div>    </div>  </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(642%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div>  <div class="tile-top">    <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/2A07xMhKC6g/hqdefault.jpg);"></div>    <div class="voice-command">Cat Video</div>    <div class="decoration">      <div class="live-badge badge hidden"></div>      <div class="text-badge badge hidden"></div>      <div class="duration">5:55</div>    </div>  </div>  <div class="overlay hidden">    <div class="count"><div><strong></strong></div>videos</div>    <div class="icon"></div>  </div>  <div class="tile-bottom">    <div class="title">Cat Video</div>    <div class="details">      <div class="by">by Not a Cat</div>      <div class="views">11,230,070 views</div>      <div class="age">6 months ago</div>    </div>  </div></div></div></div></div></div></div><div class=" shelf" tabindex="-1" style="height: 24em; opacity: 1; z-index: 3; transform: translateX(0%) translateY(212%) scale(1) translateZ(0px); transition: none 0s;">  <div class="icon "></div>  <div class="title">    <span class="main">Recently Uploaded</span>    <span class="annotation">Recommended videos</span>  </div>  <div class="content-container"><div class=" horizontal-list" tabindex="-1">  <div class="no-content-message">    <div class="text">No videos are available</div>  </div>  <div class="content"><div class=" sliding-highlighter" tabindex="-1" style="transform: translateX(0%) translateZ(0px); transition: none 0s;">  <div class="select">Select</div></div><div class=" carousel" tabindex="-1"><div class="item tile selected video-tile" tabindex="-1" style="transform: translateX(0%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div>  <div class="tile-top">    <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/Z31LDqbhN8U/hqdefault.jpg);"></div>    <div class="voice-command">Cat Video</div>    <div class="decoration">      <div class="live-badge badge hidden"></div>      <div class="text-badge badge hidden"></div>      <div class="duration">10:23</div>    </div>  </div>  <div class="overlay hidden">    <div class="count"><div><strong></strong></div>videos</div>    <div class="icon"></div>  </div>  <div class="tile-bottom">    <div class="title">Cat Video</div>    <div class="details">      <div class="by">by Not a Cat</div>      <div class="views">23,123 views</div>      <div class="age">5 days ago</div>    </div>  </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(107%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div>  <div class="tile-top">    <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/zzmrTdAtEu4/hqdefault.jpg);"></div>    <div class="voice-command">Cat Video</div>    <div class="decoration">      <div class="live-badge badge hidden"></div>      <div class="text-badge badge hidden"></div>      <div class="duration">14:09</div>    </div>  </div>  <div class="overlay hidden">    <div class="count"><div><strong></strong></div>videos</div>    <div class="icon"></div>  </div>  <div class="tile-bottom">    <div class="title">Cat Video</div>    <div class="details">      <div class="by">by Not a Cat</div>      <div class="views">23,595 views</div>      <div class="age">3 days ago</div>    </div>  </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(214%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div>  <div class="tile-top">    <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/1dXVzBU5p-Q/hqdefault.jpg);"></div>    <div class="voice-command">Cat Video</div>    <div class="decoration">      <div class="live-badge badge hidden"></div>      <div class="text-badge badge hidden"></div>      <div class="duration">14:26</div>    </div>  </div>  <div class="overlay hidden">    <div class="count"><div><strong></strong></div>videos</div>    <div class="icon"></div>  </div>  <div class="tile-bottom">    <div class="title">Cat Video</div>    <div class="details">      <div class="by">by Not a Cat</div>      <div class="views">53,711 views</div>      <div class="age">6 days ago</div>    </div>  </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(321%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div>  <div class="tile-top">    <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/spC883rn6zk/hqdefault.jpg);"></div>    <div class="voice-command">Cat Video</div>    <div class="decoration">      <div class="live-badge badge hidden"></div>      <div class="text-badge badge hidden"></div>      <div class="duration">17:41</div>    </div>  </div>  <div class="overlay hidden">    <div class="count"><div><strong></strong></div>videos</div>    <div class="icon"></div>  </div>  <div class="tile-bottom">    <div class="title">Cat Video</div>    <div class="details">      <div class="by">by Not a Cat</div>      <div class="views">62,903 views</div>      <div class="age">5 days ago</div>    </div>  </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(428%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div>  <div class="tile-top">    <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/XilhAJZ2qxs/hqdefault.jpg);"></div>    <div class="voice-command">Cat Video</div>    <div class="decoration">      <div class="live-badge badge hidden"></div>      <div class="text-badge badge hidden"></div>      <div class="duration">11:46</div>    </div>  </div>  <div class="overlay hidden">    <div class="count"><div><strong></strong></div>videos</div>    <div class="icon"></div>  </div>  <div class="tile-bottom">    <div class="title">Cat Video</div>    <div class="details">      <div class="by">by Not a Cat</div>      <div class="views">37,470 views</div>      <div class="age">2 days ago</div>    </div>  </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(535%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div>  <div class="tile-top">    <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/tCehxI5a1y0/hqdefault.jpg);"></div>    <div class="voice-command">Cat Video</div>    <div class="decoration">      <div class="live-badge badge hidden"></div>      <div class="text-badge badge hidden"></div>      <div class="duration">10:28</div>    </div>  </div>  <div class="overlay hidden">    <div class="count"><div><strong></strong></div>videos</div>    <div class="icon"></div>  </div>  <div class="tile-bottom">    <div class="title">Cat Video</div>    <div class="details">      <div class="by">by Not a Cat</div>      <div class="views">9,132 views</div>      <div class="age">2 days ago</div>    </div>  </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(642%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div>  <div class="tile-top">    <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/qrZcKwcVwk8/hqdefault.jpg);"></div>    <div class="voice-command">Cat Video</div>    <div class="decoration">      <div class="live-badge badge hidden"></div>      <div class="text-badge badge hidden"></div>      <div class="duration">8:43</div>    </div>  </div>  <div class="overlay hidden">    <div class="count"><div><strong></strong></div>videos</div>    <div class="icon"></div>  </div>  <div class="tile-bottom">    <div class="title">Cat Video</div>    <div class="details">      <div class="by">by Not a Cat</div>      <div class="views">23,568 views</div>      <div class="age">3 days ago</div>    </div>  </div></div></div></div></div></div></div></div></div>  </div></div>  <div id="settings-placeholder"></div>  <div id="search" class="hidden no-model search" tabindex="-1">  <div class="youtube-logo-top">    <div class="youtube-logo icon-youtube-logo"></div>    <div class="youtube-unlimited-logo icon-youtube-unlimited-logo"></div>  </div>  <div class="controls">    <div id="text-box-background">      <div id="search-text-box">        <span class="icon-search"></span>        <input id="search-input" autocomplete="off" class="no-model component" title="search" placeholder="Search..." tabindex="-1">        <span id="search-query" class="hidden"></span>      </div>    </div>    <div id="search-text-entry">      <div class="suggestions-container">        <div id="keyboard-icon" class="icon-search-keyboard"></div>        <div id="search-suggestions" class=" suggestions" tabindex="-1">  <div id="suggest-list" class=" list" data-model="{{model.suggestions}}" data-catch-mouse-move="{{catchMouseMove}}" data-scroll-on-focus="true" tabindex="-1"></div></div>      </div>      <div id="search-keyboard" class=" keyboard" tabindex="-1">  <div id="transliteration-container">    <div id="transliteration" class="no-model transliteration" tabindex="-1">  <div class=" list" data-model="{{transliterations}}" tabindex="-1">  </div></div>  </div>  <div id="keyboard-grid" class=" grid" tabindex="-1">  <div class="selected list" data-catch-mouse-move="{{catchRowMouseMove}}" data-item-factory="{{itemFactory}}" data-item-name="{{itemName}}" data-is-vertical="false" data-loop="{{loopRows}}" data-consume-events="{{consumeEvents}}" data-rate-limit="{{rateLimit}}" tabindex="-1"><div class="selected button" tabindex="-1"><span class="label">a</span></div><div class=" button" tabindex="-1"><span class="label">b</span></div><div class=" button" tabindex="-1"><span class="label">c</span></div><div class=" button" tabindex="-1"><span class="label">d</span></div><div class=" button" tabindex="-1"><span class="label">e</span></div><div class=" button" tabindex="-1"><span class="label">f</span></div><div class=" button" tabindex="-1"><span class="label">g</span></div><div class="icon-key-delete button" tabindex="-1"><span class="label"></span></div></div><div class=" list" data-catch-mouse-move="{{catchRowMouseMove}}" data-item-factory="{{itemFactory}}" data-item-name="{{itemName}}" data-is-vertical="false" data-loop="{{loopRows}}" data-consume-events="{{consumeEvents}}" data-rate-limit="{{rateLimit}}" tabindex="-1"><div class="selected button" tabindex="-1"><span class="label">h</span></div><div class=" button" tabindex="-1"><span class="label">i</span></div><div class=" button" tabindex="-1"><span class="label">j</span></div><div class=" button" tabindex="-1"><span class="label">k</span></div><div class=" button" tabindex="-1"><span class="label">l</span></div><div class=" button" tabindex="-1"><span class="label">m</span></div><div class=" button" tabindex="-1"><span class="label">n</span></div><div class="clear-query-tile button" tabindex="-1"><span class="label">Clear</span></div></div><div class=" list" data-catch-mouse-move="{{catchRowMouseMove}}" data-item-factory="{{itemFactory}}" data-item-name="{{itemName}}" data-is-vertical="false" data-loop="{{loopRows}}" data-consume-events="{{consumeEvents}}" data-rate-limit="{{rateLimit}}" tabindex="-1"><div class="selected button" tabindex="-1"><span class="label">o</span></div><div class=" button" tabindex="-1"><span class="label">p</span></div><div class=" button" tabindex="-1"><span class="label">q</span></div><div class=" button" tabindex="-1"><span class="label">r</span></div><div class=" button" tabindex="-1"><span class="label">s</span></div><div class=" button" tabindex="-1"><span class="label">t</span></div><div class=" button" tabindex="-1"><span class="label">u</span></div><div class="numbers-toggle-tile button" tabindex="-1"><span class="label">&amp;123</span></div></div><div class=" list" data-catch-mouse-move="{{catchRowMouseMove}}" data-item-factory="{{itemFactory}}" data-item-name="{{itemName}}" data-is-vertical="false" data-loop="{{loopRows}}" data-consume-events="{{consumeEvents}}" data-rate-limit="{{rateLimit}}" tabindex="-1"><div class="selected button" tabindex="-1"><span class="label">v</span></div><div class=" button" tabindex="-1"><span class="label">w</span></div><div class=" button" tabindex="-1"><span class="label">x</span></div><div class=" button" tabindex="-1"><span class="label">y</span></div><div class=" button" tabindex="-1"><span class="label">z</span></div><div class=" button" tabindex="-1"><span class="label">-</span></div><div class=" button" tabindex="-1"><span class="label">'</span></div></div></div>  <div id="letter-suggest" class=" list" data-is-vertical="true" data-catch-mouse-move="true" data-model="{{letterSuggestions}}" tabindex="-1"></div>  <div>    <div id="keyboard-spacebar" class="icon-key-space button" tabindex="-1"><span class="label"></span></div>  </div></div>      <div class="search-hint">        Voice search is not supported.      </div>    </div>  </div>  <div class="search-pairing">    <div class="search-img"></div>    <div class="search-message">      <div class="title">Search Faster</div>      <div class="pairing no-model dial-upsell pairing-dialog" id="pairing" tabindex="-1">  <div class="dialog-large-icon icon-settings-pair"></div>  <div class="connection-instructions icon-dialog-content">    <div class="dial-upsell-content">      Connect one or more devices to the same Wi-Fi network and select <div class="cast-icon">&nbsp;</div>    </div>    <div class="manual-connect-content">      <div class="connection-steps">        <div class="with-dial-connect-step1">        <div class="step1">Or go to</div>        <div class="pair-url">youtube.com/pair</div>        </div>        <div class="no-dial-connect-step1">        <div class="step1">Go to</div>        <div class="pair-url">youtube.com/pair</div>        </div>        <div class="no-dial-connect-step2">        <div class="step2">and enter</div>        <div class="pair-code">Loading...</div>        </div>      </div>    </div>  </div></div>    </div>  </div>  <div id="results-placeholder"></div></div>  <div id="pointer-overlay" class="-overlay hidden"></div>  <div id="guide" class="focused guide" tabindex="-1">  <div id="user-info-background">    <div class="user-info-container">      <div id="guide-user-avatar" style="background-image: url()"></div>      <div class="guide-user-text">        <div class="guide-user-name"></div>        <div class="guide-user-unlimited"></div>      </div>    </div>  </div>  <div class="collapsed-guide"></div>  <div class="guide-carousel-background"></div>  <div class="collapsed-guide-icons">    <div class="collapsed-guide-icon icon-guide-what-to-watch"></div>    <div class="collapsed-guide-icon icon-guide-my-subs"></div>    <div class="collapsed-guide-icon icon-popular"></div>    <div class="collapsed-guide-icon icon-music"></div>    <div class="collapsed-guide-icon icon-ellipsis"></div>  </div>  <div id="error-message">Sorry, the rest of this Guide isn’t available right now.</div><div class=" sliding-highlighter" tabindex="-1" style="transform: translateY(200%) translateZ(0px); transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 200ms cubic-bezier(0.4, 0, 0.2, 1);">  <div class="select">Select</div></div><div class="focused carousel" tabindex="-1"><div class=" guide-button" tabindex="-1" style="transform: translateY(0%) translateZ(0px); transition: none 0s;">  <div class="guide-button-icon icon-people">    <div class="no-model image" data-image-url="{{model.iconUrl}}" tabindex="-1"></div>  </div>  <div class="guide-button-title">Sign In</div></div><div class=" guide-button" tabindex="-1" style="transform: translateY(100%) translateZ(0px); transition: none 0s;">  <div class="guide-button-icon icon-search">    <div class="no-model image" data-image-url="{{model.iconUrl}}" tabindex="-1"></div>  </div>  <div class="guide-button-title">Search</div></div><div class="focused selected guide-button" tabindex="-1" style="transform: translateY(200%) translateZ(0px); transition: none 0s;">  <div class="guide-button-icon icon-guide-what-to-watch">    <div class="no-model image" data-image-url="{{model.iconUrl}}" tabindex="-1"></div>  </div>  <div class="guide-button-title">Home</div></div><div class=" guide-button" tabindex="-1" style="transform: translateY(300%) translateZ(0px); transition: none 0s;">  <div class="guide-button-icon icon-player-settings">    <div class="no-model image" data-image-url="{{model.iconUrl}}" tabindex="-1"></div>  </div>  <div class="guide-button-title">Settings</div></div><div class="disabled guide-button" tabindex="-1" style="transform: translateY(400%) translateZ(0px); transition: none 0s;">  <div class="guide-button-icon ">    <div class="no-model image" data-image-url="{{model.iconUrl}}" tabindex="-1"></div>  </div>  <div class="guide-button-title">Best of YouTube</div></div><div class="has-image guide-button" tabindex="-1" style="transform: translateY(500%) translateZ(0px); transition: none 0s;">  <div class="guide-button-icon ">    <div class="no-model image" data-image-url="{{model.iconUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/i/F0pVplsI8R5kcAqgtoRqoA/1.jpg);"></div>  </div>  <div class="guide-button-title">Popular on YouTube</div></div><div class="has-image guide-button" tabindex="-1" style="transform: translateY(600%) translateZ(0px); transition: none 0s;">  <div class="guide-button-icon ">    <div class="no-model image" data-image-url="{{model.iconUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/i/-9-kyTW8ZkZNDHQJ6FgpwQ/1.jpg);"></div>  </div>  <div class="guide-button-title">Music</div></div><div class="has-image guide-button" tabindex="-1" style="transform: translateY(700%) translateZ(0px); transition: none 0s;">  <div class="guide-button-icon ">    <div class="no-model image" data-image-url="{{model.iconUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/i/Egdi0XIXXZ-qJOFPf4JSKw/1.jpg);"></div>  </div>  <div class="guide-button-title">Sports</div></div><div class="has-image guide-button" tabindex="-1" style="transform: translateY(800%) translateZ(0px); transition: none 0s;">  <div class="guide-button-icon ">    <div class="no-model image" data-image-url="{{model.iconUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/i/OpNcN46UbXVtpKMrmU4Abg/1.jpg);"></div>  </div>  <div class="guide-button-title">Gaming</div></div><div class="has-image guide-button" tabindex="-1" style="transform: translateY(900%) translateZ(0px); transition: none 0s;">  <div class="guide-button-icon ">    <div class="no-model image" data-image-url="{{model.iconUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/i/YfdidRxbB8Qhf0Nx7ioOYw/1.jpg);"></div>  </div>  <div class="guide-button-title">News</div></div><div class="has-image guide-button" tabindex="-1" style="transform: translateY(1000%) translateZ(0px); transition: none 0s;">  <div class="guide-button-icon ">    <div class="no-model image" data-image-url="{{model.iconUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/i/4R8DWoMoI7CAwX8_LjQHig/1.jpg);"></div>  </div>  <div class="guide-button-title">Live</div></div><div class="has-image guide-button" tabindex="-1" style="transform: translateY(1100%) translateZ(0px); transition: none 0s;">  <div class="guide-button-icon ">    <div class="no-model image" data-image-url="{{model.iconUrl}}" tabindex="-1" style="background-image: url(yt3.ggpht.com/-dL2jeHlm2Ok/AAAAAAAAAAI/AAAAAAAAAAA/ZCMMkRj-hrw/s88-c-k-no/photo.jpg);"></div>  </div>  <div class="guide-button-title">Spotlight</div></div><div class="has-image guide-button" tabindex="-1" style="transform: translateY(1200%) translateZ(0px); transition: none 0s;">  <div class="guide-button-icon ">    <div class="no-model image" data-image-url="{{model.iconUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/i/xAgnFbkxldX6YUEvdcNjnA/1.jpg);"></div>  </div>  <div class="guide-button-title">Film &amp; Animation</div></div><div class="has-image guide-button" tabindex="-1" style="transform: translateY(1300%) translateZ(0px); transition: none 0s;">  <div class="guide-button-icon ">    <div class="no-model image" data-image-url="{{model.iconUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/i/i-g4cjqGV7jvU8aeSuj0jQ/1.jpg);"></div>  </div>  <div class="guide-button-title">Entertainment</div></div></div></div>  <div class="no-model application-message" tabindex="-1"></div>  <div id="spinner" class="hidden no-model spinner" tabindex="-1">  <div class="fallback-loading-indicator">LOADING...</div>  <div class="loading-indicator">    <div class="dot" id="dot1"></div>    <div class="dot" id="dot2"></div>    <div class="dot" id="dot3"></div>    <div class="dot" id="dot4"></div>    <div class="dot" id="dot5"></div>    <div class="dot" id="dot6"></div>    <div class="dot" id="dot7"></div>    <div class="dot" id="dot8"></div>  </div></div>  <h1 class=" debug-watermark" tabindex="-1"></h1>  <div class="browse-sets no-model dialog" id="dialog" tabindex="-1">  <div id="dialog-wrapper">    <div class="dialog-icon"></div> <!-- Only used for flat UI -->    <div class="dialog-contents">      <div class="header">        <div class="title"></div>      </div>      <div class="no-model component" id="dialog-view" tabindex="-1"></div>      <div class="buttons">        <div id="dialog-cancel-button" class="no-model button" tabindex="-1"><span class="label"></span></div>        <div id="dialog-ok-button" class="no-model button" tabindex="-1"><span class="label"></span></div>      </div>    </div>  </div></div>  <div id="voice-footer-placeholder"></div>  <div id="legend" class="close-guide search legend" tabindex="-1">  <div class="more no-model legend-item" tabindex="-1">  <span class="icon icon-player-more"></span>  <span class="title">Show More</span></div>  <div class="back no-model legend-item" tabindex="-1">  <span class="icon "></span>  <span class="title">Go Back</span></div>  <div class="exit no-model legend-item" tabindex="-1">  <span class="icon "></span>  <span class="title">Exit</span></div>  <div class="reversed-back no-model legend-item" tabindex="-1">  <span class="icon "></span>  <span class="title">Go Back</span></div>  <div class="search no-model legend-item" tabindex="-1">  <span class="icon "></span>  <span class="title">Search</span></div>  <div class="space no-model legend-item" tabindex="-1">  <span class="icon "></span>  <span class="title">Space</span></div>  <div class="home no-model legend-item" tabindex="-1">  <span class="icon "></span>  <span class="title">Go Home</span></div>  <div class="modify no-model legend-item" tabindex="-1">  <span class="icon "></span>  <span class="title">Modify</span></div>  <div class="delete no-model legend-item" tabindex="-1">  <span class="icon "></span>  <span class="title">Delete</span></div>  <div class="guide no-model legend-item" tabindex="-1">  <span class="icon "></span>  <span class="title">Open Guide</span></div>  <div class="close-guide no-model legend-item" tabindex="-1">  <span class="icon "></span>  <span class="title">Close Guide</span></div></div>  <div class=" toaster" tabindex="-1">  <div class=" list" data-model="{{model}}" tabindex="-1"></div></div>  <div class="no-model engagement-indicator" tabindex="-1"></div>  <div class=" hidden" id="snap-controls" data-is-hidden="true"></div>  <div id="context-menu-placeholder" class="hidden"></div>  <div class="hidden no-model fps" tabindex="-1"></div></div></div>
-    
-    
-  
-
-<div id="window-resizer-tooltip"><a href="#" title="Edit settings"></a><span class="tooltipTitle">Window size: </span><span class="tooltipWidth" id="winWidth"></span> x <span class="tooltipHeight" id="winHeight"></span><br><span class="tooltipTitle">Viewport size: </span><span class="tooltipWidth" id="vpWidth"></span> x <span class="tooltipHeight" id="vpHeight"></span></div></body></html>
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/yt3.ggpht.com/-dL2jeHlm2Ok/AAAAAAAAAAI/AAAAAAAAAAA/ZCMMkRj-hrw/s88-c-k-no/photo.jpg b/src/cobalt/layout_tests/testdata/benchmarks/yt3.ggpht.com/-dL2jeHlm2Ok/AAAAAAAAAAI/AAAAAAAAAAA/ZCMMkRj-hrw/s88-c-k-no/photo.jpg
deleted file mode 100644
index 56b34fe..0000000
--- a/src/cobalt/layout_tests/testdata/benchmarks/yt3.ggpht.com/-dL2jeHlm2Ok/AAAAAAAAAAI/AAAAAAAAAAA/ZCMMkRj-hrw/s88-c-k-no/photo.jpg
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/css3-flexbox/combined-baseline-expected.png b/src/cobalt/layout_tests/testdata/css3-flexbox/combined-baseline-expected.png
new file mode 100644
index 0000000..4afe5c9
--- /dev/null
+++ b/src/cobalt/layout_tests/testdata/css3-flexbox/combined-baseline-expected.png
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/css3-flexbox/combined-baseline.html b/src/cobalt/layout_tests/testdata/css3-flexbox/combined-baseline.html
new file mode 100644
index 0000000..ec8d3a2
--- /dev/null
+++ b/src/cobalt/layout_tests/testdata/css3-flexbox/combined-baseline.html
@@ -0,0 +1,181 @@
+<!DOCTYPE html>
+<!--
+ | Combined tests for basic functionality of CSS Flexible Box Layout Module.
+ |   https://www.w3.org/TR/css-flexbox-1
+ -->
+<html>
+<head>
+<style>
+  body {
+    margin: 0px;
+    font-family: Roboto;
+    background-color: #808080;
+    font-size: 12px;
+  }
+  .vsized {
+    height: 38px;
+  }
+  .flex {
+    display: flex;
+    color: #99b9f3;
+    background-color: #ffee00;
+    opacity: 0.75;
+  }
+  .inlineflex {
+    display: inline-flex;
+    color: #99b9f3;
+    background-color: #ffee01;
+    opacity: 0.75;
+  }
+  .row {
+    flex-flow: row wrap;
+   }
+  .column {
+    flex-flow: column wrap;
+   }
+  .container {
+    overflow: hidden;
+    min-width: 2px;
+    padding: 2px;
+    border: 2px solid #000060;
+    outline: 2px solid #00f000;
+    margin: 6px;
+    border-bottom-width: 10px;
+  }
+  .item {
+    flex: 1 1 50px;
+    /* blue */
+    margin: 1px;
+    order: 0;
+  }
+  div > span {
+    background-color: #0047ab;
+  }
+</style>
+</head>
+<body>
+<div>
+
+-hg
+<div class="vsized inlineflex row container">
+  <span style="align-self: flex-end;">end</span>
+  <span style="align-self: flex-start;">start</span>
+  <span style="align-self: center;">center</span>
+  <span class="vsized" style="align-self: stretch;">stretch</span>
+</div>
+hg-hg
+<div class="vsized inlineflex row container">
+  <span style="align-self: center;">center</span>
+  <span style="align-self: flex-end;">end</span>
+  <span style="align-self: flex-start;">start</span>
+  <span class="vsized" style="align-self: stretch;">stretch</span>
+</div>
+hg-hg
+<div class="vsized inlineflex row container">
+  <span style="align-self: flex-start;">start</span>
+  <span style="align-self: flex-end;">end</span>
+  <span style="align-self: center;">center</span>
+  <span class="vsized" style="align-self: stretch;">stretch</span>
+</div>
+hg- 
+</div><div>
+-hg
+<div class="vsized inlineflex row container">
+  <span style="align-self: flex-start;">start</span>
+  <span style="align-self: flex-end;">end</span>
+  <span style="align-self: center;">center</span>
+  <span style="align-self: baseline;">hg</span>
+  <span style="margin-top: auto; font-size: 2em; align-self: baseline;">hg</span>
+  <span class="vsized" style="align-self: stretch;">stretch</span>
+</div>
+hg-hg
+<div class="vsized inlineflex row container">
+  <span style="align-self: flex-start;">start</span>
+  <span style="align-self: flex-end;">end</span>
+  <span style="align-self: center;">center</span>
+  <span style="margin-top: auto; font-size: 2em; align-self: baseline;">hg</span>
+  <span class="vsized" style="align-self: stretch;">stretch</span>
+</div>
+hg-hg
+<div class="vsized inlineflex row container">
+  <span style="align-self: flex-start;">start</span>
+  <span style="align-self: flex-end;">end</span>
+  <span style="align-self: center;">center</span>
+  <span style="align-self: baseline;">hg</span>
+  <span style="font-size: 2em; align-self: baseline;">hg</span>
+  <span class="vsized" style="align-self: stretch;">stretch</span>
+</div>
+hg- 
+</div><div>
+-hg
+<div class="vsized inlineflex row container">
+  <span style="align-self: baseline;">hg</span>
+  <span style="font-size: 2em; align-self: baseline;">hg</span>
+  <span style="align-self: flex-start;">start</span>
+  <span style="align-self: flex-end;">end</span>
+  <span style="align-self: center;">center</span>
+  <span class="vsized" style="align-self: stretch;">stretch</span>
+</div>
+hg-hg
+<div class="vsized inlineflex row container">
+  <span style="font-size: 2em; align-self: baseline;">hg</span>
+  <span style="align-self: baseline;">hg</span>
+  <span style="align-self: flex-start;">start</span>
+  <span style="align-self: flex-end;">end</span>
+  <span style="align-self: center;">center</span>
+  <span class="vsized" style="align-self: stretch;">stretch</span>
+</div>
+hg-hg
+<div class="vsized inlineflex row container">
+  <span style="align-self: flex-start;">start</span>
+  <span style="align-self: flex-end;">end</span>
+  <span style="align-self: center;">center</span>
+  <span class="vsized" style="align-self: stretch;">stretch</span>
+  <span style="font-size: 2em; align-self: baseline;">hg</span>
+  <span style="align-self: baseline;">hg</span>
+</div>
+hg- 
+</div><div>
+-hg
+<div class="vsized inlineflex row container">
+  <span style="display: inline-block; align-self: center; width: 10px; height: 20px;"></span>
+  <span style="align-self: flex-start;">start</span>
+  <span style="align-self: flex-end;">end</span>
+  <span style="align-self: center;">center</span>
+  <span class="vsized" style="align-self: stretch;">stretch</span>
+</div>
+hg-hg
+<div class="vsized inlineflex row container">
+</div>
+hg-hg
+<div class="vsized inlineflex row container">
+  <span></span>
+</div>
+hg-hg
+<div class="vsized inlineflex column container">
+  <span style="display: inline-block; width: 10px; height: 10px;"></span>
+  <span style="display: inline-block; width: 10px; height: 10px;"></span>
+  <span style="display: inline-block; width: 10px; height: 10px;"></span>
+</div>
+hg-hg
+<div class="vsized inlineflex column container">
+  <span style="display: inline-block; width: 10px; height: 30px;"></span>
+</div>
+hg-hg
+<div class="vsized inlineflex column container">
+  <span style="display: inline-block; width: 10px; height: 10px;"></span>
+</div>
+hg-hg
+<div class="vsized inlineflex column container">
+  <span></span>
+</div>
+hg-hg
+<div class="vsized inlineflex column container">
+</div>
+hg-
+
+</div>
+
+</body>
+</html>
+
diff --git a/src/cobalt/layout_tests/testdata/css3-flexbox/combined-positioning-tests-expected.png b/src/cobalt/layout_tests/testdata/css3-flexbox/combined-positioning-tests-expected.png
index a755805..cbf7803 100644
--- a/src/cobalt/layout_tests/testdata/css3-flexbox/combined-positioning-tests-expected.png
+++ b/src/cobalt/layout_tests/testdata/css3-flexbox/combined-positioning-tests-expected.png
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/css3-flexbox/combined-shrinking-and-justify-content-expected.png b/src/cobalt/layout_tests/testdata/css3-flexbox/combined-shrinking-and-justify-content-expected.png
new file mode 100644
index 0000000..010813f
--- /dev/null
+++ b/src/cobalt/layout_tests/testdata/css3-flexbox/combined-shrinking-and-justify-content-expected.png
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/css3-flexbox/combined-shrinking-and-justify-content.html b/src/cobalt/layout_tests/testdata/css3-flexbox/combined-shrinking-and-justify-content.html
new file mode 100644
index 0000000..128a8f0
--- /dev/null
+++ b/src/cobalt/layout_tests/testdata/css3-flexbox/combined-shrinking-and-justify-content.html
@@ -0,0 +1,271 @@
+<!DOCTYPE html>
+<!--
+ | Combined tests for basic functionality of CSS Flexible Box Layout Module.
+ |   https://www.w3.org/TR/css-flexbox-1
+ | This test focuses on shrinking flex items and justify-content values.
+ -->
+<html>
+<head>
+<style>
+  body {
+    margin: 0px;
+    font-family: Roboto;
+    background-color: #808080;
+    font-size: 12px;
+  }
+  .inlineflex {
+    display:  inline-flex;
+    color: #99b9f3;
+    background-color: #ffee08;
+    opacity: 0.75;
+  }
+  .flex {
+    display:  flex;
+    color: #99b9f3;
+    background-color: #ffee08;
+    opacity: 0.75;
+  }
+
+  .widesized {
+    width: 100px;
+    height: 10px;
+    -no-margin-left: auto;
+  }
+  .sized {
+    width: 50px;
+    height: 10px;
+  }
+  .container {
+    flex-flow: row nowrap;
+    padding: 1px;
+    border: 1px solid #000060;
+    outline: 1px solid #00f000;
+    margin: 3px;
+  }
+  .flex-end {
+    justify-content: flex-end;
+    align-items: center;
+    align-content: center;
+  }
+  .center {
+    justify-content: center;
+    align-items: center;
+    align-content: center;
+  }
+  .space-between {
+    justify-content: space-between;
+    align-items: center;
+    align-content: center;
+  }
+  .center {
+    justify-content: center;
+    align-items: center;
+    align-content: center;
+  }
+  .space-around {
+    justify-content: space-around;
+    align-items: center;
+    align-content: center;
+  }
+  .blue {
+    background-color: #0047ab;
+  }
+  .red {
+    background-color: red;
+  }
+  .hidden {
+    overflow: hidden;
+  }
+  .visible {
+    overflow: visible;
+  }
+  .shrink-1 {
+    flex-shrink: 1;
+  }
+  .shrink-0-5 {
+    flex-shrink: 0.5;
+  }
+  .shrink-0-25 {
+    flex-shrink: 0.25;
+  }
+  .basis-0 {
+    flex-basis: 0;
+  }
+  .basis-big {
+    flex-basis: 100px;
+  }
+
+</style>
+</head>
+<body>
+<div style="display:inline-block; margin: 0 5px 0 40px; width: 50px;">
+
+<div class="sized flex flex-end container">
+  <div class="blue widesized shrink-1"></div>
+</div>
+
+<div class="sized flex flex-end container">
+  <div class="red widesized shrink-1"></div>
+  <div class="blue widesized shrink-0-5"></div>
+</div>
+
+<div class="sized flex flex-end container">
+  <div class="red widesized shrink-1"></div>
+  <div class="blue widesized shrink-1"></div>
+</div>
+
+<div class="sized flex flex-end container">
+  <div class="blue widesized shrink-0-5"></div>
+</div>
+
+<div class="sized flex flex-end container">
+  <div class="red widesized shrink-0-5"></div>
+  <div class="blue widesized shrink-0-25"></div>
+</div>
+
+<div class="sized flex flex-end container">
+  <div class="red widesized shrink-0-5 basis-big"></div>
+  <div class="blue widesized shrink-0-25 basis-big"></div>
+</div>
+
+flex-end
+</div>
+<div style="display:inline-block; margin: 0 55px 0 0; width: 50px;">
+
+<div class="sized flex container">
+  <div class="blue widesized shrink-1"></div>
+</div>
+
+<div class="sized flex container">
+  <div class="red widesized shrink-1"></div>
+  <div class="blue widesized shrink-0-5"></div>
+</div>
+
+<div class="sized flex container">
+  <div class="red widesized shrink-1"></div>
+  <div class="blue widesized shrink-1"></div>
+</div>
+
+<div class="sized flex container">
+  <div class="blue widesized shrink-0-5"></div>
+</div>
+
+<div class="sized flex container">
+  <div class="red widesized shrink-0-5"></div>
+  <div class="blue widesized shrink-0-25"></div>
+</div>
+
+<div class="sized flex container">
+  <div class="red widesized shrink-0-5 basis-big"></div>
+  <div class="blue widesized shrink-0-25 basis-big"></div>
+</div>
+
+flex-start
+</div>
+<div style="display:inline-block; margin: 0 0 0 5px; width: 75px;">
+
+
+<div class="sized flex space-around container">
+  <div class="blue widesized shrink-1"></div>
+</div>
+
+<div class="sized flex space-around container">
+  <div class="red widesized shrink-1"></div>
+  <div class="blue widesized shrink-0-5"></div>
+</div>
+
+<div class="sized flex space-around container">
+  <div class="red widesized shrink-1"></div>
+  <div class="blue widesized shrink-1"></div>
+</div>
+
+<div class="sized flex space-around container">
+  <div class="blue widesized shrink-0-5"></div>
+</div>
+
+<div class="sized flex space-around container">
+  <div class="red widesized shrink-0-5"></div>
+  <div class="blue widesized shrink-0-25"></div>
+</div>
+
+<div class="sized flex space-around container">
+  <div class="red widesized shrink-0-5 basis-big"></div>
+  <div class="blue widesized shrink-0-25 basis-big"></div>
+</div>
+
+
+space-around
+</div>
+<div style="display:inline-block; margin: 0 0 0 15px; width: 75px;">
+
+
+<div class="sized flex center container">
+  <div class="blue widesized shrink-1"></div>
+</div>
+
+<div class="sized flex center container">
+  <div class="red widesized shrink-1"></div>
+  <div class="blue widesized shrink-0-5"></div>
+</div>
+
+<div class="sized flex center container">
+  <div class="red widesized shrink-1"></div>
+  <div class="blue widesized shrink-1"></div>
+</div>
+
+<div class="sized flex center container">
+  <div class="blue widesized shrink-0-5"></div>
+</div>
+
+<div class="sized flex center container">
+  <div class="red widesized shrink-0-5"></div>
+  <div class="blue widesized shrink-0-25"></div>
+</div>
+
+<div class="sized flex center container">
+  <div class="red widesized shrink-0-5 basis-big"></div>
+  <div class="blue widesized shrink-0-25 basis-big"></div>
+</div>
+
+
+center
+</div>
+<div style="display:inline-block; margin: 0 0 0 5px; width: 90px;">
+
+
+
+<div class="sized flex space-between container">
+  <div class="blue widesized shrink-1"></div>
+</div>
+
+<div class="sized flex space-between container">
+  <div class="red widesized shrink-1"></div>
+  <div class="blue widesized shrink-0-5"></div>
+</div>
+
+<div class="sized flex space-between container">
+  <div class="red widesized shrink-1"></div>
+  <div class="blue widesized shrink-1"></div>
+</div>
+
+<div class="sized flex space-between container">
+  <div class="blue widesized shrink-0-5"></div>
+</div>
+
+<div class="sized flex space-between container">
+  <div class="red widesized shrink-0-5"></div>
+  <div class="blue widesized shrink-0-25"></div>
+</div>
+
+<div class="sized flex space-between container">
+  <div class="red widesized shrink-0-5 basis-big"></div>
+  <div class="blue widesized shrink-0-25 basis-big"></div>
+</div>
+
+
+space-between
+</div>
+
+</body>
+</html>
+
diff --git a/src/cobalt/layout_tests/testdata/css3-flexbox/combined-with-baselines-percentages-expected.png b/src/cobalt/layout_tests/testdata/css3-flexbox/combined-with-baselines-percentages-expected.png
index 1475746..881adc4 100644
--- a/src/cobalt/layout_tests/testdata/css3-flexbox/combined-with-baselines-percentages-expected.png
+++ b/src/cobalt/layout_tests/testdata/css3-flexbox/combined-with-baselines-percentages-expected.png
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/css3-flexbox/combined-with-baselines-percentages.html b/src/cobalt/layout_tests/testdata/css3-flexbox/combined-with-baselines-percentages.html
index 6319586..5629e51 100644
--- a/src/cobalt/layout_tests/testdata/css3-flexbox/combined-with-baselines-percentages.html
+++ b/src/cobalt/layout_tests/testdata/css3-flexbox/combined-with-baselines-percentages.html
@@ -22,7 +22,7 @@
     height: 40px;
   }
   .small {
-    width: 100px;
+    width: 30px;
     min-height: 40px;
   }
   .flex {
@@ -83,56 +83,113 @@
   <span class="blue" style="flex-basis: 20%; margin: 0px; border: 0px; padding: 0px; align-self:center;">WWWW</span>
   <span class="blue" style="flex-basis: 95%; margin: 0px; border: 0px; padding: 0px; align-self:center;">XXXX</span>
 </div>
-[5]
-
-(1)
+gbHO-
 <div class="small inlineflex container">
   <span class="blue" style="flex-basis: 20%;">a</span>
 </div>
-(2a)
 <div class="inlineflex container">
   <span class="blue">AAa</span>
 </div>
-(2b)
 <div class="inlineflex container">
   <span class="blue" style="overflow:hidden; flex-basis: 20px;">AAb</span>
 </div>
-(2c)
 <div class="inlineflex container">
   <span class="blue" style="overflow:hidden; flex-basis: 20px; max-width:21px;">AAc</span>
 </div>
-(3)
 <div class="inlineflex container green">
 <div class="inlineflex container">
-  <span class="blue" style="overflow:hidden; flex-basis: 50%;">DDD</span>
+  <span class="blue" style="overflow:hidden; flex-basis: 50%;">DDh</span>
 </div>
 </div>
-(4a)
+<div class="inlineflex container green">
+<div class="inlineflex container">
+  <span class="blue" style="flex-basis: 50%;">DDv</span>
+</div>
+</div>
 <div class="vsized inlineflex container">
-  <span class="blue" style="flex-basis: 12%;">VVVV</span>
+  <span class="blue" style="flex-basis: 5%;">V1V</span>
 </div>
-(4b)
 <div class="vsized inlineflex container">
-  <span class="blue" style="flex-basis: 12%; max-width:25px;">VVVV</span>
+  <span class="blue" style="flex-basis: 12%; max-width:15px;">V2V</span>
 </div>
-(5)
-<div class="vsized inlineflex container" style="min-width: 100px">
-  <span class="blue" style="flex-basis: 12%; max-width:25px;">VVVV</span>
+<div class="vsized inlineflex container">
+  <span class="blue" style="flex-basis: 12%; max-width:70%;">V3V</span>
 </div>
-(6)
-<div class="vsized inlineflex container" style="max-width: 5px;">
+<div class="vsized inlineflex container" style="min-width: 5%">
+  <span class="blue" style="flex-basis: 12%; max-width:15px;">V4V</span>
+</div>
+<div class="vsized inlineflex container" style="width: 40px;">
+  <span class="blue" style="flex-basis: 12%; max-width:15px;">V5V</span>
+</div>
+<div class="vsized inlineflex container" style="width: 40px;">
+  <span class="blue" style="flex-basis: 12%; max-width:30%;">V6V</span>
+</div>
+<div class="vsized inlineflex container" style="min-width: 5%">
+  <span class="blue" style="flex-basis: 12%; max-width:15px;">V7V</span>
+</div>
+<div class="vsized inlineflex container" style="min-width: 5%">
+  <span class="blue" style="flex-basis: 12%; max-width:50%;">V8V</span>
+</div>
+
+
+<div class="vsized inlineflex container" style="max-width: 1%;">
   <span class="blue">VVVV</span>
 </div>
-(7)
-<div class="vsized inlineflex container" style="max-width: 5px; overflow: visible;">
+<div class="vsized inlineflex container" style="max-width: 1%; overflow: visible;">
   <span class="blue">VVVV</span>
 </div>
-(8)
+<div class="vsized inlineflex container" style="max-width: 1%;">
+  <span class="blue">VVVV</span>
+</div>
+<div class="vsized inlineflex container" style="max-width: 1%; overflow: visible;">
+  <span class="blue">VVVV</span>
+</div>
+
+<div class="vsized inlineflex container" style="max-width: 10px;">
+  <span class="blue">HHHH</span>
+</div>
+
+<div class="vsized inlineflex container" style="max-width: 10px; overflow: visible;">
+  <span class="blue">VVVV</span>
+</div>
+
+<div class="vsized inlineflex container" style="max-width: 10px;">
+  <span class="blue" style="overflow: hidden;">HHHH</span>
+</div>
+
+<div class="vsized inlineflex container" style="max-width: 10px;">
+  <span class="blue" style="overflow: visible;">HHHH</span>
+</div>
+
+<div class="vsized inlineflex container" style="max-width: 10px;">
+  <span class="blue" style="min-width: 1px;">MHHM</span>
+</div>
+
+<div class="vsized inlineflex container" style="max-width: 10px; overflow: visible;">
+  <span class="blue" style="min-width: 1px;">MVVM</span>
+</div>
+
+<div class="vsized inlineflex container" style="max-width: 10px;">
+  <span class="blue" style="max-width: 4px; overflow: visible;">MHHM</span>
+</div>
+
+<div class="vsized inlineflex container" style="max-width: 10px; overflow: visible;">
+  <span class="blue" style="max-width: 4px; overflow: visible;">MVVM</span>
+</div>
+
+<div class="vsized inlineflex container" style="max-width: 10px;">
+  <span class="blue" style="max-width: 4px; overflow: hidden;">MHHM</span>
+</div>
+
+<div class="vsized inlineflex container" style="max-width: 10px; overflow: visible;">
+  <span class="blue" style="max-width: 4px; overflow: hidden;">MVVM</span>
+</div>
+-OHgb
 
 <div class="flex" style="flex-flow: row wrap; height:75px; ">
 
-<div>block first</div>
-<div style="position: abolute;">block abs</div>
+<div>block first item</div>
+<div id="item2" style="position: absolute; background-color:#FF8C00;">block abs</div>
 anonymous item 3
 
 <div style="margin-left:auto; margin-right:auto">block middle</div>
diff --git a/src/cobalt/layout_tests/testdata/css3-flexbox/content-based-minimum-size-expected.png b/src/cobalt/layout_tests/testdata/css3-flexbox/content-based-minimum-size-expected.png
new file mode 100644
index 0000000..b17c1ce
--- /dev/null
+++ b/src/cobalt/layout_tests/testdata/css3-flexbox/content-based-minimum-size-expected.png
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/css3-flexbox/content-based-minimum-size.html b/src/cobalt/layout_tests/testdata/css3-flexbox/content-based-minimum-size.html
new file mode 100644
index 0000000..c9dd6b7
--- /dev/null
+++ b/src/cobalt/layout_tests/testdata/css3-flexbox/content-based-minimum-size.html
@@ -0,0 +1,70 @@
+<!DOCTYPE html>
+<!--
+ | Combined tests for basic functionality of CSS Flexible Box Layout Module.
+ |   https://www.w3.org/TR/css-flexbox-1
+ | This test focuses on content-based minimum size.
+ -->
+<html>
+<head>
+<style>
+  body {
+    margin: 0px;
+    font-family: Roboto;
+    background-color: #808080;
+    font-size: 12px;
+  }
+  .inlineflex {
+    display:inline-flex;
+    color: #99b9f3;
+    background-color: #ffee08;
+    opacity: 0.75;
+  }
+  .container {
+    overflow: hidden;
+    flex-flow: row wrap;
+    justify-content: space-around;
+    align-items: center;
+    align-content: flex-end;
+    min-width: 2px;
+    padding: 2px;
+    border: 2px solid #000060;
+    outline: 2px solid #00f000;
+    margin: 6px;
+  }
+  .blue {
+    background-color: #0047ab;
+  }
+  .hidden {
+    overflow: hidden;
+  }
+  .visible {
+    overflow: visible;
+  }
+
+</style>
+</head>
+<body>
+
+<div class="inlineflex container" style="max-width: 20px;">
+  <span class="blue">HHHHH</span>
+</div>
+
+<div class="visible inlineflex container" style="max-width: 20px;">
+  <span class="blue">VVVVV</span>
+</div>
+
+<div class="visible inlineflex container" style="max-width: 20px;">
+  <span class="hidden blue">HHHHH</span>
+</div>
+
+<div class="inlineflex container" style="max-width: 20px;">
+  <span class="blue" style="min-width: 5px;">mHHHm</span>
+</div>
+
+<div class="visible inlineflex container" style="max-width: 20px;">
+  <span class="blue" style="min-width: 5px;">mVVVm</span>
+</div>
+
+</body>
+</html>
+
diff --git a/src/cobalt/layout_tests/testdata/css3-flexbox/layout_tests.txt b/src/cobalt/layout_tests/testdata/css3-flexbox/layout_tests.txt
index 759ff0c..da59b48 100644
--- a/src/cobalt/layout_tests/testdata/css3-flexbox/layout_tests.txt
+++ b/src/cobalt/layout_tests/testdata/css3-flexbox/layout_tests.txt
@@ -1,3 +1,6 @@
+combined-baseline
 combined-order-and-multiline
 combined-positioning-tests
+combined-shrinking-and-justify-content
 combined-with-baselines-percentages
+content-based-minimum-size
diff --git a/src/cobalt/layout_tests/testdata/intersection-observer/intersection-ratio-is-nonzero-but-is-intersecting-is-false-expected.png b/src/cobalt/layout_tests/testdata/intersection-observer/intersection-ratio-is-nonzero-but-is-intersecting-is-false-expected.png
new file mode 100644
index 0000000..3388bb1
--- /dev/null
+++ b/src/cobalt/layout_tests/testdata/intersection-observer/intersection-ratio-is-nonzero-but-is-intersecting-is-false-expected.png
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/intersection-observer/intersection-ratio-is-nonzero-but-is-intersecting-is-false.html b/src/cobalt/layout_tests/testdata/intersection-observer/intersection-ratio-is-nonzero-but-is-intersecting-is-false.html
new file mode 100644
index 0000000..86dace5
--- /dev/null
+++ b/src/cobalt/layout_tests/testdata/intersection-observer/intersection-ratio-is-nonzero-but-is-intersecting-is-false.html
@@ -0,0 +1,69 @@
+<!DOCTYPE html>
+<!--
+ | This test checks that an IntersectionObserverEntry's |isIntersecting|
+ | property is set to false if its |intersectionRatio| > 0 but
+ | |intersectionRatio| < all of the IntersectionObserver's threshold values.
+ | The target element is initially yellow, and only turns blue if the
+ | IntersectionObserver correctly computes the |isIntersecting| and
+ | |intersectionRatio| fields as described above.
+ |   https://www.w3.org/TR/intersection-observer/
+ -->
+<html>
+<head>
+  <style>
+    #target {
+      background-color: yellow;
+      width: 200px;
+      height: 150px;
+      position: absolute;
+      left: -100px;
+      top: -75px;
+    }
+  </style>
+</head>
+<body>
+  <div>
+    <div id="target">
+    </div>
+  </div>
+
+  <script>
+    if (window.testRunner) {
+      window.testRunner.waitUntilDone();
+    }
+
+    window.addEventListener("load", function() {
+      var targetElement = document.querySelector('#target');
+      var expectedRatio = 0.25;
+
+      function handleIntersect(entries, observer) {
+        entries.forEach(function(entry) {
+          console.log(entry.intersectionRatio);
+          if (entry.intersectionRatio == expectedRatio && !entry.isIntersecting) {
+            entry.target.style.backgroundColor = "blue";
+          }
+        });
+      }
+
+      function createObserver() {
+        var options = {
+          root: null,
+          rootMargin: "0px",
+          threshold: 0.5
+        };
+
+        var observer = new IntersectionObserver(handleIntersect, options);
+        observer.observe(targetElement);
+      }
+
+      createObserver();
+
+      if (window.testRunner) {
+        window.testRunner.DoNonMeasuredLayout();
+        window.setTimeout(function() { window.testRunner.notifyDone(); }, 0);
+      }
+    });
+  </script>
+
+</body>
+</html>
diff --git a/src/cobalt/layout_tests/testdata/intersection-observer/layout_tests.txt b/src/cobalt/layout_tests/testdata/intersection-observer/layout_tests.txt
index 8962d98..f449fdd 100644
--- a/src/cobalt/layout_tests/testdata/intersection-observer/layout_tests.txt
+++ b/src/cobalt/layout_tests/testdata/intersection-observer/layout_tests.txt
@@ -1,5 +1,6 @@
 element-in-containing-block-chain-has-overflow-clip-with-padding-and-border
 element-in-containing-block-chain-has-overflow-clip-without-padding-or-border
+intersection-ratio-is-nonzero-but-is-intersecting-is-false
 multiple-observers-with-different-roots-and-targets
 no-intersection-when-root-is-not-in-containing-block-chain-of-target
 observers-should-update-when-elements-move
diff --git a/src/cobalt/layout_tests/testdata/web-platform-tests/XMLHttpRequest/web_platform_tests.txt b/src/cobalt/layout_tests/testdata/web-platform-tests/XMLHttpRequest/web_platform_tests.txt
index 64d65f0..f500a93 100644
--- a/src/cobalt/layout_tests/testdata/web-platform-tests/XMLHttpRequest/web_platform_tests.txt
+++ b/src/cobalt/layout_tests/testdata/web-platform-tests/XMLHttpRequest/web_platform_tests.txt
@@ -152,7 +152,7 @@
 # SyntaxError: Unexpected EOF
 # js_error: send-entity-body-document.htm,FAIL
 send-entity-body-empty.htm,FAIL
-# TODO[johnx]: re-enable this after Cobalt wpt refactoring.
+# TODO: re-enable this after Cobalt wpt refactoring.
 send-entity-body-get-head-async.htm,PASS
 send-entity-body-get-head.htm,FAIL
 send-entity-body-none.htm,FAIL
diff --git a/src/cobalt/loader/fetcher.h b/src/cobalt/loader/fetcher.h
index 1bc7010..152d790 100644
--- a/src/cobalt/loader/fetcher.h
+++ b/src/cobalt/loader/fetcher.h
@@ -74,33 +74,23 @@
   };
 
   // Concrete Fetcher subclass should start fetching immediately in constructor.
-  explicit Fetcher(Handler* handler)
-      : handler_(handler), did_fail_from_transient_error_(false) {}
-
-  const Origin& last_url_origin() const { return last_url_origin_; }
-
-  bool did_fail_from_transient_error() const {
-    return did_fail_from_transient_error_;
-  }
+  explicit Fetcher(Handler* handler) : handler_(handler) {}
 
   // Concrete Fetcher subclass should cancel fetching in destructor.
   virtual ~Fetcher() = 0;
 
- protected:
-  Handler* handler() const { return handler_; }
-
-  void SetLastUrlOrigin(const Origin& origin) { last_url_origin_ = origin; }
-  void SetFailedFromTransientError() { did_fail_from_transient_error_ = true; }
-
- private:
-  Handler* handler_;
-
   // Indicates whether the resource is cross-origin.
-  Origin last_url_origin_;
+  virtual Origin last_url_origin() const { return Origin(); }
 
   // Whether or not the fetcher failed from an error that is considered
   // transient, indicating that the same fetch may later succeed.
-  bool did_fail_from_transient_error_;
+  virtual bool did_fail_from_transient_error() const { return false; }
+
+ protected:
+  Handler* handler() const { return handler_; }
+
+ private:
+  Handler* handler_;
 };
 
 }  // namespace loader
diff --git a/src/cobalt/loader/fetcher_cache.cc b/src/cobalt/loader/fetcher_cache.cc
index e07ba47..9b0244f 100644
--- a/src/cobalt/loader/fetcher_cache.cc
+++ b/src/cobalt/loader/fetcher_cache.cc
@@ -21,36 +21,47 @@
 
 namespace cobalt {
 namespace loader {
+namespace {
 
-class FetcherCache::CachedFetcherHandler : public Fetcher::Handler {
+// Wraps a Fetcher::Handler and saves all data fetched and its associated
+// information.
+class CachedFetcherHandler : public Fetcher::Handler {
  public:
   typedef base::Callback<void(
-      CachedFetcherHandler* handler, const std::string& url,
+      const std::string& url,
       const scoped_refptr<net::HttpResponseHeaders>& headers,
-      const Origin& last_url_origin, std::string* data)>
+      const Origin& last_url_origin, bool did_fail_from_transient_error,
+      std::string* data)>
       SuccessCallback;
-  typedef base::Callback<void(CachedFetcherHandler* handler)> FailureCallback;
 
   CachedFetcherHandler(const std::string& url, Fetcher::Handler* handler,
-                       const SuccessCallback& on_success_callback,
-                       const FailureCallback& on_failure_callback)
+                       const SuccessCallback& on_success_callback)
       : url_(url),
         handler_(handler),
-        on_success_callback_(on_success_callback),
-        on_failure_callback_(on_failure_callback) {
+        on_success_callback_(on_success_callback) {
     DCHECK(handler_);
     DCHECK(!on_success_callback_.is_null());
-    DCHECK(!on_failure_callback_.is_null());
+  }
+
+  // Attach a wrapping fetcher so it can be used when forwarding the callbacks.
+  // This ensures that the underlying handler sees the same Fetcher object in
+  // the callback as the one returned by CreateCachedFetcher().
+  void AttachFetcher(Fetcher* wrapping_fetcher) {
+    DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+    DCHECK(!wrapping_fetcher_);
+    DCHECK(wrapping_fetcher);
+    wrapping_fetcher_ = wrapping_fetcher;
   }
 
  private:
   // From Fetcher::Handler.
   LoadResponseType OnResponseStarted(
-      Fetcher* fetcher,
+      Fetcher*,
       const scoped_refptr<net::HttpResponseHeaders>& headers) override {
     // TODO: Respect HttpResponseHeaders::GetMaxAgeValue().
     DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
-    auto response = handler_->OnResponseStarted(fetcher, headers);
+    DCHECK(wrapping_fetcher_);
+    auto response = handler_->OnResponseStarted(wrapping_fetcher_, headers);
     if (response == kLoadResponseContinue && headers) {
       headers_ = headers;
       auto content_length = headers_->GetContentLength();
@@ -61,46 +72,120 @@
     return response;
   }
 
-  void OnReceived(Fetcher* fetcher, const char* data, size_t size) override {
+  void OnReceived(Fetcher*, const char* data, size_t size) override {
     DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+    DCHECK(wrapping_fetcher_);
     data_.insert(data_.end(), data, data + size);
-    handler_->OnReceived(fetcher, data, size);
+    handler_->OnReceived(wrapping_fetcher_, data, size);
   }
-  void OnReceivedPassed(Fetcher* fetcher,
-                        std::unique_ptr<std::string> data) override {
+
+  void OnReceivedPassed(Fetcher*, std::unique_ptr<std::string> data) override {
     DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+    DCHECK(wrapping_fetcher_);
     data_.insert(data_.end(), data->begin(), data->end());
-    handler_->OnReceivedPassed(fetcher, std::move(data));
+    handler_->OnReceivedPassed(wrapping_fetcher_, std::move(data));
   }
-  void OnDone(Fetcher* fetcher) override {
+
+  void OnDone(Fetcher*) override {
     DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
-    last_url_origin_ = fetcher->last_url_origin();
-    handler_->OnDone(fetcher);
-    on_success_callback_.Run(this, url_, headers_, last_url_origin_, &data_);
+    DCHECK(wrapping_fetcher_);
+    handler_->OnDone(wrapping_fetcher_);
+    on_success_callback_.Run(
+        url_, headers_, wrapping_fetcher_->last_url_origin(),
+        wrapping_fetcher_->did_fail_from_transient_error(), &data_);
   }
-  void OnError(Fetcher* fetcher, const std::string& error) override {
+
+  void OnError(Fetcher*, const std::string& error) override {
     DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
-    handler_->OnError(fetcher, error);
-    on_failure_callback_.Run(this);
+    DCHECK(wrapping_fetcher_);
+    handler_->OnError(wrapping_fetcher_, error);
   }
 
   THREAD_CHECKER(thread_checker_);
 
   const std::string url_;
+  Fetcher* wrapping_fetcher_ = nullptr;
   Fetcher::Handler* const handler_;
   const SuccessCallback on_success_callback_;
-  const FailureCallback on_failure_callback_;
 
   scoped_refptr<net::HttpResponseHeaders> headers_;
-  Origin last_url_origin_;
   std::string data_;
 };
 
+// Wraps an underlying, real Fetcher for an ongoing request, so we can ensure
+// that |handler_| is deleted when the Fetcher object is deleted.
+class OngoingFetcher : public Fetcher {
+ public:
+  OngoingFetcher(std::unique_ptr<CachedFetcherHandler> handler,
+                 const Loader::FetcherCreator& real_fetcher_creator)
+      : Fetcher(handler.get()), handler_(std::move(handler)) {
+    DCHECK(handler_);
+    handler_->AttachFetcher(this);
+    fetcher_ = real_fetcher_creator.Run(handler_.get());
+  }
+  ~OngoingFetcher() override { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); }
+
+  Origin last_url_origin() const override {
+    DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+    // Some Fetchers may call callbacks inside its ctor, in such case |fetcher_|
+    // hasn't been assigned and a default value is returned.
+    return fetcher_ ? fetcher_->last_url_origin() : Origin();
+  }
+  bool did_fail_from_transient_error() const override {
+    DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+    // Some Fetchers may call callbacks inside its ctor, in such case |fetcher_|
+    // hasn't been assigned and a default value is returned.
+    return fetcher_ ? fetcher_->did_fail_from_transient_error() : false;
+  }
+
+ private:
+  THREAD_CHECKER(thread_checker_);
+
+  std::unique_ptr<CachedFetcherHandler> handler_;
+  std::unique_ptr<Fetcher> fetcher_;
+};
+
+// Fulfills the request directly using the data passed to ctor.
+class CachedFetcher : public Fetcher {
+ public:
+  CachedFetcher(const GURL& url,
+                const scoped_refptr<net::HttpResponseHeaders>& headers,
+                const char* data, size_t size, const Origin& last_url_origin,
+                bool did_fail_from_transient_error, Handler* handler)
+      : Fetcher(handler),
+        last_url_origin_(last_url_origin),
+        did_fail_from_transient_error_(did_fail_from_transient_error) {
+    auto response_type = handler->OnResponseStarted(this, headers);
+    if (response_type == kLoadResponseAbort) {
+      std::string error_msg(base::StringPrintf(
+          "Handler::OnResponseStarted() aborted URL %s", url.spec().c_str()));
+      handler->OnError(this, error_msg.c_str());
+      return;
+    }
+    handler->OnReceived(this, data, size);
+    handler->OnDone(this);
+  }
+
+  Origin last_url_origin() const override { return last_url_origin_; }
+  bool did_fail_from_transient_error() const override {
+    return did_fail_from_transient_error_;
+  }
+
+ private:
+  Origin last_url_origin_;
+  bool did_fail_from_transient_error_;
+};
+
+}  // namespace
+
 class FetcherCache::CacheEntry {
  public:
   CacheEntry(const scoped_refptr<net::HttpResponseHeaders>& headers,
-             const Origin& last_url_origin, std::string* data)
-      : headers_(headers), last_url_origin_(last_url_origin) {
+             const Origin& last_url_origin, bool did_fail_from_transient_error,
+             std::string* data)
+      : headers_(headers),
+        last_url_origin_(last_url_origin),
+        did_fail_from_transient_error_(did_fail_from_transient_error) {
     DCHECK(data);
     data_.swap(*data);
   }
@@ -113,6 +198,9 @@
     DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
     return last_url_origin_;
   }
+  bool did_fail_from_transient_error() const {
+    return did_fail_from_transient_error_;
+  }
   const char* data() const {
     DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
     return data_.data();
@@ -121,33 +209,20 @@
     DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
     return data_.size();
   }
+  size_t capacity() const {
+    DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+    return data_.capacity();
+  }
 
  private:
   THREAD_CHECKER(thread_checker_);
 
   scoped_refptr<net::HttpResponseHeaders> headers_;
   Origin last_url_origin_;
+  bool did_fail_from_transient_error_;
   std::string data_;
 };
 
-class FetcherCache::CachedFetcher : public Fetcher {
- public:
-  CachedFetcher(const GURL& url, const FetcherCache::CacheEntry& entry,
-                Handler* handler)
-      : Fetcher(handler) {
-    SetLastUrlOrigin(entry.last_url_origin());
-    auto response_type = handler->OnResponseStarted(this, entry.headers());
-    if (response_type == kLoadResponseAbort) {
-      std::string error_msg(base::StringPrintf(
-          "Handler::OnResponseStarted() aborted URL %s", url.spec().c_str()));
-      handler->OnError(this, error_msg.c_str());
-      return;
-    }
-    handler->OnReceived(this, entry.data(), entry.size());
-    handler->OnDone(this);
-  }
-};
-
 FetcherCache::FetcherCache(const char* name, size_t capacity)
     : capacity_(capacity),
       memory_size_in_bytes_(
@@ -160,11 +235,6 @@
 FetcherCache::~FetcherCache() {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
 
-  while (!ongoing_fetchers_.empty()) {
-    delete *ongoing_fetchers_.begin();
-    ongoing_fetchers_.erase(ongoing_fetchers_.begin());
-  }
-
   while (!cache_entries_.empty()) {
     delete cache_entries_.begin()->second;
     cache_entries_.erase(cache_entries_.begin());
@@ -206,34 +276,35 @@
     auto entry = iterator->second;
     cache_entries_.erase(iterator);
     cache_entries_.insert(std::make_pair(url.spec(), entry));
-    return std::unique_ptr<Fetcher>(new CachedFetcher(url, *entry, handler));
+    return std::unique_ptr<Fetcher>(
+        new CachedFetcher(url, entry->headers(), entry->data(), entry->size(),
+                          entry->last_url_origin(),
+                          entry->did_fail_from_transient_error(), handler));
   }
 
-  auto cached_handler = new CachedFetcherHandler(
+  std::unique_ptr<CachedFetcherHandler> cached_handler(new CachedFetcherHandler(
       url.spec(), handler,
-      base::Bind(&FetcherCache::OnFetchSuccess, base::Unretained(this)),
-      base::Bind(&FetcherCache::OnFetchFailure, base::Unretained(this)));
-  ongoing_fetchers_.insert(cached_handler);
-  return real_fetcher_creator.Run(cached_handler);
+      base::Bind(&FetcherCache::OnFetchSuccess, base::Unretained(this))));
+  return std::unique_ptr<Fetcher>(
+      new OngoingFetcher(std::move(cached_handler), real_fetcher_creator));
 }
 
 void FetcherCache::OnFetchSuccess(
-    CachedFetcherHandler* handler, const std::string& url,
+    const std::string& url,
     const scoped_refptr<net::HttpResponseHeaders>& headers,
-    const Origin& last_url_origin, std::string* data) {
+    const Origin& last_url_origin, bool did_fail_from_transient_error,
+    std::string* data) {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   DCHECK(data);
 
-  auto iterator = ongoing_fetchers_.find(handler);
-  DCHECK(iterator != ongoing_fetchers_.end());
-
   if (data->size() <= capacity_) {
-    auto entry = new CacheEntry(headers, last_url_origin, data);
-    total_size_ += entry->size();
+    auto entry = new CacheEntry(headers, last_url_origin,
+                                did_fail_from_transient_error, data);
+    total_size_ += entry->capacity();
     cache_entries_.insert(std::make_pair(url, entry));
     while (total_size_ > capacity_) {
       DCHECK(!cache_entries_.empty());
-      total_size_ -= cache_entries_.begin()->second->size();
+      total_size_ -= cache_entries_.begin()->second->capacity();
       delete cache_entries_.begin()->second;
       cache_entries_.erase(cache_entries_.begin());
       --count_resources_cached_;
@@ -241,18 +312,6 @@
     ++count_resources_cached_;
     memory_size_in_bytes_ = total_size_;
   }
-
-  delete *iterator;
-  ongoing_fetchers_.erase(iterator);
-}
-
-void FetcherCache::OnFetchFailure(CachedFetcherHandler* handler) {
-  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
-
-  auto iterator = ongoing_fetchers_.find(handler);
-  DCHECK(iterator != ongoing_fetchers_.end());
-  delete *iterator;
-  ongoing_fetchers_.erase(iterator);
 }
 
 }  // namespace loader
diff --git a/src/cobalt/loader/fetcher_cache.h b/src/cobalt/loader/fetcher_cache.h
index 37ddf8a..32a4466 100644
--- a/src/cobalt/loader/fetcher_cache.h
+++ b/src/cobalt/loader/fetcher_cache.h
@@ -42,24 +42,21 @@
   void NotifyResourceRequested(const std::string& url);
 
  private:
-  class CachedFetcherHandler;
   class CacheEntry;
-  class CachedFetcher;
 
   std::unique_ptr<Fetcher> CreateCachedFetcher(
       const GURL& url, const Loader::FetcherCreator& real_fetcher_creator,
       Fetcher::Handler* handler);
-  void OnFetchSuccess(CachedFetcherHandler* handler, const std::string& url,
+  void OnFetchSuccess(const std::string& url,
                       const scoped_refptr<net::HttpResponseHeaders>& headers,
-                      const Origin& last_url_origin, std::string* data);
-  void OnFetchFailure(CachedFetcherHandler* handler);
+                      const Origin& last_url_origin,
+                      bool did_fail_from_transient_error, std::string* data);
 
   THREAD_CHECKER(thread_checker_);
 
   const size_t capacity_;
   size_t total_size_ = 0;
 
-  base::hash_set<CachedFetcherHandler*> ongoing_fetchers_;
   net::linked_hash_map<std::string, CacheEntry*> cache_entries_;
 
   base::CVal<base::cval::SizeInBytes, base::CValPublic> memory_size_in_bytes_;
diff --git a/src/cobalt/loader/net_fetcher.cc b/src/cobalt/loader/net_fetcher.cc
index bbb0027..cb084a1 100644
--- a/src/cobalt/loader/net_fetcher.cc
+++ b/src/cobalt/loader/net_fetcher.cc
@@ -160,7 +160,7 @@
     return HandleError(msg).InvalidateThis();
   }
 
-  SetLastUrlOrigin(Origin(source->GetURL()));
+  last_url_origin_ = Origin(source->GetURL());
 }
 
 void NetFetcher::OnURLFetchComplete(const net::URLFetcher* source) {
@@ -189,7 +189,7 @@
         status.error() == net::ERR_CONNECTION_RESET ||
         status.error() == net::ERR_CONNECTION_CLOSED ||
         status.error() == net::ERR_CONNECTION_ABORTED) {
-      SetFailedFromTransientError();
+      did_fail_from_transient_error_ = true;
     }
 
     std::string msg(base::StringPrintf(
diff --git a/src/cobalt/loader/net_fetcher.h b/src/cobalt/loader/net_fetcher.h
index a29f899..2ab6df8 100644
--- a/src/cobalt/loader/net_fetcher.h
+++ b/src/cobalt/loader/net_fetcher.h
@@ -62,6 +62,12 @@
   }
 
  private:
+  // Fetcher interface
+  Origin last_url_origin() const override { return last_url_origin_; }
+  bool did_fail_from_transient_error() const override {
+    return did_fail_from_transient_error_;
+  }
+
   void Start();
 
   // Empty struct to ensure the caller of |HandleError()| knows that |this|
@@ -94,6 +100,13 @@
   // The request's origin.
   Origin origin_;
 
+  // Indicates whether the resource is cross-origin.
+  Origin last_url_origin_;
+
+  // Whether or not the fetcher failed from an error that is considered
+  // transient, indicating that the same fetch may later succeed.
+  bool did_fail_from_transient_error_ = false;
+
   DISALLOW_COPY_AND_ASSIGN(NetFetcher);
 };
 
diff --git a/src/cobalt/media/base/drm_system.cc b/src/cobalt/media/base/drm_system.cc
index ea3888a..3e46a77 100644
--- a/src/cobalt/media/base/drm_system.cc
+++ b/src/cobalt/media/base/drm_system.cc
@@ -26,29 +26,23 @@
 
 DrmSystem::Session::Session(
     DrmSystem* drm_system
-#if SB_HAS(DRM_KEY_STATUSES)
     ,
     SessionUpdateKeyStatusesCallback update_key_statuses_callback
 #if SB_HAS(DRM_SESSION_CLOSED)
     ,
     SessionClosedCallback session_closed_callback
 #endif  // SB_HAS(DRM_SESSION_CLOSED)
-#endif  // SB_HAS(DRM_KEY_STATUSES)
     )
     : drm_system_(drm_system),
-#if SB_HAS(DRM_KEY_STATUSES)
       update_key_statuses_callback_(update_key_statuses_callback),
 #if SB_HAS(DRM_SESSION_CLOSED)
       session_closed_callback_(session_closed_callback),
 #endif  // SB_HAS(DRM_SESSION_CLOSED)
-#endif  // SB_HAS(DRM_KEY_STATUSES)
       closed_(false) {
-#if SB_HAS(DRM_KEY_STATUSES)
   DCHECK(!update_key_statuses_callback_.is_null());
 #if SB_HAS(DRM_SESSION_CLOSED)
   DCHECK(!session_closed_callback_.is_null());
 #endif  // SB_HAS(DRM_SESSION_CLOSED)
-#endif  // SB_HAS(DRM_KEY_STATUSES)
 }
 
 DrmSystem::Session::~Session() {
@@ -94,10 +88,8 @@
     : wrapped_drm_system_(SbDrmCreateSystem(key_system, this,
                                             OnSessionUpdateRequestGeneratedFunc,
                                             OnSessionUpdatedFunc
-#if SB_HAS(DRM_KEY_STATUSES)
                                             ,
                                             OnSessionKeyStatusesChangedFunc
-#endif  // SB_HAS(DRM_KEY_STATUSES)
 #if SB_API_VERSION >= 10
                                             ,
                                             OnServerCertificateUpdatedFunc
@@ -116,25 +108,21 @@
 DrmSystem::~DrmSystem() { SbDrmDestroySystem(wrapped_drm_system_); }
 
 std::unique_ptr<DrmSystem::Session> DrmSystem::CreateSession(
-#if SB_HAS(DRM_KEY_STATUSES)
     SessionUpdateKeyStatusesCallback session_update_key_statuses_callback
 #if SB_HAS(DRM_SESSION_CLOSED)
     ,
     SessionClosedCallback session_closed_callback
 #endif   // SB_HAS(DRM_SESSION_CLOSED)
-#endif   // SB_HAS(DRM_KEY_STATUSES)
     ) {  // NOLINT(whitespace/parens)
   DCHECK(message_loop_->BelongsToCurrentThread());
   return std::unique_ptr<DrmSystem::Session>(new Session(
       this
-#if SB_HAS(DRM_KEY_STATUSES)
       ,
       session_update_key_statuses_callback
 #if SB_HAS(DRM_SESSION_CLOSED)
       ,
       session_closed_callback
 #endif     // SB_HAS(DRM_SESSION_CLOSED)
-#endif     // SB_HAS(DRM_KEY_STATUSES)
       ));  // NOLINT(whitespace/parens)
 }
 
@@ -304,7 +292,6 @@
   ticket_to_session_update_map_.erase(session_update_iterator);
 }
 
-#if SB_HAS(DRM_KEY_STATUSES)
 void DrmSystem::OnSessionKeyStatusChanged(
     const std::string& session_id, const std::vector<std::string>& key_ids,
     const std::vector<SbDrmKeyStatus>& key_statuses) {
@@ -319,7 +306,6 @@
 
   session->update_key_statuses_callback().Run(key_ids, key_statuses);
 }
-#endif  // SB_HAS(DRM_KEY_STATUSES)
 
 #if SB_HAS(DRM_SESSION_CLOSED)
 void DrmSystem::OnSessionClosed(const std::string& session_id) {
@@ -418,7 +404,6 @@
                  status, error_message ? std::string(error_message) : ""));
 }
 
-#if SB_HAS(DRM_KEY_STATUSES)
 // static
 void DrmSystem::OnSessionKeyStatusesChangedFunc(
     SbDrmSystem wrapped_drm_system, void* context, const void* session_id,
@@ -450,7 +435,6 @@
       base::Bind(&DrmSystem::OnSessionKeyStatusChanged, drm_system->weak_this_,
                  session_id_copy, key_ids_copy, key_statuses_copy));
 }
-#endif  // SB_HAS(DRM_KEY_STATUSES)
 
 #if SB_API_VERSION >= 10
 // static
diff --git a/src/cobalt/media/base/drm_system.h b/src/cobalt/media/base/drm_system.h
index 2b01077..819d9c9 100644
--- a/src/cobalt/media/base/drm_system.h
+++ b/src/cobalt/media/base/drm_system.h
@@ -47,11 +47,9 @@
   typedef base::Callback<void(SbDrmStatus status,
                               const std::string& error_message)>
       SessionDidNotUpdateCallback;
-#if SB_HAS(DRM_KEY_STATUSES)
   typedef base::Callback<void(const std::vector<std::string>& key_ids,
                               const std::vector<SbDrmKeyStatus>& key_statuses)>
       SessionUpdateKeyStatusesCallback;
-#endif  // SB_HAS(DRM_KEY_STATUSES)
 #if SB_HAS(DRM_SESSION_CLOSED)
   typedef base::Callback<void()> SessionClosedCallback;
 #endif  // SB_HAS(DRM_SESSION_CLOSED)
@@ -102,10 +100,8 @@
    private:
     // Private API for |DrmSystem|.
     Session(DrmSystem* drm_system
-#if SB_HAS(DRM_KEY_STATUSES)
             ,
             SessionUpdateKeyStatusesCallback update_key_statuses_callback
-#endif  // SB_HAS(DRM_KEY_STATUSES)
 #if SB_HAS(DRM_SESSION_CLOSED)
             ,
             SessionClosedCallback session_closed_callback
@@ -116,12 +112,10 @@
     update_request_generated_callback() const {
       return update_request_generated_callback_;
     }
-#if SB_HAS(DRM_KEY_STATUSES)
     const SessionUpdateKeyStatusesCallback& update_key_statuses_callback()
         const {
       return update_key_statuses_callback_;
     }
-#endif  // SB_HAS(DRM_KEY_STATUSES)
 #if SB_HAS(DRM_SESSION_CLOSED)
     const SessionClosedCallback& session_closed_callback() const {
       return session_closed_callback_;
@@ -129,9 +123,7 @@
 #endif  // SB_HAS(DRM_SESSION_CLOSED)
 
     DrmSystem* const drm_system_;
-#if SB_HAS(DRM_KEY_STATUSES)
     SessionUpdateKeyStatusesCallback update_key_statuses_callback_;
-#endif  // SB_HAS(DRM_KEY_STATUSES)
 #if SB_HAS(DRM_SESSION_CLOSED)
     SessionClosedCallback session_closed_callback_;
 #endif  // SB_HAS(DRM_SESSION_CLOSED)
@@ -151,9 +143,7 @@
   SbDrmSystem wrapped_drm_system() { return wrapped_drm_system_; }
 
   std::unique_ptr<Session> CreateSession(
-#if SB_HAS(DRM_KEY_STATUSES)
       SessionUpdateKeyStatusesCallback session_update_key_statuses_callback
-#endif  // SB_HAS(DRM_KEY_STATUSES)
 #if SB_HAS(DRM_SESSION_CLOSED)
       ,
       SessionClosedCallback session_closed_callback
@@ -216,11 +206,9 @@
       std::unique_ptr<uint8[]> message, int message_size);
   void OnSessionUpdated(int ticket, SbDrmStatus status,
                         const std::string& error_message);
-#if SB_HAS(DRM_KEY_STATUSES)
   void OnSessionKeyStatusChanged(
       const std::string& session_id, const std::vector<std::string>& key_ids,
       const std::vector<SbDrmKeyStatus>& key_statuses);
-#endif  // SB_HAS(DRM_KEY_STATUSES)
 #if SB_API_VERSION >= 10
   void OnServerCertificateUpdated(int ticket, SbDrmStatus status,
                                   const std::string& error_message);
@@ -253,12 +241,10 @@
                                    int session_id_length, bool succeeded);
 #endif  // SB_API_VERSION >= 10
 
-#if SB_HAS(DRM_KEY_STATUSES)
   static void OnSessionKeyStatusesChangedFunc(
       SbDrmSystem wrapped_drm_system, void* context, const void* session_id,
       int session_id_size, int number_of_keys, const SbDrmKeyId* key_ids,
       const SbDrmKeyStatus* key_statuses);
-#endif  // SB_HAS(DRM_KEY_STATUSES)
 
 #if SB_HAS(DRM_SESSION_CLOSED)
   static void OnSessionClosedFunc(SbDrmSystem wrapped_drm_system, void* context,
diff --git a/src/cobalt/media/base/starboard_utils.cc b/src/cobalt/media/base/starboard_utils.cc
index 60c6109..9926a4e 100644
--- a/src/cobalt/media/base/starboard_utils.cc
+++ b/src/cobalt/media/base/starboard_utils.cc
@@ -100,7 +100,6 @@
   audio_sample_info.block_alignment = 4;
   audio_sample_info.bits_per_sample = audio_decoder_config.bits_per_channel();
 
-#if SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER)
   audio_sample_info.audio_specific_config_size =
       static_cast<uint16_t>(audio_decoder_config.extra_data().size());
   if (audio_sample_info.audio_specific_config_size == 0) {
@@ -109,16 +108,6 @@
     audio_sample_info.audio_specific_config =
         &audio_decoder_config.extra_data()[0];
   }
-#else   // SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER)
-  audio_sample_info.audio_specific_config_size = static_cast<uint16_t>(
-      std::min(audio_decoder_config.extra_data().size(),
-               sizeof(audio_sample_info.audio_specific_config)));
-  if (audio_sample_info.audio_specific_config_size > 0) {
-    SbMemoryCopy(audio_sample_info.audio_specific_config,
-                 &audio_decoder_config.extra_data()[0],
-                 audio_sample_info.audio_specific_config_size);
-  }
-#endif  // SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER)
 
   return audio_sample_info;
 }
diff --git a/src/cobalt/media/formats/mp4/mp4_stream_parser.cc b/src/cobalt/media/formats/mp4/mp4_stream_parser.cc
index 8271529..e4d7754 100644
--- a/src/cobalt/media/formats/mp4/mp4_stream_parser.cc
+++ b/src/cobalt/media/formats/mp4/mp4_stream_parser.cc
@@ -203,7 +203,7 @@
     const SampleDescription& samp_descr =
         track->media.information.sample_table.description;
 
-    // TODO(strobe): When codec reconfigurations are supported, detect and send
+    // TODO: When codec reconfigurations are supported, detect and send
     // a codec reconfiguration for fragments using a sample description index
     // different from the previous one
     size_t desc_idx = 0;
@@ -337,7 +337,7 @@
         return false;
       }
 
-      // TODO(strobe): Recover correct crop box
+      // TODO: Recover correct crop box
       gfx::Size coded_size(entry.width, entry.height);
       gfx::Rect visible_rect(coded_size);
 
@@ -459,7 +459,7 @@
 
 void MP4StreamParser::OnEncryptedMediaInitData(
     const std::vector<ProtectionSystemSpecificHeader>& headers) {
-  // TODO(strobe): ensure that the value of init_data (all PSSH headers
+  // TODO: ensure that the value of init_data (all PSSH headers
   // concatenated in arbitrary order) matches the EME spec.
   // See https://www.w3.org/Bugs/Public/show_bug.cgi?id=17673.
   size_t total_size = 0;
diff --git a/src/cobalt/media/media_module.cc b/src/cobalt/media/media_module.cc
index 2230b68..e476a6f 100644
--- a/src/cobalt/media/media_module.cc
+++ b/src/cobalt/media/media_module.cc
@@ -111,23 +111,6 @@
   std::vector<std::string> disabled_media_codecs_;
 };
 
-void RunClosureAndSignal(const base::Closure& closure,
-                         base::WaitableEvent* event) {
-  closure.Run();
-  event->Signal();
-}
-
-void RunClosureOnMessageLoopAndWait(
-    const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
-    const base::Closure& closure) {
-  base::WaitableEvent waitable_event(
-      base::WaitableEvent::ResetPolicy::MANUAL,
-      base::WaitableEvent::InitialState::NOT_SIGNALED);
-  task_runner->PostTask(
-      FROM_HERE, base::Bind(&RunClosureAndSignal, closure, &waitable_event));
-  waitable_event.Wait();
-}
-
 }  // namespace
 
 std::unique_ptr<WebMediaPlayer> MediaModule::CreateWebMediaPlayer(
@@ -146,33 +129,7 @@
 }
 
 void MediaModule::Suspend() {
-  RunClosureOnMessageLoopAndWait(
-      task_runner_,
-      base::Bind(&MediaModule::SuspendTask, base::Unretained(this)));
-  resource_provider_ = NULL;
-}
-
-void MediaModule::Resume(render_tree::ResourceProvider* resource_provider) {
-  resource_provider_ = resource_provider;
-  RunClosureOnMessageLoopAndWait(
-      task_runner_,
-      base::Bind(&MediaModule::ResumeTask, base::Unretained(this)));
-}
-
-void MediaModule::RegisterPlayer(WebMediaPlayer* player) {
-  RunClosureOnMessageLoopAndWait(task_runner_,
-                                 base::Bind(&MediaModule::RegisterPlayerTask,
-                                            base::Unretained(this), player));
-}
-
-void MediaModule::UnregisterPlayer(WebMediaPlayer* player) {
-  RunClosureOnMessageLoopAndWait(task_runner_,
-                                 base::Bind(&MediaModule::UnregisterPlayerTask,
-                                            base::Unretained(this), player));
-}
-
-void MediaModule::SuspendTask() {
-  DCHECK(task_runner_->BelongsToCurrentThread());
+  starboard::ScopedLock scoped_lock(players_lock_);
 
   suspended_ = true;
 
@@ -183,10 +140,14 @@
       iter->first->Suspend();
     }
   }
+
+  resource_provider_ = NULL;
 }
 
-void MediaModule::ResumeTask() {
-  DCHECK(task_runner_->BelongsToCurrentThread());
+void MediaModule::Resume(render_tree::ResourceProvider* resource_provider) {
+  starboard::ScopedLock scoped_lock(players_lock_);
+
+  resource_provider_ = resource_provider;
 
   for (Players::iterator iter = players_.begin(); iter != players_.end();
        ++iter) {
@@ -199,8 +160,8 @@
   suspended_ = false;
 }
 
-void MediaModule::RegisterPlayerTask(WebMediaPlayer* player) {
-  DCHECK(task_runner_->BelongsToCurrentThread());
+void MediaModule::RegisterPlayer(WebMediaPlayer* player) {
+  starboard::ScopedLock scoped_lock(players_lock_);
 
   DCHECK(players_.find(player) == players_.end());
   players_.insert(std::make_pair(player, false));
@@ -210,13 +171,23 @@
   }
 }
 
-void MediaModule::UnregisterPlayerTask(WebMediaPlayer* player) {
-  DCHECK(task_runner_->BelongsToCurrentThread());
+void MediaModule::UnregisterPlayer(WebMediaPlayer* player) {
+  starboard::ScopedLock scoped_lock(players_lock_);
 
   DCHECK(players_.find(player) != players_.end());
   players_.erase(players_.find(player));
 }
 
+void MediaModule::EnumerateWebMediaPlayers(
+    const EnumeratePlayersCB& enumerate_callback) const {
+  starboard::ScopedLock scoped_lock(players_lock_);
+
+  for (Players::const_iterator iter = players_.begin(); iter != players_.end();
+       ++iter) {
+    enumerate_callback.Run(iter->first);
+  }
+}
+
 std::unique_ptr<CanPlayTypeHandler> MediaModule::CreateCanPlayTypeHandler() {
   return std::unique_ptr<CanPlayTypeHandler>(new CanPlayTypeHandlerStarboard);
 }
diff --git a/src/cobalt/media/media_module.h b/src/cobalt/media/media_module.h
index 7f06370..b3ee10d 100644
--- a/src/cobalt/media/media_module.h
+++ b/src/cobalt/media/media_module.h
@@ -23,9 +23,7 @@
 #include "base/compiler_specific.h"
 #include "base/logging.h"
 #include "base/memory/ref_counted.h"
-#include "base/message_loop/message_loop.h"
 #include "base/optional.h"
-#include "base/threading/thread.h"
 #include "cobalt/math/size.h"
 #include "cobalt/media/can_play_type_handler.h"
 #include "cobalt/media/decoder_buffer_allocator.h"
@@ -35,6 +33,7 @@
 #include "cobalt/render_tree/image.h"
 #include "cobalt/render_tree/resource_provider.h"
 #include "cobalt/system_window/system_window.h"
+#include "starboard/common/mutex.h"
 
 namespace cobalt {
 namespace media {
@@ -57,13 +56,9 @@
   MediaModule(system_window::SystemWindow* system_window,
               render_tree::ResourceProvider* resource_provider,
               const Options& options = Options())
-      : thread_("media_module"),
-        options_(options),
+      : options_(options),
         system_window_(system_window),
-        resource_provider_(resource_provider) {
-    thread_.Start();
-    task_runner_ = thread_.task_runner();
-  }
+        resource_provider_(resource_provider) {}
 
   // Returns true when the setting is set successfully or if the setting has
   // already been set to the expected value.  Returns false when the setting is
@@ -77,6 +72,8 @@
   // WebMediaPlayerFactory methods
   std::unique_ptr<WebMediaPlayer> CreateWebMediaPlayer(
       WebMediaPlayerClient* client) override;
+  void EnumerateWebMediaPlayers(
+      const EnumeratePlayersCB& enumerate_callback) const override;
 
   void Suspend();
   void Resume(render_tree::ResourceProvider* resource_provider);
@@ -90,10 +87,6 @@
  private:
   void RegisterDebugState(WebMediaPlayer* player);
   void DeregisterDebugState();
-  void SuspendTask();
-  void ResumeTask();
-  void RegisterPlayerTask(WebMediaPlayer* player);
-  void UnregisterPlayerTask(WebMediaPlayer* player);
 
   SbDecodeTargetGraphicsContextProvider*
   GetSbDecodeTargetGraphicsContextProvider() {
@@ -108,14 +101,13 @@
   // paused by us.
   typedef std::map<WebMediaPlayer*, bool> Players;
 
-  // The thread that |players_| is accessed from,
-  base::Thread thread_;
-  scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
-
   const Options options_;
   system_window::SystemWindow* system_window_;
   cobalt::render_tree::ResourceProvider* resource_provider_;
 
+  // Protect access to the list of players.
+  starboard::Mutex players_lock_;
+
   Players players_;
   bool suspended_ = false;
 
diff --git a/src/cobalt/media/player/web_media_player.h b/src/cobalt/media/player/web_media_player.h
index fd02a83..79ce44b 100644
--- a/src/cobalt/media/player/web_media_player.h
+++ b/src/cobalt/media/player/web_media_player.h
@@ -132,6 +132,7 @@
   virtual base::Time GetStartDate() const = 0;
 #endif  // SB_HAS(PLAYER_WITH_URL)
   virtual float GetCurrentTime() const = 0;
+  virtual float GetPlaybackRate() const = 0;
 
   // Get rate of loading the resource.
   virtual int GetDataRate() const = 0;
diff --git a/src/cobalt/media/player/web_media_player_impl.cc b/src/cobalt/media/player/web_media_player_impl.cc
index a72957c..6185a52 100644
--- a/src/cobalt/media/player/web_media_player_impl.cc
+++ b/src/cobalt/media/player/web_media_player_impl.cc
@@ -483,6 +483,14 @@
   return static_cast<float>(pipeline_->GetMediaTime().InSecondsF());
 }
 
+float WebMediaPlayerImpl::GetPlaybackRate() const {
+  DCHECK_EQ(main_loop_, base::MessageLoop::current());
+  if (state_.paused) {
+    return 0.0f;
+  }
+  return state_.playback_rate;
+}
+
 int WebMediaPlayerImpl::GetDataRate() const {
   DCHECK_EQ(main_loop_, base::MessageLoop::current());
 
diff --git a/src/cobalt/media/player/web_media_player_impl.h b/src/cobalt/media/player/web_media_player_impl.h
index 60ce328..55a00c9 100644
--- a/src/cobalt/media/player/web_media_player_impl.h
+++ b/src/cobalt/media/player/web_media_player_impl.h
@@ -157,6 +157,7 @@
   base::Time GetStartDate() const override;
 #endif  // SB_HAS(PLAYER_WITH_URL)
   float GetCurrentTime() const override;
+  float GetPlaybackRate() const override;
 
   // Get rate of loading the resource.
   int32 GetDataRate() const override;
diff --git a/src/cobalt/media/sandbox/web_media_player_sandbox.cc b/src/cobalt/media/sandbox/web_media_player_sandbox.cc
index 079cee5..ed0ca18 100644
--- a/src/cobalt/media/sandbox/web_media_player_sandbox.cc
+++ b/src/cobalt/media/sandbox/web_media_player_sandbox.cc
@@ -14,6 +14,7 @@
 
 #include <algorithm>
 #include <memory>
+#include <sstream>
 #include <string>
 #include <vector>
 
@@ -31,6 +32,7 @@
 #include "cobalt/render_tree/image.h"
 #include "starboard/event.h"
 #include "starboard/file.h"
+#include "starboard/log.h"
 #include "starboard/system.h"
 
 namespace cobalt {
@@ -52,25 +54,40 @@
   const char kExampleProgressiveUrl[] =
       "https://storage.googleapis.com/yt-cobalt-media-element-demo/"
       "progressive.mp4";
-  LOG(ERROR) << "\n\n\n"  // Extra empty lines to separate from other messages
-             << "Usage: " << executable_file_name
-             << " [OPTIONS] <adaptive audio file path>\n"
-             << "   or: " << executable_file_name
-             << " [OPTIONS] <adaptive video file path>\n"
-             << "   or: " << executable_file_name
-             << " [OPTIONS] <adaptive audio file path> "
-             << " <adaptive video file path>\n"
-             << "   or: " << executable_file_name
-             << " [OPTIONS] <progressive video path or url>\n"
-             << "Play adaptive audio/video or progressive video\n\n"
-             << "For example:\n"
-             << executable_file_name << " " << kExampleAdaptiveAudioPathName
-             << "\n"
-             << executable_file_name << " " << kExampleAdaptiveVideoPathName
-             << "\n"
-             << executable_file_name << " " << kExampleAdaptiveAudioPathName
-             << " " << kExampleAdaptiveVideoPathName << "\n"
-             << executable_file_name << " " << kExampleProgressiveUrl << "\n\n";
+  std::stringstream ss;
+  // Head
+  ss << "\n\n"
+     << "======================== " << executable_file_name
+     << " ========================\n";
+
+  // Basic usage
+  ss << "Usage: " << executable_file_name
+     << " [OPTIONS] <adaptive audio file path>\n"
+     << "   or: " << executable_file_name
+     << " [OPTIONS] <adaptive video file path>\n"
+     << "   or: " << executable_file_name
+     << " [OPTIONS] <adaptive audio file path> "
+     << " <adaptive video file path>\n"
+     << "   or: " << executable_file_name
+     << " [OPTIONS] <progressive video path or url>\n"
+     << "Play adaptive audio/video or progressive video\n\n";
+
+  // Options
+  ss << "OPTIONS:\n"
+     << "  --dump_video_data: Dump video data into .dmp files\n"
+     << "  --use_stub_audio_decoder: Use stub audio decoder to play the video\n"
+     << "  --use_stub_audio_sink: Use stub audio sink to play the video\n"
+     << "  --use_stub_video_decoder: Use stub video decoder to play the video\n"
+     << "\n";
+
+  // Usage examples
+  ss << "For example:\n  " << executable_file_name << " --dump_video_data "
+     << kExampleAdaptiveAudioPathName << "\n  " << executable_file_name << " "
+     << kExampleAdaptiveVideoPathName << "\n  " << executable_file_name << " "
+     << kExampleAdaptiveAudioPathName << " " << kExampleAdaptiveVideoPathName
+     << "\n  " << executable_file_name << " " << kExampleProgressiveUrl
+     << "\n\n";
+  SbLogRaw(ss.str().c_str());
 }
 
 std::string MakeCodecParameter(const std::string& string) { return string; }
@@ -373,6 +390,11 @@
     case kSbEventTypeStart: {
       SbEventStartData* data = static_cast<SbEventStartData*>(event->data);
       DCHECK(!s_application);
+      if (data->argument_count == 1) {
+        cobalt::media::sandbox::PrintUsage(data->argument_values[0]);
+        SbSystemRequestStop(0);
+        return;
+      }
       s_application =
           new Application(data->argument_count, data->argument_values);
       break;
diff --git a/src/cobalt/media/web_media_player_factory.h b/src/cobalt/media/web_media_player_factory.h
index c05a924..9b9a37f 100644
--- a/src/cobalt/media/web_media_player_factory.h
+++ b/src/cobalt/media/web_media_player_factory.h
@@ -17,6 +17,7 @@
 
 #include <memory>
 
+#include "base/callback.h"
 #include "cobalt/media/player/web_media_player.h"
 
 namespace cobalt {
@@ -24,9 +25,15 @@
 
 class WebMediaPlayerFactory {
  public:
+  typedef base::RepeatingCallback<void(const WebMediaPlayer*)>
+      EnumeratePlayersCB;
+
   virtual std::unique_ptr<WebMediaPlayer> CreateWebMediaPlayer(
       WebMediaPlayerClient* client) = 0;
 
+  virtual void EnumerateWebMediaPlayers(
+      const EnumeratePlayersCB& enumerate_callback) const = 0;
+
  protected:
   WebMediaPlayerFactory() {}
   ~WebMediaPlayerFactory() {}
diff --git a/src/cobalt/media_session/media_session.cc b/src/cobalt/media_session/media_session.cc
index c615a35..b9d04a0 100644
--- a/src/cobalt/media_session/media_session.cc
+++ b/src/cobalt/media_session/media_session.cc
@@ -36,19 +36,19 @@
 
 void MediaSession::set_metadata(scoped_refptr<MediaMetadata> value) {
   metadata_ = value;
-  MaybeQueueChangeTask();
+  MaybeQueueChangeTask(base::TimeDelta());
 }
 
 void MediaSession::set_playback_state(
     MediaSessionPlaybackState playback_state) {
   playback_state_ = playback_state;
-  MaybeQueueChangeTask();
+  MaybeQueueChangeTask(base::TimeDelta());
 }
 
 void MediaSession::SetActionHandler(
     MediaSessionAction action, const MediaSessionActionHandlerHolder& handler) {
   // See algorithm https://wicg.github.io/mediasession/#actions-model
-  DCHECK_EQ(base::MessageLoop::current()->task_runner(), task_runner_);
+  DCHECK(task_runner_->BelongsToCurrentThread());
   ActionMap::iterator it = action_map_.find(action);
 
   if (it != action_map_.end()) {
@@ -59,32 +59,41 @@
     action_map_[action] = new MediaSessionActionHandlerReference(this, handler);
   }
 
-  MaybeQueueChangeTask();
+  MaybeQueueChangeTask(base::TimeDelta());
 }
 
 void MediaSession::SetPositionState(base::Optional<MediaPositionState> state) {
   last_position_updated_time_ = GetMonotonicNow();
   media_position_state_ = state;
-  MaybeQueueChangeTask();
+  MaybeQueueChangeTask(base::TimeDelta());
 }
 
 void MediaSession::TraceMembers(script::Tracer* tracer) {
   tracer->Trace(metadata_.get());
 }
 
-void MediaSession::MaybeQueueChangeTask() {
-  DCHECK_EQ(base::MessageLoop::current()->task_runner(), task_runner_);
+bool MediaSession::IsChangeTaskQueuedForTesting() const {
+  DCHECK(task_runner_->BelongsToCurrentThread());
+  return is_change_task_queued_;
+}
+
+void MediaSession::MaybeQueueChangeTask(base::TimeDelta delay) {
+  DCHECK(task_runner_->BelongsToCurrentThread());
   if (is_change_task_queued_) {
     return;
   }
   is_change_task_queued_ = true;
-  task_runner_->PostTask(
-      FROM_HERE, base::Bind(&MediaSession::OnChanged, base::Unretained(this)));
+  task_runner_->PostDelayedTask(
+      FROM_HERE,
+      base::Bind(&MediaSession::OnChanged, this),
+      delay);
 }
 
 void MediaSession::OnChanged() {
   is_change_task_queued_ = false;
-  media_session_client_->UpdateMediaSessionState();
+  if (media_session_client_) {
+    media_session_client_->UpdateMediaSessionState();
+  }
 }
 
 }  // namespace media_session
diff --git a/src/cobalt/media_session/media_session.gyp b/src/cobalt/media_session/media_session.gyp
index 242f152..da0d96b 100644
--- a/src/cobalt/media_session/media_session.gyp
+++ b/src/cobalt/media_session/media_session.gyp
@@ -38,7 +38,8 @@
       ],
       'dependencies': [
         '<(DEPTH)/cobalt/base/base.gyp:base',
-        '<(DEPTH)/cobalt/browser/browser_bindings_gen.gyp:generated_types'
+        '<(DEPTH)/cobalt/browser/browser_bindings_gen.gyp:generated_types',
+        '<(DEPTH)/cobalt/math/math.gyp:math',
       ],
       # This target doesn't generate any headers, but it exposes generated
       # header files (for idl dictionaries) through this module's public header
diff --git a/src/cobalt/media_session/media_session.h b/src/cobalt/media_session/media_session.h
index b08d977..6c1db11 100644
--- a/src/cobalt/media_session/media_session.h
+++ b/src/cobalt/media_session/media_session.h
@@ -77,8 +77,12 @@
   DEFINE_WRAPPABLE_TYPE(MediaSession);
   void TraceMembers(script::Tracer* tracer) override;
 
+  // Check whether a change task has been queued. Should only be called by
+  // unit tests.
+  bool IsChangeTaskQueuedForTesting() const;
+
  private:
-  void MaybeQueueChangeTask();
+  void MaybeQueueChangeTask(base::TimeDelta delay);
   void OnChanged();
 
   // Returns a time representing right now - may be overridden for testing.
diff --git a/src/cobalt/media_session/media_session_client.cc b/src/cobalt/media_session/media_session_client.cc
index 96376c2..c3c6fe8 100644
--- a/src/cobalt/media_session/media_session_client.cc
+++ b/src/cobalt/media_session/media_session_client.cc
@@ -15,11 +15,66 @@
 #include "cobalt/media_session/media_session_client.h"
 
 #include <algorithm>
+#include <cmath>
 #include <memory>
 
+#include "starboard/time.h"
+
 namespace cobalt {
 namespace media_session {
 
+namespace {
+
+// Delay to re-query position state after an action has been invoked.
+const base::TimeDelta kUpdateDelay = base::TimeDelta::FromMilliseconds(250);
+
+// Guess the media position state for the media session.
+void GuessMediaPositionState(MediaSessionState* session_state,
+    const media::WebMediaPlayer** guess_player,
+    const media::WebMediaPlayer* current_player) {
+  // Assume the player with the biggest video size is the one controlled by the
+  // media session. This isn't perfect, so it's best that the web app set the
+  // media position state explicitly.
+  if (*guess_player == nullptr ||
+      (*guess_player)->GetNaturalSize().GetArea() <
+      current_player->GetNaturalSize().GetArea()) {
+    *guess_player = current_player;
+
+    MediaPositionState position_state;
+    float duration = (*guess_player)->GetDuration();
+    if (std::isfinite(duration)) {
+      position_state.set_duration(duration);
+    } else if (std::isinf(duration)) {
+      position_state.set_duration(kSbTimeMax);
+    } else {
+      position_state.set_duration(0.0);
+    }
+    position_state.set_playback_rate((*guess_player)->GetPlaybackRate());
+    position_state.set_position((*guess_player)->GetCurrentTime());
+
+    *session_state = MediaSessionState(
+        session_state->metadata(),
+        SbTimeGetMonotonicNow(),
+        position_state,
+        session_state->actual_playback_state(),
+        session_state->available_actions());
+  }
+}
+
+}  // namespace
+
+MediaSessionClient::~MediaSessionClient() {
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+  // Prevent any outstanding MediaSession::OnChanged tasks from calling this.
+  media_session_->media_session_client_ = nullptr;
+}
+
+void MediaSessionClient::SetMediaPlayerFactory(
+    const media::WebMediaPlayerFactory* factory) {
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+  media_player_factory_ = factory;
+}
+
 MediaSessionPlaybackState MediaSessionClient::ComputeActualPlaybackState()
     const {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
@@ -76,6 +131,13 @@
       result[kMediaSessionActionPlay] = false;
       break;
     case kMediaSessionPlaybackStateNone:
+      // Not defined in the spec: disable Seekbackward, Seekforward, SeekTo, &
+      // Stop when no media is playing.
+      result[kMediaSessionActionSeekbackward] = false;
+      result[kMediaSessionActionSeekforward] = false;
+      result[kMediaSessionActionSeekto] = false;
+      result[kMediaSessionActionStop] = false;
+    // Fall-through intended (None case falls through to Paused case).
     case kMediaSessionPlaybackStatePaused:
       // "Otherwise, remove pause from available actions."
       result[kMediaSessionActionPause] = false;
@@ -134,26 +196,11 @@
   }
 
   it->second->value().Run(*details);
-}
 
-MediaSessionState MediaSessionClient::GetMediaSessionState() {
-  MediaSessionState session_state;
-  GetMediaSessionStateInternal(&session_state);
-  return session_state;
-}
-
-void MediaSessionClient::GetMediaSessionStateInternal(
-    MediaSessionState* session_state) {
-  DCHECK(media_session_->task_runner_);
-  if (!media_session_->task_runner_->BelongsToCurrentThread()) {
-    media_session_->task_runner_->PostBlockingTask(
-        FROM_HERE,
-        base::Bind(&MediaSessionClient::GetMediaSessionStateInternal,
-                   base::Unretained(this), base::Unretained(session_state)));
-    return;
+  // Queue a session update to reflect the effects of the action.
+  if (!media_session_->media_position_state_) {
+    media_session_->MaybeQueueChangeTask(kUpdateDelay);
   }
-
-  *session_state = session_state_;
 }
 
 void MediaSessionClient::UpdateMediaSessionState() {
@@ -168,12 +215,30 @@
     metadata->set_album(session_metadata->album());
     metadata->set_artwork(session_metadata->artwork());
   }
+
   session_state_ = MediaSessionState(
       metadata,
       media_session_->last_position_updated_time_,
       media_session_->media_position_state_,
       ComputeActualPlaybackState(),
       ComputeAvailableActions());
+
+  // Compute the media position state if it's not set in the media session.
+  if (!media_session_->media_position_state_ && media_player_factory_) {
+    const media::WebMediaPlayer* player = nullptr;
+    media_player_factory_->EnumerateWebMediaPlayers(
+        base::BindRepeating(&GuessMediaPositionState,
+                            &session_state_, &player));
+
+    // The media duration may be reported as 0 when seeking. Re-query the
+    // media session state after a delay.
+    if (session_state_.actual_playback_state() ==
+            kMediaSessionPlaybackStatePlaying &&
+        session_state_.duration() == 0) {
+      media_session_->MaybeQueueChangeTask(kUpdateDelay);
+    }
+  }
+
   OnMediaSessionStateChanged(session_state_);
 }
 
diff --git a/src/cobalt/media_session/media_session_client.h b/src/cobalt/media_session/media_session_client.h
index 77118d9..baf5277 100644
--- a/src/cobalt/media_session/media_session_client.h
+++ b/src/cobalt/media_session/media_session_client.h
@@ -19,6 +19,7 @@
 #include <memory>
 
 #include "base/threading/thread_checker.h"
+#include "cobalt/media/web_media_player_factory.h"
 #include "cobalt/media_session/media_session.h"
 #include "cobalt/media_session/media_session_action_details.h"
 #include "cobalt/media_session/media_session_state.h"
@@ -40,7 +41,7 @@
       : media_session_(media_session),
         platform_playback_state_(kMediaSessionPlaybackStateNone) {}
 
-  virtual ~MediaSessionClient() {}
+  virtual ~MediaSessionClient();
 
   // Creates platform-specific instance.
   static std::unique_ptr<MediaSessionClient> Create();
@@ -48,6 +49,12 @@
   // Retrieves the singleton MediaSession associated with this client.
   scoped_refptr<MediaSession>& GetMediaSession() { return media_session_; }
 
+  // The web app should set the MediaPositionState of the MediaSession object.
+  // However, if that is not done, then query the web media player factory to
+  // guess which player is associated with the media session to get the media
+  // position state. The player factory must outlive the media session client.
+  void SetMediaPlayerFactory(const media::WebMediaPlayerFactory* factory);
+
   // Sets the platform's current playback state. This is used to compute
   // the "guessed playback state"
   // https://wicg.github.io/mediasession/#guessed-playback-state
@@ -69,9 +76,6 @@
     InvokeActionInternal(std::move(details));
   }
 
-  // Returns a copy of the current MediaSessionState.
-  MediaSessionState GetMediaSessionState();
-
   // Invoked on the browser thread when any metadata, position state, playback
   // state, or supported session actions change.
   virtual void OnMediaSessionStateChanged(
@@ -82,9 +86,9 @@
   scoped_refptr<MediaSession> media_session_;
   MediaSessionState session_state_;
   MediaSessionPlaybackState platform_playback_state_;
+  const media::WebMediaPlayerFactory* media_player_factory_ = nullptr;
 
   void UpdateMediaSessionState();
-  void GetMediaSessionStateInternal(MediaSessionState* session_state);
   MediaSessionPlaybackState ComputeActualPlaybackState() const;
   MediaSessionState::AvailableActionsSet ComputeAvailableActions() const;
 
diff --git a/src/cobalt/media_session/media_session_state.h b/src/cobalt/media_session/media_session_state.h
index e567f60..65148b4 100644
--- a/src/cobalt/media_session/media_session_state.h
+++ b/src/cobalt/media_session/media_session_state.h
@@ -53,6 +53,9 @@
     return metadata_;
   }
 
+  // Returns whether media position state was specified.
+  bool has_position_state() const { return last_position_updated_time_ != 0; }
+
   // Returns the position of the current playback.
   // https://wicg.github.io/mediasession/#current-playback-position
   // Returns the position
diff --git a/src/cobalt/media_session/media_session_test.cc b/src/cobalt/media_session/media_session_test.cc
index 63808c6..687167a 100644
--- a/src/cobalt/media_session/media_session_test.cc
+++ b/src/cobalt/media_session/media_session_test.cc
@@ -25,6 +25,8 @@
 #include "cobalt/script/script_value.h"
 #include "cobalt/script/testing/fake_script_value.h"
 #include "cobalt/script/wrappable.h"
+#include "starboard/thread.h"
+#include "starboard/time.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -62,7 +64,25 @@
   MockMediaSession& mock_session() {
     return static_cast<MockMediaSession&>(*GetMediaSession().get());
   }
-  MOCK_METHOD1(OnMediaSessionStateChanged, void(const MediaSessionState&));
+  void OnMediaSessionStateChanged(const MediaSessionState& session_state)
+      override {
+    session_state_ = session_state;
+    ++session_change_count_;
+  }
+  void WaitForSessionStateChange() {
+    size_t current_change_count = session_change_count_;
+    while (GetMediaSession()->IsChangeTaskQueuedForTesting()) {
+      base::RunLoop().RunUntilIdle();
+      if (current_change_count != session_change_count_) {
+        break;
+      }
+      SbThreadSleep(kSbTimeMillisecond);
+    }
+  }
+  MediaSessionState GetMediaSessionState() const { return session_state_; }
+  size_t GetMediaSessionChangeCount() const { return session_change_count_; }
+  MediaSessionState session_state_;
+  size_t session_change_count_ = 0;
 };
 
 MATCHER_P(SeekTime, time, "") {
@@ -79,99 +99,86 @@
 
 TEST(MediaSessionTest, MediaSessionTest) {
   base::MessageLoop message_loop(base::MessageLoop::TYPE_DEFAULT);
-  base::RunLoop run_loop;
 
   MockMediaSessionClient client;
-
-  ON_CALL(client, OnMediaSessionStateChanged(_))
-      .WillByDefault(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit));
-  EXPECT_CALL(client, OnMediaSessionStateChanged(_)).Times(1);
-
   scoped_refptr<MediaSession> session = client.GetMediaSession();
 
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kMediaSessionPlaybackStateNone,
-            client.GetMediaSessionState().actual_playback_state());
+  EXPECT_EQ(kMediaSessionPlaybackStateNone, session->playback_state());
 
   session->set_playback_state(kMediaSessionPlaybackStatePlaying);
 
-  base::RunLoop().RunUntilIdle();
+  client.WaitForSessionStateChange();
   EXPECT_EQ(kMediaSessionPlaybackStatePlaying,
             client.GetMediaSessionState().actual_playback_state());
 
-  run_loop.Run();
+  EXPECT_EQ(client.GetMediaSessionChangeCount(), 1);
 }
 
 TEST(MediaSessionTest, ActualPlaybackState) {
   base::MessageLoop message_loop(base::MessageLoop::TYPE_DEFAULT);
-  base::RunLoop run_loop;
 
   MockMediaSessionClient client;
-
-  ON_CALL(client, OnMediaSessionStateChanged(_))
-      .WillByDefault(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit));
-  EXPECT_CALL(client, OnMediaSessionStateChanged(_)).Times(AtLeast(2));
-
   scoped_refptr<MediaSession> session = client.GetMediaSession();
 
-  base::RunLoop().RunUntilIdle();
+  // Trigger a session state change without impacting playback state.
+  session->set_metadata(new MediaMetadata);
+  client.WaitForSessionStateChange();
+  EXPECT_EQ(client.GetMediaSessionChangeCount(), 1);
+
   EXPECT_EQ(kMediaSessionPlaybackStateNone,
             client.GetMediaSessionState().actual_playback_state());
 
   client.UpdatePlatformPlaybackState(kMediaSessionPlaybackStatePlaying);
 
-  base::RunLoop().RunUntilIdle();
+  client.WaitForSessionStateChange();
   EXPECT_EQ(kMediaSessionPlaybackStatePlaying,
             client.GetMediaSessionState().actual_playback_state());
 
   session->set_playback_state(kMediaSessionPlaybackStatePlaying);
 
-  base::RunLoop().RunUntilIdle();
+  client.WaitForSessionStateChange();
   EXPECT_EQ(kMediaSessionPlaybackStatePlaying,
             client.GetMediaSessionState().actual_playback_state());
 
   session->set_playback_state(kMediaSessionPlaybackStatePaused);
 
-  base::RunLoop().RunUntilIdle();
+  client.WaitForSessionStateChange();
   EXPECT_EQ(kMediaSessionPlaybackStatePlaying,
             client.GetMediaSessionState().actual_playback_state());
 
   client.UpdatePlatformPlaybackState(kMediaSessionPlaybackStatePaused);
 
-  base::RunLoop().RunUntilIdle();
+  client.WaitForSessionStateChange();
   EXPECT_EQ(kMediaSessionPlaybackStatePaused,
             client.GetMediaSessionState().actual_playback_state());
 
   session->set_playback_state(kMediaSessionPlaybackStateNone);
 
-  base::RunLoop().RunUntilIdle();
+  client.WaitForSessionStateChange();
   EXPECT_EQ(kMediaSessionPlaybackStateNone,
             client.GetMediaSessionState().actual_playback_state());
 
   client.UpdatePlatformPlaybackState(kMediaSessionPlaybackStateNone);
 
-  base::RunLoop().RunUntilIdle();
+  client.WaitForSessionStateChange();
   EXPECT_EQ(kMediaSessionPlaybackStateNone,
             client.GetMediaSessionState().actual_playback_state());
 
-  run_loop.Run();
+  EXPECT_GE(client.GetMediaSessionChangeCount(), 2);
 }
 
 TEST(MediaSessionTest, NullActionClears) {
   base::MessageLoop message_loop(base::MessageLoop::TYPE_DEFAULT);
-  base::RunLoop run_loop;
 
   MockMediaSessionClient client;
-  MediaSessionState state;
-
-  ON_CALL(client, OnMediaSessionStateChanged(_))
-      .WillByDefault(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit));
-  EXPECT_CALL(client, OnMediaSessionStateChanged(_)).Times(AtLeast(0));
-
   scoped_refptr<MediaSession> session = client.GetMediaSession();
 
-  base::RunLoop().RunUntilIdle();
-  state = client.GetMediaSessionState();
+  // Trigger a session state change without impacting playback state.
+  session->set_metadata(new MediaMetadata);
+  client.WaitForSessionStateChange();
+  EXPECT_EQ(client.GetMediaSessionChangeCount(), 1);
+
+  MediaSessionState state = client.GetMediaSessionState();
   EXPECT_EQ(kMediaSessionPlaybackStateNone, state.actual_playback_state());
   EXPECT_EQ(0, state.available_actions().to_ulong());
 
@@ -184,30 +191,30 @@
   FakeScriptValue<MediaSession::MediaSessionActionHandler> null_holder(NULL);
 
   session->SetActionHandler(kMediaSessionActionPlay, holder);
-  base::RunLoop().RunUntilIdle();
+  client.WaitForSessionStateChange();
   EXPECT_EQ(1, client.GetMediaSessionState().available_actions().to_ulong());
   client.InvokeAction(kMediaSessionActionPlay);
 
   session->SetActionHandler(kMediaSessionActionPlay, null_holder);
-  base::RunLoop().RunUntilIdle();
+  client.WaitForSessionStateChange();
   EXPECT_EQ(0, client.GetMediaSessionState().available_actions().to_ulong());
   client.InvokeAction(kMediaSessionActionPlay);
+
+  EXPECT_GE(client.GetMediaSessionChangeCount(), 3);
 }
 
 TEST(MediaSessionTest, AvailableActions) {
   base::MessageLoop message_loop(base::MessageLoop::TYPE_DEFAULT);
-  base::RunLoop run_loop;
 
   MockMediaSessionClient client;
   MediaSessionState state;
-
-  ON_CALL(client, OnMediaSessionStateChanged(_))
-      .WillByDefault(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit));
-  EXPECT_CALL(client, OnMediaSessionStateChanged(_)).Times(AtLeast(0));
-
   scoped_refptr<MediaSession> session = client.GetMediaSession();
 
-  base::RunLoop().RunUntilIdle();
+  // Trigger a session state change without impacting playback state.
+  session->set_metadata(new MediaMetadata);
+  client.WaitForSessionStateChange();
+  EXPECT_EQ(client.GetMediaSessionChangeCount(), 1);
+
   state = client.GetMediaSessionState();
   EXPECT_EQ(kMediaSessionPlaybackStateNone, state.actual_playback_state());
   EXPECT_EQ(0, state.available_actions().to_ulong());
@@ -218,28 +225,27 @@
 
   session->SetActionHandler(kMediaSessionActionPlay, holder);
 
-  base::RunLoop().RunUntilIdle();
+  client.WaitForSessionStateChange();
   state = client.GetMediaSessionState();
   EXPECT_EQ(1 << kMediaSessionActionPlay,
             state.available_actions().to_ulong());
 
   session->SetActionHandler(kMediaSessionActionPause, holder);
 
-  base::RunLoop().RunUntilIdle();
+  client.WaitForSessionStateChange();
   state = client.GetMediaSessionState();
   EXPECT_EQ(1 << kMediaSessionActionPlay,
             state.available_actions().to_ulong());
 
   session->SetActionHandler(kMediaSessionActionSeekto, holder);
 
-  base::RunLoop().RunUntilIdle();
+  client.WaitForSessionStateChange();
   state = client.GetMediaSessionState();
-  EXPECT_EQ(1 << kMediaSessionActionPlay | 1 << kMediaSessionActionSeekto,
-            state.available_actions().to_ulong());
+  EXPECT_EQ(1 << kMediaSessionActionPlay, state.available_actions().to_ulong());
 
   client.UpdatePlatformPlaybackState(kMediaSessionPlaybackStatePlaying);
 
-  base::RunLoop().RunUntilIdle();
+  client.WaitForSessionStateChange();
   state = client.GetMediaSessionState();
   EXPECT_EQ(kMediaSessionPlaybackStatePlaying, state.actual_playback_state());
   EXPECT_EQ(1 << kMediaSessionActionPause | 1 << kMediaSessionActionSeekto,
@@ -247,7 +253,7 @@
 
   session->set_playback_state(kMediaSessionPlaybackStatePlaying);
 
-  base::RunLoop().RunUntilIdle();
+  client.WaitForSessionStateChange();
   state = client.GetMediaSessionState();
   EXPECT_EQ(kMediaSessionPlaybackStatePlaying, state.actual_playback_state());
   EXPECT_EQ(1 << kMediaSessionActionPause | 1 << kMediaSessionActionSeekto,
@@ -255,7 +261,7 @@
 
   session->set_playback_state(kMediaSessionPlaybackStatePaused);
 
-  base::RunLoop().RunUntilIdle();
+  client.WaitForSessionStateChange();
   state = client.GetMediaSessionState();
   EXPECT_EQ(kMediaSessionPlaybackStatePlaying, state.actual_playback_state());
   EXPECT_EQ(1 << kMediaSessionActionPause | 1 << kMediaSessionActionSeekto,
@@ -263,7 +269,7 @@
 
   session->set_playback_state(kMediaSessionPlaybackStatePlaying);
 
-  base::RunLoop().RunUntilIdle();
+  client.WaitForSessionStateChange();
   state = client.GetMediaSessionState();
   EXPECT_EQ(kMediaSessionPlaybackStatePlaying, state.actual_playback_state());
   EXPECT_EQ(1 << kMediaSessionActionPause | 1 << kMediaSessionActionSeekto,
@@ -271,7 +277,7 @@
 
   client.UpdatePlatformPlaybackState(kMediaSessionPlaybackStatePaused);
 
-  base::RunLoop().RunUntilIdle();
+  client.WaitForSessionStateChange();
   state = client.GetMediaSessionState();
   EXPECT_EQ(kMediaSessionPlaybackStatePlaying, state.actual_playback_state());
   EXPECT_EQ(1 << kMediaSessionActionPause | 1 << kMediaSessionActionSeekto,
@@ -279,15 +285,14 @@
 
   session->set_playback_state(kMediaSessionPlaybackStateNone);
 
-  base::RunLoop().RunUntilIdle();
+  client.WaitForSessionStateChange();
   state = client.GetMediaSessionState();
   EXPECT_EQ(kMediaSessionPlaybackStateNone, state.actual_playback_state());
-  EXPECT_EQ(1 << kMediaSessionActionPlay | 1 << kMediaSessionActionSeekto,
-            state.available_actions().to_ulong());
+  EXPECT_EQ(1 << kMediaSessionActionPlay, state.available_actions().to_ulong());
 
   session->set_playback_state(kMediaSessionPlaybackStatePaused);
 
-  base::RunLoop().RunUntilIdle();
+  client.WaitForSessionStateChange();
   state = client.GetMediaSessionState();
   EXPECT_EQ(kMediaSessionPlaybackStatePaused, state.actual_playback_state());
   EXPECT_EQ(1 << kMediaSessionActionPlay | 1 << kMediaSessionActionSeekto,
@@ -295,25 +300,17 @@
 
   client.UpdatePlatformPlaybackState(kMediaSessionPlaybackStateNone);
 
-  base::RunLoop().RunUntilIdle();
+  client.WaitForSessionStateChange();
   state = client.GetMediaSessionState();
   EXPECT_EQ(kMediaSessionPlaybackStatePaused, state.actual_playback_state());
   EXPECT_EQ(1 << kMediaSessionActionPlay | 1 << kMediaSessionActionSeekto,
             state.available_actions().to_ulong());
-
-  run_loop.Run();
 }
 
 TEST(MediaSessionTest, SeekDetails) {
   base::MessageLoop message_loop(base::MessageLoop::TYPE_DEFAULT);
-  base::RunLoop run_loop;
 
   MockMediaSessionClient client;
-
-  ON_CALL(client, OnMediaSessionStateChanged(_))
-      .WillByDefault(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit));
-  EXPECT_CALL(client, OnMediaSessionStateChanged(_)).Times(AtLeast(0));
-
   scoped_refptr<MediaSession> session = client.GetMediaSession();
 
   MockCallbackFunction cf;
@@ -351,18 +348,15 @@
   details->set_action(kMediaSessionActionSeekbackward);
   details->set_seek_offset(5.6);
   client.InvokeAction(std::move(details));
+
+  client.WaitForSessionStateChange();
+  EXPECT_GE(client.GetMediaSessionChangeCount(), 0);
 }
 
 TEST(MediaSessionTest, PositionState) {
   base::MessageLoop message_loop(base::MessageLoop::TYPE_DEFAULT);
-  base::RunLoop run_loop;
 
   MockMediaSessionClient client;
-
-  ON_CALL(client, OnMediaSessionStateChanged(_))
-      .WillByDefault(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit));
-  EXPECT_CALL(client, OnMediaSessionStateChanged(_)).Times(AtLeast(3));
-
   MockMediaSession& session = client.mock_session();
   MediaSessionState state;
 
@@ -373,8 +367,12 @@
   position_state->set_duration(100.0);
   position_state->set_position(10.0);
 
+  // Trigger a session state change without impacting playback state.
+  session.set_metadata(new MediaMetadata);
+  client.WaitForSessionStateChange();
+  EXPECT_EQ(client.GetMediaSessionChangeCount(), 1);
+
   // Position state not yet reported
-  base::RunLoop().RunUntilIdle();
   state = client.GetMediaSessionState();
   EXPECT_EQ(0,
             state.GetCurrentPlaybackPosition(start_time + 999 * kSbTimeSecond));
@@ -385,7 +383,7 @@
   EXPECT_CALL(session, GetMonotonicNow()).WillOnce(Return(start_time));
   position_state->set_playback_rate(1.0);
   session.SetPositionState(position_state);
-  base::RunLoop().RunUntilIdle();
+  client.WaitForSessionStateChange();
   state = client.GetMediaSessionState();
   EXPECT_EQ((10 + 50) * kSbTimeSecond,
             state.GetCurrentPlaybackPosition(start_time + 50 * kSbTimeSecond));
@@ -398,7 +396,7 @@
   EXPECT_CALL(session, GetMonotonicNow()).WillOnce(Return(start_time));
   position_state->set_playback_rate(2.0);
   session.SetPositionState(position_state);
-  base::RunLoop().RunUntilIdle();
+  client.WaitForSessionStateChange();
   state = client.GetMediaSessionState();
   EXPECT_EQ((10 + 2 * 20) * kSbTimeSecond,
             state.GetCurrentPlaybackPosition(start_time + 20 * kSbTimeSecond));
@@ -411,7 +409,7 @@
   EXPECT_CALL(session, GetMonotonicNow()).WillOnce(Return(start_time));
   position_state->set_playback_rate(-1.0);
   session.SetPositionState(position_state);
-  base::RunLoop().RunUntilIdle();
+  client.WaitForSessionStateChange();
   state = client.GetMediaSessionState();
   EXPECT_EQ(0 * kSbTimeSecond,
             state.GetCurrentPlaybackPosition(start_time + 20 * kSbTimeSecond));
@@ -425,7 +423,7 @@
   position_state->set_duration(std::numeric_limits<double>::infinity());
   position_state->set_playback_rate(1.0);
   session.SetPositionState(position_state);
-  base::RunLoop().RunUntilIdle();
+  client.WaitForSessionStateChange();
   state = client.GetMediaSessionState();
   EXPECT_EQ(10 * kSbTimeSecond + 1 * kSbTimeDay,
             state.GetCurrentPlaybackPosition(start_time + 1 * kSbTimeDay));
@@ -436,7 +434,7 @@
   // (Actual playback rate is 0.0, so position is the last reported position.
   //  The web app should update position and playback states together.)
   session.set_playback_state(kMediaSessionPlaybackStatePaused);
-  base::RunLoop().RunUntilIdle();
+  client.WaitForSessionStateChange();
   state = client.GetMediaSessionState();
   EXPECT_EQ(10 * kSbTimeSecond,
             state.GetCurrentPlaybackPosition(start_time + 999 * kSbTimeSecond));
@@ -447,32 +445,32 @@
   // Position state cleared
   EXPECT_CALL(session, GetMonotonicNow()).WillOnce(Return(start_time));
   session.SetPositionState(base::nullopt);
-  base::RunLoop().RunUntilIdle();
+  client.WaitForSessionStateChange();
   state = client.GetMediaSessionState();
   EXPECT_EQ(0,
             state.GetCurrentPlaybackPosition(start_time + 999 * kSbTimeSecond));
   EXPECT_EQ(0, state.duration());
   EXPECT_EQ(0.0, state.actual_playback_rate());
+
+  EXPECT_GE(client.GetMediaSessionChangeCount(), 3);
 }
 
 TEST(MediaSessionTest, Metadata) {
   base::MessageLoop message_loop(base::MessageLoop::TYPE_DEFAULT);
-  base::RunLoop run_loop;
 
   MockMediaSessionClient client;
-
-  ON_CALL(client, OnMediaSessionStateChanged(_))
-      .WillByDefault(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit));
-  EXPECT_CALL(client, OnMediaSessionStateChanged(_)).Times(AtLeast(0));
-
   MockMediaSession& session = client.mock_session();
   MediaSessionState state;
 
   MediaMetadataInit init_metadata;
   base::Optional<MediaMetadataInit> state_metadata;
 
+  // Trigger a session state change without impacting metadata.
+  session.set_playback_state(kMediaSessionPlaybackStateNone);
+  client.WaitForSessionStateChange();
+  EXPECT_EQ(client.GetMediaSessionChangeCount(), 1);
+
   // Metadata not yet set
-  base::RunLoop().RunUntilIdle();
   state = client.GetMediaSessionState();
   state_metadata = state.metadata();
   EXPECT_FALSE(state.has_metadata());
@@ -491,7 +489,7 @@
   session.set_metadata(
       scoped_refptr<MediaMetadata>(new MediaMetadata(init_metadata)));
 
-  base::RunLoop().RunUntilIdle();
+  client.WaitForSessionStateChange();
   state = client.GetMediaSessionState();
   state_metadata = state.metadata();
   EXPECT_TRUE(state.has_metadata());
@@ -501,6 +499,8 @@
   EXPECT_EQ("album", state_metadata->album());
   EXPECT_EQ(1, state_metadata->artwork().size());
   EXPECT_EQ("http://art.image", state_metadata->artwork().at(0).src());
+
+  EXPECT_GE(client.GetMediaSessionChangeCount(), 2);
 }
 
 }  // namespace
diff --git a/src/cobalt/network/net_log_constants.cc b/src/cobalt/network/net_log_constants.cc
index 6f96411..a012c4b 100644
--- a/src/cobalt/network/net_log_constants.cc
+++ b/src/cobalt/network/net_log_constants.cc
@@ -115,7 +115,7 @@
   {
     std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue());
 
-    // TODO[johnx]: find out where the corresponding integer number for each
+    // TODO: find out where the corresponding integer number for each
     // event phase lives and replace the following hard-coded number with them.
     dict->SetInteger("PHASE_BEGIN", 0);
     dict->SetInteger("PHASE_END", 1);
diff --git a/src/cobalt/network/switches.cc b/src/cobalt/network/switches.cc
index 6a7bd0a..469b8ae 100644
--- a/src/cobalt/network/switches.cc
+++ b/src/cobalt/network/switches.cc
@@ -33,6 +33,9 @@
 const char kUserAgent[] = "user_agent";
 #endif  // ENABLE_DEBUG_COMMAND_LINE_SWITCHES
 
+// Switch to disable use of the Quic network protocol.
+const char kDisableQuic[] = "disable_quic";
+
 }  // namespace switches
 }  // namespace network
 }  // namespace cobalt
diff --git a/src/cobalt/network/switches.h b/src/cobalt/network/switches.h
index 8d46ce1..a3c3894 100644
--- a/src/cobalt/network/switches.h
+++ b/src/cobalt/network/switches.h
@@ -24,6 +24,7 @@
 extern const char kNetLogCaptureMode[];
 extern const char kUserAgent[];
 #endif  // ENABLE_DEBUG_COMMAND_LINE_SWITCHES
+extern const char kDisableQuic[];
 
 }  // namespace switches
 }  // namespace network
diff --git a/src/cobalt/network/url_request_context.cc b/src/cobalt/network/url_request_context.cc
index 850eade..4cfb2c8 100644
--- a/src/cobalt/network/url_request_context.cc
+++ b/src/cobalt/network/url_request_context.cc
@@ -22,11 +22,12 @@
 #include "cobalt/network/network_delegate.h"
 #include "cobalt/network/persistent_cookie_store.h"
 #include "cobalt/network/proxy_config_service.h"
+#include "cobalt/network/switches.h"
 #include "net/cert/cert_net_fetcher.h"
+#include "net/cert/cert_verifier.h"
 #include "net/cert/cert_verify_proc.h"
 #include "net/cert/ct_policy_enforcer.h"
 #include "net/cert/do_nothing_ct_verifier.h"
-#include "net/cert/multi_threaded_cert_verifier.h"
 #include "net/cert_net/cert_net_fetcher_impl.h"
 #include "net/dns/host_cache.h"
 #include "net/http/http_auth_handler_factory.h"
@@ -49,13 +50,30 @@
   proxy_config.proxy_rules().ParseFromString(proxy_rules);
   return proxy_config;
 }
+
+#if defined(ENABLE_DEBUGGER)
+const char kQUICToggleCommand[] = "quic_toggle";
+const char kQUICToggleCommandShortHelp[] = "Toggles QUIC support on/off.";
+const char kQUICToggleCommandLongHelp[] =
+    "Each time this is called, it will toggle whether QUIC support is "
+    "enabled or not. The new value will apply for new streams.";
+#endif  // defined(ENABLE_DEBUGGER)
+
 }  // namespace
 
 URLRequestContext::URLRequestContext(
     storage::StorageManager* storage_manager, const std::string& custom_proxy,
     net::NetLog* net_log, bool ignore_certificate_errors,
     scoped_refptr<base::SingleThreadTaskRunner> network_task_runner)
-    : ALLOW_THIS_IN_INITIALIZER_LIST(storage_(this)) {
+    : ALLOW_THIS_IN_INITIALIZER_LIST(storage_(this))
+#if defined(ENABLE_DEBUGGER)
+      ,
+      ALLOW_THIS_IN_INITIALIZER_LIST(quic_toggle_command_handler_(
+          kQUICToggleCommand,
+          base::Bind(&URLRequestContext::OnQuicToggle, base::Unretained(this)),
+          kQUICToggleCommandShortHelp, kQUICToggleCommandLongHelp))
+#endif  // defined(ENABLE_DEBUGGER)
+{
   if (storage_manager) {
     persistent_cookie_store_ =
         new PersistentCookieStore(storage_manager, network_task_runner);
@@ -85,11 +103,13 @@
   storage_.set_ct_policy_enforcer(std::unique_ptr<net::CTPolicyEnforcer>(
       new net::DefaultCTPolicyEnforcer()));
   DCHECK(ct_policy_enforcer());
-  storage_.set_cert_verifier(std::make_unique<net::MultiThreadedCertVerifier>(
-      net::CertVerifyProc::CreateDefault()));
+  // As of Chromium m70 net, CreateDefault will return a caching multi-thread
+  // cert verifier, the verification cache will usually cache 25-40
+  // results in a single session which can take up to 100KB memory.
+  storage_.set_cert_verifier(net::CertVerifier::CreateDefault());
   storage_.set_transport_security_state(
       std::make_unique<net::TransportSecurityState>());
-  // TODO[johnx]: Investigate if we want the cert transparency verifier.
+  // TODO: Investigate if we want the cert transparency verifier.
   storage_.set_cert_transparency_verifier(
       std::make_unique<net::DoNothingCTVerifier>());
   storage_.set_ssl_config_service(
@@ -102,15 +122,13 @@
 
   net::HttpNetworkSession::Params params;
 #if defined(COBALT_ENABLE_QUIC)
-  params.enable_quic = true;
+  base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
+  params.enable_quic = !command_line->HasSwitch(switches::kDisableQuic);
 #endif
 #if defined(ENABLE_IGNORE_CERTIFICATE_ERRORS)
   params.ignore_certificate_errors = ignore_certificate_errors;
   if (ignore_certificate_errors) {
-    auto* multi_threaded_cert_verifier =
-        base::polymorphic_downcast<net::MultiThreadedCertVerifier*>(
-            cert_verifier());
-    multi_threaded_cert_verifier->set_ignore_errors(true);
+    cert_verifier()->set_ignore_certificate_errors(true);
     LOG(INFO) << "ignore_certificate_errors option specified, Certificate "
                  "validation results will be ignored but error message will "
                  "still be displayed.";
@@ -164,5 +182,12 @@
       std::make_unique<ProxyConfigService>(proxy_config));
 }
 
+#if defined(ENABLE_DEBUGGER)
+void URLRequestContext::OnQuicToggle(const std::string& /*message*/) {
+  DCHECK(storage_.http_network_session());
+  storage_.http_network_session()->ToggleQuic();
+}
+#endif  // defined(ENABLE_DEBUGGER)
+
 }  // namespace network
 }  // namespace cobalt
diff --git a/src/cobalt/network/url_request_context.h b/src/cobalt/network/url_request_context.h
index 8845870..56852a9 100644
--- a/src/cobalt/network/url_request_context.h
+++ b/src/cobalt/network/url_request_context.h
@@ -23,6 +23,10 @@
 #include "net/url_request/url_request_context_getter.h"
 #include "net/url_request/url_request_context_storage.h"
 
+#if defined(ENABLE_DEBUGGER)
+#include "cobalt/debug/console/command_manager.h"
+#endif  // ENABLE_DEBUGGER
+
 namespace cobalt {
 namespace storage {
 class StorageManager;
@@ -44,6 +48,16 @@
   net::URLRequestContextStorage storage_;
   scoped_refptr<net::CookieMonster::PersistentCookieStore>
       persistent_cookie_store_;
+
+#if defined(ENABLE_DEBUGGER)
+  // Command handler object for toggling the input fuzzer on/off.
+  debug::console::ConsoleCommandManager::CommandHandler
+      quic_toggle_command_handler_;
+
+  // Toggles the input fuzzer on/off.  Ignores the parameter.
+  void OnQuicToggle(const std::string&);
+#endif  // defined(ENABLE_DEBUGGER)
+
   DISALLOW_COPY_AND_ASSIGN(URLRequestContext);
 };
 
diff --git a/src/cobalt/renderer/glimp_shaders/glsl/fragment_skia_texture_lookup_translated_rectangle.glsl b/src/cobalt/renderer/glimp_shaders/glsl/fragment_skia_texture_lookup_translated_rectangle.glsl
new file mode 100644
index 0000000..6969506
--- /dev/null
+++ b/src/cobalt/renderer/glimp_shaders/glsl/fragment_skia_texture_lookup_translated_rectangle.glsl
@@ -0,0 +1,39 @@
+#version 100

+

+uniform highp float u_skRTHeight;

+precision mediump float;

+uniform vec4 uColor_Stage0;

+uniform vec4 uproxyRect_Stage1;

+uniform float ucornerRadius_Stage1;

+uniform float ublurRadius_Stage1;

+uniform highp sampler2D uTextureSampler_0_Stage1;

+void main() {

+highp     vec2 _sktmpCoord = gl_FragCoord.xy;

+highp     vec4 sk_FragCoord = vec4(_sktmpCoord.x, u_skRTHeight - _sktmpCoord.y, 1.0, 1.0);

+    vec4 outputColor_Stage0;

+    {

+        outputColor_Stage0 = uColor_Stage0;

+    }

+    vec4 output_Stage1;

+    {

+        vec2 translatedFragPos = sk_FragCoord.xy - uproxyRect_Stage1.xy;

+        float threshold = ucornerRadius_Stage1 + 2.0 * ublurRadius_Stage1;

+        vec2 middle = (uproxyRect_Stage1.zw - uproxyRect_Stage1.xy) - 2.0 * threshold;

+        if (translatedFragPos.x >= threshold && translatedFragPos.x < middle.x + threshold) {

+            translatedFragPos.x = threshold;

+        } else if (translatedFragPos.x >= middle.x + threshold) {

+            translatedFragPos.x -= middle.x - 1.0;

+        }

+        if (translatedFragPos.y > threshold && translatedFragPos.y < middle.y + threshold) {

+            translatedFragPos.y = threshold;

+        } else if (translatedFragPos.y >= middle.y + threshold) {

+            translatedFragPos.y -= middle.y - 1.0;

+        }

+        vec2 proxyDims = vec2(2.0 * threshold + 1.0);

+        vec2 texCoord = translatedFragPos / proxyDims;

+        output_Stage1 = texture2D(uTextureSampler_0_Stage1, texCoord);

+    }

+    {

+        gl_FragColor = outputColor_Stage0 * output_Stage1;

+    }

+}

diff --git a/src/cobalt/renderer/pipeline.cc b/src/cobalt/renderer/pipeline.cc
index 8685199..ef54726 100644
--- a/src/cobalt/renderer/pipeline.cc
+++ b/src/cobalt/renderer/pipeline.cc
@@ -175,18 +175,20 @@
       FROM_HERE,
       base::Bind(&Pipeline::ShutdownSubmissionQueue, base::Unretained(this)));
 
-  // This potential reference to a render tree whose animations may have ended
-  // must be destroyed before we shutdown the rasterizer thread since it may
-  // contain references to render tree nodes and resources.
-  last_render_tree_ = NULL;
-  last_animated_render_tree_ = NULL;
-
   // Submit a shutdown task to the rasterizer thread so that it can shutdown
   // anything that must be shutdown from that thread.
-  rasterizer_thread_.message_loop()->task_runner()->PostTask(
+  rasterizer_thread_.message_loop()->task_runner()->PostBlockingTask(
       FROM_HERE,
       base::Bind(&Pipeline::ShutdownRasterizerThread, base::Unretained(this)));
 
+  // Finally shutdown the rasterizer. Do this after ShutdownRasterizerThread()
+  // has run, just in case it posted more tasks to the rasterizer thread. This
+  // will free the rasterizer after the posted tasks have executed (unless they
+  // were delayed tasks).
+  rasterizer_thread_.message_loop()->task_runner()->PostBlockingTask(
+      FROM_HERE,
+      base::Bind(&Pipeline::ShutdownRasterizer, base::Unretained(this)));
+
   rasterizer_thread_.Stop();
 }
 
@@ -584,8 +586,11 @@
         render_target_);
   }
 
-  // Finally, destroy the rasterizer.
-  rasterizer_.reset();
+  // This potential reference to a render tree whose animations may have ended
+  // must be destroyed before we shutdown the rasterizer thread since it may
+  // contain references to render tree nodes and resources.
+  last_render_tree_ = NULL;
+  last_animated_render_tree_ = NULL;
 }
 
 #if defined(ENABLE_DEBUGGER)
diff --git a/src/cobalt/renderer/pipeline.h b/src/cobalt/renderer/pipeline.h
index c96da47..edd931d 100644
--- a/src/cobalt/renderer/pipeline.h
+++ b/src/cobalt/renderer/pipeline.h
@@ -163,6 +163,11 @@
   // needs to be shutdown from there.
   void ShutdownRasterizerThread();
 
+  // This method releases the rasterizer. This is exposed separately from
+  // ShutdownRasterizerThread() so it can be executed after tasks that may
+  // be posted by ShutdownRasterizerThread().
+  void ShutdownRasterizer() { rasterizer_.reset(); }
+
 #if defined(ENABLE_DEBUGGER)
   void OnDumpCurrentRenderTree(const std::string&);
   void OnToggleFpsStdout(const std::string&);
diff --git a/src/cobalt/renderer/rasterizer/blitter/render_tree_node_visitor.cc b/src/cobalt/renderer/rasterizer/blitter/render_tree_node_visitor.cc
index bfff114..e2a4b5c 100644
--- a/src/cobalt/renderer/rasterizer/blitter/render_tree_node_visitor.cc
+++ b/src/cobalt/renderer/rasterizer/blitter/render_tree_node_visitor.cc
@@ -51,6 +51,8 @@
 namespace rasterizer {
 namespace blitter {
 
+using common::utils::IsOpaque;
+using common::utils::IsTransparent;
 using math::Matrix3F;
 using math::Rect;
 using math::RectF;
@@ -154,9 +156,9 @@
   }
 
   if (!filter_node->data().opacity_filter ||
-      filter_node->data().opacity_filter->opacity() == 1.0f) {
+      IsOpaque(filter_node->data().opacity_filter->opacity())) {
     source->Accept(this);
-  } else if (filter_node->data().opacity_filter->opacity() != 0.0f) {
+  } else if (!IsTransparent(filter_node->data().opacity_filter->opacity())) {
     // If the opacity is set to 0, the contents are invisible and we are
     // trivially done.  However, if we made it into this branch, then
     // we know that opacity is in the range (0, 1), exclusive.
@@ -254,7 +256,7 @@
                 -local_matrix.Get(1, 2) * image_size.height()));
 
   // Render the image.
-  if (render_state_.opacity < 1.0f) {
+  if (!IsOpaque(render_state_.opacity)) {
     SbBlitterSetBlending(context_, true);
     SbBlitterSetModulateBlitsWithColor(context_, true);
     SbBlitterSetColor(
@@ -336,12 +338,7 @@
                           const RectF& rect) {
   SbBlitterColor blitter_color = RenderTreeToBlitterColor(color);
   SbBlitterSetColor(context, blitter_color);
-
-  if (SbBlitterAFromColor(blitter_color) < 255) {
-    SbBlitterSetBlending(context, true);
-  } else {
-    SbBlitterSetBlending(context, false);
-  }
+  SbBlitterSetBlending(context, !IsOpaque(color.a()));
 
   // We draw four rectangles, one for each border edge.  They have the following
   // layout:
@@ -407,11 +404,11 @@
               rect_node->data().background_brush.get());
       ColorRGBA color = solid_color_brush->color();
 
-      if (render_state_.opacity < 1.0f) {
+      if (!IsOpaque(render_state_.opacity)) {
         color.set_a(color.a() * render_state_.opacity);
       }
 
-      SbBlitterSetBlending(context_, color.a() < 1.0f);
+      SbBlitterSetBlending(context_, !IsOpaque(color.a()));
       SbBlitterSetColor(context_, RenderTreeToBlitterColor(color));
 
       SbBlitterFillRect(context_, RectFToBlitterRect(transformed_rect));
@@ -448,7 +445,7 @@
           border.bottom.width * render_state_.transform.scale().y();
 
       ColorRGBA color = border.left.color;
-      if (render_state_.opacity < 1.0f) {
+      if (!IsOpaque(render_state_.opacity)) {
         color.set_a(color.a() * render_state_.opacity);
       }
       RenderRectNodeBorder(context_, color, left_width, right_width, top_width,
@@ -493,7 +490,7 @@
 
   SbBlitterSetBlending(context_, true);
 
-  if (render_state_.opacity < 1.0f) {
+  if (!IsOpaque(render_state_.opacity)) {
     SbBlitterSetModulateBlitsWithColor(context_, true);
     SbBlitterSetColor(
         context_,
diff --git a/src/cobalt/renderer/rasterizer/common/utils.cc b/src/cobalt/renderer/rasterizer/common/utils.cc
index 4f7c304..d7049a2 100644
--- a/src/cobalt/renderer/rasterizer/common/utils.cc
+++ b/src/cobalt/renderer/rasterizer/common/utils.cc
@@ -52,6 +52,14 @@
   return false;
 }
 
+bool IsOpaque(float opacity) {
+  return opacity >= 254.5f / 255.0f;
+}
+
+bool IsTransparent(float opacity) {
+  return opacity <= 0.5f / 255.0f;
+}
+
 }  // namespace utils
 }  // namespace common
 }  // namespace rasterizer
diff --git a/src/cobalt/renderer/rasterizer/common/utils.h b/src/cobalt/renderer/rasterizer/common/utils.h
index b67314a..5fe915b 100644
--- a/src/cobalt/renderer/rasterizer/common/utils.h
+++ b/src/cobalt/renderer/rasterizer/common/utils.h
@@ -32,6 +32,13 @@
 // offscreen target, then rendering that target with opacity.
 bool NodeCanRenderWithOpacity(render_tree::Node* node);
 
+// Returns whether the given opacity [0,1] should be considered fully opaque.
+bool IsOpaque(float opacity);
+
+// Returns whether the given opacity [0,1] should be considered fully
+// transparent.
+bool IsTransparent(float opacity);
+
 }  // namespace utils
 }  // namespace common
 }  // namespace rasterizer
diff --git a/src/cobalt/renderer/rasterizer/egl/render_tree_node_visitor.cc b/src/cobalt/renderer/rasterizer/egl/render_tree_node_visitor.cc
index 13a8e7e..40c04a4 100644
--- a/src/cobalt/renderer/rasterizer/egl/render_tree_node_visitor.cc
+++ b/src/cobalt/renderer/rasterizer/egl/render_tree_node_visitor.cc
@@ -47,6 +47,9 @@
 namespace rasterizer {
 namespace egl {
 
+using common::utils::IsOpaque;
+using common::utils::IsTransparent;
+
 namespace {
 
 typedef float ColorTransformMatrix[16];
@@ -76,8 +79,6 @@
   return kBT709ColorTransformMatrixInColumnMajor;
 }
 
-bool IsOpaque(float opacity) { return opacity >= 0.999f; }
-
 bool IsUniformSolidColor(const render_tree::Border& border) {
   return border.left.style == render_tree::kBorderStyleSolid &&
          border.right.style == render_tree::kBorderStyleSolid &&
@@ -413,10 +414,10 @@
   if (data.opacity_filter && !data.viewport_filter && !data.blur_filter &&
       !data.map_to_mesh_filter) {
     const float filter_opacity = data.opacity_filter->opacity();
-    if (filter_opacity <= 0.0f) {
+    if (IsTransparent(filter_opacity)) {
       // Totally transparent. Ignore the source.
       return;
-    } else if (filter_opacity >= 1.0f) {
+    } else if (IsOpaque(filter_opacity)) {
       // Totally opaque. Render like normal.
       data.source->Accept(this);
       return;
@@ -1111,7 +1112,7 @@
   // clear command instead of a more general draw command, to give the GL
   // driver a better chance to optimize.
   if (!draw_state_.rounded_scissor_corners &&
-      draw_state_.transform.IsIdentity() && draw_state_.opacity == 1.0f) {
+      draw_state_.transform.IsIdentity() && IsOpaque(draw_state_.opacity)) {
     math::Rect old_scissor = draw_state_.scissor;
     draw_state_.scissor.Intersect(math::Rect::RoundFromRectF(rect));
     std::unique_ptr<DrawObject> draw_clear(
diff --git a/src/cobalt/renderer/rasterizer/skia/render_tree_node_visitor.cc b/src/cobalt/renderer/rasterizer/skia/render_tree_node_visitor.cc
index 37ffae8..7c44ce9 100644
--- a/src/cobalt/renderer/rasterizer/skia/render_tree_node_visitor.cc
+++ b/src/cobalt/renderer/rasterizer/skia/render_tree_node_visitor.cc
@@ -81,6 +81,9 @@
 namespace rasterizer {
 namespace skia {
 
+using common::utils::IsOpaque;
+using common::utils::IsTransparent;
+
 RenderTreeNodeVisitor::RenderTreeNodeVisitor(
     SkCanvas* render_target,
     const CreateScratchSurfaceFunction* create_scratch_surface_function,
@@ -450,13 +453,13 @@
 #endif  // ENABLE_RENDER_TREE_VISITOR_TRACING
 
   if (filter_node->data().opacity_filter &&
-      filter_node->data().opacity_filter->opacity() <= 0.0f) {
+      IsTransparent(filter_node->data().opacity_filter->opacity())) {
     // The opacity 0, so we have nothing to render.
     return;
   }
 
   if ((!filter_node->data().opacity_filter ||
-       filter_node->data().opacity_filter->opacity() == 1.0f) &&
+       IsOpaque(filter_node->data().opacity_filter->opacity())) &&
       !filter_node->data().viewport_filter &&
       (!filter_node->data().blur_filter ||
        filter_node->data().blur_filter->blur_sigma() == 0.0f)) {
@@ -557,7 +560,7 @@
   // |kLow_SkFilterQuality| is used for bilinear interpolation of images.
   paint.setFilterQuality(kLow_SkFilterQuality);
 
-  if (draw_state.opacity < 1.0f) {
+  if (!IsOpaque(draw_state.opacity)) {
     paint.setAlpha(draw_state.opacity * 255);
   } else if (is_opaque && draw_state.clip_is_rect) {
     paint.setBlendMode(SkBlendMode::kSrc);
@@ -811,7 +814,7 @@
   const cobalt::render_tree::ColorRGBA& color = solid_color_brush->color();
 
   float alpha = color.a() * draw_state_.opacity;
-  if (alpha == 1.0f) {
+  if (IsOpaque(alpha)) {
     paint_->setBlendMode(SkBlendMode::kSrc);
   } else {
     paint_->setBlendMode(SkBlendMode::kSrcOver);
@@ -862,10 +865,10 @@
       SkGradientShader::kInterpolateColorsInPremul_Flag, NULL));
   paint_->setShader(shader);
 
-  if (!skia_color_stops.has_alpha && draw_state_.opacity == 1.0f) {
+  if (!skia_color_stops.has_alpha && IsOpaque(draw_state_.opacity)) {
     paint_->setBlendMode(SkBlendMode::kSrc);
   } else {
-    if (draw_state_.opacity < 1.0f) {
+    if (!IsOpaque(draw_state_.opacity)) {
       paint_->setAlpha(255 * draw_state_.opacity);
     }
     paint_->setBlendMode(SkBlendMode::kSrcOver);
@@ -900,10 +903,10 @@
       SkGradientShader::kInterpolateColorsInPremul_Flag, &local_matrix));
   paint_->setShader(shader);
 
-  if (!skia_color_stops.has_alpha && draw_state_.opacity == 1.0f) {
+  if (!skia_color_stops.has_alpha && IsOpaque(draw_state_.opacity)) {
     paint_->setBlendMode(SkBlendMode::kSrc);
   } else {
-    if (draw_state_.opacity < 1.0f) {
+    if (!IsOpaque(draw_state_.opacity)) {
       paint_->setAlpha(255 * draw_state_.opacity);
     }
     paint_->setBlendMode(SkBlendMode::kSrcOver);
@@ -985,7 +988,7 @@
   paint.setARGB(alpha * 255, border_color.r() * 255, border_color.g() * 255,
                 border_color.b() * 255);
   paint.setAntiAlias(anti_alias);
-  if (alpha == 1.0f) {
+  if (IsOpaque(alpha)) {
     paint.setBlendMode(SkBlendMode::kSrc);
   } else {
     paint.setBlendMode(SkBlendMode::kSrcOver);
@@ -1012,7 +1015,7 @@
     paint.setARGB(alpha * 255, color.r() * 255, color.g() * 255,
                   color.b() * 255);
     paint.setAntiAlias(anti_alias);
-    if (alpha == 1.0f) {
+    if (IsOpaque(alpha)) {
       paint.setBlendMode(SkBlendMode::kSrc);
     } else {
       paint.setBlendMode(SkBlendMode::kSrcOver);
@@ -1128,7 +1131,7 @@
   float alpha = color.a();
   alpha *= draw_state->opacity;
   paint.setARGB(alpha * 255, color.r() * 255, color.g() * 255, color.b() * 255);
-  if (alpha == 1.0f) {
+  if (IsOpaque(alpha)) {
     paint.setBlendMode(SkBlendMode::kSrc);
   } else {
     paint.setBlendMode(SkBlendMode::kSrcOver);
diff --git a/src/cobalt/script/sequence.h b/src/cobalt/script/sequence.h
index 5344212..5c32d8d 100644
--- a/src/cobalt/script/sequence.h
+++ b/src/cobalt/script/sequence.h
@@ -36,6 +36,7 @@
 
   // --- Vector partial emulation ---
   typedef typename SequenceType::size_type size_type;
+  typedef typename SequenceType::value_type value_type;
   typedef typename SequenceType::reference reference;
   typedef typename SequenceType::const_reference const_reference;
   typedef typename SequenceType::iterator iterator;
diff --git a/src/cobalt/script/shared/stub_script_debugger.cc b/src/cobalt/script/shared/stub_script_debugger.cc
index 060a90e..a8ef40b 100644
--- a/src/cobalt/script/shared/stub_script_debugger.cc
+++ b/src/cobalt/script/shared/stub_script_debugger.cc
@@ -14,36 +14,36 @@
 
 #include <memory>
 
-#include "cobalt/script/script_debugger.h"
-
 #include "base/logging.h"
+#include "cobalt/script/global_environment.h"
+#include "cobalt/script/script_debugger.h"
+#include "cobalt/script/source_code.h"
 
 namespace cobalt {
 namespace script {
 
 class StubScriptDebugger : public ScriptDebugger {
  public:
-  StubScriptDebugger(GlobalEnvironment* global_environment,
-                     Delegate* delegate) {
-    NOTIMPLEMENTED();
-  }
-  ~StubScriptDebugger() override { NOTIMPLEMENTED(); }
+  StubScriptDebugger(GlobalEnvironment* global_environment, Delegate* delegate)
+      : global_environment_(global_environment), delegate_(delegate) {}
+  ~StubScriptDebugger() override {}
 
-  void Attach(const std::string& state) override { NOTIMPLEMENTED(); }
-  std::string Detach() override {
-    NOTIMPLEMENTED();
-    return std::string();
-  }
+  void Attach(const std::string& state) override {}
+  std::string Detach() override { return std::string(); }
 
   bool EvaluateDebuggerScript(const std::string& js_code,
                               std::string* out_result_utf8) override {
-    return false;
+    // The stub just evaluates debugger scripts as if they are part of the page.
+    scoped_refptr<script::SourceCode> source_code =
+        script::SourceCode::CreateSourceCode(
+            js_code, base::SourceLocation("[object StubScriptDebugger]", 1, 1));
+    return global_environment_->EvaluateScript(source_code, out_result_utf8);
   }
 
   std::set<std::string> SupportedProtocolDomains() override {
-    NOTIMPLEMENTED();
     return std::set<std::string>();
   }
+
   bool DispatchProtocolMessage(const std::string& method,
                                const std::string& message) override {
     NOTIMPLEMENTED();
@@ -70,9 +70,12 @@
 
   PauseOnExceptionsState SetPauseOnExceptions(
       PauseOnExceptionsState state) override {
-    NOTIMPLEMENTED();
     return kNone;
   }
+
+ private:
+  GlobalEnvironment* global_environment_;
+  Delegate* delegate_;
 };
 
 // Static factory method declared in public interface.
diff --git a/src/cobalt/script/v8c/isolate_fellowship.cc b/src/cobalt/script/v8c/isolate_fellowship.cc
index b554b8a..9e402e9 100644
--- a/src/cobalt/script/v8c/isolate_fellowship.cc
+++ b/src/cobalt/script/v8c/isolate_fellowship.cc
@@ -39,6 +39,8 @@
                                      // ScriptValue::*Reference do not currently
                                      // support incremental tracing.
                                      "--noincremental_marking_wrappers",
+                                     "--noexpose_wasm",
+                                     "--novalidate_asm",
 #if defined(COBALT_GC_ZEAL)
                                      "--gc_interval=1200"
 #endif
diff --git a/src/cobalt/site/docs/development/setup-raspi.md b/src/cobalt/site/docs/development/setup-raspi.md
index 50faeb9..1c584e6 100644
--- a/src/cobalt/site/docs/development/setup-raspi.md
+++ b/src/cobalt/site/docs/development/setup-raspi.md
@@ -91,8 +91,8 @@
 1.  Run the following commands to build Cobalt:
 
     ```
-    $ gyp_cobalt raspi-1
-    $ ninja -C out/raspi-1_debug cobalt
+    $ gyp_cobalt raspi-2
+    $ ninja -C out/raspi-2_debug cobalt
     ```
 
 1.  Run the following command to install your Cobalt binary (and content)
@@ -100,7 +100,7 @@
 
     ```
     rsync -avzh --exclude="obj*" \
-          $COBALT_SRC/out/raspi-1_debug pi@$RASPI_ADDR:~/
+          $COBALT_SRC/out/raspi-2_debug pi@$RASPI_ADDR:~/
     ```
 
     The `rsyncs` get somewhat faster after the first time, as `rsync` is good at
@@ -112,7 +112,7 @@
 
     ```
     ssh pi@$RASPI_ADDR
-    cd raspi-1_debug
+    cd raspi-2_debug
     ./cobalt
     ```
 
diff --git a/src/cobalt/speech/sandbox/sandbox.gyp b/src/cobalt/speech/sandbox/sandbox.gyp
index 1a19a35..03be453 100644
--- a/src/cobalt/speech/sandbox/sandbox.gyp
+++ b/src/cobalt/speech/sandbox/sandbox.gyp
@@ -30,6 +30,7 @@
       'dependencies': [
         '<(DEPTH)/cobalt/audio/audio.gyp:audio',
         '<(DEPTH)/cobalt/base/base.gyp:base',
+        '<(DEPTH)/cobalt/debug/debug.gyp:console_command_manager',
         '<(DEPTH)/cobalt/dom/dom.gyp:dom',
         '<(DEPTH)/cobalt/loader/loader.gyp:loader',
         '<(DEPTH)/cobalt/network/network.gyp:network',
diff --git a/src/cobalt/tools/automated_testing/cobalt_runner.py b/src/cobalt/tools/automated_testing/cobalt_runner.py
index 6d9ae62..d21b9d5 100644
--- a/src/cobalt/tools/automated_testing/cobalt_runner.py
+++ b/src/cobalt/tools/automated_testing/cobalt_runner.py
@@ -247,7 +247,8 @@
 
   def _KillLauncher(self):
     """Kills the launcher and its attached Cobalt instance."""
-    self.ExecuteJavaScript('window.close();')
+    if self.CanExecuteJavaScript():
+      self.ExecuteJavaScript('window.close();')
 
     self.runner_thread.join(COBALT_EXIT_TIMEOUT_SECONDS)
     if self.runner_thread.isAlive():
@@ -305,6 +306,9 @@
         thread.interrupt_main()
     return 0
 
+  def CanExecuteJavaScript(self):
+    return self.webdriver is not None
+
   def ExecuteJavaScript(self, js_code):
     return self.webdriver.execute_script(js_code)
 
diff --git a/src/cobalt/tools/collectd/README.md b/src/cobalt/tools/collectd/README.md
new file mode 100644
index 0000000..9148e19
--- /dev/null
+++ b/src/cobalt/tools/collectd/README.md
@@ -0,0 +1,67 @@
+### Collectd monitoring setup for Cobalt
+
+A python plugin that sends Cobalt CVals to [Collectd](https://collectd.org/)
+metrics collection daemon. The values are retrieved via WebSocket connection
+from Cobalt built-in Chrome DevTools protocol.
+
+![](doc/Collectd_crop.png)
+
+Graphs are available from any Collectd frontend, configuration for
+[CGP](https://github.com/pommi/CGP) is included.
+
+**Note**: Currently the plugin only monitors one target, multi-target
+connection will be added soon.
+
+### Installation
+
+There is a small installation shell script `install.sh` included, that is
+tested to work on Raspberry Pi Raspbian Jessie and desktop Ubuntu. To
+install and configure, simply run `sudo ./install.sh` from the checkout
+directory.
+
+If you intend to run `collectd` and the CGP web frontend  on a Linux
+target like Raspberry Pi, please first copy the plugin directory to a
+convenient location on the target and run the install script from its shell.
+
+Note that it is also possible to configure the plugin to connect from host to
+remote target like Pi, however this is useful if the rest of the `collectd`
+data streams are sent to a host in a [networked configuration](https://collectd.org/wiki/index.php/Networking_introduction)
+and not detailed here.
+
+Cobalt DevTools service currently does not listen on localhost or 127.0.0.1
+address, so you'll need to manually edit cobalt.conf with your local machine
+network adapter IP address, or to target IP address.
+
+**Note**: The script also enables RRD and CSV data outputs, RRD is required
+for CGP to display the data and CSV is useful for post-processing.
+
+After installation, CGP web dashboard will be available at
+http://localhost/CGP
+
+**Note**: Although `collectd` is a system daemon that always runs, the data
+from the Cobalt plugin on the web dashboard will not appear before any data
+is actually sampled. To do this quickly after the installation, start a
+Cobalt instance and restart the `collectd` daemon ( see below ), otherwise
+data sampling frequency gets automatically throttled by `collectd`.
+
+### Troubleshooting
+
+By default, `collectd` outputs log messages to `syslog`. If there is a
+configuration problem, restarting `collectd` daemon and checking syslog usually
+indicates the cause
+
+```
+    sudo service collectd restart
+    tail -n 100 /var/log/syslog | egrep collectd
+```
+
+Verifying that Cobalt DevTools is listening can be done by shell command
+
+```
+   netstat -an | egrep "^tcp .*LISTEN"
+```
+
+If the configured port ( 9222 by default ) is listening, the connection
+should work. To manually verify that the plugin can connect to WebSocket
+and retrieve data, simply run `python cobalt.py` if connecting to localhost
+or `python cobalt.py --host <IP> --port 9222` if connecting to a remote target.
diff --git a/src/cobalt/tools/collectd/cobalt-types.db b/src/cobalt/tools/collectd/cobalt-types.db
new file mode 100644
index 0000000..43cf2b8
--- /dev/null
+++ b/src/cobalt/tools/collectd/cobalt-types.db
@@ -0,0 +1,22 @@
+# Copyright 2019 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+lifetime          value:DERIVE:0:U
+gauge_100         value:GAUGE:U:U
+gauge_10k         value:GAUGE:U:U
+gauge_100k        value:GAUGE:U:U
+gauge_1M          value:GAUGE:U:U
+gauge_10M         value:GAUGE:U:U
+gauge_100M        value:GAUGE:U:U
+gauge_1G          value:GAUGE:U:U
diff --git a/src/cobalt/tools/collectd/cobalt.py b/src/cobalt/tools/collectd/cobalt.py
new file mode 100644
index 0000000..dd38f9e
--- /dev/null
+++ b/src/cobalt/tools/collectd/cobalt.py
@@ -0,0 +1,175 @@
+# Copyright 2019 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import json
+import time
+import argparse
+import random
+import websocket
+
+try:
+  import collectd
+except ImportError:
+  collectd = None
+
+conf_ = {'host': 'localhost', 'port': 9222}
+
+
+def config(conf):
+  print('config called {!r}'.format(conf))
+  conf_['collectd_conf'] = conf
+  collectd.info('config called {!r}'.format(conf))
+
+
+def reconnect():
+  ws = websocket.create_connection('ws://{}:{}'.format(conf_['host'],
+                                                       conf_['port']))
+  ws.settimeout(3)
+  setattr(ws, 'message_id', 1)
+  conf_['ws'] = ws
+
+
+def init():
+  conf = conf_['collectd_conf']
+  for child in conf.children:
+    collectd.info('conf.child key {} values {}'.format(child.key, child.values))
+    if child.key.lower() == 'address':
+      host, port = child.values[0].split(':')
+      conf_['host'] = host
+      conf_['port'] = int(port)
+
+  reconnect()
+
+
+def wait_result(ws, result_id, timeout):
+  start_time = time.time()
+  messages = []
+  matching_result = None
+  while True:
+    now = time.time()
+    if now - start_time > timeout:
+      break
+    try:
+      message = ws.recv()
+      parsed_message = json.loads(message)
+      messages.append(parsed_message)
+      if 'result' in parsed_message and parsed_message['id'] == result_id:
+        matching_result = parsed_message
+        break
+    except:
+      break
+  return (matching_result, messages)
+
+
+def exec_js(ws, expr):
+  ws.message_id += 1
+  call_obj = {
+      'id': ws.message_id,
+      'method': 'Runtime.evaluate',
+      'params': {
+          'expression': expr,
+          'returnByValue': True
+      }
+  }
+  ws.send(json.dumps(call_obj))
+  result, _ = wait_result(ws, ws.message_id, 10)
+  return result['result']['result']
+
+
+def report_value(plugin, type, instance, value, plugin_instance=None):
+  vl = collectd.Values(plugin=plugin, type=type, type_instance=instance)
+  if plugin_instance:
+    vl.plugin_instance = plugin_instance
+  vl.dispatch(values=[value])
+
+
+def report_cobalt_stat(key, collectd_type):
+  val = exec_js(conf_['ws'], 'h5vcc.cVal.getValue("' + key + '")')
+  try:
+    value = int(val['value'])
+    # collectd.warning('key {} value: {}'.format(key, value))
+    report_value('cobalt', collectd_type, key, value)
+  except TypeError:
+    collectd.warning('Failed to collect: {} {}'.format(key, val))
+
+
+# Tuple of a Cobalt Cval, and data type
+# Collectd frontends like CGP group values to graphs by the reported data type. The types here are
+# simple gauges grouped by their rough estimated orders of magnitude, so that all plots are still
+# somewhat discernible.
+tracked_stats = [('Cobalt.Lifetime', 'lifetime'),
+                 ('Count.DOM.ActiveJavaScriptEvents', 'gauge'),
+                 ('Count.DOM.Attrs', 'gauge_10k'),
+                 ('Count.DOM.EventListeners', 'gauge_10k'),
+                 ('Count.DOM.HtmlCollections', 'gauge_10k'),
+                 ('Count.DOM.NodeLists', 'gauge_10k'),
+                 ('Count.DOM.NodeMaps', 'gauge_10k'),
+                 ('Count.DOM.Nodes', 'gauge_10k'),
+                 ('Count.DOM.StringMaps', 'gauge_100'),
+                 ('Count.DOM.TokenLists', 'gauge_10k'),
+                 ('Count.MainWebModule.DOM.HtmlElement', 'gauge_10k'),
+                 ('Count.MainWebModule.DOM.HtmlElement.Document', 'gauge_10k'),
+                 ('Count.MainWebModule.DOM.HtmlScriptElement.Execute', 'gauge'),
+                 ('Count.Renderer.Rasterize.NewRenderTree', 'gauge_100k'),
+                 ('Count.XHR', 'gauge_100'), ('Memory.CPU.Free', 'gauge_1G'),
+                 ('Memory.CPU.Used', 'gauge_100M'),
+                 ('Memory.DebugConsoleWebModule.DOM.HtmlScriptElement.Execute',
+                  'gauge_100k'),
+                 ('Memory.Font.LocalTypefaceCache.Capacity', 'gauge_10M'),
+                 ('Memory.Font.LocalTypefaceCache.Size', 'gauge_10M'),
+                 ('Memory.JS', 'gauge_10M'),
+                 ('Memory.MainWebModule.DOM.HtmlScriptElement.Execute',
+                  'gauge_1M'), ('Memory.XHR', 'gauge_1M'),
+                 ('Memory.MainWebModule.ImageCache.Size', 'gauge_10M'),
+                 ('Renderer.SubmissionQueueSize', 'gauge')]
+
+
+def cobalt_read():
+  for name, type in tracked_stats:
+    report_cobalt_stat(name, type)
+
+
+def read(*args, **kwargs):
+  try:
+    cobalt_read()
+  except Exception:
+    reconnect()
+
+
+if collectd:
+  collectd.register_config(config)
+  collectd.register_init(init)
+  collectd.register_read(read)
+
+
+# Debugcode to verify plugin connection
+if __name__ == '__main__':
+  class Bunch:
+      def __init__(self, **kwds):
+          self.__dict__.update(kwds)
+  def debugprint(*args,**kwargs):
+    print('{!r} {!r}'.format(args,kwargs))
+  def debugvalues(**kwargs):
+    debugprint(**kwargs)
+    return Bunch(dispatch=debugprint,**kwargs)
+  collectd = Bunch(info=debugprint,warning=debugprint,Values=debugvalues)
+  parser = argparse.ArgumentParser()
+  parser.add_argument('--host', default='localhost')
+  parser.add_argument('--port', type=int, default=9222)
+  args = parser.parse_args()
+  conf = Bunch(children=[Bunch( key='address',
+    values=['{}:{}'.format(args.host,args.port)])])
+  conf_['collectd_conf']  = conf
+  init()
+  cobalt_read()
diff --git a/src/cobalt/tools/collectd/conf/CGP_conf.patch b/src/cobalt/tools/collectd/conf/CGP_conf.patch
new file mode 100644
index 0000000..75711a6
--- /dev/null
+++ b/src/cobalt/tools/collectd/conf/CGP_conf.patch
@@ -0,0 +1,28 @@
+--- /var/www/html/CGP/conf/config.php	2019-08-07 09:02:26.935953434 -0700
++++ conf/config.php	2019-08-07 08:41:05.058259144 -0700
+@@ -29,7 +29,7 @@
+ #$CONFIG['overview_filter']['interface'] = array('ti' => 'eth0', 't' => 'if_octets');
+ 
+ # default plugins time range
+-$CONFIG['time_range']['default'] = 86400;
++$CONFIG['time_range']['default'] = 3600 * 2;
+ $CONFIG['time_range']['uptime']  = 31536000;
+ 
+ # show load averages and used memory on overview page
+@@ -38,6 +38,7 @@
+ $CONFIG['showtime'] = false;
+ 
+ $CONFIG['term'] = array(
++	'30minute'=> 60 * 30,
+ 	'2hour'	 => 3600 * 2,
+ 	'8hour'	 => 3600 * 8,
+ 	'day'	 => 86400,
+@@ -51,7 +52,7 @@
+ $CONFIG['network_datasize'] = 'bytes';
+ 
+ # "png", "svg", "canvas" or "hybrid" (canvas on detail page, png on the others) graphs
+-$CONFIG['graph_type'] = 'png';
++$CONFIG['graph_type'] = 'hybrid';
+ 
+ # For canvas graphs, use 'async' or 'sync' fetch method
+ $CONFIG['rrd_fetch_method'] = 'sync';
diff --git a/src/cobalt/tools/collectd/conf/cobalt.conf.tmpl b/src/cobalt/tools/collectd/conf/cobalt.conf.tmpl
new file mode 100644
index 0000000..96f0a2b
--- /dev/null
+++ b/src/cobalt/tools/collectd/conf/cobalt.conf.tmpl
@@ -0,0 +1,34 @@
+# Copyright 2019 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+<LoadPlugin python>
+    Globals true
+    Interval 10
+</LoadPlugin>
+
+TypesDB "##PLUGIN_DIR##/cobalt-types.db"
+
+<Plugin python>
+    ModulePath "##PLUGIN_DIR##"
+    LogTraces true
+    Import "cobalt"
+    <Module cobalt>
+       Address "localhost:9222"
+    </Module>
+</Plugin>
+
+# Tell processes plugin to look for processes named "cobalt"
+<Plugin "processes">
+    ProcessMatch "cobalt" "cobalt"
+</Plugin>
diff --git a/src/cobalt/tools/collectd/conf/csv.conf b/src/cobalt/tools/collectd/conf/csv.conf
new file mode 100644
index 0000000..f663285
--- /dev/null
+++ b/src/cobalt/tools/collectd/conf/csv.conf
@@ -0,0 +1,22 @@
+# Copyright 2019 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+<LoadPlugin csv>
+    Interval 30
+</LoadPlugin>
+
+<Plugin "csv">
+  DataDir "/var/lib/collectd/csv"
+  StoreRates true
+</Plugin>
diff --git a/src/cobalt/tools/collectd/conf/rrd.conf b/src/cobalt/tools/collectd/conf/rrd.conf
new file mode 100644
index 0000000..2f96f34
--- /dev/null
+++ b/src/cobalt/tools/collectd/conf/rrd.conf
@@ -0,0 +1,21 @@
+# Copyright 2019 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+<LoadPlugin rrdtool>
+    Interval 10
+</LoadPlugin>
+
+<Plugin rrdtool>
+    DataDir "/var/lib/collectd/rrd"
+</Plugin>
diff --git a/src/cobalt/tools/collectd/conf/standard_types.conf b/src/cobalt/tools/collectd/conf/standard_types.conf
new file mode 100644
index 0000000..c95cf60
--- /dev/null
+++ b/src/cobalt/tools/collectd/conf/standard_types.conf
@@ -0,0 +1,15 @@
+# Copyright 2019 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+TypesDB "/usr/share/collectd/types.db"
diff --git a/src/cobalt/tools/collectd/doc/Collectd_crop.png b/src/cobalt/tools/collectd/doc/Collectd_crop.png
new file mode 100644
index 0000000..0161b11
--- /dev/null
+++ b/src/cobalt/tools/collectd/doc/Collectd_crop.png
Binary files differ
diff --git a/src/cobalt/tools/collectd/install.sh b/src/cobalt/tools/collectd/install.sh
new file mode 100755
index 0000000..d2ef017
--- /dev/null
+++ b/src/cobalt/tools/collectd/install.sh
@@ -0,0 +1,69 @@
+#!/bin/bash
+#
+# Copyright 2019 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the 'License');
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an 'AS IS' BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+if [[ ${EUID} -ne 0 ]]; then
+   echo "This script must be run as root"
+   exit 1
+fi
+
+function print_msg() {
+    echo  '============= ' ${@} ' ============='
+}
+
+WEBROOT=/var/www/html
+CGP_ROOT=${WEBROOT}/CGP
+
+COLLECTD_CONF_DIR=/etc/collectd/collectd.conf.d
+RRD_ENABLED=1
+if [[ -d "/etc/collectd/google.conf.d" ]]; then
+    COLLECTD_CONF_DIR=/etc/collectd/google.conf.d
+    RRD_ENABLED=0
+fi
+
+
+print_msg "Installing apt deps"
+PKGS="collectd-core lighttpd libphp-jpgraph python-websocket"
+[[ ! -f /etc/collectd/collectd.conf ]] && PKGS="${PKGS} collectd"
+apt install ${PKGS}
+# grab the installed php version
+CGI_PKG=$(dpkg -l "*php*" | egrep -i "ii.*php.*-cli" | sed -E 's/.*(php.*-)(cli).*/\1cgi/')
+apt install ${CGI_PKG}
+
+
+print_msg "Checking out CGP from Github to: " ${CGP_ROOT}
+[[ ! -d "${CGP_ROOT}" ]] && git -C ${WEBROOT} clone https://github.com/pommi/CGP.git
+
+
+print_msg "Copying config files"
+sed 's@##PLUGIN_DIR##@'"${PWD}"'@' < conf/cobalt.conf.tmpl > /tmp/cobalt.conf
+cp -v /tmp/cobalt.conf ${COLLECTD_CONF_DIR}/cobalt.conf
+
+[[ "${RRD_ENABLED}" -eq "0" ]] && cp -v conf/rrd.conf ${COLLECTD_CONF_DIR}/
+cp -v conf/csv.conf ${COLLECTD_CONF_DIR}/
+# Change graph display defaults in CGP config
+patch --forward -r - ${CGP_ROOT}/conf/config.php < conf/CGP_conf.patch
+[[ "${RRD_ENABLED}" -eq "1" ]] && cp -v conf/standard_types.conf ${COLLECTD_CONF_DIR}/
+
+
+print_msg "Restarting services"
+lighty-enable-mod fastcgi fastcgi-php
+service collectd restart
+service lighttpd restart
+
+print_msg "Cobalt DevTools do not currently listen on 'localhost' or 127.0.0.1"
+print_msg "Please manually edit target IP address to your adapter IP address in " ${COLLECTD_CONF_DIR}/cobalt.conf
+ifconfig | egrep "inet " | sed -E "s/.*inet (.*) netmask.*/\1/" | egrep -v "127.0.0.1"
+
diff --git a/src/cobalt/websocket/cobalt_web_socket_event_handler.cc b/src/cobalt/websocket/cobalt_web_socket_event_handler.cc
index b389576..9654695 100644
--- a/src/cobalt/websocket/cobalt_web_socket_event_handler.cc
+++ b/src/cobalt/websocket/cobalt_web_socket_event_handler.cc
@@ -110,7 +110,7 @@
     std::unique_ptr<net::WebSocketEventInterface::SSLErrorCallbacks>
         ssl_error_callbacks,
     const GURL& /*url*/, const net::SSLInfo& /*ssl_info*/, bool /*fatal*/) {
-  // TODO[johnx]: determine if there are circumstances we want to continue
+  // TODO: determine if there are circumstances we want to continue
   // the request.
   DLOG(WARNING) << "SSL cert failure occured, cancelling connection";
   ssl_error_callbacks->CancelSSLRequest(net::ERR_BAD_SSL_CLIENT_AUTH_CERT,
diff --git a/src/cobalt/websocket/web_socket_event_interface.cc b/src/cobalt/websocket/web_socket_event_interface.cc
index a323111..f47ad29 100644
--- a/src/cobalt/websocket/web_socket_event_interface.cc
+++ b/src/cobalt/websocket/web_socket_event_interface.cc
@@ -106,7 +106,7 @@
 void CobaltWebSocketEventHandler::OnSSLCertificateError(
     std::unique_ptr<net::SSLErrorCallbacks> ssl_error_callbacks,
     const GURL& /*url*/, const SSLInfo& ssl_info, bool /*fatal*/) {
-  // TODO[johnx]: determine if there are circumstances we want to continue
+  // TODO: determine if there are circumstances we want to continue
   // the request.
   DLOG(WARNING) << "SSL cert failure occured, cancelling connection";
   ssl_error_callbacks->CancelSSLRequest(-1, ssl_info);
diff --git a/src/cobalt/websocket/web_socket_impl.cc b/src/cobalt/websocket/web_socket_impl.cc
index 39df930..5a920b4 100644
--- a/src/cobalt/websocket/web_socket_impl.cc
+++ b/src/cobalt/websocket/web_socket_impl.cc
@@ -212,7 +212,7 @@
     delegate_task_runner_->PostTask(FROM_HERE, do_send_closure);
   }
 
-  // TODO[johnx]:Change to void function?
+  // TODO: Change to void function?
   return true;
 }
 
diff --git a/src/cobalt/websocket/web_socket_impl.h b/src/cobalt/websocket/web_socket_impl.h
index 2786092..2a81b41 100644
--- a/src/cobalt/websocket/web_socket_impl.h
+++ b/src/cobalt/websocket/web_socket_impl.h
@@ -72,7 +72,7 @@
   void Close(const net::WebSocketError code, const std::string& reason);
 
   // These are legacy API from old net::SocketStream::Delegate.
-  // TODO[johnx]: investigate if we need to remove these.
+  // TODO: investigate if we need to remove these.
   // Called when the socket stream has been closed.
   void OnClose(bool was_clean = true,
                int error_code = net::kWebSocketNormalClosure,
diff --git a/src/net/cert/caching_cert_verifier.h b/src/net/cert/caching_cert_verifier.h
index 2ccc5cb..aacec7e 100644
--- a/src/net/cert/caching_cert_verifier.h
+++ b/src/net/cert/caching_cert_verifier.h
@@ -50,6 +50,14 @@
              const NetLogWithSource& net_log) override;
   void SetConfig(const Config& config) override;
 
+#if defined(STARBOARD) && defined(ENABLE_IGNORE_CERTIFICATE_ERRORS)
+  // Used to disable certificate verification errors for testing/development
+  // purpose.
+  void set_ignore_certificate_errors(bool ignore_certificate_errors) override {
+    verifier_->set_ignore_certificate_errors(ignore_certificate_errors);
+  }
+#endif
+
  private:
   FRIEND_TEST_ALL_PREFIXES(CachingCertVerifierTest, CacheHit);
   FRIEND_TEST_ALL_PREFIXES(CachingCertVerifierTest, Visitor);
diff --git a/src/net/cert/cert_verifier.h b/src/net/cert/cert_verifier.h
index 7a637bf..df852b1 100644
--- a/src/net/cert/cert_verifier.h
+++ b/src/net/cert/cert_verifier.h
@@ -181,6 +181,14 @@
   // the preferred underlying cryptographic libraries, using the specified
   // configuration.
   static std::unique_ptr<CertVerifier> CreateDefault();
+
+#if defined(STARBOARD) && defined(ENABLE_IGNORE_CERTIFICATE_ERRORS)
+  // Used to disable certificate verification errors for testing/development
+  // purpose.
+  virtual void set_ignore_certificate_errors(bool ignore_certificate_errors) {
+    NOTREACHED();
+  }
+#endif
 };
 
 // Overloads for comparing two configurations. Note, comparison is shallow -
diff --git a/src/net/cert/multi_threaded_cert_verifier.cc b/src/net/cert/multi_threaded_cert_verifier.cc
index 261c1a3..a513f01 100644
--- a/src/net/cert/multi_threaded_cert_verifier.cc
+++ b/src/net/cert/multi_threaded_cert_verifier.cc
@@ -235,7 +235,9 @@
   void set_is_first_job(bool is_first_job) { is_first_job_ = is_first_job; }
 
 #if defined(STARBOARD) && defined(ENABLE_IGNORE_CERTIFICATE_ERRORS)
-  void set_ignore_errors(bool ignore_errors) { ignore_errors_ = ignore_errors; }
+  void set_ignore_certificate_errors(bool ignore_certificate_errors) {
+    ignore_certificate_errors_ = ignore_certificate_errors;
+  }
 #endif
 
   const CertVerifier::RequestParams& key() const { return key_; }
@@ -321,7 +323,7 @@
         cert_verifier_->RemoveJob(this);
 
 #if defined(STARBOARD) && defined(ENABLE_IGNORE_CERTIFICATE_ERRORS)
-    if (ignore_errors_) {
+    if (ignore_certificate_errors_) {
       verify_result->result.verified_cert = key_.certificate();
       verify_result->result.cert_status = MapNetErrorToCertStatus(OK);
       verify_result->error = OK;
@@ -358,7 +360,7 @@
 
   bool is_first_job_;
 #if defined(STARBOARD) && defined(ENABLE_IGNORE_CERTIFICATE_ERRORS)
-  bool ignore_errors_ = false;
+  bool ignore_certificate_errors_ = false;
 #endif
   base::WeakPtrFactory<CertVerifierJob> weak_ptr_factory_;
 };
@@ -407,7 +409,7 @@
     std::unique_ptr<CertVerifierJob> new_job =
         std::make_unique<CertVerifierJob>(params, net_log.net_log(), this);
 #if defined(STARBOARD) && defined(ENABLE_IGNORE_CERTIFICATE_ERRORS)
-    new_job->set_ignore_errors(ignore_errors_);
+    new_job->set_ignore_certificate_errors(ignore_certificate_errors_);
 #endif
 
     new_job->Start(verify_proc_, config_, config_id_);
diff --git a/src/net/cert/multi_threaded_cert_verifier.h b/src/net/cert/multi_threaded_cert_verifier.h
index a5cd9dd..b8c6cd0 100644
--- a/src/net/cert/multi_threaded_cert_verifier.h
+++ b/src/net/cert/multi_threaded_cert_verifier.h
@@ -68,7 +68,9 @@
 #if defined(STARBOARD) && defined(ENABLE_IGNORE_CERTIFICATE_ERRORS)
   // Used to disable certificate verification errors for testing/developerment
   // purpose.
-  void set_ignore_errors(bool ignore_errors) { ignore_errors_ = ignore_errors; }
+  void set_ignore_certificate_errors(bool ignore_certificate_errors) {
+    ignore_certificate_errors_ = ignore_certificate_errors;
+  }
 #endif
 
  private:
@@ -131,7 +133,7 @@
   bool should_record_histograms_ = true;
 
 #if defined(STARBOARD) && defined(ENABLE_IGNORE_CERTIFICATE_ERRORS)
-  bool ignore_errors_ = false;
+  bool ignore_certificate_errors_ = false;
 #endif
 
   THREAD_CHECKER(thread_checker_);
diff --git a/src/net/http/http_network_session.cc b/src/net/http/http_network_session.cc
index e1ff8c6..0415c27 100644
--- a/src/net/http/http_network_session.cc
+++ b/src/net/http/http_network_session.cc
@@ -274,7 +274,6 @@
       http_stream_factory_(std::make_unique<HttpStreamFactory>(this)),
       params_(params),
       context_(context) {
-
   DCHECK(proxy_resolution_service_);
   DCHECK(ssl_config_service_);
   CHECK(http_server_properties_);
@@ -555,6 +554,12 @@
   params_.enable_quic = false;
 }
 
+#if defined(STARBOARD)
+void HttpNetworkSession::ToggleQuic() {
+  params_.enable_quic = !params_.enable_quic;
+}
+#endif  // defined(STARBOARD)
+
 ClientSocketPoolManager* HttpNetworkSession::GetSocketPoolManager(
     SocketPoolType pool_type) {
   switch (pool_type) {
diff --git a/src/net/http/http_network_session.h b/src/net/http/http_network_session.h
index 7c72310..ded46f4 100644
--- a/src/net/http/http_network_session.h
+++ b/src/net/http/http_network_session.h
@@ -400,6 +400,11 @@
   // Disable QUIC for new streams.
   void DisableQuic();
 
+#if defined(STARBOARD)
+  // Toggle QUIC support for new streams.
+  void ToggleQuic();
+#endif  // defined(STARBOARD)
+
  private:
   friend class HttpNetworkSessionPeer;
 
diff --git a/src/net/log/net_log_with_source.cc b/src/net/log/net_log_with_source.cc
index 50020e5..a4ad7e1 100644
--- a/src/net/log/net_log_with_source.cc
+++ b/src/net/log/net_log_with_source.cc
@@ -94,7 +94,6 @@
 
 void NetLogWithSource::AddEventWithNetErrorCode(NetLogEventType event_type,
                                                 int net_error) const {
-  DCHECK_NE(ERR_IO_PENDING, net_error);
   if (net_error >= 0) {
     AddEvent(event_type);
   } else {
diff --git a/src/net/socket/udp_socket_starboard.cc b/src/net/socket/udp_socket_starboard.cc
index d63b047..707fb74 100644
--- a/src/net/socket/udp_socket_starboard.cc
+++ b/src/net/socket/udp_socket_starboard.cc
@@ -163,6 +163,12 @@
           &read_socket_watcher_, &read_watcher_)) {
     PLOG(ERROR) << "WatchSocket failed on read";
     Error result = MapLastSocketError(socket_);
+    if (result == ERR_IO_PENDING) {
+      // Watch(...) might call SbSocketWaiterAdd() which does not guarantee
+      // setting system error on failure, but we need to treat this as an
+      // error since watching the socket failed.
+      result = ERR_FAILED;
+    }
     LogRead(result, NULL, NULL);
     return result;
   }
@@ -801,7 +807,9 @@
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   DCHECK(SbSocketIsValid(socket_));
 
-  NOTIMPLEMENTED();
+  // Starboard does not supported sending non-fragmented packets yet.
+  // All QUIC Streams call this function at initialization, setting sockets to
+  // send non-fragmented packets may have a slight performance boost.
   return ERR_NOT_IMPLEMENTED;
 }
 
diff --git a/src/net/spdy/spdy_proxy_client_socket_unittest.cc b/src/net/spdy/spdy_proxy_client_socket_unittest.cc
index 3b7a5b1..8952ca8 100644
--- a/src/net/spdy/spdy_proxy_client_socket_unittest.cc
+++ b/src/net/spdy/spdy_proxy_client_socket_unittest.cc
@@ -880,7 +880,11 @@
   AssertSyncReadEquals(kMsg2, kLen2);
 }
 
+#if defined(STARBOARD)
+TEST_P(SpdyProxyClientSocketTest, FLAKY_ReadErrorResponseBody) {
+#else
 TEST_P(SpdyProxyClientSocketTest, ReadErrorResponseBody) {
+#endif
   spdy::SpdySerializedFrame conn(ConstructConnectRequestFrame());
   MockWrite writes[] = {
       CreateMockWrite(conn, 0, SYNCHRONOUS),
diff --git a/src/starboard/CHANGELOG.md b/src/starboard/CHANGELOG.md
index b9bb48b..b4e9fe3 100644
--- a/src/starboard/CHANGELOG.md
+++ b/src/starboard/CHANGELOG.md
@@ -82,7 +82,10 @@
 The system properties `kSbSystemPropertyCertificationScope` and
 `kSbSystemPropertyBase64EncodedCertificationSecret` have been added to enable
 client apps to perform device authentication.  The values will be queried by
-calls to `SbSystemGetProperty()` in `starboard/system.h`.
+calls to `SbSystemGetProperty()` in `starboard/system.h`. An alternative to
+providing the `kSbSystemPropertyBase64EncodedCertificationSecret` property is
+to implement the SbSystemSignWithCertificationSecretKey() function, enabling
+the key to remain private and secure.
 
 ### Add support for `SbThreadSampler` and `SbThreadContext`.
 
@@ -153,6 +156,14 @@
 CPU features are available, which can enable the application to perform certain
 CPU-specific optimizations (e.g. SIMD).
 
+### Deprecated SB_HAS_AUDIO_SPECIFIC_CONFIG_AS_POINTER and
+SB_HAS_DRM_KEY_STATUSES.
+
+These macros must always be set to 1 for Starboard version 6 or later. They will
+be removed in a future version.  Any implementation that supports Starboard
+version 6 or later should be modified to no longer depend on these macros, with
+the assumption that their values are always 1.
+
 
 ## Version 10
 
@@ -622,3 +633,9 @@
 ### Mark `SbSystemBreakIntoDebugger` `SB_NORETURN`.
 Add `SB_NORETURN` to declaration of `SbSystemBreakIntoDebugger`, to allow it to
 be used in a manner similar to `abort`.
+
+### Introduce `SbAudioSinkGetMinBufferSizeInFrames()`
+
+Introduce `SbAudioSinkGetMinBufferSizeInFrames()` to `starboard/audio_sink.h`
+which communicates to the platform how many audio frames are required to ensure
+that audio sink can keep playing without underflow.
diff --git a/src/starboard/android/apk/app/src/main/java/dev/cobalt/media/AudioOutputManager.java b/src/starboard/android/apk/app/src/main/java/dev/cobalt/media/AudioOutputManager.java
index 0a72bc8..2105e5b 100644
--- a/src/starboard/android/apk/app/src/main/java/dev/cobalt/media/AudioOutputManager.java
+++ b/src/starboard/android/apk/app/src/main/java/dev/cobalt/media/AudioOutputManager.java
@@ -46,9 +46,9 @@
   @SuppressWarnings("unused")
   @UsedByNative
   AudioTrackBridge createAudioTrackBridge(
-      int sampleType, int sampleRate, int channelCount, int framesPerChannel) {
+      int sampleType, int sampleRate, int channelCount, int preferredBufferSizeInBytes) {
     AudioTrackBridge audioTrackBridge =
-        new AudioTrackBridge(sampleType, sampleRate, channelCount, framesPerChannel);
+        new AudioTrackBridge(sampleType, sampleRate, channelCount, preferredBufferSizeInBytes);
     if (!audioTrackBridge.isAudioTrackValid()) {
       Log.e(TAG, "AudioTrackBridge has invalid audio track");
       return null;
diff --git a/src/starboard/android/apk/app/src/main/java/dev/cobalt/media/AudioTrackBridge.java b/src/starboard/android/apk/app/src/main/java/dev/cobalt/media/AudioTrackBridge.java
index 733cf2b..ec1fd88 100644
--- a/src/starboard/android/apk/app/src/main/java/dev/cobalt/media/AudioTrackBridge.java
+++ b/src/starboard/android/apk/app/src/main/java/dev/cobalt/media/AudioTrackBridge.java
@@ -16,6 +16,7 @@
 
 import static dev.cobalt.media.Log.TAG;
 
+import android.annotation.TargetApi;
 import android.media.AudioAttributes;
 import android.media.AudioFormat;
 import android.media.AudioManager;
@@ -35,24 +36,8 @@
   private AudioTimestamp audioTimestamp = new AudioTimestamp();
   private long maxFramePositionSoFar = 0;
 
-  private int GetFrameSize(int sampleType, int channelCount) {
-    switch (sampleType) {
-      case AudioFormat.ENCODING_PCM_16BIT:
-        {
-          return 2 * channelCount;
-        }
-      case AudioFormat.ENCODING_PCM_FLOAT:
-        {
-          return 4 * channelCount;
-        }
-      default:
-        {
-          throw new RuntimeException("Unsupported sample type: " + sampleType);
-        }
-    }
-  }
-
-  public AudioTrackBridge(int sampleType, int sampleRate, int channelCount, int framesPerChannel) {
+  public AudioTrackBridge(
+      int sampleType, int sampleRate, int channelCount, int preferredBufferSizeInBytes) {
     int channelConfig;
     switch (channelCount) {
       case 1:
@@ -80,33 +65,16 @@
             .setChannelMask(channelConfig)
             .build();
 
-    // Try to create AudioTrack with the same size buffer as in renderer. But AudioTrack would not
-    // start playing until the buffer is fully filled once. A large buffer may cause
-    // AudioTrack not able to start. And we now pass no more than 1s of audio data to
-    // starboard player, limit the buffer size to store at most 0.5s of audio data.
-    int audioTrackBufferSize =
-        Math.min(framesPerChannel, sampleRate / 2) * GetFrameSize(sampleType, channelCount);
+    int audioTrackBufferSize = preferredBufferSizeInBytes;
     while (audioTrackBufferSize > 0) {
       try {
-        if (Build.VERSION.SDK_INT >= 26) {
-          audioTrack =
-              new AudioTrack.Builder()
-                  .setAudioAttributes(attributes)
-                  .setAudioFormat(format)
-                  .setBufferSizeInBytes(audioTrackBufferSize)
-                  .setTransferMode(AudioTrack.MODE_STREAM)
-                  .setSessionId(AudioManager.AUDIO_SESSION_ID_GENERATE)
-                  .setPerformanceMode(AudioTrack.PERFORMANCE_MODE_LOW_LATENCY)
-                  .build();
-        } else {
-          audioTrack =
-              new AudioTrack(
-                  attributes,
-                  format,
-                  audioTrackBufferSize,
-                  AudioTrack.MODE_STREAM,
-                  AudioManager.AUDIO_SESSION_ID_GENERATE);
-        }
+        audioTrack =
+            new AudioTrack(
+                attributes,
+                format,
+                audioTrackBufferSize,
+                AudioTrack.MODE_STREAM,
+                AudioManager.AUDIO_SESSION_ID_GENERATE);
       } catch (Exception e) {
         audioTrack = null;
       }
@@ -120,8 +88,10 @@
     Log.i(
         TAG,
         String.format(
-            "AudioTrack created with buffer size %d.  The minimum buffer size is %d.",
+            "AudioTrack created with buffer size %d (prefered: %d).  The minimum buffer size is"
+                + " %d.",
             audioTrackBufferSize,
+            preferredBufferSizeInBytes,
             AudioTrack.getMinBufferSize(sampleRate, channelConfig, sampleType)));
   }
 
@@ -232,4 +202,23 @@
 
     return audioTimestamp;
   }
+
+  @SuppressWarnings("unused")
+  @UsedByNative
+  private int getUnderrunCount() {
+    if (Build.VERSION.SDK_INT >= 24) {
+      return getUnderrunCountV24();
+    }
+    // The funtion getUnderrunCount() is added in API level 24.
+    return 0;
+  }
+
+  @TargetApi(24)
+  private int getUnderrunCountV24() {
+    if (audioTrack == null) {
+      Log.e(TAG, "Unable to call getUnderrunCount() with NULL audio track.");
+      return 0;
+    }
+    return audioTrack.getUnderrunCount();
+  }
 }
diff --git a/src/starboard/android/apk/app/src/main/java/dev/cobalt/media/CobaltMediaSession.java b/src/starboard/android/apk/app/src/main/java/dev/cobalt/media/CobaltMediaSession.java
index 8ca2a31..a0e687b 100644
--- a/src/starboard/android/apk/app/src/main/java/dev/cobalt/media/CobaltMediaSession.java
+++ b/src/starboard/android/apk/app/src/main/java/dev/cobalt/media/CobaltMediaSession.java
@@ -24,12 +24,12 @@
 import android.media.AudioAttributes.Builder;
 import android.media.AudioFocusRequest;
 import android.media.AudioManager;
-import android.media.MediaMetadata;
-import android.media.session.MediaSession;
-import android.media.session.PlaybackState;
 import android.os.Build;
 import android.os.Handler;
 import android.os.Looper;
+import android.support.v4.media.MediaMetadataCompat;
+import android.support.v4.media.session.MediaSessionCompat;
+import android.support.v4.media.session.PlaybackStateCompat;
 import android.view.WindowManager;
 import dev.cobalt.util.DisplayUtil;
 import dev.cobalt.util.Holder;
@@ -47,7 +47,7 @@
   // deprecated and unnecessary on API 26+.
   @SuppressWarnings("deprecation")
   private static final int MEDIA_SESSION_FLAG_HANDLES_TRANSPORT_CONTROLS =
-      MediaSession.FLAG_HANDLES_TRANSPORT_CONTROLS;
+      MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS;
 
   private AudioFocusRequest audioFocusRequest;
 
@@ -69,15 +69,15 @@
 
   private final UpdateVolumeListener volumeListener;
   private final ArtworkLoader artworkLoader;
-  private MediaSession mediaSession;
+  private MediaSessionCompat mediaSession;
 
   // We re-use the builder to hold onto the most recent metadata and add artwork later.
-  private MediaMetadata.Builder metadataBuilder = new MediaMetadata.Builder();
+  private MediaMetadataCompat.Builder metadataBuilder = new MediaMetadataCompat.Builder();
   // We re-use the builder to hold onto the most recent playback state.
-  private PlaybackState.Builder playbackStateBuilder = new PlaybackState.Builder();
+  private PlaybackStateCompat.Builder playbackStateBuilder = new PlaybackStateCompat.Builder();
 
   // Duplicated in starboard/android/shared/android_media_session_client.h
-  // PlaybackState
+  // PlaybackStateCompat
   private static final int PLAYBACK_STATE_PLAYING = 0;
   private static final int PLAYBACK_STATE_PAUSED = 1;
   private static final int PLAYBACK_STATE_NONE = 2;
@@ -99,50 +99,56 @@
   }
 
   private void setMediaSession() {
-    mediaSession = new MediaSession(context, TAG);
+    mediaSession = new MediaSessionCompat(context, TAG);
     mediaSession.setFlags(MEDIA_SESSION_FLAG_HANDLES_TRANSPORT_CONTROLS);
     mediaSession.setCallback(
-        new MediaSession.Callback() {
+        new MediaSessionCompat.Callback() {
           @Override
           public void onFastForward() {
             Log.i(TAG, "MediaSession action: FAST FORWARD");
-            nativeInvokeAction(PlaybackState.ACTION_FAST_FORWARD);
+            nativeInvokeAction(PlaybackStateCompat.ACTION_FAST_FORWARD);
           }
 
           @Override
           public void onPause() {
             Log.i(TAG, "MediaSession action: PAUSE");
-            nativeInvokeAction(PlaybackState.ACTION_PAUSE);
+            nativeInvokeAction(PlaybackStateCompat.ACTION_PAUSE);
           }
 
           @Override
           public void onPlay() {
             Log.i(TAG, "MediaSession action: PLAY");
-            nativeInvokeAction(PlaybackState.ACTION_PLAY);
+            nativeInvokeAction(PlaybackStateCompat.ACTION_PLAY);
           }
 
           @Override
           public void onRewind() {
             Log.i(TAG, "MediaSession action: REWIND");
-            nativeInvokeAction(PlaybackState.ACTION_REWIND);
+            nativeInvokeAction(PlaybackStateCompat.ACTION_REWIND);
           }
 
           @Override
           public void onSkipToNext() {
             Log.i(TAG, "MediaSession action: SKIP NEXT");
-            nativeInvokeAction(PlaybackState.ACTION_SKIP_TO_NEXT);
+            nativeInvokeAction(PlaybackStateCompat.ACTION_SKIP_TO_NEXT);
           }
 
           @Override
           public void onSkipToPrevious() {
             Log.i(TAG, "MediaSession action: SKIP PREVIOUS");
-            nativeInvokeAction(PlaybackState.ACTION_SKIP_TO_PREVIOUS);
+            nativeInvokeAction(PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS);
           }
 
           @Override
           public void onSeekTo(long pos) {
             Log.i(TAG, "MediaSession action: SEEK " + pos);
-            nativeInvokeAction(PlaybackState.ACTION_SEEK_TO, pos);
+            nativeInvokeAction(PlaybackStateCompat.ACTION_SEEK_TO, pos);
+          }
+
+          @Override
+          public void onStop() {
+            Log.i(TAG, "MediaSession action: STOP");
+            nativeInvokeAction(PlaybackStateCompat.ACTION_STOP);
           }
         });
     // |metadataBuilder| may still have no fields at this point, yielding empty metadata.
@@ -209,7 +215,7 @@
       // This shouldn't happen, but pause playback to be nice if it does.
       if (res != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
         Log.w(TAG, "Audiofocus action: PAUSE (not granted)");
-        nativeInvokeAction(PlaybackState.ACTION_PAUSE);
+        nativeInvokeAction(PlaybackStateCompat.ACTION_PAUSE);
       }
     } else {
       if (Build.VERSION.SDK_INT < 26) {
@@ -264,7 +270,7 @@
         Log.i(TAG, "Audiofocus loss" + logExtra);
         if (playbackState == PLAYBACK_STATE_PLAYING) {
           Log.i(TAG, "Audiofocus action: PAUSE");
-          nativeInvokeAction(PlaybackState.ACTION_PAUSE);
+          nativeInvokeAction(PlaybackStateCompat.ACTION_PAUSE);
         }
         break;
       case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
@@ -281,7 +287,7 @@
         volumeListener.onUpdateVolume(1.0f);
         if (transientPause && playbackState == PLAYBACK_STATE_PAUSED) {
           Log.i(TAG, "Audiofocus action: PLAY");
-          nativeInvokeAction(PlaybackState.ACTION_PLAY);
+          nativeInvokeAction(PlaybackStateCompat.ACTION_PLAY);
         }
         break;
       default: // fall out
@@ -334,7 +340,7 @@
     // be none the wiser.
     playbackStateBuilder.setState(
         playbackState,
-        PlaybackState.PLAYBACK_POSITION_UNKNOWN,
+        PlaybackStateCompat.PLAYBACK_POSITION_UNKNOWN,
         playbackState == PLAYBACK_STATE_PLAYING ? 1.0f : 0.0f);
     configureMediaFocus(PLAYBACK_STATE_NONE);
   }
@@ -359,8 +365,7 @@
           @Override
           public void run() {
             updateMediaSessionInternal(
-                playbackState, actions, positionMs, speed,
-                title, artist, album, artwork);
+                playbackState, actions, positionMs, speed, title, artist, album, artwork);
           }
         });
   }
@@ -398,43 +403,46 @@
     String stateName;
     switch (playbackState) {
       case PLAYBACK_STATE_PLAYING:
-        androidPlaybackState = PlaybackState.STATE_PLAYING;
+        androidPlaybackState = PlaybackStateCompat.STATE_PLAYING;
         stateName = "PLAYING";
         break;
       case PLAYBACK_STATE_PAUSED:
-        androidPlaybackState = PlaybackState.STATE_PAUSED;
+        androidPlaybackState = PlaybackStateCompat.STATE_PAUSED;
         stateName = "PAUSED";
         break;
       case PLAYBACK_STATE_NONE:
       default:
-        androidPlaybackState = PlaybackState.STATE_NONE;
+        androidPlaybackState = PlaybackStateCompat.STATE_NONE;
         stateName = "NONE";
         break;
     }
 
-    Log.i(TAG, String.format(
-        "MediaSession state: %s, position: %d ms, speed: %f x", stateName, positionMs, speed));
+    Log.i(
+        TAG,
+        String.format(
+            "MediaSession state: %s, position: %d ms, speed: %f x", stateName, positionMs, speed));
 
     playbackStateBuilder =
-        new PlaybackState.Builder()
+        new PlaybackStateCompat.Builder()
             .setActions(actions)
             .setState(androidPlaybackState, positionMs, speed);
     mediaSession.setPlaybackState(playbackStateBuilder.build());
 
     // Reset the metadata to make sure we don't retain any fields from previous playback.
-    metadataBuilder = new MediaMetadata.Builder();
+    metadataBuilder = new MediaMetadataCompat.Builder();
     metadataBuilder
-        .putString(MediaMetadata.METADATA_KEY_TITLE, title)
-        .putString(MediaMetadata.METADATA_KEY_ARTIST, artist)
-        .putString(MediaMetadata.METADATA_KEY_ALBUM, album)
-        .putBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART, artworkLoader.getOrLoadArtwork(artwork));
+        .putString(MediaMetadataCompat.METADATA_KEY_TITLE, title)
+        .putString(MediaMetadataCompat.METADATA_KEY_ARTIST, artist)
+        .putString(MediaMetadataCompat.METADATA_KEY_ALBUM, album)
+        .putBitmap(
+            MediaMetadataCompat.METADATA_KEY_ALBUM_ART, artworkLoader.getOrLoadArtwork(artwork));
     // Update the metadata as soon as we can - even before artwork is loaded.
     mediaSession.setMetadata(metadataBuilder.build());
   }
 
   @Override
   public void onArtworkLoaded(Bitmap bitmap) {
-    metadataBuilder.putBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART, bitmap);
+    metadataBuilder.putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, bitmap);
     mediaSession.setMetadata(metadataBuilder.build());
   }
 }
diff --git a/src/starboard/android/apk/app/src/main/java/dev/cobalt/media/MediaCodecBridge.java b/src/starboard/android/apk/app/src/main/java/dev/cobalt/media/MediaCodecBridge.java
index 3be35ef..63d27d8 100644
--- a/src/starboard/android/apk/app/src/main/java/dev/cobalt/media/MediaCodecBridge.java
+++ b/src/starboard/android/apk/app/src/main/java/dev/cobalt/media/MediaCodecBridge.java
@@ -499,7 +499,10 @@
       Log.d(TAG, "Setting HDR info.");
       mediaFormat.setInteger(MediaFormat.KEY_COLOR_TRANSFER, colorInfo.colorTransfer);
       mediaFormat.setInteger(MediaFormat.KEY_COLOR_STANDARD, colorInfo.colorStandard);
-      mediaFormat.setInteger(MediaFormat.KEY_COLOR_RANGE, colorInfo.colorRange);
+      // If color range is unspecified, don't set it.
+      if (colorInfo.colorRange != 0) {
+        mediaFormat.setInteger(MediaFormat.KEY_COLOR_RANGE, colorInfo.colorRange);
+      }
       mediaFormat.setByteBuffer(MediaFormat.KEY_HDR_STATIC_INFO, colorInfo.hdrStaticInfo);
     }
 
@@ -548,28 +551,6 @@
 
   @SuppressWarnings("unused")
   @UsedByNative
-  private void dequeueInputBuffer(long timeoutUs, DequeueInputResult outDequeueInputResult) {
-    int status = MEDIA_CODEC_ERROR;
-    int index = -1;
-    try {
-      int indexOrStatus = mMediaCodec.dequeueInputBuffer(timeoutUs);
-      if (indexOrStatus >= 0) { // index!
-        status = MEDIA_CODEC_OK;
-        index = indexOrStatus;
-      } else if (indexOrStatus == MediaCodec.INFO_TRY_AGAIN_LATER) {
-        status = MEDIA_CODEC_DEQUEUE_INPUT_AGAIN_LATER;
-      } else {
-        throw new AssertionError("Unexpected index_or_status: " + indexOrStatus);
-      }
-    } catch (Exception e) {
-      Log.e(TAG, "Failed to dequeue input buffer", e);
-    }
-    outDequeueInputResult.mStatus = status;
-    outDequeueInputResult.mIndex = index;
-  }
-
-  @SuppressWarnings("unused")
-  @UsedByNative
   private int flush() {
     try {
       mFlushed = true;
@@ -778,47 +759,6 @@
     }
   }
 
-  @SuppressWarnings({"unused", "deprecation"})
-  @UsedByNative
-  private void dequeueOutputBuffer(long timeoutUs, DequeueOutputResult outDequeueOutputResult) {
-    int status = MEDIA_CODEC_ERROR;
-    int index = -1;
-    try {
-      int indexOrStatus = mMediaCodec.dequeueOutputBuffer(info, timeoutUs);
-      if (info.presentationTimeUs < mLastPresentationTimeUs) {
-        // TODO: return a special code through DequeueOutputResult
-        // to notify the native code that the frame has a wrong presentation
-        // timestamp and should be skipped.
-        info.presentationTimeUs = mLastPresentationTimeUs;
-      }
-      mLastPresentationTimeUs = info.presentationTimeUs;
-
-      if (indexOrStatus >= 0) { // index!
-        status = MEDIA_CODEC_OK;
-        index = indexOrStatus;
-      } else if (indexOrStatus == MediaCodec.INFO_OUTPUT_BUFFERS_CHANGED) {
-        status = MEDIA_CODEC_OUTPUT_BUFFERS_CHANGED;
-      } else if (indexOrStatus == MediaCodec.INFO_OUTPUT_FORMAT_CHANGED) {
-        status = MEDIA_CODEC_OUTPUT_FORMAT_CHANGED;
-        MediaFormat newFormat = mMediaCodec.getOutputFormat();
-      } else if (indexOrStatus == MediaCodec.INFO_TRY_AGAIN_LATER) {
-        status = MEDIA_CODEC_DEQUEUE_OUTPUT_AGAIN_LATER;
-      } else {
-        throw new AssertionError("Unexpected index_or_status: " + indexOrStatus);
-      }
-    } catch (IllegalStateException e) {
-      status = MEDIA_CODEC_ERROR;
-      Log.e(TAG, "Failed to dequeue output buffer", e);
-    }
-
-    outDequeueOutputResult.mStatus = status;
-    outDequeueOutputResult.mIndex = index;
-    outDequeueOutputResult.mFlags = info.flags;
-    outDequeueOutputResult.mOffset = info.offset;
-    outDequeueOutputResult.mPresentationTimeMicroseconds = info.presentationTimeUs;
-    outDequeueOutputResult.mNumBytes = info.size;
-  }
-
   @SuppressWarnings("unused")
   @UsedByNative
   private boolean configureVideo(
diff --git a/src/starboard/android/apk/app/src/main/java/dev/cobalt/media/VideoSurfaceTexture.java b/src/starboard/android/apk/app/src/main/java/dev/cobalt/media/VideoSurfaceTexture.java
new file mode 100644
index 0000000..6987021
--- /dev/null
+++ b/src/starboard/android/apk/app/src/main/java/dev/cobalt/media/VideoSurfaceTexture.java
@@ -0,0 +1,46 @@
+// Copyright 2019 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package dev.cobalt.media;
+
+import android.graphics.SurfaceTexture;
+import dev.cobalt.util.UsedByNative;
+
+// A wrapper of SurfaceTexture class.
+// VideoSurfaceTexture allows native code to receive OnFrameAvailable event.
+@UsedByNative
+public class VideoSurfaceTexture extends SurfaceTexture {
+  @UsedByNative
+  VideoSurfaceTexture(int texName) {
+    super(texName);
+  }
+
+  @UsedByNative
+  void setOnFrameAvailableListener(final long nativeVideoDecoder) {
+    super.setOnFrameAvailableListener(
+        new SurfaceTexture.OnFrameAvailableListener() {
+          @Override
+          public void onFrameAvailable(SurfaceTexture surfaceTexture) {
+            nativeOnFrameAvailable(nativeVideoDecoder);
+          }
+        });
+  }
+
+  @UsedByNative
+  void removeOnFrameAvailableListener() {
+    super.setOnFrameAvailableListener(null);
+  }
+
+  private native void nativeOnFrameAvailable(long nativeVideoDecoder);
+}
diff --git a/src/starboard/android/apk/build.id b/src/starboard/android/apk/build.id
index 80c1e89..4c97ae0 100644
--- a/src/starboard/android/apk/build.id
+++ b/src/starboard/android/apk/build.id
@@ -1 +1 @@
-217501
\ No newline at end of file
+220597
\ No newline at end of file
diff --git a/src/starboard/android/shared/audio_sink_get_min_buffer_size_in_frames.cc b/src/starboard/android/shared/audio_sink_get_min_buffer_size_in_frames.cc
new file mode 100644
index 0000000..2bd7c3f
--- /dev/null
+++ b/src/starboard/android/shared/audio_sink_get_min_buffer_size_in_frames.cc
@@ -0,0 +1,43 @@
+// Copyright 2019 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "starboard/audio_sink.h"
+
+#include "starboard/android/shared/audio_track_audio_sink_type.h"
+#include "starboard/common/log.h"
+
+int SbAudioSinkGetMinBufferSizeInFrames(int channels,
+                                        SbMediaAudioSampleType sample_type,
+                                        int sampling_frequency_hz) {
+  // Currently, we only use |min_required_frames_| for web audio, which
+  // only supports 48k mono or stereo sound.
+  SB_DCHECK(sampling_frequency_hz == 48000);
+
+  if (channels <= 0 || channels > SbAudioSinkGetMaxChannels()) {
+    SB_LOG(ERROR) << "Not support channels count " << channels;
+    return -1;
+  }
+  if (sample_type != kSbMediaAudioSampleTypeInt16Deprecated &&
+      sample_type != kSbMediaAudioSampleTypeFloat32) {
+    SB_LOG(ERROR) << "Not support sample type " << sample_type;
+    return -1;
+  }
+  if (sampling_frequency_hz <= 0) {
+    SB_LOG(ERROR) << "Not support sample frequency " << sampling_frequency_hz;
+    return -1;
+  }
+
+  return starboard::android::shared::AudioTrackAudioSinkType::
+      GetMinBufferSizeInFrames(channels, sample_type, sampling_frequency_hz);
+}
diff --git a/src/starboard/android/shared/audio_sink_min_required_frames_tester.cc b/src/starboard/android/shared/audio_sink_min_required_frames_tester.cc
new file mode 100644
index 0000000..e9a87a3
--- /dev/null
+++ b/src/starboard/android/shared/audio_sink_min_required_frames_tester.cc
@@ -0,0 +1,224 @@
+// Copyright 2019 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "starboard/android/shared/audio_sink_min_required_frames_tester.h"
+
+#include <vector>
+
+#include "starboard/android/shared/audio_track_audio_sink_type.h"
+
+namespace starboard {
+namespace android {
+namespace shared {
+
+namespace {
+const int kCheckpointFramesInterval = 1024;
+
+// Helper function to compute the size of the two valid starboard audio sample
+// types.
+size_t GetSampleSize(SbMediaAudioSampleType sample_type) {
+  switch (sample_type) {
+    case kSbMediaAudioSampleTypeFloat32:
+      return sizeof(float);
+    case kSbMediaAudioSampleTypeInt16Deprecated:
+      return sizeof(int16_t);
+  }
+  SB_NOTREACHED();
+  return 0u;
+}
+}  // namespace
+
+MinRequiredFramesTester::MinRequiredFramesTester(int audio_sink_buffer_size,
+                                                 int max_required_frames,
+                                                 int default_required_frames,
+                                                 int required_frames_increment,
+                                                 int min_stable_played_frames)
+    : audio_sink_buffer_size_(audio_sink_buffer_size),
+      max_required_frames_(max_required_frames),
+      default_required_frames_(default_required_frames),
+      required_frames_increment_(required_frames_increment),
+      min_stable_played_frames_(min_stable_played_frames),
+      condition_variable_(mutex_),
+      destroyed_(false) {}
+
+MinRequiredFramesTester::~MinRequiredFramesTester() {
+  SB_DCHECK(thread_checker_.CalledOnValidThread());
+  destroyed_.store(true);
+  if (SbThreadIsValid(tester_thread_)) {
+    {
+      ScopedLock scoped_lock(mutex_);
+      condition_variable_.Signal();
+    }
+    SbThreadJoin(tester_thread_, NULL);
+    tester_thread_ = kSbThreadInvalid;
+  }
+}
+
+void MinRequiredFramesTester::StartTest(
+    int number_of_channels,
+    SbMediaAudioSampleType sample_type,
+    int sample_rate,
+    OnMinRequiredFramesReceivedCallback received_cb) {
+  SB_DCHECK(thread_checker_.CalledOnValidThread());
+  // MinRequiredFramesTester only supports to do test once now.
+  SB_DCHECK(!SbThreadIsValid(tester_thread_));
+
+  number_of_channels_ = number_of_channels;
+  sample_type_ = sample_type;
+  sample_rate_ = sample_rate;
+  received_cb_ = received_cb;
+
+  tester_thread_ =
+      SbThreadCreate(0, kSbThreadPriorityLowest, kSbThreadNoAffinity, true,
+                     "audio_track_tester",
+                     &MinRequiredFramesTester::TesterThreadEntryPoint, this);
+  SB_DCHECK(SbThreadIsValid(tester_thread_));
+}
+
+// static
+void* MinRequiredFramesTester::TesterThreadEntryPoint(void* context) {
+  SB_DCHECK(context);
+  MinRequiredFramesTester* tester =
+      static_cast<MinRequiredFramesTester*>(context);
+  tester->TesterThreadFunc();
+  return NULL;
+}
+
+void MinRequiredFramesTester::TesterThreadFunc() {
+  bool wait_timeout = false;
+  // Currently, we only support test once. But we can put following codes in
+  // a for loop easily to support test multiple times.
+  std::vector<uint8_t> silence_buffer(
+      max_required_frames_ * number_of_channels_ * GetSampleSize(sample_type_),
+      0);
+  void* frame_buffers[1];
+  frame_buffers[0] = silence_buffer.data();
+  // Set default values.
+  min_required_frames_ = default_required_frames_;
+  total_consumed_frames_ = 0;
+  last_underrun_count_ = -1;
+  last_total_consumed_frames_ = 0;
+  {
+    ScopedLock scoped_lock(mutex_);
+    // Need to check |destroyed_| before start, as MinRequiredFramesTester may
+    // be destroyed immediately after tester thread started.
+    if (!destroyed_.load()) {
+      audio_sink_ = new AudioTrackAudioSink(
+          NULL, number_of_channels_, sample_rate_, sample_type_, frame_buffers,
+          max_required_frames_,
+          audio_sink_buffer_size_ * number_of_channels_ *
+              GetSampleSize(sample_type_),
+          &MinRequiredFramesTester::UpdateSourceStatusFunc,
+          &MinRequiredFramesTester::ConsumeFramesFunc, this);
+      wait_timeout = !condition_variable_.WaitTimed(kSbTimeSecond * 5);
+      if (wait_timeout) {
+        SB_LOG(ERROR) << "Audio sink min required frames tester timeout.";
+        SB_NOTREACHED();
+      }
+    }
+  }
+  delete audio_sink_;
+  audio_sink_ = nullptr;
+  // Call |received_cb_| after audio sink thread is ended.
+  // |number_of_channels_|, |sample_type_|, |sample_rate_| and
+  // |min_required_frames_| are shared between two threads.
+  if (!destroyed_.load() && !wait_timeout) {
+    received_cb_(number_of_channels_, sample_type_, sample_rate_,
+                 min_required_frames_);
+  }
+}
+
+// static
+void MinRequiredFramesTester::UpdateSourceStatusFunc(int* frames_in_buffer,
+                                                     int* offset_in_frames,
+                                                     bool* is_playing,
+                                                     bool* is_eos_reached,
+                                                     void* context) {
+  MinRequiredFramesTester* tester =
+      static_cast<MinRequiredFramesTester*>(context);
+  SB_DCHECK(tester);
+  SB_DCHECK(frames_in_buffer);
+  SB_DCHECK(offset_in_frames);
+  SB_DCHECK(is_playing);
+  SB_DCHECK(is_eos_reached);
+
+  tester->UpdateSourceStatus(frames_in_buffer, offset_in_frames, is_playing,
+                             is_eos_reached);
+}
+
+// static
+void MinRequiredFramesTester::ConsumeFramesFunc(int frames_consumed,
+                                                SbTime frames_consumed_at,
+                                                void* context) {
+  SB_UNREFERENCED_PARAMETER(frames_consumed_at);
+
+  MinRequiredFramesTester* tester =
+      static_cast<MinRequiredFramesTester*>(context);
+  SB_DCHECK(tester);
+
+  tester->ConsumeFrames(frames_consumed);
+}
+
+void MinRequiredFramesTester::UpdateSourceStatus(int* frames_in_buffer,
+                                                 int* offset_in_frames,
+                                                 bool* is_playing,
+                                                 bool* is_eos_reached) {
+  *frames_in_buffer = min_required_frames_;
+  *offset_in_frames = 0;
+  *is_playing = true;
+  *is_eos_reached = false;
+}
+
+void MinRequiredFramesTester::ConsumeFrames(int frames_consumed) {
+  total_consumed_frames_ += frames_consumed;
+  // Wait until played enough frames.
+  if (total_consumed_frames_ - kCheckpointFramesInterval <
+      last_total_consumed_frames_) {
+    return;
+  }
+  if (last_underrun_count_ == -1) {
+    // |last_underrun_count_| is unknown, record the current underrun count
+    // and start to observe the underrun count.
+    last_underrun_count_ = audio_sink_->GetUnderrunCount();
+    last_total_consumed_frames_ = total_consumed_frames_;
+    return;
+  }
+  // The playback should be played for a while. If we still get new underruns,
+  // we need to write more buffers into audio sink.
+  int underrun_count = audio_sink_->GetUnderrunCount();
+  if (underrun_count > last_underrun_count_) {
+    min_required_frames_ += required_frames_increment_;
+    if (min_required_frames_ >= max_required_frames_) {
+      SB_LOG(WARNING) << "Min required frames reached maximum.";
+    } else {
+      last_underrun_count_ = -1;
+      last_total_consumed_frames_ = total_consumed_frames_;
+      return;
+    }
+  }
+
+  if (min_required_frames_ >= max_required_frames_ ||
+      total_consumed_frames_ - min_stable_played_frames_ >=
+          last_total_consumed_frames_) {
+    // |min_required_frames_| reached maximum, or playback is stable and
+    // doesn't have underruns. Stop the test.
+    last_total_consumed_frames_ = INT_MAX;
+    ScopedLock scoped_lock(mutex_);
+    condition_variable_.Signal();
+  }
+}
+
+}  // namespace shared
+}  // namespace android
+}  // namespace starboard
diff --git a/src/starboard/android/shared/audio_sink_min_required_frames_tester.h b/src/starboard/android/shared/audio_sink_min_required_frames_tester.h
new file mode 100644
index 0000000..9e53134
--- /dev/null
+++ b/src/starboard/android/shared/audio_sink_min_required_frames_tester.h
@@ -0,0 +1,109 @@
+// Copyright 2019 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef STARBOARD_ANDROID_SHARED_AUDIO_SINK_MIN_REQUIRED_FRAMES_TESTER_H_
+#define STARBOARD_ANDROID_SHARED_AUDIO_SINK_MIN_REQUIRED_FRAMES_TESTER_H_
+
+#include <atomic>
+#include <functional>
+
+#include "starboard/common/condition_variable.h"
+#include "starboard/common/mutex.h"
+#include "starboard/media.h"
+#include "starboard/shared/starboard/thread_checker.h"
+#include "starboard/thread.h"
+
+namespace starboard {
+namespace android {
+namespace shared {
+
+class AudioTrackAudioSink;
+
+// The class is to detect min required frames for audio sink to play audio
+// without underflow.
+class MinRequiredFramesTester {
+ public:
+  typedef std::function<void(int number_of_channels,
+                             SbMediaAudioSampleType sample_type,
+                             int sample_rate,
+                             int min_required_frames)>
+      OnMinRequiredFramesReceivedCallback;
+
+  MinRequiredFramesTester(int audio_sink_buffer_size,
+                          int max_required_frames,
+                          int default_required_frames,
+                          int required_frames_increment,
+                          int min_stable_played_frames);
+  ~MinRequiredFramesTester();
+
+  void StartTest(int number_of_channels,
+                 SbMediaAudioSampleType sample_type,
+                 int sample_rate,
+                 OnMinRequiredFramesReceivedCallback received_cb);
+
+ private:
+  static void* TesterThreadEntryPoint(void* context);
+  void TesterThreadFunc();
+
+  static void UpdateSourceStatusFunc(int* frames_in_buffer,
+                                     int* offset_in_frames,
+                                     bool* is_playing,
+                                     bool* is_eos_reached,
+                                     void* context);
+  static void ConsumeFramesFunc(int frames_consumed,
+                                SbTime frames_consumed_at,
+                                void* context);
+  void UpdateSourceStatus(int* frames_in_buffer,
+                          int* offset_in_frames,
+                          bool* is_playing,
+                          bool* is_eos_reached);
+  void ConsumeFrames(int frames_consumed);
+
+  MinRequiredFramesTester(const MinRequiredFramesTester&) = delete;
+  MinRequiredFramesTester& operator=(const MinRequiredFramesTester&) = delete;
+
+  const int audio_sink_buffer_size_;
+  const int max_required_frames_;
+  const int default_required_frames_;
+  const int required_frames_increment_;
+  const int min_stable_played_frames_;
+
+  ::starboard::shared::starboard::ThreadChecker thread_checker_;
+
+  // Shared variables between tester thread and audio sink thread.
+  AudioTrackAudioSink* audio_sink_ = nullptr;
+  int number_of_channels_;
+  SbMediaAudioSampleType sample_type_;
+  int sample_rate_;
+  int min_required_frames_;
+
+  // Used only by tester thread.
+  OnMinRequiredFramesReceivedCallback received_cb_;
+
+  // Used only by audio sink thread.
+  int total_consumed_frames_;
+  int last_underrun_count_;
+  int last_total_consumed_frames_;
+
+  Mutex mutex_;
+  ConditionVariable condition_variable_;
+  SbThread tester_thread_ = kSbThreadInvalid;
+  std::atomic_bool destroyed_;
+};
+
+}  // namespace shared
+}  // namespace android
+}  // namespace starboard
+
+#endif  // STARBOARD_ANDROID_SHARED_AUDIO_SINK_MIN_REQUIRED_FRAMES_TESTER_H_
diff --git a/src/starboard/android/shared/audio_track_audio_sink_type.cc b/src/starboard/android/shared/audio_track_audio_sink_type.cc
index 24f1c5f..994d904 100644
--- a/src/starboard/android/shared/audio_track_audio_sink_type.cc
+++ b/src/starboard/android/shared/audio_track_audio_sink_type.cc
@@ -15,13 +15,12 @@
 #include "starboard/android/shared/audio_track_audio_sink_type.h"
 
 #include <algorithm>
-#include <deque>
+#include <vector>
 
-#include "starboard/android/shared/jni_env_ext.h"
-#include "starboard/android/shared/jni_utils.h"
-#include "starboard/common/mutex.h"
-#include "starboard/common/scoped_ptr.h"
-#include "starboard/thread.h"
+namespace {
+starboard::android::shared::AudioTrackAudioSinkType*
+    audio_track_audio_sink_type_;
+}
 
 namespace starboard {
 namespace android {
@@ -33,13 +32,14 @@
 // we will repeatedly allocate a large byte array which cannot be consumed by
 // audio track completely.
 const int kMaxFramesPerRequest = 65536;
-
 const jint kNoOffset = 0;
-
 const size_t kSilenceFramesPerAppend = 1024;
-// 6 (max channels) * 4 (max sample size) * kSilenceFramesPerAppend, the number
-// is to ensure we always have at least 1024 frames silence to write.
-const uint8_t kSilenceBuffer[24 * kSilenceFramesPerAppend] = {0};
+
+const int kAudioSinkBufferSize = 4 * 1024;
+const int kMaxRequiredFrames = 16 * 1024;
+const int kDefaultRequiredFrames = 8 * 1024;
+const int kRequiredFramesIncrement = 2 * 1024;
+const int kMinStablePlayedFrames = 12 * 1024;
 
 // Helper function to compute the size of the two valid starboard audio sample
 // types.
@@ -71,62 +71,7 @@
   return static_cast<uint8_t*>(pointer) + offset;
 }
 
-class AudioTrackAudioSink : public SbAudioSinkPrivate {
- public:
-  AudioTrackAudioSink(
-      Type* type,
-      int channels,
-      int sampling_frequency_hz,
-      SbMediaAudioSampleType sample_type,
-      SbAudioSinkFrameBuffers frame_buffers,
-      int frames_per_channel,
-      SbAudioSinkUpdateSourceStatusFunc update_source_status_func,
-      SbAudioSinkConsumeFramesFunc consume_frame_func,
-      void* context);
-  ~AudioTrackAudioSink() override;
-
-  bool IsAudioTrackValid() const { return j_audio_track_bridge_; }
-  bool IsType(Type* type) override { return type_ == type; }
-  void SetPlaybackRate(double playback_rate) override {
-    SB_DCHECK(playback_rate >= 0.0);
-    if (playback_rate != 0.0 && playback_rate != 1.0) {
-      SB_NOTIMPLEMENTED() << "TODO: Only playback rates of 0.0 and 1.0 are "
-                             "currently supported.";
-      playback_rate = (playback_rate > 0.0) ? 1.0 : 0.0;
-    }
-    ScopedLock lock(mutex_);
-    playback_rate_ = playback_rate;
-  }
-
-  void SetVolume(double volume) override;
-
- private:
-  static void* ThreadEntryPoint(void* context);
-  void AudioThreadFunc();
-
-  int WriteData(JniEnvExt* env, const void* buffer, int size);
-
-  Type* type_;
-  int channels_;
-  int sampling_frequency_hz_;
-  SbMediaAudioSampleType sample_type_;
-  void* frame_buffer_;
-  int frames_per_channel_;
-  SbAudioSinkUpdateSourceStatusFunc update_source_status_func_;
-  SbAudioSinkConsumeFramesFunc consume_frame_func_;
-  void* context_;
-  int last_playback_head_position_;
-  jobject j_audio_track_bridge_;
-  jobject j_audio_data_;
-
-  volatile bool quit_;
-  SbThread audio_out_thread_;
-
-  starboard::Mutex mutex_;
-  double playback_rate_;
-
-  int written_frames_;
-};
+}  // namespace
 
 AudioTrackAudioSink::AudioTrackAudioSink(
     Type* type,
@@ -135,6 +80,7 @@
     SbMediaAudioSampleType sample_type,
     SbAudioSinkFrameBuffers frame_buffers,
     int frames_per_channel,
+    int preferred_buffer_size,
     SbAudioSinkUpdateSourceStatusFunc update_source_status_func,
     SbAudioSinkConsumeFramesFunc consume_frame_func,
     void* context)
@@ -167,7 +113,7 @@
       j_audio_output_manager.Get(), "createAudioTrackBridge",
       "(IIII)Ldev/cobalt/media/AudioTrackBridge;",
       GetAudioFormatSampleType(sample_type_), sampling_frequency_hz_, channels_,
-      frames_per_channel);
+      preferred_buffer_size);
   if (!j_audio_track_bridge) {
     return;
   }
@@ -214,6 +160,17 @@
   }
 }
 
+void AudioTrackAudioSink::SetPlaybackRate(double playback_rate) {
+  SB_DCHECK(playback_rate >= 0.0);
+  if (playback_rate != 0.0 && playback_rate != 1.0) {
+    SB_NOTIMPLEMENTED() << "TODO: Only playback rates of 0.0 and 1.0 are "
+                           "currently supported.";
+    playback_rate = (playback_rate > 0.0) ? 1.0 : 0.0;
+  }
+  ScopedLock lock(mutex_);
+  playback_rate_ = playback_rate;
+}
+
 // static
 void* AudioTrackAudioSink::ThreadEntryPoint(void* context) {
   SB_DCHECK(context);
@@ -305,8 +262,11 @@
       // its buffer is fully filled once.
       if (is_eos_reached) {
         // Currently AudioDevice and AudioRenderer will write tail silence.
-        // It should be reached only in tests.
-        WriteData(env, kSilenceBuffer, kSilenceFramesPerAppend);
+        // It should be reached only in tests. It's not ideal to allocate
+        // a new silence buffer every time.
+        std::vector<uint8_t> silence_buffer(
+            channels_ * GetSampleSize(sample_type_) * kSilenceFramesPerAppend);
+        WriteData(env, silence_buffer.data(), kSilenceFramesPerAppend);
       }
       SbThreadSleep(10 * kSbTimeMillisecond);
       continue;
@@ -384,7 +344,30 @@
   }
 }
 
-}  // namespace
+int AudioTrackAudioSink::GetUnderrunCount() {
+  auto* env = JniEnvExt::Get();
+  jint underrun_count = env->CallIntMethodOrAbort(j_audio_track_bridge_,
+                                                  "getUnderrunCount", "()I");
+  return underrun_count;
+}
+
+// static
+int AudioTrackAudioSinkType::GetMinBufferSizeInFrames(
+    int channels,
+    SbMediaAudioSampleType sample_type,
+    int sampling_frequency_hz) {
+  SB_DCHECK(audio_track_audio_sink_type_);
+
+  return audio_track_audio_sink_type_->min_required_frames_.load();
+}
+
+AudioTrackAudioSinkType::AudioTrackAudioSinkType()
+    : min_required_frames_tester_(kAudioSinkBufferSize,
+                                  kMaxRequiredFrames,
+                                  kDefaultRequiredFrames,
+                                  kRequiredFramesIncrement,
+                                  kMinStablePlayedFrames),
+      min_required_frames_(kMaxRequiredFrames) {}
 
 SbAudioSink AudioTrackAudioSinkType::Create(
     int channels,
@@ -396,10 +379,18 @@
     SbAudioSinkUpdateSourceStatusFunc update_source_status_func,
     SbAudioSinkConsumeFramesFunc consume_frames_func,
     void* context) {
+  // Try to create AudioTrack with the same size buffer as in renderer. But
+  // AudioTrack would not start playing until the buffer is fully filled once. A
+  // large buffer may cause AudioTrack not able to start. And Cobalt now write
+  // no more than 1s of audio data and no more than 0.5 ahead to starboard
+  // player, limit the buffer size to store at most 0.5s of audio data.
+  int preferred_buffer_size =
+      std::min(frames_per_channel, sampling_frequency_hz / 2) * channels *
+      GetSampleSize(audio_sample_type);
   AudioTrackAudioSink* audio_sink = new AudioTrackAudioSink(
       this, channels, sampling_frequency_hz, audio_sample_type, frame_buffers,
-      frames_per_channel, update_source_status_func, consume_frames_func,
-      context);
+      frames_per_channel, preferred_buffer_size, update_source_status_func,
+      consume_frames_func, context);
   if (!audio_sink->IsAudioTrackValid()) {
     SB_DLOG(ERROR)
         << "AudioTrackAudioSinkType::Create failed to create audio track";
@@ -409,14 +400,33 @@
   return audio_sink;
 }
 
+void AudioTrackAudioSinkType::TestMinRequiredFrames() {
+  auto onMinRequiredFramesForWebAudioReceived =
+      [&](int number_of_channels, SbMediaAudioSampleType sample_type,
+          int sample_rate, int min_required_frames) {
+        SB_LOG(INFO) << "Received min required frames " << min_required_frames
+                     << " for " << number_of_channels << " channels, "
+                     << sample_rate << "hz.";
+        min_required_frames_.store(min_required_frames);
+      };
+
+  SbMediaAudioSampleType sample_type = kSbMediaAudioSampleTypeFloat32;
+  if (!SbAudioSinkIsAudioSampleTypeSupported(sample_type)) {
+    sample_type = kSbMediaAudioSampleTypeInt16Deprecated;
+    SB_DCHECK(SbAudioSinkIsAudioSampleTypeSupported(sample_type));
+  }
+
+  // Currently, cobalt only use |min_required_frames_| for web audio, which
+  // only supports 48k mono or stereo sound. It should be fine now to only
+  // test 48k stereo sound.
+  min_required_frames_tester_.StartTest(2, sample_type, 48000,
+                                        onMinRequiredFramesForWebAudioReceived);
+}
+
 }  // namespace shared
 }  // namespace android
 }  // namespace starboard
 
-namespace {
-SbAudioSinkPrivate::Type* audio_track_audio_sink_type_;
-}  // namespace
-
 // static
 void SbAudioSinkPrivate::PlatformInitialize() {
   SB_DCHECK(!audio_track_audio_sink_type_);
@@ -424,6 +434,7 @@
       new starboard::android::shared::AudioTrackAudioSinkType;
   SetPrimaryType(audio_track_audio_sink_type_);
   EnableFallbackToStub();
+  audio_track_audio_sink_type_->TestMinRequiredFrames();
 }
 
 // static
diff --git a/src/starboard/android/shared/audio_track_audio_sink_type.h b/src/starboard/android/shared/audio_track_audio_sink_type.h
index ef53d9f..821a146 100644
--- a/src/starboard/android/shared/audio_track_audio_sink_type.h
+++ b/src/starboard/android/shared/audio_track_audio_sink_type.h
@@ -15,11 +15,20 @@
 #ifndef STARBOARD_ANDROID_SHARED_AUDIO_TRACK_AUDIO_SINK_TYPE_H_
 #define STARBOARD_ANDROID_SHARED_AUDIO_TRACK_AUDIO_SINK_TYPE_H_
 
+#include <atomic>
+#include <functional>
+
+#include "starboard/android/shared/audio_sink_min_required_frames_tester.h"
+#include "starboard/android/shared/jni_env_ext.h"
+#include "starboard/android/shared/jni_utils.h"
 #include "starboard/audio_sink.h"
 #include "starboard/common/log.h"
+#include "starboard/common/mutex.h"
+#include "starboard/common/scoped_ptr.h"
 #include "starboard/configuration.h"
 #include "starboard/shared/internal_only.h"
 #include "starboard/shared/starboard/audio_sink/audio_sink_internal.h"
+#include "starboard/thread.h"
 
 namespace starboard {
 namespace android {
@@ -27,6 +36,12 @@
 
 class AudioTrackAudioSinkType : public SbAudioSinkPrivate::Type {
  public:
+  static int GetMinBufferSizeInFrames(int channels,
+                                      SbMediaAudioSampleType sample_type,
+                                      int sampling_frequency_hz);
+
+  AudioTrackAudioSinkType();
+
   SbAudioSink Create(
       int channels,
       int sampling_frequency_hz,
@@ -49,6 +64,62 @@
     }
     delete audio_sink;
   }
+
+  void TestMinRequiredFrames();
+
+ private:
+  std::atomic_int min_required_frames_;
+  MinRequiredFramesTester min_required_frames_tester_;
+};
+
+class AudioTrackAudioSink : public SbAudioSinkPrivate {
+ public:
+  AudioTrackAudioSink(
+      Type* type,
+      int channels,
+      int sampling_frequency_hz,
+      SbMediaAudioSampleType sample_type,
+      SbAudioSinkFrameBuffers frame_buffers,
+      int frames_per_channel,
+      int preferred_buffer_size,
+      SbAudioSinkUpdateSourceStatusFunc update_source_status_func,
+      SbAudioSinkConsumeFramesFunc consume_frame_func,
+      void* context);
+  ~AudioTrackAudioSink() override;
+
+  bool IsAudioTrackValid() const { return j_audio_track_bridge_; }
+  bool IsType(Type* type) override { return type_ == type; }
+  void SetPlaybackRate(double playback_rate) override;
+
+  void SetVolume(double volume) override;
+  int GetUnderrunCount();
+
+ private:
+  static void* ThreadEntryPoint(void* context);
+  void AudioThreadFunc();
+
+  int WriteData(JniEnvExt* env, const void* buffer, int size);
+
+  Type* type_;
+  int channels_;
+  int sampling_frequency_hz_;
+  SbMediaAudioSampleType sample_type_;
+  void* frame_buffer_;
+  int frames_per_channel_;
+  SbAudioSinkUpdateSourceStatusFunc update_source_status_func_;
+  SbAudioSinkConsumeFramesFunc consume_frame_func_;
+  void* context_;
+  int last_playback_head_position_;
+  jobject j_audio_track_bridge_;
+  jobject j_audio_data_;
+
+  volatile bool quit_;
+  SbThread audio_out_thread_;
+
+  starboard::Mutex mutex_;
+  double playback_rate_;
+
+  int written_frames_;
 };
 
 }  // namespace shared
diff --git a/src/starboard/android/shared/cobalt/android_media_session_client.cc b/src/starboard/android/shared/cobalt/android_media_session_client.cc
index 87f4f9f..0b4b5c1 100644
--- a/src/starboard/android/shared/cobalt/android_media_session_client.cc
+++ b/src/starboard/android/shared/cobalt/android_media_session_client.cc
@@ -23,7 +23,6 @@
 #include "starboard/common/log.h"
 #include "starboard/common/mutex.h"
 #include "starboard/once.h"
-#include "starboard/player.h"
 
 namespace starboard {
 namespace android {
@@ -43,6 +42,7 @@
 using ::cobalt::media_session::kMediaSessionActionSeekto;
 using ::cobalt::media_session::kMediaSessionActionSeekbackward;
 using ::cobalt::media_session::kMediaSessionActionSeekforward;
+using ::cobalt::media_session::kMediaSessionActionStop;
 using ::cobalt::media_session::kMediaSessionActionPrevioustrack;
 using ::cobalt::media_session::kMediaSessionActionNexttrack;
 using ::cobalt::media_session::kMediaSessionPlaybackStateNone;
@@ -57,7 +57,7 @@
 namespace {
 
 // These constants are from android.media.session.PlaybackState
-const jlong kPlaybackStateActionStop = 1 << 0;  // not supported
+const jlong kPlaybackStateActionStop = 1 << 0;
 const jlong kPlaybackStateActionPause = 1 << 1;
 const jlong kPlaybackStateActionPlay = 1 << 2;
 const jlong kPlaybackStateActionRewind = 1 << 3;
@@ -93,6 +93,9 @@
   if (actions[kMediaSessionActionSeekto]) {
     result |= kPlaybackStateActionSeekTo;
   }
+  if (actions[kMediaSessionActionStop]) {
+    result |= kPlaybackStateActionStop;
+  }
   return result;
 }
 
@@ -132,6 +135,9 @@
     case kPlaybackStateActionSeekTo:
       result = kMediaSessionActionSeekto;
       break;
+    case kPlaybackStateActionStop:
+      result = kMediaSessionActionStop;
+      break;
     default:
       SB_NOTREACHED() << "Unsupported MediaSessionAction 0x"
                       << std::hex << action;
@@ -171,10 +177,6 @@
   // Protected by "mutex"
   static AndroidMediaSessionClient* active_client;
 
-  // TODO: Pass the necessary info through web MediaSession so we don't need to
-  // short-circuit to the player implementation to get info about the playback.
-  static SbPlayer active_player;
-
   static void OnceInit() { SbMutexCreate(&mutex); }
 
  public:
@@ -208,15 +210,6 @@
     SbMutexRelease(&mutex);
   }
 
-  static void UpdateActiveSessionPlatformPlayer(SbPlayer player) {
-    SbOnce(&once_flag, OnceInit);
-    SbMutexAcquire(&mutex);
-
-    active_player = player;
-
-    SbMutexRelease(&mutex);
-  }
-
   AndroidMediaSessionClient() {}
 
   virtual ~AndroidMediaSessionClient() {
@@ -242,12 +235,6 @@
     } else if (active_client == this) {
       active_client = NULL;
     }
-
-    SbPlayerInfo2 player_info;
-    SbMemorySet(&player_info, 0, sizeof(player_info));
-    if (active_player != kSbPlayerInvalid) {
-      SbPlayerGetInfo2(active_player, &player_info);
-    }
     SbMutexRelease(&mutex);
 
     jlong playback_state_actions = MediaSessionActionsToPlaybackStateActions(
@@ -307,8 +294,8 @@
         "(IJJFLjava/lang/String;Ljava/lang/String;Ljava/lang/String;"
             "[Ldev/cobalt/media/MediaImage;)V",
         playback_state, playback_state_actions,
-        player_info.current_media_timestamp / kSbTimeMillisecond,
-        static_cast<jfloat>(player_info.playback_rate),
+        session_state.current_playback_position() / kSbTimeMillisecond,
+        static_cast<jfloat>(session_state.actual_playback_rate()),
         j_title.Get(), j_artist.Get(), j_album.Get(), j_artwork.Get());
   }
 };
@@ -316,7 +303,6 @@
 SbOnceControl AndroidMediaSessionClient::once_flag = SB_ONCE_INITIALIZER;
 SbMutex AndroidMediaSessionClient::mutex;
 AndroidMediaSessionClient* AndroidMediaSessionClient::active_client = NULL;
-SbPlayer AndroidMediaSessionClient::active_player = kSbPlayerInvalid;
 
 void UpdateActiveSessionPlatformPlaybackState(PlaybackState state) {
   MediaSessionPlaybackState media_session_state =
@@ -326,10 +312,6 @@
       media_session_state);
 }
 
-void UpdateActiveSessionPlatformPlayer(SbPlayer player) {
-  AndroidMediaSessionClient::UpdateActiveSessionPlatformPlayer(player);
-}
-
 }  // namespace cobalt
 }  // namespace shared
 }  // namespace android
diff --git a/src/starboard/android/shared/cobalt/android_media_session_client.h b/src/starboard/android/shared/cobalt/android_media_session_client.h
index 284e165..5fc3f41 100644
--- a/src/starboard/android/shared/cobalt/android_media_session_client.h
+++ b/src/starboard/android/shared/cobalt/android_media_session_client.h
@@ -15,8 +15,6 @@
 #ifndef STARBOARD_ANDROID_SHARED_COBALT_ANDROID_MEDIA_SESSION_CLIENT_H_
 #define STARBOARD_ANDROID_SHARED_COBALT_ANDROID_MEDIA_SESSION_CLIENT_H_
 
-#include "starboard/player.h"
-
 namespace starboard {
 namespace android {
 namespace shared {
@@ -27,10 +25,6 @@
 
 void UpdateActiveSessionPlatformPlaybackState(PlaybackState state);
 
-// TODO: Pass the necessary info through web MediaSession so we don't need to
-// short-circuit to the player implementation to get info about the playback.
-void UpdateActiveSessionPlatformPlayer(SbPlayer player);
-
 }  // namespace cobalt
 }  // namespace shared
 }  // namespace android
diff --git a/src/starboard/android/shared/decode_target_create.cc b/src/starboard/android/shared/decode_target_create.cc
index 9b6f900..f54f90b 100644
--- a/src/starboard/android/shared/decode_target_create.cc
+++ b/src/starboard/android/shared/decode_target_create.cc
@@ -37,7 +37,7 @@
   JniEnvExt* env = JniEnvExt::Get();
 
   jobject local_surface_texture = env->NewObjectOrAbort(
-      "android/graphics/SurfaceTexture", "(I)V", gl_texture_id);
+      "dev/cobalt/media/VideoSurfaceTexture", "(I)V", gl_texture_id);
 
   jobject global_surface_texture =
       env->ConvertLocalRefToGlobalRef(local_surface_texture);
diff --git a/src/starboard/android/shared/drm_system.cc b/src/starboard/android/shared/drm_system.cc
index d1212c6..943633e 100644
--- a/src/starboard/android/shared/drm_system.cc
+++ b/src/starboard/android/shared/drm_system.cc
@@ -36,6 +36,26 @@
 const jint MEDIA_DRM_KEY_STATUS_PENDING = 3;
 const jint MEDIA_DRM_KEY_STATUS_USABLE = 0;
 
+// They must have the same values as defined in MediaDrm.KeyRequest.
+const jint REQUEST_TYPE_INITIAL = 0;
+const jint REQUEST_TYPE_RENEWAL = 1;
+const jint REQUEST_TYPE_RELEASE = 2;
+
+SbDrmSessionRequestType SbDrmSessionRequestTypeFromMediaDrmKeyRequestType(
+    jint request_type) {
+  if (request_type == REQUEST_TYPE_INITIAL) {
+    return kSbDrmSessionRequestTypeLicenseRequest;
+  }
+  if (request_type == REQUEST_TYPE_RENEWAL) {
+    return kSbDrmSessionRequestTypeLicenseRenewal;
+  }
+  if (request_type == REQUEST_TYPE_RELEASE) {
+    return kSbDrmSessionRequestTypeLicenseRelease;
+  }
+  SB_NOTREACHED();
+  return kSbDrmSessionRequestTypeLicenseRequest;
+}
+
 }  // namespace
 
 // This has to be defined outside the above anonymous namespace to be picked up
@@ -68,9 +88,10 @@
 
   DrmSystem* drm_system = reinterpret_cast<DrmSystem*>(native_media_drm_bridge);
   SB_DCHECK(drm_system);
-  drm_system->CallUpdateRequestCallback(ticket, session_id_elements,
-                                        session_id_size, message_elements,
-                                        message_size, kNoUrl);
+  drm_system->CallUpdateRequestCallback(
+      ticket, SbDrmSessionRequestTypeFromMediaDrmKeyRequestType(request_type),
+      session_id_elements, session_id_size, message_elements, message_size,
+      kNoUrl);
   env->ReleaseByteArrayElements(j_session_id, session_id_elements, JNI_ABORT);
   env->ReleaseByteArrayElements(j_message, message_elements, JNI_ABORT);
 }
@@ -255,15 +276,15 @@
 }
 
 void DrmSystem::CallUpdateRequestCallback(int ticket,
+                                          SbDrmSessionRequestType request_type,
                                           const void* session_id,
                                           int session_id_size,
                                           const void* content,
                                           int content_size,
                                           const char* url) {
   update_request_callback_(this, context_, ticket, kSbDrmStatusSuccess,
-                           kSbDrmSessionRequestTypeLicenseRequest, NULL,
-                           session_id, session_id_size, content, content_size,
-                           url);
+                           request_type, NULL, session_id, session_id_size,
+                           content, content_size, url);
 }
 
 void DrmSystem::CallDrmSessionKeyStatusesChangedCallback(
diff --git a/src/starboard/android/shared/drm_system.h b/src/starboard/android/shared/drm_system.h
index 49d5c72..9bdd875 100644
--- a/src/starboard/android/shared/drm_system.h
+++ b/src/starboard/android/shared/drm_system.h
@@ -61,6 +61,7 @@
 
   jobject GetMediaCrypto() const { return j_media_crypto_; }
   void CallUpdateRequestCallback(int ticket,
+                                 SbDrmSessionRequestType request_type,
                                  const void* session_id,
                                  int session_id_size,
                                  const void* content,
diff --git a/src/starboard/android/shared/gyp_configuration.py b/src/starboard/android/shared/gyp_configuration.py
index d674f72..8fc3c9b 100644
--- a/src/starboard/android/shared/gyp_configuration.py
+++ b/src/starboard/android/shared/gyp_configuration.py
@@ -274,30 +274,13 @@
   # A map of failing or crashing tests per target.
   __FILTERED_TESTS = {  # pylint: disable=invalid-name
       'player_filter_tests': [
-          'VideoDecoderTests/VideoDecoderTest.DecodeFullGOP/0',
-          'VideoDecoderTests/VideoDecoderTest.DecodeFullGOP/1',
-          'VideoDecoderTests/VideoDecoderTest.DecodeFullGOP/2',
-          'VideoDecoderTests/VideoDecoderTest.DecodeFullGOP/3',
-          'VideoDecoderTests/VideoDecoderTest.EndOfStreamWithoutAnyInput/0',
-          'VideoDecoderTests/VideoDecoderTest.EndOfStreamWithoutAnyInput/1',
-          'VideoDecoderTests/VideoDecoderTest.EndOfStreamWithoutAnyInput/2',
-          'VideoDecoderTests/VideoDecoderTest.EndOfStreamWithoutAnyInput/3',
-          'VideoDecoderTests/VideoDecoderTest'
-          '.GetCurrentDecodeTargetBeforeWriteInputBuffer/0',
-          'VideoDecoderTests/VideoDecoderTest'
-          '.GetCurrentDecodeTargetBeforeWriteInputBuffer/2',
-          'VideoDecoderTests/VideoDecoderTest.HoldFramesUntilFull/0',
-          'VideoDecoderTests/VideoDecoderTest.HoldFramesUntilFull/1',
-          'VideoDecoderTests/VideoDecoderTest.ResetBeforeInput/0',
-          'VideoDecoderTests/VideoDecoderTest.ResetBeforeInput/1',
-          'VideoDecoderTests/VideoDecoderTest.ResetBeforeInput/2',
-          'VideoDecoderTests/VideoDecoderTest.ResetBeforeInput/3',
-          'VideoDecoderTests/VideoDecoderTest.Preroll/0',
-          'VideoDecoderTests/VideoDecoderTest.Preroll/1',
-          'VideoDecoderTests/VideoDecoderTest.SingleInput/0',
-          'VideoDecoderTests/VideoDecoderTest.SingleInput/1',
-          'VideoDecoderTests/VideoDecoderTest.SingleInput/2',
-          'VideoDecoderTests/VideoDecoderTest.SingleInput/3',
+          # GetMaxNumberOfCachedFrames() on Android is device dependent,
+          # and Android doesn't provide an API to get it. So, this function
+          # doesn't make sense on Android. But HoldFramesUntilFull tests depend
+          # on this number strictly.
+          'VideoDecoderTests/VideoDecoderTest.HoldFramesUntilFull/*',
+
+          # Currently, invalid input tests are not supported.
           'VideoDecoderTests/VideoDecoderTest.SingleInvalidInput/*',
           'VideoDecoderTests/VideoDecoderTest'
           '.MultipleValidInputsAfterInvalidKeyFrame/*',
@@ -305,9 +288,6 @@
 
           # Android currently does not support multi-video playback, which
           # the following tests depend upon.
-          'VideoDecoderTests/VideoDecoderTest.ThreeMoreDecoders/0',
-          'VideoDecoderTests/VideoDecoderTest.ThreeMoreDecoders/1',
-          'VideoDecoderTests/VideoDecoderTest.ThreeMoreDecoders/2',
-          'VideoDecoderTests/VideoDecoderTest.ThreeMoreDecoders/3',
+          'VideoDecoderTests/VideoDecoderTest.ThreeMoreDecoders/*',
       ],
   }
diff --git a/src/starboard/android/shared/launcher.py b/src/starboard/android/shared/launcher.py
deleted file mode 100644
index 5a0d6bb..0000000
--- a/src/starboard/android/shared/launcher.py
+++ /dev/null
@@ -1,401 +0,0 @@
-#
-# Copyright 2017 The Cobalt Authors. All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-"""Android implementation of Starboard launcher abstraction."""
-
-import os
-import Queue
-import re
-import socket
-import subprocess
-import sys
-import threading
-import time
-
-import _env  # pylint: disable=unused-import
-
-from starboard.android.shared import sdk_utils
-from starboard.tools import abstract_launcher
-
-_APP_PACKAGE_NAME = 'dev.cobalt.coat'
-
-_APP_START_INTENT = 'dev.cobalt.coat/dev.cobalt.app.MainActivity'
-
-# Matches an "adb shell am monitor" error line.
-_RE_ADB_AM_MONITOR_ERROR = re.compile(r'\*\* ERROR')
-
-# String added to queue to indicate process has crashed
-_QUEUE_CODE_CRASHED = 'crashed'
-
-# Args to go/crow, which is started if no other device is attached.
-_CROW_COMMANDLINE = ['/google/data/ro/teams/mobile_eng_prod/crow/crow.par',
-                     '--api_level', '24', '--device', 'tv',
-                     '--open_gl_driver', 'host',
-                     '--noenable_g3_monitor']
-
-# How long to keep logging after a crash in order to emit the stack trace.
-_CRASH_LOG_SECONDS = 1.0
-
-_DEV_NULL = open('/dev/null')
-
-_ADB = os.path.join(sdk_utils.GetSdkPath(), 'platform-tools', 'adb')
-
-_RUNTIME_PERMISSIONS = [
-    'android.permission.GET_ACCOUNTS',
-    'android.permission.RECORD_AUDIO',
-]
-
-
-def TargetOsPathJoin(*path_elements):
-  """os.path.join for the target (Android)."""
-  return '/'.join(path_elements)
-
-
-def CleanLine(line):
-  """Removes trailing carriages returns from ADB output."""
-  return line.replace('\r', '')
-
-
-class StepTimer(object):
-  """Class for timing how long install/run steps take."""
-
-  def __init__(self, step_name):
-    self.step_name = step_name
-    self.start_time = time.time()
-    self.end_time = None
-
-  def Stop(self):
-    if self.start_time is None:
-      sys.stderr.write('Cannot stop timer; not started\n')
-    else:
-      self.end_time = time.time()
-      total_time = self.end_time - self.start_time
-      sys.stderr.write('Step \"{}\" took {} seconds.\n'.format(
-          self.step_name, total_time))
-
-
-class AdbCommandBuilder(object):
-  """Builder for 'adb' commands."""
-
-  def __init__(self, device_id):
-    self.device_id = device_id
-
-  def Build(self, *args):
-    """Builds an 'adb' commandline with the given args."""
-    result = [_ADB]
-    if self.device_id:
-      result.append('-s')
-      result.append(self.device_id)
-    result += list(args)
-    return result
-
-
-class AdbAmMonitorWatcher(object):
-  """Watches an "adb shell am monitor" process to detect crashes."""
-
-  def __init__(self, adb_builder, done_queue):
-    self.adb_builder = adb_builder
-    self.process = subprocess.Popen(
-        adb_builder.Build('shell', 'am', 'monitor'),
-        stdout=subprocess.PIPE,
-        stderr=_DEV_NULL,
-        close_fds=True)
-    self.thread = threading.Thread(target=self._Run)
-    self.thread.start()
-    self.done_queue = done_queue
-
-  def Shutdown(self):
-    self.process.kill()
-    self.thread.join()
-
-  def _Run(self):
-    while True:
-      line = CleanLine(self.process.stdout.readline())
-      if not line:
-        return
-      if re.search(_RE_ADB_AM_MONITOR_ERROR, line):
-        self.done_queue.put(_QUEUE_CODE_CRASHED)
-        # This log line will wake up the main thread
-        subprocess.call(
-            self.adb_builder.Build('shell', 'log', '-t', 'starboard',
-                                   'am monitor detected crash'),
-            close_fds=True)
-
-
-class Launcher(abstract_launcher.AbstractLauncher):
-  """Run an application on Android."""
-
-  def __init__(self, platform, target_name, config, device_id, **kwargs):
-
-    super(Launcher, self).__init__(platform, target_name, config, device_id,
-                                   **kwargs)
-
-    if not self.device_id:
-      self.device_id = self._IdentifyDevice()
-    else:
-      self._ConnectIfNecessary()
-
-    self.adb_builder = AdbCommandBuilder(self.device_id)
-
-    out_directory = os.path.split(self.GetTargetPath())[0]
-    self.apk_path = os.path.join(out_directory, '{}.apk'.format(target_name))
-    if not os.path.exists(self.apk_path):
-      raise Exception("Can't find APK {}".format(self.apk_path))
-
-    # This flag is set when the main Run() loop exits.  If Kill() is called
-    # after this flag is set, it will not do anything.
-    self.killed = threading.Event()
-
-    # Keep track of the port used by ADB forward in order to remove it later
-    # on.
-    self.local_port = None
-
-  def _IsValidIPv4Address(self, address):
-    """Returns True if address is a valid IPv4 address, False otherwise."""
-    try:
-      # inet_aton throws an exception if the address is not a valid IPv4
-      # address. However addresses such as '127.1' might still be considered
-      # valid, hence the check for 3 '.' in the address.
-      if socket.inet_aton(address) and address.count('.') == 3:
-        return True
-    except:
-      pass
-    return False
-
-  def _GetAdbDevices(self):
-    """Returns a list of names of connected devices, or empty list if none."""
-
-    # Does not use the ADBCommandBuilder class because this command should be
-    # run without targeting a specific device.
-    p = subprocess.Popen([_ADB, 'devices'], stderr=_DEV_NULL,
-                         stdout=subprocess.PIPE, close_fds=True)
-    result = p.stdout.readlines()[1:-1]
-    p.wait()
-
-    names = []
-    for device in result:
-      name_info = device.split('\t')
-      # Some devices may not have authorization for USB debugging.
-      try:
-        if 'unauthorized' not in name_info[1]:
-          names.append(name_info[0])
-      # Sometimes happens when device is found, even though none are connected.
-      except IndexError:
-        continue
-    return names
-
-  def _IdentifyDevice(self):
-    """Picks a device to be used to run the executable.
-
-    In the event that no device_id is provided, but multiple
-    devices are connected, this method chooses the first device
-    listed.
-
-    Returns:
-      The name of an attached device, or None if no devices are present.
-    """
-    device_name = None
-
-    devices = self._GetAdbDevices()
-    if devices:
-      device_name = devices[0]
-
-    return device_name
-
-  def _ConnectIfNecessary(self):
-    """Run ADB connect if needed for devices connected over IP."""
-    if not self._IsValidIPv4Address(self.device_id):
-      return
-    for device in self._GetAdbDevices():
-      # Devices returned by _GetAdbDevices might include port number, so cannot
-      # simply check if self.device_id is in the returned list.
-      if self.device_id in device:
-        return
-
-    # Device isn't connected. Run ADB connect.
-    # Does not use the ADBCommandBuilder class because this command should be
-    # run without targeting a specific device.
-    p = subprocess.Popen([_ADB, 'connect', self.device_id], stderr=_DEV_NULL,
-                         stdout=subprocess.PIPE, close_fds=True)
-    result = p.stdout.readlines()[0]
-    p.wait()
-
-    if 'connected to' not in result:
-      sys.stderr.write('Failed to connect to {}\n'.format(self.device_id))
-
-  def _LaunchCrowIfNecessary(self):
-    if self.device_id:
-      return
-
-    # Note that we just leave Crow running, since we uninstall/reinstall
-    # each time anyway.
-    self._CheckCall(*_CROW_COMMANDLINE)
-
-  def _Call(self, *args):
-    sys.stderr.write('{}\n'.format(' '.join(args)))
-    subprocess.call(args, stdout=_DEV_NULL, stderr=_DEV_NULL,
-                    close_fds=True)
-
-  def _CallAdb(self, *in_args):
-    args = self.adb_builder.Build(*in_args)
-    self._Call(*args)
-
-  def _CheckCall(self, *args):
-    sys.stderr.write('{}\n'.format(' '.join(args)))
-    subprocess.check_call(args, stdout=_DEV_NULL, stderr=_DEV_NULL,
-                          close_fds=True)
-
-  def _CheckCallAdb(self, *in_args):
-    args = self.adb_builder.Build(*in_args)
-    self._CheckCall(*args)
-
-  def _PopenAdb(self, *args, **kwargs):
-    return subprocess.Popen(self.adb_builder.Build(*args), close_fds=True,
-                            **kwargs)
-
-  def Run(self):
-    # The return code for binaries run on Android is read from a log line that
-    # it emitted in android_main.cc.  This return_code variable will be assigned
-    # the value read when we see that line, or left at 1 in the event of a crash
-    # or early exit.
-    return_code = 1
-
-    # Setup for running executable
-    self._LaunchCrowIfNecessary()
-    self._CheckCallAdb('wait-for-device')
-    self._Shutdown()
-
-    # Clear logcat
-    self._CheckCallAdb('logcat', '-c')
-
-    # Install the APK.
-    install_timer = StepTimer('install')
-    self._CheckCallAdb('install', '-r', self.apk_path)
-    install_timer.Stop()
-
-    # Send the wakeup key to ensure daydream isn't running, otherwise Activity
-    # Manager may get in a loop running the test over and over again.
-    self._CheckCallAdb('shell', 'input', 'keyevent', 'KEYCODE_WAKEUP')
-
-    # Grant runtime permissions to avoid prompts during testing.
-    for permission in _RUNTIME_PERMISSIONS:
-      self._CheckCallAdb('shell', 'pm', 'grant', _APP_PACKAGE_NAME, permission)
-
-    done_queue = Queue.Queue()
-    am_monitor = AdbAmMonitorWatcher(self.adb_builder, done_queue)
-
-    # Increases the size of the logcat buffer.  Without this, the log buffer
-    # will not flush quickly enough and output will be cut off.
-    self._CheckCallAdb('logcat', '-G', '2M')
-
-    #  Ctrl + C will kill this process
-    logcat_process = self._PopenAdb(
-        'logcat', '-v', 'raw', '-s', '*:F', 'DEBUG:*', 'System.err:*',
-        'starboard:*', 'starboard_media:*',
-        stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
-
-    # Actually running executable
-    run_timer = StepTimer('running executable')
-    try:
-      args = ['shell', 'am', 'start']
-      command_line_params = [
-          '--android_log_sleep_time=1000',
-          '--disable_sign_in',
-      ]
-      if self.target_command_line_params:
-        command_line_params += self.target_command_line_params
-      args += ['--esa', 'args', "'{}'".format(','.join(command_line_params))]
-      args += [_APP_START_INTENT]
-
-      self._CheckCallAdb(*args)
-
-      app_crashed = False
-      while True:
-        if not done_queue.empty():
-          done_queue_code = done_queue.get_nowait()
-          if done_queue_code == _QUEUE_CODE_CRASHED:
-            app_crashed = True
-            threading.Timer(_CRASH_LOG_SECONDS, logcat_process.kill).start()
-
-        # Note we cannot use "for line in logcat_process.stdout" because
-        # that uses a large buffer which will cause us to deadlock.
-        line = CleanLine(logcat_process.stdout.readline())
-
-        # Some crashes are not caught by the am_monitor thread, but they do
-        # produce the following string in logcat before they exit.
-        if 'beginning of crash' in line:
-          app_crashed = True
-          threading.Timer(_CRASH_LOG_SECONDS, logcat_process.kill).start()
-
-        if not line:  # Logcat exited, or was killed
-          break
-        else:
-          self._WriteLine(line)
-          # Don't break until we see the below text in logcat, which should be
-          # written when the Starboard application event loop finishes.
-          if '***Application Stopped***' in line:
-            try:
-              return_code = int(line.split(' ')[-1])
-            except ValueError:  # Error message was printed to stdout
-              pass
-            logcat_process.kill()
-            break
-
-    finally:
-      if app_crashed:
-        self._WriteLine('***Application Crashed***\n')
-      else:
-        self._Shutdown()
-      if self.local_port is not None:
-        self._CallAdb('forward', '--remove', 'tcp:{}'.format(self.local_port))
-      am_monitor.Shutdown()
-      self.killed.set()
-      run_timer.Stop()
-      if logcat_process.poll() is None:
-        # This could happen when using SIGINT to kill the launcher
-        # (e.g. when using starboard/tools/example/app_launcher_client.py).
-        sys.stderr.write('Logcat process is still running. Killing it now.\n')
-        logcat_process.kill()
-
-    return return_code
-
-  def _Shutdown(self):
-    self._CallAdb('shell', 'am', 'force-stop', _APP_PACKAGE_NAME)
-
-  def Kill(self):
-    if not self.killed.is_set():
-      sys.stderr.write('***Killing Launcher***\n')
-      self._CheckCallAdb('shell', 'log', '-t', 'starboard',
-                         '***Application Stopped*** 1')
-      self._Shutdown()
-    else:
-      sys.stderr.write('Cannot kill launcher: already dead.\n')
-
-  def _WriteLine(self, line):
-    """Write log output to stdout."""
-    self.output_file.write(line)
-    self.output_file.flush()
-
-  def GetHostAndPortGivenPort(self, port):
-    forward_p = self._PopenAdb(
-        'forward', 'tcp:0', 'tcp:{}'.format(port),
-        stdout=subprocess.PIPE,
-        stderr=_DEV_NULL)
-    forward_p.wait()
-
-    self.local_port = CleanLine(forward_p.stdout.readline()).rstrip('\n')
-    sys.stderr.write('ADB forward local port {} '
-                     '=> device port {}\n'.format(self.local_port, port))
-    return socket.gethostbyname('localhost'), self.local_port
diff --git a/src/starboard/android/shared/media_codec_bridge.cc b/src/starboard/android/shared/media_codec_bridge.cc
index 8b4daa4..01ed2e3 100644
--- a/src/starboard/android/shared/media_codec_bridge.cc
+++ b/src/starboard/android/shared/media_codec_bridge.cc
@@ -24,6 +24,8 @@
 // https://developer.android.com/reference/android/media/MediaFormat.html#COLOR_RANGE_FULL.
 const jint COLOR_RANGE_FULL = 1;
 const jint COLOR_RANGE_LIMITED = 2;
+// Not defined in MediaFormat. Represents unspecified color ID range.
+const jint COLOR_RANGE_UNSPECIFIED = 0;
 
 const jint COLOR_STANDARD_BT2020 = 6;
 const jint COLOR_STANDARD_BT601_NTSC = 4;
@@ -70,6 +72,8 @@
       return COLOR_RANGE_LIMITED;
     case kSbMediaRangeIdFull:
       return COLOR_RANGE_FULL;
+    case kSbMediaRangeIdUnspecified:
+      return COLOR_RANGE_UNSPECIFIED;
     default:
       return COLOR_VALUE_UNKNOWN;
   }
@@ -254,18 +258,6 @@
   j_reused_get_output_format_result_ = NULL;
 }
 
-DequeueInputResult MediaCodecBridge::DequeueInputBuffer(jlong timeout_us) {
-  JniEnvExt* env = JniEnvExt::Get();
-  env->CallVoidMethodOrAbort(
-      j_media_codec_bridge_, "dequeueInputBuffer",
-      "(JLdev/cobalt/media/MediaCodecBridge$DequeueInputResult;)V", timeout_us,
-      j_reused_dequeue_input_result_);
-  return {env->CallIntMethodOrAbort(j_reused_dequeue_input_result_, "status",
-                                    "()I"),
-          env->CallIntMethodOrAbort(j_reused_dequeue_input_result_, "index",
-                                    "()I")};
-}
-
 jobject MediaCodecBridge::GetInputBuffer(jint index) {
   SB_DCHECK(index >= 0);
   return JniEnvExt::Get()->CallObjectMethodOrAbort(
@@ -318,26 +310,6 @@
       presentation_time_microseconds);
 }
 
-DequeueOutputResult MediaCodecBridge::DequeueOutputBuffer(jlong timeout_us) {
-  JniEnvExt* env = JniEnvExt::Get();
-  env->CallVoidMethodOrAbort(
-      j_media_codec_bridge_, "dequeueOutputBuffer",
-      "(JLdev/cobalt/media/MediaCodecBridge$DequeueOutputResult;)V", timeout_us,
-      j_reused_dequeue_output_result_);
-  return {env->CallIntMethodOrAbort(j_reused_dequeue_output_result_, "status",
-                                    "()I"),
-          env->CallIntMethodOrAbort(j_reused_dequeue_output_result_, "index",
-                                    "()I"),
-          env->CallIntMethodOrAbort(j_reused_dequeue_output_result_, "flags",
-                                    "()I"),
-          env->CallIntMethodOrAbort(j_reused_dequeue_output_result_, "offset",
-                                    "()I"),
-          env->CallLongMethodOrAbort(j_reused_dequeue_output_result_,
-                                     "presentationTimeMicroseconds", "()J"),
-          env->CallIntMethodOrAbort(j_reused_dequeue_output_result_, "numBytes",
-                                    "()I")};
-}
-
 jobject MediaCodecBridge::GetOutputBuffer(jint index) {
   SB_DCHECK(index >= 0);
   return JniEnvExt::Get()->CallObjectMethodOrAbort(
diff --git a/src/starboard/android/shared/media_decoder.cc b/src/starboard/android/shared/media_decoder.cc
index c47c126..fe757cc 100644
--- a/src/starboard/android/shared/media_decoder.cc
+++ b/src/starboard/android/shared/media_decoder.cc
@@ -303,7 +303,11 @@
 
   if (is_valid()) {
     host_->OnFlushing();
-
+    // After |decoder_thread_| is ended and before |media_codec_bridge_| is
+    // flushed, OnMediaCodecOutputBufferAvailable() would still be called.
+    // So that, |dequeue_output_results_| may not be empty. As we call
+    // JoinOnThreads() in destructor and DequeueOutputResult is consisted of
+    // plain data, it's fine to let destructor delete |dequeue_output_results_|.
     jint status = media_codec_bridge_->Flush();
     if (status != MEDIA_CODEC_OK) {
       SB_LOG(ERROR) << "Failed to flush media codec.";
diff --git a/src/starboard/android/shared/player_create.cc b/src/starboard/android/shared/player_create.cc
index 800735b..ffa2260 100644
--- a/src/starboard/android/shared/player_create.cc
+++ b/src/starboard/android/shared/player_create.cc
@@ -28,7 +28,6 @@
 using starboard::android::shared::cobalt::kPlaying;
 using starboard::android::shared::cobalt::
     UpdateActiveSessionPlatformPlaybackState;
-using starboard::android::shared::cobalt::UpdateActiveSessionPlatformPlayer;
 
 SbPlayer SbPlayerCreate(SbWindow window,
                         SbMediaVideoCodec video_codec,
@@ -116,7 +115,5 @@
   // matter.
   SbPlayerSetBounds(player, 0, 0, 0, 0, 0);
 
-  UpdateActiveSessionPlatformPlayer(player);
-
   return player;
 }
diff --git a/src/starboard/android/shared/player_destroy.cc b/src/starboard/android/shared/player_destroy.cc
index b1b5a96..b790729 100644
--- a/src/starboard/android/shared/player_destroy.cc
+++ b/src/starboard/android/shared/player_destroy.cc
@@ -20,13 +20,11 @@
 using starboard::android::shared::cobalt::kNone;
 using starboard::android::shared::cobalt::
     UpdateActiveSessionPlatformPlaybackState;
-using starboard::android::shared::cobalt::UpdateActiveSessionPlatformPlayer;
 
 void SbPlayerDestroy(SbPlayer player) {
   if (!SbPlayerIsValid(player)) {
     return;
   }
   UpdateActiveSessionPlatformPlaybackState(kNone);
-  UpdateActiveSessionPlatformPlayer(kSbPlayerInvalid);
   delete player;
 }
diff --git a/src/starboard/android/shared/starboard_platform.gypi b/src/starboard/android/shared/starboard_platform.gypi
index 977c928..186c9df 100644
--- a/src/starboard/android/shared/starboard_platform.gypi
+++ b/src/starboard/android/shared/starboard_platform.gypi
@@ -62,6 +62,9 @@
         'audio_decoder.h',
         'audio_renderer.h',
         'audio_sink_get_max_channels.cc',
+        'audio_sink_get_min_buffer_size_in_frames.cc',
+        'audio_sink_min_required_frames_tester.cc',
+        'audio_sink_min_required_frames_tester.h',
         'audio_sink_get_nearest_supported_sample_frequency.cc',
         'audio_sink_is_audio_frame_storage_type_supported.cc',
         'audio_sink_is_audio_sample_type_supported.cc',
@@ -444,6 +447,7 @@
         '<(DEPTH)/starboard/shared/stub/system_hide_splash_screen.cc',
         '<(DEPTH)/starboard/shared/stub/system_request_pause.cc',
         '<(DEPTH)/starboard/shared/stub/system_request_unpause.cc',
+        '<(DEPTH)/starboard/shared/stub/system_sign_with_certification_secret_key.cc',
         '<(DEPTH)/starboard/shared/stub/thread_context_get_pointer.cc',
         '<(DEPTH)/starboard/shared/stub/thread_sampler_create.cc',
         '<(DEPTH)/starboard/shared/stub/thread_sampler_destroy.cc',
diff --git a/src/starboard/android/shared/video_decoder.cc b/src/starboard/android/shared/video_decoder.cc
index 4d3400a..227b54c 100644
--- a/src/starboard/android/shared/video_decoder.cc
+++ b/src/starboard/android/shared/video_decoder.cc
@@ -61,9 +61,6 @@
     if (!released_) {
       media_codec_bridge_->ReleaseOutputBuffer(dequeue_output_result_.index,
                                                false);
-      if (is_end_of_stream()) {
-        media_codec_bridge_->Flush();
-      }
     }
   }
 
@@ -166,10 +163,7 @@
       output_mode_(output_mode),
       decode_target_graphics_context_provider_(
           decode_target_graphics_context_provider),
-      decode_target_(kSbDecodeTargetInvalid),
-      frame_width_(0),
-      frame_height_(0),
-      first_buffer_received_(false),
+      has_new_texture_available_(false),
       surface_condition_variable_(surface_destroy_mutex_) {
   if (!InitializeCodec()) {
     SB_LOG(ERROR) << "Failed to initialize video decoder.";
@@ -245,11 +239,17 @@
         SB_LOG(ERROR) << "Failed to reinitialize codec.";
         TeardownCodec();
         error_cb_(kSbPlayerErrorDecode, "Cannot initialize codec.");
+        return;
       }
     }
   }
-
+  // There's a race condition when suspending the app. If surface view is
+  // destroyed before video decoder stopped, |media_decoder_| could be null
+  // here. And error_cb_() could be handled asynchronously. It's possible
+  // that WriteInputBuffer() is called again when the first WriteInputBuffer()
+  // fails, in such case is_valid() will also return false.
   if (!is_valid()) {
+    SB_LOG(INFO) << "Trying to write input buffer when codec is not available.";
     return;
   }
   media_decoder_->WriteInputBuffer(input_buffer);
@@ -262,11 +262,22 @@
   SB_DCHECK(decoder_status_cb_);
 
   if (!first_buffer_received_) {
+    // In this case, |media_decoder_|'s decoder thread is not initialized.
+    // Return EOS frame directly.
     first_buffer_received_ = true;
     first_buffer_timestamp_ = 0;
+    decoder_status_cb_(kBufferFull, VideoFrame::CreateEOSFrame());
+    return;
   }
 
+  // There's a race condition when suspending the app. If surface view is
+  // destroyed before video decoder stopped, |media_decoder_| could be null
+  // here. And error_cb_() could be handled asynchronously. It's possible
+  // that WriteEndOfStream() is called immediately after the first
+  // WriteInputBuffer() fails, in such case is_valid() will also return false.
   if (!is_valid()) {
+    SB_LOG(INFO)
+        << "Trying to write end of stream when codec is not available.";
     return;
   }
   media_decoder_->WriteEndOfStream();
@@ -306,6 +317,10 @@
       }
       j_output_surface = decode_target->data->surface;
 
+      JniEnvExt* env = JniEnvExt::Get();
+      env->CallVoidMethodOrAbort(decode_target->data->surface_texture,
+                                 "setOnFrameAvailableListener", "(J)V", this);
+
       starboard::ScopedLock lock(decode_target_mutex_);
       decode_target_ = decode_target;
     } break;
@@ -349,11 +364,34 @@
   media_decoder_.reset();
   color_metadata_ = starboard::nullopt;
 
-  starboard::ScopedLock lock(decode_target_mutex_);
-  if (SbDecodeTargetIsValid(decode_target_)) {
+  SbDecodeTarget decode_target_to_release = kSbDecodeTargetInvalid;
+  {
+    starboard::ScopedLock lock(decode_target_mutex_);
+    if (SbDecodeTargetIsValid(decode_target_)) {
+      // Remove OnFrameAvailableListener to make sure the callback
+      // would not be called.
+      JniEnvExt* env = JniEnvExt::Get();
+      env->CallVoidMethodOrAbort(decode_target_->data->surface_texture,
+                                 "removeOnFrameAvailableListener", "()V");
+
+      decode_target_to_release = decode_target_;
+      decode_target_ = kSbDecodeTargetInvalid;
+      first_texture_received_ = false;
+      has_new_texture_available_.store(false);
+    } else {
+      // If |decode_target_| is not created, |first_texture_received_| and
+      // |has_new_texture_available_| should always be false.
+      SB_DCHECK(!first_texture_received_);
+      SB_DCHECK(!has_new_texture_available_.load());
+    }
+  }
+  // Release SbDecodeTarget on renderer thread. As |decode_target_mutex_| may
+  // be required in renderer thread, SbDecodeTargetReleaseInGlesContext() must
+  // be called when |decode_target_mutex_| is not locked, or we may get
+  // deadlock.
+  if (SbDecodeTargetIsValid(decode_target_to_release)) {
     SbDecodeTargetReleaseInGlesContext(decode_target_graphics_context_provider_,
-                                       decode_target_);
-    decode_target_ = kSbDecodeTargetInvalid;
+                                       decode_target_to_release);
   }
 }
 
@@ -481,32 +519,43 @@
   // We must take a lock here since this function can be called from a separate
   // thread.
   starboard::ScopedLock lock(decode_target_mutex_);
-
   if (SbDecodeTargetIsValid(decode_target_)) {
-    updateTexImage(decode_target_->data->surface_texture);
+    bool has_new_texture = has_new_texture_available_.exchange(false);
+    if (has_new_texture) {
+      updateTexImage(decode_target_->data->surface_texture);
 
-    float matrix4x4[16];
-    getTransformMatrix(decode_target_->data->surface_texture, matrix4x4);
-    SetDecodeTargetContentRegionFromMatrix(
-        &decode_target_->data->info.planes[0].content_region, 1, 1, matrix4x4);
+      float matrix4x4[16];
+      getTransformMatrix(decode_target_->data->surface_texture, matrix4x4);
+      SetDecodeTargetContentRegionFromMatrix(
+          &decode_target_->data->info.planes[0].content_region, 1, 1,
+          matrix4x4);
 
-    // Mark the decode target's width and height as 1, so that the
-    // |content_region|'s coordinates will be interpreted as normalized
-    // coordinates.  This is nice because on Android we're never explicitly
-    // told the texture width/height, and we are only provided the content
-    // region via normalized coordinates.
-    decode_target_->data->info.planes[0].width = 1;
-    decode_target_->data->info.planes[0].height = 1;
-    decode_target_->data->info.width = 1;
-    decode_target_->data->info.height = 1;
+      // Mark the decode target's width and height as 1, so that the
+      // |content_region|'s coordinates will be interpreted as normalized
+      // coordinates.  This is nice because on Android we're never explicitly
+      // told the texture width/height, and we are only provided the content
+      // region via normalized coordinates.
+      decode_target_->data->info.planes[0].width = 1;
+      decode_target_->data->info.planes[0].height = 1;
+      decode_target_->data->info.width = 1;
+      decode_target_->data->info.height = 1;
 
-    SbDecodeTarget out_decode_target = new SbDecodeTargetPrivate;
-    out_decode_target->data = decode_target_->data;
+      if (!first_texture_received_) {
+        first_texture_received_ = true;
+      }
+    }
 
-    return out_decode_target;
-  } else {
-    return kSbDecodeTargetInvalid;
+    if (first_texture_received_) {
+      SbDecodeTarget out_decode_target = new SbDecodeTargetPrivate;
+      out_decode_target->data = decode_target_->data;
+      return out_decode_target;
+    }
   }
+  return kSbDecodeTargetInvalid;
+}
+
+void VideoDecoder::OnNewTextureAvailable() {
+  has_new_texture_available_.store(true);
 }
 
 void VideoDecoder::OnSurfaceDestroyed() {
@@ -527,3 +576,16 @@
 }  // namespace shared
 }  // namespace android
 }  // namespace starboard
+
+extern "C" SB_EXPORT_PLATFORM void
+Java_dev_cobalt_media_VideoSurfaceTexture_nativeOnFrameAvailable(
+    JNIEnv* env,
+    jobject unused_this,
+    jlong native_video_decoder) {
+  using starboard::android::shared::VideoDecoder;
+
+  VideoDecoder* video_decoder =
+      reinterpret_cast<VideoDecoder*>(native_video_decoder);
+  SB_DCHECK(video_decoder);
+  video_decoder->OnNewTextureAvailable();
+}
diff --git a/src/starboard/android/shared/video_decoder.h b/src/starboard/android/shared/video_decoder.h
index ef5964c..18f3730 100644
--- a/src/starboard/android/shared/video_decoder.h
+++ b/src/starboard/android/shared/video_decoder.h
@@ -62,6 +62,11 @@
                   const ErrorCB& error_cb) override;
   size_t GetPrerollFrameCount() const override;
   SbTime GetPrerollTimeout() const override;
+  // As we hold output buffers received from MediaCodec, the max number of
+  // cached frames depends on the max number of output buffers in MediaCodec,
+  // which is device dependent. The media decoder may stall if we hold all
+  // output buffers. But it would continue working once we release output
+  // buffer.
   size_t GetMaxNumberOfCachedFrames() const override { return 12; }
 
   void WriteInputBuffer(const scoped_refptr<InputBuffer>& input_buffer)
@@ -72,6 +77,8 @@
 
   bool is_valid() const { return media_decoder_ != NULL; }
 
+  void OnNewTextureAvailable();
+
  private:
   // Attempt to initialize the codec.  Returns whether initialization was
   // successful.
@@ -100,7 +107,7 @@
 
   // If decode-to-texture is enabled, then we store the decode target texture
   // inside of this |decode_target_| member.
-  SbDecodeTarget decode_target_;
+  SbDecodeTarget decode_target_ = kSbDecodeTargetInvalid;
 
   // Since GetCurrentDecodeTarget() needs to be called from an arbitrary thread
   // to obtain the current decode target (which ultimately ends up being a
@@ -109,8 +116,8 @@
   starboard::Mutex decode_target_mutex_;
 
   // The width and height of the latest decoded frame.
-  int32_t frame_width_;
-  int32_t frame_height_;
+  int32_t frame_width_ = 0;
+  int32_t frame_height_ = 0;
 
   // The last enqueued |SbMediaColorMetadata|.
   optional<SbMediaColorMetadata> color_metadata_;
@@ -120,8 +127,10 @@
   atomic_int32_t number_of_frames_being_decoded_;
   scoped_refptr<Sink> sink_;
 
-  bool first_buffer_received_;
+  bool first_buffer_received_ = false;
+  bool first_texture_received_ = false;
   volatile SbTime first_buffer_timestamp_;
+  atomic_bool has_new_texture_available_;
 
   // Use |owns_video_surface_| only on decoder thread, to avoid unnecessary
   // invocation of ReleaseVideoSurface(), though ReleaseVideoSurface() would
diff --git a/src/starboard/audio_sink.h b/src/starboard/audio_sink.h
index cab09dc..c0655b8 100644
--- a/src/starboard/audio_sink.h
+++ b/src/starboard/audio_sink.h
@@ -170,6 +170,25 @@
 SB_EXPORT bool SbAudioSinkIsAudioFrameStorageTypeSupported(
     SbMediaAudioFrameStorageType audio_frame_storage_type);
 
+#if SB_API_VERSION >= 11
+// Returns the minimum frames required by audio sink to play without underflows.
+// Returns -1, if |channels|, |sample_type| or |sampling_frequency_hz| is not
+// supported. It's user's responsibility to ensure that there're enough
+// frames written into audio sink during playing, or it may have underflows.
+//
+// |channels|: The number of audio channels, such as left and right channels
+// in stereo audio.
+// |audio_sample_type|: The type of each sample of the audio data --
+// |int16|, |float32|, etc.
+// |sampling_frequency_hz|: The sample frequency of the audio data being
+// streamed. For example, 22,000 Hz means 22,000 sample elements represents
+// one second of audio data.
+SB_EXPORT int SbAudioSinkGetMinBufferSizeInFrames(
+    int channels,
+    SbMediaAudioSampleType sample_type,
+    int sampling_frequency_hz);
+#endif  // SB_API_VERSION >= 11
+
 #ifdef __cplusplus
 }  // extern "C"
 #endif
diff --git a/src/starboard/build/filelist.py b/src/starboard/build/filelist.py
index c2ec006..c42f2f9 100644
--- a/src/starboard/build/filelist.py
+++ b/src/starboard/build/filelist.py
@@ -34,8 +34,8 @@
   """Makes it easy to include files for things like archive operations."""
 
   def __init__(self):
-    self.file_list = []  # List of 2-tuples: file_path, archive_path
-    self.symlink_dir_list = []  # Same
+    self.file_list = []  # List of (file_path, archive_path)
+    self.symlink_dir_list = []  # List of (file_path, link_path, target_path)
 
   def AddAllFilesInPath(self, root_dir, sub_path):
     """Starting at the root path, the sub_paths are searched for files."""
@@ -45,12 +45,16 @@
       self.AddFile(root_dir, sub_path)
     elif not os.path.isdir(sub_path):
       raise IOError('Expected root directory to exist: %s' % sub_path)
+    cwd = os.getcwd()
     for root, dirs, files in port_symlink.OsWalk(sub_path):
+      # Do not use os.path.abspath as it does not work on Win for long paths.
+      if not os.path.isabs(root):
+        root = os.path.join(cwd, root)
       for f in files:
-        full_path = os.path.abspath(os.path.join(root, f))
+        full_path = os.path.join(root, f)
         all_files.append(full_path)
       for dir_name in dirs:
-        full_path = os.path.abspath(os.path.join(root, dir_name))
+        full_path = os.path.join(root, dir_name)
         if port_symlink.IsSymLink(full_path):
           all_symlinks.append(full_path)
     for f in all_files + all_symlinks:
@@ -84,11 +88,19 @@
 
 
 def _ResolveSymLink(link_file):
+  """Returns the absolute path of the resolved link. This path should exist."""
   target_path = port_symlink.ReadSymLink(link_file)
-  if os.path.exists(target_path):  # Absolute path
+  if os.path.isabs(target_path):  # Absolute path
+    assert os.path.exists(target_path), (
+        'Path {} does not exist.'.format(target_path))
     return target_path
-  else:
-    return os.path.join(link_file, target_path)  # Relative path from link_file.
+  else:  # Relative path from link_file.
+    abs_path = os.path.normpath(
+        os.path.join(os.path.dirname(link_file), target_path))
+    assert os.path.exists(abs_path), (
+        'Path {} does not exist (link file: {}, target_path: {})'.format(
+            abs_path, link_file, target_path))
+    return abs_path
 
 
 def _FallbackOsGetRelPath(path, start_dir):
@@ -103,24 +115,26 @@
 
 
 def _OsGetRelpath(path, start_dir):
+  path = os.path.normpath(path)
+  start_dir = os.path.normpath(start_dir)
+  # Use absolute paths for Windows (nt paths checks the drive specifier).
+  # Do not use os.path.abspath as it does not work on Win for long paths.
+  if not os.path.isabs(path):
+    path = os.path.join(os.getcwd(), path)
+  if not os.path.isabs(start_dir):
+    start_dir = os.path.join(os.getcwd(), start_dir)
   try:
     return os.path.relpath(path, start_dir)
   except ValueError:
     try:
-      # Windows: nt paths checks the drive specifier, which is given by the
-      # abspath operation.
-      return os.path.relpath(os.path.abspath(path), os.path.abspath(start_dir))
-    except ValueError:
-      try:
-        # Last resort: do a string comparison to get relative path.
-        # Fixes issue b/134589032
-        rel_path = _FallbackOsGetRelPath(path, start_dir)
-        if not os.path.exists(os.path.join(start_dir, rel_path)):
-          raise ValueError('% does not exist.' % os.path.abspath(rel_path))
-        return rel_path
-      except ValueError as err:
-        logging.exception('Error %s while calling os.path.relpath(%s, %s)',
-                          err, path, start_dir)
+      # Do a string comparison to get relative path.
+      rel_path = _FallbackOsGetRelPath(path, start_dir)
+      if not os.path.exists(os.path.join(start_dir, rel_path)):
+        raise ValueError('%s does not exist.' % os.path.abspath(rel_path))
+      return rel_path
+    except ValueError as err:
+      logging.exception('Error %s while calling os.path.relpath(%s, %s)',
+                        err, path, start_dir)
 
 
 TYPE_NONE = 'NONE'
diff --git a/src/starboard/build/filelist_test.py b/src/starboard/build/filelist_test.py
index 7463ebb..34fc71b 100644
--- a/src/starboard/build/filelist_test.py
+++ b/src/starboard/build/filelist_test.py
@@ -21,18 +21,32 @@
 
 import _env  # pylint: disable=relative-import,unused-import
 
+from cobalt.build import cobalt_archive_extract
 from starboard.build import filelist
 from starboard.build import port_symlink
 from starboard.tools import util
 
 
+LONG_DIR_NAME_1 = 'really_l' + 'o' * 120 + 'ng_dir_name'
+LONG_DIR_NAME_2 = 'another_really_l' + 'o' * 120 + 'ng_dir_name'
+LONG_SUB_DIRS = os.path.join(LONG_DIR_NAME_1, LONG_DIR_NAME_2)
+
+
 def _MakeDirs(path):
   if not os.path.isdir(path):
     os.makedirs(path)
 
 
 class TempFileSystem(object):
-  """Generates a test file structure with file/dir/symlink for testing."""
+  """Generates a test file structure with file/dir/symlink for testing.
+
+  <temp_dir>
+   |-> <root_sub_dir>
+   |   |-> in
+   |   |   |-> from_dir
+   |   |   |   |-> test.txt
+   |   |   |-> from_dir_lnk -> <temp_dir>/<root_sub_dir>/in/from_dir
+  """
 
   def __init__(self, root_sub_dir='bundler'):
     root_sub_dir = os.path.normpath(root_sub_dir)
@@ -40,9 +54,9 @@
     if os.path.exists(self.root_tmp):
       port_symlink.Rmtree(self.root_tmp)
     self.root_in_tmp = os.path.join(self.root_tmp, 'in')
-    self.test_txt = os.path.join(self.root_in_tmp, 'from_dir', 'test.txt')
     self.sym_dir = os.path.join(self.root_in_tmp, 'from_dir_lnk')
     self.from_dir = os.path.join(self.root_in_tmp, 'from_dir')
+    self.test_txt = os.path.join(self.from_dir, 'test.txt')
 
   def Make(self):
     _MakeDirs(self.root_in_tmp)
@@ -51,6 +65,15 @@
     with open(self.test_txt, 'w') as fd:
       fd.write('TEST')
 
+  def MakeLongPathFile(self):
+    long_path_txt = os.path.join(self.from_dir, LONG_SUB_DIRS, 'test2.txt')
+    self.long_path_txt = long_path_txt
+    if port_symlink.IsWindows():
+      long_path_txt = cobalt_archive_extract.ToWinUncPath(long_path_txt)
+    _MakeDirs(os.path.dirname(long_path_txt))
+    with open(long_path_txt, 'w') as fd:
+      fd.write('TEST BIS')
+
   def Clear(self):
     port_symlink.Rmtree(self.root_tmp)
 
@@ -99,10 +122,15 @@
   def testAddAllFilesInPath(self):
     tf = TempFileSystem()
     tf.Make()
+    tf.MakeLongPathFile()
     flist = filelist.FileList()
     flist.AddAllFilesInPath(tf.root_in_tmp, tf.root_in_tmp)
     self.assertTrue(flist.symlink_dir_list)
-    self.assertTrue(flist.file_list)
+    expected_file_list = [
+        [tf.test_txt, os.path.join('from_dir', 'test.txt')],
+        [tf.long_path_txt,
+         os.path.join('from_dir', LONG_SUB_DIRS , 'test2.txt')]]
+    self.assertEqual(flist.file_list, expected_file_list)
 
   def testAddSymlink(self):
     tf = TempFileSystem()
@@ -114,27 +142,30 @@
     self.assertFalse(flist.file_list)
 
   def testAddRelativeSymlink(self):
-    """Tests the that adding a relative symlink works as expected."""
+    """Tests that adding a relative symlink works as expected."""
     tf = TempFileSystem()
     tf.Make()
     flist = filelist.FileList()
-    in2 = os.path.join(tf.root_in_tmp, 'in2')
-    target_path = os.path.relpath(tf.from_dir, in2)
+    in2 = os.path.join(tf.root_in_tmp, 'subdir', 'in2')
+    target_path = os.path.relpath(tf.from_dir, os.path.dirname(in2))
     # Sanity check that target_path is relative.
-    self.assertIn('..', target_path)
+    self.assertEqual(target_path, os.path.join('..', 'from_dir'))
+    # Create the link and check that it points to the correct folder.
     port_symlink.MakeSymLink(target_path, in2)
     self.assertTrue(port_symlink.IsSymLink(in2))
-    read_back_target_path = port_symlink.ReadSymLink(in2)
-    self.assertIn('..', read_back_target_path)
+    self.assertEqual(port_symlink.ReadSymLink(in2), target_path)
+    self.assertEqual(os.listdir(in2), ['test.txt'])
+    # Add the symlink to flist and check its content.
     flist.AddFile(tf.root_tmp, in2)
     flist.Print()
     self.assertTrue(flist.symlink_dir_list)
-    symlink_entry = flist.symlink_dir_list[0][1:]
-    expected = [os.path.join('in', 'in2'), os.path.join('in', 'from_dir')]
-    self.assertEqual(expected, symlink_entry)
+    expected = [
+        tf.root_tmp,
+        os.path.join('in', 'subdir', 'in2'),
+        os.path.join('in', 'from_dir')]
+    self.assertEqual(flist.symlink_dir_list[0], expected)
 
   def testOsGetRelpathFallback(self):
-    # Tests issue b/134589032
     path = (
         'src/out/tmp/cobalt_archive/archive/____app_launcher/third_party/'
         'web_platform_tests/custom-elements/registering-custom-elements/'
diff --git a/src/starboard/build/platform_configuration.py b/src/starboard/build/platform_configuration.py
index 6ef6650..61ce79a 100644
--- a/src/starboard/build/platform_configuration.py
+++ b/src/starboard/build/platform_configuration.py
@@ -106,7 +106,7 @@
 
     Args:
       application_name: The name of the application to load, in a canonical
-                        filesystem-friendly form.
+        filesystem-friendly form.
 
     Returns:
       An instance of ApplicationConfiguration defined for the application being
@@ -143,7 +143,9 @@
     return self._application_configuration
 
   def SetupPlatformTools(self, build_number):
-    """Install tools, SDKs, etc. needed to build for the platform.
+    """Install tools, SDKs, etc.
+
+    needed to build for the platform.
 
     Installs tools needed to build for this platform, possibly downloading
     and/or interacting with the user to do so. Raises a RuntimeError if the
@@ -232,7 +234,7 @@
         # Which JavaScript engine to use.  Currently, both SpiderMonkey 45 and
         # V8 are supported.  Note that V8 can only be used on platforms that
         # support JIT.
-        'javascript_engine': 'mozjs-45',
+        'javascript_engine': 'v8',
 
         # Disable JIT and run in interpreter-only mode by default. It can be
         # set to 1 to run in JIT mode.  For SpiderMonkey in particular, we
@@ -240,7 +242,7 @@
         # execution and lower memory usage.  Setting this to 0 for engine that
         # requires JIT, or 1 on a platform that does not support JIT, is a
         # usage error.
-        'cobalt_enable_jit': 0,
+        'cobalt_enable_jit': 1,
 
         # TODO: Remove these compatibility variables.
         'cobalt_config': config_name,
diff --git a/src/starboard/build/port_symlink.py b/src/starboard/build/port_symlink.py
index 33c417b..ec9f46c 100644
--- a/src/starboard/build/port_symlink.py
+++ b/src/starboard/build/port_symlink.py
@@ -104,7 +104,7 @@
 
 
 def _ReadSymLink(link_path):
-  """Returns a absolute path to the folder referred to by the link_path."""
+  """Returns the path (abs. or rel.) to the folder referred to by link_path."""
   if IsWindows():
     # pylint: disable=g-import-not-at-top
     from starboard.build import win_symlink
diff --git a/src/starboard/build/win_symlink.py b/src/starboard/build/win_symlink.py
index ef9ac07..1992561 100644
--- a/src/starboard/build/win_symlink.py
+++ b/src/starboard/build/win_symlink.py
@@ -31,6 +31,8 @@
 import subprocess
 import time
 
+from cobalt.build import cobalt_archive_extract
+
 
 ################################################################################
 #                                  API                                         #
@@ -278,15 +280,20 @@
 
 def _OsWalk(top, topdown, onerror, followlinks):
   """See api version of OsWalk above, for docstring."""
+  # Need an absolute path to use listdir and isdir with long paths.
+  top_abs_path = top
+  if not os.path.isabs(top_abs_path):
+    top_abs_path = os.path.join(os.getcwd(), top_abs_path)
+  top_abs_path = cobalt_archive_extract.ToWinUncPath(top)
   try:
-    names = os.listdir(top)
+    names = os.listdir(top_abs_path)
   except OSError as err:
     if onerror is not None:
       onerror(err)
     return
   dirs, nondirs = [], []
   for name in names:
-    if os.path.isdir(os.path.join(top, name)):
+    if os.path.isdir(os.path.join(top_abs_path, name)):
       dirs.append(name)
     else:
       nondirs.append(name)
diff --git a/src/starboard/build/win_symlink_fast.py b/src/starboard/build/win_symlink_fast.py
index e5c33af..7e8942f 100644
--- a/src/starboard/build/win_symlink_fast.py
+++ b/src/starboard/build/win_symlink_fast.py
@@ -119,7 +119,9 @@
 IO_REPARSE_TAG_SYMLINK = 0xA000000C
 MAXIMUM_REPARSE_DATA_BUFFER_SIZE = 0x4000
 SYMBOLIC_LINK_FLAG_DIRECTORY = 0x1
+# Developer Mode must be enabled in order to use the following flag.
 SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE = 0x2
+SYMLINK_FLAG_RELATIVE = 0x1
 
 
 class GenericReparseBuffer(ctypes.Structure):
@@ -143,6 +145,16 @@
     offset = type(self).PathBuffer.offset + self.PrintNameOffset
     return arrayt.from_address(ctypes.addressof(self) + offset).value
 
+  @property
+  def substitute_name(self):
+    arrayt = WCHAR * (self.SubstituteNameLength // 2)
+    offset = type(self).PathBuffer.offset + self.SubstituteNameOffset
+    return arrayt.from_address(ctypes.addressof(self) + offset).value
+
+  @property
+  def is_relative_path(self):
+    return bool(self.Flags & SYMLINK_FLAG_RELATIVE)
+
 
 class MountPointReparseBuffer(ctypes.Structure):
   """Win32 api data structure."""
@@ -158,6 +170,12 @@
     offset = type(self).PathBuffer.offset + self.PrintNameOffset
     return arrayt.from_address(ctypes.addressof(self) + offset).value
 
+  @property
+  def substitute_name(self):
+    arrayt = WCHAR * (self.SubstituteNameLength // 2)
+    offset = type(self).PathBuffer.offset + self.SubstituteNameOffset
+    return arrayt.from_address(ctypes.addressof(self) + offset).value
+
 
 class ReparseDataBuffer(ctypes.Structure):
   """Win32 api data structure."""
diff --git a/src/starboard/common/log.h b/src/starboard/common/log.h
index bc8caf1..c7e34e5 100644
--- a/src/starboard/common/log.h
+++ b/src/starboard/common/log.h
@@ -123,9 +123,19 @@
 #define SB_LAZY_STREAM(stream, condition) \
   !(condition) ? (void)0 : ::starboard::logging::LogMessageVoidify() & (stream)
 
+#if SB_LOGGING_IS_OFFICIAL_BUILD
+#define SB_LOG_IS_ON(severity)                        \
+  (::starboard::logging::SB_LOG_##severity >=         \
+   ::starboard::logging::SB_LOG_FATAL)                \
+      ? ((::starboard::logging::SB_LOG_##severity) >= \
+         ::starboard::logging::GetMinLogLevel())      \
+      : false
+#else  // SB_LOGGING_IS_OFFICIAL_BUILD
 #define SB_LOG_IS_ON(severity)                  \
   ((::starboard::logging::SB_LOG_##severity) >= \
-    ::starboard::logging::GetMinLogLevel())
+   ::starboard::logging::GetMinLogLevel())
+#endif  // SB_LOGGING_IS_OFFICIAL_BUILD
+
 #define SB_LOG_IF(severity, condition) \
   SB_LAZY_STREAM(SB_LOG_STREAM(severity), SB_LOG_IS_ON(severity) && (condition))
 #define SB_LOG(severity) SB_LOG_IF(severity, true)
diff --git a/src/starboard/common/rwlock.cc b/src/starboard/common/rwlock.cc
index 0a9c867..3e54d03 100644
--- a/src/starboard/common/rwlock.cc
+++ b/src/starboard/common/rwlock.cc
@@ -14,50 +14,61 @@
 
 #include "starboard/common/rwlock.h"
 
+#include "starboard/common/log.h"
+
 namespace starboard {
 
-RWLock::RWLock() : num_readers_(0), reader_(), writer_(1) {}
+// Write-preferring lock.
+// https://en.wikipedia.org/wiki/Readers%E2%80%93writer_lock
+RWLock::RWLock()
+    : readers_(0),
+      writing_(false) {
+  SB_CHECK(SbMutexCreate(&mutex_));
+  SB_CHECK(SbConditionVariableCreate(&condition_, &mutex_));
+}
 
-RWLock::~RWLock() {}
+RWLock::~RWLock() {
+  SbConditionVariableDestroy(&condition_);
+  SbMutexDestroy(&mutex_);
+}
 
 void RWLock::AcquireReadLock() {
-  reader_.Acquire();
-  if (0 == num_readers_++) {
-    AcquireWriteLock();
+  SB_CHECK(SbMutexAcquire(&mutex_) == kSbMutexAcquired);
+  while (writing_) {
+    SB_CHECK(SbConditionVariableWait(&condition_, &mutex_) !=
+             kSbConditionVariableFailed);
   }
-  reader_.Release();
+  ++readers_;
+  SB_CHECK(SbMutexRelease(&mutex_));
 }
 
 void RWLock::ReleaseReadLock() {
-  reader_.Acquire();
-  if (--num_readers_ == 0) {
-    ReleaseWriteLock();
+  SB_CHECK(SbMutexAcquire(&mutex_) == kSbMutexAcquired);
+  if (--readers_ == 0) {
+    SB_CHECK(SbConditionVariableBroadcast(&condition_));
   }
-  reader_.Release();
+  SB_CHECK(SbMutexRelease(&mutex_));
 }
 
 void RWLock::AcquireWriteLock() {
-  writer_.Take();
+  SB_CHECK(SbMutexAcquire(&mutex_) == kSbMutexAcquired);
+  while (writing_) {
+    SB_CHECK(SbConditionVariableWait(&condition_, &mutex_) !=
+             kSbConditionVariableFailed);
+  }
+  writing_ = true;
+  while (readers_ > 0) {
+    SB_CHECK(SbConditionVariableWait(&condition_, &mutex_) !=
+             kSbConditionVariableFailed);
+  }
+  SB_CHECK(SbMutexRelease(&mutex_));
 }
 
 void RWLock::ReleaseWriteLock() {
-  writer_.Put();
-}
-
-ScopedReadLock::ScopedReadLock(RWLock* rw_lock) : rw_lock_(rw_lock) {
-  rw_lock_->AcquireReadLock();
-}
-
-ScopedReadLock::~ScopedReadLock() {
-  rw_lock_->ReleaseReadLock();
-}
-
-ScopedWriteLock::ScopedWriteLock(RWLock* rw_lock) : rw_lock_(rw_lock) {
-  rw_lock_->AcquireWriteLock();
-}
-
-ScopedWriteLock::~ScopedWriteLock() {
-  rw_lock_->ReleaseWriteLock();
+  SB_CHECK(SbMutexAcquire(&mutex_) == kSbMutexAcquired);
+  writing_ = false;
+  SB_CHECK(SbConditionVariableBroadcast(&condition_));
+  SB_CHECK(SbMutexRelease(&mutex_));
 }
 
 }  // namespace starboard
diff --git a/src/starboard/common/rwlock.h b/src/starboard/common/rwlock.h
index 245a4d8..2ec8d05 100644
--- a/src/starboard/common/rwlock.h
+++ b/src/starboard/common/rwlock.h
@@ -20,8 +20,8 @@
 #ifndef STARBOARD_COMMON_RWLOCK_H_
 #define STARBOARD_COMMON_RWLOCK_H_
 
-#include "starboard/common/mutex.h"
-#include "starboard/common/semaphore.h"
+#include "starboard/condition_variable.h"
+#include "starboard/mutex.h"
 
 namespace starboard {
 
@@ -33,8 +33,7 @@
 // This RWLock is non-upgradeable, if the read lock is held then it must
 // be released before the write lock can be used.
 //
-// This implementation favors readers over writers. This implementation was
-// first described by Michel Raynal.
+// This implementation favors writers over readers.
 //
 // Example:
 //   std::map<...> my_map = ...;
@@ -43,15 +42,14 @@
 //
 //   bool Exists() {                     // This function is concurrent.
 //     rw_lock.AcquireReadLock();
-//     bool found = my_map.find(...);
+//     bool found = my_map.find(...) != my_map.end();
 //     rw_lock.ReleaseReadLock();
 //     return found;
 //   }
-//   bool Add(...) {                     // Write operations are exclusive.
+//   void Add(...) {                     // Write operations are exclusive.
 //     rw_lock.AcquireWriteLock();
-//     bool erased = my_map.erase(...);
+//     my_map.insert(...);
 //     rw_lock.ReleaseWriteLock();
-//     return erased;
 //   }
 class RWLock {
  public:
@@ -65,18 +63,20 @@
   void ReleaseWriteLock();
 
  private:
-  Mutex reader_;
-  // Semaphore is necessary because of shared ownership: a different
-  // thread can unlock a writer than the one that locks it.
-  Semaphore writer_;
-  int num_readers_;
+  SbMutex mutex_;
+  SbConditionVariable condition_;
+  int32_t readers_;
+  bool writing_;
+
   SB_DISALLOW_COPY_AND_ASSIGN(RWLock);
 };
 
 class ScopedReadLock {
  public:
-  explicit ScopedReadLock(RWLock* rw_lock);
-  ~ScopedReadLock();
+  explicit ScopedReadLock(RWLock* rw_lock) : rw_lock_(rw_lock) {
+    rw_lock_->AcquireReadLock();
+  }
+  ~ScopedReadLock() { rw_lock_->ReleaseReadLock(); }
 
  private:
   RWLock* rw_lock_;
@@ -85,8 +85,10 @@
 
 class ScopedWriteLock {
  public:
-  explicit ScopedWriteLock(RWLock* rw_lock);
-  ~ScopedWriteLock();
+  explicit ScopedWriteLock(RWLock* rw_lock) : rw_lock_(rw_lock) {
+    rw_lock_->AcquireWriteLock();
+  }
+  ~ScopedWriteLock() { rw_lock_->ReleaseWriteLock(); }
 
  private:
   RWLock* rw_lock_;
diff --git a/src/starboard/configuration.h b/src/starboard/configuration.h
index 4e16a26..e06b52e 100644
--- a/src/starboard/configuration.h
+++ b/src/starboard/configuration.h
@@ -567,24 +567,6 @@
 #error "SB_MEDIA_GPU_BUFFER_BUDGET is deprecated."
 #endif  // defined(SB_MEDIA_GPU_BUFFER_BUDGET)
 
-#if defined(SB_HAS_DRM_KEY_STATUSES)
-#if !SB_HAS(DRM_KEY_STATUSES)
-#error "SB_HAS_DRM_KEY_STATUSES is required for Starboard 6 or later."
-#endif  // !SB_HAS(DRM_KEY_STATUSES)
-#else   // defined(SB_HAS_DRM_KEY_STATUSES)
-#define SB_HAS_DRM_KEY_STATUSES 1
-#endif  // defined(SB_HAS_DRM_KEY_STATUSES)
-
-#if defined(SB_HAS_AUDIO_SPECIFIC_CONFIG_AS_POINTER)
-#if !SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER)
-#error \
-    "SB_HAS_AUDIO_SPECIFIC_CONFIG_AS_POINTER is required for Starboard 6 " \
-       "or later."
-#endif  // !SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER)
-#else   // defined(SB_HAS_AUDIO_SPECIFIC_CONFIG_AS_POINTER)
-#define SB_HAS_AUDIO_SPECIFIC_CONFIG_AS_POINTER 1
-#endif  // defined(SB_HAS_AUDIO_SPECIFIC_CONFIG_AS_POINTER)
-
 #if SB_API_VERSION >= 11
 #if defined(SB_HAS_MEDIA_IS_VIDEO_SUPPORTED_REFINEMENT)
 #if !SB_HAS(MEDIA_IS_VIDEO_SUPPORTED_REFINEMENT)
@@ -704,4 +686,28 @@
 #endif
 #endif
 
+// Deprecated feature macros
+// These feature macros are deprecated in Starboard version 6 and later, and are
+// no longer referenced by application code.  They will be removed in a future
+// version.  Any Starboard implementation that supports Starboard version 6 or
+// later should be modified to no longer depend on these macros, with the
+// assumption that their values are always 1.
+#if defined(SB_HAS_AUDIO_SPECIFIC_CONFIG_AS_POINTER)
+#if !SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER)
+#error \
+    "SB_HAS_AUDIO_SPECIFIC_CONFIG_AS_POINTER is required for Starboard 6 " \
+       "or later."
+#endif  // !SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER)
+#else   // defined(SB_HAS_AUDIO_SPECIFIC_CONFIG_AS_POINTER)
+#define SB_HAS_AUDIO_SPECIFIC_CONFIG_AS_POINTER 1
+#endif  // defined(SB_HAS_AUDIO_SPECIFIC_CONFIG_AS_POINTER)
+
+#if defined(SB_HAS_DRM_KEY_STATUSES)
+#if !SB_HAS(DRM_KEY_STATUSES)
+#error "SB_HAS_DRM_KEY_STATUSES is required for Starboard 6 or later."
+#endif  // !SB_HAS(DRM_KEY_STATUSES)
+#else   // defined(SB_HAS_DRM_KEY_STATUSES)
+#define SB_HAS_DRM_KEY_STATUSES 1
+#endif  // defined(SB_HAS_DRM_KEY_STATUSES)
+
 #endif  // STARBOARD_CONFIGURATION_H_
diff --git a/src/starboard/contrib/creator/shared/starboard_platform.gypi b/src/starboard/contrib/creator/shared/starboard_platform.gypi
index 4a5e4f8..e33ae3d 100644
--- a/src/starboard/contrib/creator/shared/starboard_platform.gypi
+++ b/src/starboard/contrib/creator/shared/starboard_platform.gypi
@@ -316,6 +316,7 @@
       '<(DEPTH)/starboard/shared/stub/system_get_used_gpu_memory.cc',
       '<(DEPTH)/starboard/shared/stub/system_hide_splash_screen.cc',
       '<(DEPTH)/starboard/shared/stub/system_raise_platform_error.cc',
+      '<(DEPTH)/starboard/shared/stub/system_sign_with_certification_secret_key.cc',
       '<(DEPTH)/starboard/shared/stub/ui_nav_get_interface.cc',
       '<(DEPTH)/starboard/shared/stub/window_get_diagonal_size_in_inches.cc',
     ],
diff --git a/src/starboard/drm.h b/src/starboard/drm.h
index 143cd94..35bdf7e 100644
--- a/src/starboard/drm.h
+++ b/src/starboard/drm.h
@@ -76,14 +76,12 @@
   int32_t encrypted_byte_count;
 } SbDrmSubSampleMapping;
 
-#if SB_HAS(DRM_KEY_STATUSES)
 typedef struct SbDrmKeyId {
   // The ID of the license (or key) required to decrypt this sample. For
   // PlayReady, this is the license GUID in packed little-endian binary form.
   uint8_t identifier[16];
   int identifier_size;
 } SbDrmKeyId;
-#endif  // SB_HAS(DRM_KEY_STATUSES)
 
 // All the optional information needed per sample for encrypted samples.
 typedef struct SbDrmSampleInfo {
@@ -187,7 +185,6 @@
 // A callback for notifications that the status of one or more keys in a session
 // has been changed.  All keys of the session and their new status will be
 // passed along.  Any keys not in the list is considered as deleted.
-#if SB_HAS(DRM_KEY_STATUSES)
 typedef void (*SbDrmSessionKeyStatusesChangedFunc)(
     SbDrmSystem drm_system,
     void* context,
@@ -196,7 +193,6 @@
     int number_of_keys,
     const SbDrmKeyId* key_ids,
     const SbDrmKeyStatus* key_statuses);
-#endif  // SB_HAS(DRM_KEY_STATUSES)
 
 // A callback for signalling that a session has been closed by the SbDrmSystem
 #if SB_HAS(DRM_SESSION_CLOSED)
@@ -284,11 +280,6 @@
 
 #elif SB_HAS(DRM_SESSION_CLOSED)
 
-#if !SB_HAS(DRM_KEY_STATUSES)
-#error "Platforms with SB_HAS_DRM_SESSION_CLOSED must also set "
-    "SB_HAS_DRM_KEY_STATUSES"
-#endif  // !SB_HAS(DRM_KEY_STATUSES)
-
 SB_EXPORT SbDrmSystem SbDrmCreateSystem(
     const char* key_system,
     void* context,
@@ -297,7 +288,7 @@
     SbDrmSessionKeyStatusesChangedFunc key_statuses_changed_callback,
     SbDrmSessionClosedFunc session_closed_callback);
 
-#elif SB_HAS(DRM_KEY_STATUSES)
+#else  // SB_HAS(DRM_SESSION_CLOSED)
 
 SB_EXPORT SbDrmSystem SbDrmCreateSystem(
     const char* key_system,
@@ -306,15 +297,7 @@
     SbDrmSessionUpdatedFunc session_updated_callback,
     SbDrmSessionKeyStatusesChangedFunc key_statuses_changed_callback);
 
-#else  // SB_HAS(DRM_KEY_STATUSES)
-
-SB_EXPORT SbDrmSystem
-SbDrmCreateSystem(const char* key_system,
-                  void* context,
-                  SbDrmSessionUpdateRequestFunc update_request_callback,
-                  SbDrmSessionUpdatedFunc session_updated_callback);
-
-#endif  // SB_HAS(DRM_KEY_STATUSES)
+#endif  // SB_HAS(DRM_SESSION_CLOSED)
 
 // Asynchronously generates a session update request payload for
 // |initialization_data|, of |initialization_data_size|, in case sensitive
diff --git a/src/starboard/elf_loader/elf_loader_impl.cc b/src/starboard/elf_loader/elf_loader_impl.cc
index f81db05..733da88 100644
--- a/src/starboard/elf_loader/elf_loader_impl.cc
+++ b/src/starboard/elf_loader/elf_loader_impl.cc
@@ -22,7 +22,12 @@
 namespace starboard {
 namespace elf_loader {
 
-ElfLoaderImpl::ElfLoaderImpl() {}
+ElfLoaderImpl::ElfLoaderImpl() {
+#if SB_API_VERSION < 12 || !SB_HAS(MMAP) || !SB_CAN(MAP_EXECUTABLE_MEMORY)
+  SB_CHECK(false) << "The elf_loader requires SB_API_VERSION >= 12 with "
+                     "executable memory map support!";
+#endif
+}
 
 bool ElfLoaderImpl::Load(const char* name) {
   SB_LOG(INFO) << "Loading: " << name;
@@ -103,11 +108,15 @@
 
   if (relocations_->HasTextRelocations()) {
     // Restores the memory protection to its original state.
+#if SB_API_VERSION >= 10 && SB_HAS(MMAP)
     if (program_table_->AdjustMemoryProtectionOfReadOnlySegments(
             kSbMemoryMapProtectReserved) < 0) {
       SB_LOG(ERROR) << "Unable to restore segment protection";
       return false;
     }
+#else
+    SB_CHECK(false);
+#endif
   }
 
   SB_LOG(INFO) << "Applied relocations";
diff --git a/src/starboard/elf_loader/exported_symbols.cc b/src/starboard/elf_loader/exported_symbols.cc
index a4c4539..ea440bf 100644
--- a/src/starboard/elf_loader/exported_symbols.cc
+++ b/src/starboard/elf_loader/exported_symbols.cc
@@ -14,19 +14,6 @@
 
 #include "starboard/elf_loader/exported_symbols.h"
 
-// TODO: Remove these once the API leaks are fixed.
-//#define LOCAL_TEST_WITH_API_LEAKS
-#ifdef LOCAL_TEST_WITH_API_LEAKS
-#include <dlfcn.h>
-#include <fcntl.h>
-#include <nl_types.h>
-#include <setjmp.h>
-#include <string.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <unistd.h>
-#endif
-
 #include "starboard/accessibility.h"
 #include "starboard/audio_sink.h"
 #include "starboard/byte_swap.h"
@@ -58,27 +45,21 @@
 #include "starboard/time_zone.h"
 #include "starboard/ui_navigation.h"
 
-// TODO: cleanup these hack as we fix the API leaks
-
-void tmp_dl_iterate_phdr() {
-  SB_LOG(INFO) << "tmp_dl_iterate_phdr";
-}
-
-void tmp__cxa_thread_atexit_impl() {
-  SB_LOG(INFO) << "tmp__cxa_thread_atexit_impl";
-}
-
 namespace starboard {
 namespace elf_loader {
 
 ExportedSymbols::ExportedSymbols() {
-    map_["SbAccessibilityGetDisplaySettings"] =
+  map_["SbAccessibilityGetDisplaySettings"] =
       reinterpret_cast<const void*>(SbAccessibilityGetDisplaySettings);
   map_["SbAccessibilityGetTextToSpeechSettings"] =
       reinterpret_cast<const void*>(SbAccessibilityGetTextToSpeechSettings);
   map_["SbAudioSinkCreate"] = reinterpret_cast<const void*>(SbAudioSinkCreate);
   map_["SbAudioSinkDestroy"] =
       reinterpret_cast<const void*>(SbAudioSinkDestroy);
+#if SB_API_VERSION >= 11
+  map_["SbAudioSinkGetMinBufferSizeInFrames"] =
+      reinterpret_cast<const void*>(SbAudioSinkGetMinBufferSizeInFrames);
+#endif
   map_["SbAudioSinkGetNearestSupportedSampleFrequency"] =
       reinterpret_cast<const void*>(
           SbAudioSinkGetNearestSupportedSampleFrequency);
@@ -114,7 +95,11 @@
       reinterpret_cast<const void*>(SbConditionVariableWait);
   map_["SbConditionVariableWaitTimed"] =
       reinterpret_cast<const void*>(SbConditionVariableWaitTimed);
+
+#if SB_API_VERSION >= 11
   map_["SbCPUFeaturesGet"] = reinterpret_cast<const void*>(SbCPUFeaturesGet);
+#endif
+
   map_["SbDecodeTargetGetInfo"] =
       reinterpret_cast<const void*>(SbDecodeTargetGetInfo);
   map_["SbDecodeTargetRelease"] =
@@ -137,10 +122,14 @@
       reinterpret_cast<const void*>(SbDrmDestroySystem);
   map_["SbDrmGenerateSessionUpdateRequest"] =
       reinterpret_cast<const void*>(SbDrmGenerateSessionUpdateRequest);
+
+#if SB_API_VERSION >= 10
   map_["SbDrmIsServerCertificateUpdatable"] =
       reinterpret_cast<const void*>(SbDrmIsServerCertificateUpdatable);
   map_["SbDrmUpdateServerCertificate"] =
       reinterpret_cast<const void*>(SbDrmUpdateServerCertificate);
+#endif
+
   map_["SbDrmUpdateSession"] =
       reinterpret_cast<const void*>(SbDrmUpdateSession);
   map_["SbEventCancel"] = reinterpret_cast<const void*>(SbEventCancel);
@@ -173,6 +162,8 @@
   map_["SbLogRawFormat"] = reinterpret_cast<const void*>(SbLogRawFormat);
   map_["SbMediaCanPlayMimeAndKeySystem"] =
       reinterpret_cast<const void*>(SbMediaCanPlayMimeAndKeySystem);
+
+#if SB_API_VERSION >= 10
   map_["SbMediaGetAudioBufferBudget"] =
       reinterpret_cast<const void*>(SbMediaGetAudioBufferBudget);
   map_["SbMediaGetBufferAlignment"] =
@@ -196,8 +187,13 @@
       reinterpret_cast<const void*>(SbMediaIsBufferPoolAllocateOnDemand);
   map_["SbMediaIsBufferUsingMemoryPool"] =
       reinterpret_cast<const void*>(SbMediaIsBufferUsingMemoryPool);
+#endif
+
+#if SB_API_VERSION >= 11
   map_["SbMediaSetAudioWriteDuration"] =
       reinterpret_cast<const void*>(SbMediaSetAudioWriteDuration);
+#endif
+
   map_["SbMemoryAllocateAlignedUnchecked"] =
       reinterpret_cast<const void*>(SbMemoryAllocateAlignedUnchecked);
   map_["SbMemoryAllocateUnchecked"] =
@@ -208,13 +204,23 @@
   map_["SbMemoryFree"] = reinterpret_cast<const void*>(SbMemoryFree);
   map_["SbMemoryFreeAligned"] =
       reinterpret_cast<const void*>(SbMemoryFreeAligned);
+
+#if SB_HAS(MMAP)
   map_["SbMemoryMap"] = reinterpret_cast<const void*>(SbMemoryMap);
+#endif
   map_["SbMemoryMove"] = reinterpret_cast<const void*>(SbMemoryMove);
+
+#if SB_API_VERSION >= 10 && SB_HAS(MMAP)
   map_["SbMemoryProtect"] = reinterpret_cast<const void*>(SbMemoryProtect);
+#endif
+
   map_["SbMemoryReallocateUnchecked"] =
       reinterpret_cast<const void*>(SbMemoryReallocateUnchecked);
   map_["SbMemorySet"] = reinterpret_cast<const void*>(SbMemorySet);
+
+#if SB_HAS(MMAP)
   map_["SbMemoryUnmap"] = reinterpret_cast<const void*>(SbMemoryUnmap);
+#endif
 
 #if SB_HAS(MICROPHONE)
   map_["SbMicrophoneClose"] = reinterpret_cast<const void*>(SbMicrophoneClose);
@@ -241,20 +247,33 @@
   map_["SbPlayerDestroy"] = reinterpret_cast<const void*>(SbPlayerDestroy);
   map_["SbPlayerGetCurrentFrame"] =
       reinterpret_cast<const void*>(SbPlayerGetCurrentFrame);
+
+#if SB_API_VERSION >= 10
   map_["SbPlayerGetInfo2"] = reinterpret_cast<const void*>(SbPlayerGetInfo2);
   map_["SbPlayerGetMaximumNumberOfSamplesPerWrite"] =
       reinterpret_cast<const void*>(SbPlayerGetMaximumNumberOfSamplesPerWrite);
+
+#endif
+
   map_["SbPlayerOutputModeSupported"] =
       reinterpret_cast<const void*>(SbPlayerOutputModeSupported);
+
+#if SB_API_VERSION >= 10
   map_["SbPlayerSeek2"] = reinterpret_cast<const void*>(SbPlayerSeek2);
+#endif
+
   map_["SbPlayerSetBounds"] = reinterpret_cast<const void*>(SbPlayerSetBounds);
   map_["SbPlayerSetPlaybackRate"] =
       reinterpret_cast<const void*>(SbPlayerSetPlaybackRate);
   map_["SbPlayerSetVolume"] = reinterpret_cast<const void*>(SbPlayerSetVolume);
   map_["SbPlayerWriteEndOfStream"] =
       reinterpret_cast<const void*>(SbPlayerWriteEndOfStream);
+
+#if SB_API_VERSION >= 10
   map_["SbPlayerWriteSample2"] =
       reinterpret_cast<const void*>(SbPlayerWriteSample2);
+#endif
+
   map_["SbSocketAccept"] = reinterpret_cast<const void*>(SbSocketAccept);
   map_["SbSocketBind"] = reinterpret_cast<const void*>(SbSocketBind);
   map_["SbSocketClearLastError"] = reinterpret_cast<const void*>(SbSocketClearLastError);
@@ -317,6 +336,9 @@
       reinterpret_cast<const void*>(SbSpeechRecognizerStart);
   map_["SbSpeechRecognizerStop"] =
       reinterpret_cast<const void*>(SbSpeechRecognizerStop);
+#endif
+
+#if SB_HAS(SPEECH_SYNTHESIS)
   map_["SbSpeechSynthesisCancel"] =
       reinterpret_cast<const void*>(SbSpeechSynthesisCancel);
   map_["SbSpeechSynthesisSpeak"] =
@@ -376,8 +398,12 @@
       reinterpret_cast<const void*>(SbSystemGetDeviceType);
   map_["SbSystemGetErrorString"] =
       reinterpret_cast<const void*>(SbSystemGetErrorString);
+
+#if SB_API_VERSION >= 11
   map_["SbSystemGetExtension"] =
       reinterpret_cast<const void*>(SbSystemGetExtension);
+#endif
+
   map_["SbSystemGetLastError"] =
       reinterpret_cast<const void*>(SbSystemGetLastError);
   map_["SbSystemGetLocaleId"] =
@@ -416,12 +442,26 @@
       reinterpret_cast<const void*>(SbSystemRequestSuspend);
   map_["SbSystemRequestUnpause"] =
       reinterpret_cast<const void*>(SbSystemRequestUnpause);
+
+#if SB_API_VERSION >= 11
+  map_["SbSystemSignWithCertificationSecretKey"] =
+      reinterpret_cast<const void*>(SbSystemSignWithCertificationSecretKey);
+#endif
+
   map_["SbSystemSort"] = reinterpret_cast<const void*>(SbSystemSort);
+
+#if SB_API_VERSION >= 10
   map_["SbSystemSupportsResume"] =
       reinterpret_cast<const void*>(SbSystemSupportsResume);
+#endif
+
   map_["SbSystemSymbolize"] = reinterpret_cast<const void*>(SbSystemSymbolize);
+
+#if SB_API_VERSION >= 11
   map_["SbThreadContextGetPointer"] =
       reinterpret_cast<const void*>(SbThreadContextGetPointer);
+#endif
+
   map_["SbThreadCreate"] = reinterpret_cast<const void*>(SbThreadCreate);
   map_["SbThreadCreateLocalKey"] =
       reinterpret_cast<const void*>(SbThreadCreateLocalKey);
@@ -435,14 +475,19 @@
       reinterpret_cast<const void*>(SbThreadGetLocalValue);
   map_["SbThreadIsEqual"] = reinterpret_cast<const void*>(SbThreadIsEqual);
   map_["SbThreadJoin"] = reinterpret_cast<const void*>(SbThreadJoin);
+
+#if SB_API_VERSION >= 11
   map_["SbThreadSamplerCreate"] =
       reinterpret_cast<const void*>(SbThreadSamplerCreate);
+
   map_["SbThreadSamplerDestroy"] =
       reinterpret_cast<const void*>(SbThreadSamplerDestroy);
   map_["SbThreadSamplerFreeze"] =
       reinterpret_cast<const void*>(SbThreadSamplerFreeze);
   map_["SbThreadSamplerThaw"] =
       reinterpret_cast<const void*>(SbThreadSamplerThaw);
+#endif
+
   map_["SbThreadSetLocalValue"] =
       reinterpret_cast<const void*>(SbThreadSetLocalValue);
   map_["SbThreadSetName"] = reinterpret_cast<const void*>(SbThreadSetName);
@@ -450,62 +495,44 @@
   map_["SbThreadYield"] = reinterpret_cast<const void*>(SbThreadYield);
   map_["SbTimeGetMonotonicNow"] =
       reinterpret_cast<const void*>(SbTimeGetMonotonicNow);
+
+#if SB_HAS(TIME_THREAD_NOW)
   map_["SbTimeGetMonotonicThreadNow"] =
       reinterpret_cast<const void*>(SbTimeGetMonotonicThreadNow);
+#endif
+
   map_["SbTimeGetNow"] = reinterpret_cast<const void*>(SbTimeGetNow);
   map_["SbTimeZoneGetCurrent"] =
       reinterpret_cast<const void*>(SbTimeZoneGetCurrent);
   map_["SbTimeZoneGetName"] = reinterpret_cast<const void*>(SbTimeZoneGetName);
+
 #if SB_API_VERSION >= SB_UI_NAVIGATION_VERSION
   map_["SbUiNavGetInterface"] =
       reinterpret_cast<const void*>(SbUiNavGetInterface);
 #endif
+
   map_["SbUserGetCurrent"] = reinterpret_cast<const void*>(SbUserGetCurrent);
   map_["SbUserGetProperty"] = reinterpret_cast<const void*>(SbUserGetProperty);
   map_["SbUserGetPropertySize"] =
       reinterpret_cast<const void*>(SbUserGetPropertySize);
   map_["SbWindowCreate"] = reinterpret_cast<const void*>(SbWindowCreate);
   map_["SbWindowDestroy"] = reinterpret_cast<const void*>(SbWindowDestroy);
+
+#if SB_API_VERSION >= 11
   map_["SbWindowGetDiagonalSizeInInches"] =
       reinterpret_cast<const void*>(SbWindowGetDiagonalSizeInInches);
+#endif
+
   map_["SbWindowGetPlatformHandle"] =
       reinterpret_cast<const void*>(SbWindowGetPlatformHandle);
   map_["SbWindowGetSize"] = reinterpret_cast<const void*>(SbWindowGetSize);
   map_["SbWindowSetDefaultOptions"] =
       reinterpret_cast<const void*>(SbWindowSetDefaultOptions);
-#ifdef LOCAL_TEST_WITH_API_LEAKS
-  map_["atexit"] = reinterpret_cast<const void*>(atexit);
-  map_["btowc"] = reinterpret_cast<const void*>(btowc);
-  map_["__ctype_get_mb_cur_max"] =
-  map_["__cxa_thread_atexit_impl"] =
-      reinterpret_cast<const void*>(tmp__cxa_thread_atexit_impl);
-  map_["dladdr"] = reinterpret_cast<const void*>(dladdr);
-  map_["dl_iterate_phdr"] = reinterpret_cast<const void*>(tmp_dl_iterate_phdr);
-  map_["longjmp"] = reinterpret_cast<const void*>(longjmp);
-  map_["mbrlen"] = reinterpret_cast<const void*>(mbrlen);
-  map_["mbrtowc"] = reinterpret_cast<const void*>(mbrtowc);
-  map_["mbsnrtowcs"] = reinterpret_cast<const void*>(mbsnrtowcs);
-  map_["mbsrtowcs"] = reinterpret_cast<const void*>(mbsrtowcs);
-  map_["mbtowc"] = reinterpret_cast<const void*>(mbtowc);
-
-  map_["setjmp"] = reinterpret_cast<const void*>(setjmp);
-  map_["wcrtomb"] = reinterpret_cast<const void*>(wcrtomb);
-  map_["wcsnrtombs"] = reinterpret_cast<const void*>(wcsnrtombs);
-  map_["wcstod"] = reinterpret_cast<const void*>(wcstod);
-  map_["wcstof"] = reinterpret_cast<const void*>(wcstof);
-  map_["wcstol"] = reinterpret_cast<const void*>(wcstol);
-  map_["wcstold"] = reinterpret_cast<const void*>(wcstold);
-  map_["wcstoll"] = reinterpret_cast<const void*>(wcstoll);
-  map_["wcstoul"] = reinterpret_cast<const void*>(wcstoul);
-  map_["wcstoull"] = reinterpret_cast<const void*>(wcstoull);
-  map_["wcsxfrm_l"] = reinterpret_cast<const void*>(wcsxfrm_l);
-  map_["wctob"] = reinterpret_cast<const void*>(wctob);
-#endif
 }
 
 const void* ExportedSymbols::Lookup(const char* name) {
   const void* ret = map_[name];
-  SB_CHECK(ret);
+  SB_CHECK(ret) << name;
   return ret;
 }
 }  // namespace elf_loader
diff --git a/src/starboard/elf_loader/program_table.cc b/src/starboard/elf_loader/program_table.cc
index 7542604..7b48e3c 100644
--- a/src/starboard/elf_loader/program_table.cc
+++ b/src/starboard/elf_loader/program_table.cc
@@ -18,10 +18,13 @@
 #include "starboard/memory.h"
 
 #define MAYBE_MAP_FLAG(x, from, to) (((x) & (from)) ? (to) : 0)
+
+#if SB_CAN(MAP_EXECUTABLE_MEMORY)
 #define PFLAGS_TO_PROT(x)                               \
   (MAYBE_MAP_FLAG((x), PF_X, kSbMemoryMapProtectExec) | \
    MAYBE_MAP_FLAG((x), PF_R, kSbMemoryMapProtectRead) | \
    MAYBE_MAP_FLAG((x), PF_W, kSbMemoryMapProtectWrite))
+#endif
 
 #define MAP_FAILED ((void*)-1)
 
@@ -69,6 +72,7 @@
 
   SB_LOG(INFO) << "page_max - page_min=" << page_max - page_min;
 
+#if SB_HAS(MMAP)
   phdr_mmap_ =
       SbMemoryMap(phdr_size_, kSbMemoryMapProtectWrite, "program_header");
   if (!phdr_mmap_) {
@@ -77,14 +81,16 @@
   }
 
   SB_LOG(INFO) << "Allocated address=" << phdr_mmap_;
-
+#else
+  SB_CHECK(false);
+#endif
   if (!elf_file->ReadFromOffset(page_min, reinterpret_cast<char*>(phdr_mmap_),
                                 phdr_size_)) {
     SB_LOG(ERROR) << "Failed to read program header from file offset: "
                   << page_min;
     return false;
   }
-
+#if SB_API_VERSION >= 10 && SB_HAS(MMAP)
   bool mp_result =
       SbMemoryProtect(phdr_mmap_, phdr_size_, kSbMemoryMapProtectRead);
   SB_LOG(INFO) << "mp_result=" << mp_result;
@@ -92,6 +98,10 @@
     SB_LOG(ERROR) << "Failed to protect program header";
     return false;
   }
+#else
+  SB_CHECK(false);
+#endif
+
   phdr_table_ = reinterpret_cast<Phdr*>(reinterpret_cast<char*>(phdr_mmap_) +
                                         page_offset);
 
@@ -130,6 +140,7 @@
                  << " file_length=" << file_length << " seg_page_start=0x"
                  << std::hex << seg_page_start;
 
+#if SB_API_VERSION >= 10 && SB_HAS(MMAP) && SB_CAN(MAP_EXECUTABLE_MEMORY)
     if (file_length != 0) {
       const int prot_flags = PFLAGS_TO_PROT(phdr->p_flags);
       SB_LOG(INFO) << "segment prot_flags=" << std::hex << prot_flags;
@@ -150,7 +161,6 @@
                      << file_page_start;
         return false;
       }
-
       mp_ret = SbMemoryProtect(seg_addr, file_length, prot_flags);
       SB_LOG(INFO) << "mp_ret=" << mp_ret;
       if (!mp_ret) {
@@ -162,6 +172,9 @@
         return false;
       }
     }
+#else
+    SB_CHECK(false);
+#endif
 
     // if the segment is writable, and does not end on a page boundary,
     // zero-fill it until the page limit.
@@ -177,6 +190,7 @@
     // between them. This is done by using a private anonymous
     // map for all extra pages.
     if (seg_page_end > seg_file_end) {
+#if SB_API_VERSION >= 10 && SB_HAS(MMAP) && SB_CAN(MAP_EXECUTABLE_MEMORY)
       bool mprotect_fix = SbMemoryProtect(reinterpret_cast<void*>(seg_file_end),
                                           seg_page_end - seg_file_end,
                                           kSbMemoryMapProtectWrite);
@@ -185,8 +199,13 @@
         SB_LOG(ERROR) << "Failed to unprotect end of segment";
         return false;
       }
+#else
+      SB_CHECK(false);
+#endif
+
       SbMemorySet(reinterpret_cast<void*>(seg_file_end), 0,
                   seg_page_end - seg_file_end);
+#if SB_API_VERSION >= 10 && SB_HAS(MMAP) && SB_CAN(MAP_EXECUTABLE_MEMORY)
       SbMemoryProtect(reinterpret_cast<void*>(seg_file_end),
                       seg_page_end - seg_file_end,
                       PFLAGS_TO_PROT(phdr->p_flags));
@@ -195,6 +214,9 @@
         SB_LOG(ERROR) << "Failed to protect end of segment";
         return false;
       }
+#else
+      SB_CHECK(false);
+#endif
     }
   }
   return true;
@@ -277,13 +299,16 @@
     Addr seg_page_start = PAGE_START(phdr->p_vaddr) + base_memory_address_;
     Addr seg_page_end =
         PAGE_END(phdr->p_vaddr + phdr->p_memsz) + base_memory_address_;
-
+#if SB_API_VERSION >= 10 && SB_HAS(MMAP) && SB_CAN(MAP_EXECUTABLE_MEMORY)
     int ret = SbMemoryProtect(reinterpret_cast<void*>(seg_page_start),
                               seg_page_end - seg_page_start,
                               PFLAGS_TO_PROT(phdr->p_flags) | extra_prot_flags);
     if (ret < 0) {
       return -1;
     }
+#else
+    SB_CHECK(false);
+#endif
   }
   return 0;
 }
@@ -297,6 +322,7 @@
 
   SB_LOG(INFO) << "Load size=" << load_size_;
 
+#if SB_API_VERSION >= 10 && SB_HAS(MMAP)
   load_start_ =
       SbMemoryMap(load_size_, kSbMemoryMapProtectReserved, "reserved_mem");
   if (load_start_ == MAP_FAILED) {
@@ -304,7 +330,9 @@
                   << " bytes of address space";
     return false;
   }
-
+#else
+  SB_CHECK(false);
+#endif
   base_memory_address_ = reinterpret_cast<Addr>(load_start_);
 
   SB_LOG(INFO) << "Load start=" << std::hex << load_start_
@@ -317,12 +345,16 @@
 }
 
 ProgramTable::~ProgramTable() {
+#if SB_HAS(MMAP)
   if (load_start_) {
     SbMemoryUnmap(load_start_, load_size_);
   }
   if (phdr_mmap_) {
     SbMemoryUnmap(phdr_mmap_, phdr_size_);
   }
+#else
+  SB_CHECK(false);
+#endif
 }
 
 }  // namespace elf_loader
diff --git a/src/starboard/elf_loader/relocations.cc b/src/starboard/elf_loader/relocations.cc
index 4b7131c..dae9157 100644
--- a/src/starboard/elf_loader/relocations.cc
+++ b/src/starboard/elf_loader/relocations.cc
@@ -242,7 +242,6 @@
 #if defined(USE_RELA)
 bool Relocations::ApplyResolvedReloc(const Rela* rela, Addr sym_addr) {
   const Word rela_type = ELF_R_TYPE(rela->r_info);
-  const Word rela_symbol = ELF_R_SYM(rela->r_info);
   const Sword addend = rela->r_addend;
   const Addr reloc = static_cast<Addr>(rela->r_offset + base_memory_address_);
 
@@ -274,10 +273,6 @@
       SB_LOG(INFO) << "  R_AARCH64_RELATIVE target=" << std::hex << target
                    << " " << *target
                    << " bias=" << base_memory_address_ + addend;
-      if (!rela_symbol) {
-        SB_LOG(ERROR) << "Invalid relative relocation with symbol";
-        return false;
-      }
       *target = base_memory_address_ + addend;
       break;
 
@@ -302,11 +297,6 @@
       break;
 
     case R_X86_64_RELATIVE:
-      if (rela_symbol) {
-        SB_LOG(ERROR) << "Invalid R_X86_64_RELATIVE";
-        return false;
-      }
-
       SB_LOG(INFO) << "  R_X86_64_RELATIVE target=" << std::hex << target << " "
                    << *target << " bias=" << base_memory_address_ + addend;
       *target = base_memory_address_ + addend;
@@ -331,8 +321,6 @@
 #else
 bool Relocations::ApplyResolvedReloc(const Rel* rel, Addr sym_addr) {
   const Word rel_type = ELF_R_TYPE(rel->r_info);
-  const Word rel_symbol = ELF_R_SYM(rel->r_info);
-
   const Addr reloc = static_cast<Addr>(rel->r_offset + base_memory_address_);
 
   SB_LOG(INFO) << "  rel reloc=0x" << std::hex << reloc << " offset=0x"
@@ -369,10 +357,6 @@
     case R_ARM_RELATIVE:
       SB_LOG(INFO) << "  RR_ARM_RELATIVE target=" << std::hex << target << " "
                    << *target << " bias=" << base_memory_address_;
-      if (!rel_symbol) {
-        SB_LOG(ERROR) << "Invalid relative relocation with symbol";
-        return false;
-      }
       *target += base_memory_address_;
       break;
 
@@ -401,10 +385,6 @@
       break;
 
     case R_386_RELATIVE:
-      if (rel_symbol) {
-        SB_LOG(ERROR) << "Invalid relative relocation with symbol";
-        return false;
-      }
       SB_LOG(INFO) << "  R_386_RELATIVE target=" << std::hex << target << " "
                    << *target << " bias=" << base_memory_address_;
 
diff --git a/src/starboard/linux/shared/drm_create_system.cc b/src/starboard/linux/shared/drm_create_system.cc
index 93ac58b..cde9aa9 100644
--- a/src/starboard/linux/shared/drm_create_system.cc
+++ b/src/starboard/linux/shared/drm_create_system.cc
@@ -22,11 +22,8 @@
     const char* key_system,
     void* context,
     SbDrmSessionUpdateRequestFunc update_request_callback,
-    SbDrmSessionUpdatedFunc session_updated_callback
-#if SB_HAS(DRM_KEY_STATUSES)
-    ,
+    SbDrmSessionUpdatedFunc session_updated_callback,
     SbDrmSessionKeyStatusesChangedFunc key_statuses_changed_callback
-#endif  // SB_HAS(DRM_KEY_STATUSES)
 #if SB_API_VERSION >= 10
     ,
     SbDrmServerCertificateUpdatedFunc server_certificate_updated_callback,
@@ -37,11 +34,9 @@
   if (!update_request_callback || !session_updated_callback) {
     return kSbDrmSystemInvalid;
   }
-#if SB_HAS(DRM_KEY_STATUSES)
   if (!key_statuses_changed_callback) {
     return kSbDrmSystemInvalid;
   }
-#endif  // SB_HAS(DRM_KEY_STATUSES)
 #if SB_API_VERSION >= 10
   if (!server_certificate_updated_callback || !session_closed_callback) {
     return kSbDrmSystemInvalid;
@@ -52,11 +47,8 @@
     return kSbDrmSystemInvalid;
   }
   return new DrmSystemWidevine(context, update_request_callback,
-                               session_updated_callback
-#if SB_HAS(DRM_KEY_STATUSES)
-                               ,
+                               session_updated_callback,
                                key_statuses_changed_callback
-#endif  // SB_HAS(DRM_KEY_STATUSES)
 #if SB_API_VERSION >= 10
                                ,
                                server_certificate_updated_callback
diff --git a/src/starboard/linux/shared/gyp_configuration.py b/src/starboard/linux/shared/gyp_configuration.py
index 56673d5..c77e593 100644
--- a/src/starboard/linux/shared/gyp_configuration.py
+++ b/src/starboard/linux/shared/gyp_configuration.py
@@ -71,6 +71,18 @@
     })
     return env_variables
 
+  def GetTestEnvVariables(self):
+    # Due to fragile nature of dynamic TLS tracking, in particular LSAN reliance
+    # on GLIBC private APIs, tracking TLS leaks is unstable and can trigger
+    # sporadic false positives and/or crashes, depending on the used compiler,
+    # direct library dependencies and runtime-loaded dynamic libraries. Hence,
+    # TLS leak tracing in LSAN is turned off.
+    # For reference, https://sourceware.org/ml/libc-alpha/2018-02/msg00567.html
+    # When failing, 'LeakSanitizer has encountered a fatal error' message would
+    # be printed at test shutdown, and env var LSAN_OPTIONS=verbosity=2 would
+    # further point to 'Scanning DTLS range ..' prior to crash.
+    return {'ASAN_OPTIONS': 'intercept_tls_get_addr=0'}
+
   def GetTestFilters(self):
     filters = super(LinuxConfiguration, self).GetTestFilters()
     for target, tests in self.__FILTERED_TESTS.iteritems():
diff --git a/src/starboard/linux/shared/media_is_audio_supported.cc b/src/starboard/linux/shared/media_is_audio_supported.cc
index f20d64a..d0d9c7a 100644
--- a/src/starboard/linux/shared/media_is_audio_supported.cc
+++ b/src/starboard/linux/shared/media_is_audio_supported.cc
@@ -23,7 +23,6 @@
     return bitrate <= SB_MEDIA_MAX_AUDIO_BITRATE_IN_BITS_PER_SECOND;
   }
 
-#if SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER)
   if (audio_codec == kSbMediaAudioCodecOpus) {
     return bitrate <= SB_MEDIA_MAX_AUDIO_BITRATE_IN_BITS_PER_SECOND;
   }
@@ -34,7 +33,6 @@
     return bitrate <= SB_MEDIA_MAX_AUDIO_BITRATE_IN_BITS_PER_SECOND;
   }
 #endif  // SB_HAS(AC3_AUDIO)
-#endif  // SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER)
 
   return false;
 }
diff --git a/src/starboard/linux/shared/starboard_platform.gypi b/src/starboard/linux/shared/starboard_platform.gypi
index b4f4566..1297986 100644
--- a/src/starboard/linux/shared/starboard_platform.gypi
+++ b/src/starboard/linux/shared/starboard_platform.gypi
@@ -227,6 +227,7 @@
       '<(DEPTH)/starboard/shared/starboard/audio_sink/audio_sink_create.cc',
       '<(DEPTH)/starboard/shared/starboard/audio_sink/audio_sink_destroy.cc',
       '<(DEPTH)/starboard/shared/starboard/audio_sink/audio_sink_get_max_channels_5_1.cc',
+      '<(DEPTH)/starboard/shared/starboard/audio_sink/audio_sink_get_min_buffer_size_in_frames.cc',
       '<(DEPTH)/starboard/shared/starboard/audio_sink/audio_sink_get_nearest_supported_sample_frequency.cc',
       '<(DEPTH)/starboard/shared/starboard/audio_sink/audio_sink_internal.cc',
       '<(DEPTH)/starboard/shared/starboard/audio_sink/audio_sink_internal.h',
@@ -317,7 +318,7 @@
       '<(DEPTH)/starboard/shared/starboard/window_set_default_options.cc',
       '<(DEPTH)/starboard/shared/stub/accessibility_get_display_settings.cc',
       '<(DEPTH)/starboard/shared/stub/accessibility_get_text_to_speech_settings.cc',
-      '<(DEPTH)/starboard/shared/stub/cpu_features_get.cc',
+      '<(DEPTH)/starboard/shared/linux/cpu_features_get.cc',
       '<(DEPTH)/starboard/shared/stub/cryptography_create_transformer.cc',
       '<(DEPTH)/starboard/shared/stub/cryptography_destroy_transformer.cc',
       '<(DEPTH)/starboard/shared/stub/cryptography_get_tag.cc',
@@ -339,6 +340,7 @@
       '<(DEPTH)/starboard/shared/stub/system_get_used_gpu_memory.cc',
       '<(DEPTH)/starboard/shared/stub/system_hide_splash_screen.cc',
       '<(DEPTH)/starboard/shared/stub/system_raise_platform_error.cc',
+      '<(DEPTH)/starboard/shared/stub/system_sign_with_certification_secret_key.cc',
       '<(DEPTH)/starboard/shared/stub/ui_nav_get_interface.cc',
       '<(DEPTH)/starboard/shared/stub/window_get_diagonal_size_in_inches.cc',
     ],
diff --git a/src/starboard/linux/x64x11/blittergles/sbversion/10/atomic_public.h b/src/starboard/linux/x64x11/blittergles/sbversion/10/atomic_public.h
new file mode 100644
index 0000000..071ab1b
--- /dev/null
+++ b/src/starboard/linux/x64x11/blittergles/sbversion/10/atomic_public.h
@@ -0,0 +1,23 @@
+// Copyright 2019 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// This file was initially generated by starboard/tools/create_derived_build.py,
+// though it may have been modified since its creation.
+
+#ifndef STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_10_ATOMIC_PUBLIC_H_
+#define STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_10_ATOMIC_PUBLIC_H_
+
+#include "starboard/linux/x64x11/blittergles/atomic_public.h"
+
+#endif  // STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_10_ATOMIC_PUBLIC_H_
diff --git a/src/starboard/linux/x64x11/blittergles/sbversion/10/configuration_public.h b/src/starboard/linux/x64x11/blittergles/sbversion/10/configuration_public.h
new file mode 100644
index 0000000..53a5d3f
--- /dev/null
+++ b/src/starboard/linux/x64x11/blittergles/sbversion/10/configuration_public.h
@@ -0,0 +1,23 @@
+// Copyright 2019 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// This file was initially generated by starboard/tools/create_derived_build.py,
+// though it may have been modified since its creation.
+
+#ifndef STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_10_CONFIGURATION_PUBLIC_H_
+#define STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_10_CONFIGURATION_PUBLIC_H_
+
+#include "starboard/linux/x64x11/blittergles/configuration_public.h"
+
+#endif  // STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_10_CONFIGURATION_PUBLIC_H_
diff --git a/src/starboard/linux/x64x11/blittergles/sbversion/10/gyp_configuration.gypi b/src/starboard/linux/x64x11/blittergles/sbversion/10/gyp_configuration.gypi
new file mode 100644
index 0000000..d9855d7
--- /dev/null
+++ b/src/starboard/linux/x64x11/blittergles/sbversion/10/gyp_configuration.gypi
@@ -0,0 +1,40 @@
+# Copyright 2019 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# This file was initially generated by starboard/tools/create_derived_build.py,
+# though it may have been modified since its creation.
+
+{
+  'target_defaults': {
+    'default_configuration': 'linux-x64x11-blittergles-sbversion-10_debug',
+    'configurations': {
+      'linux-x64x11-blittergles-sbversion-10_debug': {
+        'inherit_from': ['debug_base'],
+      },
+      'linux-x64x11-blittergles-sbversion-10_devel': {
+        'inherit_from': ['devel_base'],
+      },
+      'linux-x64x11-blittergles-sbversion-10_qa': {
+        'inherit_from': ['qa_base'],
+      },
+      'linux-x64x11-blittergles-sbversion-10_gold': {
+        'inherit_from': ['gold_base'],
+      },
+    }, # end of configurations
+  },
+
+  'includes': [
+    '<(DEPTH)/starboard/linux/x64x11/blittergles/gyp_configuration.gypi',
+  ],
+}
diff --git a/src/starboard/linux/x64x11/blittergles/sbversion/10/gyp_configuration.py b/src/starboard/linux/x64x11/blittergles/sbversion/10/gyp_configuration.py
new file mode 100644
index 0000000..046bf56
--- /dev/null
+++ b/src/starboard/linux/x64x11/blittergles/sbversion/10/gyp_configuration.py
@@ -0,0 +1,25 @@
+# Copyright 2019 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# This file was initially generated by starboard/tools/create_derived_build.py,
+# though it may have been modified since its creation.
+"""Starboard Linux X64X11 Blittergles Sbversion 10 platform configuration."""
+
+
+from starboard.linux.x64x11 import gyp_configuration as parent_configuration
+
+
+def CreatePlatformConfig():
+  return parent_configuration.LinuxX64X11Configuration(
+      'linux-x64x11-blittergles-sbversion-10')
diff --git a/src/starboard/linux/x64x11/blittergles/sbversion/10/starboard_platform.gyp b/src/starboard/linux/x64x11/blittergles/sbversion/10/starboard_platform.gyp
new file mode 100644
index 0000000..8163408
--- /dev/null
+++ b/src/starboard/linux/x64x11/blittergles/sbversion/10/starboard_platform.gyp
@@ -0,0 +1,24 @@
+# Copyright 2019 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# This file was initially generated by starboard/tools/create_derived_build.py,
+# though it may have been modified since its creation.
+
+{
+  'includes': [
+    # Note that we are 'includes'ing a 'gyp' file, not a 'gypi' file.  The idea
+    # is that we just want this file to *be* the parent gyp file.
+    '<(DEPTH)/starboard/linux/x64x11/blittergles/starboard_platform.gyp',
+  ],
+}
diff --git a/src/starboard/linux/x64x11/blittergles/sbversion/10/starboard_platform_tests.gyp b/src/starboard/linux/x64x11/blittergles/sbversion/10/starboard_platform_tests.gyp
new file mode 100644
index 0000000..94e7cc2
--- /dev/null
+++ b/src/starboard/linux/x64x11/blittergles/sbversion/10/starboard_platform_tests.gyp
@@ -0,0 +1,24 @@
+# Copyright 2019 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# This file was initially generated by starboard/tools/create_derived_build.py,
+# though it may have been modified since its creation.
+
+{
+  'includes': [
+    # Note that we are 'includes'ing a 'gyp' file, not a 'gypi' file.  The idea
+    # is that we just want this file to *be* the parent gyp file.
+    '<(DEPTH)/starboard/linux/x64x11/blittergles/starboard_platform_tests.gyp',
+  ],
+}
diff --git a/src/starboard/linux/x64x11/blittergles/sbversion/10/thread_types_public.h b/src/starboard/linux/x64x11/blittergles/sbversion/10/thread_types_public.h
new file mode 100644
index 0000000..cfe4a35
--- /dev/null
+++ b/src/starboard/linux/x64x11/blittergles/sbversion/10/thread_types_public.h
@@ -0,0 +1,23 @@
+// Copyright 2019 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// This file was initially generated by starboard/tools/create_derived_build.py,
+// though it may have been modified since its creation.
+
+#ifndef STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_10_THREAD_TYPES_PUBLIC_H_
+#define STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_10_THREAD_TYPES_PUBLIC_H_
+
+#include "starboard/linux/x64x11/blittergles/thread_types_public.h"
+
+#endif  // STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_10_THREAD_TYPES_PUBLIC_H_
diff --git a/src/starboard/linux/x64x11/blittergles/sbversion/11/atomic_public.h b/src/starboard/linux/x64x11/blittergles/sbversion/11/atomic_public.h
new file mode 100644
index 0000000..0fdbbea
--- /dev/null
+++ b/src/starboard/linux/x64x11/blittergles/sbversion/11/atomic_public.h
@@ -0,0 +1,23 @@
+// Copyright 2019 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// This file was initially generated by starboard/tools/create_derived_build.py,
+// though it may have been modified since its creation.
+
+#ifndef STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_11_ATOMIC_PUBLIC_H_
+#define STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_11_ATOMIC_PUBLIC_H_
+
+#include "starboard/linux/x64x11/blittergles/atomic_public.h"
+
+#endif  // STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_11_ATOMIC_PUBLIC_H_
diff --git a/src/starboard/linux/x64x11/blittergles/sbversion/11/configuration_public.h b/src/starboard/linux/x64x11/blittergles/sbversion/11/configuration_public.h
new file mode 100644
index 0000000..55cf0ba
--- /dev/null
+++ b/src/starboard/linux/x64x11/blittergles/sbversion/11/configuration_public.h
@@ -0,0 +1,23 @@
+// Copyright 2019 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// This file was initially generated by starboard/tools/create_derived_build.py,
+// though it may have been modified since its creation.
+
+#ifndef STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_11_CONFIGURATION_PUBLIC_H_
+#define STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_11_CONFIGURATION_PUBLIC_H_
+
+#include "starboard/linux/x64x11/blittergles/configuration_public.h"
+
+#endif  // STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_11_CONFIGURATION_PUBLIC_H_
diff --git a/src/starboard/linux/x64x11/blittergles/sbversion/11/gyp_configuration.gypi b/src/starboard/linux/x64x11/blittergles/sbversion/11/gyp_configuration.gypi
new file mode 100644
index 0000000..573d659
--- /dev/null
+++ b/src/starboard/linux/x64x11/blittergles/sbversion/11/gyp_configuration.gypi
@@ -0,0 +1,40 @@
+# Copyright 2019 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# This file was initially generated by starboard/tools/create_derived_build.py,
+# though it may have been modified since its creation.
+
+{
+  'target_defaults': {
+    'default_configuration': 'linux-x64x11-blittergles-sbversion-11_debug',
+    'configurations': {
+      'linux-x64x11-blittergles-sbversion-11_debug': {
+        'inherit_from': ['debug_base'],
+      },
+      'linux-x64x11-blittergles-sbversion-11_devel': {
+        'inherit_from': ['devel_base'],
+      },
+      'linux-x64x11-blittergles-sbversion-11_qa': {
+        'inherit_from': ['qa_base'],
+      },
+      'linux-x64x11-blittergles-sbversion-11_gold': {
+        'inherit_from': ['gold_base'],
+      },
+    }, # end of configurations
+  },
+
+  'includes': [
+    '<(DEPTH)/starboard/linux/x64x11/blittergles/gyp_configuration.gypi',
+  ],
+}
diff --git a/src/starboard/linux/x64x11/blittergles/sbversion/11/gyp_configuration.py b/src/starboard/linux/x64x11/blittergles/sbversion/11/gyp_configuration.py
new file mode 100644
index 0000000..ff1fc94
--- /dev/null
+++ b/src/starboard/linux/x64x11/blittergles/sbversion/11/gyp_configuration.py
@@ -0,0 +1,24 @@
+# Copyright 2019 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# This file was initially generated by starboard/tools/create_derived_build.py,
+# though it may have been modified since its creation.
+"""Starboard Linux X64X11 Blittergles Sbversion 11 platform configuration."""
+
+from starboard.linux.x64x11 import gyp_configuration as parent_configuration
+
+
+def CreatePlatformConfig():
+  return parent_configuration.LinuxX64X11Configuration(
+      'linux-x64x11-blittergles-sbversion-11')
diff --git a/src/starboard/linux/x64x11/blittergles/sbversion/11/starboard_platform.gyp b/src/starboard/linux/x64x11/blittergles/sbversion/11/starboard_platform.gyp
new file mode 100644
index 0000000..8163408
--- /dev/null
+++ b/src/starboard/linux/x64x11/blittergles/sbversion/11/starboard_platform.gyp
@@ -0,0 +1,24 @@
+# Copyright 2019 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# This file was initially generated by starboard/tools/create_derived_build.py,
+# though it may have been modified since its creation.
+
+{
+  'includes': [
+    # Note that we are 'includes'ing a 'gyp' file, not a 'gypi' file.  The idea
+    # is that we just want this file to *be* the parent gyp file.
+    '<(DEPTH)/starboard/linux/x64x11/blittergles/starboard_platform.gyp',
+  ],
+}
diff --git a/src/starboard/linux/x64x11/blittergles/sbversion/11/starboard_platform_tests.gyp b/src/starboard/linux/x64x11/blittergles/sbversion/11/starboard_platform_tests.gyp
new file mode 100644
index 0000000..94e7cc2
--- /dev/null
+++ b/src/starboard/linux/x64x11/blittergles/sbversion/11/starboard_platform_tests.gyp
@@ -0,0 +1,24 @@
+# Copyright 2019 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# This file was initially generated by starboard/tools/create_derived_build.py,
+# though it may have been modified since its creation.
+
+{
+  'includes': [
+    # Note that we are 'includes'ing a 'gyp' file, not a 'gypi' file.  The idea
+    # is that we just want this file to *be* the parent gyp file.
+    '<(DEPTH)/starboard/linux/x64x11/blittergles/starboard_platform_tests.gyp',
+  ],
+}
diff --git a/src/starboard/linux/x64x11/blittergles/sbversion/11/thread_types_public.h b/src/starboard/linux/x64x11/blittergles/sbversion/11/thread_types_public.h
new file mode 100644
index 0000000..3f38d1c
--- /dev/null
+++ b/src/starboard/linux/x64x11/blittergles/sbversion/11/thread_types_public.h
@@ -0,0 +1,23 @@
+// Copyright 2019 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// This file was initially generated by starboard/tools/create_derived_build.py,
+// though it may have been modified since its creation.
+
+#ifndef STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_11_THREAD_TYPES_PUBLIC_H_
+#define STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_11_THREAD_TYPES_PUBLIC_H_
+
+#include "starboard/linux/x64x11/blittergles/thread_types_public.h"
+
+#endif  // STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_11_THREAD_TYPES_PUBLIC_H_
diff --git a/src/starboard/linux/x64x11/blittergles/sbversion/6/atomic_public.h b/src/starboard/linux/x64x11/blittergles/sbversion/6/atomic_public.h
new file mode 100644
index 0000000..d2414dd
--- /dev/null
+++ b/src/starboard/linux/x64x11/blittergles/sbversion/6/atomic_public.h
@@ -0,0 +1,23 @@
+// Copyright 2019 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// This file was initially generated by starboard/tools/create_derived_build.py,
+// though it may have been modified since its creation.
+
+#ifndef STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_6_ATOMIC_PUBLIC_H_
+#define STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_6_ATOMIC_PUBLIC_H_
+
+#include "starboard/linux/x64x11/blittergles/atomic_public.h"
+
+#endif  // STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_6_ATOMIC_PUBLIC_H_
diff --git a/src/starboard/linux/x64x11/blittergles/sbversion/6/configuration_public.h b/src/starboard/linux/x64x11/blittergles/sbversion/6/configuration_public.h
new file mode 100644
index 0000000..e73676b
--- /dev/null
+++ b/src/starboard/linux/x64x11/blittergles/sbversion/6/configuration_public.h
@@ -0,0 +1,23 @@
+// Copyright 2019 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// This file was initially generated by starboard/tools/create_derived_build.py,
+// though it may have been modified since its creation.
+
+#ifndef STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_6_CONFIGURATION_PUBLIC_H_
+#define STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_6_CONFIGURATION_PUBLIC_H_
+
+#include "starboard/linux/x64x11/blittergles/configuration_public.h"
+
+#endif  // STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_6_CONFIGURATION_PUBLIC_H_
diff --git a/src/starboard/linux/x64x11/blittergles/sbversion/6/gyp_configuration.gypi b/src/starboard/linux/x64x11/blittergles/sbversion/6/gyp_configuration.gypi
new file mode 100644
index 0000000..44aba2b
--- /dev/null
+++ b/src/starboard/linux/x64x11/blittergles/sbversion/6/gyp_configuration.gypi
@@ -0,0 +1,40 @@
+# Copyright 2019 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# This file was initially generated by starboard/tools/create_derived_build.py,
+# though it may have been modified since its creation.
+
+{
+  'target_defaults': {
+    'default_configuration': 'linux-x64x11-blittergles-sbversion-6_debug',
+    'configurations': {
+      'linux-x64x11-blittergles-sbversion-6_debug': {
+        'inherit_from': ['debug_base'],
+      },
+      'linux-x64x11-blittergles-sbversion-6_devel': {
+        'inherit_from': ['devel_base'],
+      },
+      'linux-x64x11-blittergles-sbversion-6_qa': {
+        'inherit_from': ['qa_base'],
+      },
+      'linux-x64x11-blittergles-sbversion-6_gold': {
+        'inherit_from': ['gold_base'],
+      },
+    }, # end of configurations
+  },
+
+  'includes': [
+    '<(DEPTH)/starboard/linux/x64x11/blittergles/gyp_configuration.gypi',
+  ],
+}
diff --git a/src/starboard/linux/x64x11/blittergles/sbversion/6/gyp_configuration.py b/src/starboard/linux/x64x11/blittergles/sbversion/6/gyp_configuration.py
new file mode 100644
index 0000000..6930874
--- /dev/null
+++ b/src/starboard/linux/x64x11/blittergles/sbversion/6/gyp_configuration.py
@@ -0,0 +1,39 @@
+# Copyright 2019 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# This file was initially generated by starboard/tools/create_derived_build.py,
+# though it may have been modified since its creation.
+"""Starboard Linux X64X11 Blittergles Sbversion 6 platform configuration."""
+
+from starboard.linux.x64x11 import gyp_configuration as parent_configuration
+
+
+class LinuxX64X11BlitterglesSbversion6Configuration(
+    parent_configuration.LinuxX64X11Configuration('linux-x64x11-blittergles')):
+
+  def GetVariables(self, config_name):
+    variables = super(LinuxX64X11BlitterglesSbversion6Configuration,
+                      self).GetVariables(config_name)
+    # V8 requires new Starboard features so we must use SpiderMonkey in older
+    # versions of Starboard.
+    variables.update({
+        'javascript_engine': 'mozjs-45',
+        'cobalt_enable_jit': 0,
+    })
+    return variables
+
+
+def CreatePlatformConfig():
+  return parent_configuration.LinuxX64X11Configuration(
+      'linux-x64x11-blittergles-sbversion-6')
diff --git a/src/starboard/linux/x64x11/blittergles/sbversion/6/starboard_platform.gyp b/src/starboard/linux/x64x11/blittergles/sbversion/6/starboard_platform.gyp
new file mode 100644
index 0000000..8163408
--- /dev/null
+++ b/src/starboard/linux/x64x11/blittergles/sbversion/6/starboard_platform.gyp
@@ -0,0 +1,24 @@
+# Copyright 2019 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# This file was initially generated by starboard/tools/create_derived_build.py,
+# though it may have been modified since its creation.
+
+{
+  'includes': [
+    # Note that we are 'includes'ing a 'gyp' file, not a 'gypi' file.  The idea
+    # is that we just want this file to *be* the parent gyp file.
+    '<(DEPTH)/starboard/linux/x64x11/blittergles/starboard_platform.gyp',
+  ],
+}
diff --git a/src/starboard/linux/x64x11/blittergles/sbversion/6/starboard_platform_tests.gyp b/src/starboard/linux/x64x11/blittergles/sbversion/6/starboard_platform_tests.gyp
new file mode 100644
index 0000000..94e7cc2
--- /dev/null
+++ b/src/starboard/linux/x64x11/blittergles/sbversion/6/starboard_platform_tests.gyp
@@ -0,0 +1,24 @@
+# Copyright 2019 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# This file was initially generated by starboard/tools/create_derived_build.py,
+# though it may have been modified since its creation.
+
+{
+  'includes': [
+    # Note that we are 'includes'ing a 'gyp' file, not a 'gypi' file.  The idea
+    # is that we just want this file to *be* the parent gyp file.
+    '<(DEPTH)/starboard/linux/x64x11/blittergles/starboard_platform_tests.gyp',
+  ],
+}
diff --git a/src/starboard/linux/x64x11/blittergles/sbversion/6/thread_types_public.h b/src/starboard/linux/x64x11/blittergles/sbversion/6/thread_types_public.h
new file mode 100644
index 0000000..6e977ae
--- /dev/null
+++ b/src/starboard/linux/x64x11/blittergles/sbversion/6/thread_types_public.h
@@ -0,0 +1,23 @@
+// Copyright 2019 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// This file was initially generated by starboard/tools/create_derived_build.py,
+// though it may have been modified since its creation.
+
+#ifndef STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_6_THREAD_TYPES_PUBLIC_H_
+#define STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_6_THREAD_TYPES_PUBLIC_H_
+
+#include "starboard/linux/x64x11/blittergles/thread_types_public.h"
+
+#endif  // STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_6_THREAD_TYPES_PUBLIC_H_
diff --git a/src/starboard/linux/x64x11/clang/3.6/download_clang.sh b/src/starboard/linux/x64x11/clang/3.6/download_clang.sh
index 15815a2..0117209 100755
--- a/src/starboard/linux/x64x11/clang/3.6/download_clang.sh
+++ b/src/starboard/linux/x64x11/clang/3.6/download_clang.sh
@@ -24,9 +24,9 @@
 
 binary_path="llvm/Release+Asserts/bin/clang++"
 
-# This version of clang depends on libstdc++-7, version 7.3.0.
+# This version of clang depends on libstdc++-7, version 7.4.0.
 # The package "libstdc++-7-dev" provides that version.
-libstdcxx_version="7.3.0"
+libstdcxx_version="7.4.0"
 libstdcxx_path="libstdc++-7"
 libstdcxx_symlink_folder="${libstdcxx_path}/lib/gcc/x86_64-linux-gnu"
 symlink_path="${libstdcxx_symlink_folder}/${libstdcxx_version}"
diff --git a/src/starboard/linux/x64x11/gcc/6.3/compiler_flags.gypi b/src/starboard/linux/x64x11/gcc/6.3/compiler_flags.gypi
index 639e270..cd8b46d 100644
--- a/src/starboard/linux/x64x11/gcc/6.3/compiler_flags.gypi
+++ b/src/starboard/linux/x64x11/gcc/6.3/compiler_flags.gypi
@@ -74,6 +74,12 @@
       '-fno-delete-null-pointer-checks',
       # Do not warn about unused function params.
       '-Wno-unused-parameter',
+      # Do not warn about multi-character character constant values.
+      '-Wno-multichar',
+      # Do not warn for ignoring return value declared with attribute warn_unused_result.
+      '-Wno-unused-result',
+      # Do now warn for unknown pragmas.
+      '-Wno-unknown-pragmas',
     ],
     'conditions': [
       ['cobalt_fastbuild==0', {
diff --git a/src/starboard/linux/x64x11/gcc/6.3/download_gcc.sh b/src/starboard/linux/x64x11/gcc/6.3/download_gcc.sh
index 6453533..efdd807 100755
--- a/src/starboard/linux/x64x11/gcc/6.3/download_gcc.sh
+++ b/src/starboard/linux/x64x11/gcc/6.3/download_gcc.sh
@@ -24,7 +24,8 @@
 binary_path="gcc/bin/g++"
 build_duration="about 40 minutes"
 
-cd $(dirname $0)
+scriptfolder=$(dirname $(realpath $0))
+cd ${scriptfolder}
 source ../../toolchain_paths.sh
 
 (
@@ -35,7 +36,14 @@
     wget -c http://ftpmirror.gnu.org/gcc/gcc-${version}/${file}.sig
     wget -c http://ftp.gnu.org/gnu/gnu-keyring.gpg
     signature_invalid=`gpg --verify --no-default-keyring --keyring ./gnu-keyring.gpg ${file}.sig`
-    if [ $signature_invalid ]; then echo "Invalid signature" ; exit 1 ; fi
+    if [ $signature_invalid ]; then
+      echo "Invalid signature for " $file
+      exit 1
+    fi
+    echo "f06ae7f3f790fbf0f018f6d40e844451e6bc3b7bc96e128e63b09825c1f8b29f  gcc-6.3.0.tar.bz2" | sha256sum -c || (
+      echo "Invalid Checksum for " $file
+      exit 1
+    )
     rm -rf gcc-${version}
     tar -xjf ${file}
     cd gcc-${version}
@@ -43,9 +51,20 @@
     if [ -f ./contrib/download_prerequisites ]; then
       ./contrib/download_prerequisites
     fi
+
+    cat <<EOF  | sha256sum -c || ( echo "Invalid Checksum for prerequisites"; exit 1 )
+c7e75a08a8d49d2082e4caee1591a05d11b9d5627514e678f02d66a124bcf2ba  mpfr-2.4.2.tar.bz2
+936162c0312886c21581002b79932829aa048cfaf9937c6265aeaa14f1cd1775  gmp-4.3.2.tar.bz2
+e664603757251fd8a352848276497a4c79b7f8b21fd8aedd5cc0598a38fee3e4  mpc-0.8.1.tar.gz
+8ceebbf4d9a81afa2b4449113cee4b7cb14a687d7a549a963deb5e2a41458b6b  isl-0.15.tar.bz2
+EOF
     cd ${toolchain_path}
   fi
 
+  # Patches for compiling with gcc 7.2
+  patch -p1 <${scriptfolder}/ucontext.diff
+  patch -p1 <${scriptfolder}/nosanitizer.diff
+
   # Create clean build folder for gcc
   rm -rf gcc gcc-${version}-build
   mkdir gcc-${version}-build
diff --git a/src/starboard/linux/x64x11/gcc/6.3/gyp_configuration.py b/src/starboard/linux/x64x11/gcc/6.3/gyp_configuration.py
index a5e7568..0066119 100644
--- a/src/starboard/linux/x64x11/gcc/6.3/gyp_configuration.py
+++ b/src/starboard/linux/x64x11/gcc/6.3/gyp_configuration.py
@@ -49,13 +49,13 @@
     return variables
 
   def GetEnvironmentVariables(self):
-    env_variables = super(LinuxX64X11Gcc63Configuration,
-                          self).GetEnvironmentVariables()
     toolchain_bin_dir = os.path.join(self.toolchain_dir, 'bin')
-    env_variables.update({
+    env_variables = {
         'CC': os.path.join(toolchain_bin_dir, 'gcc'),
         'CXX': os.path.join(toolchain_bin_dir, 'g++'),
-    })
+        'CC_HOST': os.path.join(toolchain_bin_dir, 'gcc'),
+        'CXX_HOST': os.path.join(toolchain_bin_dir, 'g++'),
+    }
     return env_variables
 
 
diff --git a/src/starboard/linux/x64x11/gcc/6.3/nosanitizer.diff b/src/starboard/linux/x64x11/gcc/6.3/nosanitizer.diff
new file mode 100644
index 0000000..838bf56
--- /dev/null
+++ b/src/starboard/linux/x64x11/gcc/6.3/nosanitizer.diff
@@ -0,0 +1,17 @@
+diff -ur x86_64-linux-gnu-gcc-6.3.0.orig/gcc-6.3.0/libsanitizer/configure.tgt x86_64-linux-gnu-gcc-6.3.0/gcc-6.3.0/libsanitizer/configure.tgt
+--- x86_64-linux-gnu-gcc-6.3.0.orig/gcc-6.3.0/libsanitizer/configure.tgt	2015-11-23 01:07:18.000000000 -0800
++++ x86_64-linux-gnu-gcc-6.3.0/gcc-6.3.0/libsanitizer/configure.tgt	2019-08-13 15:41:51.394524015 -0700
+@@ -21,13 +21,6 @@
+ # Filter out unsupported systems.
+ TSAN_TARGET_DEPENDENT_OBJECTS=
+ case "${target}" in
+-  x86_64-*-linux* | i?86-*-linux*)
+-	if test x$ac_cv_sizeof_void_p = x8; then
+-		TSAN_SUPPORTED=yes
+-		LSAN_SUPPORTED=yes
+-		TSAN_TARGET_DEPENDENT_OBJECTS=tsan_rtl_amd64.lo
+-	fi
+-	;;
+   powerpc*-*-linux*)
+ 	;;
+   sparc*-*-linux*)
diff --git a/src/starboard/linux/x64x11/gcc/6.3/ucontext.diff b/src/starboard/linux/x64x11/gcc/6.3/ucontext.diff
new file mode 100644
index 0000000..31206da
--- /dev/null
+++ b/src/starboard/linux/x64x11/gcc/6.3/ucontext.diff
@@ -0,0 +1,33 @@
+diff -ur x86_64-linux-gnu-gcc-6.3.0.orig/gcc-6.3.0/libgcc/config/aarch64/linux-unwind.h x86_64-linux-gnu-gcc-6.3.0/gcc-6.3.0/libgcc/config/aarch64/linux-unwind.h
+--- x86_64-linux-gnu-gcc-6.3.0.orig/gcc-6.3.0/libgcc/config/aarch64/linux-unwind.h	2016-01-04 06:30:50.000000000 -0800
++++ x86_64-linux-gnu-gcc-6.3.0/gcc-6.3.0/libgcc/config/aarch64/linux-unwind.h	2019-08-13 14:11:12.318898306 -0700
+@@ -52,7 +52,7 @@
+   struct rt_sigframe
+   {
+     siginfo_t info;
+-    struct ucontext uc;
++    ucontext_t uc;
+   };
+ 
+   struct rt_sigframe *rt_;
+diff -ur x86_64-linux-gnu-gcc-6.3.0.orig/gcc-6.3.0/libgcc/config/i386/linux-unwind.h x86_64-linux-gnu-gcc-6.3.0/gcc-6.3.0/libgcc/config/i386/linux-unwind.h
+--- x86_64-linux-gnu-gcc-6.3.0.orig/gcc-6.3.0/libgcc/config/i386/linux-unwind.h	2016-01-04 06:30:50.000000000 -0800
++++ x86_64-linux-gnu-gcc-6.3.0/gcc-6.3.0/libgcc/config/i386/linux-unwind.h	2019-08-13 14:11:20.386855553 -0700
+@@ -58,7 +58,7 @@
+   if (*(unsigned char *)(pc+0) == 0x48
+       && *(unsigned long long *)(pc+1) == RT_SIGRETURN_SYSCALL)
+     {
+-      struct ucontext *uc_ = context->cfa;
++      ucontext_t *uc_ = context->cfa;
+       /* The void * cast is necessary to avoid an aliasing warning.
+          The aliasing warning is correct, but should not be a problem
+          because it does not alias anything.  */
+@@ -138,7 +138,7 @@
+ 	siginfo_t *pinfo;
+ 	void *puc;
+ 	siginfo_t info;
+-	struct ucontext uc;
++	ucontext_t uc;
+       } *rt_ = context->cfa;
+       /* The void * cast is necessary to avoid an aliasing warning.
+          The aliasing warning is correct, but should not be a problem
diff --git a/src/starboard/linux/x64x11/mock/gyp_configuration.py b/src/starboard/linux/x64x11/mock/gyp_configuration.py
index 450394f..2abddb0 100644
--- a/src/starboard/linux/x64x11/mock/gyp_configuration.py
+++ b/src/starboard/linux/x64x11/mock/gyp_configuration.py
@@ -27,8 +27,13 @@
     return 'ninja,qtcreator_ninja'
 
   def GetVariables(self, configuration):
-    return super(LinuxX64X11MockConfiguration, self).GetVariables(
+    variables = super(LinuxX64X11MockConfiguration, self).GetVariables(
         configuration, use_clang=1)
+    variables.update({
+        'javascript_engine': 'mozjs-45',
+        'cobalt_enable_jit': 0,
+    })
+    return variables
 
   def GetGeneratorVariables(self, configuration):
     del configuration
diff --git a/src/starboard/media.h b/src/starboard/media.h
index a34a3a4..e890124 100644
--- a/src/starboard/media.h
+++ b/src/starboard/media.h
@@ -496,11 +496,7 @@
 
   // The AudioSpecificConfig, as specified in ISO/IEC-14496-3, section 1.6.2.1:
   // http://read.pudn.com/downloads98/doc/comm/401153/14496/ISO_IEC_14496-3%20Part%203%20Audio/C036083E_SUB1.PDF
-#if SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER)
   const void* audio_specific_config;
-#else  // SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER)
-  int8_t audio_specific_config[8];
-#endif  // SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER)
 } SbMediaAudioSampleInfo;
 
 #if SB_API_VERSION < 11
diff --git a/src/starboard/nplb/audio_sink_get_min_buffer_size_in_frames_test.cc b/src/starboard/nplb/audio_sink_get_min_buffer_size_in_frames_test.cc
new file mode 100644
index 0000000..a07a8c8
--- /dev/null
+++ b/src/starboard/nplb/audio_sink_get_min_buffer_size_in_frames_test.cc
@@ -0,0 +1,56 @@
+// Copyright 2019 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "starboard/audio_sink.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace starboard {
+namespace nplb {
+
+#if SB_API_VERSION >= 11
+TEST(SbAudioSinkGetMinBufferSizeInFramesTest, SunnyDay) {
+  SbMediaAudioSampleType sample_type = kSbMediaAudioSampleTypeFloat32;
+  if (!SbAudioSinkIsAudioSampleTypeSupported(sample_type)) {
+    sample_type = kSbMediaAudioSampleTypeInt16Deprecated;
+  }
+  const int kDefaultSampleFrequency = 48000;
+  int max_channels = SbAudioSinkGetMaxChannels();
+  int min_required_frames = SbAudioSinkGetMinBufferSizeInFrames(
+      max_channels, sample_type,
+      SbAudioSinkGetNearestSupportedSampleFrequency(kDefaultSampleFrequency));
+
+  EXPECT_GT(min_required_frames, 0);
+  EXPECT_LE(min_required_frames, 10 * 1024);
+
+  if (max_channels > 1) {
+    min_required_frames = SbAudioSinkGetMinBufferSizeInFrames(
+        1, sample_type,
+        SbAudioSinkGetNearestSupportedSampleFrequency(kDefaultSampleFrequency));
+
+    EXPECT_GT(min_required_frames, 0);
+    EXPECT_LE(min_required_frames, 10 * 1024);
+  }
+  if (max_channels > 2) {
+    min_required_frames = SbAudioSinkGetMinBufferSizeInFrames(
+        2, sample_type,
+        SbAudioSinkGetNearestSupportedSampleFrequency(kDefaultSampleFrequency));
+
+    EXPECT_GT(min_required_frames, 0);
+    EXPECT_LE(min_required_frames, 10 * 1024);
+  }
+}
+#endif  // SB_API_VERSION >= 11
+
+}  // namespace nplb
+}  // namespace starboard
diff --git a/src/starboard/nplb/directory_get_next_test.cc b/src/starboard/nplb/directory_get_next_test.cc
index d382284..24c05ba 100644
--- a/src/starboard/nplb/directory_get_next_test.cc
+++ b/src/starboard/nplb/directory_get_next_test.cc
@@ -103,6 +103,20 @@
   EXPECT_FALSE(SbDirectoryGetNext(kSbDirectoryInvalid, NULL));
 }
 
+TEST(SbDirectoryGetNextTest, FailureOnEmptyDirectory) {
+  ScopedRandomFile dir(ScopedRandomFile::kDontCreate);
+  const std::string& path = dir.filename();
+  ASSERT_TRUE(SbDirectoryCreate(path.c_str()));
+  SbFileError error = kSbFileErrorMax;
+  SbDirectory directory = SbDirectoryOpen(path.c_str(), &error);
+  ASSERT_TRUE(SbDirectoryIsValid(directory));
+  ASSERT_EQ(kSbFileOk, error);
+
+  SbDirectoryEntry entry = {0};
+  EXPECT_FALSE(SbDirectoryGetNext(directory, &entry));
+  ASSERT_TRUE(SbDirectoryClose(directory));
+}
+
 }  // namespace
 }  // namespace nplb
 }  // namespace starboard
diff --git a/src/starboard/nplb/drm_create_system_test.cc b/src/starboard/nplb/drm_create_system_test.cc
index a59b86a..0b68275 100644
--- a/src/starboard/nplb/drm_create_system_test.cc
+++ b/src/starboard/nplb/drm_create_system_test.cc
@@ -119,7 +119,7 @@
       EXPECT_FALSE(SbDrmSystemIsValid(drm_system));
       SbDrmDestroySystem(drm_system);
     }
-#elif SB_HAS(DRM_KEY_STATUSES)
+#else   // SB_HAS(DRM_SESSION_CLOSED)
     {
       SbDrmSystem drm_system = SbDrmCreateSystem(
           key_system, NULL /* context */,
@@ -143,21 +143,7 @@
       EXPECT_FALSE(SbDrmSystemIsValid(drm_system));
       SbDrmDestroySystem(drm_system);
     }
-#else
-    {
-      SbDrmSystem drm_system = SbDrmCreateSystem(
-          key_system, NULL /* context */,
-          NULL /* session_update_request_func */, DummySessionUpdatedFunc);
-      EXPECT_FALSE(SbDrmSystemIsValid(drm_system));
-    }
-    {
-      SbDrmSystem drm_system = SbDrmCreateSystem(
-          key_system, NULL /* context */, DummySessionUpdateRequestFunc,
-          NULL /* session_updated_func */);
-      EXPECT_FALSE(SbDrmSystemIsValid(drm_system));
-      SbDrmDestroySystem(drm_system);
-    }
-#endif  // SB_HAS(DRM_KEY_STATUSES)
+#endif  // SB_HAS(DRM_SESSION_CLOSED)
   }
 }
 #endif  // SB_API_VERSION >= 10
diff --git a/src/starboard/nplb/drm_helpers.cc b/src/starboard/nplb/drm_helpers.cc
index 83a7a5e..930fb82 100644
--- a/src/starboard/nplb/drm_helpers.cc
+++ b/src/starboard/nplb/drm_helpers.cc
@@ -67,7 +67,6 @@
 
 #endif  // SB_API_VERSION >= 10
 
-#if SB_HAS(DRM_KEY_STATUSES)
 void DummySessionKeyStatusesChangedFunc(SbDrmSystem drm_system,
                                         void* context,
                                         const void* session_id,
@@ -75,7 +74,6 @@
                                         int number_of_keys,
                                         const SbDrmKeyId* key_ids,
                                         const SbDrmKeyStatus* key_statuses) {}
-#endif  // SB_HAS(DRM_KEY_STATUSES)
 
 void DummySessionClosedFunc(SbDrmSystem drm_system,
                             void* context,
@@ -93,15 +91,11 @@
       key_system, NULL /* context */, DummySessionUpdateRequestFunc,
       DummySessionUpdatedFunc, DummySessionKeyStatusesChangedFunc,
       DummySessionClosedFunc);
-#elif SB_HAS(DRM_KEY_STATUSES)
+#else   // SB_HAS(DRM_SESSION_CLOSED)
   return SbDrmCreateSystem(
       key_system, NULL /* context */, DummySessionUpdateRequestFunc,
       DummySessionUpdatedFunc, DummySessionKeyStatusesChangedFunc);
-#else   // SB_HAS(DRM_KEY_STATUSES)
-  return SbDrmCreateSystem(key_system, NULL /* context */,
-                           DummySessionUpdateRequestFunc,
-                           DummySessionUpdatedFunc);
-#endif  // SB_HAS(DRM_KEY_STATUSES)
+#endif  // SB_HAS(DRM_SESSION_CLOSED)
 }
 
 }  // namespace nplb
diff --git a/src/starboard/nplb/drm_helpers.h b/src/starboard/nplb/drm_helpers.h
index d48ed5e..f6d012d 100644
--- a/src/starboard/nplb/drm_helpers.h
+++ b/src/starboard/nplb/drm_helpers.h
@@ -68,7 +68,6 @@
 
 #endif  // SB_API_VERSION >= 10
 
-#if SB_HAS(DRM_KEY_STATUSES)
 void DummySessionKeyStatusesChangedFunc(SbDrmSystem drm_system,
                                         void* context,
                                         const void* session_id,
@@ -76,7 +75,6 @@
                                         int number_of_keys,
                                         const SbDrmKeyId* key_ids,
                                         const SbDrmKeyStatus* key_statuses);
-#endif  // SB_HAS(DRM_KEY_STATUSES)
 
 void DummySessionClosedFunc(SbDrmSystem drm_system,
                             void* context,
diff --git a/src/starboard/nplb/media_set_audio_write_duration_test.cc b/src/starboard/nplb/media_set_audio_write_duration_test.cc
index 0ca9a37..bcbe76a 100644
--- a/src/starboard/nplb/media_set_audio_write_duration_test.cc
+++ b/src/starboard/nplb/media_set_audio_write_duration_test.cc
@@ -242,7 +242,7 @@
   SbPlayerDestroy(player);
 }
 
-TEST_P(SbMediaSetAudioWriteDurationTest, WriteContinuedLimitedInput) {
+TEST_P(SbMediaSetAudioWriteDurationTest, FLAKY_WriteContinuedLimitedInput) {
   ASSERT_NE(dmp_reader_.audio_codec(), kSbMediaAudioCodecNone);
   ASSERT_GT(dmp_reader_.number_of_audio_buffers(), 0);
 
diff --git a/src/starboard/nplb/nplb.gyp b/src/starboard/nplb/nplb.gyp
index 4338c4d..0dce66d 100644
--- a/src/starboard/nplb/nplb.gyp
+++ b/src/starboard/nplb/nplb.gyp
@@ -46,6 +46,7 @@
         'audio_sink_create_test.cc',
         'audio_sink_destroy_test.cc',
         'audio_sink_get_max_channels_test.cc',
+        'audio_sink_get_min_buffer_size_in_frames_test.cc',
         'audio_sink_get_nearest_supported_sample_frequency_test.cc',
         'audio_sink_helpers.cc',
         'audio_sink_helpers.h',
@@ -264,6 +265,7 @@
         'system_hide_splash_screen_test.cc',
         'system_is_debugger_attached_test.cc',
         'system_sort_test.cc',
+        'system_sign_with_certification_secret_key_test.cc',
         'system_symbolize_test.cc',
         'thread_create_test.cc',
         'thread_detach_test.cc',
diff --git a/src/starboard/nplb/system_sign_with_certification_secret_key_test.cc b/src/starboard/nplb/system_sign_with_certification_secret_key_test.cc
new file mode 100644
index 0000000..7b22229
--- /dev/null
+++ b/src/starboard/nplb/system_sign_with_certification_secret_key_test.cc
@@ -0,0 +1,56 @@
+// Copyright 2019 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// SbDirectoryClose is well-covered in all the other tests, so just the
+// leftovers are here.
+
+#include <string>
+
+#include "starboard/system.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+#if SB_API_VERSION >= 11
+
+namespace starboard {
+namespace nplb {
+namespace {
+
+TEST(SbSystemSignWithCertificationSecretKeyTest, DoesNotCrash) {
+  const size_t kDigestSize = 32;
+  uint8_t digest[kDigestSize];
+
+  std::string message("test_message");
+  SbSystemSignWithCertificationSecretKey(
+      reinterpret_cast<const uint8_t*>(message.data()), message.size(), digest,
+      kDigestSize);
+}
+
+// Since SbSystemSignWithCertificationSecretKey() uses the SHA256 algorithm,
+// the output digest size must be at least 256 bits, or 32 bytes.
+TEST(SbSystemSignWithCertificationSecretKeyTest,
+     RainyDayFailsOnLessThan32Bytes) {
+  const size_t kDigestSize = 32;
+  uint8_t digest[kDigestSize];
+
+  std::string message("test_message");
+  EXPECT_FALSE(SbSystemSignWithCertificationSecretKey(
+      reinterpret_cast<const uint8_t*>(message.data()), message.size(), digest,
+      31));
+}
+
+}  // namespace
+}  // namespace nplb
+}  // namespace starboard
+
+#endif  // SB_API_VERSION >= 11
diff --git a/src/starboard/player.h b/src/starboard/player.h
index 4cb0cab..08e16d1 100644
--- a/src/starboard/player.h
+++ b/src/starboard/player.h
@@ -407,11 +407,9 @@
 //   Otherwise, |audio_sample_info| can be NULL. See media.h for the format of
 //   the |SbMediaAudioSampleInfo| struct.
 #endif  // SB_API_VERSION < 11
-#if SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER)
 //   Note that |audio_specific_config| is a pointer and the content it points to
 //   is no longer valid after this function returns.  The implementation has to
 //   make a copy of the content if it is needed after the function returns.
-#endif  // SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER)
 #if SB_API_VERSION >= 11
 // |max_video_capabilities|: This string communicates the video maximums to the
 //   platform. The web app will not provide a video stream exceeding the
diff --git a/src/starboard/raspi/0/gyp_configuration.py b/src/starboard/raspi/0/gyp_configuration.py
index 933c6ee..b247085 100644
--- a/src/starboard/raspi/0/gyp_configuration.py
+++ b/src/starboard/raspi/0/gyp_configuration.py
@@ -41,6 +41,11 @@
           # TODO: debug these failures.
           'SbPlayerTest.MultiPlayer',  # crashes
       ],
+      # Temporarily disable most of the tests until we can narrow it down to the
+      # minimum number of cases that are real test failures.
+      'player_filter_tests': [
+          'AudioDecoderTest.*',
+      ],
   }
 
 
diff --git a/src/starboard/raspi/shared/gyp_configuration.py b/src/starboard/raspi/shared/gyp_configuration.py
index e7668ea..f25f2a4 100644
--- a/src/starboard/raspi/shared/gyp_configuration.py
+++ b/src/starboard/raspi/shared/gyp_configuration.py
@@ -107,7 +107,6 @@
           # TODO: debug these failures.
           'VideoDecoderTests/VideoDecoderTest.EndOfStreamWithoutAnyInput/0',
           'VideoDecoderTests/VideoDecoderTest.MultipleResets/0',
-          'VideoDecoderTests/VideoDecoderTest.SingleInvalidInput/*',
           'VideoDecoderTests/VideoDecoderTest'
           '.MultipleValidInputsAfterInvalidKeyFrame/*',
           'VideoDecoderTests/VideoDecoderTest.MultipleInvalidInput/*',
diff --git a/src/starboard/raspi/shared/open_max/video_decoder.cc b/src/starboard/raspi/shared/open_max/video_decoder.cc
index 2d10bfc..712ff8b 100644
--- a/src/starboard/raspi/shared/open_max/video_decoder.cc
+++ b/src/starboard/raspi/shared/open_max/video_decoder.cc
@@ -203,9 +203,6 @@
       stream_ended = true;
     } else if (event->type == Event::kReset) {
       ScopedLock scoped_lock(mutex_);
-      component.Flush();
-      stream_ended = false;
-      eos_written = false;
 
       while (!freed_buffers_.empty()) {
         component.DropOutputBuffer(freed_buffers_.front());
@@ -216,6 +213,10 @@
         component.DropOutputBuffer(filled_buffers_.front());
         filled_buffers_.pop();
       }
+
+      component.Flush();
+      stream_ended = false;
+      eos_written = false;
     } else {
       SB_NOTREACHED() << "event type " << event->type;
     }
diff --git a/src/starboard/raspi/shared/starboard_platform.gypi b/src/starboard/raspi/shared/starboard_platform.gypi
index b20edc6..3c0ebb4 100644
--- a/src/starboard/raspi/shared/starboard_platform.gypi
+++ b/src/starboard/raspi/shared/starboard_platform.gypi
@@ -261,6 +261,7 @@
         '<(DEPTH)/starboard/shared/starboard/audio_sink/audio_sink_create.cc',
         '<(DEPTH)/starboard/shared/starboard/audio_sink/audio_sink_destroy.cc',
         '<(DEPTH)/starboard/shared/starboard/audio_sink/audio_sink_get_max_channels_5_1.cc',
+        '<(DEPTH)/starboard/shared/starboard/audio_sink/audio_sink_get_min_buffer_size_in_frames.cc',
         '<(DEPTH)/starboard/shared/starboard/audio_sink/audio_sink_get_nearest_supported_sample_frequency.cc',
         '<(DEPTH)/starboard/shared/starboard/audio_sink/audio_sink_is_audio_frame_storage_type_supported_interleaved_only.cc',
         '<(DEPTH)/starboard/shared/starboard/audio_sink/audio_sink_is_audio_sample_type_supported_float32_only.cc',
@@ -374,6 +375,7 @@
         '<(DEPTH)/starboard/shared/stub/system_get_used_gpu_memory.cc',
         '<(DEPTH)/starboard/shared/stub/system_hide_splash_screen.cc',
         '<(DEPTH)/starboard/shared/stub/system_raise_platform_error.cc',
+        '<(DEPTH)/starboard/shared/stub/system_sign_with_certification_secret_key.cc',
         '<(DEPTH)/starboard/shared/stub/ui_nav_get_interface.cc',
         '<(DEPTH)/starboard/shared/stub/window_get_diagonal_size_in_inches.cc',
       ],
diff --git a/src/starboard/shared/alsa/alsa_audio_sink_type.cc b/src/starboard/shared/alsa/alsa_audio_sink_type.cc
index a55e83f..62ae12b 100644
--- a/src/starboard/shared/alsa/alsa_audio_sink_type.cc
+++ b/src/starboard/shared/alsa/alsa_audio_sink_type.cc
@@ -261,6 +261,7 @@
     {
       ScopedLock lock(mutex_);
       if (destroying_) {
+        SB_DLOG(INFO) << "alsa::AlsaAudioSink exits idle loop : destroying";
         break;
       }
       playback_rate = playback_rate_;
@@ -270,6 +271,9 @@
     update_source_status_func_(&frames_in_buffer, &offset_in_frames,
                                &is_playing, &is_eos_reached, context_);
     if (is_playing && frames_in_buffer > 0 && playback_rate > 0.0) {
+      SB_DLOG(INFO) << "alsa::AlsaAudioSink exits idle loop : is playing "
+                    << is_playing << " frames in buffer " << frames_in_buffer
+                    << " playback_rate " << playback_rate;
       return true;
     }
     if (drain) {
@@ -294,6 +298,8 @@
       ScopedTryLock lock(mutex_);
       if (lock.is_locked()) {
         if (destroying_) {
+          SB_DLOG(INFO)
+              << "alsa::AlsaAudioSink exits playback loop : destroying";
           break;
         }
         playback_rate = playback_rate_;
@@ -302,6 +308,8 @@
 
     if (delayed_frame < kMinimumFramesInALSA) {
       if (playback_rate == 0.0) {
+        SB_DLOG(INFO)
+            << "alsa::AlsaAudioSink exits playback loop: playback rate 0";
         return true;
       }
       int frames_in_buffer, offset_in_frames;
@@ -309,6 +317,8 @@
       update_source_status_func_(&frames_in_buffer, &offset_in_frames,
                                  &is_playing, &is_eos_reached, context_);
       if (!is_playing || frames_in_buffer == 0) {
+        SB_DLOG(INFO) << "alsa::AlsaAudioSink exits playback loop: is playing "
+                      << is_playing << " frames in buffer " << frames_in_buffer;
         return true;
       }
       WriteFrames(playback_rate, std::min(kFramesPerRequest, frames_in_buffer),
@@ -338,6 +348,9 @@
           frames_to_buffer_end);
       consume_frame_func_(consumed, context_);
       if (consumed != frames_to_buffer_end) {
+        SB_DLOG(INFO) << "alsa::AlsaAudioSink exits write frames : consumed "
+                      << consumed << " frames, with " << frames_to_buffer_end
+                      << " frames to buffer end";
         return;
       }
 
diff --git a/src/starboard/shared/blittergles/blitter_create_default_device.cc b/src/starboard/shared/blittergles/blitter_create_default_device.cc
index abec352..8435118 100644
--- a/src/starboard/shared/blittergles/blitter_create_default_device.cc
+++ b/src/starboard/shared/blittergles/blitter_create_default_device.cc
@@ -115,16 +115,7 @@
     return kSbBlitterInvalidDevice;
   }
 
-  // When running on Xvfb, sometimes ANGLE fails to open the default X display.
-  // By retrying, we increase the chances that eglInitialize() will succeed.
-  // This is a temporary fix.
-  int max_tries = 3, num_tries = 0;
-  bool initialized = false;
-  do {
-    initialized = eglInitialize(device->display, NULL, NULL);
-    ++num_tries;
-  } while (!initialized && num_tries < max_tries);
-  if (!initialized) {
+  if (!eglInitialize(device->display, NULL, NULL)) {
     SB_DLOG(ERROR) << ": Failed to initialize device.";
     return kSbBlitterInvalidDevice;
   }
diff --git a/src/starboard/shared/iso/impl/directory_get_next.h b/src/starboard/shared/iso/impl/directory_get_next.h
index 488249f..1bb4a1d 100644
--- a/src/starboard/shared/iso/impl/directory_get_next.h
+++ b/src/starboard/shared/iso/impl/directory_get_next.h
@@ -36,12 +36,23 @@
     return false;
   }
 
+  // Look for the first directory that isn't current or parent.
   struct dirent dirent_buffer;
   struct dirent* dirent;
-  int result = readdir_r(directory->directory, &dirent_buffer, &dirent);
-  if (result || !dirent) {
-    return false;
-  }
+  int result;
+  do {
+    result = readdir_r(directory->directory, &dirent_buffer, &dirent);
+    if (!result && dirent) {
+      if ((SbStringCompareAll(dirent->d_name, ".") == 0) ||
+          (SbStringCompareAll(dirent->d_name, "..") == 0)) {
+        continue;
+      } else {
+        break;
+      }
+    } else {
+      return false;
+    }
+  } while (true);
 
   SbStringCopy(out_entry->name, dirent->d_name,
                SB_ARRAY_SIZE_INT(out_entry->name));
diff --git a/src/starboard/shared/linux/cpu_features_get.cc b/src/starboard/shared/linux/cpu_features_get.cc
index d8ce245..2eeedf1 100644
--- a/src/starboard/shared/linux/cpu_features_get.cc
+++ b/src/starboard/shared/linux/cpu_features_get.cc
@@ -12,6 +12,21 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
+// This file contains implementations of SbCPUFeaturesGet() on all supported
+// architectures defined in Starboard header cpu_features.h on linux platform.
+// We use the most applicable and precise approach to get CPU features on each
+// architecture. To be specific,
+//
+// On Arm/Arm64, we read CPU version information from /proc/cpuinfo. We get
+// feature flags by parsing HWCAP bitmasks retrieved from function getauxval()
+// or /proc/self/auxv, or by reading the flags from /proc/cpuinfo.
+//
+// On X86/X86_64, we read CPU version strings from /proc/cpuinfo. We get other
+// CPU version information and feature flags by CPUID instruction, which gives
+// more precise and complete information than reading from /proc/cpuinfo.
+//
+// TODO: Mips/Mips64 and Ppc/Ppc64
+
 #include "starboard/cpu_features.h"
 
 #include <dlfcn.h>         // dlsym, dlclose, dlopen
@@ -19,7 +34,7 @@
 #include <stdio.h>         // fopen, fclose
 #include <string.h>
 #include <strings.h>  // strcasecmp
-#include <sys/auxv.h>
+#include <sys/auxv.h>  // getauxval()
 #include <unistd.h>  // sysconf()
 #include <memory>
 
@@ -32,7 +47,10 @@
 
 namespace {
 
-// See <asm/hwcap.h> kernel header.
+#if SB_IS(ARCH_ARM)
+
+#if SB_IS(32_BIT)
+// See <arch/arm/include/uapi/asm/hwcap.h> kernel header.
 #define HWCAP_VFP (1 << 6)
 #define HWCAP_IWMMXT (1 << 9)
 #define HWCAP_NEON (1 << 12)
@@ -44,7 +62,6 @@
 #define HWCAP_VFPD32 (1 << 19) /* set if VFP has 32 regs (not 16) */
 #define HWCAP_IDIV (HWCAP_IDIVA | HWCAP_IDIVT)
 
-// see <uapi/asm/hwcap.h> kernel header
 #define HWCAP2_AES (1 << 0)
 #define HWCAP2_PMULL (1 << 1)
 #define HWCAP2_SHA1 (1 << 2)
@@ -55,39 +72,54 @@
 #define HWCAP_SET_FOR_ARMV8 \
   (HWCAP_VFP | HWCAP_NEON | HWCAP_VFPv3 | HWCAP_VFPv4 | HWCAP_IDIV)
 
+#elif SB_IS(64_BIT)
+// See <arch/arm64/include/uapi/asm/hwcap.h> kernel header
+#define HWCAP_FP (1 << 0)
+#define HWCAP_ASIMD (1 << 1)
+#define HWCAP_AES (1 << 3)
+#define HWCAP_PMULL (1 << 4)
+#define HWCAP_SHA1 (1 << 5)
+#define HWCAP_SHA2 (1 << 6)
+#define HWCAP_CRC32 (1 << 7)
+
+#endif  // SB_IS(32_BIT)
+
+#elif SB_IS(ARCH_X86)
+
+// x86_xgetbv returns the value of an Intel Extended Control Register (XCR).
+// Currently only XCR0 is defined by Intel so |xcr| should always be zero.
+uint64_t x86_xgetbv(uint32_t xcr) {
+  uint32_t eax, edx;
+
+  __asm__ volatile("xgetbv" : "=a"(eax), "=d"(edx) : "c"(xcr));
+  return (static_cast<uint64_t>(edx) << 32) | eax;
+}
+
+#if SB_IS(32_BIT)
+void x86_cpuid(int cpuid_info[4], int info_type) {
+  __asm__ volatile(
+      "mov %%ebx, %%edi\n"
+      "cpuid\n"
+      "xchg %%edi, %%ebx\n"
+      : "=a"(cpuid_info[0]), "=D"(cpuid_info[1]), "=c"(cpuid_info[2]),
+        "=d"(cpuid_info[3])
+      : "a"(info_type), "c"(0));
+}
+#elif SB_IS(64_BIT)
+void x86_cpuid(int cpuid_info[4], int info_type) {
+  __asm__ volatile("cpuid\n"
+                   : "=a"(cpuid_info[0]), "=b"(cpuid_info[1]),
+                     "=c"(cpuid_info[2]), "=d"(cpuid_info[3])
+                   : "a"(info_type), "c"(0));
+}
+#endif  // SB_IS(32_BIT)
+
+#endif  // SB_IS(ARCH_ARM)
+
 using starboard::shared::SetX86FeaturesInvalid;
 using starboard::shared::SetArmFeaturesInvalid;
 using starboard::shared::SetGeneralFeaturesInvalid;
 
-// Checks if a space-separated list of items |list|, in the form of a string,
-// contains one given item |item|.
-bool HasItemInList(const char* list, const char* flag) {
-  ssize_t flag_length = strlen(flag);
-  const char* list_ptr = list;
-  if (list_ptr == nullptr) {
-    return false;
-  }
-  while (*list_ptr != '\0') {
-    // Skip whitespace.
-    while (isspace(*list_ptr))
-      ++list_ptr;
-
-    // Find end of current list flag.
-    const char* end_ptr = list_ptr;
-    while (*end_ptr != '\0' && !isspace(*end_ptr))
-      ++end_ptr;
-
-    if (flag_length == end_ptr - list_ptr &&
-        memcmp(list_ptr, flag, flag_length) == 0) {
-      return true;
-    }
-
-    // Continue to the next flag.
-    list_ptr = end_ptr;
-  }
-  return false;
-}
-
 // Class that holds the information in system file /proc/cpuinfo.
 class ProcCpuInfo {
   // Raw data of the file /proc/cpuinfo
@@ -304,6 +336,36 @@
   return hwcap;
 }
 
+#if SB_IS(ARCH_ARM)
+// Checks if a space-separated list of items |list|, in the form of a string,
+// contains one given item |item|.
+bool HasItemInList(const char* list, const char* flag) {
+  ssize_t flag_length = strlen(flag);
+  const char* list_ptr = list;
+  if (list_ptr == nullptr) {
+    return false;
+  }
+  while (*list_ptr != '\0') {
+    // Skip whitespace.
+    while (isspace(*list_ptr))
+      ++list_ptr;
+
+    // Find end of current list flag.
+    const char* end_ptr = list_ptr;
+    while (*end_ptr != '\0' && !isspace(*end_ptr))
+      ++end_ptr;
+
+    if (flag_length == end_ptr - list_ptr &&
+        memcmp(list_ptr, flag, flag_length) == 0) {
+      return true;
+    }
+
+    // Continue to the next flag.
+    list_ptr = end_ptr;
+  }
+  return false;
+}
+
 // Construct hwcap bitmask by the feature flags in /proc/cpuinfo
 uint32_t ConstructHwcapFromCPUInfo(ProcCpuInfo* cpu_info,
                                    int16_t architecture_generation,
@@ -352,8 +414,13 @@
 bool SbCPUFeaturesGet_ARM(SbCPUFeatures* features) {
   memset(features, 0, sizeof(*features));
 
-  // Raspi is a 32-bit ARM platform.
+#if SB_IS(32_BIT)
   features->architecture = kSbCPUFeaturesArchitectureArm;
+#elif SB_IS(64_BIT)
+  features->architecture = kSbCPUFeaturesArchitectureArm64;
+#else
+#error "Your platform must be either 32-bit or 64-bit."
+#endif
 
   // Set the default value of the features to be invalid, then fill them in
   // if appropriate.
@@ -399,7 +466,11 @@
     // ARMv7-based CPU, and "(v6l)" for an ARMv6-one. For example,
     // the Raspberry Pi is one popular ARMv6 device that reports
     // architecture 7. The 'Processor' or 'model name' fields
-    // also contain processor brand information.
+    // also contain processor brand information. "model name" is used in
+    // Linux 3.8 and later (3.7
+    // and later for arm64) and is shown once per CPU. "Processor" is used in
+    // earler versions and is shown only once at the top of /proc/cpuinfo
+    // regardless of the number CPUs.
 
     // Allocate 256 bytes for "Processor"/"model name" field.
     static char brand_buffer[256] = {0};
@@ -418,6 +489,7 @@
     }
   }
 
+#if SB_IS(32_BIT)
   // Get hwcap bitmask and extract the CPU feature flags from it.
   features->hwcap = ReadElfHwcaps(AT_HWCAP);
   if (features->hwcap == 0) {
@@ -481,10 +553,22 @@
 
   features->arm.has_aes = (features->hwcap2 & HWCAP2_AES) != 0;
   features->arm.has_pmull = (features->hwcap2 & HWCAP2_PMULL) != 0;
-  features->arm.has_sha1 = (features->hwcap2 & HWCAP2_PMULL) != 0;
+  features->arm.has_sha1 = (features->hwcap2 & HWCAP2_SHA1) != 0;
   features->arm.has_sha2 = (features->hwcap2 & HWCAP2_SHA2) != 0;
   features->arm.has_crc32 = (features->hwcap2 & HWCAP2_CRC32) != 0;
 
+#elif SB_IS(64_BIT)
+  // Read hwcaps bitmask and extract the CPU feature flags from it.
+  features->hwcap = ReadElfHwcaps(AT_HWCAP);
+
+  features->arm.has_aes = (features->hwcap & HWCAP_AES) != 0;
+  features->arm.has_pmull = (features->hwcap & HWCAP_PMULL) != 0;
+  features->arm.has_sha1 = (features->hwcap & HWCAP_SHA1) != 0;
+  features->arm.has_sha2 = (features->hwcap & HWCAP_SHA2) != 0;
+  features->arm.has_crc32 = (features->hwcap & HWCAP_CRC32) != 0;
+
+#endif  // SB_IS(32_BIT)
+
   // Get L1 ICACHE and DCACHE line size.
   features->icache_line_size = sysconf(_SC_LEVEL1_ICACHE_LINESIZE);
   features->dcache_line_size = sysconf(_SC_LEVEL1_DCACHE_LINESIZE);
@@ -492,12 +576,158 @@
   return true;
 }
 
+#elif SB_IS(ARCH_X86)
+
+bool SbCPUFeaturesGet_X86(SbCPUFeatures* features) {
+  memset(features, 0, sizeof(*features));
+
+#if SB_IS(32_BIT)
+  features->architecture = kSbCPUFeaturesArchitectureX86;
+#elif SB_IS(64_BIT)
+  features->architecture = kSbCPUFeaturesArchitectureX86_64;
+#else
+#error "Your platform must be either 32-bit or 64-bit."
+#endif
+
+  // Set the default value of the features to be invalid, then fill them in
+  // if appropriate.
+  SetGeneralFeaturesInvalid(features);
+  SetArmFeaturesInvalid(features);
+  SetX86FeaturesInvalid(features);
+
+  ProcCpuInfo cpu_info;
+
+  // Extract brand and vendor information.
+  // Allocate 256 bytes for "model name" field.
+  static char brand_buffer[256] = {0};
+  if (cpu_info.ExtractStringFeature(
+          "model name", brand_buffer,
+          sizeof(brand_buffer) / sizeof(brand_buffer[0]))) {
+    features->brand = brand_buffer;
+  }
+
+  // Allocate 128 bytes for "vendor_id" field.
+  static char vendor_buffer[128] = {0};
+  if (cpu_info.ExtractStringFeature(
+          "vendor_id", vendor_buffer,
+          sizeof(vendor_buffer) / sizeof(vendor_buffer[0]))) {
+    features->x86.vendor = vendor_buffer;
+  }
+
+  // Get L1 ICACHE and DCACHE line size.
+  features->icache_line_size = sysconf(_SC_LEVEL1_ICACHE_LINESIZE);
+  features->dcache_line_size = sysconf(_SC_LEVEL1_DCACHE_LINESIZE);
+
+  // Hwcap bitmasks are not applicable to x86/x86_64. They'll remain 0.
+
+  // Use cpuid instruction to get feature flags.
+  int cpuid_info[4] = {0};
+
+  // x86_cpuid with an InfoType argument of 0 returns the number of
+  // valid Ids in cpuid_info[0].
+  x86_cpuid(cpuid_info, 0);
+  unsigned int num_ids = cpuid_info[0];
+
+  // Interpret CPU feature information of CPUID level 1. EAX is returned
+  // in cpuid_info[0], EBX in cpuid_info[1], ECX in cpuid_info[2],
+  // EDX in cpuid_info[3].
+  if (num_ids > 0) {
+    x86_cpuid(cpuid_info, 1);
+    features->x86.signature = cpuid_info[0];
+    features->x86.stepping = cpuid_info[0] & 0xF;
+    features->x86.model =
+        ((cpuid_info[0] >> 4) & 0xF) + ((cpuid_info[0] >> 12) & 0xF0);
+    features->x86.family = (cpuid_info[0] >> 8) & 0xF;
+    features->x86.type = (cpuid_info[0] >> 12) & 0x3;
+    features->x86.ext_model = (cpuid_info[0] >> 16) & 0xF;
+    features->x86.ext_family = (cpuid_info[0] >> 20) & 0xFF;
+
+    features->has_fpu = (cpuid_info[3] & (1 << 0)) != 0;
+
+    features->x86.has_cmov = (cpuid_info[3] & (1 << 15)) != 0;
+    features->x86.has_mmx = (cpuid_info[3] & (1 << 23)) != 0;
+    features->x86.has_sse = (cpuid_info[3] & (1 << 25)) != 0;
+    features->x86.has_sse2 = (cpuid_info[3] & (1 < 26)) != 0;
+    features->x86.has_tsc = (cpuid_info[3] & (1 << 4)) != 0;
+
+    features->x86.has_sse3 = (cpuid_info[2] & (1 << 0)) != 0;
+    features->x86.has_ssse3 = (cpuid_info[2] & (1 << 9)) != 0;
+    features->x86.has_sse41 = (cpuid_info[2] & (1 << 19)) != 0;
+    features->x86.has_sse42 = (cpuid_info[2] & (1 << 20)) != 0;
+    features->x86.has_movbe = (cpuid_info[2] & (1 << 22)) != 0;
+    features->x86.has_popcnt = (cpuid_info[2] & (1 << 23)) != 0;
+    features->x86.has_osxsave = (cpuid_info[2] & (1 << 27)) != 0;
+    features->x86.has_f16c = (cpuid_info[2] & (1 << 29)) != 0;
+    features->x86.has_fma3 = (cpuid_info[2] & (1 << 12)) != 0;
+    features->x86.has_aesni = (cpuid_info[2] & (1 << 25)) != 0;
+
+    // AVX instructions will generate an illegal instruction exception unless
+    //   a) they are supported by the CPU,
+    //   b) XSAVE is supported by the CPU and
+    //   c) XSAVE is enabled by the kernel.
+    // See http://software.intel.com/en-us/blogs/2011/04/14/is-avx-enabled
+    //
+    // In addition, we have observed some crashes with the xgetbv instruction
+    // even after following Intel's example code. (See crbug.com/375968.)
+    // Because of that, we also test the XSAVE bit because its description in
+    // the CPUID documentation suggests that it signals xgetbv support.
+    features->x86.has_avx =
+        (cpuid_info[2] & (1 << 28)) != 0 &&
+        (cpuid_info[2] & (1 << 26)) != 0 /* XSAVE */ &&
+        (cpuid_info[2] & (1 << 27)) != 0 /* OSXSAVE */ &&
+        (x86_xgetbv(0) & 6) == 6 /* XSAVE enabled by kernel */;
+  }
+
+  // Interpret CPU feature information of CPUID level 7.
+  if (num_ids >= 7) {
+    x86_cpuid(cpuid_info, 7);
+    features->x86.has_avx2 =
+        features->x86.has_avx && (cpuid_info[1] & (1 << 5)) != 0;
+    features->x86.has_avx512f =
+        features->x86.has_avx && (cpuid_info[1] & (1 << 16)) != 0;
+    features->x86.has_avx512dq =
+        features->x86.has_avx && (cpuid_info[1] & (1 << 17)) != 0;
+    features->x86.has_avx512ifma =
+        features->x86.has_avx && (cpuid_info[1] & (1 << 21)) != 0;
+    features->x86.has_avx512pf =
+        features->x86.has_avx && (cpuid_info[1] & (1 << 26)) != 0;
+    features->x86.has_avx512er =
+        features->x86.has_avx && (cpuid_info[1] & (1 << 27)) != 0;
+    features->x86.has_avx512cd =
+        features->x86.has_avx && (cpuid_info[1] & (1 << 28)) != 0;
+    features->x86.has_avx512bw =
+        features->x86.has_avx && (cpuid_info[1] & (1 << 30)) != 0;
+    features->x86.has_avx512vl =
+        features->x86.has_avx && (cpuid_info[1] & (1 << 31)) != 0;
+    features->x86.has_bmi1 = (cpuid_info[1] & (1 << 3)) != 0;
+    features->x86.has_bmi2 = (cpuid_info[1] & (1 << 8)) != 0;
+  }
+
+  // Query extended IDs.
+  x86_cpuid(cpuid_info, 0x80000000);
+  unsigned int num_ext_ids = cpuid_info[0];
+
+  // Interpret extended CPU feature information.
+  if (num_ext_ids > 0x80000000) {
+    // Interpret CPU feature information of CPUID level 0x80000001.
+    x86_cpuid(cpuid_info, 0x80000001);
+    features->x86.has_lzcnt = (cpuid_info[2] & (1 << 5)) != 0;
+    // SAHF must be probed in long mode.
+    features->x86.has_sahf = (cpuid_info[2] & (1 << 0)) != 0;
+  }
+
+  return true;
+}
+#endif
+
 }  // namespace
 
-// TODO: Only ARM is currently implemented and tested
+// TODO: Only ARM/ARM64 and X86/X86_64 are currently implemented and tested
 bool SbCPUFeaturesGet(SbCPUFeatures* features) {
 #if SB_IS(ARCH_ARM)
   return SbCPUFeaturesGet_ARM(features);
+#elif SB_IS(ARCH_X86)
+  return SbCPUFeaturesGet_X86(features);
 #else
   SB_NOTIMPLEMENTED();
 
diff --git a/src/starboard/shared/linux/dev_input/dev_input.cc b/src/starboard/shared/linux/dev_input/dev_input.cc
index b051f00..4e76bb4 100644
--- a/src/starboard/shared/linux/dev_input/dev_input.cc
+++ b/src/starboard/shared/linux/dev_input/dev_input.cc
@@ -21,12 +21,15 @@
 #include <string.h>
 #include <sys/time.h>
 #include <unistd.h>
+#include <unordered_map>
 #include <vector>
 
 #include <algorithm>
 #include <cmath>
 #include <map>
+#include <memory>
 #include <string>
+#include <vector>
 
 #include "starboard/common/log.h"
 #include "starboard/common/string.h"
@@ -35,6 +38,7 @@
 #include "starboard/input.h"
 #include "starboard/key.h"
 #include "starboard/memory.h"
+#include "starboard/once.h"
 #include "starboard/shared/posix/handle_eintr.h"
 #include "starboard/shared/posix/time_internal.h"
 
@@ -60,15 +64,149 @@
   kTouchPadPositionAll = kTouchPadPositionX | kTouchPadPositionY
 };
 
+class ControllerTuning {
+ public:
+  ~ControllerTuning() {}
+
+  uint16_t GetKeyCode(uint16_t from);
+  void MapKeyCode(uint16_t from, uint16_t to) { key_map_[from] = to; }
+
+  float GetMinimumFlat() { return minimum_flat_; }
+  void SetMinimumFlat(float value) { minimum_flat_ = value; }
+
+ protected:
+  // Only create this object from DeviceMap::CreateControllerTuning()
+  ControllerTuning() {}
+
+ private:
+  std::unordered_map<int, int> key_map_;
+  float minimum_flat_ = 0;
+
+  friend class DeviceMap;
+};
+
+uint16_t ControllerTuning::GetKeyCode(uint16_t from) {
+  auto mapped_code = key_map_.find(from);
+  if (mapped_code != key_map_.end()) {
+    return mapped_code->second;
+  }
+  return from;
+}
+
+class DeviceMap {
+ public:
+  DeviceMap();
+  ~DeviceMap() = delete;
+
+  // Gets the singleton instance of the default DeviceMap. This
+  // is created the first time it is used.
+  static DeviceMap* Get();
+
+  // Return the controller tuning object for a given device. Return null if none
+  // is registered.
+  ControllerTuning* GetControllerTuning(const std::string& device) const;
+
+ private:
+  // Create a controllertuning object.
+  ControllerTuning* CreateControllerTuning();
+
+  // Register a controller tuning object for a given device.
+  void RegisterControllerTuning(const std::string& device,
+                                ControllerTuning* tuning);
+
+  std::unordered_map<std::string, ControllerTuning*> device_map_;
+
+  // Registry for all known controller tunings.
+  std::vector<std::unique_ptr<ControllerTuning>> controller_tunings_;
+};
+
+DeviceMap::DeviceMap() {
+  // Add key mappings for the Xbox controllers.
+  ControllerTuning* xbox_one_controller = CreateControllerTuning();
+  RegisterControllerTuning("Microsoft X-Box One S pad", xbox_one_controller);
+  RegisterControllerTuning("Microsoft X-Box One pad", xbox_one_controller);
+  RegisterControllerTuning("Microsoft X-Box 360 pad", xbox_one_controller);
+  xbox_one_controller->SetMinimumFlat(0.125);
+  xbox_one_controller->MapKeyCode(BTN_NORTH, BTN_WEST);  // Map for 'X'
+  xbox_one_controller->MapKeyCode(BTN_WEST, BTN_NORTH);  // Map for 'Y'
+  xbox_one_controller->MapKeyCode(BTN_TL, BTN_TL2);      // Map for left bumper.
+  xbox_one_controller->MapKeyCode(BTN_TR, BTN_TR2);  // Map for right bumper.
+
+  // Add key mappings for the PlayStation 4 controller.
+  ControllerTuning* ps4_controller = CreateControllerTuning();
+  RegisterControllerTuning("Sony Interactive Entertainment Wireless Controller",
+                           ps4_controller);
+  RegisterControllerTuning("Sony Computer Entertainment Wireless Controller",
+                           ps4_controller);
+  RegisterControllerTuning("Sony PLAYSTATION(R)3 Controller", ps4_controller);
+
+  ps4_controller->MapKeyCode(BTN_TL2, BTN_TL);  // Map for left trigger.
+  ps4_controller->MapKeyCode(BTN_TR2, BTN_TR);  // Map for right trigger.
+  ps4_controller->MapKeyCode(BTN_TL, BTN_TL2);  // Map for left bumper.
+  ps4_controller->MapKeyCode(BTN_TR, BTN_TR2);  // Map for right bumper.
+
+  // Add key mappings for the Horipad Switch wired controller.
+  ControllerTuning* switch_controller = CreateControllerTuning();
+  RegisterControllerTuning("HORI CO.,LTD. HORIPAD S", switch_controller);
+
+  switch_controller->MapKeyCode(BTN_C, BTN_SOUTH);     // Map for 'A'.
+  switch_controller->MapKeyCode(BTN_A, BTN_NORTH);     // Map for 'Y'.
+  switch_controller->MapKeyCode(BTN_NORTH, BTN_WEST);  // Map for 'X'.
+  switch_controller->MapKeyCode(BTN_WEST, BTN_TL2);    // Map for left bumper.
+  switch_controller->MapKeyCode(BTN_Z, BTN_TR2);       // Map for right bumper.
+
+  switch_controller->MapKeyCode(BTN_THUMBL, BTN_SELECT);  // Map for 'capture'.
+  switch_controller->MapKeyCode(BTN_MODE, KEY_HOME);      // Map for 'home'.
+
+  switch_controller->MapKeyCode(BTN_TL2, KEY_KPMINUS);  // Map for '-'.
+  switch_controller->MapKeyCode(BTN_TR2, KEY_KPPLUS);   // Map for '+'.
+
+  switch_controller->MapKeyCode(BTN_SELECT, BTN_THUMBL);  // Map for left hat.
+  switch_controller->MapKeyCode(BTN_START, BTN_THUMBR);   // Map for right hat.
+}
+
+void DeviceMap::RegisterControllerTuning(const std::string& device,
+                                         ControllerTuning* tuning) {
+  SB_DCHECK(GetControllerTuning(device) == NULL ||
+            GetControllerTuning(device) == tuning);
+  device_map_[device] = tuning;
+}
+
+ControllerTuning* DeviceMap::CreateControllerTuning() {
+  ControllerTuning* tuning = new ControllerTuning();
+  controller_tunings_.emplace_back(tuning);
+  return tuning;
+}
+
+ControllerTuning* DeviceMap::GetControllerTuning(
+    const std::string& device) const {
+  auto mapped_device = device_map_.find(device);
+  if (mapped_device != device_map_.end()) {
+    return mapped_device->second;
+  }
+  return NULL;
+}
+
+SB_ONCE_INITIALIZE_FUNCTION(DeviceMap, GetDeviceMap);
+
+DeviceMap* DeviceMap::Get() {
+  DeviceMap* device_map = GetDeviceMap();
+  return device_map;
+}
+
 struct InputDeviceInfo {
   InputDeviceInfo() : fd(-1), touchpad_position_state(kTouchPadPositionNone) {}
 
+  // Device Name
+  std::string name;
+
   // File descriptor open for the device
   FileDescriptor fd;
   // Absolute Axis info.
   std::map<int, struct input_absinfo> axis_info;
   std::map<int, float> axis_value;
   int touchpad_position_state;
+  ControllerTuning* tuning;
 };
 
 bool IsTouchpadPositionKnown(InputDeviceInfo* device_info) {
@@ -92,21 +230,22 @@
   // Converts an input_event into a kSbEventInput Application::Event. The caller
   // is responsible for deleting the returned event.
   Event* InputToApplicationEvent(const struct input_event& event,
-                                 InputDeviceInfo* device_info,
-                                 int modifiers);
+                                 int modifiers,
+                                 InputDeviceInfo* device_info);
 
   // Converts an input_event containing a key input into a kSbEventInput
   // Application::Event. The caller is responsible for deleting the returned
   // event.
   Event* KeyInputToApplicationEvent(const struct input_event& event,
-                                    int modifiers);
+                                    int modifiers,
+                                    InputDeviceInfo* device_info);
 
   // Converts an input_event containing an axis event into a kSbEventInput
   // Application::Event. The caller is responsible for deleting the returned
   // event.
   Event* AxisInputToApplicationEvent(const struct input_event& event,
-                                     InputDeviceInfo* device_info,
-                                     int modifiers);
+                                     int modifiers,
+                                     InputDeviceInfo* device_info);
 
   // The window to attribute /dev/input events to.
   SbWindow window_;
@@ -432,34 +571,28 @@
       return kSbKeyGamepadDPadLeft;
     case BTN_DPAD_RIGHT:
       return kSbKeyGamepadDPadRight;
-    // The mapping for the buttons below can vary from controller to controller.
-    // TODO: Include button mapping for controllers with different layout.
-    case BTN_B:
-      return kSbKeyGamepad1;
-    case BTN_C:
-      return kSbKeyGamepad2;
-    case BTN_A:
-      return kSbKeyGamepad3;
-    case BTN_X:
-      return kSbKeyGamepad4;
-    case BTN_Y:
-      return kSbKeyGamepadLeftBumper;
-    case BTN_Z:
-      return kSbKeyGamepadRightBumper;
     case BTN_TL2:
-      return kSbKeyGamepad5;
+      return kSbKeyGamepadLeftBumper;
     case BTN_TR2:
-      return kSbKeyGamepad6;
+      return kSbKeyGamepadRightBumper;
+    case BTN_SOUTH:
+      return kSbKeyGamepad1;
+    case BTN_EAST:
+      return kSbKeyGamepad2;
+    case BTN_WEST:
+      return kSbKeyGamepad3;
+    case BTN_NORTH:
+      return kSbKeyGamepad4;
     case BTN_SELECT:
-      return kSbKeyGamepadLeftStick;
+      return kSbKeyGamepad5;
     case BTN_START:
-      return kSbKeyGamepadRightStick;
+      return kSbKeyGamepad6;
     case BTN_MODE:
       return kSbKeyGamepadSystem;
     case BTN_THUMBL:
-      return kSbKeyGamepad1;
+      return kSbKeyGamepadLeftStick;
     case BTN_THUMBR:
-      return kSbKeyGamepad1;
+      return kSbKeyGamepadRightStick;
   }
   SB_DLOG(WARNING) << "Unknown code: 0x" << std::hex << code;
   return kSbKeyUnknown;
@@ -494,19 +627,26 @@
   return !!(bitset.at(bit / 8) & (1 << (bit % 8)));
 }
 
-bool IsAxisFlat(float median, const struct input_absinfo& axis_info) {
+bool IsAxisFlat(int minimum_flat,
+                float rest_value,
+                const struct input_absinfo& axis_info) {
   SB_DCHECK((axis_info.flat * 2) <= (axis_info.maximum - axis_info.minimum));
-  return (axis_info.flat != 0) && (axis_info.value > median - axis_info.flat) &&
-         (axis_info.value < median + axis_info.flat);
+  int flat = std::max(minimum_flat, axis_info.flat);
+  return (flat != 0) && (axis_info.value > rest_value - flat) &&
+         (axis_info.value < rest_value + flat);
 }
 
-float GetAxisValue(const struct input_absinfo& axis_info) {
+float GetAxisValue(bool is_trigger,
+                   float minimum_flat,
+                   const struct input_absinfo& axis_info) {
   float median =
       static_cast<float>(axis_info.maximum + axis_info.minimum) / 2.0f;
-  if (IsAxisFlat(median, axis_info))
-    return 0;
   float range = static_cast<float>(axis_info.maximum - axis_info.minimum);
   float radius = range / 2.0f;
+  if (IsAxisFlat(minimum_flat * radius, is_trigger ? axis_info.minimum : median,
+                 axis_info)) {
+    return is_trigger ? -1 : 0;
+  }
   // Scale the axis value to [-1, 1].
   float axis_value = (static_cast<float>(axis_info.value) - median) / radius;
 
@@ -532,11 +672,22 @@
       return;
     }
     info->axis_info.insert(std::make_pair(axis, axis_info));
-    info->axis_value.insert(std::make_pair(axis, GetAxisValue(axis_info)));
+    bool is_trigger = axis == ABS_Z || axis == ABS_RZ;
+    info->axis_value.insert(std::make_pair(
+        axis,
+        GetAxisValue(is_trigger, info->tuning->GetMinimumFlat(), axis_info)));
   }
 }
 
 void GetInputDeviceInfo(InputDeviceInfo* info) {
+  char device_name[1024];
+  if (ioctl(info->fd, EVIOCGNAME(sizeof(device_name)), device_name) >= 0) {
+    size_t length = strnlen(device_name, sizeof(device_name));
+    info->name.assign(device_name, length);
+  }
+
+  info->tuning = DeviceMap::Get()->GetControllerTuning(info->name);
+
   std::vector<uint8_t> axis_bits(BytesNeededForBitSet(KEY_MAX));
   int result =
       ioctl(info->fd, EVIOCGBIT(EV_ABS, axis_bits.size()), axis_bits.data());
@@ -811,7 +962,7 @@
       continue;
     }
 
-    return InputToApplicationEvent(event, &device, modifiers);
+    return InputToApplicationEvent(event, modifiers, &device);
   }
   return NULL;
 }
@@ -968,8 +1119,8 @@
 
 DevInput::Event* DevInputImpl::AxisInputToApplicationEvent(
     const struct input_event& event,
-    InputDeviceInfo* device_info,
-    int modifiers) {
+    int modifiers,
+    InputDeviceInfo* device_info) {
   SB_DCHECK(event.type == EV_ABS);
   SbKey key = kSbKeyUnknown;
   float axis_value = 0;
@@ -978,7 +1129,9 @@
   if (axis_info_it != device_info->axis_info.end()) {
     struct input_absinfo& axis_info = axis_info_it->second;
     axis_info.value = event.value;
-    axis_value = GetAxisValue(axis_info);
+    bool is_trigger = event.code == ABS_Z || event.code == ABS_RZ;
+    axis_value = GetAxisValue(is_trigger, device_info->tuning->GetMinimumFlat(),
+                              axis_info);
     float& stored_axis_value = device_info->axis_value[event.code];
     previous_axis_value = stored_axis_value;
     if (previous_axis_value == axis_value) {
@@ -1009,21 +1162,21 @@
       return CreateMoveEventWithKey(window_, key, location, modifiers,
                                     input_vector);
     }
-    case ABS_Z:
+    case ABS_RX:
       input_vector.x = axis_value;
       input_vector.y = device_info->axis_value[ABS_RZ];
       key = kSbKeyGamepadRightStickLeft;
       location = kSbKeyLocationRight;
       return CreateMoveEventWithKey(window_, key, location, modifiers,
                                     input_vector);
-    case ABS_RZ:
+    case ABS_RY:
       input_vector.x = device_info->axis_value[ABS_Z];
       input_vector.y = axis_value;
       key = kSbKeyGamepadRightStickUp;
       location = kSbKeyLocationRight;
       return CreateMoveEventWithKey(window_, key, location, modifiers,
                                     input_vector);
-    case ABS_RX: {
+    case ABS_Z: {
       key = kSbKeyGamepadLeftTrigger;
       location = kSbKeyLocationLeft;
       // For trigger buttons, the range is [0..1].
@@ -1033,7 +1186,7 @@
                                         previous_trigger_value, key, location,
                                         modifiers, event);
     }
-    case ABS_RY: {
+    case ABS_RZ: {
       key = kSbKeyGamepadRightTrigger;
       location = kSbKeyLocationRight;
       // For trigger buttons, the range is [0..1].
@@ -1120,9 +1273,18 @@
 
 DevInput::Event* DevInputImpl::KeyInputToApplicationEvent(
     const struct input_event& event,
-    int modifiers) {
+    int modifiers,
+    InputDeviceInfo* device_info) {
   SB_DCHECK(event.type == EV_KEY);
   SB_DCHECK(event.value <= 2);
+
+  SbKey key = KeyCodeToSbKey(device_info->tuning
+                                 ? device_info->tuning->GetKeyCode(event.code)
+                                 : event.code);
+  if (key == kSbKeyUnknown) {
+    return NULL;
+  }
+
   SbInputData* data = new SbInputData();
   SbMemorySet(data, 0, sizeof(*data));
 #if SB_API_VERSION >= 10
@@ -1133,7 +1295,7 @@
       (event.value == 0 ? kSbInputEventTypeUnpress : kSbInputEventTypePress);
   data->device_type = kSbInputDeviceTypeKeyboard;
   data->device_id = kKeyboardDeviceId;
-  data->key = KeyCodeToSbKey(event.code);
+  data->key = key;
   data->key_location = KeyCodeToSbKeyLocation(event.code);
   data->key_modifiers = modifiers;
   return new Event(kSbEventTypeInput, data,
@@ -1142,15 +1304,15 @@
 
 DevInput::Event* DevInputImpl::InputToApplicationEvent(
     const struct input_event& event,
-    InputDeviceInfo* device_info,
-    int modifiers) {
+    int modifiers,
+    InputDeviceInfo* device_info) {
   // EV_ABS events are axis values: Sticks, dpad, and touchpad.
   // https://www.kernel.org/doc/Documentation/input/event-codes.txt
   switch (event.type) {
     case EV_ABS:
-      return AxisInputToApplicationEvent(event, device_info, modifiers);
+      return AxisInputToApplicationEvent(event, modifiers, device_info);
     case EV_KEY:
-      return KeyInputToApplicationEvent(event, modifiers);
+      return KeyInputToApplicationEvent(event, modifiers, device_info);
   }
   return NULL;
 }
diff --git a/src/starboard/shared/starboard/audio_sink/audio_sink_get_min_buffer_size_in_frames.cc b/src/starboard/shared/starboard/audio_sink/audio_sink_get_min_buffer_size_in_frames.cc
new file mode 100644
index 0000000..6bbaf73
--- /dev/null
+++ b/src/starboard/shared/starboard/audio_sink/audio_sink_get_min_buffer_size_in_frames.cc
@@ -0,0 +1,37 @@
+// Copyright 2019 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "starboard/audio_sink.h"
+
+#include "starboard/common/log.h"
+
+int SbAudioSinkGetMinBufferSizeInFrames(int channels,
+                                        SbMediaAudioSampleType sample_type,
+                                        int sampling_frequency_hz) {
+  if (channels <= 0 || channels > SbAudioSinkGetMaxChannels()) {
+    SB_LOG(ERROR) << "Not support channels count " << channels;
+    return -1;
+  }
+  if (sample_type != kSbMediaAudioSampleTypeInt16Deprecated &&
+      sample_type != kSbMediaAudioSampleTypeFloat32) {
+    SB_LOG(ERROR) << "Not support sample type " << sample_type;
+    return -1;
+  }
+  if (sampling_frequency_hz <= 0) {
+    SB_LOG(ERROR) << "Not support sample frequency " << sampling_frequency_hz;
+    return -1;
+  }
+
+  return 8 * 1024;
+}
diff --git a/src/starboard/shared/starboard/media/media_is_audio_supported_aac_and_opus.cc b/src/starboard/shared/starboard/media/media_is_audio_supported_aac_and_opus.cc
index 9772e30..e137651 100644
--- a/src/starboard/shared/starboard/media/media_is_audio_supported_aac_and_opus.cc
+++ b/src/starboard/shared/starboard/media/media_is_audio_supported_aac_and_opus.cc
@@ -23,11 +23,9 @@
     return bitrate <= SB_MEDIA_MAX_AUDIO_BITRATE_IN_BITS_PER_SECOND;
   }
 
-#if SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER)
   if (audio_codec == kSbMediaAudioCodecOpus) {
     return bitrate <= SB_MEDIA_MAX_AUDIO_BITRATE_IN_BITS_PER_SECOND;
   }
-#endif  // SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER)
 
   return false;
 }
diff --git a/src/starboard/shared/starboard/player/filter/audio_renderer_internal.cc b/src/starboard/shared/starboard/player/filter/audio_renderer_internal.cc
index 996f9aa..8d4695e 100644
--- a/src/starboard/shared/starboard/player/filter/audio_renderer_internal.cc
+++ b/src/starboard/shared/starboard/player/filter/audio_renderer_internal.cc
@@ -80,6 +80,10 @@
       process_audio_data_job_(
           std::bind(&AudioRenderer::ProcessAudioData, this)),
       audio_renderer_sink_(audio_renderer_sink.Pass()) {
+  SB_DLOG(INFO) << "Creating AudioRenderer with " << channels_ << " channels, "
+                << bytes_per_frame_ << " bytes per frame, "
+                << max_cached_frames_ << " max cached frames, and "
+                << max_frames_per_append_ << " max frames per append.";
   SB_DCHECK(decoder_ != NULL);
   SB_DCHECK(max_frames_per_append_ > 0);
   SB_DCHECK(max_cached_frames_ >= max_frames_per_append_ * 2);
@@ -93,6 +97,10 @@
 }
 
 AudioRenderer::~AudioRenderer() {
+  SB_DLOG(INFO) << "Destroying AudioRenderer with " << channels_
+                << " channels, " << bytes_per_frame_ << " bytes per frame, "
+                << max_cached_frames_ << " max cached frames, and "
+                << max_frames_per_append_ << " max frames per append.";
   SB_DCHECK(BelongsToCurrentThread());
 }
 
@@ -470,7 +478,8 @@
       total_frames_consumed_by_sink_ - silence_frames_consumed_on_sink_thread_);
   underflow_ |=
       frames_in_buffer_on_sink_thread_ < kFramesInBufferBeginUnderflow;
-  if (is_eos_reached_on_sink_thread_) {
+  if (is_eos_reached_on_sink_thread_ ||
+      frames_in_buffer_on_sink_thread_ >= buffered_frames_to_start_) {
     underflow_ = false;
   }
   is_playing_on_sink_thread_ = !paused_ && !seeking_ && !underflow_;
@@ -494,6 +503,9 @@
   time_stretcher_.Initialize(sink_sample_type_, channels_,
                              destination_sample_rate);
 
+  // Start play after have enough buffered frames to play 0.2s.
+  buffered_frames_to_start_ = destination_sample_rate * 0.2;
+
   SbMediaAudioSampleType source_sample_type = decoder_->GetSampleType();
   SbMediaAudioFrameStorageType source_storage_type = decoder_->GetStorageType();
 
@@ -656,7 +668,6 @@
       seeking_ = false;
       Schedule(prerolled_cb_);
     }
-    underflow_ = false;
   }
 
   if (seeking_ || playback_rate_ == 0.0) {
diff --git a/src/starboard/shared/starboard/player/filter/audio_renderer_internal.h b/src/starboard/shared/starboard/player/filter/audio_renderer_internal.h
index ef27230..43be250 100644
--- a/src/starboard/shared/starboard/player/filter/audio_renderer_internal.h
+++ b/src/starboard/shared/starboard/player/filter/audio_renderer_internal.h
@@ -104,6 +104,9 @@
 
   const int max_cached_frames_;
   const int max_frames_per_append_;
+  // |buffered_frames_to_start_| would be initialized in OnFirstOutput().
+  // Before it's initialized, set it to a large number.
+  int buffered_frames_to_start_ = 48 * 1024;
 
   ErrorCB error_cb_;
   PrerolledCB prerolled_cb_;
diff --git a/src/starboard/shared/starboard/player/filter/filter_based_player_worker_handler.cc b/src/starboard/shared/starboard/player/filter/filter_based_player_worker_handler.cc
index 1f2d675..6f5593e 100644
--- a/src/starboard/shared/starboard/player/filter/filter_based_player_worker_handler.cc
+++ b/src/starboard/shared/starboard/player/filter/filter_based_player_worker_handler.cc
@@ -65,7 +65,6 @@
   if (audio_codec != kSbMediaAudioCodecNone) {
     audio_sample_info_ = *audio_sample_info;
 
-#if SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER)
     if (audio_sample_info_.audio_specific_config_size > 0) {
       audio_specific_config_.reset(
           new int8_t[audio_sample_info_.audio_specific_config_size]);
@@ -74,7 +73,6 @@
                    audio_sample_info->audio_specific_config_size);
       audio_sample_info_.audio_specific_config = audio_specific_config_.get();
     }
-#endif  // SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER)
   }
 
   update_job_ = std::bind(&FilterBasedPlayerWorkerHandler::Update, this);
diff --git a/src/starboard/shared/starboard/player/filter/filter_based_player_worker_handler.h b/src/starboard/shared/starboard/player/filter/filter_based_player_worker_handler.h
index 3328ce6..e8c4d69 100644
--- a/src/starboard/shared/starboard/player/filter/filter_based_player_worker_handler.h
+++ b/src/starboard/shared/starboard/player/filter/filter_based_player_worker_handler.h
@@ -88,11 +88,9 @@
   SbMediaVideoCodec video_codec_;
   SbMediaAudioCodec audio_codec_;
   SbDrmSystem drm_system_;
-#if SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER)
   // Store a copy of |SbMediaAudioSampleInfo::audio_specific_config| passed to
   // the ctor so it is valid for the life time of the player worker.
   scoped_array<int8_t> audio_specific_config_;
-#endif  // SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER)
   SbMediaAudioSampleInfo audio_sample_info_;
 
   // |media_time_provider_impl_| is used to provide the media playback time when
diff --git a/src/starboard/shared/starboard/player/filter/testing/audio_decoder_test.cc b/src/starboard/shared/starboard/player/filter/testing/audio_decoder_test.cc
index 9b8e5ce..737c399 100644
--- a/src/starboard/shared/starboard/player/filter/testing/audio_decoder_test.cc
+++ b/src/starboard/shared/starboard/player/filter/testing/audio_decoder_test.cc
@@ -16,6 +16,7 @@
 
 #include <deque>
 #include <functional>
+#include <map>
 
 #include "starboard/common/condition_variable.h"
 #include "starboard/common/mutex.h"
@@ -147,7 +148,6 @@
       SbThreadSleep(kSbTimeMillisecond);
     }
     *event = kError;
-    FAIL();
   }
 
   // TODO: Add test to ensure that |consumed_cb| is not reused by the decoder.
@@ -165,8 +165,6 @@
 
     last_input_buffer_ = GetAudioInputBuffer(index);
 
-    outstanding_inputs_.insert(last_input_buffer_->timestamp());
-
     audio_decoder_->Decode(last_input_buffer_, consumed_cb());
   }
 
@@ -190,10 +188,15 @@
   }
 
   void WriteMultipleInputs(size_t start_index,
-                           size_t number_of_inputs_to_write) {
+                           size_t number_of_inputs_to_write,
+                           bool* error_occurred = NULL) {
     ASSERT_LE(start_index + number_of_inputs_to_write,
               dmp_reader_.number_of_audio_buffers());
 
+    if (error_occurred) {
+      *error_occurred = false;
+    }
+
     ASSERT_NO_FATAL_FAILURE(WriteSingleInput(start_index));
     ++start_index;
     --number_of_inputs_to_write;
@@ -207,6 +210,11 @@
         --number_of_inputs_to_write;
         continue;
       }
+      if (event == kError) {
+        ASSERT_TRUE(error_occurred);
+        *error_occurred = true;
+        return;
+      }
       ASSERT_EQ(kOutput, event);
       scoped_refptr<DecodedAudio> decoded_audio;
       ASSERT_NO_FATAL_FAILURE(ReadFromDecoder(&decoded_audio));
@@ -281,7 +289,6 @@
     can_accept_more_input_ = true;
     last_input_buffer_ = NULL;
     last_decoded_audio_ = NULL;
-    outstanding_inputs_.clear();
     eos_written_ = false;
   }
 
@@ -304,14 +311,27 @@
     auto player_sample_info =
         dmp_reader_.GetPlayerSampleInfo(kSbMediaTypeAudio, index);
 #if SB_API_VERSION >= 11
-    return new InputBuffer(DeallocateSampleFunc, NULL, NULL,
-                           player_sample_info);
+    auto input_buffer =
+        new InputBuffer(DeallocateSampleFunc, NULL, NULL, player_sample_info);
 #else   // SB_API_VERSION >= 11
     SbMediaAudioSampleInfo audio_sample_info =
         dmp_reader_.GetAudioSampleInfo(index);
-    return new InputBuffer(kSbMediaTypeAudio, DeallocateSampleFunc, NULL, NULL,
-                           player_sample_info, &audio_sample_info);
+    auto input_buffer =
+        new InputBuffer(kSbMediaTypeAudio, DeallocateSampleFunc, NULL, NULL,
+                        player_sample_info, &audio_sample_info);
 #endif  // SB_API_VERSION >= 11
+    auto iter = invalid_inputs_.find(index);
+    if (iter != invalid_inputs_.end()) {
+      std::vector<uint8_t> content(input_buffer->size(), iter->second);
+      // Replace the content with invalid data.
+      input_buffer->SetDecryptedContent(content.data(),
+                                        static_cast<int>(content.size()));
+    }
+    return input_buffer;
+  }
+
+  void UseInvalidDataForInput(size_t index, uint8_t byte_to_fill) {
+    invalid_inputs_[index] = byte_to_fill;
   }
 
   void WriteEndOfStream() {
@@ -355,11 +375,9 @@
   scoped_refptr<InputBuffer> last_input_buffer_;
   scoped_refptr<DecodedAudio> last_decoded_audio_;
 
-  // List of timestamps of InputBuffers provided to the Decoder so far, sorted
-  // in ascending order.
-  std::set<SbTime> outstanding_inputs_;
-
   bool eos_written_ = false;
+
+  std::map<size_t, uint8_t> invalid_inputs_;
 };
 
 TEST_P(AudioDecoderTest, ThreeMoreDecoders) {
@@ -414,24 +432,48 @@
 }
 
 TEST_P(AudioDecoderTest, SingleInvalidInput) {
-  can_accept_more_input_ = false;
-  last_input_buffer_ = GetAudioInputBuffer(0);
-  std::vector<uint8_t> content(last_input_buffer_->size(), 0xab);
-  // Replace the content with invalid data.
-  last_input_buffer_->SetDecryptedContent(content.data(),
-                                          static_cast<int>(content.size()));
-  audio_decoder_->Decode(last_input_buffer_, consumed_cb());
+  UseInvalidDataForInput(0, 0xab);
 
+  WriteSingleInput(0);
   WriteEndOfStream();
 
-  bool error_occurred = false;
+  bool error_occurred = true;
   ASSERT_NO_FATAL_FAILURE(DrainOutputs(&error_occurred));
-  // The decoder is allowed to either signal an error or return dummy audio
-  // data but not both.
-  if (error_occurred) {
-    ASSERT_FALSE(last_decoded_audio_);
-  } else {
-    ASSERT_TRUE(last_decoded_audio_);
+}
+
+TEST_P(AudioDecoderTest, MultipleValidInputsAfterInvalidInput) {
+  const size_t kMaxNumberOfInputToWrite = 10;
+  const size_t number_of_input_to_write =
+      std::min(kMaxNumberOfInputToWrite, dmp_reader_.number_of_audio_buffers());
+
+  UseInvalidDataForInput(0, 0xab);
+
+  bool error_occurred = true;
+  // Write first few frames.  The first one is invalid and the rest are valid.
+  WriteMultipleInputs(0, number_of_input_to_write, &error_occurred);
+
+  if (!error_occurred) {
+    WriteEndOfStream();
+    ASSERT_NO_FATAL_FAILURE(DrainOutputs(&error_occurred));
+  }
+}
+
+TEST_P(AudioDecoderTest, MultipleInvalidInput) {
+  const size_t kMaxNumberOfInputToWrite = 128;
+  const size_t number_of_input_to_write =
+      std::min(kMaxNumberOfInputToWrite, dmp_reader_.number_of_audio_buffers());
+  // Replace the content of the first few input buffers with invalid data.
+  // Every test instance loads its own copy of data so this won't affect other
+  // tests.
+  for (size_t i = 0; i < number_of_input_to_write; ++i) {
+    UseInvalidDataForInput(i, static_cast<uint8_t>(0xab + i));
+  }
+
+  bool error_occurred = true;
+  WriteMultipleInputs(0, number_of_input_to_write, &error_occurred);
+  if (!error_occurred) {
+    WriteEndOfStream();
+    ASSERT_NO_FATAL_FAILURE(DrainOutputs(&error_occurred));
   }
 }
 
diff --git a/src/starboard/shared/starboard/player/filter/testing/video_decoder_test.cc b/src/starboard/shared/starboard/player/filter/testing/video_decoder_test.cc
index c977332..e19d7b6 100644
--- a/src/starboard/shared/starboard/player/filter/testing/video_decoder_test.cc
+++ b/src/starboard/shared/starboard/player/filter/testing/video_decoder_test.cc
@@ -113,7 +113,8 @@
         output_mode_(std::get<0>(GetParam()).output_mode),
         using_stub_decoder_(std::get<1>(GetParam())),
         dmp_reader_(ResolveTestFileName(test_filename_).c_str()) {
-    SB_LOG(INFO) << "Testing " << test_filename_
+    SB_LOG(INFO) << "Testing " << test_filename_ << ", output mode "
+                 << output_mode_
                  << (using_stub_decoder_ ? " with stub video decoder." : ".");
   }
 
@@ -198,7 +199,8 @@
   enum Status {
     kNeedMoreInput = VideoDecoder::kNeedMoreInput,
     kBufferFull = VideoDecoder::kBufferFull,
-    kError
+    kError,
+    kTimeout
   };
 
   struct Event {
@@ -242,8 +244,7 @@
       }
       SbThreadSleep(kSbTimeMillisecond);
     }
-    event->status = kError;
-    FAIL();
+    event->status = kTimeout;
   }
 
   bool HasPendingEvents() {
@@ -314,7 +315,7 @@
         ASSERT_NO_FATAL_FAILURE(WriteSingleInput(start_index));
         ++start_index;
         --number_of_inputs_to_write;
-      } else if (event.status == kError) {
+      } else if (event.status == kError || event.status == kTimeout) {
         // Assume that the caller does't expect an error when |event_cb| isn't
         // provided.
         ASSERT_TRUE(event_cb);
@@ -356,7 +357,7 @@
     while (!end_of_stream_decoded) {
       Event event;
       ASSERT_NO_FATAL_FAILURE(WaitForNextEvent(&event));
-      if (event.status == kError) {
+      if (event.status == kError || event.status == kTimeout) {
         if (error_occurred) {
           *error_occurred = true;
         } else {
@@ -591,7 +592,10 @@
   ASSERT_NO_FATAL_FAILURE(DrainOutputs(
       &error_occurred, [=](const Event& event, bool* continue_process) {
         if (event.frame) {
-          AssertValidDecodeTargetWhenSupported();
+          // TODO: On some platforms, decode texture will be ready only after
+          // rendered by renderer, so decode target is not always available
+          // at this point. We should provide a mock renderer and then check
+          // the decode target here with AssertValidDecodeTargetWhenSupported().
         }
         *continue_process = true;
       }));
@@ -619,19 +623,23 @@
   UseInvalidDataForInput(0, 0xab);
 
   bool error_occurred = false;
-
+  bool timeout_occurred = false;
   // Write first few frames.  The first one is invalid and the rest are valid.
   WriteMultipleInputs(0, number_of_input_to_write,
                       [&](const Event& event, bool* continue_process) {
+                        if (event.status == kTimeout) {
+                          timeout_occurred = true;
+                          *continue_process = false;
+                          return;
+                        }
                         if (event.status == kError) {
                           error_occurred = true;
                           *continue_process = false;
                           return;
                         }
-
                         *continue_process = event.status != kBufferFull;
                       });
-
+  ASSERT_FALSE(timeout_occurred);
   if (!error_occurred) {
     GetDecodeTargetWhenSupported();
     WriteEndOfStream();
@@ -654,8 +662,14 @@
   }
 
   bool error_occurred = false;
+  bool timeout_occurred = false;
   WriteMultipleInputs(0, number_of_input_to_write,
                       [&](const Event& event, bool* continue_process) {
+                        if (event.status == kTimeout) {
+                          timeout_occurred = true;
+                          *continue_process = false;
+                          return;
+                        }
                         if (event.status == kError) {
                           error_occurred = true;
                           *continue_process = false;
@@ -664,7 +678,7 @@
 
                         *continue_process = event.status != kBufferFull;
                       });
-
+  ASSERT_FALSE(timeout_occurred);
   if (!error_occurred) {
     GetDecodeTargetWhenSupported();
     WriteEndOfStream();
@@ -692,21 +706,34 @@
 
 TEST_P(VideoDecoderTest, ResetAfterInput) {
   const size_t kMaxInputToWrite = 10;
-  WriteMultipleInputs(0, kMaxInputToWrite,
-                      [](const Event& event, bool* continue_process) {
-                        *continue_process = event.status != kBufferFull;
-                      });
-
+  bool error_occurred = false;
+  WriteMultipleInputs(
+      0, kMaxInputToWrite, [&](const Event& event, bool* continue_process) {
+        if (event.status == kTimeout || event.status == kError) {
+          error_occurred = true;
+          *continue_process = false;
+          return;
+        }
+        *continue_process = event.status != kBufferFull;
+      });
+  ASSERT_FALSE(error_occurred);
   ResetDecoderAndClearPendingEvents();
   EXPECT_FALSE(HasPendingEvents());
 }
 
 TEST_P(VideoDecoderTest, MultipleResets) {
   for (int max_inputs = 1; max_inputs < 10; ++max_inputs) {
-    WriteMultipleInputs(0, max_inputs,
-                        [](const Event& event, bool* continue_process) {
-                          *continue_process = event.status != kBufferFull;
-                        });
+    bool error_occurred = false;
+    WriteMultipleInputs(
+        0, max_inputs, [&](const Event& event, bool* continue_process) {
+          if (event.status == kTimeout || event.status == kError) {
+            error_occurred = true;
+            *continue_process = false;
+            return;
+          }
+          *continue_process = event.status != kBufferFull;
+        });
+    ASSERT_FALSE(error_occurred);
     ResetDecoderAndClearPendingEvents();
     EXPECT_FALSE(HasPendingEvents());
     WriteSingleInput(0);
@@ -722,14 +749,20 @@
   const size_t number_of_expected_decoded_frames = std::min(
       kMaxNumberOfExpectedDecodedFrames, dmp_reader_.number_of_video_buffers());
   size_t frames_decoded = 0;
+  bool error_occurred = false;
   ASSERT_NO_FATAL_FAILURE(WriteMultipleInputs(
       0, dmp_reader_.number_of_video_buffers(),
       [&](const Event& event, bool* continue_process) {
-        SB_UNREFERENCED_PARAMETER(event);
+        if (event.status == kTimeout || event.status == kError) {
+          error_occurred = true;
+          *continue_process = false;
+          return;
+        }
         frames_decoded += decoded_frames_.size();
         decoded_frames_.clear();
         *continue_process = frames_decoded < number_of_expected_decoded_frames;
       }));
+  ASSERT_FALSE(error_occurred);
   if (frames_decoded < number_of_expected_decoded_frames) {
     WriteEndOfStream();
     ASSERT_NO_FATAL_FAILURE(DrainOutputs());
@@ -739,39 +772,51 @@
 TEST_P(VideoDecoderTest, Preroll) {
   SbTimeMonotonic start = SbTimeGetMonotonicNow();
   SbTime preroll_timeout = video_decoder_->GetPrerollTimeout();
+  bool error_occurred = false;
   ASSERT_NO_FATAL_FAILURE(WriteMultipleInputs(
       0, dmp_reader_.number_of_video_buffers(),
-      [=](const Event& event, bool* continue_process) {
-        SB_UNREFERENCED_PARAMETER(event);
+      [&](const Event& event, bool* continue_process) {
+        if (event.status == kError) {
+          error_occurred = true;
+          *continue_process = false;
+          return;
+        }
         if (decoded_frames_.size() >= video_decoder_->GetPrerollFrameCount()) {
           *continue_process = false;
           return;
         }
         if (SbTimeGetMonotonicNow() - start >= preroll_timeout) {
+          // After preroll timeout, we should get at least 1 decoded frame.
+          ASSERT_GT(decoded_frames_.size(), 0);
           *continue_process = false;
           return;
         }
         *continue_process = true;
         return;
       }));
+  ASSERT_FALSE(error_occurred);
 }
 
 TEST_P(VideoDecoderTest, HoldFramesUntilFull) {
+  bool error_occurred = false;
   ASSERT_NO_FATAL_FAILURE(WriteMultipleInputs(
       0, dmp_reader_.number_of_video_buffers(),
-      [=](const Event& event, bool* continue_process) {
-        SB_UNREFERENCED_PARAMETER(event);
+      [&](const Event& event, bool* continue_process) {
+        if (event.status == kTimeout || event.status == kError) {
+          error_occurred = true;
+          *continue_process = false;
+          return;
+        }
         *continue_process = decoded_frames_.size() <
                             video_decoder_->GetMaxNumberOfCachedFrames();
       }));
+  ASSERT_FALSE(error_occurred);
   WriteEndOfStream();
   if (decoded_frames_.size() >= video_decoder_->GetMaxNumberOfCachedFrames()) {
     return;
   }
-  bool error_occurred = false;
   ASSERT_NO_FATAL_FAILURE(DrainOutputs(
       &error_occurred, [=](const Event& event, bool* continue_process) {
-        SB_UNREFERENCED_PARAMETER(event);
         *continue_process = decoded_frames_.size() <
                             video_decoder_->GetMaxNumberOfCachedFrames();
       }));
@@ -786,24 +831,27 @@
     }
     ++gop_size;
   }
-
+  bool error_occurred = false;
   ASSERT_NO_FATAL_FAILURE(WriteMultipleInputs(
-      0, gop_size, [=](const Event& event, bool* continue_process) {
-        SB_UNREFERENCED_PARAMETER(event);
-        while (decoded_frames_.size() >=
-               video_decoder_->GetPrerollFrameCount()) {
+      0, gop_size, [&](const Event& event, bool* continue_process) {
+        if (event.status == kTimeout || event.status == kError) {
+          error_occurred = true;
+          *continue_process = false;
+          return;
+        }
+        // Keep 1 decoded frame, assuming it's used by renderer.
+        while (decoded_frames_.size() > 1) {
           decoded_frames_.pop_front();
         }
         *continue_process = true;
       }));
+  ASSERT_FALSE(error_occurred);
   WriteEndOfStream();
 
-  bool error_occurred = true;
   ASSERT_NO_FATAL_FAILURE(DrainOutputs(
       &error_occurred, [=](const Event& event, bool* continue_process) {
-        SB_UNREFERENCED_PARAMETER(event);
-        while (decoded_frames_.size() >=
-               video_decoder_->GetMaxNumberOfCachedFrames()) {
+        // Keep 1 decoded frame, assuming it's used by renderer.
+        while (decoded_frames_.size() > 1) {
           decoded_frames_.pop_front();
         }
         *continue_process = true;
diff --git a/src/starboard/shared/starboard/player/filter/video_render_algorithm_impl.cc b/src/starboard/shared/starboard/player/filter/video_render_algorithm_impl.cc
index a5f7002..afa527c 100644
--- a/src/starboard/shared/starboard/player/filter/video_render_algorithm_impl.cc
+++ b/src/starboard/shared/starboard/player/filter/video_render_algorithm_impl.cc
@@ -90,13 +90,13 @@
     if (frames->front()->timestamp() != last_frame_timestamp_) {
 #if SB_PLAYER_FILTER_ENABLE_STATE_CHECK
       auto now = SbTimeGetMonotonicNow();
-      SB_LOG(ERROR) << "Dropping frame @ " << frames->front()->timestamp()
-                    << " microseconds, the elasped media time/system time from"
-                    << " last Render() call are "
-                    << media_time - media_time_of_last_render_call_ << "/"
-                    << now - system_time_of_last_render_call_
-                    << " microseconds, with " << frames->size()
-                    << " frames in the backlog.";
+      SB_LOG(WARNING)
+          << "Dropping frame @ " << frames->front()->timestamp()
+          << " microseconds, the elasped media time/system time from"
+          << " last Render() call are "
+          << media_time - media_time_of_last_render_call_ << "/"
+          << now - system_time_of_last_render_call_ << " microseconds, with "
+          << frames->size() << " frames in the backlog.";
 #endif  // SB_PLAYER_FILTER_ENABLE_STATE_CHECK
       ++dropped_frames_;
     }
diff --git a/src/starboard/shared/starboard/player/input_buffer_internal.cc b/src/starboard/shared/starboard/player/input_buffer_internal.cc
index 48d7ed4..c757c6d 100644
--- a/src/starboard/shared/starboard/player/input_buffer_internal.cc
+++ b/src/starboard/shared/starboard/player/input_buffer_internal.cc
@@ -100,8 +100,9 @@
   DeallocateSampleBuffer(data_);
 
   if (size > 0) {
-    flattened_data_.resize(size);
-    SbMemoryCopy(flattened_data_.data(), buffer, size);
+    flattened_data_.clear();
+    flattened_data_.assign(static_cast<const uint8_t*>(buffer),
+                           static_cast<const uint8_t*>(buffer) + size);
     data_ = flattened_data_.data();
   } else {
     data_ = NULL;
diff --git a/src/starboard/shared/starboard/player/player_internal.cc b/src/starboard/shared/starboard/player/player_internal.cc
index ebbba98..7312db7 100644
--- a/src/starboard/shared/starboard/player/player_internal.cc
+++ b/src/starboard/shared/starboard/player/player_internal.cc
@@ -71,6 +71,8 @@
       this, context));
 
   ++number_of_players_;
+  SB_DLOG(INFO) << "Creating SbPlayerPrivate. There are " << number_of_players_
+                << " players.";
 }
 
 // static
diff --git a/src/starboard/shared/starboard/player/player_internal.h b/src/starboard/shared/starboard/player/player_internal.h
index e6e713e..9cadbb7 100644
--- a/src/starboard/shared/starboard/player/player_internal.h
+++ b/src/starboard/shared/starboard/player/player_internal.h
@@ -62,7 +62,11 @@
 
   SbDecodeTarget GetCurrentDecodeTarget();
 
-  ~SbPlayerPrivate() { --number_of_players_; }
+  ~SbPlayerPrivate() {
+    --number_of_players_;
+    SB_DLOG(INFO) << "Destroying SbPlayerPrivate. There are "
+                  << number_of_players_ << " players.";
+  }
 
   static int number_of_players() { return number_of_players_; }
 
diff --git a/src/starboard/shared/starboard/player/video_dmp_common.cc b/src/starboard/shared/starboard/player/video_dmp_common.cc
index 2770b9b..1a97ed8 100644
--- a/src/starboard/shared/starboard/player/video_dmp_common.cc
+++ b/src/starboard/shared/starboard/player/video_dmp_common.cc
@@ -108,16 +108,8 @@
        &audio_sample_info->audio_specific_config_size);
   audio_sample_info->stored_audio_specific_config.resize(
       audio_sample_info->audio_specific_config_size);
-#if SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER)
   audio_sample_info->audio_specific_config =
       audio_sample_info->stored_audio_specific_config.data();
-#else   // SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER)
-  SB_DCHECK(sizeof(audio_sample_info->audio_specific_config) >=
-            audio_sample_info->stored_audio_specific_config.size());
-  SbMemoryCopy(audio_sample_info->audio_specific_config,
-               audio_sample_info->stored_audio_specific_config.data(),
-               audio_sample_info->stored_audio_specific_config.size());
-#endif  // SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER)
   Read(read_cb, audio_sample_info->stored_audio_specific_config.data(),
        audio_sample_info->audio_specific_config_size);
 }
diff --git a/src/starboard/shared/starboard/player/video_dmp_common.h b/src/starboard/shared/starboard/player/video_dmp_common.h
index a6a8d44..5625142 100644
--- a/src/starboard/shared/starboard/player/video_dmp_common.h
+++ b/src/starboard/shared/starboard/player/video_dmp_common.h
@@ -76,13 +76,7 @@
   SbMediaAudioSampleInfoWithConfig(const SbMediaAudioSampleInfoWithConfig& that)
       : SbMediaAudioSampleInfo(that),
         stored_audio_specific_config(that.stored_audio_specific_config) {
-#if SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER)
     audio_specific_config = stored_audio_specific_config.data();
-#else   // SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER)
-    SB_DCHECK(8 >= stored_audio_specific_config.size());
-    SbMemoryCopy(audio_specific_config, stored_audio_specific_config.data(),
-                 stored_audio_specific_config.size());
-#endif  // SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER)
   }
   void operator=(const SbMediaAudioSampleInfoWithConfig& that) = delete;
 
diff --git a/src/cobalt/dom/c_val_key_list.idl b/src/starboard/shared/stub/audio_sink_get_min_buffer_size_in_frames.cc
similarity index 62%
rename from src/cobalt/dom/c_val_key_list.idl
rename to src/starboard/shared/stub/audio_sink_get_min_buffer_size_in_frames.cc
index ffe9013..f64f8ec 100644
--- a/src/cobalt/dom/c_val_key_list.idl
+++ b/src/starboard/shared/stub/audio_sink_get_min_buffer_size_in_frames.cc
@@ -1,4 +1,4 @@
-// Copyright 2016 The Cobalt Authors. All Rights Reserved.
+// Copyright 2019 The Cobalt Authors. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -12,9 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-[ArrayClass]
-interface CValKeyList {
-  getter DOMString? item(unsigned long index);
-  readonly attribute unsigned long length;
-  long indexOf(DOMString key);
-};
+#include "starboard/audio_sink.h"
+
+int SbAudioSinkGetMinBufferSizeInFrames(int /*channels*/,
+                                        SbMediaAudioSampleType /*sample_type*/,
+                                        int /*sampling_frequency_hz*/) {
+  return 8 * 1024;
+}
diff --git a/src/starboard/shared/stub/drm_create_system.cc b/src/starboard/shared/stub/drm_create_system.cc
index b384a3f..5d8628f 100644
--- a/src/starboard/shared/stub/drm_create_system.cc
+++ b/src/starboard/shared/stub/drm_create_system.cc
@@ -52,7 +52,7 @@
   return kSbDrmSystemInvalid;
 }
 
-#elif SB_HAS(DRM_KEY_STATUSES)
+#else  // SB_HAS(DRM_SESSION_CLOSED)
 
 SbDrmSystem SbDrmCreateSystem(
     const char* key_system,
@@ -68,18 +68,4 @@
   return kSbDrmSystemInvalid;
 }
 
-#else  // SB_API_VERSION >= 10
-
-SbDrmSystem SbDrmCreateSystem(
-    const char* key_system,
-    void* context,
-    SbDrmSessionUpdateRequestFunc update_request_callback,
-    SbDrmSessionUpdatedFunc session_updated_callback) {
-  SB_UNREFERENCED_PARAMETER(context);
-  SB_UNREFERENCED_PARAMETER(key_system);
-  SB_UNREFERENCED_PARAMETER(update_request_callback);
-  SB_UNREFERENCED_PARAMETER(session_updated_callback);
-  return kSbDrmSystemInvalid;
-}
-
-#endif  // SB_API_VERSION >= 10
+#endif  // SB_HAS(DRM_SESSION_CLOSED)
diff --git a/src/starboard/shared/stub/image_decode.cc b/src/starboard/shared/stub/image_decode.cc
index 42369db..e3a2043 100644
--- a/src/starboard/shared/stub/image_decode.cc
+++ b/src/starboard/shared/stub/image_decode.cc
@@ -15,10 +15,6 @@
 #include "starboard/configuration.h"
 #include "starboard/image.h"
 
-#if !SB_HAS(GRAPHICS)
-#error "SbImageDecode requires SB_HAS(GRAPHICS)."
-#endif
-
 SbDecodeTarget SbImageDecode(SbDecodeTargetGraphicsContextProvider* provider,
                              void* data,
                              int data_size,
diff --git a/src/starboard/shared/stub/image_is_decode_supported.cc b/src/starboard/shared/stub/image_is_decode_supported.cc
index 984a139..9e04d60 100644
--- a/src/starboard/shared/stub/image_is_decode_supported.cc
+++ b/src/starboard/shared/stub/image_is_decode_supported.cc
@@ -15,10 +15,6 @@
 #include "starboard/configuration.h"
 #include "starboard/image.h"
 
-#if !SB_HAS(GRAPHICS)
-#error "Requires SB_HAS(GRAPHICS)."
-#endif
-
 bool SbImageIsDecodeSupported(const char* mime_type,
                               SbDecodeTargetFormat format) {
   SB_UNREFERENCED_PARAMETER(mime_type);
diff --git a/src/starboard/shared/stub/system_sign_with_certification_secret_key.cc b/src/starboard/shared/stub/system_sign_with_certification_secret_key.cc
new file mode 100644
index 0000000..b64bb21
--- /dev/null
+++ b/src/starboard/shared/stub/system_sign_with_certification_secret_key.cc
@@ -0,0 +1,26 @@
+// Copyright 2019 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "starboard/system.h"
+
+#if SB_API_VERSION >= 11
+
+bool SbSystemSignWithCertificationSecretKey(const uint8_t* message,
+                                            size_t message_size_in_bytes,
+                                            uint8_t* digest,
+                                            size_t digest_size_in_bytes) {
+  return false;
+}
+
+#endif  // SB_API_VERSION >= 11
diff --git a/src/starboard/shared/widevine/drm_create_system.cc b/src/starboard/shared/widevine/drm_create_system.cc
index 544fb79..595cf4d 100644
--- a/src/starboard/shared/widevine/drm_create_system.cc
+++ b/src/starboard/shared/widevine/drm_create_system.cc
@@ -30,11 +30,8 @@
     const char* key_system,
     void* context,
     SbDrmSessionUpdateRequestFunc update_request_callback,
-    SbDrmSessionUpdatedFunc session_updated_callback
-#if SB_HAS(DRM_KEY_STATUSES)
-    ,
+    SbDrmSessionUpdatedFunc session_updated_callback,
     SbDrmSessionKeyStatusesChangedFunc key_statuses_changed_callback
-#endif  // SB_HAS(DRM_KEY_STATUSES)
 #if SB_API_VERSION >= 10
     ,
     SbDrmServerCertificateUpdatedFunc server_certificate_updated_callback,
@@ -45,11 +42,9 @@
   if (!update_request_callback || !session_updated_callback) {
     return kSbDrmSystemInvalid;
   }
-#if SB_HAS(DRM_KEY_STATUSES)
   if (!key_statuses_changed_callback) {
     return kSbDrmSystemInvalid;
   }
-#endif  // SB_HAS(DRM_KEY_STATUSES)
 #if SB_API_VERSION >= 10
   if (!server_certificate_updated_callback || !session_closed_callback) {
     return kSbDrmSystemInvalid;
@@ -63,10 +58,8 @@
                 << "premium content playback resolution may be limited.";
   return new DrmSystemWidevine(context, update_request_callback,
                                session_updated_callback
-#if SB_HAS(DRM_KEY_STATUSES)
                                ,
                                key_statuses_changed_callback
-#endif  // SB_HAS(DRM_KEY_STATUSES)
 #if SB_API_VERSION >= 10
                                ,
                                server_certificate_updated_callback
diff --git a/src/starboard/shared/widevine/drm_system_widevine.cc b/src/starboard/shared/widevine/drm_system_widevine.cc
index 8d6ff57..e884249 100644
--- a/src/starboard/shared/widevine/drm_system_widevine.cc
+++ b/src/starboard/shared/widevine/drm_system_widevine.cc
@@ -41,6 +41,11 @@
 const char* kWidevineKeySystem[] = {"com.widevine", "com.widevine.alpha"};
 const char kWidevineStorageFileName[] = "wvcdm.dat";
 
+// Key usage may be blocked due to incomplete HDCP authentication which could
+// take up to 5 seconds. For such a case it is good to give a try few times to
+// get HDCP authentication complete. We set a timeout of 6 seconds for retries.
+const SbTimeMonotonic kUnblockKeyRetryTimeout = kSbTimeSecond * 6;
+
 class WidevineClock : public wv3cdm::IClock {
  public:
   int64_t now() override {
@@ -193,11 +198,8 @@
 DrmSystemWidevine::DrmSystemWidevine(
     void* context,
     SbDrmSessionUpdateRequestFunc session_update_request_callback,
-    SbDrmSessionUpdatedFunc session_updated_callback
-#if SB_HAS(DRM_KEY_STATUSES)
-    ,
+    SbDrmSessionUpdatedFunc session_updated_callback,
     SbDrmSessionKeyStatusesChangedFunc key_statuses_changed_callback
-#endif  // SB_HAS(DRM_KEY_STATUSES)
 #if SB_API_VERSION >= 10
     ,
     SbDrmServerCertificateUpdatedFunc server_certificate_updated_callback
@@ -212,9 +214,7 @@
     : context_(context),
       session_update_request_callback_(session_update_request_callback),
       session_updated_callback_(session_updated_callback),
-#if SB_HAS(DRM_KEY_STATUSES)
       key_statuses_changed_callback_(key_statuses_changed_callback),
-#endif  // SB_HAS(DRM_KEY_STATUSES)
 #if SB_API_VERSION >= 10
       server_certificate_updated_callback_(server_certificate_updated_callback),
 #endif  // SB_API_VERSION >= 10
@@ -320,6 +320,7 @@
         sb_drm_session_id, sb_drm_session_id_size, &wvcdm_session_id);
     SB_DCHECK(succeeded);
     status = cdm_->update(wvcdm_session_id, str_key);
+    first_update_session_received_.store(true);
   }
   SB_DLOG(INFO) << "Update keys status " << status;
 #if SB_API_VERSION >= 10
@@ -395,6 +396,10 @@
     return kSuccess;
   }
 
+  if (!first_update_session_received_.load()) {
+    return kRetry;
+  }
+
   // Adapt |buffer| and |drm_info| to a |cdm::InputBuffer|.
   SB_DCHECK(drm_info->initialization_vector_size == kInitializationVectorSize);
   std::vector<uint8_t> initialization_vector(
@@ -459,6 +464,18 @@
           SB_DLOG(ERROR) << "Decrypt status: kNoKey";
           return kRetry;
         }
+        if (status == wv3cdm::kKeyUsageBlockedByPolicy) {
+          {
+            ScopedLock lock(unblock_key_retry_mutex_);
+            if (!unblock_key_retry_start_time_) {
+              unblock_key_retry_start_time_ = SbTimeGetMonotonicNow();
+            }
+          }
+          if (SbTimeGetMonotonicNow() - unblock_key_retry_start_time_.value() <
+              kUnblockKeyRetryTimeout) {
+            return kRetry;
+          }
+        }
         SB_DLOG(ERROR) << "Decrypt status " << status;
         SB_DLOG(ERROR) << "Key ID "
                        << wvcdm::b2a_hex(
@@ -467,7 +484,10 @@
                                           drm_info->identifier_size));
         return kFailure;
       }
-
+      {
+        ScopedLock lock(unblock_key_retry_mutex_);
+        unblock_key_retry_start_time_ = nullopt;
+      }
       input.data += subsample.encrypted_byte_count;
       output.data += subsample.encrypted_byte_count;
       output.data_length -= subsample.encrypted_byte_count;
@@ -582,7 +602,6 @@
 
 void DrmSystemWidevine::onKeyStatusesChange(
     const std::string& wvcdm_session_id) {
-#if SB_HAS(DRM_KEY_STATUSES)
   wv3cdm::KeyStatusMap key_statuses;
   wv3cdm::Status status = cdm_->getKeyStatuses(wvcdm_session_id, &key_statuses);
 
@@ -608,9 +627,6 @@
   key_statuses_changed_callback_(this, context_, sb_drm_session_id.c_str(),
                                  sb_drm_session_id.size(), sb_key_ids.size(),
                                  sb_key_ids.data(), sb_key_statuses.data());
-#else   // SB_HAS(DRM_KEY_STATUSES)
-  SB_UNREFERENCED_PARAMETER(wvcdm_session_id);
-#endif  // SB_HAS(DRM_KEY_STATUSES)
 }
 
 void DrmSystemWidevine::onRemoveComplete(const std::string& wvcdm_session_id) {
diff --git a/src/starboard/shared/widevine/drm_system_widevine.h b/src/starboard/shared/widevine/drm_system_widevine.h
index c8e9d22..fb7bce7 100644
--- a/src/starboard/shared/widevine/drm_system_widevine.h
+++ b/src/starboard/shared/widevine/drm_system_widevine.h
@@ -20,7 +20,10 @@
 #include <string>
 #include <vector>
 
+#include "starboard/atomic.h"
+#include "starboard/common/optional.h"
 #include "starboard/common/scoped_ptr.h"
+#include "starboard/mutex.h"
 #include "starboard/shared/starboard/drm/drm_system_internal.h"
 #include "starboard/shared/starboard/thread_checker.h"
 #include "starboard/thread.h"
@@ -41,11 +44,8 @@
   DrmSystemWidevine(
       void* context,
       SbDrmSessionUpdateRequestFunc update_request_callback,
-      SbDrmSessionUpdatedFunc session_updated_callback
-#if SB_HAS(DRM_KEY_STATUSES)
-      ,
+      SbDrmSessionUpdatedFunc session_updated_callback,
       SbDrmSessionKeyStatusesChangedFunc key_statuses_changed_callback
-#endif  // SB_HAS(DRM_KEY_STATUSES)
 #if SB_API_VERSION >= 10
       ,
       SbDrmServerCertificateUpdatedFunc server_certificate_updated_callback
@@ -163,9 +163,7 @@
   void* const context_;
   const SbDrmSessionUpdateRequestFunc session_update_request_callback_;
   const SbDrmSessionUpdatedFunc session_updated_callback_;
-#if SB_HAS(DRM_KEY_STATUSES)
   const SbDrmSessionKeyStatusesChangedFunc key_statuses_changed_callback_;
-#endif  // SB_HAS(DRM_KEY_STATUSES)
 #if SB_API_VERSION >= 10
   const SbDrmServerCertificateUpdatedFunc server_certificate_updated_callback_;
 #endif  // SB_API_VERSION >= 10
@@ -204,10 +202,15 @@
 
   volatile bool quitting_ = false;
 
+  Mutex unblock_key_retry_mutex_;
+  optional<SbTimeMonotonic> unblock_key_retry_start_time_;
+
 #if !defined(COBALT_BUILD_TYPE_GOLD)
   int number_of_session_updates_sent_ = 0;
   int maximum_number_of_session_updates_ = std::numeric_limits<int>::max();
 #endif  // !defined(COBALT_BUILD_TYPE_GOLD)
+
+  atomic_bool first_update_session_received_{false};
 };
 
 }  // namespace widevine
diff --git a/src/starboard/stub/stub_sources.gypi b/src/starboard/stub/stub_sources.gypi
index 27da555..8a9cffb 100644
--- a/src/starboard/stub/stub_sources.gypi
+++ b/src/starboard/stub/stub_sources.gypi
@@ -31,6 +31,7 @@
         '<(DEPTH)/starboard/shared/stub/audio_sink_create.cc',
         '<(DEPTH)/starboard/shared/stub/audio_sink_destroy.cc',
         '<(DEPTH)/starboard/shared/stub/audio_sink_get_max_channels.cc',
+        '<(DEPTH)/starboard/shared/stub/audio_sink_get_min_buffer_size_in_frames.cc',
         '<(DEPTH)/starboard/shared/stub/audio_sink_get_nearest_supported_sample_frequency.cc',
         '<(DEPTH)/starboard/shared/stub/audio_sink_is_audio_frame_storage_type_supported.cc',
         '<(DEPTH)/starboard/shared/stub/audio_sink_is_audio_sample_type_supported.cc',
@@ -56,6 +57,8 @@
         '<(DEPTH)/starboard/shared/stub/cryptography_set_authenticated_data.cc',
         '<(DEPTH)/starboard/shared/stub/cryptography_set_initialization_vector.cc',
         '<(DEPTH)/starboard/shared/stub/cryptography_transform.cc',
+        '<(DEPTH)/starboard/shared/stub/decode_target_get_info.cc',
+        '<(DEPTH)/starboard/shared/stub/decode_target_release.cc',
         '<(DEPTH)/starboard/shared/stub/directory_can_open.cc',
         '<(DEPTH)/starboard/shared/stub/directory_close.cc',
         '<(DEPTH)/starboard/shared/stub/directory_create.cc',
@@ -74,6 +77,8 @@
         '<(DEPTH)/starboard/shared/stub/drm_system_internal.h',
         '<(DEPTH)/starboard/shared/stub/drm_update_server_certificate.cc',
         '<(DEPTH)/starboard/shared/stub/drm_update_session.cc',
+        '<(DEPTH)/starboard/shared/stub/image_decode.cc',
+        '<(DEPTH)/starboard/shared/stub/image_is_decode_supported.cc',
         '<(DEPTH)/starboard/shared/stub/file_can_open.cc',
         '<(DEPTH)/starboard/shared/stub/file_close.cc',
         '<(DEPTH)/starboard/shared/stub/file_delete.cc',
@@ -253,6 +258,7 @@
         '<(DEPTH)/starboard/shared/stub/system_request_stop.cc',
         '<(DEPTH)/starboard/shared/stub/system_request_suspend.cc',
         '<(DEPTH)/starboard/shared/stub/system_request_unpause.cc',
+        '<(DEPTH)/starboard/shared/stub/system_sign_with_certification_secret_key.cc',
         '<(DEPTH)/starboard/shared/stub/system_sort.cc',
         '<(DEPTH)/starboard/shared/stub/system_supports_resume.cc',
         '<(DEPTH)/starboard/shared/stub/system_symbolize.cc',
diff --git a/src/starboard/system.h b/src/starboard/system.h
index 0012d64..1f41f54 100644
--- a/src/starboard/system.h
+++ b/src/starboard/system.h
@@ -618,6 +618,24 @@
 SB_EXPORT const void* SbSystemGetExtension(const char* name);
 #endif  // SB_API_VERSION >= 11
 
+#if SB_API_VERSION >= 11
+// Computes a HMAC-SHA256 digest of |message| into |digest| using the
+// application's certification secret.
+//
+// This function may be implemented as an alternative to implementing
+// SbSystemGetProperty(kSbSystemPropertyBase64EncodedCertificationSecret),
+// however both should not be implemented.
+//
+// The output will be written into |digest|.  |digest_size_in_bytes| must be 32
+// (or greater), since 32-bytes will be written into it.
+// Returns false in the case of an error, or if it is not implemented.  In this
+// case the contents of |digest| will be undefined.
+bool SbSystemSignWithCertificationSecretKey(const uint8_t* message,
+                                            size_t message_size_in_bytes,
+                                            uint8_t* digest,
+                                            size_t digest_size_in_bytes);
+#endif
+
 #ifdef __cplusplus
 }  // extern "C"
 #endif
diff --git a/src/starboard/tools/app_launcher_packager.py b/src/starboard/tools/app_launcher_packager.py
index 092b387..4991c6a 100644
--- a/src/starboard/tools/app_launcher_packager.py
+++ b/src/starboard/tools/app_launcher_packager.py
@@ -66,6 +66,8 @@
 from paths import REPOSITORY_ROOT
 from paths import THIRD_PARTY_ROOT
 sys.path.append(THIRD_PARTY_ROOT)
+from cobalt.build import cobalt_archive_extract
+import starboard.build.port_symlink as port_symlink
 import starboard.tools.platform
 import jinja2
 
@@ -168,10 +170,18 @@
 
 def _CopyAppLauncherTools(repo_root, dest_root, additional_glob_patterns,
                           include_black_box_tests):
-  # Step 1: Remove previous output directory if it exists
+  # Step 1: Make sure dest_root is an absolute path.
+  logging.info('Copying App Launcher tools to = %s', dest_root)
+  dest_root = os.path.normpath(dest_root)
+  if not os.path.isabs(dest_root):
+    dest_root = os.path.join(os.getcwd(), dest_root)
+  if port_symlink.IsWindows():
+    dest_root = cobalt_archive_extract.ToWinUncPath(dest_root)
+  logging.info('Absolute destination path = %s', dest_root)
+  # Step 2: Remove previous output directory if it exists
   if os.path.isdir(dest_root):
     shutil.rmtree(dest_root)
-  # Step 2: Find all glob files from specified search directories.
+  # Step 3: Find all glob files from specified search directories.
   include_glob_patterns = _INCLUDE_FILE_PATTERNS
   if additional_glob_patterns:
     include_glob_patterns += additional_glob_patterns
@@ -190,7 +200,7 @@
   copy_list = list(set(copy_list))
   copy_list.sort()
   folders_logged = set()
-  # Step 3: Copy the src files to the destination directory.
+  # Step 4: Copy the src files to the destination directory.
   for src in copy_list:
     tail_path = os.path.relpath(src, repo_root)
     dst = os.path.join(dest_root, tail_path)
@@ -202,7 +212,7 @@
       folders_logged.add(src_folder)
       logging.info(src_folder + ' -> ' + os.path.dirname(dst))
     shutil.copy2(src, dst)
-  # Step 4: Re-write the platform infos file in the new repo copy.
+  # Step 5: Re-write the platform infos file in the new repo copy.
   _WritePlatformsInfo(repo_root, dest_root)
 
 
diff --git a/src/starboard/tools/testing/test_runner.py b/src/starboard/tools/testing/test_runner.py
index ee3b7d7..5896355 100755
--- a/src/starboard/tools/testing/test_runner.py
+++ b/src/starboard/tools/testing/test_runner.py
@@ -288,7 +288,7 @@
 
   def _GetAllTestEnvVariables(self):
     """Gets all environment variables used for tests on the given platform."""
-    env_variables = self._platform_config.GetTestEnvVariables()
+    env_variables = {}
     for test, test_env in self._app_config.GetTestEnvVariables().iteritems():
       if test in env_variables:
         env_variables[test].update(test_env)
@@ -309,7 +309,9 @@
     """
 
     # Get the environment variables for the test target
-    env = self.test_env_vars.get(target_name, {})
+    env = {}
+    env.update(self._platform_config.GetTestEnvVariables())
+    env.update(self.test_env_vars.get(target_name, {}))
 
     # Set up a pipe for processing test output
     read_fd, write_fd = os.pipe()
@@ -362,13 +364,19 @@
     self.threads.append(test_launcher)
     self.threads.append(test_reader)
 
+    dump_params = " ARGS:" + " ".join(test_params) if test_params else ""
+    dump_env = " ENV VARS: " + ";".join(
+        "{}={}".format(k, v) for k, v in env.items()) if env else ""
     # Output either the name of the test target or the specific test case
     # being run.
     # pylint: disable=g-long-ternary
-    sys.stdout.write(
-        "Starting {}".format(test_name if test_name else target_name))
+    sys.stdout.write("Starting {}{}{}".format(
+        test_name if test_name else target_name, dump_params, dump_env))
 
     if self.dry_run:
+      # Output a newline before running the test target / case.
+      sys.stdout.write("\n")
+
       if test_params:
         sys.stdout.write(" {}\n".format(test_params))
       write_pipe.close()
@@ -517,14 +525,16 @@
         flaky_passed_tests = []
         for test_case in flaky_failed_tests:
           for retry in range(_FLAKY_RETRY_LIMIT):
-            retry_result = self._RunTest(target_name, test_case)
+            # Sometimes the returned test "name" includes information about the
+            # parameter that was passed to it. This needs to be stripped off.
+            retry_result = self._RunTest(target_name, test_case.split(",")[0])
             print  # Explicit print for empty formatting line.
             if retry_result[2] == 1:
               flaky_passed_tests.append(test_case)
               logging.info("%s succeeded on run #%d!\n", test_case, retry + 2)
               break
             else:
-              logging.warning("%s Failed. Re-running...\n", test_case)
+              logging.warning("%s failed. Re-running...\n", test_case)
         # Remove newly passing flaky tests from failing flaky test list.
         for test_case in flaky_passed_tests:
           flaky_failed_tests.remove(test_case)
diff --git a/src/testing/gtest/include/gtest/gtest.h b/src/testing/gtest/include/gtest/gtest.h
index 8e8d922..4f611e1 100644
--- a/src/testing/gtest/include/gtest/gtest.h
+++ b/src/testing/gtest/include/gtest/gtest.h
@@ -66,6 +66,14 @@
 #include "gtest/gtest-test-part.h"
 #include "gtest/gtest-typed-test.h"
 
+#if defined(COBALT_BUILD_TYPE_QA)
+#error You cannot build unit tests in qa builds.
+#endif
+
+#if defined(COBALT_BUILD_TYPE_GOLD)
+#error You cannot build unit tests in gold builds.
+#endif
+
 // Depending on the platform, different string classes are available.
 // On Linux, in addition to ::std::string, Google also makes use of
 // class ::string, which has the same interface as ::std::string, but
diff --git a/src/testing/gtest/include/gtest/internal/gtest-port.h b/src/testing/gtest/include/gtest/internal/gtest-port.h
index b060901..2f88ab2 100644
--- a/src/testing/gtest/include/gtest/internal/gtest-port.h
+++ b/src/testing/gtest/include/gtest/internal/gtest-port.h
@@ -1572,7 +1572,7 @@
     } else {
       T* new_value = new T();
       bool is_set = SbThreadSetLocalValue(key_, new_value);
-      SB_DCHECK(is_set);
+      SB_CHECK(is_set);
       return new_value;
     }
   }
diff --git a/src/third_party/boringssl/boringssl.gyp b/src/third_party/boringssl/boringssl.gyp
index a6cd7c8..692b6c7 100644
--- a/src/third_party/boringssl/boringssl.gyp
+++ b/src/third_party/boringssl/boringssl.gyp
@@ -15,7 +15,6 @@
       'OPENSSL_NO_DTLS1',
     ],
     'cflags': [
-      '-g',
       '-fPIC',
       '-fvisibility=hidden',
     ],
diff --git a/src/third_party/boringssl/boringssl.gypi b/src/third_party/boringssl/boringssl.gypi
index c1e4e2e..69d1a1f 100644
--- a/src/third_party/boringssl/boringssl.gypi
+++ b/src/third_party/boringssl/boringssl.gypi
@@ -208,11 +208,13 @@
       '<(boringssl_root)/crypto/rc4/rc4.c',
       '<(boringssl_root)/crypto/refcount_c11.c',
       '<(boringssl_root)/crypto/refcount_lock.c',
+      '<(boringssl_root)/crypto/refcount_starboard.c',
       '<(boringssl_root)/crypto/rsa_extra/rsa_asn1.c',
       '<(boringssl_root)/crypto/stack/stack.c',
       '<(boringssl_root)/crypto/thread.c',
       '<(boringssl_root)/crypto/thread_none.c',
       '<(boringssl_root)/crypto/thread_pthread.c',
+      '<(boringssl_root)/crypto/thread_starboard.cc',
       '<(boringssl_root)/crypto/thread_win.c',
       '<(boringssl_root)/crypto/x509/a_digest.c',
       '<(boringssl_root)/crypto/x509/a_sign.c',
diff --git a/src/third_party/boringssl/src/crypto/internal.h b/src/third_party/boringssl/src/crypto/internal.h
index 4b88bcf..dc9c61b 100644
--- a/src/third_party/boringssl/src/crypto/internal.h
+++ b/src/third_party/boringssl/src/crypto/internal.h
@@ -116,6 +116,10 @@
 #include <assert.h>
 #include <string.h>
 
+#include "starboard/atomic.h"
+#include "starboard/once.h"
+#include "starboard/thread.h"
+
 #if !defined(__cplusplus)
 #if defined(__GNUC__) && \
     (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) < 40800
@@ -370,7 +374,10 @@
 
 // Thread-safe initialisation.
 
-#if defined(OPENSSL_NO_THREADS)
+#if defined(STARBOARD)
+typedef SbOnceControl CRYPTO_once_t;
+#define CRYPTO_ONCE_INIT SB_ONCE_INITIALIZER
+#elif defined(OPENSSL_NO_THREADS)
 typedef uint32_t CRYPTO_once_t;
 #define CRYPTO_ONCE_INIT 0
 #elif defined(OPENSSL_WINDOWS_THREADS)
@@ -390,13 +397,21 @@
 //
 // The |once| argument must be a |CRYPTO_once_t| that has been initialised with
 // the value |CRYPTO_ONCE_INIT|.
+#if defined(STARBOARD)
+#define CRYPTO_once SbOnce
+#else
 OPENSSL_EXPORT void CRYPTO_once(CRYPTO_once_t *once, void (*init)(void));
+#endif
 
 
 // Reference counting.
 
 // CRYPTO_REFCOUNT_MAX is the value at which the reference count saturates.
+#if defined(STARBOARD)
+#define CRYPTO_REFCOUNT_MAX 0x7fffffff
+#else
 #define CRYPTO_REFCOUNT_MAX 0xffffffff
+#endif
 
 // CRYPTO_refcount_inc atomically increments the value at |*count| unless the
 // value would overflow. It's safe for multiple threads to concurrently call
@@ -426,7 +441,13 @@
 // thread.h as a structure large enough to fit the real type. The global lock is
 // a different type so it may be initialized with platform initializer macros.
 
-#if defined(OPENSSL_NO_THREADS)
+#if defined(STARBOARD)
+struct CRYPTO_STATIC_MUTEX {
+  SbAtomic32 initialized;
+  CRYPTO_MUTEX mutex;
+};
+#define CRYPTO_STATIC_MUTEX_INIT { 0 }
+#elif defined(OPENSSL_NO_THREADS)
 struct CRYPTO_STATIC_MUTEX {
   char padding;  // Empty structs have different sizes in C and C++.
 };
diff --git a/src/third_party/boringssl/src/crypto/refcount_lock.c b/src/third_party/boringssl/src/crypto/refcount_lock.c
index 54bc6ca..f6f0727 100644
--- a/src/third_party/boringssl/src/crypto/refcount_lock.c
+++ b/src/third_party/boringssl/src/crypto/refcount_lock.c
@@ -19,7 +19,7 @@
 #include <openssl/type_check.h>
 
 
-#if !defined(OPENSSL_C11_ATOMIC)
+#if !defined(OPENSSL_C11_ATOMIC) && !defined(STARBOARD)
 
 OPENSSL_COMPILE_ASSERT((CRYPTO_refcount_t)-1 == CRYPTO_REFCOUNT_MAX,
                        CRYPTO_REFCOUNT_MAX_is_incorrect);
@@ -50,4 +50,4 @@
   return ret;
 }
 
-#endif  // OPENSSL_C11_ATOMIC
+#endif  // !OPENSSL_C11_ATOMIC && !STARBOARD
diff --git a/src/third_party/boringssl/src/crypto/refcount_starboard.c b/src/third_party/boringssl/src/crypto/refcount_starboard.c
new file mode 100644
index 0000000..8c9bc39
--- /dev/null
+++ b/src/third_party/boringssl/src/crypto/refcount_starboard.c
@@ -0,0 +1,57 @@
+// Copyright 2019 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Based on refcount_c11.c implementation.
+
+#include "internal.h"
+
+#if defined(STARBOARD)
+
+#include "starboard/atomic.h"
+
+void CRYPTO_refcount_inc(CRYPTO_refcount_t *count) {
+  CRYPTO_refcount_t expected = SbAtomicNoBarrier_Load(count);
+
+  while (expected != CRYPTO_REFCOUNT_MAX) {
+    CRYPTO_refcount_t new_value = expected + 1;
+    CRYPTO_refcount_t old_value = SbAtomicNoBarrier_CompareAndSwap(
+        count, expected, new_value);
+    if (old_value == expected) {
+      break;
+    }
+    expected = old_value;
+  }
+}
+
+int CRYPTO_refcount_dec_and_test_zero(CRYPTO_refcount_t *count) {
+  CRYPTO_refcount_t expected = SbAtomicNoBarrier_Load(count);
+
+  for (;;) {
+    if (expected == 0) {
+      OPENSSL_port_abort();
+    } else if (expected == CRYPTO_REFCOUNT_MAX) {
+      return 0;
+    } else {
+      CRYPTO_refcount_t new_value = expected - 1;
+      CRYPTO_refcount_t old_value = SbAtomicNoBarrier_CompareAndSwap(
+          count, expected, new_value);
+      if (old_value == expected) {
+        return new_value == 0;
+      }
+      expected = old_value;
+    }
+  }
+}
+
+#endif  // defined(STARBOARD)
diff --git a/src/third_party/boringssl/src/crypto/thread_none.c b/src/third_party/boringssl/src/crypto/thread_none.c
index 718d960..8475854 100644
--- a/src/third_party/boringssl/src/crypto/thread_none.c
+++ b/src/third_party/boringssl/src/crypto/thread_none.c
@@ -14,7 +14,7 @@
 
 #include "internal.h"
 
-#if defined(OPENSSL_NO_THREADS)
+#if defined(OPENSSL_NO_THREADS) && !defined(STARBOARD)
 
 void CRYPTO_MUTEX_init(CRYPTO_MUTEX *lock) {}
 
@@ -56,4 +56,4 @@
   return 1;
 }
 
-#endif  // OPENSSL_NO_THREADS
+#endif  // OPENSSL_NO_THREADS && !STARBOARD
diff --git a/src/third_party/boringssl/src/crypto/thread_starboard.cc b/src/third_party/boringssl/src/crypto/thread_starboard.cc
new file mode 100644
index 0000000..40ac897
--- /dev/null
+++ b/src/third_party/boringssl/src/crypto/thread_starboard.cc
@@ -0,0 +1,231 @@
+// Copyright 2019 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Based on thread_pthread.c.
+
+#include "internal.h"
+
+#if defined(STARBOARD)
+
+#include <openssl/mem.h>
+
+#include "starboard/once.h"
+#include "starboard/thread.h"
+
+namespace {
+
+// Each enum of thread_local_data_t corresponds to a ThreadLocalEntry.
+struct ThreadLocalEntry {
+  thread_local_destructor_t destructor;
+  void* value;
+};
+
+// One thread local key will point to an array of ThreadLocalEntry.
+SbThreadLocalKey g_thread_local_key = kSbThreadLocalKeyInvalid;
+
+// Control the creation of the global thread local key.
+SbOnceControl g_thread_local_once_control = SB_ONCE_INITIALIZER;
+
+void ThreadLocalDestructor(void* value) {
+  if (value) {
+    ThreadLocalEntry* thread_locals = static_cast<ThreadLocalEntry*>(value);
+    for (int i = 0; i < NUM_OPENSSL_THREAD_LOCALS; ++i) {
+      if (thread_locals[i].destructor != nullptr) {
+        thread_locals[i].destructor(thread_locals[i].value);
+      }
+    }
+    OPENSSL_free(value);
+  }
+}
+
+void ThreadLocalInit() {
+  g_thread_local_key = SbThreadCreateLocalKey(&ThreadLocalDestructor);
+}
+
+void EnsureInitialized(struct CRYPTO_STATIC_MUTEX* lock) {
+  enum {
+    kUninitialized = 0,
+    kInitializing,
+    kInitialized
+  };
+
+  if (SbAtomicNoBarrier_Load(&lock->initialized) == kInitialized) {
+    return;
+  }
+  if (SbAtomicNoBarrier_CompareAndSwap(&lock->initialized,
+      kUninitialized, kInitializing) == kUninitialized) {
+    CRYPTO_MUTEX_init(&lock->mutex);
+    SbAtomicNoBarrier_Store(&lock->initialized, kInitialized);
+    return;
+  }
+  while (SbAtomicNoBarrier_Load(&lock->initialized) != kInitialized) {
+    SbThreadSleep(kSbTimeMillisecond);
+  }
+}
+
+}  // namespace
+
+void CRYPTO_MUTEX_init(CRYPTO_MUTEX* lock) {
+  if (!SbMutexCreate(&lock->mutex)) {
+    OPENSSL_port_abort();
+  }
+  if (!SbConditionVariableCreate(&lock->condition, &lock->mutex)) {
+    OPENSSL_port_abort();
+  }
+  lock->readers = 0;
+  lock->writing = false;
+}
+
+// https://en.wikipedia.org/wiki/Readers%E2%80%93writer_lock
+void CRYPTO_MUTEX_lock_read(CRYPTO_MUTEX* lock) {
+  if (SbMutexAcquire(&lock->mutex) != kSbMutexAcquired) {
+    OPENSSL_port_abort();
+  }
+  while (lock->writing) {
+    if (SbConditionVariableWait(&lock->condition, &lock->mutex) ==
+        kSbConditionVariableFailed) {
+      OPENSSL_port_abort();
+    }
+  }
+  ++(lock->readers);
+  if (!SbMutexRelease(&lock->mutex)) {
+    OPENSSL_port_abort();
+  }
+}
+
+// https://en.wikipedia.org/wiki/Readers%E2%80%93writer_lock
+void CRYPTO_MUTEX_lock_write(CRYPTO_MUTEX* lock) {
+  if (SbMutexAcquire(&lock->mutex) != kSbMutexAcquired) {
+    OPENSSL_port_abort();
+  }
+  while (lock->writing) {
+    if (SbConditionVariableWait(&lock->condition, &lock->mutex) ==
+        kSbConditionVariableFailed) {
+      OPENSSL_port_abort();
+    }
+  }
+  lock->writing = true;
+  while (lock->readers > 0) {
+    if (SbConditionVariableWait(&lock->condition, &lock->mutex) ==
+        kSbConditionVariableFailed) {
+      OPENSSL_port_abort();
+    }
+  }
+  if (!SbMutexRelease(&lock->mutex)) {
+    OPENSSL_port_abort();
+  }
+}
+
+// https://en.wikipedia.org/wiki/Readers%E2%80%93writer_lock
+void CRYPTO_MUTEX_unlock_read(CRYPTO_MUTEX* lock) {
+  if (SbMutexAcquire(&lock->mutex) != kSbMutexAcquired) {
+    OPENSSL_port_abort();
+  }
+  if (--(lock->readers) == 0) {
+    SbConditionVariableBroadcast(&lock->condition);
+  }
+  if (!SbMutexRelease(&lock->mutex)) {
+    OPENSSL_port_abort();
+  }
+}
+
+// https://en.wikipedia.org/wiki/Readers%E2%80%93writer_lock
+void CRYPTO_MUTEX_unlock_write(CRYPTO_MUTEX* lock) {
+  if (SbMutexAcquire(&lock->mutex) != kSbMutexAcquired) {
+    OPENSSL_port_abort();
+  }
+  lock->writing = false;
+  SbConditionVariableBroadcast(&lock->condition);
+  if (!SbMutexRelease(&lock->mutex)) {
+    OPENSSL_port_abort();
+  }
+}
+
+void CRYPTO_MUTEX_cleanup(CRYPTO_MUTEX* lock) {
+  if (!SbConditionVariableDestroy(&lock->condition)) {
+    OPENSSL_port_abort();
+  }
+  if (!SbMutexDestroy(&lock->mutex)) {
+    OPENSSL_port_abort();
+  }
+}
+
+void CRYPTO_STATIC_MUTEX_lock_read(struct CRYPTO_STATIC_MUTEX* lock) {
+  EnsureInitialized(lock);
+  CRYPTO_MUTEX_lock_read(&lock->mutex);
+}
+
+void CRYPTO_STATIC_MUTEX_lock_write(struct CRYPTO_STATIC_MUTEX* lock) {
+  EnsureInitialized(lock);
+  CRYPTO_MUTEX_lock_write(&lock->mutex);
+}
+
+void CRYPTO_STATIC_MUTEX_unlock_read(struct CRYPTO_STATIC_MUTEX* lock) {
+  EnsureInitialized(lock);
+  CRYPTO_MUTEX_unlock_read(&lock->mutex);
+}
+
+void CRYPTO_STATIC_MUTEX_unlock_write(struct CRYPTO_STATIC_MUTEX* lock) {
+  EnsureInitialized(lock);
+  CRYPTO_MUTEX_unlock_write(&lock->mutex);
+}
+
+void* CRYPTO_get_thread_local(thread_local_data_t index) {
+  SbOnce(&g_thread_local_once_control, &ThreadLocalInit);
+  if (!SbThreadIsValidLocalKey(g_thread_local_key)) {
+    return nullptr;
+  }
+
+  ThreadLocalEntry* thread_locals = static_cast<ThreadLocalEntry*>(
+      SbThreadGetLocalValue(g_thread_local_key));
+  if (thread_locals == nullptr) {
+    return nullptr;
+  }
+
+  return thread_locals[index].value;
+}
+
+int CRYPTO_set_thread_local(thread_local_data_t index, void *value,
+                            thread_local_destructor_t destructor) {
+  SbOnce(&g_thread_local_once_control, &ThreadLocalInit);
+  if (!SbThreadIsValidLocalKey(g_thread_local_key)) {
+    destructor(value);
+    return 0;
+  }
+
+  ThreadLocalEntry* thread_locals = static_cast<ThreadLocalEntry*>(
+      SbThreadGetLocalValue(g_thread_local_key));
+  if (thread_locals == nullptr) {
+    size_t thread_locals_size =
+        sizeof(ThreadLocalEntry) * NUM_OPENSSL_THREAD_LOCALS;
+    thread_locals = static_cast<ThreadLocalEntry*>(
+        OPENSSL_malloc(thread_locals_size));
+    if (thread_locals == nullptr) {
+      destructor(value);
+      return 0;
+    }
+    OPENSSL_memset(thread_locals, 0, thread_locals_size);
+    if (!SbThreadSetLocalValue(g_thread_local_key, thread_locals)) {
+      OPENSSL_free(thread_locals);
+      destructor(value);
+      return 0;
+    }
+  }
+
+  thread_locals[index].destructor = destructor;
+  thread_locals[index].value = value;
+  return 1;
+}
+
+#endif  // defined(STARBOARD)
diff --git a/src/third_party/boringssl/src/include/openssl/thread.h b/src/third_party/boringssl/src/include/openssl/thread.h
index 98073b0..da3cdfa 100644
--- a/src/third_party/boringssl/src/include/openssl/thread.h
+++ b/src/third_party/boringssl/src/include/openssl/thread.h
@@ -61,12 +61,29 @@
 
 #include <openssl/base.h>
 
+#include "starboard/atomic.h"
+#include "starboard/condition_variable.h"
+#include "starboard/mutex.h"
+
 #if defined(__cplusplus)
 extern "C" {
 #endif
 
 
-#if defined(OPENSSL_NO_THREADS)
+#if defined(STARBOARD)
+typedef struct crypto_mutex_st {
+  // It would be nice to use starboard::RWLock. However, that's a C++ class, so
+  // it can't even be included in this C header. It's possible to use an opaque
+  // pointer to it, but then an allocation would be needed or we somehow embed
+  // a byte array that is sizeof(starboard::RWLock) without including the
+  // declaration. Avoid the complication and just implement the RWMutex using
+  // starboard C structs.
+  SbMutex mutex;
+  SbConditionVariable condition;
+  size_t readers;
+  bool writing;
+} CRYPTO_MUTEX;
+#elif defined(OPENSSL_NO_THREADS)
 typedef struct crypto_mutex_st {
   char padding;  // Empty structs have different sizes in C and C++.
 } CRYPTO_MUTEX;
@@ -98,7 +115,11 @@
 // as C code that might not set -std=c11. So, in practice, it's not possible to
 // do that. Instead we statically assert that the size and native alignment of
 // a plain uint32_t and an _Atomic uint32_t are equal in refcount_c11.c.
+#if defined(STARBOARD)
+typedef SbAtomic32 CRYPTO_refcount_t;
+#else
 typedef uint32_t CRYPTO_refcount_t;
+#endif
 
 
 // Deprecated functions.
diff --git a/src/third_party/icu/README.cobalt b/src/third_party/icu/README.cobalt
new file mode 100644
index 0000000..cf85b3f
--- /dev/null
+++ b/src/third_party/icu/README.cobalt
@@ -0,0 +1,102 @@
+How to rebuild the ICU data files.
+
+This is based off of section B in the README.chromium file.
+
+1. First revert to the non-Starboardized version of ICU in the Cobalt source
+   tree. This is necessary because regenerating the data files requires building
+   ICU, and this is best done with a non-Starboardized version of the library.
+
+   You can do this by looking at the git log for third_party/icu and tracing
+   it back until you find the first non-Cobalt change, and then checking out
+   that commit.
+
+2. Set ICU_ROOT to the directory of the ICU source code in the Cobalt source
+   tree, e.g. `$COBALT_SRC_ROOT/src/third_party/icu`.
+
+3. Create a build directory outside of the Cobalt codebase, and make that your
+   current working directory.  Set ICU_DATA_ROOT to this directory.
+
+4. Configure the ICU build.  Note that we setup our compiler defines in the same
+   way that they are set when building ICU within Cobalt, according to our
+   icu.gyp file.  Note that below, `-DUCONFIG_NO_LEGACY_CONVERSION=1` is left
+   out on purpose even though it is used when building ICU for Cobalt because
+   it causes an issue when converting to big endian
+   ( https://unicode-org.atlassian.net/browse/ICU-11046 ).  In addition,
+   `-DU_CHARSET_IS_UTF8=1` is also left out for the same reason as it was found
+   to produce a similar error.
+
+   ```
+   env CPPFLAGS="-DUCONFIG_ONLY_HTML_CONVERSION=1 -DUCONFIG_NO_TRANSLITERATION=1 -DUCONFIG_NO_COLLATION=1" $ICU_ROOT/source/runConfigureICU Linux --disable-layout
+
+   ```
+
+5. Run make.
+
+   ```
+   make -j8
+   ```
+
+   Note that it's okay for it to end in an error around `css3transform.res`,
+   enough of it should have built successfully for us to complete the remaining
+   instructions.
+
+6. Revert your ICU source checkout back to the tip, there have been local
+   modifications to it (specifically `source/data/mappings/convrtrs.txt`) that
+   we want to pick up here.
+
+   ```
+   cd $ICU_ROOT
+   git checkout origin/COBALT
+   cd $ICU_DATA_ROOT
+   ```
+
+7. Run `$ICU_ROOT/scripts/trim_data.sh`
+
+8. Run `$ICU_ROOT/android/patch_locale.sh`.
+
+9. Run `$ICU_ROOT/scripts/make_data.sh`.
+
+10. Run `$ICU_ROOT/scripts/clean_up_data_source.sh` to clean up the changes
+   made to $ICU_ROOT from the call to `patch_locale.sh`.
+
+11. Create a new directory where we will rebuild ICU with different options
+    because the options used above will produce a version of the tool `icupkg` (
+    which we need to use to translate from little to big endian) that does not
+    work.  Call this new directory $ICU_PKG_ROOT.
+
+12. Change directory to $ICU_PKG_ROOT.
+
+13. Run `$ICU_ROOT/source/runConfigureICU Linux --disable-layout && make -j8`
+
+14. Run `$ICU_ROOT/scripts/make_data.sh`
+
+15. Run `export LD_LIBRARY_PATH=$ICU_PKG_ROOT/lib`
+
+16. Run `sudo apt install icu-devtools` to obtain the `icupkg` command and its
+    dependencies.  Even though you will be running a locally-built version of
+    `icupkg`, you will need the shared libraries installed by this command.
+
+17. Replace the files in this directory with the new files that you have built.
+    They will exist as a little-endian package file, but you can use the
+    `icupkg` tool to both unpack the files out of the package (which Cobalt
+    prefers), and switch from little-endian to big-endian.
+
+    Run:
+
+    ```
+    cd $COBALT_SRC_ROOT/src/cobalt/content/icu
+    rm -rf *
+    mkdir icudt56l icudt56b
+    $ICU_PKG_ROOT/bin/icupkg -tl -x '*' -d icudt56l $ICU_DATA_ROOT/data/out/tmp/icudt56l.dat
+    $ICU_PKG_ROOT/bin/icupkg -tb -x '*' -d icudt56b $ICU_DATA_ROOT/data/out/tmp/icudt56l.dat
+    ```
+
+
+You should now have the ICU data files generated and ready to go in the Cobalt
+source tree, and you can clean up any outstanding files.  If there are any
+leftover changes in your $ICU_ROOT directory, you can revert them.  At this
+point you can re-gyp, re-ninja, and run Cobalt and it should work.
+
+Note that at the time of this writing, the final resulting contents had a size
+of 6.9MB, from running the command
+`du -sh $COBALT_SRC_ROOT/src/cobalt/content/icu/icudt56l`.
diff --git a/src/third_party/libvpx_gpu/vp9-dec-core/build/obj_int_extract.vcxproj b/src/third_party/libvpx_gpu/vp9-dec-core/build/obj_int_extract.vcxproj
deleted file mode 100644
index b4fddc6..0000000
--- a/src/third_party/libvpx_gpu/vp9-dec-core/build/obj_int_extract.vcxproj
+++ /dev/null
@@ -1,166 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>

-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

-  <ItemGroup Label="ProjectConfigurations">

-    <ProjectConfiguration Include="Debug|Win32">

-      <Configuration>Debug</Configuration>

-      <Platform>Win32</Platform>

-    </ProjectConfiguration>

-    <ProjectConfiguration Include="Debug|x64">

-      <Configuration>Debug</Configuration>

-      <Platform>x64</Platform>

-    </ProjectConfiguration>

-    <ProjectConfiguration Include="Release|Win32">

-      <Configuration>Release</Configuration>

-      <Platform>Win32</Platform>

-    </ProjectConfiguration>

-    <ProjectConfiguration Include="Release|x64">

-      <Configuration>Release</Configuration>

-      <Platform>x64</Platform>

-    </ProjectConfiguration>

-  </ItemGroup>

-  <PropertyGroup Label="Globals">

-    <ProjectGuid>{E1360C65-D375-4335-8057-7ED99CC3F9B2}</ProjectGuid>

-    <RootNamespace>obj_int_extract</RootNamespace>

-    <Keyword>ManagedCProj</Keyword>

-  </PropertyGroup>

-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">

-    <ConfigurationType>Application</ConfigurationType>

-    <CharacterSet>Unicode</CharacterSet>

-    <WholeProgramOptimization>false</WholeProgramOptimization>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">

-    <ConfigurationType>Application</ConfigurationType>

-    <CharacterSet>Unicode</CharacterSet>

-    <WholeProgramOptimization>false</WholeProgramOptimization>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">

-    <ConfigurationType>Application</ConfigurationType>

-    <CharacterSet>Unicode</CharacterSet>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">

-    <ConfigurationType>Application</ConfigurationType>

-    <CharacterSet>Unicode</CharacterSet>

-  </PropertyGroup>

-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />

-  <ImportGroup Label="ExtensionSettings">

-  </ImportGroup>

-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">

-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

-  </ImportGroup>

-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">

-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

-  </ImportGroup>

-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">

-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

-  </ImportGroup>

-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">

-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

-  </ImportGroup>

-  <PropertyGroup Label="UserMacros" />

-  <PropertyGroup>

-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>

-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>

-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>

-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>

-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>

-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>

-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>

-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>

-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>

-  </PropertyGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">

-    <ClCompile>

-      <Optimization>Disabled</Optimization>

-      <AdditionalIncludeDirectories>.;..;./build_$(Platform);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

-      <PreprocessorDefinitions>WIN32;DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>

-      <WarningLevel>Level3</WarningLevel>

-      <DebugInformationFormat>OldStyle</DebugInformationFormat>

-    </ClCompile>

-    <Link>

-      <OutputFile>obj_int_extract.exe</OutputFile>

-      <GenerateDebugInformation>true</GenerateDebugInformation>

-    </Link>

-    <PreBuildEvent>

-      <Command>

-      </Command>

-    </PreBuildEvent>

-  </ItemDefinitionGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">

-    <ClCompile>

-      <Optimization>Disabled</Optimization>

-      <AdditionalIncludeDirectories>.;..;$(ProjectDir)build_$(Platform);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

-      <PreprocessorDefinitions>WIN32;DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>

-      <WarningLevel>Level3</WarningLevel>

-      <DebugInformationFormat>OldStyle</DebugInformationFormat>

-    </ClCompile>

-    <Link>

-      <OutputFile>obj_int_extract.exe</OutputFile>

-      <GenerateDebugInformation>true</GenerateDebugInformation>

-    </Link>

-    <PreBuildEvent>

-      <Command>

-      </Command>

-    </PreBuildEvent>

-  </ItemDefinitionGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">

-    <ClCompile>

-      <Optimization>MaxSpeed</Optimization>

-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>

-      <AdditionalIncludeDirectories>.;..;./build_$(Platform);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>

-      <PrecompiledHeader>

-      </PrecompiledHeader>

-      <WarningLevel>Level3</WarningLevel>

-      <DebugInformationFormat>

-      </DebugInformationFormat>

-    </ClCompile>

-    <Link>

-      <OutputFile>obj_int_extract.exe</OutputFile>

-      <GenerateDebugInformation>true</GenerateDebugInformation>

-    </Link>

-    <PreBuildEvent>

-      <Command>

-      </Command>

-    </PreBuildEvent>

-  </ItemDefinitionGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">

-    <ClCompile>

-      <Optimization>MaxSpeed</Optimization>

-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>

-      <AdditionalIncludeDirectories>.;..;./build_$(Platform);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>

-      <PrecompiledHeader>

-      </PrecompiledHeader>

-      <WarningLevel>Level3</WarningLevel>

-      <DebugInformationFormat>

-      </DebugInformationFormat>

-    </ClCompile>

-    <Link>

-      <OutputFile>obj_int_extract.exe</OutputFile>

-      <GenerateDebugInformation>true</GenerateDebugInformation>

-    </Link>

-    <PreBuildEvent>

-      <Command>

-      </Command>

-    </PreBuildEvent>

-  </ItemDefinitionGroup>

-  <ItemGroup>

-    <ClCompile Include="make\obj_int_extract.c">

-      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)build_make_obj_int_extract.obj</ObjectFileName>

-      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)build_make_obj_int_extract.obj</ObjectFileName>

-      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)build_make_obj_int_extract.obj</ObjectFileName>

-      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)build_make_obj_int_extract.obj</ObjectFileName>

-    </ClCompile>

-  </ItemGroup>

-  <ItemGroup>

-    <None Include="obj_int_extract.bat" />

-  </ItemGroup>

-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

-  <ImportGroup Label="ExtensionTargets">

-  </ImportGroup>

-</Project>
\ No newline at end of file
diff --git a/src/third_party/libvpx_gpu/vp9-dec-core/build/obj_int_extract.vcxproj.filters b/src/third_party/libvpx_gpu/vp9-dec-core/build/obj_int_extract.vcxproj.filters
deleted file mode 100644
index 93e8543..0000000
--- a/src/third_party/libvpx_gpu/vp9-dec-core/build/obj_int_extract.vcxproj.filters
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>

-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

-  <ItemGroup>

-    <Filter Include="Source Files">

-      <UniqueIdentifier>4C149771-9F7E-4C2B-541A-6353828BEB52</UniqueIdentifier>

-      <Extensions>c;cc;def;odl;idl;hpj;bat;asm;asmx</Extensions>

-    </Filter>

-    <Filter Include="Header Files">

-      <UniqueIdentifier>05FD4944-2E7C-8CFC-0443-D6DAD06BE957</UniqueIdentifier>

-      <Extensions>h;hm;inl;inc;xsd</Extensions>

-    </Filter>

-    <Filter Include="Resource Files">

-      <UniqueIdentifier>01A2776B-A9DA-4C36-2179-2D64860A04BF</UniqueIdentifier>

-      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions>

-    </Filter>

-    <Filter Include="Build Files">

-      <UniqueIdentifier>83458B37-ADD7-A5C2-40D2-5EB607F2C856</UniqueIdentifier>

-      <Extensions>mk</Extensions>

-    </Filter>

-  </ItemGroup>

-  <ItemGroup>

-    <ClCompile Include="make\obj_int_extract.c">

-      <Filter>Source Files</Filter>

-    </ClCompile>

-  </ItemGroup>

-  <ItemGroup>

-    <None Include="obj_int_extract.bat">

-      <Filter>Source Files</Filter>

-    </None>

-  </ItemGroup>

-</Project>
\ No newline at end of file
diff --git a/src/third_party/libvpx_gpu/vp9-dec-core/build/vpx-dec-core - Copy.vcxproj b/src/third_party/libvpx_gpu/vp9-dec-core/build/vpx-dec-core - Copy.vcxproj
deleted file mode 100644
index e101eb4..0000000
--- a/src/third_party/libvpx_gpu/vp9-dec-core/build/vpx-dec-core - Copy.vcxproj
+++ /dev/null
@@ -1,477 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>

-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

-  <ItemGroup Label="ProjectConfigurations">

-    <ProjectConfiguration Include="Debug|ORBIS">

-      <Configuration>Debug</Configuration>

-      <Platform>ORBIS</Platform>

-    </ProjectConfiguration>

-    <ProjectConfiguration Include="Debug|Win32">

-      <Configuration>Debug</Configuration>

-      <Platform>Win32</Platform>

-    </ProjectConfiguration>

-    <ProjectConfiguration Include="Debug|x64">

-      <Configuration>Debug</Configuration>

-      <Platform>x64</Platform>

-    </ProjectConfiguration>

-    <ProjectConfiguration Include="Release|ORBIS">

-      <Configuration>Release</Configuration>

-      <Platform>ORBIS</Platform>

-    </ProjectConfiguration>

-    <ProjectConfiguration Include="Release|Win32">

-      <Configuration>Release</Configuration>

-      <Platform>Win32</Platform>

-    </ProjectConfiguration>

-    <ProjectConfiguration Include="Release|x64">

-      <Configuration>Release</Configuration>

-      <Platform>x64</Platform>

-    </ProjectConfiguration>

-  </ItemGroup>

-  <PropertyGroup Label="Globals">

-    <ProjectGuid>{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}</ProjectGuid>

-    <RootNamespace>vpx</RootNamespace>

-    <Keyword>ManagedCProj</Keyword>

-    <ProjectName>vp9-dec-core</ProjectName>

-  </PropertyGroup>

-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">

-    <ConfigurationType>StaticLibrary</ConfigurationType>

-    <CharacterSet>Unicode</CharacterSet>

-    <WholeProgramOptimization>true</WholeProgramOptimization>

-    <PlatformToolset>v120</PlatformToolset>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'" Label="Configuration">

-    <ConfigurationType>StaticLibrary</ConfigurationType>

-    <CharacterSet>Unicode</CharacterSet>

-    <WholeProgramOptimization>true</WholeProgramOptimization>

-    <PlatformToolset>v120</PlatformToolset>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">

-    <ConfigurationType>StaticLibrary</ConfigurationType>

-    <CharacterSet>Unicode</CharacterSet>

-    <WholeProgramOptimization>true</WholeProgramOptimization>

-    <PlatformToolset>v120</PlatformToolset>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">

-    <ConfigurationType>StaticLibrary</ConfigurationType>

-    <CharacterSet>Unicode</CharacterSet>

-    <PlatformToolset>v120</PlatformToolset>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'" Label="Configuration">

-    <ConfigurationType>StaticLibrary</ConfigurationType>

-    <CharacterSet>Unicode</CharacterSet>

-    <PlatformToolset>v140</PlatformToolset>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">

-    <ConfigurationType>StaticLibrary</ConfigurationType>

-    <CharacterSet>Unicode</CharacterSet>

-    <PlatformToolset>v120</PlatformToolset>

-  </PropertyGroup>

-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />

-  <ImportGroup Label="ExtensionSettings" />

-  <ImportGroup Label="PropertySheets">

-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

-    <Import Project="$(SolutionDir)\SceGnm.props" Condition="Exists('$(SolutionDir)\SceGnm.Development.props')" />

-    <Import Project="$(SCE_ORBIS_SDK_DIR)\host_tools\msbuild\SceGnm.props" Condition="!Exists('$(SolutionDir)\SceGnm.Development.props')" />

-  </ImportGroup>

-  <PropertyGroup Label="UserMacros" />

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">

-    <OutDir>$(SolutionDir)..\lib\msvs10\$(Configuration)\win$(PlatformArchitecture)\</OutDir>

-    <IntDir>$(SolutionDir)..\obj\msvs10\$(ProjectName)\$(Configuration)\win$(PlatformArchitecture)\</IntDir>

-    <TargetName>$(ProjectName)$(PlatformArchitecture)</TargetName>

-    <IncludePath>$(DXSDK_DIR)include;$(IncludePath)</IncludePath>

-    <LibraryPath>$(DXSDK_DIR)lib\x64;$(LibraryPath)</LibraryPath>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">

-    <TargetName>$(ProjectName)$(PlatformArchitecture)</TargetName>

-    <IncludePath>$(IncludePath)</IncludePath>

-    <LibraryPath>$(LibraryPath)</LibraryPath>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">

-    <OutDir>$(SolutionDir)..\lib\msvs10\$(Configuration)\win$(PlatformArchitecture)\</OutDir>

-    <IntDir>$(SolutionDir)..\obj\msvs10\$(ProjectName)\$(Configuration)\win$(PlatformArchitecture)\</IntDir>

-    <TargetName>$(ProjectName)$(PlatformArchitecture)</TargetName>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">

-    <OutDir>$(SolutionDir)..\lib\msvs10\$(Configuration)\win$(PlatformArchitecture)\</OutDir>

-    <IntDir>$(SolutionDir)..\obj\msvs10\$(ProjectName)\$(Configuration)\win$(PlatformArchitecture)\</IntDir>

-    <TargetName>$(ProjectName)$(PlatformArchitecture)</TargetName>

-    <IncludePath>$(DXSDK_DIR)include;$(IncludePath)</IncludePath>

-    <LibraryPath>$(DXSDK_DIR)lib\x64;$(LibraryPath)</LibraryPath>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">

-    <TargetName>$(ProjectName)$(PlatformArchitecture)</TargetName>

-    <IncludePath>$(DXSDK_DIR)include;$(IncludePath)</IncludePath>

-    <LibraryPath>$(DXSDK_DIR)lib\x64;$(LibraryPath)</LibraryPath>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">

-    <OutDir>$(SolutionDir)..\lib\msvs10\$(Configuration)\win$(PlatformArchitecture)\</OutDir>

-    <IntDir>$(SolutionDir)..\obj\msvs10\$(ProjectName)\$(Configuration)\win$(PlatformArchitecture)\</IntDir>

-    <TargetName>$(ProjectName)$(PlatformArchitecture)</TargetName>

-  </PropertyGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">

-    <PreBuildEvent>

-      <Command>cd ./script

-call amd_build.bat</Command>

-    </PreBuildEvent>

-    <ClCompile>

-      <Optimization>Disabled</Optimization>

-      <AdditionalIncludeDirectories>.;..;$(SolutionDir)/../../Thirdparty/amd/mcl/1.6/amdmcl/inc;$(ProjectDir)build_$(Platform);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

-      <PreprocessorDefinitions>WIN32;_DEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>

-      <WarningLevel>Level3</WarningLevel>

-    </ClCompile>

-    <Lib>

-      <AdditionalLibraryDirectories>

-      </AdditionalLibraryDirectories>

-      <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>

-    </Lib>

-  </ItemDefinitionGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">

-    <PreBuildEvent>

-      <Command>cd ./script

-call amd_build.bat</Command>

-    </PreBuildEvent>

-    <ClCompile>

-      <Optimization>Disabled</Optimization>

-      <AdditionalIncludeDirectories>.;..;$(SolutionDir)/../../Thirdparty/amd/mcl/1.6/amdmcl/inc;$(ProjectDir)ORBIS_Debug;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

-      <PreprocessorDefinitions>WIN32;_DEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>

-      <WarningLevel>Level3</WarningLevel>

-    </ClCompile>

-    <Lib>

-      <AdditionalLibraryDirectories>

-      </AdditionalLibraryDirectories>

-      <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>

-    </Lib>

-    <PSSL />

-    <PSSL>

-      <Verbosity>Quiet</Verbosity>

-    </PSSL>

-    <PSSL>

-      <AuxData>Disabled</AuxData>

-    </PSSL>

-    <Compile_PSSL_To_Header />

-    <Compile_PSSL_To_Header />

-  </ItemDefinitionGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">

-    <PreBuildEvent>

-      <Command>cd ./script

-call amd_build.bat</Command>

-    </PreBuildEvent>

-    <ClCompile>

-      <Optimization>Disabled</Optimization>

-      <AdditionalIncludeDirectories>.;..;$(SolutionDir)/../../Thirdparty/amd/mcl/1.6/amdmcl/inc;$(ProjectDir)build_$(Platform);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

-      <PreprocessorDefinitions>WIN32;_DEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>

-      <WarningLevel>Level3</WarningLevel>

-    </ClCompile>

-    <Lib>

-      <AdditionalLibraryDirectories>

-      </AdditionalLibraryDirectories>

-      <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>

-    </Lib>

-    <ProjectReference>

-      <LinkLibraryDependencies>true</LinkLibraryDependencies>

-    </ProjectReference>

-  </ItemDefinitionGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">

-    <PreBuildEvent>

-      <Command>cd ./script

-call amd_build.bat</Command>

-    </PreBuildEvent>

-    <ClCompile>

-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>

-      <Optimization>MaxSpeed</Optimization>

-      <AdditionalIncludeDirectories>.;..;$(SolutionDir)/../../Thirdparty/amd/mcl/1.6/amdmcl/inc;$(ProjectDir)build_$(Platform);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

-      <PreprocessorDefinitions>WIN32;NDEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>

-      <WarningLevel>Level3</WarningLevel>

-      <WholeProgramOptimization>true</WholeProgramOptimization>

-    </ClCompile>

-    <Lib>

-      <AdditionalLibraryDirectories>

-      </AdditionalLibraryDirectories>

-      <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>

-    </Lib>

-  </ItemDefinitionGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">

-    <PreBuildEvent>

-      <Command>cd ./script

-call amd_build.bat</Command>

-    </PreBuildEvent>

-    <ClCompile>

-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>

-      <Optimization>MaxSpeed</Optimization>

-      <AdditionalIncludeDirectories>.;..;$(SolutionDir)/../../Thirdparty/amd/mcl/1.6/amdmcl/inc;$(ProjectDir)build_$(Platform);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

-      <PreprocessorDefinitions>WIN32;NDEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>

-      <WarningLevel>Level3</WarningLevel>

-      <WholeProgramOptimization>true</WholeProgramOptimization>

-    </ClCompile>

-    <Lib>

-      <AdditionalLibraryDirectories>

-      </AdditionalLibraryDirectories>

-      <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>

-    </Lib>

-  </ItemDefinitionGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">

-    <PreBuildEvent>

-      <Command>cd ./script

-call amd_build.bat</Command>

-    </PreBuildEvent>

-    <ClCompile>

-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>

-      <Optimization>MaxSpeed</Optimization>

-      <AdditionalIncludeDirectories>.;..;$(SolutionDir)/../../Thirdparty/amd/mcl/1.6/amdmcl/inc;$(ProjectDir)build_$(Platform);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

-      <PreprocessorDefinitions>WIN32;NDEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>

-      <WarningLevel>Level3</WarningLevel>

-    </ClCompile>

-    <Lib>

-      <AdditionalLibraryDirectories>$(AMDAPPSDKROOT)\lib\x86_64;</AdditionalLibraryDirectories>

-      <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>

-    </Lib>

-  </ItemDefinitionGroup>

-  <ItemGroup>

-    <ClCompile Include="..\vp9\decoder\interop\vp9lux_cl_wrapper.cpp">

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">true</ExcludedFromBuild>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\interop\vp9lux_interop.c">

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">true</ExcludedFromBuild>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9lux_alt_inter_ocl.cpp" />

-    <ClCompile Include="..\vp9\decoder\vp9lux_decode_block.cpp" />

-    <ClCompile Include="..\vp9\decoder\vp9lux_dx_compute.cpp" />

-    <ClCompile Include="..\vp9\decoder\vp9lux_dx_window.cpp">

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">true</ExcludedFromBuild>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9lux_intra_ocl.cpp" />

-    <ClCompile Include="..\vp9\decoder\vp9lux_loopfilter_ocl.cpp" />

-    <ClCompile Include="..\vp9\decoder\vp9lux_ocl.c" />

-    <ClCompile Include="..\vp9\decoder\vp9lux_ocl_mem_amd.cpp" />

-    <ClCompile Include="..\vp9\decoder\vp9lux_ocl_programs.cpp" />

-    <ClCompile Include="..\vp9\decoder\vp9lux_thread.c" />

-    <ClCompile Include="..\vp9\decoder\vp9lux_transform_ocl.cpp" />

-    <ClCompile Include="..\vpx\src\vpx_decoder.c">

-      <ObjectFileName>$(IntDir)vpx_src_vpx_decoder.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vpx\src\vpx_codec.c">

-      <ObjectFileName>$(IntDir)vpx_src_vpx_codec.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vpx\src\vpx_image.c">

-      <ObjectFileName>$(IntDir)vpx_src_vpx_image.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vpx_mem\vpx_mem.c">

-      <ObjectFileName>$(IntDir)vpx_mem_vpx_mem.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vpx_scale\generic\vpx_scale.c">

-      <ObjectFileName>$(IntDir)vpx_scale_generic_vpx_scale.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vpx_scale\generic\yv12config.c">

-      <ObjectFileName>$(IntDir)vpx_scale_generic_yv12config.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vpx_scale\generic\yv12extend.c">

-      <ObjectFileName>$(IntDir)vpx_scale_generic_yv12extend.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vpx_scale\generic\gen_scalers.c">

-      <ObjectFileName>$(IntDir)vpx_scale_generic_gen_scalers.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vpx_scale\vpx_scale_rtcd.c" />

-    <ClCompile Include="..\vp9\common\vp9_blockd.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_blockd.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_debugmodes.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_debugmodes.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_entropy.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_entropy.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_entropymode.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_entropymode.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_entropymv.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_entropymv.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_pred_common.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_pred_common.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_prob.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_prob.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_rtcd.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_rtcd.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_scale.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_scale.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_seg_common.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_seg_common.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_thread.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_thread.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_tile_common.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_tile_common.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_loopfilter.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_loopfilter.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_mvref_common.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_mvref_common.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_quant_common.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_quant_common.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_common_data.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_common_data.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_scan.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_scan.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\vp9_dx_iface.c">

-      <ObjectFileName>$(IntDir)vp9_vp9_dx_iface.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9_decodemv.c">

-      <ObjectFileName>$(IntDir)vp9_decoder_vp9_decodemv.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9_decodeframe.c">

-      <ObjectFileName>$(IntDir)vp9_decoder_vp9_decodeframe.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9_detokenize.c">

-      <ObjectFileName>$(IntDir)vp9_decoder_vp9_detokenize.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9_reader.c">

-      <ObjectFileName>$(IntDir)vp9_decoder_vp9_reader.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9_read_bit_buffer.c">

-      <ObjectFileName>$(IntDir)vp9_decoder_vp9_read_bit_buffer.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9_decoder.c">

-      <ObjectFileName>$(IntDir)vp9_decoder_vp9_decoder.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9_dsubexp.c">

-      <ObjectFileName>$(IntDir)vp9_decoder_vp9_dsubexp.obj</ObjectFileName>

-    </ClCompile>

-    <None Include="..\vpx.def" />

-  </ItemGroup>

-  <ItemGroup>

-    <ClInclude Include="..\vp9\common\vp9lux_log.h" />

-    <ClInclude Include="..\vp9\decoder\interop\vp9lux_cl_wrapper.h" />

-    <ClInclude Include="..\vp9\decoder\interop\vp9lux_interop.h" />

-    <ClInclude Include="..\vp9\decoder\kernels\pssl_common.h" />

-    <ClInclude Include="..\vp9\decoder\kernels\pssl_idct_base.h" />

-    <ClInclude Include="..\vp9\decoder\kernels\pssl_inter_common.h" />

-    <ClInclude Include="..\vp9\decoder\vp9lux_alt_inter_ocl.h" />

-    <ClInclude Include="..\vp9\decoder\vp9lux_decode_block.h" />

-    <ClInclude Include="..\vp9\decoder\vp9lux_dx_compute.h" />

-    <ClInclude Include="..\vp9\decoder\vp9lux_dx_window.h" />

-    <ClInclude Include="..\vp9\decoder\vp9lux_intra_modes_table_binary.h" />

-    <ClInclude Include="..\vp9\decoder\vp9lux_intra_ocl.h" />

-    <ClInclude Include="..\vp9\decoder\vp9lux_loopfilter_ocl.h" />

-    <ClInclude Include="..\vp9\decoder\vp9lux_ocl.h" />

-    <ClInclude Include="..\vp9\decoder\vp9lux_ocl_binary.h" />

-    <ClInclude Include="..\vp9\decoder\vp9lux_ocl_programs.h" />

-    <ClInclude Include="..\vp9\decoder\vp9lux_thread.h" />

-    <ClInclude Include="..\vp9\decoder\vp9lux_transform_ocl.h" />

-    <ClInclude Include="..\vp9\decoder\vp9lux_types.h" />

-    <ClInclude Include="..\vpx\vpx_decoder.h" />

-    <ClInclude Include="..\vpx\internal\vpx_codec_internal.h" />

-    <ClInclude Include="..\vpx\vpx_codec.h" />

-    <ClInclude Include="..\vpx\vpx_frame_buffer.h" />

-    <ClInclude Include="..\vpx\vpx_hw_image.h" />

-    <ClInclude Include="..\vpx\vpx_image.h" />

-    <ClInclude Include="..\vpx\vpx_integer.h" />

-    <ClInclude Include="..\vpx_mem\vpx_mem.h" />

-    <ClInclude Include="..\vpx_mem\include\vpx_mem_intrnl.h" />

-    <ClInclude Include="..\vpx_scale\yv12config.h" />

-    <ClInclude Include="..\vpx_scale\vpx_scale.h" />

-    <ClInclude Include="..\vpx_ports\asm_offsets.h" />

-    <ClInclude Include="..\vpx_ports\mem.h" />

-    <ClInclude Include="..\vpx_ports\vpx_timer.h" />

-    <ClInclude Include="..\vpx_ports\x86.h" />

-    <ClInclude Include="..\vp9\vp9_iface_common.h" />

-    <ClInclude Include="..\vp9\common\vp9_ppflags.h" />

-    <ClInclude Include="..\vp9\common\vp9_filter.h" />

-    <ClInclude Include="..\vp9\common\vp9_frame_buffers.h" />

-    <ClInclude Include="..\vp9\common\vp9_blockd.h" />

-    <ClInclude Include="..\vp9\common\vp9_common.h" />

-    <ClInclude Include="..\vp9\common\vp9_entropy.h" />

-    <ClInclude Include="..\vp9\common\vp9_entropymode.h" />

-    <ClInclude Include="..\vp9\common\vp9_entropymv.h" />

-    <ClInclude Include="..\vp9\common\vp9_enums.h" />

-    <ClInclude Include="..\vp9\common\vp9_loopfilter.h" />

-    <ClInclude Include="..\vp9\common\vp9_mv.h" />

-    <ClInclude Include="..\vp9\common\vp9_pred_common.h" />

-    <ClInclude Include="..\vp9\common\vp9_prob.h" />

-    <ClInclude Include="..\vp9\common\vp9_quant_common.h" />

-    <ClInclude Include="..\vp9\common\vp9_scale.h" />

-    <ClInclude Include="..\vp9\common\vp9_seg_common.h" />

-    <ClInclude Include="..\vp9\common\vp9_systemdependent.h" />

-    <ClInclude Include="..\vp9\common\vp9_textblit.h" />

-    <ClInclude Include="..\vp9\common\vp9_thread.h" />

-    <ClInclude Include="..\vp9\common\vp9_tile_common.h" />

-    <ClInclude Include="..\vp9\common\vp9_mvref_common.h" />

-    <ClInclude Include="..\vp9\common\vp9_common_data.h" />

-    <ClInclude Include="..\vp9\common\vp9_scan.h" />

-    <ClInclude Include="..\vp9\decoder\vp9_decodeframe.h" />

-    <ClInclude Include="..\vp9\decoder\vp9_dthread.h" />

-    <ClInclude Include="..\vp9\decoder\vp9_reader.h" />

-    <ClInclude Include="..\vp9\decoder\vp9_read_bit_buffer.h" />

-    <ClInclude Include="..\vp9\decoder\vp9_decodemv.h" />

-    <ClInclude Include="..\vp9\decoder\vp9_detokenize.h" />

-    <ClInclude Include="..\vp9\decoder\vp9_decoder.h" />

-    <ClInclude Include="..\vp9\decoder\vp9_dsubexp.h" />

-    <ClInclude Include="..\vpx_ports\emmintrin_compat.h" />

-    <ClInclude Include="..\vpx_ports\mem_ops.h" />

-    <ClInclude Include="..\vpx_ports\mem_ops_aligned.h" />

-    <ClInclude Include="..\vpx_ports\vpx_once.h" />

-    <ClInclude Include="..\vp9_rtcd.h" />

-    <ClInclude Include="vpx_scale_rtcd.h" />

-  </ItemGroup>

-  <ItemGroup>

-    <None Include="..\vpx\vpx_codec.mk" />

-  </ItemGroup>

-  <ItemGroup>

-    <None Include="..\vp9\decoder\kernels\ps.hlsl">

-      <FileType>Document</FileType>

-    </None>

-    <None Include="..\vp9\decoder\kernels\vs.hlsl">

-      <FileType>Document</FileType>

-    </None>

-  </ItemGroup>

-  <ItemGroup>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_16x16full_c.pssl">

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_32x32full_c.pssl">

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_4x4full_c.pssl">

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_8x8full_c.pssl">

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-  </ItemGroup>

-  <ItemGroup>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_compound_c.pssl">

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_main_c.pssl">

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\intra_borders_c.pssl">

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\intra_main_c.pssl">

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\lf_c.pssl">

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-  </ItemGroup>

-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

-  <Import Project="$(SolutionDir)\SceGnm.targets" Condition="Exists('$(SolutionDir)\SceGnm.Development.props')" />

-  <Import Project="$(SCE_ORBIS_SDK_DIR)\host_tools\msbuild\SceGnm.targets" Condition="!Exists('$(SolutionDir)\SceGnm.Development.props')" />

-  <ImportGroup Label="ExtensionTargets" />

-</Project>
\ No newline at end of file
diff --git a/src/third_party/libvpx_gpu/vp9-dec-core/build/vpx-dec-core.vcxproj b/src/third_party/libvpx_gpu/vp9-dec-core/build/vpx-dec-core.vcxproj
deleted file mode 100644
index 0e81043..0000000
--- a/src/third_party/libvpx_gpu/vp9-dec-core/build/vpx-dec-core.vcxproj
+++ /dev/null
@@ -1,677 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>

-<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

-  <ItemGroup Label="ProjectConfigurations">

-    <ProjectConfiguration Include="Debug|ORBIS">

-      <Configuration>Debug</Configuration>

-      <Platform>ORBIS</Platform>

-    </ProjectConfiguration>

-    <ProjectConfiguration Include="Debug|Win32">

-      <Configuration>Debug</Configuration>

-      <Platform>Win32</Platform>

-    </ProjectConfiguration>

-    <ProjectConfiguration Include="Debug|x64">

-      <Configuration>Debug</Configuration>

-      <Platform>x64</Platform>

-    </ProjectConfiguration>

-    <ProjectConfiguration Include="Release|ORBIS">

-      <Configuration>Release</Configuration>

-      <Platform>ORBIS</Platform>

-    </ProjectConfiguration>

-    <ProjectConfiguration Include="Release|Win32">

-      <Configuration>Release</Configuration>

-      <Platform>Win32</Platform>

-    </ProjectConfiguration>

-    <ProjectConfiguration Include="Release|x64">

-      <Configuration>Release</Configuration>

-      <Platform>x64</Platform>

-    </ProjectConfiguration>

-  </ItemGroup>

-  <PropertyGroup Label="Globals">

-    <ProjectGuid>{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}</ProjectGuid>

-    <RootNamespace>vpx</RootNamespace>

-    <Keyword>ManagedCProj</Keyword>

-    <ProjectName>vp9-dec-core</ProjectName>

-  </PropertyGroup>

-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">

-    <ConfigurationType>StaticLibrary</ConfigurationType>

-    <CharacterSet>Unicode</CharacterSet>

-    <WholeProgramOptimization>true</WholeProgramOptimization>

-    <PlatformToolset>v140</PlatformToolset>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">

-    <ConfigurationType>StaticLibrary</ConfigurationType>

-    <CharacterSet>Unicode</CharacterSet>

-    <WholeProgramOptimization>true</WholeProgramOptimization>

-    <PlatformToolset>v140</PlatformToolset>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'" Label="Configuration">

-    <ConfigurationType>StaticLibrary</ConfigurationType>

-    <CharacterSet>Unicode</CharacterSet>

-    <WholeProgramOptimization>true</WholeProgramOptimization>

-    <PlatformToolset>v140</PlatformToolset>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">

-    <ConfigurationType>StaticLibrary</ConfigurationType>

-    <CharacterSet>Unicode</CharacterSet>

-    <PlatformToolset>v140</PlatformToolset>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">

-    <ConfigurationType>StaticLibrary</ConfigurationType>

-    <CharacterSet>Unicode</CharacterSet>

-    <PlatformToolset>v140</PlatformToolset>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'" Label="Configuration">

-    <ConfigurationType>StaticLibrary</ConfigurationType>

-    <CharacterSet>Unicode</CharacterSet>

-    <PlatformToolset>Clang</PlatformToolset>

-  </PropertyGroup>

-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />

-  <ImportGroup Label="ExtensionSettings">

-    <Import Project="$(ProgramFiles)\SCE\ORBIS SDKs\3.500\host_tools\msbuild\SceShader.props" />

-    <Import Project="$(VCTargetsPath)\BuildCustomizations\OrbisWavePsslc.props" />

-  </ImportGroup>

-  <ImportGroup Label="PropertySheets">

-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

-  </ImportGroup>

-  <PropertyGroup Label="UserMacros" />

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">

-    <OutDir>$(SolutionDir)..\lib\msvs10\$(Configuration)\win$(PlatformArchitecture)\</OutDir>

-    <IntDir>$(SolutionDir)..\obj\msvs10\$(ProjectName)\$(Configuration)\win$(PlatformArchitecture)\</IntDir>

-    <TargetName>$(ProjectName)$(PlatformArchitecture)</TargetName>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">

-    <OutDir>$(SolutionDir)..\lib\msvs10\$(Configuration)\win$(PlatformArchitecture)\</OutDir>

-    <IntDir>$(SolutionDir)..\obj\msvs10\$(ProjectName)\$(Configuration)\win$(PlatformArchitecture)\</IntDir>

-    <TargetName>$(ProjectName)$(PlatformArchitecture)</TargetName>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">

-    <TargetName>$(ProjectName)</TargetName>

-    <GnmUseGnm>true</GnmUseGnm>

-    <GnmUseGnmx>true</GnmUseGnmx>

-    <GnmUseAddressLibrary>true</GnmUseAddressLibrary>

-    <GnmUseLibShaderBinary>true</GnmUseLibShaderBinary>

-    <GnmUseGNF>true</GnmUseGNF>

-    <GnmUseTextureTool>false</GnmUseTextureTool>

-    <GnmUsePM4Dump>true</GnmUsePM4Dump>

-    <GnmUseSampleCommon>false</GnmUseSampleCommon>

-    <GnmProjectType>SampleLib</GnmProjectType>

-    <OutDir>$(SolutionDir)lib\$(Configuration)\</OutDir>

-    <IntDir>$(SolutionDir)obj\$(ProjectName)\$(Configuration)\</IntDir>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">

-    <OutDir>$(SolutionDir)..\lib\msvs10\$(Configuration)\win$(PlatformArchitecture)\</OutDir>

-    <IntDir>$(SolutionDir)..\obj\msvs10\$(ProjectName)\$(Configuration)\win$(PlatformArchitecture)\</IntDir>

-    <TargetName>$(ProjectName)$(PlatformArchitecture)</TargetName>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">

-    <OutDir>$(SolutionDir)..\lib\msvs10\$(Configuration)\win$(PlatformArchitecture)\</OutDir>

-    <IntDir>$(SolutionDir)..\obj\msvs10\$(ProjectName)\$(Configuration)\win$(PlatformArchitecture)\</IntDir>

-    <TargetName>$(ProjectName)$(PlatformArchitecture)</TargetName>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">

-    <TargetName>$(ProjectName)</TargetName>

-    <OutDir>$(SolutionDir)lib\$(Configuration)\</OutDir>

-    <IntDir>$(SolutionDir)obj\$(ProjectName)\$(Configuration)\</IntDir>

-  </PropertyGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">

-    <PreBuildEvent>

-      <Command>cd ./script

-call amd_build.bat</Command>

-    </PreBuildEvent>

-    <ClCompile>

-      <Optimization>Disabled</Optimization>

-      <AdditionalIncludeDirectories>.;..;$(SolutionDir)/../../Thirdparty/amd/mcl/1.6/amdmcl/inc;$(ProjectDir)build_$(Platform);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

-      <PreprocessorDefinitions>WIN32;_DEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>

-      <WarningLevel>Level3</WarningLevel>

-    </ClCompile>

-    <Lib>

-      <AdditionalLibraryDirectories>

-      </AdditionalLibraryDirectories>

-      <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>

-    </Lib>

-  </ItemDefinitionGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">

-    <PreBuildEvent>

-      <Command>

-      </Command>

-    </PreBuildEvent>

-    <ClCompile>

-      <Optimization>Disabled</Optimization>

-      <AdditionalIncludeDirectories>.;..;$(SolutionDir)/../../Thirdparty/amd/mcl/1.6/amdmcl/inc;$(ProjectDir)build_$(Platform);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

-      <PreprocessorDefinitions>WIN32;_DEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>

-      <WarningLevel>Level3</WarningLevel>

-    </ClCompile>

-    <Lib>

-      <AdditionalLibraryDirectories>

-      </AdditionalLibraryDirectories>

-      <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>

-    </Lib>

-    <ProjectReference>

-      <LinkLibraryDependencies>true</LinkLibraryDependencies>

-    </ProjectReference>

-  </ItemDefinitionGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">

-    <PreBuildEvent>

-      <Command>

-      </Command>

-    </PreBuildEvent>

-    <ClCompile>

-      <Optimization>Disabled</Optimization>

-      <AdditionalIncludeDirectories>.;..;$(SolutionDir)../Thirdparty/amd/mcl/1.6/amdmcl/inc;$(ProjectDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

-      <PreprocessorDefinitions>LUXOFT_VP9_ENABLE_SCALING;_DEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>

-      <WarningLevel>Level3</WarningLevel>

-      <GenerateDebugInformation>true</GenerateDebugInformation>

-    </ClCompile>

-    <Lib>

-      <AdditionalLibraryDirectories>

-      </AdditionalLibraryDirectories>

-      <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>

-    </Lib>

-    <ProjectReference>

-      <LinkLibraryDependencies>true</LinkLibraryDependencies>

-    </ProjectReference>

-  </ItemDefinitionGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">

-    <PreBuildEvent>

-      <Command>cd ./script

-call amd_build.bat</Command>

-    </PreBuildEvent>

-    <ClCompile>

-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>

-      <Optimization>MaxSpeed</Optimization>

-      <AdditionalIncludeDirectories>.;..;$(SolutionDir)/../../Thirdparty/amd/mcl/1.6/amdmcl/inc;$(ProjectDir)build_$(Platform);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

-      <PreprocessorDefinitions>WIN32;NDEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>

-      <WarningLevel>Level3</WarningLevel>

-      <WholeProgramOptimization>true</WholeProgramOptimization>

-    </ClCompile>

-    <Lib>

-      <AdditionalLibraryDirectories>

-      </AdditionalLibraryDirectories>

-      <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>

-    </Lib>

-  </ItemDefinitionGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">

-    <PreBuildEvent>

-      <Command>cd ./script

-call amd_build.bat</Command>

-    </PreBuildEvent>

-    <ClCompile>

-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>

-      <Optimization>MaxSpeed</Optimization>

-      <AdditionalIncludeDirectories>.;..;$(SolutionDir)/../../Thirdparty/amd/mcl/1.6/amdmcl/inc;$(ProjectDir)build_$(Platform);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

-      <PreprocessorDefinitions>WIN32;NDEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>

-      <WarningLevel>Level3</WarningLevel>

-    </ClCompile>

-    <Lib>

-      <AdditionalLibraryDirectories>$(AMDAPPSDKROOT)\lib\x86_64;</AdditionalLibraryDirectories>

-      <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>

-    </Lib>

-  </ItemDefinitionGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">

-    <PreBuildEvent>

-      <Command>

-      </Command>

-    </PreBuildEvent>

-    <ClCompile>

-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>

-      <Optimization>MaxSpeed</Optimization>

-      <AdditionalIncludeDirectories>.;..;$(SolutionDir)../Thirdparty/amd/mcl/1.6/amdmcl/inc;$(ProjectDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

-      <PreprocessorDefinitions>LUXOFT_VP9_ENABLE_SCALING;WIN32;NDEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>

-      <WarningLevel>Level3</WarningLevel>

-      <OptimizationLevel>Level3</OptimizationLevel>

-      <GenerateDebugInformation>true</GenerateDebugInformation>

-      <LinkTimeOptimization>true</LinkTimeOptimization>

-      <NoStrictAliasing>true</NoStrictAliasing>

-      <UnrollLoops>false</UnrollLoops>

-    </ClCompile>

-    <Lib>

-      <AdditionalLibraryDirectories>$(AMDAPPSDKROOT)\lib\x86_64;</AdditionalLibraryDirectories>

-      <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>

-    </Lib>

-  </ItemDefinitionGroup>

-  <ItemGroup>

-    <ClCompile Include="..\vp9\common\vp9_scale.c" />

-    <ClCompile Include="..\vp9\common\vp9_scan.c" />

-    <ClCompile Include="..\vp9\decoder\vp9lux_inter.cpp" />

-    <ClCompile Include="..\vp9\decoder\vp9lux_decode_block.cpp" />

-    <ClCompile Include="..\vp9\decoder\vp9lux_intra.cpp" />

-    <ClCompile Include="..\vp9\decoder\vp9lux_linear_allocator.cpp" />

-    <ClCompile Include="..\vp9\decoder\vp9lux_loopfilter.cpp" />

-    <ClCompile Include="..\vp9\decoder\vp9lux_dec.cpp">

-      <OptimizationLevel Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Levels</OptimizationLevel>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9lux_gpu_mem_ps4.cpp">

-      <OptimizationLevel Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Levels</OptimizationLevel>

-      <LinkTimeOptimization Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">false</LinkTimeOptimization>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9lux_gpu_programs.cpp" />

-    <ClCompile Include="..\vp9\decoder\vp9lux_thread.c" />

-    <ClCompile Include="..\vp9\decoder\vp9lux_transform.cpp" />

-    <ClCompile Include="..\vpx\src\vpx_decoder.c">

-      <ObjectFileName>$(IntDir)vpx_src_vpx_decoder.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vpx\src\vpx_codec.c">

-      <ObjectFileName>$(IntDir)vpx_src_vpx_codec.obj</ObjectFileName>

-      <OptimizationLevel Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Level3</OptimizationLevel>

-      <LinkTimeOptimization Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">true</LinkTimeOptimization>

-    </ClCompile>

-    <ClCompile Include="..\vpx\src\vpx_image.c">

-      <ObjectFileName>$(IntDir)vpx_src_vpx_image.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vpx_mem\vpx_mem.c">

-      <ObjectFileName>$(IntDir)vpx_mem_vpx_mem.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vpx_scale\generic\vpx_scale.c">

-      <ObjectFileName>$(IntDir)vpx_scale_generic_vpx_scale.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vpx_scale\generic\yv12config.c">

-      <ObjectFileName>$(IntDir)vpx_scale_generic_yv12config.obj</ObjectFileName>

-      <OptimizationLevel Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Level3</OptimizationLevel>

-      <LinkTimeOptimization Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">true</LinkTimeOptimization>

-    </ClCompile>

-    <ClCompile Include="..\vpx_scale\generic\yv12extend.c">

-      <ObjectFileName>$(IntDir)vpx_scale_generic_yv12extend.obj</ObjectFileName>

-      <OptimizationLevel Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Level3</OptimizationLevel>

-      <LinkTimeOptimization Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">true</LinkTimeOptimization>

-    </ClCompile>

-    <ClCompile Include="..\vpx_scale\generic\gen_scalers.c">

-      <ObjectFileName>$(IntDir)vpx_scale_generic_gen_scalers.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vpx_scale\vpx_scale_rtcd.c">

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">false</ExcludedFromBuild>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_blockd.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_blockd.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_debugmodes.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_debugmodes.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_entropy.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_entropy.obj</ObjectFileName>

-      <OptimizationLevel Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Level3</OptimizationLevel>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_entropymode.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_entropymode.obj</ObjectFileName>

-      <OptimizationLevel Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Level3</OptimizationLevel>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_entropymv.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_entropymv.obj</ObjectFileName>

-      <OptimizationLevel Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Level3</OptimizationLevel>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_pred_common.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_pred_common.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_prob.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_prob.obj</ObjectFileName>

-      <OptimizationLevel Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Level3</OptimizationLevel>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_seg_common.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_seg_common.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_thread.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_thread.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_tile_common.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_tile_common.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_loopfilter.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_loopfilter.obj</ObjectFileName>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">false</ExcludedFromBuild>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_mvref_common.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_mvref_common.obj</ObjectFileName>

-      <OptimizationLevel Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Levels</OptimizationLevel>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_quant_common.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_quant_common.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_common_data.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_common_data.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\vp9_dx_iface.c">

-      <ObjectFileName>$(IntDir)vp9_vp9_dx_iface.obj</ObjectFileName>

-      <OptimizationLevel Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Level3</OptimizationLevel>

-      <LinkTimeOptimization Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">true</LinkTimeOptimization>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9_decodemv.c">

-      <ObjectFileName>$(IntDir)vp9_decoder_vp9_decodemv.obj</ObjectFileName>

-      <OptimizationLevel Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Levels</OptimizationLevel>

-      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">-Wno-unused-function %(AdditionalOptions)</AdditionalOptions>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9_decodeframe.c">

-      <ObjectFileName>$(IntDir)vp9_decoder_vp9_decodeframe.obj</ObjectFileName>

-      <OptimizationLevel Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Level3</OptimizationLevel>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9_detokenize.c">

-      <ObjectFileName>$(IntDir)vp9_decoder_vp9_detokenize.obj</ObjectFileName>

-      <OptimizationLevel Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Level3</OptimizationLevel>

-      <UnrollLoops Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">false</UnrollLoops>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9_reader.c">

-      <ObjectFileName>$(IntDir)vp9_decoder_vp9_reader.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9_read_bit_buffer.c">

-      <ObjectFileName>$(IntDir)vp9_decoder_vp9_read_bit_buffer.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9_decoder.c">

-      <ObjectFileName>$(IntDir)vp9_decoder_vp9_decoder.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9_dsubexp.c">

-      <ObjectFileName>$(IntDir)vp9_decoder_vp9_dsubexp.obj</ObjectFileName>

-      <OptimizationLevel Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Level3</OptimizationLevel>

-    </ClCompile>

-    <None Include="..\vpx.def" />

-  </ItemGroup>

-  <ItemGroup>

-    <ClInclude Include="..\vp9\common\vp9lux_log.h" />

-    <ClInclude Include="..\vp9\common\vp9_onyxc_int.h" />

-    <ClInclude Include="..\vp9\common\vp9_scale.h" />

-    <ClInclude Include="..\vp9\common\vp9_scan.h" />

-    <ClInclude Include="..\vp9\decoder\kernels\pssl_common.h" />

-    <ClInclude Include="..\vp9\decoder\kernels\pssl_genblock_common.h" />

-    <ClInclude Include="..\vp9\decoder\kernels\pssl_idct_base.h" />

-    <ClInclude Include="..\vp9\decoder\kernels\pssl_inter_common.h" />

-    <ClInclude Include="..\vp9\decoder\kernels\pssl_intra_common.h" />

-    <ClInclude Include="..\vp9\decoder\kernels\pssl_lf_common.h" />

-    <ClInclude Include="..\vp9\decoder\vp9lux_inter.h" />

-    <ClInclude Include="..\vp9\decoder\vp9lux_decode_block.h" />

-    <ClInclude Include="..\vp9\decoder\vp9lux_intra_modes_table_binary.h" />

-    <ClInclude Include="..\vp9\decoder\vp9lux_intra.h" />

-    <ClInclude Include="..\vp9\decoder\vp9lux_linear_allocator.h" />

-    <ClInclude Include="..\vp9\decoder\vp9lux_loopfilter.h" />

-    <ClInclude Include="..\vp9\decoder\vp9lux_dec.h" />

-    <ClInclude Include="..\vp9\decoder\vp9lux_gpu_programs.h" />

-    <ClInclude Include="..\vp9\decoder\vp9lux_thread.h" />

-    <ClInclude Include="..\vp9\decoder\vp9lux_transform.h" />

-    <ClInclude Include="..\vp9\decoder\vp9lux_types.h" />

-    <ClInclude Include="..\vpx\vpx_decoder.h" />

-    <ClInclude Include="..\vpx\internal\vpx_codec_internal.h" />

-    <ClInclude Include="..\vpx\vpx_codec.h" />

-    <ClInclude Include="..\vpx\vpx_frame_buffer.h" />

-    <ClInclude Include="..\vpx\vpx_hw_image.h" />

-    <ClInclude Include="..\vpx\vpx_image.h" />

-    <ClInclude Include="..\vpx\vpx_integer.h" />

-    <ClInclude Include="..\vpx_mem\vpx_mem.h" />

-    <ClInclude Include="..\vpx_mem\include\vpx_mem_intrnl.h" />

-    <ClInclude Include="..\vpx_scale\yv12config.h" />

-    <ClInclude Include="..\vpx_scale\vpx_scale.h" />

-    <ClInclude Include="..\vpx_ports\asm_offsets.h" />

-    <ClInclude Include="..\vpx_ports\mem.h" />

-    <ClInclude Include="..\vpx_ports\vpx_timer.h" />

-    <ClInclude Include="..\vpx_ports\x86.h" />

-    <ClInclude Include="..\vp9\common\vp9_ppflags.h" />

-    <ClInclude Include="..\vp9\common\vp9_filter.h" />

-    <ClInclude Include="..\vp9\common\vp9_frame_buffers.h" />

-    <ClInclude Include="..\vp9\common\vp9_blockd.h" />

-    <ClInclude Include="..\vp9\common\vp9_common.h" />

-    <ClInclude Include="..\vp9\common\vp9_entropy.h" />

-    <ClInclude Include="..\vp9\common\vp9_entropymode.h" />

-    <ClInclude Include="..\vp9\common\vp9_entropymv.h" />

-    <ClInclude Include="..\vp9\common\vp9_enums.h" />

-    <ClInclude Include="..\vp9\common\vp9_loopfilter.h" />

-    <ClInclude Include="..\vp9\common\vp9_mv.h" />

-    <ClInclude Include="..\vp9\common\vp9_pred_common.h" />

-    <ClInclude Include="..\vp9\common\vp9_prob.h" />

-    <ClInclude Include="..\vp9\common\vp9_quant_common.h" />

-    <ClInclude Include="..\vp9\common\vp9_seg_common.h" />

-    <ClInclude Include="..\vp9\common\vp9_systemdependent.h" />

-    <ClInclude Include="..\vp9\common\vp9_textblit.h" />

-    <ClInclude Include="..\vp9\common\vp9_thread.h" />

-    <ClInclude Include="..\vp9\common\vp9_tile_common.h" />

-    <ClInclude Include="..\vp9\common\vp9_mvref_common.h" />

-    <ClInclude Include="..\vp9\common\vp9_common_data.h" />

-    <ClInclude Include="..\vp9\decoder\vp9_decodeframe.h" />

-    <ClInclude Include="..\vp9\decoder\vp9_dthread.h" />

-    <ClInclude Include="..\vp9\decoder\vp9_reader.h" />

-    <ClInclude Include="..\vp9\decoder\vp9_read_bit_buffer.h" />

-    <ClInclude Include="..\vp9\decoder\vp9_decodemv.h" />

-    <ClInclude Include="..\vp9\decoder\vp9_detokenize.h" />

-    <ClInclude Include="..\vp9\decoder\vp9_decoder.h" />

-    <ClInclude Include="..\vp9\decoder\vp9_dsubexp.h" />

-    <ClInclude Include="..\vpx_ports\emmintrin_compat.h" />

-    <ClInclude Include="..\vpx_ports\mem_ops.h" />

-    <ClInclude Include="..\vpx_ports\mem_ops_aligned.h" />

-    <ClInclude Include="vpx_scale_rtcd.h">

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">false</ExcludedFromBuild>

-    </ClInclude>

-  </ItemGroup>

-  <ItemGroup>

-    <None Include="..\vpx\vpx_codec.mk" />

-  </ItemGroup>

-  <ItemGroup>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_16x16full_c.pssl">

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_32x32full_c.pssl">

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_8x8full_c.pssl">

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_compound_c.pssl">

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_main_c.pssl">

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_ext_borders_c.pssl">

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\intra_main_c.pssl">

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\lf_c.pssl">

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-  </ItemGroup>

-  <ItemGroup>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_4x4full_c.pssl">

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-  </ItemGroup>

-  <ItemGroup>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_4x4lossless_c.pssl">

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-  </ItemGroup>

-  <ItemGroup>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_resize_c.pssl">

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_resize_compound_c.pssl">

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-  </ItemGroup>

-  <ItemGroup>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_main_copy_c.pssl">

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_main_hor_c.pssl">

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_main_ver_c.pssl">

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-  </ItemGroup>

-  <ItemGroup>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\gen_blocks_c.pssl">

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-  </ItemGroup>

-  <ItemGroup>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_clear_block_c.pssl">

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-  </ItemGroup>

-  <ItemGroup>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\gen_blocks_lf_c.pssl">

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-  </ItemGroup>

-  <ItemGroup>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_16x16full_hbd_c.pssl">

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">sce_cs_orbis</Profile>

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_32x32full_hbd_c.pssl">

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">sce_cs_orbis</Profile>

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_4x4full_hbd_c.pssl">

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">sce_cs_orbis</Profile>

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_4x4lossless_hbd_c.pssl">

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">sce_cs_orbis</Profile>

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_8x8full_hbd_c.pssl">

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">sce_cs_orbis</Profile>

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\intra_main_hbd_c.pssl">

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">sce_cs_orbis</Profile>

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-  </ItemGroup>

-  <ItemGroup>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\intra_fillborder_c.pssl">

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">sce_cs_orbis</Profile>

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-  </ItemGroup>

-  <ItemGroup>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_main_hbd_c.pssl">

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">sce_cs_orbis</Profile>

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-  </ItemGroup>

-  <ItemGroup>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_compound_hbd_c.pssl">

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">sce_cs_orbis</Profile>

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-  </ItemGroup>

-  <ItemGroup>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\lf_hbd_c.pssl">

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-  </ItemGroup>

-  <ItemGroup>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_ext_borders_hbd_c.pssl">

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">sce_cs_orbis</Profile>

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-  </ItemGroup>

-  <ItemGroup>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_resize_compound_hbd_c.pssl">

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">sce_cs_orbis</Profile>

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_resize_hbd_c.pssl">

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">sce_cs_orbis</Profile>

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-  </ItemGroup>

-  <ItemGroup>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_copy_hbd_c.pssl">

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">sce_cs_orbis</Profile>

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_hor_hbd_c.pssl">

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">sce_cs_orbis</Profile>

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_ver_hbd_c.pssl">

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">sce_cs_orbis</Profile>

-      <Profile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">sce_cs_orbis</Profile>

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-  </ItemGroup>

-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

-  <ImportGroup Label="ExtensionTargets">

-    <Import Project="$(ProgramFiles)\SCE\ORBIS SDKs\3.500\host_tools\msbuild\SceShader.targets" />

-    <Import Project="$(VCTargetsPath)\BuildCustomizations\OrbisWavePsslc.targets" />

-  </ImportGroup>

-</Project>
\ No newline at end of file
diff --git a/src/third_party/libvpx_gpu/vp9-dec-core/build/vpx-dec-core.vcxproj.filters b/src/third_party/libvpx_gpu/vp9-dec-core/build/vpx-dec-core.vcxproj.filters
deleted file mode 100644
index 7622140..0000000
--- a/src/third_party/libvpx_gpu/vp9-dec-core/build/vpx-dec-core.vcxproj.filters
+++ /dev/null
@@ -1,294 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>

-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

-  <ItemGroup>

-    <ClCompile Include="..\vpx\src\vpx_decoder.c" />

-    <ClCompile Include="..\vpx\src\vpx_codec.c" />

-    <ClCompile Include="..\vpx\src\vpx_image.c" />

-    <ClCompile Include="..\vpx_mem\vpx_mem.c" />

-    <ClCompile Include="..\vpx_scale\generic\vpx_scale.c" />

-    <ClCompile Include="..\vpx_scale\generic\yv12config.c" />

-    <ClCompile Include="..\vpx_scale\generic\yv12extend.c" />

-    <ClCompile Include="..\vpx_scale\generic\gen_scalers.c" />

-    <ClCompile Include="..\vp9\common\vp9_blockd.c" />

-    <ClCompile Include="..\vp9\common\vp9_debugmodes.c" />

-    <ClCompile Include="..\vp9\common\vp9_entropy.c" />

-    <ClCompile Include="..\vp9\common\vp9_entropymode.c" />

-    <ClCompile Include="..\vp9\common\vp9_entropymv.c" />

-    <ClCompile Include="..\vp9\common\vp9_pred_common.c" />

-    <ClCompile Include="..\vp9\common\vp9_prob.c" />

-    <ClCompile Include="..\vp9\common\vp9_scale.c" />

-    <ClCompile Include="..\vp9\common\vp9_seg_common.c" />

-    <ClCompile Include="..\vp9\common\vp9_thread.c" />

-    <ClCompile Include="..\vp9\common\vp9_tile_common.c" />

-    <ClCompile Include="..\vp9\common\vp9_loopfilter.c" />

-    <ClCompile Include="..\vp9\common\vp9_mvref_common.c" />

-    <ClCompile Include="..\vp9\common\vp9_quant_common.c" />

-    <ClCompile Include="..\vp9\common\vp9_common_data.c" />

-    <ClCompile Include="..\vp9\common\vp9_scan.c" />

-    <ClCompile Include="..\vp9\vp9_dx_iface.c" />

-    <ClCompile Include="..\vp9\decoder\vp9_decodemv.c" />

-    <ClCompile Include="..\vp9\decoder\vp9_decodeframe.c" />

-    <ClCompile Include="..\vp9\decoder\vp9_detokenize.c" />

-    <ClCompile Include="..\vp9\decoder\vp9_reader.c" />

-    <ClCompile Include="..\vp9\decoder\vp9_read_bit_buffer.c" />

-    <ClCompile Include="..\vp9\decoder\vp9_decoder.c" />

-    <ClCompile Include="..\vp9\decoder\vp9_dsubexp.c" />

-    <ClCompile Include="..\vp9\decoder\vp9lux_thread.c">

-      <Filter>lux</Filter>

-    </ClCompile>

-    <ClCompile Include="..\vpx_scale\vpx_scale_rtcd.c" />

-    <ClCompile Include="..\vp9\decoder\vp9lux_decode_block.cpp">

-      <Filter>lux</Filter>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9lux_inter.cpp">

-      <Filter>lux</Filter>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9lux_transform.cpp">

-      <Filter>lux</Filter>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9lux_gpu_programs.cpp">

-      <Filter>lux</Filter>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9lux_gpu_mem_ps4.cpp">

-      <Filter>lux</Filter>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9lux_dec.cpp">

-      <Filter>lux</Filter>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9lux_loopfilter.cpp">

-      <Filter>lux</Filter>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9lux_intra.cpp">

-      <Filter>lux</Filter>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9lux_linear_allocator.cpp">

-      <Filter>lux</Filter>

-    </ClCompile>

-  </ItemGroup>

-  <ItemGroup>

-    <ClInclude Include="..\vpx\vpx_decoder.h" />

-    <ClInclude Include="..\vpx\internal\vpx_codec_internal.h" />

-    <ClInclude Include="..\vpx\vpx_codec.h" />

-    <ClInclude Include="..\vpx\vpx_frame_buffer.h" />

-    <ClInclude Include="..\vpx\vpx_image.h" />

-    <ClInclude Include="..\vpx\vpx_integer.h" />

-    <ClInclude Include="..\vpx_mem\vpx_mem.h" />

-    <ClInclude Include="..\vpx_mem\include\vpx_mem_intrnl.h" />

-    <ClInclude Include="..\vpx_scale\yv12config.h" />

-    <ClInclude Include="..\vpx_scale\vpx_scale.h" />

-    <ClInclude Include="..\vpx_ports\asm_offsets.h" />

-    <ClInclude Include="..\vpx_ports\mem.h" />

-    <ClInclude Include="..\vpx_ports\vpx_timer.h" />

-    <ClInclude Include="..\vpx_ports\x86.h" />

-    <ClInclude Include="..\vp9\common\vp9_ppflags.h" />

-    <ClInclude Include="..\vp9\common\vp9_filter.h" />

-    <ClInclude Include="..\vp9\common\vp9_frame_buffers.h" />

-    <ClInclude Include="..\vp9\common\vp9_blockd.h" />

-    <ClInclude Include="..\vp9\common\vp9_common.h" />

-    <ClInclude Include="..\vp9\common\vp9_entropy.h" />

-    <ClInclude Include="..\vp9\common\vp9_entropymode.h" />

-    <ClInclude Include="..\vp9\common\vp9_entropymv.h" />

-    <ClInclude Include="..\vp9\common\vp9_enums.h" />

-    <ClInclude Include="..\vp9\common\vp9_loopfilter.h" />

-    <ClInclude Include="..\vp9\common\vp9_mv.h" />

-    <ClInclude Include="..\vp9\common\vp9_pred_common.h" />

-    <ClInclude Include="..\vp9\common\vp9_prob.h" />

-    <ClInclude Include="..\vp9\common\vp9_quant_common.h" />

-    <ClInclude Include="..\vp9\common\vp9_scale.h" />

-    <ClInclude Include="..\vp9\common\vp9_seg_common.h" />

-    <ClInclude Include="..\vp9\common\vp9_systemdependent.h" />

-    <ClInclude Include="..\vp9\common\vp9_textblit.h" />

-    <ClInclude Include="..\vp9\common\vp9_thread.h" />

-    <ClInclude Include="..\vp9\common\vp9_tile_common.h" />

-    <ClInclude Include="..\vp9\common\vp9_mvref_common.h" />

-    <ClInclude Include="..\vp9\common\vp9_common_data.h" />

-    <ClInclude Include="..\vp9\common\vp9_scan.h" />

-    <ClInclude Include="..\vp9\decoder\vp9_decodeframe.h" />

-    <ClInclude Include="..\vp9\decoder\vp9_dthread.h" />

-    <ClInclude Include="..\vp9\decoder\vp9_reader.h" />

-    <ClInclude Include="..\vp9\decoder\vp9_read_bit_buffer.h" />

-    <ClInclude Include="..\vp9\decoder\vp9_decodemv.h" />

-    <ClInclude Include="..\vp9\decoder\vp9_detokenize.h" />

-    <ClInclude Include="..\vp9\decoder\vp9_decoder.h" />

-    <ClInclude Include="..\vp9\decoder\vp9_dsubexp.h" />

-    <ClInclude Include="..\vpx_ports\emmintrin_compat.h" />

-    <ClInclude Include="..\vpx_ports\mem_ops.h" />

-    <ClInclude Include="..\vpx_ports\mem_ops_aligned.h" />

-    <ClInclude Include="..\vp9\decoder\vp9lux_types.h">

-      <Filter>lux</Filter>

-    </ClInclude>

-    <ClInclude Include="..\vp9\decoder\vp9lux_decode_block.h">

-      <Filter>lux</Filter>

-    </ClInclude>

-    <ClInclude Include="..\vp9\decoder\vp9lux_intra_modes_table_binary.h">

-      <Filter>lux</Filter>

-    </ClInclude>

-    <ClInclude Include="..\vp9\common\vp9lux_log.h">

-      <Filter>lux</Filter>

-    </ClInclude>

-    <ClInclude Include="..\vp9\decoder\vp9lux_thread.h">

-      <Filter>lux</Filter>

-    </ClInclude>

-    <ClInclude Include="vpx_scale_rtcd.h" />

-    <ClInclude Include="..\vpx\vpx_hw_image.h" />

-    <ClInclude Include="..\vp9\decoder\kernels\pssl_common.h">

-      <Filter>lux\kernels</Filter>

-    </ClInclude>

-    <ClInclude Include="..\vp9\decoder\kernels\pssl_idct_base.h">

-      <Filter>lux\kernels</Filter>

-    </ClInclude>

-    <ClInclude Include="..\vp9\decoder\kernels\pssl_inter_common.h">

-      <Filter>lux\kernels</Filter>

-    </ClInclude>

-    <ClInclude Include="..\vp9\decoder\vp9lux_inter.h">

-      <Filter>lux</Filter>

-    </ClInclude>

-    <ClInclude Include="..\vp9\decoder\vp9lux_transform.h">

-      <Filter>lux</Filter>

-    </ClInclude>

-    <ClInclude Include="..\vp9\decoder\vp9lux_gpu_programs.h">

-      <Filter>lux</Filter>

-    </ClInclude>

-    <ClInclude Include="..\vp9\decoder\vp9lux_dec.h">

-      <Filter>lux</Filter>

-    </ClInclude>

-    <ClInclude Include="..\vp9\decoder\vp9lux_loopfilter.h">

-      <Filter>lux</Filter>

-    </ClInclude>

-    <ClInclude Include="..\vp9\decoder\vp9lux_intra.h">

-      <Filter>lux</Filter>

-    </ClInclude>

-    <ClInclude Include="..\vp9\common\vp9_onyxc_int.h" />

-    <ClInclude Include="..\vp9\decoder\vp9lux_linear_allocator.h">

-      <Filter>lux</Filter>

-    </ClInclude>

-    <ClInclude Include="..\vp9\decoder\kernels\pssl_intra_common.h">

-      <Filter>lux\kernels</Filter>

-    </ClInclude>

-    <ClInclude Include="..\vp9\decoder\kernels\pssl_genblock_common.h">

-      <Filter>lux\kernels</Filter>

-    </ClInclude>

-    <ClInclude Include="..\vp9\decoder\kernels\pssl_lf_common.h">

-      <Filter>lux\kernels</Filter>

-    </ClInclude>

-  </ItemGroup>

-  <ItemGroup>

-    <None Include="..\vpx.def" />

-    <None Include="..\vpx\vpx_codec.mk" />

-  </ItemGroup>

-  <ItemGroup>

-    <Filter Include="lux">

-      <UniqueIdentifier>{9c8917ac-b928-40c6-b3e4-6014d514ece6}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="lux\kernels">

-      <UniqueIdentifier>{7e8d8f3b-6882-4b26-a6a1-9d61b33b1f82}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="asm">

-      <UniqueIdentifier>{6c274781-a394-48cf-baf1-485def749ece}</UniqueIdentifier>

-    </Filter>

-  </ItemGroup>

-  <ItemGroup>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_4x4full_c.pssl">

-      <Filter>lux\kernels</Filter>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_8x8full_c.pssl">

-      <Filter>lux\kernels</Filter>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_16x16full_c.pssl">

-      <Filter>lux\kernels</Filter>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_32x32full_c.pssl">

-      <Filter>lux\kernels</Filter>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_compound_c.pssl">

-      <Filter>lux\kernels</Filter>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_main_c.pssl">

-      <Filter>lux\kernels</Filter>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\intra_main_c.pssl">

-      <Filter>lux\kernels</Filter>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\lf_c.pssl">

-      <Filter>lux\kernels</Filter>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_ext_borders_c.pssl">

-      <Filter>lux\kernels</Filter>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_4x4lossless_c.pssl">

-      <Filter>lux\kernels</Filter>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_main_copy_c.pssl">

-      <Filter>lux\kernels</Filter>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_main_ver_c.pssl">

-      <Filter>lux\kernels</Filter>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_main_hor_c.pssl">

-      <Filter>lux\kernels</Filter>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_resize_c.pssl">

-      <Filter>lux\kernels</Filter>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_resize_compound_c.pssl">

-      <Filter>lux\kernels</Filter>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\gen_blocks_c.pssl">

-      <Filter>lux\kernels</Filter>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\gen_blocks_lf_c.pssl">

-      <Filter>lux\kernels</Filter>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_clear_block_c.pssl">

-      <Filter>lux\kernels</Filter>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_4x4full_hbd_c.pssl">

-      <Filter>lux\kernels</Filter>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_4x4lossless_hbd_c.pssl">

-      <Filter>lux\kernels</Filter>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_8x8full_hbd_c.pssl">

-      <Filter>lux\kernels</Filter>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_16x16full_hbd_c.pssl">

-      <Filter>lux\kernels</Filter>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_32x32full_hbd_c.pssl">

-      <Filter>lux\kernels</Filter>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\intra_main_hbd_c.pssl">

-      <Filter>lux\kernels</Filter>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\intra_fillborder_c.pssl">

-      <Filter>lux\kernels</Filter>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_main_hbd_c.pssl">

-      <Filter>lux\kernels</Filter>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_compound_hbd_c.pssl">

-      <Filter>lux\kernels</Filter>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_copy_hbd_c.pssl">

-      <Filter>lux\kernels</Filter>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_ext_borders_hbd_c.pssl">

-      <Filter>lux\kernels</Filter>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_hor_hbd_c.pssl">

-      <Filter>lux\kernels</Filter>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_resize_compound_hbd_c.pssl">

-      <Filter>lux\kernels</Filter>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_resize_hbd_c.pssl">

-      <Filter>lux\kernels</Filter>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_ver_hbd_c.pssl">

-      <Filter>lux\kernels</Filter>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\lf_hbd_c.pssl">

-      <Filter>lux\kernels</Filter>

-    </Compile_PSSL_To_Header>

-  </ItemGroup>

-</Project>
\ No newline at end of file
diff --git a/src/third_party/libvpx_gpu/vp9-dec-core/build/vpx-dec-coreVS13.vcxproj b/src/third_party/libvpx_gpu/vp9-dec-core/build/vpx-dec-coreVS13.vcxproj
deleted file mode 100644
index 049a40b..0000000
--- a/src/third_party/libvpx_gpu/vp9-dec-core/build/vpx-dec-coreVS13.vcxproj
+++ /dev/null
@@ -1,507 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>

-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

-  <ItemGroup Label="ProjectConfigurations">

-    <ProjectConfiguration Include="Debug|Win32">

-      <Configuration>Debug</Configuration>

-      <Platform>Win32</Platform>

-    </ProjectConfiguration>

-    <ProjectConfiguration Include="Debug|x64">

-      <Configuration>Debug</Configuration>

-      <Platform>x64</Platform>

-    </ProjectConfiguration>

-    <ProjectConfiguration Include="Release|Win32">

-      <Configuration>Release</Configuration>

-      <Platform>Win32</Platform>

-    </ProjectConfiguration>

-    <ProjectConfiguration Include="Release|x64">

-      <Configuration>Release</Configuration>

-      <Platform>x64</Platform>

-    </ProjectConfiguration>

-  </ItemGroup>

-  <PropertyGroup Label="Globals">

-    <ProjectGuid>{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}</ProjectGuid>

-    <RootNamespace>vpx</RootNamespace>

-    <Keyword>ManagedCProj</Keyword>

-    <ProjectName>vp9-dec-core</ProjectName>

-  </PropertyGroup>

-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">

-    <ConfigurationType>StaticLibrary</ConfigurationType>

-    <CharacterSet>Unicode</CharacterSet>

-    <WholeProgramOptimization>true</WholeProgramOptimization>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">

-    <ConfigurationType>StaticLibrary</ConfigurationType>

-    <CharacterSet>Unicode</CharacterSet>

-    <WholeProgramOptimization>true</WholeProgramOptimization>

-    <PlatformToolset>v120</PlatformToolset>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">

-    <ConfigurationType>StaticLibrary</ConfigurationType>

-    <CharacterSet>Unicode</CharacterSet>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">

-    <ConfigurationType>StaticLibrary</ConfigurationType>

-    <CharacterSet>Unicode</CharacterSet>

-    <PlatformToolset>v120</PlatformToolset>

-  </PropertyGroup>

-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />

-  <ImportGroup Label="PropertySheets">

-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

-  </ImportGroup>

-  <PropertyGroup Label="UserMacros" />

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">

-    <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>

-    <IntDir>$(Platform)\$(Configuration)\vpx\</IntDir>

-    <TargetName>$(ProjectName)</TargetName>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">

-    <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>

-    <IntDir>$(Platform)\$(Configuration)\vpx\</IntDir>

-    <TargetName>$(ProjectName)</TargetName>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">

-    <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>

-    <IntDir>$(Platform)\$(Configuration)\vpx\</IntDir>

-    <TargetName>$(ProjectName)</TargetName>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">

-    <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>

-    <IntDir>$(Platform)\$(Configuration)\vpx\</IntDir>

-    <TargetName>$(ProjectName)</TargetName>

-  </PropertyGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">

-    <PreBuildEvent>

-      <Command>call obj_int_extract.bat .. build_$(Platform)</Command>

-    </PreBuildEvent>

-    <ClCompile>

-      <Optimization>Disabled</Optimization>

-      <AdditionalIncludeDirectories>.;..;$(AMDAPPSDKROOT)\include;$(ProjectDir)build_$(Platform);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

-      <PreprocessorDefinitions>AMD_DX_INTEROP;ENABLE_DX_INTEROP;_LUXWIN32;ALT_INTER_OCL;WIN32;_DEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>

-      <WarningLevel>Level3</WarningLevel>

-    </ClCompile>

-    <Lib>

-      <AdditionalLibraryDirectories>$(AMDAPPSDKROOT)\lib\x86_64;</AdditionalLibraryDirectories>

-    </Lib>

-  </ItemDefinitionGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">

-    <PreBuildEvent>

-      <Command>

-      </Command>

-    </PreBuildEvent>

-    <ClCompile>

-      <Optimization>Disabled</Optimization>

-      <AdditionalIncludeDirectories>.;..;$(AMDAPPSDKROOT)\include;$(ProjectDir)build_$(Platform);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

-      <PreprocessorDefinitions>AMD_DX_INTEROP;_LUXWIN32;ALT_INTER_OCL;WIN32;_DEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>

-      <WarningLevel>Level3</WarningLevel>

-    </ClCompile>

-    <Lib>

-      <AdditionalLibraryDirectories>$(AMDAPPSDKROOT)\lib\x86_64;</AdditionalLibraryDirectories>

-    </Lib>

-  </ItemDefinitionGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">

-    <PreBuildEvent>

-      <Command>call obj_int_extract.bat .. build_$(Platform)

-cd ./script

-call mclBuild.bat</Command>

-    </PreBuildEvent>

-    <ClCompile>

-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>

-      <Optimization>MaxSpeed</Optimization>

-      <AdditionalIncludeDirectories>.;..;$(AMDAPPSDKROOT)\include;$(ProjectDir)build_$(Platform);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

-      <PreprocessorDefinitions>AMD_DX_INTEROP;ENABLE_DX_INTEROP;_LUXWIN32;ALT_INTER_OCL;WIN32;NDEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>

-      <WarningLevel>Level3</WarningLevel>

-      <WholeProgramOptimization>true</WholeProgramOptimization>

-    </ClCompile>

-    <Lib>

-      <AdditionalLibraryDirectories>$(AMDAPPSDKROOT)\lib\x86_64;</AdditionalLibraryDirectories>

-    </Lib>

-  </ItemDefinitionGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">

-    <PreBuildEvent>

-      <Command>call obj_int_extract.bat .. build_$(Platform)

-cd ./script

-call mclBuild.bat</Command>

-    </PreBuildEvent>

-    <ClCompile>

-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>

-      <Optimization>MaxSpeed</Optimization>

-      <AdditionalIncludeDirectories>.;..;$(AMDAPPSDKROOT)\include;$(ProjectDir)build_$(Platform);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

-      <PreprocessorDefinitions>AMD_DX_INTEROP;_LUXWIN32;ALT_INTER_OCL;WIN32;NDEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>

-      <WarningLevel>Level3</WarningLevel>

-    </ClCompile>

-    <Lib>

-      <AdditionalLibraryDirectories>$(AMDAPPSDKROOT)\lib\x86_64;</AdditionalLibraryDirectories>

-    </Lib>

-  </ItemDefinitionGroup>

-  <ItemGroup>

-    <ClCompile Include="..\vp9\decoder\interop\vp9lux_cl_wrapper.c" />

-    <ClCompile Include="..\vp9\decoder\interop\vp9lux_interop.c" />

-    <ClCompile Include="..\vp9\decoder\vp9lux_alt_inter_ocl.c" />

-    <ClCompile Include="..\vp9\decoder\vp9lux_decode_block.c" />

-    <ClCompile Include="..\vp9\decoder\vp9lux_inter_ocl.c">

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9lux_intra_ocl.c" />

-    <ClCompile Include="..\vp9\decoder\vp9lux_loopfilter_ocl.c" />

-    <ClCompile Include="..\vp9\decoder\vp9lux_mem_cuda.c">

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9lux_ocl.c" />

-    <ClCompile Include="..\vp9\decoder\vp9lux_ocl_mem_amd.c" />

-    <ClCompile Include="..\vp9\decoder\vp9lux_ocl_mem_generic.c" />

-    <ClCompile Include="..\vp9\decoder\vp9lux_ocl_programs.c" />

-    <ClCompile Include="..\vp9\decoder\vp9lux_reconinter_cl.c">

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9lux_thread.c" />

-    <ClCompile Include="..\vp9\decoder\vp9lux_transform_ocl.c" />

-    <ClCompile Include="..\vpx\src\vpx_decoder.c">

-      <ObjectFileName>$(IntDir)vpx_src_vpx_decoder.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vpx\src\vpx_encoder.c">

-      <ObjectFileName>$(IntDir)vpx_src_vpx_encoder.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vpx\src\vpx_codec.c">

-      <ObjectFileName>$(IntDir)vpx_src_vpx_codec.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vpx\src\vpx_image.c">

-      <ObjectFileName>$(IntDir)vpx_src_vpx_image.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vpx\src\vpx_psnr.c">

-      <ObjectFileName>$(IntDir)vpx_src_vpx_psnr.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vpx_mem\vpx_mem.c">

-      <ObjectFileName>$(IntDir)vpx_mem_vpx_mem.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vpx_scale\generic\vpx_scale.c">

-      <ObjectFileName>$(IntDir)vpx_scale_generic_vpx_scale.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vpx_scale\generic\yv12config.c">

-      <ObjectFileName>$(IntDir)vpx_scale_generic_yv12config.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vpx_scale\generic\yv12extend.c">

-      <ObjectFileName>$(IntDir)vpx_scale_generic_yv12extend.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vpx_scale\generic\gen_scalers.c">

-      <ObjectFileName>$(IntDir)vpx_scale_generic_gen_scalers.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vpx_scale\vpx_scale_asm_offsets.c">

-      <ObjectFileName>$(IntDir)vpx_scale_vpx_scale_asm_offsets.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vpx_scale\vpx_scale_rtcd.c">

-      <ObjectFileName>$(IntDir)vpx_scale_vpx_scale_rtcd.obj</ObjectFileName>

-    </ClCompile>

-    <CustomBuild Include="..\vpx_ports\emms.asm">

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Assembling %(Filename)%(Extension)</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Assembling %(Filename)%(Extension)</Message>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\yasm\yasm.exe -Xvc -g cv8 -f $(Platform)  -I. -I.. -I $(ProjectDir)build_$(Platform) "%(FullPath)" -o $(IntDir)vpx_ports_emms_asm.obj</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\yasm\yasm.exe -Xvc -g cv8 -f $(Platform)  -I. -I.. -I $(ProjectDir)build_$(Platform) "%(FullPath)" -o $(IntDir)vpx_ports_emms_asm.obj</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)vpx_ports_emms_asm.obj</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)vpx_ports_emms_asm.obj</Outputs>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Assembling %(Filename)%(Extension)</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Assembling %(Filename)%(Extension)</Message>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\yasm\yasm.exe -Xvc -f $(Platform)  -I. -I.. -I $(ProjectDir)build_$(Platform) "%(FullPath)" -o $(IntDir)vpx_ports_emms_asm.obj</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\yasm\yasm.exe -Xvc -f $(Platform)  -I. -I.. -I $(ProjectDir)build_$(Platform) "%(FullPath)" -o $(IntDir)vpx_ports_emms_asm.obj</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)vpx_ports_emms_asm.obj</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)vpx_ports_emms_asm.obj</Outputs>

-      <FileType>Document</FileType>

-    </CustomBuild>

-    <ClCompile Include="..\vp9\common\vp9_alloccommon.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_alloccommon.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_blockd.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_blockd.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_convolve.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_convolve.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_debugmodes.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_debugmodes.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_entropy.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_entropy.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_entropymode.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_entropymode.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_entropymv.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_entropymv.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_filter.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_filter.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_frame_buffers.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_frame_buffers.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_idct.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_idct.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_pred_common.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_pred_common.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_prob.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_prob.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_rtcd.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_rtcd.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_scale.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_scale.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_seg_common.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_seg_common.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_thread.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_thread.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_tile_common.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_tile_common.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_loopfilter.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_loopfilter.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_loopfilter_filters.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_loopfilter_filters.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_mvref_common.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_mvref_common.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_quant_common.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_quant_common.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_reconinter.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_reconinter.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_reconintra.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_reconintra.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_common_data.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_common_data.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\vp9_scan.c">

-      <ObjectFileName>$(IntDir)vp9_common_vp9_scan.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\x86\vp9_asm_stubs.c">

-      <ObjectFileName>$(IntDir)vp9_common_x86_vp9_asm_stubs.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\x86\vp9_loopfilter_intrin_sse2.c">

-      <ObjectFileName>$(IntDir)vp9_common_x86_vp9_loopfilter_intrin_sse2.obj</ObjectFileName>

-    </ClCompile>

-    <CustomBuild Include="..\vp9\common\x86\vp9_loopfilter_mmx.asm">

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Assembling %(Filename)%(Extension)</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Assembling %(Filename)%(Extension)</Message>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\yasm\yasm.exe -Xvc -g cv8 -f $(Platform)  -I. -I.. -I $(ProjectDir)build_$(Platform) "%(FullPath)" -o $(IntDir)vp9_common_x86_vp9_loopfilter_mmx_asm.obj</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\yasm\yasm.exe -Xvc -g cv8 -f $(Platform)  -I. -I.. -I $(ProjectDir)build_$(Platform) "%(FullPath)" -o $(IntDir)vp9_common_x86_vp9_loopfilter_mmx_asm.obj</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)vp9_common_x86_vp9_loopfilter_mmx_asm.obj</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)vp9_common_x86_vp9_loopfilter_mmx_asm.obj</Outputs>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Assembling %(Filename)%(Extension)</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Assembling %(Filename)%(Extension)</Message>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\yasm\yasm.exe -Xvc -f $(Platform)  -I. -I.. -I $(ProjectDir)build_$(Platform) "%(FullPath)" -o $(IntDir)vp9_common_x86_vp9_loopfilter_mmx_asm.obj</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\yasm\yasm.exe -Xvc -f $(Platform)  -I. -I.. -I $(ProjectDir)build_$(Platform) "%(FullPath)" -o $(IntDir)vp9_common_x86_vp9_loopfilter_mmx_asm.obj</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)vp9_common_x86_vp9_loopfilter_mmx_asm.obj</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)vp9_common_x86_vp9_loopfilter_mmx_asm.obj</Outputs>

-      <FileType>Document</FileType>

-    </CustomBuild>

-    <ClCompile Include="..\vp9\common\x86\vp9_subpixel_8t_intrin_ssse3.c">

-      <ObjectFileName>$(IntDir)vp9_common_x86_vp9_subpixel_8t_intrin_ssse3.obj</ObjectFileName>

-    </ClCompile>

-    <CustomBuild Include="..\vp9\common\x86\vp9_copy_sse2.asm">

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Assembling %(Filename)%(Extension)</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Assembling %(Filename)%(Extension)</Message>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\yasm\yasm.exe -Xvc -g cv8 -f $(Platform)  -I. -I.. -I $(ProjectDir)build_$(Platform) "%(FullPath)" -o $(IntDir)vp9_common_x86_vp9_copy_sse2_asm.obj</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\yasm\yasm.exe -Xvc -g cv8 -f $(Platform)  -I. -I.. -I $(ProjectDir)build_$(Platform) "%(FullPath)" -o $(IntDir)vp9_common_x86_vp9_copy_sse2_asm.obj</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)vp9_common_x86_vp9_copy_sse2_asm.obj</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)vp9_common_x86_vp9_copy_sse2_asm.obj</Outputs>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Assembling %(Filename)%(Extension)</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Assembling %(Filename)%(Extension)</Message>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\yasm\yasm.exe -Xvc -f $(Platform)  -I. -I.. -I $(ProjectDir)build_$(Platform) "%(FullPath)" -o $(IntDir)vp9_common_x86_vp9_copy_sse2_asm.obj</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\yasm\yasm.exe -Xvc -f $(Platform)  -I. -I.. -I $(ProjectDir)build_$(Platform) "%(FullPath)" -o $(IntDir)vp9_common_x86_vp9_copy_sse2_asm.obj</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)vp9_common_x86_vp9_copy_sse2_asm.obj</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)vp9_common_x86_vp9_copy_sse2_asm.obj</Outputs>

-      <FileType>Document</FileType>

-    </CustomBuild>

-    <CustomBuild Include="..\vp9\common\x86\vp9_intrapred_sse2.asm">

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Assembling %(Filename)%(Extension)</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Assembling %(Filename)%(Extension)</Message>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\yasm\yasm.exe -Xvc -g cv8 -f $(Platform)  -I. -I.. -I $(ProjectDir)build_$(Platform) "%(FullPath)" -o $(IntDir)vp9_common_x86_vp9_intrapred_sse2_asm.obj</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\yasm\yasm.exe -Xvc -g cv8 -f $(Platform)  -I. -I.. -I $(ProjectDir)build_$(Platform) "%(FullPath)" -o $(IntDir)vp9_common_x86_vp9_intrapred_sse2_asm.obj</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)vp9_common_x86_vp9_intrapred_sse2_asm.obj</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)vp9_common_x86_vp9_intrapred_sse2_asm.obj</Outputs>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Assembling %(Filename)%(Extension)</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Assembling %(Filename)%(Extension)</Message>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\yasm\yasm.exe -Xvc -f $(Platform)  -I. -I.. -I $(ProjectDir)build_$(Platform) "%(FullPath)" -o $(IntDir)vp9_common_x86_vp9_intrapred_sse2_asm.obj</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\yasm\yasm.exe -Xvc -f $(Platform)  -I. -I.. -I $(ProjectDir)build_$(Platform) "%(FullPath)" -o $(IntDir)vp9_common_x86_vp9_intrapred_sse2_asm.obj</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)vp9_common_x86_vp9_intrapred_sse2_asm.obj</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)vp9_common_x86_vp9_intrapred_sse2_asm.obj</Outputs>

-      <FileType>Document</FileType>

-    </CustomBuild>

-    <CustomBuild Include="..\vp9\common\x86\vp9_intrapred_ssse3.asm">

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Assembling %(Filename)%(Extension)</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Assembling %(Filename)%(Extension)</Message>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\yasm\yasm.exe -Xvc -g cv8 -f $(Platform)  -I. -I.. -I $(ProjectDir)build_$(Platform) "%(FullPath)" -o $(IntDir)vp9_common_x86_vp9_intrapred_ssse3_asm.obj</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\yasm\yasm.exe -Xvc -g cv8 -f $(Platform)  -I. -I.. -I $(ProjectDir)build_$(Platform) "%(FullPath)" -o $(IntDir)vp9_common_x86_vp9_intrapred_ssse3_asm.obj</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)vp9_common_x86_vp9_intrapred_ssse3_asm.obj</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)vp9_common_x86_vp9_intrapred_ssse3_asm.obj</Outputs>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Assembling %(Filename)%(Extension)</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Assembling %(Filename)%(Extension)</Message>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\yasm\yasm.exe -Xvc -f $(Platform)  -I. -I.. -I $(ProjectDir)build_$(Platform) "%(FullPath)" -o $(IntDir)vp9_common_x86_vp9_intrapred_ssse3_asm.obj</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\yasm\yasm.exe -Xvc -f $(Platform)  -I. -I.. -I $(ProjectDir)build_$(Platform) "%(FullPath)" -o $(IntDir)vp9_common_x86_vp9_intrapred_ssse3_asm.obj</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)vp9_common_x86_vp9_intrapred_ssse3_asm.obj</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)vp9_common_x86_vp9_intrapred_ssse3_asm.obj</Outputs>

-      <FileType>Document</FileType>

-    </CustomBuild>

-    <ClCompile Include="..\vp9\common\x86\vp9_idct_intrin_sse2.c">

-      <ObjectFileName>$(IntDir)vp9_common_x86_vp9_idct_intrin_sse2.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\x86\vp9_idct_intrin_ssse3.c">

-      <ObjectFileName>$(IntDir)vp9_common_x86_vp9_idct_intrin_ssse3.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\vp9_dx_iface.c">

-      <ObjectFileName>$(IntDir)vp9_vp9_dx_iface.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9_decodemv.c">

-      <ObjectFileName>$(IntDir)vp9_decoder_vp9_decodemv.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9_decodeframe.c">

-      <ObjectFileName>$(IntDir)vp9_decoder_vp9_decodeframe.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9_detokenize.c">

-      <ObjectFileName>$(IntDir)vp9_decoder_vp9_detokenize.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9_dthread.c">

-      <ObjectFileName>$(IntDir)vp9_decoder_vp9_dthread.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9_reader.c">

-      <ObjectFileName>$(IntDir)vp9_decoder_vp9_reader.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9_read_bit_buffer.c">

-      <ObjectFileName>$(IntDir)vp9_decoder_vp9_read_bit_buffer.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9_decoder.c">

-      <ObjectFileName>$(IntDir)vp9_decoder_vp9_decoder.obj</ObjectFileName>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9_dsubexp.c">

-      <ObjectFileName>$(IntDir)vp9_decoder_vp9_dsubexp.obj</ObjectFileName>

-    </ClCompile>

-    <None Include="..\vp9\decoder\kernels\altinter.cl" />

-    <None Include="..\vp9\decoder\kernels\altinter_intel.cl" />

-    <None Include="..\vp9\decoder\kernels\alttransform.cl" />

-    <None Include="..\vp9\decoder\kernels\fastinterpred8x8kernel.cl" />

-    <None Include="..\vp9\decoder\kernels\interpred8x8kernel.cl" />

-    <None Include="..\vp9\decoder\kernels\intra.cl" />

-    <None Include="..\vp9\decoder\kernels\intra_intel.cl" />

-    <None Include="..\vp9\decoder\kernels\loopfilter.cl" />

-    <None Include="..\vp9\decoder\kernels\loopfilter_intel.cl" />

-    <None Include="..\vp9\decoder\kernels\transform.cl" />

-    <None Include="..\vpx.def" />

-  </ItemGroup>

-  <ItemGroup>

-    <ClInclude Include="..\vp9\common\vp9lux_log.h" />

-    <ClInclude Include="..\vp9\decoder\interop\vp9lux_cl_wrapper.h" />

-    <ClInclude Include="..\vp9\decoder\interop\vp9lux_interop.h" />

-    <ClInclude Include="..\vp9\decoder\vp9lux_alt_inter_ocl.h" />

-    <ClInclude Include="..\vp9\decoder\vp9lux_decode_block.h" />

-    <ClInclude Include="..\vp9\decoder\vp9lux_frame_struct.h" />

-    <ClInclude Include="..\vp9\decoder\vp9lux_inter_ocl.h">

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>

-    </ClInclude>

-    <ClInclude Include="..\vp9\decoder\vp9lux_intra_modes_table_binary.h" />

-    <ClInclude Include="..\vp9\decoder\vp9lux_intra_ocl.h" />

-    <ClInclude Include="..\vp9\decoder\vp9lux_loopfilter_ocl.h" />

-    <ClInclude Include="..\vp9\decoder\vp9lux_ocl.h" />

-    <ClInclude Include="..\vp9\decoder\vp9lux_ocl_binary.h" />

-    <ClInclude Include="..\vp9\decoder\vp9lux_ocl_programs.h" />

-    <ClInclude Include="..\vp9\decoder\vp9lux_reconinter_cl.h">

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>

-    </ClInclude>

-    <ClInclude Include="..\vp9\decoder\vp9lux_thread.h" />

-    <ClInclude Include="..\vp9\decoder\vp9lux_transform_ocl.h" />

-    <ClInclude Include="..\vp9\decoder\vp9lux_types.h" />

-    <ClInclude Include="..\vpx\vpx_decoder.h" />

-    <ClInclude Include="..\vpx\vpx_encoder.h" />

-    <ClInclude Include="..\vpx\internal\vpx_codec_internal.h" />

-    <ClInclude Include="..\vpx\internal\vpx_psnr.h" />

-    <ClInclude Include="..\vpx\vpx_codec.h" />

-    <ClInclude Include="..\vpx\vpx_frame_buffer.h" />

-    <ClInclude Include="..\vpx\vpx_image.h" />

-    <ClInclude Include="..\vpx\vpx_integer.h" />

-    <ClInclude Include="..\vpx_mem\vpx_mem.h" />

-    <ClInclude Include="..\vpx_mem\include\vpx_mem_intrnl.h" />

-    <ClInclude Include="..\vpx_scale\yv12config.h" />

-    <ClInclude Include="..\vpx_scale\vpx_scale.h" />

-    <ClInclude Include="..\vpx_ports\asm_offsets.h" />

-    <ClInclude Include="..\vpx_ports\mem.h" />

-    <ClInclude Include="..\vpx_ports\vpx_timer.h" />

-    <ClInclude Include="..\vpx_ports\x86.h" />

-    <ClInclude Include="..\vp9\vp9_iface_common.h" />

-    <ClInclude Include="..\vp9\common\vp9_ppflags.h" />

-    <ClInclude Include="..\vp9\common\vp9_convolve.h" />

-    <ClInclude Include="..\vp9\common\vp9_filter.h" />

-    <ClInclude Include="..\vp9\common\vp9_frame_buffers.h" />

-    <ClInclude Include="..\vp9\common\vp9_alloccommon.h" />

-    <ClInclude Include="..\vp9\common\vp9_blockd.h" />

-    <ClInclude Include="..\vp9\common\vp9_common.h" />

-    <ClInclude Include="..\vp9\common\vp9_entropy.h" />

-    <ClInclude Include="..\vp9\common\vp9_entropymode.h" />

-    <ClInclude Include="..\vp9\common\vp9_entropymv.h" />

-    <ClInclude Include="..\vp9\common\vp9_enums.h" />

-    <ClInclude Include="..\vp9\common\vp9_idct.h" />

-    <ClInclude Include="..\vp9\common\vp9_loopfilter.h" />

-    <ClInclude Include="..\vp9\common\vp9_mv.h" />

-    <ClInclude Include="..\vp9\common\vp9_pred_common.h" />

-    <ClInclude Include="..\vp9\common\vp9_prob.h" />

-    <ClInclude Include="..\vp9\common\vp9_quant_common.h" />

-    <ClInclude Include="..\vp9\common\vp9_reconinter.h" />

-    <ClInclude Include="..\vp9\common\vp9_reconintra.h" />

-    <ClInclude Include="..\vp9\common\vp9_scale.h" />

-    <ClInclude Include="..\vp9\common\vp9_seg_common.h" />

-    <ClInclude Include="..\vp9\common\vp9_systemdependent.h" />

-    <ClInclude Include="..\vp9\common\vp9_textblit.h" />

-    <ClInclude Include="..\vp9\common\vp9_thread.h" />

-    <ClInclude Include="..\vp9\common\vp9_tile_common.h" />

-    <ClInclude Include="..\vp9\common\vp9_mvref_common.h" />

-    <ClInclude Include="..\vp9\common\vp9_common_data.h" />

-    <ClInclude Include="..\vp9\common\vp9_scan.h" />

-    <ClInclude Include="..\vp9\common\x86\vp9_idct_intrin_sse2.h" />

-    <ClInclude Include="..\vp9\decoder\vp9_decodeframe.h" />

-    <ClInclude Include="..\vp9\decoder\vp9_dthread.h" />

-    <ClInclude Include="..\vp9\decoder\vp9_reader.h" />

-    <ClInclude Include="..\vp9\decoder\vp9_read_bit_buffer.h" />

-    <ClInclude Include="..\vp9\decoder\vp9_decodemv.h" />

-    <ClInclude Include="..\vp9\decoder\vp9_detokenize.h" />

-    <ClInclude Include="..\vp9\decoder\vp9_decoder.h" />

-    <ClInclude Include="..\vp9\decoder\vp9_dsubexp.h" />

-    <ClInclude Include="..\vpx_ports\emmintrin_compat.h" />

-    <ClInclude Include="..\vpx_ports\mem_ops.h" />

-    <ClInclude Include="..\vpx_ports\mem_ops_aligned.h" />

-    <ClInclude Include="..\vpx_ports\vpx_once.h" />

-    <ClInclude Include="..\vpx_scale_rtcd.h" />

-    <ClInclude Include="..\vp9_rtcd.h" />

-  </ItemGroup>

-  <ItemGroup>

-    <None Include="..\vpx\vpx_codec.mk" />

-  </ItemGroup>

-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

-  <ImportGroup Label="ExtensionTargets">

-  </ImportGroup>

-</Project>
\ No newline at end of file
diff --git a/src/third_party/libvpx_gpu/vp9-dec-core/build/vpx-dec-coreVS13.vcxproj.filters b/src/third_party/libvpx_gpu/vp9-dec-core/build/vpx-dec-coreVS13.vcxproj.filters
deleted file mode 100644
index be08b3e..0000000
--- a/src/third_party/libvpx_gpu/vp9-dec-core/build/vpx-dec-coreVS13.vcxproj.filters
+++ /dev/null
@@ -1,276 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>

-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

-  <ItemGroup>

-    <ClCompile Include="..\vpx\src\vpx_decoder.c" />

-    <ClCompile Include="..\vpx\src\vpx_encoder.c" />

-    <ClCompile Include="..\vpx\src\vpx_codec.c" />

-    <ClCompile Include="..\vpx\src\vpx_image.c" />

-    <ClCompile Include="..\vpx\src\vpx_psnr.c" />

-    <ClCompile Include="..\vpx_mem\vpx_mem.c" />

-    <ClCompile Include="..\vpx_scale\generic\vpx_scale.c" />

-    <ClCompile Include="..\vpx_scale\generic\yv12config.c" />

-    <ClCompile Include="..\vpx_scale\generic\yv12extend.c" />

-    <ClCompile Include="..\vpx_scale\generic\gen_scalers.c" />

-    <ClCompile Include="..\vpx_scale\vpx_scale_asm_offsets.c" />

-    <ClCompile Include="..\vpx_scale\vpx_scale_rtcd.c" />

-    <ClCompile Include="..\vp9\common\vp9_alloccommon.c" />

-    <ClCompile Include="..\vp9\common\vp9_blockd.c" />

-    <ClCompile Include="..\vp9\common\vp9_convolve.c" />

-    <ClCompile Include="..\vp9\common\vp9_debugmodes.c" />

-    <ClCompile Include="..\vp9\common\vp9_entropy.c" />

-    <ClCompile Include="..\vp9\common\vp9_entropymode.c" />

-    <ClCompile Include="..\vp9\common\vp9_entropymv.c" />

-    <ClCompile Include="..\vp9\common\vp9_filter.c" />

-    <ClCompile Include="..\vp9\common\vp9_frame_buffers.c" />

-    <ClCompile Include="..\vp9\common\vp9_idct.c" />

-    <ClCompile Include="..\vp9\common\vp9_pred_common.c" />

-    <ClCompile Include="..\vp9\common\vp9_prob.c" />

-    <ClCompile Include="..\vp9\common\vp9_rtcd.c" />

-    <ClCompile Include="..\vp9\common\vp9_scale.c" />

-    <ClCompile Include="..\vp9\common\vp9_seg_common.c" />

-    <ClCompile Include="..\vp9\common\vp9_thread.c" />

-    <ClCompile Include="..\vp9\common\vp9_tile_common.c" />

-    <ClCompile Include="..\vp9\common\vp9_loopfilter.c" />

-    <ClCompile Include="..\vp9\common\vp9_loopfilter_filters.c" />

-    <ClCompile Include="..\vp9\common\vp9_mvref_common.c" />

-    <ClCompile Include="..\vp9\common\vp9_quant_common.c" />

-    <ClCompile Include="..\vp9\common\vp9_reconinter.c" />

-    <ClCompile Include="..\vp9\common\vp9_reconintra.c" />

-    <ClCompile Include="..\vp9\common\vp9_common_data.c" />

-    <ClCompile Include="..\vp9\common\vp9_scan.c" />

-    <ClCompile Include="..\vp9\common\x86\vp9_asm_stubs.c" />

-    <ClCompile Include="..\vp9\common\x86\vp9_loopfilter_intrin_sse2.c" />

-    <ClCompile Include="..\vp9\common\x86\vp9_idct_intrin_sse2.c" />

-    <ClCompile Include="..\vp9\common\x86\vp9_idct_intrin_ssse3.c" />

-    <ClCompile Include="..\vp9\vp9_dx_iface.c" />

-    <ClCompile Include="..\vp9\decoder\vp9_decodemv.c" />

-    <ClCompile Include="..\vp9\decoder\vp9_decodeframe.c" />

-    <ClCompile Include="..\vp9\decoder\vp9_detokenize.c" />

-    <ClCompile Include="..\vp9\decoder\vp9_dthread.c" />

-    <ClCompile Include="..\vp9\decoder\vp9_reader.c" />

-    <ClCompile Include="..\vp9\decoder\vp9_read_bit_buffer.c" />

-    <ClCompile Include="..\vp9\decoder\vp9_decoder.c" />

-    <ClCompile Include="..\vp9\decoder\vp9_dsubexp.c" />

-    <ClCompile Include="..\vp9\decoder\vp9lux_alt_inter_ocl.c">

-      <Filter>lux</Filter>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\interop\vp9lux_cl_wrapper.c">

-      <Filter>lux</Filter>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9lux_decode_block.c">

-      <Filter>lux</Filter>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9lux_inter_ocl.c">

-      <Filter>lux</Filter>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\interop\vp9lux_interop.c">

-      <Filter>lux</Filter>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9lux_intra_ocl.c">

-      <Filter>lux</Filter>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9lux_loopfilter_ocl.c">

-      <Filter>lux</Filter>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9lux_mem_cuda.c">

-      <Filter>lux</Filter>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9lux_ocl.c">

-      <Filter>lux</Filter>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9lux_ocl_mem_amd.c">

-      <Filter>lux</Filter>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9lux_ocl_mem_generic.c">

-      <Filter>lux</Filter>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9lux_ocl_programs.c">

-      <Filter>lux</Filter>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9lux_reconinter_cl.c">

-      <Filter>lux</Filter>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9lux_thread.c">

-      <Filter>lux</Filter>

-    </ClCompile>

-    <ClCompile Include="..\vp9\decoder\vp9lux_transform_ocl.c">

-      <Filter>lux</Filter>

-    </ClCompile>

-    <ClCompile Include="..\vp9\common\x86\vp9_subpixel_8t_intrin_ssse3.c" />

-  </ItemGroup>

-  <ItemGroup>

-    <ClInclude Include="..\vpx\vpx_decoder.h" />

-    <ClInclude Include="..\vpx\vpx_encoder.h" />

-    <ClInclude Include="..\vpx\internal\vpx_codec_internal.h" />

-    <ClInclude Include="..\vpx\internal\vpx_psnr.h" />

-    <ClInclude Include="..\vpx\vpx_codec.h" />

-    <ClInclude Include="..\vpx\vpx_frame_buffer.h" />

-    <ClInclude Include="..\vpx\vpx_image.h" />

-    <ClInclude Include="..\vpx\vpx_integer.h" />

-    <ClInclude Include="..\vpx_mem\vpx_mem.h" />

-    <ClInclude Include="..\vpx_mem\include\vpx_mem_intrnl.h" />

-    <ClInclude Include="..\vpx_scale\yv12config.h" />

-    <ClInclude Include="..\vpx_scale\vpx_scale.h" />

-    <ClInclude Include="..\vpx_ports\asm_offsets.h" />

-    <ClInclude Include="..\vpx_ports\mem.h" />

-    <ClInclude Include="..\vpx_ports\vpx_timer.h" />

-    <ClInclude Include="..\vpx_ports\x86.h" />

-    <ClInclude Include="..\vp9\vp9_iface_common.h" />

-    <ClInclude Include="..\vp9\common\vp9_ppflags.h" />

-    <ClInclude Include="..\vp9\common\vp9_convolve.h" />

-    <ClInclude Include="..\vp9\common\vp9_filter.h" />

-    <ClInclude Include="..\vp9\common\vp9_frame_buffers.h" />

-    <ClInclude Include="..\vp9\common\vp9_alloccommon.h" />

-    <ClInclude Include="..\vp9\common\vp9_blockd.h" />

-    <ClInclude Include="..\vp9\common\vp9_common.h" />

-    <ClInclude Include="..\vp9\common\vp9_entropy.h" />

-    <ClInclude Include="..\vp9\common\vp9_entropymode.h" />

-    <ClInclude Include="..\vp9\common\vp9_entropymv.h" />

-    <ClInclude Include="..\vp9\common\vp9_enums.h" />

-    <ClInclude Include="..\vp9\common\vp9_idct.h" />

-    <ClInclude Include="..\vp9\common\vp9_loopfilter.h" />

-    <ClInclude Include="..\vp9\common\vp9_mv.h" />

-    <ClInclude Include="..\vp9\common\vp9_pred_common.h" />

-    <ClInclude Include="..\vp9\common\vp9_prob.h" />

-    <ClInclude Include="..\vp9\common\vp9_quant_common.h" />

-    <ClInclude Include="..\vp9\common\vp9_reconinter.h" />

-    <ClInclude Include="..\vp9\common\vp9_reconintra.h" />

-    <ClInclude Include="..\vp9\common\vp9_scale.h" />

-    <ClInclude Include="..\vp9\common\vp9_seg_common.h" />

-    <ClInclude Include="..\vp9\common\vp9_systemdependent.h" />

-    <ClInclude Include="..\vp9\common\vp9_textblit.h" />

-    <ClInclude Include="..\vp9\common\vp9_thread.h" />

-    <ClInclude Include="..\vp9\common\vp9_tile_common.h" />

-    <ClInclude Include="..\vp9\common\vp9_mvref_common.h" />

-    <ClInclude Include="..\vp9\common\vp9_common_data.h" />

-    <ClInclude Include="..\vp9\common\vp9_scan.h" />

-    <ClInclude Include="..\vp9\common\x86\vp9_idct_intrin_sse2.h" />

-    <ClInclude Include="..\vp9\decoder\vp9_decodeframe.h" />

-    <ClInclude Include="..\vp9\decoder\vp9_dthread.h" />

-    <ClInclude Include="..\vp9\decoder\vp9_reader.h" />

-    <ClInclude Include="..\vp9\decoder\vp9_read_bit_buffer.h" />

-    <ClInclude Include="..\vp9\decoder\vp9_decodemv.h" />

-    <ClInclude Include="..\vp9\decoder\vp9_detokenize.h" />

-    <ClInclude Include="..\vp9\decoder\vp9_decoder.h" />

-    <ClInclude Include="..\vp9\decoder\vp9_dsubexp.h" />

-    <ClInclude Include="..\vpx_ports\emmintrin_compat.h" />

-    <ClInclude Include="..\vpx_ports\mem_ops.h" />

-    <ClInclude Include="..\vpx_ports\mem_ops_aligned.h" />

-    <ClInclude Include="..\vpx_ports\vpx_once.h" />

-    <ClInclude Include="..\vpx_scale_rtcd.h" />

-    <ClInclude Include="..\vp9_rtcd.h" />

-    <ClInclude Include="..\vp9\decoder\vp9lux_types.h">

-      <Filter>lux</Filter>

-    </ClInclude>

-    <ClInclude Include="..\vp9\decoder\vp9lux_alt_inter_ocl.h">

-      <Filter>lux</Filter>

-    </ClInclude>

-    <ClInclude Include="..\vp9\decoder\interop\vp9lux_cl_wrapper.h">

-      <Filter>lux</Filter>

-    </ClInclude>

-    <ClInclude Include="..\vp9\decoder\vp9lux_decode_block.h">

-      <Filter>lux</Filter>

-    </ClInclude>

-    <ClInclude Include="..\vp9\decoder\vp9lux_frame_struct.h">

-      <Filter>lux</Filter>

-    </ClInclude>

-    <ClInclude Include="..\vp9\decoder\vp9lux_inter_ocl.h">

-      <Filter>lux</Filter>

-    </ClInclude>

-    <ClInclude Include="..\vp9\decoder\interop\vp9lux_interop.h">

-      <Filter>lux</Filter>

-    </ClInclude>

-    <ClInclude Include="..\vp9\decoder\vp9lux_intra_modes_table_binary.h">

-      <Filter>lux</Filter>

-    </ClInclude>

-    <ClInclude Include="..\vp9\decoder\vp9lux_intra_ocl.h">

-      <Filter>lux</Filter>

-    </ClInclude>

-    <ClInclude Include="..\vp9\common\vp9lux_log.h">

-      <Filter>lux</Filter>

-    </ClInclude>

-    <ClInclude Include="..\vp9\decoder\vp9lux_loopfilter_ocl.h">

-      <Filter>lux</Filter>

-    </ClInclude>

-    <ClInclude Include="..\vp9\decoder\vp9lux_ocl.h">

-      <Filter>lux</Filter>

-    </ClInclude>

-    <ClInclude Include="..\vp9\decoder\vp9lux_ocl_binary.h">

-      <Filter>lux</Filter>

-    </ClInclude>

-    <ClInclude Include="..\vp9\decoder\vp9lux_ocl_programs.h">

-      <Filter>lux</Filter>

-    </ClInclude>

-    <ClInclude Include="..\vp9\decoder\vp9lux_reconinter_cl.h">

-      <Filter>lux</Filter>

-    </ClInclude>

-    <ClInclude Include="..\vp9\decoder\vp9lux_thread.h">

-      <Filter>lux</Filter>

-    </ClInclude>

-    <ClInclude Include="..\vp9\decoder\vp9lux_transform_ocl.h">

-      <Filter>lux</Filter>

-    </ClInclude>

-  </ItemGroup>

-  <ItemGroup>

-    <None Include="..\vpx.def" />

-    <None Include="..\vpx\vpx_codec.mk" />

-    <None Include="..\vp9\decoder\kernels\altinter.cl">

-      <Filter>lux\kernels</Filter>

-    </None>

-    <None Include="..\vp9\decoder\kernels\altinter_intel.cl">

-      <Filter>lux\kernels</Filter>

-    </None>

-    <None Include="..\vp9\decoder\kernels\alttransform.cl">

-      <Filter>lux\kernels</Filter>

-    </None>

-    <None Include="..\vp9\decoder\kernels\interpred8x8kernel.cl">

-      <Filter>lux\kernels</Filter>

-    </None>

-    <None Include="..\vp9\decoder\kernels\intra.cl">

-      <Filter>lux\kernels</Filter>

-    </None>

-    <None Include="..\vp9\decoder\kernels\intra_intel.cl">

-      <Filter>lux\kernels</Filter>

-    </None>

-    <None Include="..\vp9\decoder\kernels\loopfilter.cl">

-      <Filter>lux\kernels</Filter>

-    </None>

-    <None Include="..\vp9\decoder\kernels\loopfilter_intel.cl">

-      <Filter>lux\kernels</Filter>

-    </None>

-    <None Include="..\vp9\decoder\kernels\fastinterpred8x8kernel.cl">

-      <Filter>lux\kernels</Filter>

-    </None>

-    <None Include="..\vp9\decoder\kernels\transform.cl">

-      <Filter>lux\kernels</Filter>

-    </None>

-  </ItemGroup>

-  <ItemGroup>

-    <Filter Include="lux">

-      <UniqueIdentifier>{9c8917ac-b928-40c6-b3e4-6014d514ece6}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="lux\kernels">

-      <UniqueIdentifier>{7e8d8f3b-6882-4b26-a6a1-9d61b33b1f82}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="asm">

-      <UniqueIdentifier>{6c274781-a394-48cf-baf1-485def749ece}</UniqueIdentifier>

-    </Filter>

-  </ItemGroup>

-  <ItemGroup>

-    <CustomBuild Include="..\vpx_ports\emms.asm">

-      <Filter>asm</Filter>

-    </CustomBuild>

-    <CustomBuild Include="..\vp9\common\x86\vp9_loopfilter_mmx.asm">

-      <Filter>asm</Filter>

-    </CustomBuild>

-    <CustomBuild Include="..\vp9\common\x86\vp9_copy_sse2.asm">

-      <Filter>asm</Filter>

-    </CustomBuild>

-    <CustomBuild Include="..\vp9\common\x86\vp9_intrapred_sse2.asm">

-      <Filter>asm</Filter>

-    </CustomBuild>

-    <CustomBuild Include="..\vp9\common\x86\vp9_intrapred_ssse3.asm">

-      <Filter>asm</Filter>

-    </CustomBuild>

-  </ItemGroup>

-</Project>
\ No newline at end of file
diff --git a/src/third_party/libvpx_gpu/vp9-dec-test/ErrorResilienceTest/ErrorResilienceTest.vcxproj b/src/third_party/libvpx_gpu/vp9-dec-test/ErrorResilienceTest/ErrorResilienceTest.vcxproj
deleted file mode 100644
index d676550..0000000
--- a/src/third_party/libvpx_gpu/vp9-dec-test/ErrorResilienceTest/ErrorResilienceTest.vcxproj
+++ /dev/null
@@ -1,102 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>

-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

-  <ItemGroup Label="ProjectConfigurations">

-    <ProjectConfiguration Include="Debug|ORBIS">

-      <Configuration>Debug</Configuration>

-      <Platform>ORBIS</Platform>

-    </ProjectConfiguration>

-    <ProjectConfiguration Include="Release|ORBIS">

-      <Configuration>Release</Configuration>

-      <Platform>ORBIS</Platform>

-    </ProjectConfiguration>

-  </ItemGroup>

-  <PropertyGroup Label="Globals">

-    <VCTargetsPath Condition="'$(VCTargetsPath12)' != '' and '$(VSVersion)' == '' and '$(VisualStudioVersion)' == ''">$(VCTargetsPath12)</VCTargetsPath>

-    <ProjectGuid>{F216E2AC-3265-4071-9F17-709D747FF1D1}</ProjectGuid>

-  </PropertyGroup>

-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'" Label="Configuration">

-    <ConfigurationType>Application</ConfigurationType>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'" Label="Configuration">

-    <ConfigurationType>Application</ConfigurationType>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">

-    <PlatformToolset>v120</PlatformToolset>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">

-    <PlatformToolset>v120</PlatformToolset>

-  </PropertyGroup>

-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />

-  <PropertyGroup Condition="'$(DebuggerFlavor)'=='ORBISDebugger'" Label="OverrideDebuggerDefaults">

-    <!--LocalDebuggerCommand>$(TargetPath)</LocalDebuggerCommand-->

-    <!--LocalDebuggerCommandArguments></LocalDebuggerCommandArguments-->

-    <!--LocalDebuggerTarget></LocalDebuggerTarget-->

-    <!--LocalDebuggerWorkingDirectory>$(ProjectDir)</LocalDebuggerWorkingDirectory-->

-    <!--LocalRunCommandLine></LocalRunCommandLine-->

-  </PropertyGroup>

-  <ImportGroup Label="ExtensionSettings">

-    <Import Project="$(VCTargetsPath)\BuildCustomizations\OrbisWavePsslc.props" />

-    <Import Project="$(VCTargetsPath)\BuildCustomizations\SCU.props" />

-  </ImportGroup>

-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">

-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

-  </ImportGroup>

-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">

-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

-  </ImportGroup>

-  <PropertyGroup Label="UserMacros" />

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">

-    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>

-    <IntDir>$(SolutionDir)obj\$(ProjectName)\$(Configuration)\</IntDir>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">

-    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>

-    <IntDir>$(SolutionDir)obj\$(ProjectName)\$(Configuration)\</IntDir>

-  </PropertyGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">

-    <ClCompile>

-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions);</PreprocessorDefinitions>

-      <GenerateDebugInformation>true</GenerateDebugInformation>

-      <PrecompiledHeader>NotUsing</PrecompiledHeader>

-      <AdditionalIncludeDirectories>../../vp9-dec-core;../../vp9-dec-core/build;../libwebm;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

-    </ClCompile>

-    <Link>

-      <AdditionalDependencies>vp9-dec-core$(PlatformArchitecture).a;libSceUserService_stub_weak.a;libScePerf_stub_weak.a;libSceGnmDriver_stub_weak.a;libScePm4Dump.a;libSceGnf.a;libSceShaderBinary.a;libSceGpuAddress.a;libSceGnmx_debug.a;libSceGnm_debug.a;libScePosix_stub_weak.a;libScePad_stub_weak.a;libSceVideoOut_stub_weak.a</AdditionalDependencies>

-      <AdditionalLibraryDirectories>$(SolutionDir)lib\$(Configuration)</AdditionalLibraryDirectories>

-    </Link>

-  </ItemDefinitionGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">

-    <ClCompile>

-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions);</PreprocessorDefinitions>

-      <OptimizationLevel>Level2</OptimizationLevel>

-      <PrecompiledHeader>NotUsing</PrecompiledHeader>

-      <AdditionalIncludeDirectories>../../vp9-dec-core;../../vp9-dec-core/build;../libwebm;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

-      <GenerateDebugInformation>true</GenerateDebugInformation>

-    </ClCompile>

-    <Link>

-      <AdditionalDependencies>vp9-dec-core$(PlatformArchitecture).a;libSceUserService_stub_weak.a;libScePerf_stub_weak.a;libSceGnmDriver_stub_weak.a;libScePm4Dump.a;libSceGnf.a;libSceShaderBinary.a;libSceGpuAddress.a;libSceGnmx_debug.a;libSceGnm_debug.a;libScePosix_stub_weak.a;libScePad_stub_weak.a;libSceVideoOut_stub_weak.a</AdditionalDependencies>

-      <AdditionalLibraryDirectories>$(SolutionDir)lib\$(Configuration)</AdditionalLibraryDirectories>

-    </Link>

-  </ItemDefinitionGroup>

-  <ItemGroup>

-    <ClCompile Include="..\libwebm\mkvparser\mkvparser.cc" />

-    <ClCompile Include="..\libwebm\mkvparser\mkvreader.cc" />

-    <ClCompile Include="..\vpxdec\webmdec.cc" />

-    <ClCompile Include="errors_main.cpp" />

-    <ClCompile Include="user_malloc.cpp" />

-  </ItemGroup>

-  <ItemGroup>

-    <ClInclude Include="..\libwebm\mkvparser\mkvparser.h" />

-    <ClInclude Include="..\libwebm\mkvparser\mkvreader.h" />

-    <ClInclude Include="ivf_video_source.h" />

-    <ClInclude Include="video_source.h" />

-    <ClInclude Include="webm_video_source.h" />

-  </ItemGroup>

-  <Import Condition="'$(ConfigurationType)' == 'Makefile' and Exists('$(VCTargetsPath)\Platforms\$(Platform)\SCE.Makefile.$(Platform).targets')" Project="$(VCTargetsPath)\Platforms\$(Platform)\SCE.Makefile.$(Platform).targets" />

-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

-  <ImportGroup Label="ExtensionTargets">

-    <Import Project="$(VCTargetsPath)\BuildCustomizations\OrbisWavePsslc.targets" />

-    <Import Project="$(VCTargetsPath)\BuildCustomizations\SCU.targets" />

-  </ImportGroup>

-</Project>
\ No newline at end of file
diff --git a/src/third_party/libvpx_gpu/vp9-dec-test/ErrorResilienceTest/ErrorResilienceTest.vcxproj.filters b/src/third_party/libvpx_gpu/vp9-dec-test/ErrorResilienceTest/ErrorResilienceTest.vcxproj.filters
deleted file mode 100644
index d9ee00d..0000000
--- a/src/third_party/libvpx_gpu/vp9-dec-test/ErrorResilienceTest/ErrorResilienceTest.vcxproj.filters
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>

-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

-  <ItemGroup>

-    <Filter Include="Source Files">

-      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>

-      <Extensions>cpp;c;cxx;cc;s;asm</Extensions>

-    </Filter>

-    <Filter Include="Header Files">

-      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>

-      <Extensions>h;hpp</Extensions>

-    </Filter>

-  </ItemGroup>

-  <ItemGroup>

-    <ClCompile Include="errors_main.cpp">

-      <Filter>Source Files</Filter>

-    </ClCompile>

-    <ClCompile Include="..\vpxdec\webmdec.cc">

-      <Filter>Source Files</Filter>

-    </ClCompile>

-    <ClCompile Include="user_malloc.cpp">

-      <Filter>Source Files</Filter>

-    </ClCompile>

-    <ClCompile Include="..\libwebm\mkvparser\mkvparser.cc">

-      <Filter>Source Files</Filter>

-    </ClCompile>

-    <ClCompile Include="..\libwebm\mkvparser\mkvreader.cc">

-      <Filter>Source Files</Filter>

-    </ClCompile>

-  </ItemGroup>

-  <ItemGroup>

-    <ClInclude Include="ivf_video_source.h">

-      <Filter>Header Files</Filter>

-    </ClInclude>

-    <ClInclude Include="video_source.h">

-      <Filter>Header Files</Filter>

-    </ClInclude>

-    <ClInclude Include="webm_video_source.h">

-      <Filter>Header Files</Filter>

-    </ClInclude>

-    <ClInclude Include="..\libwebm\mkvparser\mkvparser.h">

-      <Filter>Header Files</Filter>

-    </ClInclude>

-    <ClInclude Include="..\libwebm\mkvparser\mkvreader.h">

-      <Filter>Header Files</Filter>

-    </ClInclude>

-  </ItemGroup>

-</Project>
\ No newline at end of file
diff --git a/src/third_party/libvpx_gpu/vp9-dec-test/PS4/common/source/sampleutil/libSceSampleUtil.sln b/src/third_party/libvpx_gpu/vp9-dec-test/PS4/common/source/sampleutil/libSceSampleUtil.sln
deleted file mode 100644
index 14f4a95..0000000
--- a/src/third_party/libvpx_gpu/vp9-dec-test/PS4/common/source/sampleutil/libSceSampleUtil.sln
+++ /dev/null
@@ -1,21 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 12.00

-# Visual Studio 2013

-VisualStudioVersion = 12.0.40629.0

-MinimumVisualStudioVersion = 10.0.40219.1

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libSceSampleUtil", "libSceSampleUtil.vcxproj", "{30A1B994-C2C6-485F-911B-FB4674366DA8}"

-EndProject

-Global

-	GlobalSection(SolutionConfigurationPlatforms) = preSolution

-		Debug|ORBIS = Debug|ORBIS

-		Release|ORBIS = Release|ORBIS

-	EndGlobalSection

-	GlobalSection(ProjectConfigurationPlatforms) = postSolution

-		{30A1B994-C2C6-485F-911B-FB4674366DA8}.Debug|ORBIS.ActiveCfg = Debug|ORBIS

-		{30A1B994-C2C6-485F-911B-FB4674366DA8}.Debug|ORBIS.Build.0 = Debug|ORBIS

-		{30A1B994-C2C6-485F-911B-FB4674366DA8}.Release|ORBIS.ActiveCfg = Release|ORBIS

-		{30A1B994-C2C6-485F-911B-FB4674366DA8}.Release|ORBIS.Build.0 = Release|ORBIS

-	EndGlobalSection

-	GlobalSection(SolutionProperties) = preSolution

-		HideSolutionNode = FALSE

-	EndGlobalSection

-EndGlobal

diff --git a/src/third_party/libvpx_gpu/vp9-dec-test/PS4/common/source/sampleutil/libSceSampleUtil.vcxproj b/src/third_party/libvpx_gpu/vp9-dec-test/PS4/common/source/sampleutil/libSceSampleUtil.vcxproj
deleted file mode 100644
index edeb2e5..0000000
--- a/src/third_party/libvpx_gpu/vp9-dec-test/PS4/common/source/sampleutil/libSceSampleUtil.vcxproj
+++ /dev/null
@@ -1,1301 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>

-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

-  <ItemGroup Label="ProjectConfigurations">

-    <ProjectConfiguration Include="Debug|ORBIS">

-      <Configuration>Debug</Configuration>

-      <Platform>ORBIS</Platform>

-    </ProjectConfiguration>

-    <ProjectConfiguration Include="Release|ORBIS">

-      <Configuration>Release</Configuration>

-      <Platform>ORBIS</Platform>

-    </ProjectConfiguration>

-  </ItemGroup>

-  <PropertyGroup Label="Globals">

-    <ProjectGuid>{30A1B994-C2C6-485F-911B-FB4674366DA8}</ProjectGuid>

-    <ProjectName>libSceSampleUtil</ProjectName>

-  </PropertyGroup>

-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'" Label="Configuration">

-    <ConfigurationType>StaticLibrary</ConfigurationType>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'" Label="Configuration">

-    <ConfigurationType>StaticLibrary</ConfigurationType>

-  </PropertyGroup>

-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />

-  <ImportGroup Label="ExtensionSettings">

-  </ImportGroup>

-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">

-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

-  </ImportGroup>

-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">

-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

-  </ImportGroup>

-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">

-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

-  </ImportGroup>

-  <PropertyGroup Label="UserMacros" />

-  <PropertyGroup />

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">

-    <ClCompile>

-      <PreprocessorDefinitions>_DEBUG;SCE_SAMPLE_UTIL_ASSERTS_ENABLED=1;_UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <GenerateDebugInformation>true</GenerateDebugInformation>

-<AdditionalIncludeDirectories>$(ProjectDir)\..\..\include;$(ProjectDir)\..\..\include\external\tinyxml;$(ProjectDir)\..\sampleutil;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

-      <AdditionalOptions>-frtti  -Wno-unknown-pragmas  -Wnull-conversion %(AdditionalOptions)</AdditionalOptions>

-      <MultiProcessorCompilation>true</MultiProcessorCompilation>

-    </ClCompile>

-    <Lib>

-      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>

-    </Lib>

-  </ItemDefinitionGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">

-    <ClCompile>

-      <PreprocessorDefinitions>_DEBUG;SCE_SAMPLE_UTIL_ASSERTS_ENABLED=1;SCE_SAMPLE_UTIL_BUILD;SCE_DBG_LOGGING_ENABLED=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <GenerateDebugInformation>true</GenerateDebugInformation>

-      <AdditionalIncludeDirectories>$(ProjectDir)\..\..\include;$(ProjectDir)\..\..\include\external\tinyxml;$(ProjectDir)\..\sampleutil;$(SCE_PSP2_SDK_DIR)\target\include_common;$(CG_INC_PATH);$(SCE_PSP2_SDK_DIR)\host_tools\include;$(SCE_ORBIS_SDK_DIR)\host_tools\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

-      <MultiProcessorCompilation>true</MultiProcessorCompilation>

-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>

-    </ClCompile>

-    <Lib>

-      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>

-    </Lib>

-    <Link>

-      <AdditionalLibraryDirectories>$(CG_LIB64_PATH);$(SCE_ORBIS_SDK_DIR)\host_tools\lib;$(SCE_ORBIS_SAMPLE_DIR)\sample_code\common\lib.x64\external;$(SCE_PSP2_SDK_DIR)\host_tools\lib.x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>

-      <AdditionalDependencies>tinyxml.lib;%(AdditionalDependencies)</AdditionalDependencies>

-      <GenerateDebugInformation>true</GenerateDebugInformation>

-    </Link>

-  </ItemDefinitionGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">

-    <ClCompile>

-      <PreprocessorDefinitions>SCE_SAMPLE_UTIL_ASSERTS_ENABLED=1;SCE_SAMPLE_UTIL_RELEASE=1;_UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <OptimizationLevel>Level2</OptimizationLevel>

-<AdditionalIncludeDirectories>$(ProjectDir)\..\..\include;$(ProjectDir)\..\..\include\external\tinyxml;$(ProjectDir)\..\sampleutil;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

-      <AdditionalOptions>-frtti  -Wno-unknown-pragmas %(AdditionalOptions)</AdditionalOptions>

-      <MultiProcessorCompilation>true</MultiProcessorCompilation>

-      <Warnings>MoreWarnings</Warnings>

-      <GenerateDebugInformation>true</GenerateDebugInformation>

-    </ClCompile>

-  </ItemDefinitionGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">

-    <ClCompile>

-      <PreprocessorDefinitions>SCE_SAMPLE_UTIL_ASSERTS_ENABLED=1;SCE_SAMPLE_UTIL_BUILD;SCE_DBG_LOGGING_ENABLED=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <OptimizationLevel>Level2</OptimizationLevel>

-      <AdditionalIncludeDirectories>$(ProjectDir)\..\..\include;$(ProjectDir)\..\..\include\external\tinyxml;$(ProjectDir)\..\sampleutil;$(SCE_PSP2_SDK_DIR)\target\include_common;$(CG_INC_PATH);$(SCE_PSP2_SDK_DIR)\host_tools\include;$(SCE_ORBIS_SDK_DIR)\host_tools\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

-      <MultiProcessorCompilation>true</MultiProcessorCompilation>

-    </ClCompile>

-    <Link>

-      <AdditionalLibraryDirectories>$(CG_LIB64_PATH);$(SCE_ORBIS_SDK_DIR)\host_tools\lib;$(SCE_ORBIS_SAMPLE_DIR)\sample_code\common\lib.x64\external;$(SCE_PSP2_SDK_DIR)\host_tools\lib.x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>

-      <AdditionalDependencies>tinyxml.lib;%(AdditionalDependencies)</AdditionalDependencies>

-      <GenerateDebugInformation>true</GenerateDebugInformation>

-    </Link>

-  </ItemDefinitionGroup>

-  <ItemGroup>

-    <ClInclude Include="..\..\include\sampleutil.h" />

-    <ClInclude Include="..\..\include\sampleutil\audio.h" />

-    <ClInclude Include="..\..\include\sampleutil\audio\context.h" />

-    <ClInclude Include="..\..\include\sampleutil\audio\data.h" />

-    <ClInclude Include="..\..\include\sampleutil\audio\voice.h" />

-    <ClInclude Include="..\..\include\sampleutil\debug\console.h" />

-    <ClInclude Include="..\..\include\sampleutil\debug\menu.h" />

-    <ClInclude Include="..\..\include\sampleutil\graphics.h" />

-    <ClInclude Include="..\..\include\sampleutil\graphics\buffer.h" />

-    <ClInclude Include="..\..\include\sampleutil\graphics\collada.h" />

-    <ClInclude Include="..\..\include\sampleutil\graphics\collada\collada_animation.h" />

-    <ClInclude Include="..\..\include\sampleutil\graphics\collada\collada_base.h" />

-    <ClInclude Include="..\..\include\sampleutil\graphics\collada\collada_effect.h" />

-    <ClInclude Include="..\..\include\sampleutil\graphics\collada\collada_geometry.h" />

-    <ClInclude Include="..\..\include\sampleutil\graphics\collada\collada_image.h" />

-    <ClInclude Include="..\..\include\sampleutil\graphics\collada\collada_scene.h" />

-    <ClInclude Include="..\..\include\sampleutil\graphics\constant.h" />

-    <ClInclude Include="..\..\include\sampleutil\graphics\context.h" />

-    <ClInclude Include="..\..\include\sampleutil\graphics\effect.h" />

-    <ClInclude Include="..\..\include\sampleutil\graphics\font.h" />

-    <ClInclude Include="..\..\include\sampleutil\graphics\loader.h" />

-    <ClInclude Include="..\..\include\sampleutil\graphics\platform.h" />

-    <ClInclude Include="..\..\include\sampleutil\graphics\platform_dx11\platform_dx11.h" />

-    <ClInclude Include="..\..\include\sampleutil\graphics\platform_gnm\platform_gnm.h" />

-    <ClInclude Include="..\..\include\sampleutil\graphics\platform_gxm\platform_gxm.h" />

-    <ClInclude Include="..\..\include\sampleutil\graphics\program.h" />

-    <ClInclude Include="..\..\include\sampleutil\graphics\sprite.h" />

-    <ClInclude Include="..\..\include\sampleutil\input.h" />

-    <ClInclude Include="..\..\include\sampleutil\input\controller.h" />

-    <ClInclude Include="..\..\include\sampleutil\input\motion.h" />

-    <ClInclude Include="..\..\include\sampleutil\input\touch.h" />

-    <ClInclude Include="..\..\include\sampleutil\sampleutil_common.h" />

-    <ClInclude Include="..\..\include\sampleutil\sampleutil_error.h" />

-    <ClInclude Include="..\..\include\sampleutil\skeleton.h" />

-    <ClInclude Include="..\..\include\sampleutil\system.h" />

-    <ClInclude Include="audio\audio_internal.h" />

-    <ClInclude Include="audio\ngs2\ngs2_internal.h" />

-    <ClInclude Include="audio\ngs2\ngs2_stream.h" />

-    <ClInclude Include="audio\ngs\ngs_internal.h" />

-    <ClInclude Include="audio\ngs\ngs_module.h" />

-    <ClInclude Include="debug\debug_menu_internal.h" />

-    <ClInclude Include="graphics\collada\collada_internal.h" />

-    <ClInclude Include="graphics\collada\collada_material.h" />

-    <ClInclude Include="graphics\collada\collada_scene.h" />

-    <ClInclude Include="graphics\collada\collada_transform.h" />

-    <ClInclude Include="graphics\collada\collada_util.h" />

-    <ClInclude Include="graphics\collada\dae\dae.h" />

-    <ClInclude Include="graphics\collada\dae\dae_animation.h" />

-    <ClInclude Include="graphics\collada\dae\dae_common.h" />

-    <ClInclude Include="graphics\collada\dae\dae_control.h" />

-    <ClInclude Include="graphics\collada\dae\dae_data_flow.h" />

-    <ClInclude Include="graphics\collada\dae\dae_effect.h" />

-    <ClInclude Include="graphics\collada\dae\dae_geometry.h" />

-    <ClInclude Include="graphics\collada\dae\dae_scene.h" />

-    <ClInclude Include="graphics\collada\dae\dae_transform.h" />

-    <ClInclude Include="graphics\collada\dae\dae_vscene.h" />

-    <ClInclude Include="graphics\constant_internal.h" />

-    <ClInclude Include="graphics\font_internal.h" />

-    <ClInclude Include="graphics\graphics_internal.h" />

-    <ClInclude Include="graphics\image.h" />

-    <ClInclude Include="graphics\platform_dx11\buffer_internal_dx11.h" />

-    <ClInclude Include="graphics\platform_dx11\constant_internal_dx11.h" />

-    <ClInclude Include="graphics\platform_dx11\context_internal_dx11.h" />

-    <ClInclude Include="graphics\platform_dx11\dx11_internal.h" />

-    <ClInclude Include="graphics\platform_dx11\font_win.h" />

-    <ClInclude Include="graphics\platform_dx11\loader_internal_dx11.h" />

-    <ClInclude Include="graphics\platform_dx11\program_internal_dx11.h" />

-    <ClInclude Include="graphics\platform_gnm\buffer_internal_gnm.h" />

-    <ClInclude Include="graphics\platform_gnm\constant_internal_gnm.h" />

-    <ClInclude Include="graphics\platform_gnm\context_internal_gnm.h" />

-    <ClInclude Include="graphics\platform_gnm\font_orbis.h" />

-    <ClInclude Include="graphics\platform_gnm\gnm_internal.h" />

-    <ClInclude Include="graphics\platform_gnm\heap_gnm.h" />

-    <ClInclude Include="graphics\platform_gnm\image_gnm.h" />

-    <ClInclude Include="graphics\platform_gnm\loader_internal_gnm.h" />

-    <ClInclude Include="graphics\platform_gnm\program_internal_gnm.h" />

-    <ClInclude Include="graphics\platform_gxm\buffer_internal_gxm.h" />

-    <ClInclude Include="graphics\platform_gxm\constant_internal_gxm.h" />

-    <ClInclude Include="graphics\platform_gxm\context_internal_gxm.h" />

-    <ClInclude Include="graphics\platform_gxm\font_psp2.h" />

-    <ClInclude Include="graphics\platform_gxm\gxm_internal.h" />

-    <ClInclude Include="graphics\platform_gxm\heap_gxm.h" />

-    <ClInclude Include="graphics\platform_gxm\loader_internal_gxm.h" />

-    <ClInclude Include="graphics\platform_gxm\program_internal_gxm.h" />

-    <ClInclude Include="graphics\platform_gxm\texture_util_gxm.h" />

-    <ClInclude Include="graphics\sprite_internal.h" />

-    <ClInclude Include="input\controller_common.h" />

-    <ClInclude Include="input\pad_common.h" />

-    <ClInclude Include="resource\resource_manager.h" />

-    <ClInclude Include="resource\shader_base.h" />

-    <ClInclude Include="resource\std_cbuffer.h" />

-    <ClInclude Include="sampleutil_internal.h" />

-    <ClInclude Include="stdafx.h" />

-    <ClInclude Include="util\util.h" />

-  </ItemGroup>

-  <ItemGroup>

-    <ClCompile Include="audio\audio.cpp" />

-    <ClCompile Include="audio\audio_data.cpp" />

-    <ClCompile Include="audio\ngs2\ngs2_context.cpp" />

-    <ClCompile Include="audio\ngs2\ngs2_data.cpp" />

-    <ClCompile Include="audio\ngs2\ngs2_rack.cpp" />

-    <ClCompile Include="audio\ngs2\ngs2_stream.cpp" />

-    <ClCompile Include="audio\ngs2\ngs2_thread.cpp" />

-    <ClCompile Include="audio\ngs2\ngs2_voice.cpp" />

-    <ClCompile Include="audio\ngs\ngs_audio_util.cpp" />

-    <ClCompile Include="audio\ngs\ngs_buss.cpp" />

-    <ClCompile Include="audio\ngs\ngs_context.cpp" />

-    <ClCompile Include="audio\ngs\ngs_data.cpp" />

-    <ClCompile Include="audio\ngs\ngs_module.cpp" />

-    <ClCompile Include="audio\ngs\ngs_stream.cpp" />

-    <ClCompile Include="audio\ngs\ngs_voice.cpp" />

-    <ClCompile Include="audio\ngs\ngs_worker_thread.cpp" />

-    <ClCompile Include="debug\console.cpp" />

-    <ClCompile Include="debug\debug_menu_item_group.cpp" />

-    <ClCompile Include="debug\menu.cpp" />

-    <ClCompile Include="graphics\buffer.cpp" />

-    <ClCompile Include="graphics\collada\collada.cpp" />

-    <ClCompile Include="graphics\collada\collada_animation.cpp" />

-    <ClCompile Include="graphics\collada\collada_base.cpp" />

-    <ClCompile Include="graphics\collada\collada_controller.cpp" />

-    <ClCompile Include="graphics\collada\collada_effect.cpp" />

-    <ClCompile Include="graphics\collada\collada_geometry.cpp" />

-    <ClCompile Include="graphics\collada\collada_image.cpp" />

-    <ClCompile Include="graphics\collada\collada_scene.cpp" />

-    <ClCompile Include="graphics\collada\collada_util.cpp" />

-    <ClCompile Include="graphics\collada\dae\dae_animation.cpp" />

-    <ClCompile Include="graphics\collada\dae\dae_control.cpp" />

-    <ClCompile Include="graphics\collada\dae\dae_data_flow.cpp" />

-    <ClCompile Include="graphics\collada\dae\dae_effect.cpp" />

-    <ClCompile Include="graphics\collada\dae\dae_geom.cpp" />

-    <ClCompile Include="graphics\collada\dae\dae_geometry.cpp" />

-    <ClCompile Include="graphics\collada\dae\dae_scene.cpp" />

-    <ClCompile Include="graphics\collada\dae\dae_transform.cpp" />

-    <ClCompile Include="graphics\effect.cpp" />

-    <ClCompile Include="graphics\font.cpp" />

-    <ClCompile Include="graphics\frame_buffer.cpp" />

-    <ClCompile Include="graphics\image.cpp" />

-    <ClCompile Include="graphics\loader.cpp" />

-    <ClCompile Include="graphics\platform_dx11\buffer_dx11.cpp" />

-    <ClCompile Include="graphics\platform_dx11\constant_dx11.cpp" />

-    <ClCompile Include="graphics\platform_dx11\context_dx11.cpp" />

-    <ClCompile Include="graphics\platform_dx11\font_win.cpp" />

-    <ClCompile Include="graphics\platform_dx11\frame_buffer_dx11.cpp" />

-    <ClCompile Include="graphics\platform_dx11\image_dx11.cpp" />

-    <ClCompile Include="graphics\platform_dx11\loader_dx11.cpp" />

-    <ClCompile Include="graphics\platform_dx11\program_dx11.cpp" />

-    <ClCompile Include="graphics\platform_dx11\render_target_dx11.cpp" />

-    <ClCompile Include="graphics\platform_dx11\texture_dx11.cpp" />

-    <ClCompile Include="graphics\platform_gnm\buffer_gnm.cpp" />

-    <ClCompile Include="graphics\platform_gnm\constant_gnm.cpp" />

-    <ClCompile Include="graphics\platform_gnm\context_gnm.cpp" />

-    <ClCompile Include="graphics\platform_gnm\font_orbis.cpp" />

-    <ClCompile Include="graphics\platform_gnm\frame_buffer_gnm.cpp" />

-    <ClCompile Include="graphics\platform_gnm\heap_gnm.cpp" />

-    <ClCompile Include="graphics\platform_gnm\image_gnm.cpp" />

-    <ClCompile Include="graphics\platform_gnm\loader_gnm.cpp" />

-    <ClCompile Include="graphics\platform_gnm\memory_gnm.cpp" />

-    <ClCompile Include="graphics\platform_gnm\program_gnm.cpp" />

-    <ClCompile Include="graphics\platform_gnm\render_target_gnm.cpp" />

-    <ClCompile Include="graphics\platform_gnm\shader_loader_gnm.cpp" />

-    <ClCompile Include="graphics\platform_gnm\texture_gnm.cpp" />

-    <ClCompile Include="graphics\platform_gxm\buffer_gxm.cpp" />

-    <ClCompile Include="graphics\platform_gxm\constant_gxm.cpp" />

-    <ClCompile Include="graphics\platform_gxm\context_gxm.cpp" />

-    <ClCompile Include="graphics\platform_gxm\font_psp2.cpp" />

-    <ClCompile Include="graphics\platform_gxm\frame_buffer_gxm.cpp" />

-    <ClCompile Include="graphics\platform_gxm\heap_gxm.cpp" />

-    <ClCompile Include="graphics\platform_gxm\image_gxm.cpp" />

-    <ClCompile Include="graphics\platform_gxm\loader_gxm.cpp" />

-    <ClCompile Include="graphics\platform_gxm\program_gxm.cpp" />

-    <ClCompile Include="graphics\platform_gxm\render_target_gxm.cpp" />

-    <ClCompile Include="graphics\platform_gxm\texture_gxm.cpp" />

-    <ClCompile Include="graphics\platform_gxm\texture_util_gxm.cpp" />

-    <ClCompile Include="graphics\program.cpp" />

-    <ClCompile Include="graphics\sprite.cpp" />

-    <ClCompile Include="graphics\sprite_effect_2d.cpp" />

-    <ClCompile Include="graphics\texture.cpp" />

-    <ClCompile Include="input\controller_common.cpp" />

-    <ClCompile Include="input\orbis\pad_orbis.cpp" />

-    <ClCompile Include="input\pad_common.cpp" />

-    <ClCompile Include="input\psp2\controller_psp2.cpp" />

-    <ClCompile Include="input\psp2\motion_psp2.cpp" />

-    <ClCompile Include="input\psp2\pad_psp2.cpp" />

-    <ClCompile Include="input\psp2\touch_psp2.cpp" />

-    <ClCompile Include="input\win\controller_win.cpp" />

-    <ClCompile Include="input\win\pad_win.cpp" />

-    <ClCompile Include="input\win\touch_win.cpp" />

-    <ClCompile Include="resource\dllmain.cpp" />

-    <ClCompile Include="resource\resource_manager.cpp" />

-    <ClCompile Include="sampleutil_common.cpp" />

-    <ClCompile Include="skeleton.cpp" />

-    <ClCompile Include="system\orbis\save_data_orbis.cpp" />

-    <ClCompile Include="system\orbis\user_orbis.cpp" />

-    <ClCompile Include="system\psp2\save_data_psp2.cpp" />

-    <ClCompile Include="system\psp2\user_psp2.cpp" />

-    <ClCompile Include="system\win\save_data_win.cpp" />

-    <ClCompile Include="system\win\user_win.cpp" />

-    <ClCompile Include="util\util.cpp" />

-    <ClCompile Include="util\util_streaming.cpp" />

-  </ItemGroup>

-  <ItemGroup>

-    <CustomBuild Include="resource\sampleutil_fill2d_f.pssl">

-      <FileType>Document</FileType>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">$(IntDir)%(Filename)_sb.obj</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)_sb.obj</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_sb.obj</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">

-      </AdditionalInputs>

-      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">

-      </AdditionalInputs>

-      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">

-      </AdditionalInputs>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_fill2d_v.pssl">

-      <FileType>Document</FileType>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">$(IntDir)%(Filename)_sb.obj</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)_sb.obj</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_sb.obj</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>

-    </CustomBuild>

-  </ItemGroup>

-  <ItemGroup>

-    <CustomBuild Include="resource\sampleutil_clear_p.pssl">

-      <FileType>Document</FileType>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">$(IntDir)%(Filename)_sb.obj</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)_sb.obj</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_sb.obj</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_clear_vv.pssl">

-      <FileType>Document</FileType>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">$(IntDir)%(Filename)_sb.obj</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)_sb.obj</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_sb.obj</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>

-    </CustomBuild>

-  </ItemGroup>

-  <ItemGroup>

-    <CustomBuild Include="resource\sampleutil_point_sprite2d_f.pssl">

-      <FileType>Document</FileType>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">$(IntDir)%(Filename)_sb.obj</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)_sb.obj</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_sb.obj</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">

-      </AdditionalInputs>

-      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">

-      </AdditionalInputs>

-      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">

-      </AdditionalInputs>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_point_sprite2d_v.pssl">

-      <FileType>Document</FileType>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">$(IntDir)%(Filename)_sb.obj</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)_sb.obj</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_sb.obj</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_sprite2d_f.pssl">

-      <FileType>Document</FileType>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">$(IntDir)%(Filename)_sb.obj</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)_sb.obj</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_sb.obj</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_sprite2d_v.pssl">

-      <FileType>Document</FileType>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">$(IntDir)%(Filename)_sb.obj</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)_sb.obj</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_sb.obj</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_collada_skinning_phong_f.pssl">

-      <FileType>Document</FileType>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_collada_skinning_phong_v.pssl">

-      <FileType>Document</FileType>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis  "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_ascii.tga">

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)"

-copy "%(FullPath)" "$(IntDir)%(Filename).tga"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).tga" "%(Filename).obj"

-popd

-</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">if not exist "$(IntDir)" md "$(IntDir)"

-copy "%(FullPath)" "$(IntDir)%(Filename).tga"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).tga" "%(Filename).obj"

-popd

-</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "%(FullPath)" -b2e PSP2,_binary_%(Filename)_tga_start,_binary_%(Filename)_tga_size -o "$(IntDir)%(Filename)_tga.obj"

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">$(IntDir)%(Filename).obj;%(Outputs)</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename).obj;%(Outputs)</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_tga.obj;%(Outputs)</Outputs>

-      <FileType>Document</FileType>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)"

-copy "%(FullPath)" "$(IntDir)%(Filename).tga"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).tga" "%(Filename).obj"

-popd

-</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">if not exist "$(IntDir)" md "$(IntDir)"

-copy "%(FullPath)" "$(IntDir)%(Filename).tga"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).tga" "%(Filename).obj"

-popd

-</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "%(FullPath)" -b2e PSP2,_binary_%(Filename)_tga_start,_binary_%(Filename)_tga_size -o "$(IntDir)%(Filename)_tga.obj"

-</Command>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(IntDir)%(Filename).obj;%(Outputs)</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename).obj;%(Outputs)</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_tga.obj;%(Outputs)</Outputs>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>

-    </CustomBuild>

-  </ItemGroup>

-  <ItemGroup>

-    <CustomBuild Include="resource\sampleutil_clear_f.cg">

-      <FileType>Document</FileType>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_fp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp"

-"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj"

-</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_fp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp"

-"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj"

-</Command>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">true</ExcludedFromBuild>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_clear_v.cg">

-      <FileType>Document</FileType>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_vp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp"

-"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj"

-</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_vp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp"

-"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj"

-</Command>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">true</ExcludedFromBuild>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_collada_skinning_phong_f.cg">

-      <FileType>Document</FileType>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_fp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp"

-"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj"

-</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_fp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp"

-"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj"

-</Command>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">true</ExcludedFromBuild>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_collada_skinning_phong_v.cg">

-      <FileType>Document</FileType>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_vp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp"

-"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj"

-</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_vp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp"

-"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj"

-</Command>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">true</ExcludedFromBuild>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_fill2d_f.cg">

-      <FileType>Document</FileType>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_fp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp"

-"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj"

-</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_fp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp"

-"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj"

-</Command>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">true</ExcludedFromBuild>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_fill2d_v.cg">

-      <FileType>Document</FileType>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_vp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp"

-"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj"

-</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_vp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp"

-"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj"

-</Command>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">true</ExcludedFromBuild>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_point_sprite2d_f.cg">

-      <FileType>Document</FileType>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_fp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp"

-"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj"

-</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_fp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp"

-"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj"

-</Command>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">true</ExcludedFromBuild>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_point_sprite2d_v.cg">

-      <FileType>Document</FileType>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_vp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp"

-"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj"

-</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_vp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp"

-"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj"

-</Command>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">true</ExcludedFromBuild>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_sprite2d_f.cg">

-      <FileType>Document</FileType>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_fp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp"

-"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj"

-</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_fp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp"

-"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj"

-</Command>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">true</ExcludedFromBuild>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_sprite2d_v.cg">

-      <FileType>Document</FileType>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_vp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp"

-"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj"

-</Command>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_vp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp"

-"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj"

-</Command>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">true</ExcludedFromBuild>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_sprite2d_2_f.cg">

-      <FileType>Document</FileType>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_fp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp"

-"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj"

-</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_fp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp"

-"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj"

-</Command>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">true</ExcludedFromBuild>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_sprite2d_2_v.cg">

-      <FileType>Document</FileType>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_vp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp"

-"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj"

-</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_vp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp"

-"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj"

-</Command>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">true</ExcludedFromBuild>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_sprite2d_2_f.pssl">

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>

-      <FileType>Document</FileType>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_sprite2d_2_v.pssl">

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>

-      <FileType>Document</FileType>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_sprite2d_yuy2_f.cg">

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">true</ExcludedFromBuild>

-      <FileType>Document</FileType>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_fp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp"

-"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj"

-</Command>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_fp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp"

-"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj"

-</Command>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_sprite2d_yuy2_f.pssl">

-      <FileType>Document</FileType>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">true</ExcludedFromBuild>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_sprite2d_yuy2_v.cg">

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">true</ExcludedFromBuild>

-      <FileType>Document</FileType>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_vp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp"

-"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj"

-</Command>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_vp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp"

-"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj"

-</Command>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_sprite2d_yuy2_v.pssl">

-      <FileType>Document</FileType>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">true</ExcludedFromBuild>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_fill3d_f.cg">

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">true</ExcludedFromBuild>

-      <FileType>Document</FileType>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_fp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp"

-"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj"

-</Command>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_fp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp"

-"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj"

-</Command>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_fill3d_f.pssl">

-      <FileType>Document</FileType>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">$(IntDir)%(Filename)_sb.obj</Outputs>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">true</ExcludedFromBuild>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(IntDir)%(Filename)_sb.obj</Outputs>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_sb.obj;</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_sb.obj;</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_fill3d_v.cg">

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">true</ExcludedFromBuild>

-      <FileType>Document</FileType>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_vp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp"

-"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj"

-</Command>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_vp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp"

-"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj"

-</Command>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_fill3d_v.pssl">

-      <FileType>Document</FileType>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">$(IntDir)%(Filename)_sb.obj</Outputs>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">true</ExcludedFromBuild>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(IntDir)%(Filename)_sb.obj</Outputs>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_sb.obj;</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_sb.obj;</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_wireframe_f.cg">

-      <FileType>Document</FileType>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_fp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp"

-"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj"

-</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_fp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp"

-"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj"

-</Command>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_wireframe_f.pssl">

-      <FileType>Document</FileType>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_wireframe_v.cg">

-      <FileType>Document</FileType>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_vp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp"

-"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj"

-</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_vp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp"

-"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj"

-</Command>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_wireframe_v.pssl">

-      <FileType>Document</FileType>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd</Command>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_sprite2d_ycbcr_f.pssl">

-      <FileType>Document</FileType>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd

-</Command>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">$(IntDir)%(Filename)_sb.obj</Outputs>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd

-</Command>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Compiling Fragment Shader: "%(FullPath)"</Message>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(IntDir)%(Filename)_sb.obj</Outputs>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_sprite2d_ycbcr_v.pssl">

-      <FileType>Document</FileType>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd

-</Command>

-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb"

-pushd "$(IntDir)"

-"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe"  -I binary -O elf64-x86-64  -B i386 "%(Filename).sb" "%(Filename)_sb.obj"

-popd

-</Command>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">$(IntDir)%(Filename)_sb.obj</Outputs>

-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Compiling Vertex Shader: "%(FullPath)"</Message>

-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(IntDir)%(Filename)_sb.obj</Outputs>

-    </CustomBuild>

-    <None Include="resource\vsoutput.hs" />

-  </ItemGroup>

-  <ItemGroup>

-    <ResourceCompile Include="resource\libSceSampleUtil.rc" />

-  </ItemGroup>

-  <Import Condition="'$(ConfigurationType)' == 'Makefile' and Exists('$(VCTargetsPath)\Platforms\$(Platform)\SCE.Makefile.$(Platform).targets')" Project="$(VCTargetsPath)\Platforms\$(Platform)\SCE.Makefile.$(Platform).targets" />

-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

-  <ImportGroup Label="ExtensionTargets">

-  </ImportGroup>

-</Project>
\ No newline at end of file
diff --git a/src/third_party/libvpx_gpu/vp9-dec-test/PS4/common/source/sampleutil/libSceSampleUtil.vcxproj.filters b/src/third_party/libvpx_gpu/vp9-dec-test/PS4/common/source/sampleutil/libSceSampleUtil.vcxproj.filters
deleted file mode 100644
index 7284c3d..0000000
--- a/src/third_party/libvpx_gpu/vp9-dec-test/PS4/common/source/sampleutil/libSceSampleUtil.vcxproj.filters
+++ /dev/null
@@ -1,833 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>

-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

-  <ItemGroup>

-    <Filter Include="Source Files">

-      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>

-      <Extensions>cpp;c;cxx;cc;s;asm</Extensions>

-    </Filter>

-    <Filter Include="Header Files">

-      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>

-      <Extensions>h;hpp</Extensions>

-    </Filter>

-    <Filter Include="Source Files\graphics">

-      <UniqueIdentifier>{b1346de6-e476-4511-b903-d7900f31aa0f}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="Source Files\input">

-      <UniqueIdentifier>{77dd35ea-1790-4bdf-932a-211ab73b875b}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="Source Files\graphics\collada">

-      <UniqueIdentifier>{96fc6757-68ff-4fc1-aebf-889d255c56b7}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="Source Files\graphics\collada\dae">

-      <UniqueIdentifier>{fc715001-0ae0-4f30-aab3-959f7c73bc29}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="Source Files\graphics\platform_gnm">

-      <UniqueIdentifier>{ecf91a0b-ee15-4b04-abf4-f61372b83438}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="Source Files\audio">

-      <UniqueIdentifier>{f30bddbc-6aad-436b-8ff6-2686aac95c18}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="Source Files\audio\ngs2">

-      <UniqueIdentifier>{67e01345-fdb3-473d-bcc2-772196cb6852}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="Source Files\Resource">

-      <UniqueIdentifier>{719af2ff-2b25-49d6-bcf2-5613eef4f3f3}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="Header Files\sample_util">

-      <UniqueIdentifier>{24b4b573-8fbb-49e0-a960-fe051cb20da3}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="Header Files\sample_util\Audio">

-      <UniqueIdentifier>{9be1ca38-b2c3-4228-a208-4fb50c69b823}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="Header Files\sample_util\graphics">

-      <UniqueIdentifier>{02155831-4f6c-4313-be6c-0455083f264d}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="Header Files\sample_util\graphics\collada">

-      <UniqueIdentifier>{251fc1da-25f4-4982-835e-e4aab23a3ee9}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="Header Files\sample_util\graphics\platform_gnm">

-      <UniqueIdentifier>{9a407e69-ecd3-488e-83a3-aed61cd20707}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="Header Files\sample_util\debug">

-      <UniqueIdentifier>{09e2ddc6-9563-4fae-8a60-c1c1499a9493}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="Source Files\debug">

-      <UniqueIdentifier>{1a668115-ef74-4445-8af9-808390b4ad4d}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="Header Files\sample_util\graphics\platform_gxm">

-      <UniqueIdentifier>{8da06857-7958-4602-a123-517aa1d98f5d}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="Header Files\sample_util\graphics\platform_dx11">

-      <UniqueIdentifier>{8c93893c-27c0-4eb6-8205-0f7132b8615e}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="Source Files\graphics\platform_gxm">

-      <UniqueIdentifier>{21d0ef12-3fc4-4a49-8d9d-622a43acc513}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="Source Files\graphics\platform_dx11">

-      <UniqueIdentifier>{b669e6e8-f199-4744-9a55-6e24f82088fa}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="Source Files\Resource\pssl">

-      <UniqueIdentifier>{c5092e21-dfbf-4506-8610-2c7790192e9e}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="Source Files\Resource\cg">

-      <UniqueIdentifier>{3e4bb032-bb60-4124-a966-9d6261bf8549}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="Source Files\audio\ngs">

-      <UniqueIdentifier>{d5851d03-29f7-4e6b-95e2-b51f3e1bb5b0}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="Source Files\input\psp2">

-      <UniqueIdentifier>{5805689e-aa21-46d0-a3fb-b3f0d31257db}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="Source Files\input\win">

-      <UniqueIdentifier>{249df471-9168-4b5c-b3df-19fb830ecb34}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="Source Files\input\orbis">

-      <UniqueIdentifier>{04f123fb-f86e-4833-9370-401bd85796c6}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="Header Files\sample_util\input">

-      <UniqueIdentifier>{efe408b5-ffd2-43ae-9e89-89318a99b8f1}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="Source Files\util">

-      <UniqueIdentifier>{18bab552-4afd-4f0f-b241-6c47ab235426}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="Header Files\sample_util\system">

-      <UniqueIdentifier>{c714f3b2-b8ba-480b-8398-dcd8938f5c08}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="Source Files\system">

-      <UniqueIdentifier>{c4a34eee-25ee-427d-966b-0f1123e33beb}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="Source Files\system\win">

-      <UniqueIdentifier>{131f6b49-ff8f-494a-a2fc-c0b44b6c3cf7}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="Source Files\system\orbis">

-      <UniqueIdentifier>{f9c9275c-0ccf-4206-b558-7ccbb825e264}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="Source Files\system\psp2">

-      <UniqueIdentifier>{2b5f4786-b6f4-43c2-9c4d-d16e5d308abb}</UniqueIdentifier>

-    </Filter>

-  </ItemGroup>

-  <ItemGroup>

-    <ClInclude Include="graphics\collada\dae\dae.h">

-      <Filter>Source Files\graphics\collada\dae</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\collada\dae\dae_animation.h">

-      <Filter>Source Files\graphics\collada\dae</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\collada\dae\dae_common.h">

-      <Filter>Source Files\graphics\collada\dae</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\collada\dae\dae_control.h">

-      <Filter>Source Files\graphics\collada\dae</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\collada\dae\dae_data_flow.h">

-      <Filter>Source Files\graphics\collada\dae</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\collada\dae\dae_effect.h">

-      <Filter>Source Files\graphics\collada\dae</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\collada\dae\dae_geometry.h">

-      <Filter>Source Files\graphics\collada\dae</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\collada\dae\dae_scene.h">

-      <Filter>Source Files\graphics\collada\dae</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\collada\dae\dae_transform.h">

-      <Filter>Source Files\graphics\collada\dae</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\collada\dae\dae_vscene.h">

-      <Filter>Source Files\graphics\collada\dae</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\collada\collada_internal.h">

-      <Filter>Source Files\graphics\collada</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\collada\collada_material.h">

-      <Filter>Source Files\graphics\collada</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\collada\collada_scene.h">

-      <Filter>Source Files\graphics\collada</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\collada\collada_util.h">

-      <Filter>Source Files\graphics\collada</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\platform_gnm\gnm_internal.h">

-      <Filter>Source Files\graphics\platform_gnm</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\image.h">

-      <Filter>Source Files\graphics</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\collada\collada_transform.h">

-      <Filter>Source Files\graphics\collada</Filter>

-    </ClInclude>

-    <ClInclude Include="..\..\include\sampleutil\graphics.h">

-      <Filter>Header Files\sample_util</Filter>

-    </ClInclude>

-    <ClInclude Include="..\..\include\sampleutil\graphics\buffer.h">

-      <Filter>Header Files\sample_util\graphics</Filter>

-    </ClInclude>

-    <ClInclude Include="..\..\include\sampleutil\graphics\collada.h">

-      <Filter>Header Files\sample_util\graphics</Filter>

-    </ClInclude>

-    <ClInclude Include="..\..\include\sampleutil\graphics\constant.h">

-      <Filter>Header Files\sample_util\graphics</Filter>

-    </ClInclude>

-    <ClInclude Include="..\..\include\sampleutil\graphics\context.h">

-      <Filter>Header Files\sample_util\graphics</Filter>

-    </ClInclude>

-    <ClInclude Include="..\..\include\sampleutil\graphics\effect.h">

-      <Filter>Header Files\sample_util\graphics</Filter>

-    </ClInclude>

-    <ClInclude Include="..\..\include\sampleutil\graphics\loader.h">

-      <Filter>Header Files\sample_util\graphics</Filter>

-    </ClInclude>

-    <ClInclude Include="..\..\include\sampleutil\graphics\platform.h">

-      <Filter>Header Files\sample_util\graphics</Filter>

-    </ClInclude>

-    <ClInclude Include="..\..\include\sampleutil\graphics\program.h">

-      <Filter>Header Files\sample_util\graphics</Filter>

-    </ClInclude>

-    <ClInclude Include="..\..\include\sampleutil\graphics\sprite.h">

-      <Filter>Header Files\sample_util\graphics</Filter>

-    </ClInclude>

-    <ClInclude Include="..\..\include\sampleutil\graphics\platform_gnm\platform_gnm.h">

-      <Filter>Header Files\sample_util\graphics\platform_gnm</Filter>

-    </ClInclude>

-    <ClInclude Include="..\..\include\sampleutil\graphics\collada\collada_animation.h">

-      <Filter>Header Files\sample_util\graphics\collada</Filter>

-    </ClInclude>

-    <ClInclude Include="..\..\include\sampleutil\graphics\collada\collada_base.h">

-      <Filter>Header Files\sample_util\graphics\collada</Filter>

-    </ClInclude>

-    <ClInclude Include="..\..\include\sampleutil\graphics\collada\collada_effect.h">

-      <Filter>Header Files\sample_util\graphics\collada</Filter>

-    </ClInclude>

-    <ClInclude Include="..\..\include\sampleutil\graphics\collada\collada_geometry.h">

-      <Filter>Header Files\sample_util\graphics\collada</Filter>

-    </ClInclude>

-    <ClInclude Include="..\..\include\sampleutil\graphics\collada\collada_image.h">

-      <Filter>Header Files\sample_util\graphics\collada</Filter>

-    </ClInclude>

-    <ClInclude Include="..\..\include\sampleutil\graphics\collada\collada_scene.h">

-      <Filter>Header Files\sample_util\graphics\collada</Filter>

-    </ClInclude>

-    <ClInclude Include="..\..\include\sampleutil\audio.h">

-      <Filter>Header Files\sample_util</Filter>

-    </ClInclude>

-    <ClInclude Include="..\..\include\sampleutil\audio\context.h">

-      <Filter>Header Files\sample_util\Audio</Filter>

-    </ClInclude>

-    <ClInclude Include="..\..\include\sampleutil\audio\data.h">

-      <Filter>Header Files\sample_util\Audio</Filter>

-    </ClInclude>

-    <ClInclude Include="..\..\include\sampleutil\audio\voice.h">

-      <Filter>Header Files\sample_util\Audio</Filter>

-    </ClInclude>

-    <ClInclude Include="..\..\include\sampleutil\input.h">

-      <Filter>Header Files\sample_util</Filter>

-    </ClInclude>

-    <ClInclude Include="..\..\include\sampleutil\sampleutil_common.h">

-      <Filter>Header Files\sample_util</Filter>

-    </ClInclude>

-    <ClInclude Include="..\..\include\sampleutil\sampleutil_error.h">

-      <Filter>Header Files\sample_util</Filter>

-    </ClInclude>

-    <ClInclude Include="..\..\include\sampleutil\skeleton.h">

-      <Filter>Header Files\sample_util</Filter>

-    </ClInclude>

-    <ClInclude Include="..\..\include\sampleutil.h">

-      <Filter>Header Files\sample_util</Filter>

-    </ClInclude>

-    <ClInclude Include="audio\ngs2\ngs2_internal.h">

-      <Filter>Source Files\audio\ngs2</Filter>

-    </ClInclude>

-    <ClInclude Include="audio\ngs2\ngs2_stream.h">

-      <Filter>Source Files\audio\ngs2</Filter>

-    </ClInclude>

-    <ClInclude Include="resource\resource_manager.h">

-      <Filter>Source Files\Resource</Filter>

-    </ClInclude>

-    <ClInclude Include="resource\shader_base.h">

-      <Filter>Source Files\Resource</Filter>

-    </ClInclude>

-    <ClInclude Include="resource\std_cbuffer.h">

-      <Filter>Source Files\Resource</Filter>

-    </ClInclude>

-    <ClInclude Include="stdafx.h">

-      <Filter>Source Files</Filter>

-    </ClInclude>

-    <ClInclude Include="..\..\include\sampleutil\debug\console.h">

-      <Filter>Header Files\sample_util\debug</Filter>

-    </ClInclude>

-    <ClInclude Include="..\..\include\sampleutil\debug\menu.h">

-      <Filter>Header Files\sample_util\debug</Filter>

-    </ClInclude>

-    <ClInclude Include="..\..\include\sampleutil\graphics\font.h">

-      <Filter>Header Files\sample_util\graphics</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\graphics_internal.h">

-      <Filter>Source Files\graphics</Filter>

-    </ClInclude>

-    <ClInclude Include="..\..\include\sampleutil\graphics\platform_gxm\platform_gxm.h">

-      <Filter>Header Files\sample_util\graphics\platform_gxm</Filter>

-    </ClInclude>

-    <ClInclude Include="..\..\include\sampleutil\graphics\platform_dx11\platform_dx11.h">

-      <Filter>Header Files\sample_util\graphics\platform_dx11</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\platform_gxm\gxm_internal.h">

-      <Filter>Source Files\graphics\platform_gxm</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\platform_dx11\dx11_internal.h">

-      <Filter>Source Files\graphics\platform_dx11</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\platform_gnm\image_gnm.h">

-      <Filter>Source Files\graphics\platform_gnm</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\constant_internal.h">

-      <Filter>Source Files\graphics</Filter>

-    </ClInclude>

-    <ClInclude Include="..\..\include\sampleutil\input\controller.h">

-      <Filter>Header Files\sample_util\input</Filter>

-    </ClInclude>

-    <ClInclude Include="..\..\include\sampleutil\input\motion.h">

-      <Filter>Header Files\sample_util\input</Filter>

-    </ClInclude>

-    <ClInclude Include="..\..\include\sampleutil\input\touch.h">

-      <Filter>Header Files\sample_util\input</Filter>

-    </ClInclude>

-    <ClInclude Include="audio\ngs\ngs_internal.h">

-      <Filter>Source Files\audio\ngs</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\platform_gxm\heap_gxm.h">

-      <Filter>Source Files\graphics\platform_gxm</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\platform_gnm\heap_gnm.h">

-      <Filter>Source Files\graphics\platform_gnm</Filter>

-    </ClInclude>

-    <ClInclude Include="util\util.h">

-      <Filter>Source Files\util</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\platform_gxm\texture_util_gxm.h">

-      <Filter>Source Files\graphics\platform_gxm</Filter>

-    </ClInclude>

-    <ClInclude Include="..\..\include\sampleutil\system.h">

-      <Filter>Header Files\sample_util</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\platform_gnm\buffer_internal_gnm.h">

-      <Filter>Source Files\graphics\platform_gnm</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\platform_gnm\constant_internal_gnm.h">

-      <Filter>Source Files\graphics\platform_gnm</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\platform_gnm\context_internal_gnm.h">

-      <Filter>Source Files\graphics\platform_gnm</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\platform_gnm\loader_internal_gnm.h">

-      <Filter>Source Files\graphics\platform_gnm</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\platform_gnm\program_internal_gnm.h">

-      <Filter>Source Files\graphics\platform_gnm</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\platform_dx11\buffer_internal_dx11.h">

-      <Filter>Source Files\graphics\platform_dx11</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\platform_dx11\constant_internal_dx11.h">

-      <Filter>Source Files\graphics\platform_dx11</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\platform_dx11\context_internal_dx11.h">

-      <Filter>Source Files\graphics\platform_dx11</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\platform_dx11\loader_internal_dx11.h">

-      <Filter>Source Files\graphics\platform_dx11</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\platform_dx11\program_internal_dx11.h">

-      <Filter>Source Files\graphics\platform_dx11</Filter>

-    </ClInclude>

-    <ClInclude Include="sampleutil_internal.h">

-      <Filter>Source Files</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\font_internal.h">

-      <Filter>Source Files\graphics</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\platform_gxm\buffer_internal_gxm.h">

-      <Filter>Source Files\graphics\platform_gxm</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\platform_gxm\constant_internal_gxm.h">

-      <Filter>Source Files\graphics\platform_gxm</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\platform_gxm\context_internal_gxm.h">

-      <Filter>Source Files\graphics\platform_gxm</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\platform_gxm\loader_internal_gxm.h">

-      <Filter>Source Files\graphics\platform_gxm</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\platform_gxm\program_internal_gxm.h">

-      <Filter>Source Files\graphics\platform_gxm</Filter>

-    </ClInclude>

-    <ClInclude Include="debug\debug_menu_internal.h">

-      <Filter>Source Files\debug</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\platform_dx11\font_win.h">

-      <Filter>Source Files\graphics\platform_dx11</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\platform_gnm\font_orbis.h">

-      <Filter>Source Files\graphics\platform_gnm</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\platform_gxm\font_psp2.h">

-      <Filter>Source Files\graphics\platform_gxm</Filter>

-    </ClInclude>

-    <ClInclude Include="graphics\sprite_internal.h">

-      <Filter>Source Files\graphics</Filter>

-    </ClInclude>

-    <ClInclude Include="input\pad_common.h">

-      <Filter>Source Files\input</Filter>

-    </ClInclude>

-    <ClInclude Include="input\controller_common.h">

-      <Filter>Source Files\input</Filter>

-    </ClInclude>

-    <ClInclude Include="audio\audio_internal.h">

-      <Filter>Source Files\audio</Filter>

-    </ClInclude>

-    <ClInclude Include="audio\ngs\ngs_module.h">

-      <Filter>Source Files\audio\ngs</Filter>

-    </ClInclude>

-  </ItemGroup>

-  <ItemGroup>

-    <ClCompile Include="graphics\frame_buffer.cpp">

-      <Filter>Source Files\graphics</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\loader.cpp">

-      <Filter>Source Files\graphics</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\program.cpp">

-      <Filter>Source Files\graphics</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\effect.cpp">

-      <Filter>Source Files\graphics</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\sprite.cpp">

-      <Filter>Source Files\graphics</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\texture.cpp">

-      <Filter>Source Files\graphics</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\collada\dae\dae_animation.cpp">

-      <Filter>Source Files\graphics\collada\dae</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\collada\dae\dae_control.cpp">

-      <Filter>Source Files\graphics\collada\dae</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\collada\dae\dae_data_flow.cpp">

-      <Filter>Source Files\graphics\collada\dae</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\collada\dae\dae_effect.cpp">

-      <Filter>Source Files\graphics\collada\dae</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\collada\dae\dae_geom.cpp">

-      <Filter>Source Files\graphics\collada\dae</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\collada\dae\dae_geometry.cpp">

-      <Filter>Source Files\graphics\collada\dae</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\collada\dae\dae_scene.cpp">

-      <Filter>Source Files\graphics\collada\dae</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\collada\dae\dae_transform.cpp">

-      <Filter>Source Files\graphics\collada\dae</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\collada\collada.cpp">

-      <Filter>Source Files\graphics\collada</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\collada\collada_animation.cpp">

-      <Filter>Source Files\graphics\collada</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\collada\collada_base.cpp">

-      <Filter>Source Files\graphics\collada</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\collada\collada_controller.cpp">

-      <Filter>Source Files\graphics\collada</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\collada\collada_effect.cpp">

-      <Filter>Source Files\graphics\collada</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\collada\collada_geometry.cpp">

-      <Filter>Source Files\graphics\collada</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\collada\collada_image.cpp">

-      <Filter>Source Files\graphics\collada</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\collada\collada_scene.cpp">

-      <Filter>Source Files\graphics\collada</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\platform_gnm\buffer_gnm.cpp">

-      <Filter>Source Files\graphics\platform_gnm</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\platform_gnm\constant_gnm.cpp">

-      <Filter>Source Files\graphics\platform_gnm</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\platform_gnm\context_gnm.cpp">

-      <Filter>Source Files\graphics\platform_gnm</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\platform_gnm\frame_buffer_gnm.cpp">

-      <Filter>Source Files\graphics\platform_gnm</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\platform_gnm\loader_gnm.cpp">

-      <Filter>Source Files\graphics\platform_gnm</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\platform_gnm\program_gnm.cpp">

-      <Filter>Source Files\graphics\platform_gnm</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\platform_gnm\render_target_gnm.cpp">

-      <Filter>Source Files\graphics\platform_gnm</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\platform_gnm\texture_gnm.cpp">

-      <Filter>Source Files\graphics\platform_gnm</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\image.cpp">

-      <Filter>Source Files\graphics</Filter>

-    </ClCompile>

-    <ClCompile Include="audio\ngs2\ngs2_context.cpp">

-      <Filter>Source Files\audio\ngs2</Filter>

-    </ClCompile>

-    <ClCompile Include="audio\ngs2\ngs2_voice.cpp">

-      <Filter>Source Files\audio\ngs2</Filter>

-    </ClCompile>

-    <ClCompile Include="audio\ngs2\ngs2_data.cpp">

-      <Filter>Source Files\audio\ngs2</Filter>

-    </ClCompile>

-    <ClCompile Include="audio\ngs2\ngs2_rack.cpp">

-      <Filter>Source Files\audio\ngs2</Filter>

-    </ClCompile>

-    <ClCompile Include="audio\ngs2\ngs2_stream.cpp">

-      <Filter>Source Files\audio\ngs2</Filter>

-    </ClCompile>

-    <ClCompile Include="audio\ngs2\ngs2_thread.cpp">

-      <Filter>Source Files\audio\ngs2</Filter>

-    </ClCompile>

-    <ClCompile Include="resource\resource_manager.cpp">

-      <Filter>Source Files\Resource</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\collada\collada_util.cpp">

-      <Filter>Source Files\graphics\collada</Filter>

-    </ClCompile>

-    <ClCompile Include="skeleton.cpp">

-      <Filter>Source Files</Filter>

-    </ClCompile>

-    <ClCompile Include="debug\console.cpp">

-      <Filter>Source Files\debug</Filter>

-    </ClCompile>

-    <ClCompile Include="debug\menu.cpp">

-      <Filter>Source Files\debug</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\platform_gxm\buffer_gxm.cpp">

-      <Filter>Source Files\graphics\platform_gxm</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\platform_gxm\constant_gxm.cpp">

-      <Filter>Source Files\graphics\platform_gxm</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\platform_gxm\context_gxm.cpp">

-      <Filter>Source Files\graphics\platform_gxm</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\platform_gxm\frame_buffer_gxm.cpp">

-      <Filter>Source Files\graphics\platform_gxm</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\platform_gxm\loader_gxm.cpp">

-      <Filter>Source Files\graphics\platform_gxm</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\platform_gxm\program_gxm.cpp">

-      <Filter>Source Files\graphics\platform_gxm</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\platform_gxm\render_target_gxm.cpp">

-      <Filter>Source Files\graphics\platform_gxm</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\platform_gxm\texture_gxm.cpp">

-      <Filter>Source Files\graphics\platform_gxm</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\platform_dx11\buffer_dx11.cpp">

-      <Filter>Source Files\graphics\platform_dx11</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\platform_dx11\constant_dx11.cpp">

-      <Filter>Source Files\graphics\platform_dx11</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\platform_dx11\context_dx11.cpp">

-      <Filter>Source Files\graphics\platform_dx11</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\platform_dx11\frame_buffer_dx11.cpp">

-      <Filter>Source Files\graphics\platform_dx11</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\platform_dx11\loader_dx11.cpp">

-      <Filter>Source Files\graphics\platform_dx11</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\platform_dx11\program_dx11.cpp">

-      <Filter>Source Files\graphics\platform_dx11</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\platform_dx11\render_target_dx11.cpp">

-      <Filter>Source Files\graphics\platform_dx11</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\platform_dx11\texture_dx11.cpp">

-      <Filter>Source Files\graphics\platform_dx11</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\platform_gnm\image_gnm.cpp">

-      <Filter>Source Files\graphics\platform_gnm</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\platform_gnm\shader_loader_gnm.cpp">

-      <Filter>Source Files\graphics\platform_gnm</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\buffer.cpp">

-      <Filter>Source Files\graphics</Filter>

-    </ClCompile>

-    <ClCompile Include="audio\audio.cpp">

-      <Filter>Source Files\audio</Filter>

-    </ClCompile>

-    <ClCompile Include="input\psp2\controller_psp2.cpp">

-      <Filter>Source Files\input\psp2</Filter>

-    </ClCompile>

-    <ClCompile Include="input\psp2\touch_psp2.cpp">

-      <Filter>Source Files\input\psp2</Filter>

-    </ClCompile>

-    <ClCompile Include="input\win\controller_win.cpp">

-      <Filter>Source Files\input\win</Filter>

-    </ClCompile>

-    <ClCompile Include="input\win\touch_win.cpp">

-      <Filter>Source Files\input\win</Filter>

-    </ClCompile>

-    <ClCompile Include="audio\ngs\ngs_audio_util.cpp">

-      <Filter>Source Files\audio\ngs</Filter>

-    </ClCompile>

-    <ClCompile Include="audio\ngs\ngs_buss.cpp">

-      <Filter>Source Files\audio\ngs</Filter>

-    </ClCompile>

-    <ClCompile Include="audio\ngs\ngs_context.cpp">

-      <Filter>Source Files\audio\ngs</Filter>

-    </ClCompile>

-    <ClCompile Include="audio\ngs\ngs_data.cpp">

-      <Filter>Source Files\audio\ngs</Filter>

-    </ClCompile>

-    <ClCompile Include="audio\ngs\ngs_module.cpp">

-      <Filter>Source Files\audio\ngs</Filter>

-    </ClCompile>

-    <ClCompile Include="audio\ngs\ngs_stream.cpp">

-      <Filter>Source Files\audio\ngs</Filter>

-    </ClCompile>

-    <ClCompile Include="audio\ngs\ngs_voice.cpp">

-      <Filter>Source Files\audio\ngs</Filter>

-    </ClCompile>

-    <ClCompile Include="audio\ngs\ngs_worker_thread.cpp">

-      <Filter>Source Files\audio\ngs</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\platform_gxm\heap_gxm.cpp">

-      <Filter>Source Files\graphics\platform_gxm</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\platform_gnm\heap_gnm.cpp">

-      <Filter>Source Files\graphics\platform_gnm</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\platform_gnm\memory_gnm.cpp">

-      <Filter>Source Files\graphics\platform_gnm</Filter>

-    </ClCompile>

-    <ClCompile Include="resource\dllmain.cpp">

-      <Filter>Source Files\Resource</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\platform_dx11\image_dx11.cpp">

-      <Filter>Source Files\graphics\platform_dx11</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\platform_gxm\image_gxm.cpp">

-      <Filter>Source Files\graphics\platform_gxm</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\platform_gxm\texture_util_gxm.cpp">

-      <Filter>Source Files\graphics\platform_gxm</Filter>

-    </ClCompile>

-    <ClCompile Include="sampleutil_common.cpp">

-      <Filter>Source Files</Filter>

-    </ClCompile>

-    <ClCompile Include="system\orbis\save_data_orbis.cpp">

-      <Filter>Source Files\system\orbis</Filter>

-    </ClCompile>

-    <ClCompile Include="system\psp2\save_data_psp2.cpp">

-      <Filter>Source Files\system\psp2</Filter>

-    </ClCompile>

-    <ClCompile Include="system\win\save_data_win.cpp">

-      <Filter>Source Files\system\win</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\font.cpp">

-      <Filter>Source Files\graphics</Filter>

-    </ClCompile>

-    <ClCompile Include="util\util.cpp">

-      <Filter>Source Files\util</Filter>

-    </ClCompile>

-    <ClCompile Include="debug\debug_menu_item_group.cpp">

-      <Filter>Source Files\debug</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\platform_dx11\font_win.cpp">

-      <Filter>Source Files\graphics\platform_dx11</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\platform_gnm\font_orbis.cpp">

-      <Filter>Source Files\graphics\platform_gnm</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\platform_gxm\font_psp2.cpp">

-      <Filter>Source Files\graphics\platform_gxm</Filter>

-    </ClCompile>

-    <ClCompile Include="graphics\sprite_effect_2d.cpp">

-      <Filter>Source Files\graphics</Filter>

-    </ClCompile>

-    <ClCompile Include="input\pad_common.cpp">

-      <Filter>Source Files\input</Filter>

-    </ClCompile>

-    <ClCompile Include="input\psp2\pad_psp2.cpp">

-      <Filter>Source Files\input\psp2</Filter>

-    </ClCompile>

-    <ClCompile Include="system\win\user_win.cpp">

-      <Filter>Source Files\system\win</Filter>

-    </ClCompile>

-    <ClCompile Include="system\psp2\user_psp2.cpp">

-      <Filter>Source Files\system\psp2</Filter>

-    </ClCompile>

-    <ClCompile Include="system\orbis\user_orbis.cpp">

-      <Filter>Source Files\system\orbis</Filter>

-    </ClCompile>

-    <ClCompile Include="input\orbis\pad_orbis.cpp">

-      <Filter>Source Files\input\orbis</Filter>

-    </ClCompile>

-    <ClCompile Include="input\psp2\motion_psp2.cpp">

-      <Filter>Source Files\input\psp2</Filter>

-    </ClCompile>

-    <ClCompile Include="input\win\pad_win.cpp">

-      <Filter>Source Files\input\win</Filter>

-    </ClCompile>

-    <ClCompile Include="input\controller_common.cpp">

-      <Filter>Source Files\input</Filter>

-    </ClCompile>

-    <ClCompile Include="audio\audio_data.cpp">

-      <Filter>Source Files\audio</Filter>

-    </ClCompile>

-    <ClCompile Include="util\util_streaming.cpp">

-      <Filter>Source Files\util</Filter>

-    </ClCompile>

-  </ItemGroup>

-  <ItemGroup>

-    <CustomBuild Include="resource\sampleutil_ascii.tga">

-      <Filter>Source Files\Resource</Filter>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_clear_p.pssl">

-      <Filter>Source Files\Resource\pssl</Filter>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_sprite2d_v.pssl">

-      <Filter>Source Files\Resource\pssl</Filter>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_clear_vv.pssl">

-      <Filter>Source Files\Resource\pssl</Filter>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_collada_skinning_phong_f.pssl">

-      <Filter>Source Files\Resource\pssl</Filter>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_collada_skinning_phong_v.pssl">

-      <Filter>Source Files\Resource\pssl</Filter>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_fill2d_f.pssl">

-      <Filter>Source Files\Resource\pssl</Filter>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_fill2d_v.pssl">

-      <Filter>Source Files\Resource\pssl</Filter>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_point_sprite2d_f.pssl">

-      <Filter>Source Files\Resource\pssl</Filter>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_point_sprite2d_v.pssl">

-      <Filter>Source Files\Resource\pssl</Filter>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_sprite2d_f.pssl">

-      <Filter>Source Files\Resource\pssl</Filter>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_clear_f.cg">

-      <Filter>Source Files\Resource\cg</Filter>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_clear_v.cg">

-      <Filter>Source Files\Resource\cg</Filter>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_collada_skinning_phong_f.cg">

-      <Filter>Source Files\Resource\cg</Filter>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_collada_skinning_phong_v.cg">

-      <Filter>Source Files\Resource\cg</Filter>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_fill2d_f.cg">

-      <Filter>Source Files\Resource\cg</Filter>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_fill2d_v.cg">

-      <Filter>Source Files\Resource\cg</Filter>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_point_sprite2d_f.cg">

-      <Filter>Source Files\Resource\cg</Filter>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_point_sprite2d_v.cg">

-      <Filter>Source Files\Resource\cg</Filter>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_sprite2d_f.cg">

-      <Filter>Source Files\Resource\cg</Filter>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_sprite2d_v.cg">

-      <Filter>Source Files\Resource\cg</Filter>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_sprite2d_2_f.cg">

-      <Filter>Source Files\Resource\cg</Filter>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_sprite2d_2_v.cg">

-      <Filter>Source Files\Resource\cg</Filter>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_sprite2d_2_f.pssl">

-      <Filter>Source Files\Resource\pssl</Filter>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_sprite2d_2_v.pssl">

-      <Filter>Source Files\Resource\pssl</Filter>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_sprite2d_yuy2_f.pssl">

-      <Filter>Source Files\Resource\pssl</Filter>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_sprite2d_yuy2_v.pssl">

-      <Filter>Source Files\Resource\pssl</Filter>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_sprite2d_yuy2_f.cg">

-      <Filter>Source Files\Resource\cg</Filter>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_sprite2d_yuy2_v.cg">

-      <Filter>Source Files\Resource\cg</Filter>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_fill3d_f.pssl">

-      <Filter>Source Files\Resource\pssl</Filter>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_fill3d_v.pssl">

-      <Filter>Source Files\Resource\pssl</Filter>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_fill3d_f.cg">

-      <Filter>Source Files\Resource\cg</Filter>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_fill3d_v.cg">

-      <Filter>Source Files\Resource\cg</Filter>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_wireframe_f.pssl">

-      <Filter>Source Files\Resource\pssl</Filter>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_wireframe_v.pssl">

-      <Filter>Source Files\Resource\pssl</Filter>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_wireframe_f.cg">

-      <Filter>Source Files\Resource\cg</Filter>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_wireframe_v.cg">

-      <Filter>Source Files\Resource\cg</Filter>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_sprite2d_ycbcr_f.pssl">

-      <Filter>Source Files\Resource\pssl</Filter>

-    </CustomBuild>

-    <CustomBuild Include="resource\sampleutil_sprite2d_ycbcr_v.pssl">

-      <Filter>Source Files\Resource\pssl</Filter>

-    </CustomBuild>

-  </ItemGroup>

-  <ItemGroup>

-    <None Include="resource\vsoutput.hs">

-      <Filter>Source Files\Resource</Filter>

-    </None>

-  </ItemGroup>

-  <ItemGroup>

-    <ResourceCompile Include="resource\libSceSampleUtil.rc">

-      <Filter>Source Files\Resource</Filter>

-    </ResourceCompile>

-  </ItemGroup>

-</Project>
\ No newline at end of file
diff --git a/src/third_party/libvpx_gpu/vp9-dec-test/PS4/common/source/sampleutil/libSceSampleUtil.vcxproj.user b/src/third_party/libvpx_gpu/vp9-dec-test/PS4/common/source/sampleutil/libSceSampleUtil.vcxproj.user
deleted file mode 100644
index 695b5c7..0000000
--- a/src/third_party/libvpx_gpu/vp9-dec-test/PS4/common/source/sampleutil/libSceSampleUtil.vcxproj.user
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>

-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

-</Project>
\ No newline at end of file
diff --git a/src/third_party/libvpx_gpu/vp9-dec-test/PS4/dbg_font/dbg_font.vcxproj b/src/third_party/libvpx_gpu/vp9-dec-test/PS4/dbg_font/dbg_font.vcxproj
deleted file mode 100644
index 68ff2dc..0000000
--- a/src/third_party/libvpx_gpu/vp9-dec-test/PS4/dbg_font/dbg_font.vcxproj
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>

-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

-  <ItemGroup Label="ProjectConfigurations">

-    <ProjectConfiguration Include="Debug|ORBIS">

-      <Configuration>Debug</Configuration>

-      <Platform>ORBIS</Platform>

-    </ProjectConfiguration>

-    <ProjectConfiguration Include="Release|ORBIS">

-      <Configuration>Release</Configuration>

-      <Platform>ORBIS</Platform>

-    </ProjectConfiguration>

-  </ItemGroup>

-  <PropertyGroup Label="Globals">

-    <ProjectName>_dbg_font</ProjectName>

-    <ProjectGuid>{43565ad8-688c-4451-a81f-2aba8e957753}</ProjectGuid>

-    <RootNamespace>dkdev</RootNamespace>

-    <Keyword>Win32Proj</Keyword>

-    <GnmProjectType>SampleLib</GnmProjectType>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'" Label="Configuration">

-    <ConfigurationType>StaticLibrary</ConfigurationType>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'" Label="Configuration">

-    <ConfigurationType>StaticLibrary</ConfigurationType>

-  </PropertyGroup>

-  <ImportGroup Label="PropertySheets">

-    <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />

-    <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />

-    <Import Project="$(SolutionDir)\SceGnm.props" Condition="Exists('$(SolutionDir)\SceGnm.props')" />

-    <Import Project="$(SCE_ORBIS_SDK_DIR)\host_tools\msbuild\SceGnm.props" Condition="!Exists('$(SolutionDir)\SceGnm.props')" />

-  </ImportGroup>

-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'" Label="PropertySheets">

-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

-  </ImportGroup>

-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'" Label="PropertySheets">

-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

-  </ImportGroup>

-  <PropertyGroup Label="UserMacros" />

-  <PropertyGroup>

-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>

-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">libSceDbgFont_debug</TargetName>

-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">libSceDbgFont</TargetName>

-  </PropertyGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">

-    <ClCompile>

-      <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <UseFullPaths>true</UseFullPaths>

-      <ProgramDataBaseFileName>$(OutDir)\$(TargetName)-vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>

-    </ClCompile>

-    <Lib />

-  </ItemDefinitionGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">

-    <ClCompile>

-      <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <UseFullPaths>true</UseFullPaths>

-      <ProgramDataBaseFileName>$(OutDir)\$(TargetName)-vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>

-    </ClCompile>

-    <Lib />

-  </ItemDefinitionGroup>

-  <ItemGroup>

-    <ClCompile Include="dbg_font.cpp" />

-  </ItemGroup>

-  <ItemGroup>

-    <ClInclude Include="dbg_font.h" />

-  </ItemGroup>

-  <ItemGroup>

-    <Compile_PSSL_To_Header Include="dbg_font_printf_c.pssl" />

-    <Compile_PSSL_To_Header Include="dbg_font_render_c.pssl" />

-    <Compile_PSSL_To_Header Include="dbg_font_render_p.pssl" />

-  </ItemGroup>

-  <ItemGroup>

-    <None Include="dbg_font_render.hs" />

-  </ItemGroup>

-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

-  <Import Project="$(SolutionDir)\SceGnm.targets" Condition="Exists('$(SolutionDir)\SceGnm.targets')" />

-  <Import Project="$(SCE_ORBIS_SDK_DIR)\host_tools\msbuild\SceGnm.targets" Condition="!Exists('$(SolutionDir)\SceGnm.targets')" />

-</Project>
\ No newline at end of file
diff --git a/src/third_party/libvpx_gpu/vp9-dec-test/PS4/framework/framework.vcxproj b/src/third_party/libvpx_gpu/vp9-dec-test/PS4/framework/framework.vcxproj
deleted file mode 100644
index 27927f1..0000000
--- a/src/third_party/libvpx_gpu/vp9-dec-test/PS4/framework/framework.vcxproj
+++ /dev/null
@@ -1,98 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>

-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

-  <ItemGroup Label="ProjectConfigurations">

-    <ProjectConfiguration Include="Debug|ORBIS">

-      <Configuration>Debug</Configuration>

-      <Platform>ORBIS</Platform>

-    </ProjectConfiguration>

-    <ProjectConfiguration Include="Release|ORBIS">

-      <Configuration>Release</Configuration>

-      <Platform>ORBIS</Platform>

-    </ProjectConfiguration>

-  </ItemGroup>

-  <PropertyGroup Label="Globals">

-    <ProjectName>_framework</ProjectName>

-    <ProjectGuid>{F950CC65-80EF-4B1F-86A3-2B87B3F23C96}</ProjectGuid>

-    <RootNamespace>dkdev</RootNamespace>

-    <Keyword>Win32Proj</Keyword>

-    <GnmProjectType>SampleLib</GnmProjectType>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Platform)'=='ORBIS'" Label="Configuration">

-    <ConfigurationType>StaticLibrary</ConfigurationType>

-  </PropertyGroup>

-  <ImportGroup Label="PropertySheets">

-    <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />

-    <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />

-    <Import Project="$(SolutionDir)\SceGnm.props" Condition="Exists('$(SolutionDir)\SceGnm.props')" />

-    <Import Project="$(SCE_ORBIS_SDK_DIR)\host_tools\msbuild\SceGnm.props" Condition="!Exists('$(SolutionDir)\SceGnm.props')" />

-  </ImportGroup>

-  <ImportGroup Label="ExtensionSettings" />

-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'" Label="PropertySheets">

-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

-  </ImportGroup>

-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'" Label="PropertySheets">

-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

-  </ImportGroup>

-  <PropertyGroup Label="UserMacros" />

-  <PropertyGroup>

-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>

-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">framework_debug</TargetName>

-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">framework</TargetName>

-  </PropertyGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">

-    <ClCompile>

-      <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <UseFullPaths>true</UseFullPaths>

-      <ProgramDataBaseFileName>$(OutDir)\$(TargetName)-vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>

-    </ClCompile>

-    <Lib />

-  </ItemDefinitionGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">

-    <ClCompile>

-      <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <UseFullPaths>true</UseFullPaths>

-      <ProgramDataBaseFileName>$(OutDir)\$(TargetName)-vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>

-    </ClCompile>

-    <Lib />

-  </ItemDefinitionGroup>

-  <ItemGroup>

-    <ClCompile Include="controller.cpp" />

-    <ClCompile Include="debug_objects.cpp" />

-    <ClCompile Include="eopeventqueue.cpp" />

-    <ClCompile Include="frame.cpp" />

-    <ClCompile Include="framework.cpp" />

-    <ClCompile Include="gnf_loader.cpp" />

-    <ClCompile Include="noise_prep.cpp" />

-    <ClCompile Include="sample_framework.cpp" />

-    <ClCompile Include="sample_framework_menu.cpp" />

-    <ClCompile Include="simple_mesh.cpp" />

-    <ClCompile Include="thread.cpp" />

-  </ItemGroup>

-  <ItemGroup>

-    <CustomBuildStep Include="framework.h" />

-  </ItemGroup>

-  <ItemGroup>

-    <ClInclude Include="configdata.h" />

-    <ClInclude Include="controller.h" />

-    <ClInclude Include="debug_objects.h" />

-    <ClInclude Include="eopeventqueue.h" />

-    <ClInclude Include="frame.h" />

-    <ClInclude Include="framework.h" />

-    <ClInclude Include="gnf_loader.h" />

-    <ClInclude Include="noise_prep.h" />

-    <ClInclude Include="sample_framework.h" />

-    <ClInclude Include="sample_framework_menu.h" />

-    <ClInclude Include="simple_mesh.h" />

-    <ClInclude Include="thread.h" />

-  </ItemGroup>

-  <ItemGroup>

-    <Compile_PSSL_To_Header Include="dbg_font_repair_c.pssl" />

-    <Compile_PSSL_To_Header Include="dbg_font_timer_c.pssl" />

-    <Compile_PSSL_To_Header Include="dbg_font_unsigned_c.pssl" />

-    <Compile_PSSL_To_Header Include="debug_vertex_p.pssl" />

-    <Compile_PSSL_To_Header Include="debug_vertex_vv.pssl" />

-  </ItemGroup>

-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

-  <Import Project="$(SolutionDir)\SceGnm.targets" Condition="Exists('$(SolutionDir)\SceGnm.targets')" />

-  <Import Project="$(SCE_ORBIS_SDK_DIR)\host_tools\msbuild\SceGnm.targets" Condition="!Exists('$(SolutionDir)\SceGnm.targets')" />

-</Project>
\ No newline at end of file
diff --git a/src/third_party/libvpx_gpu/vp9-dec-test/PS4/toolkit/toolkit.vcxproj b/src/third_party/libvpx_gpu/vp9-dec-test/PS4/toolkit/toolkit.vcxproj
deleted file mode 100644
index b62f72b..0000000
--- a/src/third_party/libvpx_gpu/vp9-dec-test/PS4/toolkit/toolkit.vcxproj
+++ /dev/null
@@ -1,145 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>

-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

-  <ItemGroup Label="ProjectConfigurations">

-    <ProjectConfiguration Include="Debug|ORBIS">

-      <Configuration>Debug</Configuration>

-      <Platform>ORBIS</Platform>

-    </ProjectConfiguration>

-    <ProjectConfiguration Include="Release|ORBIS">

-      <Configuration>Release</Configuration>

-      <Platform>ORBIS</Platform>

-    </ProjectConfiguration>

-  </ItemGroup>

-  <PropertyGroup Label="Globals">

-    <ProjectName>_toolkit</ProjectName>

-    <ProjectGuid>{2F4CCF89-7649-4C7F-8CBF-F976B4FBC2B6}</ProjectGuid>

-    <RootNamespace>dkdev</RootNamespace>

-    <Keyword>Win32Proj</Keyword>

-    <GnmProjectType>SampleLib</GnmProjectType>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'" Label="Configuration">

-    <ConfigurationType>StaticLibrary</ConfigurationType>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'" Label="Configuration">

-    <ConfigurationType>StaticLibrary</ConfigurationType>

-  </PropertyGroup>

-  <ImportGroup Label="PropertySheets">

-    <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />

-    <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />

-    <Import Project="$(SolutionDir)\SceGnm.props" Condition="Exists('$(SolutionDir)\SceGnm.props')" />

-    <Import Project="$(SCE_ORBIS_SDK_DIR)\host_tools\msbuild\SceGnm.props" Condition="!Exists('$(SolutionDir)\SceGnm.props')" />

-  </ImportGroup>

-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'" Label="PropertySheets">

-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

-  </ImportGroup>

-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'" Label="PropertySheets">

-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

-  </ImportGroup>

-  <PropertyGroup Label="UserMacros" />

-  <PropertyGroup>

-    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>

-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">toolkit</TargetName>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">

-    <TargetName>toolkit_debug</TargetName>

-  </PropertyGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">

-    <ClCompile>

-      <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <UseFullPaths>true</UseFullPaths>

-      <ProgramDataBaseFileName>$(OutDir)\$(TargetName)-vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>

-    </ClCompile>

-    <Lib />

-  </ItemDefinitionGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">

-    <ClCompile>

-      <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <UseFullPaths>true</UseFullPaths>

-      <ProgramDataBaseFileName>$(OutDir)\$(TargetName)-vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>

-    </ClCompile>

-    <Lib />

-  </ItemDefinitionGroup>

-  <ItemGroup>

-    <ClCompile Include="allocators.cpp" />

-    <ClCompile Include="dataformat_interpreter.cpp" />

-    <ClCompile Include="dataformat_tests.cpp" />

-    <ClCompile Include="deallocator.cpp" />

-    <ClCompile Include="embedded_shader.cpp" />

-    <ClCompile Include="floating_point.cpp" />

-    <ClCompile Include="region_allocator.cpp" />

-    <ClCompile Include="shader_loader.cpp" />

-    <ClCompile Include="stack_allocator.cpp" />

-    <ClCompile Include="toolkit.cpp" />

-  </ItemGroup>

-  <ItemGroup>

-    <ClInclude Include="allocator.h" />

-    <ClInclude Include="allocators.h" />

-    <ClInclude Include="dataformat_interpreter.h" />

-    <ClInclude Include="dataformat_tests.h" />

-    <ClInclude Include="deallocator.h" />

-    <ClInclude Include="embedded_shader.h" />

-    <ClInclude Include="floating_point.h" />

-    <ClInclude Include="geommath\matrix4unaligned.h" />

-    <ClInclude Include="geommath\vector2unaligned.h" />

-    <ClInclude Include="geommath\vector3unaligned.h" />

-    <ClInclude Include="geommath\vector4unaligned.h" />

-    <ClInclude Include="geommath\geommath.h" />

-    <ClInclude Include="memory.h" />

-    <ClInclude Include="region_allocator.h" />

-    <ClInclude Include="shader_common\illum.hs" />

-    <ClInclude Include="shader_common\noise.hs" />

-    <ClInclude Include="shader_common\shader_base.h" />

-    <ClInclude Include="shader_common\vsoutput_common.hs" />

-    <ClInclude Include="shader_loader.h" />

-    <ClInclude Include="stack_allocator.h" />

-    <CustomBuildStep Include="toolkit.h" />

-  </ItemGroup>

-  <ItemGroup>

-    <Compile_PSSL_To_Header Include="shader_common\copytexture2d_p.pssl" />

-    <Compile_PSSL_To_Header Include="shader_common\cs_clearbuffer_c.pssl" />

-    <Compile_PSSL_To_Header Include="shader_common\cs_cleartexture1d_c.pssl" />

-    <Compile_PSSL_To_Header Include="shader_common\cs_cleartexture2d_c.pssl" />

-    <Compile_PSSL_To_Header Include="shader_common\cs_cleartexture3d_c.pssl" />

-    <Compile_PSSL_To_Header Include="shader_common\cs_copybuffer_c.pssl">

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="shader_common\cs_copyrawtexture1d_c.pssl">

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="shader_common\cs_copyrawtexture2d_c.pssl">

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="shader_common\cs_copyrawtexture3d_c.pssl">

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="shader_common\cs_copytexture1d_c.pssl">

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="shader_common\cs_copytexture2d_c.pssl">

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="shader_common\cs_copytexture3d_c.pssl">

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-    <Compile_PSSL_To_Header Include="shader_common\copydepth_p.pssl">

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-    <PSSL Include="shader_common\pixbg_p.pssl" />

-    <Compile_PSSL_To_Header Include="shader_common\cs_set_uint_c.pssl" />

-    <Compile_PSSL_To_Header Include="shader_common\cs_set_uint_fast_c.pssl" />

-    <Compile_PSSL_To_Header Include="shader_common\cs_test_buffer_read_c.pssl" />

-    <Compile_PSSL_To_Header Include="shader_common\cs_test_texture_read_c.pssl" />

-    <Compile_PSSL_To_Header Include="shader_common\pix_clear_p.pssl">

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-    <PSSL Include="shader_common\vexbg_vv.pssl" />

-    <Compile_PSSL_To_Header Include="shader_common\pix_generateMipMaps_3d_p.pssl" />

-    <Compile_PSSL_To_Header Include="shader_common\pix_generateMipMaps_2d_p.pssl" />

-    <Compile_PSSL_To_Header Include="shader_common\vex_clear_vv.pssl">

-      <FileType>Document</FileType>

-    </Compile_PSSL_To_Header>

-  </ItemGroup>

-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

-  <Import Project="$(SolutionDir)\SceGnm.targets" Condition="Exists('$(SolutionDir)\SceGnm.targets')" />

-  <Import Project="$(SCE_ORBIS_SDK_DIR)\host_tools\msbuild\SceGnm.targets" Condition="!Exists('$(SolutionDir)\SceGnm.targets')" />

-</Project>
\ No newline at end of file
diff --git a/src/third_party/libvpx_gpu/vp9-dec-test/google-tests/build/test-vp9-dec.vcxproj b/src/third_party/libvpx_gpu/vp9-dec-test/google-tests/build/test-vp9-dec.vcxproj
deleted file mode 100644
index f414575..0000000
--- a/src/third_party/libvpx_gpu/vp9-dec-test/google-tests/build/test-vp9-dec.vcxproj
+++ /dev/null
@@ -1,276 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>

-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

-  <ItemGroup Label="ProjectConfigurations">

-    <ProjectConfiguration Include="Debug|ORBIS">

-      <Configuration>Debug</Configuration>

-      <Platform>ORBIS</Platform>

-    </ProjectConfiguration>

-    <ProjectConfiguration Include="Debug|Win32">

-      <Configuration>Debug</Configuration>

-      <Platform>Win32</Platform>

-    </ProjectConfiguration>

-    <ProjectConfiguration Include="Debug|x64">

-      <Configuration>Debug</Configuration>

-      <Platform>x64</Platform>

-    </ProjectConfiguration>

-    <ProjectConfiguration Include="Release|ORBIS">

-      <Configuration>Release</Configuration>

-      <Platform>ORBIS</Platform>

-    </ProjectConfiguration>

-    <ProjectConfiguration Include="Release|Win32">

-      <Configuration>Release</Configuration>

-      <Platform>Win32</Platform>

-    </ProjectConfiguration>

-    <ProjectConfiguration Include="Release|x64">

-      <Configuration>Release</Configuration>

-      <Platform>x64</Platform>

-    </ProjectConfiguration>

-  </ItemGroup>

-  <PropertyGroup Label="Globals">

-    <ProjectGuid>{020D5EB9-D317-46FE-9CEC-557444DCDC6E}</ProjectGuid>

-    <Keyword>Win32Proj</Keyword>

-    <RootNamespace>testvp9dec</RootNamespace>

-    <ProjectName>google-tests</ProjectName>

-  </PropertyGroup>

-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">

-    <ConfigurationType>Application</ConfigurationType>

-    <UseDebugLibraries>true</UseDebugLibraries>

-    <CharacterSet>Unicode</CharacterSet>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'" Label="Configuration">

-    <ConfigurationType>Application</ConfigurationType>

-    <UseDebugLibraries>true</UseDebugLibraries>

-    <CharacterSet>Unicode</CharacterSet>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">

-    <ConfigurationType>Application</ConfigurationType>

-    <UseDebugLibraries>true</UseDebugLibraries>

-    <CharacterSet>Unicode</CharacterSet>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">

-    <ConfigurationType>Application</ConfigurationType>

-    <UseDebugLibraries>false</UseDebugLibraries>

-    <WholeProgramOptimization>true</WholeProgramOptimization>

-    <CharacterSet>Unicode</CharacterSet>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'" Label="Configuration">

-    <ConfigurationType>Application</ConfigurationType>

-    <UseDebugLibraries>false</UseDebugLibraries>

-    <WholeProgramOptimization>true</WholeProgramOptimization>

-    <CharacterSet>Unicode</CharacterSet>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">

-    <ConfigurationType>Application</ConfigurationType>

-    <UseDebugLibraries>false</UseDebugLibraries>

-    <WholeProgramOptimization>true</WholeProgramOptimization>

-    <CharacterSet>Unicode</CharacterSet>

-  </PropertyGroup>

-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />

-  <ImportGroup Label="ExtensionSettings">

-  </ImportGroup>

-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">

-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

-  </ImportGroup>

-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'" Label="PropertySheets">

-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

-  </ImportGroup>

-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">

-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

-  </ImportGroup>

-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">

-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

-  </ImportGroup>

-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'" Label="PropertySheets">

-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

-  </ImportGroup>

-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">

-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

-  </ImportGroup>

-  <PropertyGroup Label="UserMacros" />

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">

-    <LinkIncremental>true</LinkIncremental>

-    <OutDir>$(SolutionDir)..\bin\msvs10\$(Configuration)\win$(PlatformArchitecture)\</OutDir>

-    <IntDir>$(SolutionDir)..\obj\msvs10\$(ProjectName)\$(Configuration)\win$(PlatformArchitecture)\</IntDir>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">

-    <LinkIncremental>true</LinkIncremental>

-    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>

-    <IntDir>$(SolutionDir)obj\$(ProjectName)\$(Configuration)\</IntDir>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">

-    <LinkIncremental>true</LinkIncremental>

-    <OutDir>$(SolutionDir)..\bin\msvs10\$(Configuration)\win$(PlatformArchitecture)\</OutDir>

-    <IntDir>$(SolutionDir)..\obj\msvs10\$(ProjectName)\$(Configuration)\win$(PlatformArchitecture)\</IntDir>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">

-    <LinkIncremental>false</LinkIncremental>

-    <OutDir>$(SolutionDir)..\bin\msvs10\$(Configuration)\win$(PlatformArchitecture)\</OutDir>

-    <IntDir>$(SolutionDir)..\obj\msvs10\$(ProjectName)\$(Configuration)\win$(PlatformArchitecture)\</IntDir>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">

-    <LinkIncremental>false</LinkIncremental>

-    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>

-    <IntDir>$(SolutionDir)obj\$(ProjectName)\$(Configuration)\</IntDir>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">

-    <LinkIncremental>false</LinkIncremental>

-    <OutDir>$(SolutionDir)..\bin\msvs10\$(Configuration)\win$(PlatformArchitecture)\</OutDir>

-    <IntDir>$(SolutionDir)..\obj\msvs10\$(ProjectName)\$(Configuration)\win$(PlatformArchitecture)\</IntDir>

-  </PropertyGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">

-    <ClCompile>

-      <PrecompiledHeader>NotUsing</PrecompiledHeader>

-      <WarningLevel>Level3</WarningLevel>

-      <Optimization>Disabled</Optimization>

-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <AdditionalIncludeDirectories>$(SolutionDir)..\vp9-dec-core\build\build_$(Platform);$(SolutionDir)..\vp9-dec-core;$(SolutionDir)/../../Thirdparty/amd/mcl/1.6/amdmcl/inc</AdditionalIncludeDirectories>

-    </ClCompile>

-    <Link>

-      <SubSystem>Console</SubSystem>

-      <GenerateDebugInformation>true</GenerateDebugInformation>

-      <AdditionalLibraryDirectories>$(SolutionDir)..\lib\msvs10\$(Configuration)\win$(PlatformArchitecture)</AdditionalLibraryDirectories>

-      <AdditionalDependencies>vp9-dec-core$(PlatformArchitecture).lib;%(AdditionalDependencies)</AdditionalDependencies>

-    </Link>

-  </ItemDefinitionGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">

-    <ClCompile>

-      <PrecompiledHeader>NotUsing</PrecompiledHeader>

-      <WarningLevel>Level3</WarningLevel>

-      <Optimization>Disabled</Optimization>

-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <AdditionalIncludeDirectories>$(SolutionDir)vp9-dec-core\build;$(SolutionDir)vp9-dec-core;$(SolutionDir)/../../Thirdparty/amd/mcl/1.6/amdmcl/inc;../../libwebm</AdditionalIncludeDirectories>

-      <GenerateDebugInformation>true</GenerateDebugInformation>

-      <OptimizationLevel>Level0</OptimizationLevel>

-    </ClCompile>

-    <Link>

-      <SubSystem>Console</SubSystem>

-      <GenerateDebugInformation>true</GenerateDebugInformation>

-      <AdditionalLibraryDirectories>$(SolutionDir)lib\$(Configuration);$(SolutionDir)ORBIS_Debug</AdditionalLibraryDirectories>

-      <AdditionalDependencies>vp9-dec-core$(PlatformArchitecture).a;libSceUserService_stub_weak.a;libScePerf_stub_weak.a;libSceGnmDriver_stub_weak.a;libScePm4Dump.a;libSceGnf.a;libSceShaderBinary.a;libSceGpuAddress.a;libSceGnmx_debug.a;libSceGnm_debug.a;libScePosix_stub_weak.a;libScePad_stub_weak.a;libSceVideoOut_stub_weak.a;%(AdditionalDependencies)</AdditionalDependencies>

-    </Link>

-  </ItemDefinitionGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">

-    <ClCompile>

-      <PrecompiledHeader>NotUsing</PrecompiledHeader>

-      <WarningLevel>Level3</WarningLevel>

-      <Optimization>Disabled</Optimization>

-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <AdditionalIncludeDirectories>$(SolutionDir)..\vp9-dec-core\build\build_$(Platform);$(SolutionDir)..\vp9-dec-core;$(SolutionDir)/../../Thirdparty/amd/mcl/1.6/amdmcl/inc</AdditionalIncludeDirectories>

-    </ClCompile>

-    <Link>

-      <SubSystem>Console</SubSystem>

-      <GenerateDebugInformation>true</GenerateDebugInformation>

-      <AdditionalLibraryDirectories>$(SolutionDir)..\lib\msvs10\$(Configuration)\win$(PlatformArchitecture)</AdditionalLibraryDirectories>

-      <AdditionalDependencies>vp9-dec-core$(PlatformArchitecture).lib;%(AdditionalDependencies)</AdditionalDependencies>

-    </Link>

-  </ItemDefinitionGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">

-    <ClCompile>

-      <WarningLevel>Level3</WarningLevel>

-      <PrecompiledHeader>

-      </PrecompiledHeader>

-      <Optimization>MaxSpeed</Optimization>

-      <FunctionLevelLinking>true</FunctionLevelLinking>

-      <IntrinsicFunctions>true</IntrinsicFunctions>

-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <AdditionalIncludeDirectories>$(SolutionDir)..\vp9-dec-core\build\build_$(Platform);$(SolutionDir)..\vp9-dec-core;$(SolutionDir)/../../Thirdparty/amd/mcl/1.6/amdmcl/inc</AdditionalIncludeDirectories>

-    </ClCompile>

-    <Link>

-      <SubSystem>Console</SubSystem>

-      <GenerateDebugInformation>true</GenerateDebugInformation>

-      <EnableCOMDATFolding>true</EnableCOMDATFolding>

-      <OptimizeReferences>true</OptimizeReferences>

-      <AdditionalLibraryDirectories>$(SolutionDir)..\lib\msvs10\$(Configuration)\win$(PlatformArchitecture)</AdditionalLibraryDirectories>

-      <AdditionalDependencies>vp9-dec-core$(PlatformArchitecture).lib;%(AdditionalDependencies)</AdditionalDependencies>

-    </Link>

-  </ItemDefinitionGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">

-    <ClCompile>

-      <WarningLevel>Level3</WarningLevel>

-      <PrecompiledHeader>

-      </PrecompiledHeader>

-      <Optimization>MaxSpeed</Optimization>

-      <FunctionLevelLinking>true</FunctionLevelLinking>

-      <IntrinsicFunctions>true</IntrinsicFunctions>

-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <AdditionalIncludeDirectories>$(SolutionDir)vp9-dec-core\build;$(SolutionDir)vp9-dec-core;$(SolutionDir)/../../Thirdparty/amd/mcl/1.6/amdmcl/inc;../../libwebm</AdditionalIncludeDirectories>

-      <OptimizationLevel>Level2</OptimizationLevel>

-      <GenerateDebugInformation>true</GenerateDebugInformation>

-    </ClCompile>

-    <Link>

-      <SubSystem>Console</SubSystem>

-      <GenerateDebugInformation>true</GenerateDebugInformation>

-      <EnableCOMDATFolding>true</EnableCOMDATFolding>

-      <OptimizeReferences>true</OptimizeReferences>

-      <AdditionalLibraryDirectories>$(SolutionDir)lib\$(Configuration);$(SolutionDir)ORBIS_Release</AdditionalLibraryDirectories>

-      <AdditionalDependencies>vp9-dec-core$(PlatformArchitecture).a;libSceUserService_stub_weak.a;libScePerf_stub_weak.a;libSceGnmDriver_stub_weak.a;libScePm4Dump.a;libSceGnf.a;libSceShaderBinary.a;libSceGpuAddress.a;libSceGnmx.a;libSceGnm.a;libScePosix_stub_weak.a;libScePad_stub_weak.a;libSceVideoOut_stub_weak.a;%(AdditionalDependencies)</AdditionalDependencies>

-    </Link>

-  </ItemDefinitionGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">

-    <ClCompile>

-      <WarningLevel>Level3</WarningLevel>

-      <PrecompiledHeader>

-      </PrecompiledHeader>

-      <Optimization>MaxSpeed</Optimization>

-      <FunctionLevelLinking>true</FunctionLevelLinking>

-      <IntrinsicFunctions>true</IntrinsicFunctions>

-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <AdditionalIncludeDirectories>$(SolutionDir)..\vp9-dec-core\build\build_$(Platform);$(SolutionDir)..\vp9-dec-core;$(SolutionDir)/../../Thirdparty/amd/mcl/1.6/amdmcl/inc</AdditionalIncludeDirectories>

-    </ClCompile>

-    <Link>

-      <SubSystem>Console</SubSystem>

-      <GenerateDebugInformation>true</GenerateDebugInformation>

-      <EnableCOMDATFolding>true</EnableCOMDATFolding>

-      <OptimizeReferences>true</OptimizeReferences>

-      <AdditionalLibraryDirectories>$(SolutionDir)..\lib\msvs10\$(Configuration)\win$(PlatformArchitecture)</AdditionalLibraryDirectories>

-      <AdditionalDependencies>vp9-dec-core$(PlatformArchitecture).lib;%(AdditionalDependencies)</AdditionalDependencies>

-    </Link>

-  </ItemDefinitionGroup>

-  <ItemGroup>

-    <None Include="ReadMe.txt" />

-  </ItemGroup>

-  <ItemGroup>

-    <ClInclude Include="..\..\libwebm\mkvparser\mkvparser.h" />

-    <ClInclude Include="..\..\libwebm\mkvparser\mkvreader.h" />

-    <ClInclude Include="..\..\vpxdec\md5_utils.h" />

-    <ClInclude Include="..\..\vpxdec\webmdec.h" />

-    <ClInclude Include="..\gtest\gtest.h" />

-    <ClInclude Include="..\stdafx.h" />

-    <ClInclude Include="..\targetver.h" />

-    <ClInclude Include="..\tests\conformance_files.h" />

-    <ClInclude Include="..\tests\decode_test_driver.h" />

-    <ClInclude Include="..\tests\ivf_video_source.h" />

-    <ClInclude Include="..\tests\md5_helper.h" />

-    <ClInclude Include="..\tests\test_vectors.h" />

-    <ClInclude Include="..\tests\video_source.h" />

-    <ClInclude Include="..\tests\webm_video_source.h" />

-  </ItemGroup>

-  <ItemGroup>

-    <ClCompile Include="..\..\libSimplePlayer\memory_helper.cpp" />

-    <ClCompile Include="..\..\libwebm\mkvparser\mkvparser.cc" />

-    <ClCompile Include="..\..\libwebm\mkvparser\mkvreader.cc" />

-    <ClCompile Include="..\..\vpxdec\md5_utils.c" />

-    <ClCompile Include="..\..\vpxdec\user_malloc.cpp" />

-    <ClCompile Include="..\..\vpxdec\webmdec.cc" />

-    <ClCompile Include="..\gtest\gtest-all.cc" />

-    <ClCompile Include="..\stdafx.cpp" />

-    <ClCompile Include="..\test-vp9-dec.cpp" />

-    <ClCompile Include="..\tests\frame_cb_test.cpp" />

-    <ClCompile Include="..\tests\decode_api_test.cc" />

-    <ClCompile Include="..\tests\decode_test_driver.cc" />

-    <ClCompile Include="..\tests\external_frame_buffer_test.cc" />

-    <ClCompile Include="..\tests\invalid_file_test.cc" />

-    <ClCompile Include="..\tests\test_conformance.cc" />

-    <ClCompile Include="..\tests\test_vectors.cc" />

-    <ClCompile Include="..\tests\test_vector_test.cc" />

-    <ClCompile Include="..\tests\user_priv_test.cc" />

-    <ClCompile Include="..\tests\vp9_decrypt_test.cc" />

-    <ClCompile Include="..\tests\vp9_frame_parallel_test.cc" />

-    <ClCompile Include="..\tests\vp9_skip_loopfilter_test.cc" />

-    <ClCompile Include="..\tests\vp9_thread_test.cc" />

-  </ItemGroup>

-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

-  <ImportGroup Label="ExtensionTargets">

-  </ImportGroup>

-</Project>
\ No newline at end of file
diff --git a/src/third_party/libvpx_gpu/vp9-dec-test/google-tests/build/test-vp9-dec.vcxproj.filters b/src/third_party/libvpx_gpu/vp9-dec-test/google-tests/build/test-vp9-dec.vcxproj.filters
deleted file mode 100644
index 462392e..0000000
--- a/src/third_party/libvpx_gpu/vp9-dec-test/google-tests/build/test-vp9-dec.vcxproj.filters
+++ /dev/null
@@ -1,138 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>

-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

-  <ItemGroup>

-    <Filter Include="Source Files">

-      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>

-      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>

-    </Filter>

-    <Filter Include="Header Files">

-      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>

-      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>

-    </Filter>

-    <Filter Include="Resource Files">

-      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>

-      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>

-    </Filter>

-    <Filter Include="Source Files\gtest">

-      <UniqueIdentifier>{4f095190-995f-4343-a0ac-89cf69fbd8f1}</UniqueIdentifier>

-    </Filter>

-    <Filter Include="Source Files\tests">

-      <UniqueIdentifier>{4e2171ea-d54f-478c-b71d-61374f0b6a6a}</UniqueIdentifier>

-    </Filter>

-  </ItemGroup>

-  <ItemGroup>

-    <None Include="ReadMe.txt" />

-  </ItemGroup>

-  <ItemGroup>

-    <ClInclude Include="..\stdafx.h">

-      <Filter>Header Files</Filter>

-    </ClInclude>

-    <ClInclude Include="..\targetver.h">

-      <Filter>Header Files</Filter>

-    </ClInclude>

-    <ClInclude Include="..\gtest\gtest.h">

-      <Filter>Source Files\gtest</Filter>

-    </ClInclude>

-    <ClInclude Include="..\tests\decode_test_driver.h">

-      <Filter>Source Files\tests</Filter>

-    </ClInclude>

-    <ClInclude Include="..\tests\md5_helper.h">

-      <Filter>Source Files\tests</Filter>

-    </ClInclude>

-    <ClInclude Include="..\tests\webm_video_source.h">

-      <Filter>Source Files\tests</Filter>

-    </ClInclude>

-    <ClInclude Include="..\tests\test_vectors.h">

-      <Filter>Source Files\tests</Filter>

-    </ClInclude>

-    <ClInclude Include="..\tests\video_source.h">

-      <Filter>Source Files\tests</Filter>

-    </ClInclude>

-    <ClInclude Include="..\..\vpxdec\webmdec.h">

-      <Filter>Source Files\tests</Filter>

-    </ClInclude>

-    <ClInclude Include="..\tests\ivf_video_source.h">

-      <Filter>Source Files\tests</Filter>

-    </ClInclude>

-    <ClInclude Include="..\tests\conformance_files.h">

-      <Filter>Source Files\tests</Filter>

-    </ClInclude>

-    <ClInclude Include="..\..\vpxdec\md5_utils.h">

-      <Filter>Source Files\tests</Filter>

-    </ClInclude>

-    <ClInclude Include="..\..\libwebm\mkvparser\mkvparser.h">

-      <Filter>Source Files\tests</Filter>

-    </ClInclude>

-    <ClInclude Include="..\..\libwebm\mkvparser\mkvreader.h">

-      <Filter>Source Files\tests</Filter>

-    </ClInclude>

-  </ItemGroup>

-  <ItemGroup>

-    <ClCompile Include="..\stdafx.cpp">

-      <Filter>Source Files</Filter>

-    </ClCompile>

-    <ClCompile Include="..\test-vp9-dec.cpp">

-      <Filter>Source Files</Filter>

-    </ClCompile>

-    <ClCompile Include="..\tests\user_priv_test.cc">

-      <Filter>Source Files\tests</Filter>

-    </ClCompile>

-    <ClCompile Include="..\gtest\gtest-all.cc">

-      <Filter>Source Files\gtest</Filter>

-    </ClCompile>

-    <ClCompile Include="..\tests\decode_test_driver.cc">

-      <Filter>Source Files\tests</Filter>

-    </ClCompile>

-    <ClCompile Include="..\tests\invalid_file_test.cc">

-      <Filter>Source Files\tests</Filter>

-    </ClCompile>

-    <ClCompile Include="..\tests\vp9_frame_parallel_test.cc">

-      <Filter>Source Files\tests</Filter>

-    </ClCompile>

-    <ClCompile Include="..\tests\vp9_thread_test.cc">

-      <Filter>Source Files\tests</Filter>

-    </ClCompile>

-    <ClCompile Include="..\tests\test_vector_test.cc">

-      <Filter>Source Files\tests</Filter>

-    </ClCompile>

-    <ClCompile Include="..\tests\test_vectors.cc">

-      <Filter>Source Files\tests</Filter>

-    </ClCompile>

-    <ClCompile Include="..\tests\vp9_skip_loopfilter_test.cc">

-      <Filter>Source Files\tests</Filter>

-    </ClCompile>

-    <ClCompile Include="..\tests\vp9_decrypt_test.cc">

-      <Filter>Source Files\tests</Filter>

-    </ClCompile>

-    <ClCompile Include="..\tests\decode_api_test.cc">

-      <Filter>Source Files\tests</Filter>

-    </ClCompile>

-    <ClCompile Include="..\..\vpxdec\user_malloc.cpp">

-      <Filter>Source Files\tests</Filter>

-    </ClCompile>

-    <ClCompile Include="..\..\vpxdec\webmdec.cc">

-      <Filter>Source Files\tests</Filter>

-    </ClCompile>

-    <ClCompile Include="..\..\vpxdec\md5_utils.c">

-      <Filter>Source Files\tests</Filter>

-    </ClCompile>

-    <ClCompile Include="..\tests\external_frame_buffer_test.cc">

-      <Filter>Source Files\tests</Filter>

-    </ClCompile>

-    <ClCompile Include="..\..\libSimplePlayer\memory_helper.cpp">

-      <Filter>Source Files\tests</Filter>

-    </ClCompile>

-    <ClCompile Include="..\tests\frame_cb_test.cpp">

-      <Filter>Source Files\tests</Filter>

-    </ClCompile>

-    <ClCompile Include="..\tests\test_conformance.cc">

-      <Filter>Source Files\tests</Filter>

-    </ClCompile>

-    <ClCompile Include="..\..\libwebm\mkvparser\mkvparser.cc">

-      <Filter>Source Files\tests</Filter>

-    </ClCompile>

-    <ClCompile Include="..\..\libwebm\mkvparser\mkvreader.cc">

-      <Filter>Source Files\tests</Filter>

-    </ClCompile>

-  </ItemGroup>

-</Project>
\ No newline at end of file
diff --git a/src/third_party/libvpx_gpu/vp9-dec-test/libSimplePlayer/libSimplePlayer.vcxproj b/src/third_party/libvpx_gpu/vp9-dec-test/libSimplePlayer/libSimplePlayer.vcxproj
deleted file mode 100644
index 8284322..0000000
--- a/src/third_party/libvpx_gpu/vp9-dec-test/libSimplePlayer/libSimplePlayer.vcxproj
+++ /dev/null
@@ -1,155 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>

-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

-  <ItemGroup Label="ProjectConfigurations">

-    <ProjectConfiguration Include="Debug|ORBIS">

-      <Configuration>Debug</Configuration>

-      <Platform>ORBIS</Platform>

-    </ProjectConfiguration>

-    <ProjectConfiguration Include="Release|ORBIS">

-      <Configuration>Release</Configuration>

-      <Platform>ORBIS</Platform>

-    </ProjectConfiguration>

-  </ItemGroup>

-  <PropertyGroup Label="Globals">

-    <VCTargetsPath Condition="'$(VCTargetsPath12)' != '' and '$(VSVersion)' == '' and '$(VisualStudioVersion)' == ''">$(VCTargetsPath12)</VCTargetsPath>

-    <ProjectGuid>{901DB192-225E-48D3-8C4D-015A4DE1F6B4}</ProjectGuid>

-    <ProjectName>luxSimplePlayer</ProjectName>

-  </PropertyGroup>

-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'" Label="Configuration">

-    <ConfigurationType>Application</ConfigurationType>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'" Label="Configuration">

-    <ConfigurationType>Application</ConfigurationType>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">

-    <PlatformToolset>v120</PlatformToolset>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">

-    <PlatformToolset>v120</PlatformToolset>

-  </PropertyGroup>

-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />

-  <PropertyGroup Condition="'$(DebuggerFlavor)'=='ORBISDebugger'" Label="OverrideDebuggerDefaults">

-    <!--LocalDebuggerCommand>$(TargetPath)</LocalDebuggerCommand-->

-    <!--LocalDebuggerCommandArguments></LocalDebuggerCommandArguments-->

-    <!--LocalDebuggerTarget></LocalDebuggerTarget-->

-    <!--LocalDebuggerWorkingDirectory>$(ProjectDir)</LocalDebuggerWorkingDirectory-->

-    <!--LocalRunCommandLine></LocalRunCommandLine-->

-  </PropertyGroup>

-  <ImportGroup Label="ExtensionSettings">

-    <Import Project="$(VCTargetsPath)\BuildCustomizations\OrbisWavePsslc.props" />

-    <Import Project="$(VCTargetsPath)\BuildCustomizations\SCU.props" />

-  </ImportGroup>

-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">

-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

-  </ImportGroup>

-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">

-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

-  </ImportGroup>

-  <PropertyGroup Label="UserMacros" />

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">

-    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>

-    <IntDir>$(SolutionDir)obj\$(ProjectName)\$(Configuration)\</IntDir>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">

-    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>

-    <IntDir>$(SolutionDir)obj\$(ProjectName)\$(Configuration)\</IntDir>

-  </PropertyGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">

-    <ClCompile>

-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <GenerateDebugInformation>true</GenerateDebugInformation>

-      <PrecompiledHeader>NotUsing</PrecompiledHeader>

-      <AdditionalIncludeDirectories>../PS4/;../PS4/common/include;../../vp9-dec-core;../../vp9-dec-core/build;../libwebm;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

-    </ClCompile>

-    <Link>

-      <AdditionalDependencies>-lScePosix_stub_weak;-lSceVideodec_stub_weak;libScePm4Dump.a;vp9-dec-core$(PlatformArchitecture).a;libSceGnm.a;libSceGnmx.a;libSceVideoOut_stub_weak.a;libSceGpuAddress.a;libScePad_stub_weak.a;libSceGnmDriver_stub_weak.a;libSceGnf.a;libSceShaderBinary.a</AdditionalDependencies>

-      <AdditionalLibraryDirectories>$(SolutionDir)lib\$(Configuration)</AdditionalLibraryDirectories>

-    </Link>

-    <OrbisWavePsslc>

-      <OutputFileName>$(ProjectDir)%(FileName).sb</OutputFileName>

-    </OrbisWavePsslc>

-  </ItemDefinitionGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">

-    <ClCompile>

-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <OptimizationLevel>Levels</OptimizationLevel>

-      <PrecompiledHeader>NotUsing</PrecompiledHeader>

-      <AdditionalIncludeDirectories>../PS4/;../PS4/common/include;../../vp9-dec-core;../../vp9-dec-core/build;../libwebm;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

-      <GenerateDebugInformation>true</GenerateDebugInformation>

-    </ClCompile>

-    <Link>

-      <AdditionalDependencies>-lScePosix_stub_weak;-lSceVideodec_stub_weak;libScePm4Dump.a;vp9-dec-core$(PlatformArchitecture).a;libSceGnm.a;libSceGnmx.a;libSceVideoOut_stub_weak.a;libSceGpuAddress.a;libScePad_stub_weak.a;libSceGnmDriver_stub_weak.a;libSceGnf.a;libSceShaderBinary.a</AdditionalDependencies>

-      <AdditionalLibraryDirectories>$(SolutionDir)lib\$(Configuration)</AdditionalLibraryDirectories>

-    </Link>

-  </ItemDefinitionGroup>

-  <ItemGroup>

-    <ClCompile Include="..\..\vp9-dec-core\vp9\decoder\vp9lux_linear_allocator.cpp" />

-    <ClCompile Include="..\..\vp9-dec-core\vp9\decoder\vp9lux_thread.c" />

-    <ClCompile Include="..\libwebm\common\hdr_util.cc" />

-    <ClCompile Include="..\libwebm\mkvmuxer\mkvmuxer.cc" />

-    <ClCompile Include="..\libwebm\mkvmuxer\mkvmuxerutil.cc" />

-    <ClCompile Include="..\libwebm\mkvmuxer\mkvwriter.cc" />

-    <ClCompile Include="..\libwebm\mkvparser\mkvparser.cc" />

-    <ClCompile Include="..\libwebm\mkvparser\mkvreader.cc" />

-    <ClCompile Include="..\vpxdec\md5_utils.c" />

-    <ClCompile Include="..\vpxdec\tools_common.c" />

-    <ClCompile Include="..\vpxdec\user_malloc.cpp" />

-    <ClCompile Include="..\vpxdec\webmdec.cc" />

-    <ClCompile Include="display.cpp" />

-    <ClCompile Include="main.cpp" />

-    <ClCompile Include="memory_helper.cpp" />

-    <ClCompile Include="stream_metadata.cpp" />

-  </ItemGroup>

-  <ItemGroup>

-    <ClInclude Include="..\..\vp9-dec-core\vp9\decoder\vp9lux_linear_allocator.h" />

-    <ClInclude Include="..\..\vp9-dec-core\vp9\decoder\vp9lux_thread.h" />

-    <ClInclude Include="..\libwebm\common\hdr_util.h" />

-    <ClInclude Include="..\libwebm\common\webmids.h" />

-    <ClInclude Include="..\libwebm\mkvmuxer\mkvmuxer.h" />

-    <ClInclude Include="..\libwebm\mkvmuxer\mkvmuxertypes.h" />

-    <ClInclude Include="..\libwebm\mkvmuxer\mkvmuxerutil.h" />

-    <ClInclude Include="..\libwebm\mkvmuxer\mkvwriter.h" />

-    <ClInclude Include="..\libwebm\mkvparser\mkvparser.h" />

-    <ClInclude Include="..\libwebm\mkvparser\mkvreader.h" />

-    <ClInclude Include="..\vpxdec\md5_utils.h" />

-    <ClInclude Include="..\vpxdec\tools_common.h" />

-    <ClInclude Include="..\vpxdec\webmdec.h" />

-    <ClInclude Include="display.h" />

-    <ClInclude Include="ivf_video_source.h" />

-    <ClInclude Include="memory_helper.h" />

-    <ClInclude Include="stream_metadata.h" />

-    <ClInclude Include="video_source.h" />

-    <ClInclude Include="webm_video_source.h" />

-  </ItemGroup>

-  <ItemGroup>

-    <OrbisWavePsslc Include="shader_CSC_p.pssl" />

-    <OrbisWavePsslc Include="shader_vv.pssl">

-      <FileType>Document</FileType>

-      <OutputFileName Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(ProjectDir)%(FileName).sb</OutputFileName>

-    </OrbisWavePsslc>

-  </ItemGroup>

-  <ItemGroup>

-    <ProjectReference Include="..\PS4\common\source\sampleutil\libSceSampleUtil.vcxproj">

-      <Project>{30a1b994-c2c6-485f-911b-fb4674366da8}</Project>

-    </ProjectReference>

-    <ProjectReference Include="..\PS4\dbg_font\dbg_font.vcxproj">

-      <Project>{43565ad8-688c-4451-a81f-2aba8e957753}</Project>

-    </ProjectReference>

-    <ProjectReference Include="..\PS4\framework\framework.vcxproj">

-      <Project>{f950cc65-80ef-4b1f-86a3-2b87b3f23c96}</Project>

-    </ProjectReference>

-    <ProjectReference Include="..\PS4\toolkit\toolkit.vcxproj">

-      <Project>{2f4ccf89-7649-4c7f-8cbf-f976b4fbc2b6}</Project>

-    </ProjectReference>

-  </ItemGroup>

-  <ItemGroup>

-    <None Include="helper_functions.hs" />

-  </ItemGroup>

-  <Import Condition="'$(ConfigurationType)' == 'Makefile' and Exists('$(VCTargetsPath)\Platforms\$(Platform)\SCE.Makefile.$(Platform).targets')" Project="$(VCTargetsPath)\Platforms\$(Platform)\SCE.Makefile.$(Platform).targets" />

-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

-  <ImportGroup Label="ExtensionTargets">

-    <Import Project="$(VCTargetsPath)\BuildCustomizations\OrbisWavePsslc.targets" />

-    <Import Project="$(VCTargetsPath)\BuildCustomizations\SCU.targets" />

-  </ImportGroup>

-</Project>
\ No newline at end of file
diff --git a/src/third_party/libvpx_gpu/vp9-dec-test/libSimplePlayer/libSimplePlayer.vcxproj.filters b/src/third_party/libvpx_gpu/vp9-dec-test/libSimplePlayer/libSimplePlayer.vcxproj.filters
deleted file mode 100644
index 074c689..0000000
--- a/src/third_party/libvpx_gpu/vp9-dec-test/libSimplePlayer/libSimplePlayer.vcxproj.filters
+++ /dev/null
@@ -1,131 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>

-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

-  <ItemGroup>

-    <Filter Include="Source Files">

-      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>

-      <Extensions>cpp;c;cxx;cc;s;asm</Extensions>

-    </Filter>

-    <Filter Include="Header Files">

-      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>

-      <Extensions>h;hpp</Extensions>

-    </Filter>

-  </ItemGroup>

-  <ItemGroup>

-    <ClCompile Include="display.cpp">

-      <Filter>Source Files</Filter>

-    </ClCompile>

-    <ClCompile Include="main.cpp">

-      <Filter>Source Files</Filter>

-    </ClCompile>

-    <ClCompile Include="..\vpxdec\webmdec.cc">

-      <Filter>Source Files</Filter>

-    </ClCompile>

-    <ClCompile Include="..\vpxdec\user_malloc.cpp">

-      <Filter>Source Files</Filter>

-    </ClCompile>

-    <ClCompile Include="..\vpxdec\tools_common.c">

-      <Filter>Source Files</Filter>

-    </ClCompile>

-    <ClCompile Include="..\vpxdec\md5_utils.c">

-      <Filter>Source Files</Filter>

-    </ClCompile>

-    <ClCompile Include="..\..\vp9-dec-core\vp9\decoder\vp9lux_linear_allocator.cpp">

-      <Filter>Source Files</Filter>

-    </ClCompile>

-    <ClCompile Include="..\..\vp9-dec-core\vp9\decoder\vp9lux_thread.c">

-      <Filter>Source Files</Filter>

-    </ClCompile>

-    <ClCompile Include="memory_helper.cpp">

-      <Filter>Source Files</Filter>

-    </ClCompile>

-    <ClCompile Include="..\libwebm\mkvparser\mkvparser.cc">

-      <Filter>Source Files</Filter>

-    </ClCompile>

-    <ClCompile Include="..\libwebm\mkvparser\mkvreader.cc">

-      <Filter>Source Files</Filter>

-    </ClCompile>

-    <ClCompile Include="..\libwebm\common\hdr_util.cc">

-      <Filter>Source Files</Filter>

-    </ClCompile>

-    <ClCompile Include="..\libwebm\mkvmuxer\mkvmuxer.cc">

-      <Filter>Source Files</Filter>

-    </ClCompile>

-    <ClCompile Include="..\libwebm\mkvmuxer\mkvmuxerutil.cc">

-      <Filter>Source Files</Filter>

-    </ClCompile>

-    <ClCompile Include="..\libwebm\mkvmuxer\mkvwriter.cc">

-      <Filter>Source Files</Filter>

-    </ClCompile>

-    <ClCompile Include="stream_metadata.cpp">

-      <Filter>Source Files</Filter>

-    </ClCompile>

-  </ItemGroup>

-  <ItemGroup>

-    <ClInclude Include="display.h">

-      <Filter>Header Files</Filter>

-    </ClInclude>

-    <ClInclude Include="video_source.h">

-      <Filter>Header Files</Filter>

-    </ClInclude>

-    <ClInclude Include="webm_video_source.h">

-      <Filter>Header Files</Filter>

-    </ClInclude>

-    <ClInclude Include="ivf_video_source.h">

-      <Filter>Header Files</Filter>

-    </ClInclude>

-    <ClInclude Include="..\vpxdec\webmdec.h">

-      <Filter>Header Files</Filter>

-    </ClInclude>

-    <ClInclude Include="..\vpxdec\tools_common.h">

-      <Filter>Header Files</Filter>

-    </ClInclude>

-    <ClInclude Include="..\vpxdec\md5_utils.h">

-      <Filter>Header Files</Filter>

-    </ClInclude>

-    <ClInclude Include="..\..\vp9-dec-core\vp9\decoder\vp9lux_linear_allocator.h">

-      <Filter>Source Files</Filter>

-    </ClInclude>

-    <ClInclude Include="..\..\vp9-dec-core\vp9\decoder\vp9lux_thread.h">

-      <Filter>Source Files</Filter>

-    </ClInclude>

-    <ClInclude Include="memory_helper.h">

-      <Filter>Header Files</Filter>

-    </ClInclude>

-    <ClInclude Include="..\libwebm\common\hdr_util.h">

-      <Filter>Header Files</Filter>

-    </ClInclude>

-    <ClInclude Include="..\libwebm\common\webmids.h">

-      <Filter>Header Files</Filter>

-    </ClInclude>

-    <ClInclude Include="..\libwebm\mkvmuxer\mkvmuxer.h">

-      <Filter>Header Files</Filter>

-    </ClInclude>

-    <ClInclude Include="..\libwebm\mkvmuxer\mkvmuxertypes.h">

-      <Filter>Header Files</Filter>

-    </ClInclude>

-    <ClInclude Include="..\libwebm\mkvmuxer\mkvmuxerutil.h">

-      <Filter>Header Files</Filter>

-    </ClInclude>

-    <ClInclude Include="..\libwebm\mkvmuxer\mkvwriter.h">

-      <Filter>Header Files</Filter>

-    </ClInclude>

-    <ClInclude Include="..\libwebm\mkvparser\mkvparser.h">

-      <Filter>Header Files</Filter>

-    </ClInclude>

-    <ClInclude Include="..\libwebm\mkvparser\mkvreader.h">

-      <Filter>Header Files</Filter>

-    </ClInclude>

-    <ClInclude Include="stream_metadata.h">

-      <Filter>Header Files</Filter>

-    </ClInclude>

-  </ItemGroup>

-  <ItemGroup>

-    <OrbisWavePsslc Include="shader_vv.pssl" />

-    <OrbisWavePsslc Include="shader_CSC_p.pssl" />

-  </ItemGroup>

-  <ItemGroup>

-    <None Include="helper_functions.hs">

-      <Filter>Source Files</Filter>

-    </None>

-  </ItemGroup>

-</Project>
\ No newline at end of file
diff --git a/src/third_party/libvpx_gpu/vp9-dec-test/vpxdec/vpxdec.vcxproj b/src/third_party/libvpx_gpu/vp9-dec-test/vpxdec/vpxdec.vcxproj
deleted file mode 100644
index bbe42aa..0000000
--- a/src/third_party/libvpx_gpu/vp9-dec-test/vpxdec/vpxdec.vcxproj
+++ /dev/null
@@ -1,308 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>

-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

-  <ItemGroup Label="ProjectConfigurations">

-    <ProjectConfiguration Include="Debug|ORBIS">

-      <Configuration>Debug</Configuration>

-      <Platform>ORBIS</Platform>

-    </ProjectConfiguration>

-    <ProjectConfiguration Include="Debug|Win32">

-      <Configuration>Debug</Configuration>

-      <Platform>Win32</Platform>

-    </ProjectConfiguration>

-    <ProjectConfiguration Include="Debug|x64">

-      <Configuration>Debug</Configuration>

-      <Platform>x64</Platform>

-    </ProjectConfiguration>

-    <ProjectConfiguration Include="Release|ORBIS">

-      <Configuration>Release</Configuration>

-      <Platform>ORBIS</Platform>

-    </ProjectConfiguration>

-    <ProjectConfiguration Include="Release|Win32">

-      <Configuration>Release</Configuration>

-      <Platform>Win32</Platform>

-    </ProjectConfiguration>

-    <ProjectConfiguration Include="Release|x64">

-      <Configuration>Release</Configuration>

-      <Platform>x64</Platform>

-    </ProjectConfiguration>

-  </ItemGroup>

-  <PropertyGroup Label="Globals">

-    <ProjectGuid>{427CA27F-0F97-4791-912D-E2499DCAE406}</ProjectGuid>

-    <Keyword>Win32Proj</Keyword>

-    <RootNamespace>vpxdec</RootNamespace>

-  </PropertyGroup>

-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">

-    <ConfigurationType>Application</ConfigurationType>

-    <UseDebugLibraries>true</UseDebugLibraries>

-    <CharacterSet>Unicode</CharacterSet>

-    <PlatformToolset>v120</PlatformToolset>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">

-    <ConfigurationType>Application</ConfigurationType>

-    <UseDebugLibraries>true</UseDebugLibraries>

-    <CharacterSet>Unicode</CharacterSet>

-    <PlatformToolset>v120</PlatformToolset>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'" Label="Configuration">

-    <ConfigurationType>Application</ConfigurationType>

-    <UseDebugLibraries>true</UseDebugLibraries>

-    <CharacterSet>Unicode</CharacterSet>

-    <PlatformToolset>Clang</PlatformToolset>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">

-    <ConfigurationType>Application</ConfigurationType>

-    <UseDebugLibraries>false</UseDebugLibraries>

-    <WholeProgramOptimization>true</WholeProgramOptimization>

-    <CharacterSet>Unicode</CharacterSet>

-    <PlatformToolset>v120</PlatformToolset>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">

-    <ConfigurationType>Application</ConfigurationType>

-    <UseDebugLibraries>false</UseDebugLibraries>

-    <WholeProgramOptimization>true</WholeProgramOptimization>

-    <CharacterSet>Unicode</CharacterSet>

-    <PlatformToolset>v120</PlatformToolset>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'" Label="Configuration">

-    <ConfigurationType>Application</ConfigurationType>

-    <UseDebugLibraries>false</UseDebugLibraries>

-    <WholeProgramOptimization>true</WholeProgramOptimization>

-    <CharacterSet>Unicode</CharacterSet>

-    <PlatformToolset>v120</PlatformToolset>

-  </PropertyGroup>

-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />

-  <ImportGroup Label="ExtensionSettings" />

-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">

-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

-  </ImportGroup>

-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">

-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

-  </ImportGroup>

-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'" Label="PropertySheets">

-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

-  </ImportGroup>

-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">

-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

-  </ImportGroup>

-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">

-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

-  </ImportGroup>

-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'" Label="PropertySheets">

-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

-  </ImportGroup>

-  <PropertyGroup Label="UserMacros" />

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">

-    <LinkIncremental>true</LinkIncremental>

-    <OutDir>$(SolutionDir)..\bin\msvs10\$(Configuration)\win$(PlatformArchitecture)\</OutDir>

-    <IntDir>$(SolutionDir)..\obj\msvs10\$(ProjectName)\$(Configuration)\win$(PlatformArchitecture)\</IntDir>

-    <IncludePath>$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSdkDir)include;$(FrameworkSDKDir)\include;$(ProgramFiles)\Visual Leak Detector\include</IncludePath>

-    <LibraryPath>$(VCInstallDir)lib;$(VCInstallDir)atlmfc\lib;$(WindowsSdkDir)lib;$(FrameworkSDKDir)\lib;$(ProgramFiles)\Visual Leak Detector\lib\Win32</LibraryPath>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">

-    <LinkIncremental>true</LinkIncremental>

-    <OutDir>$(SolutionDir)..\bin\msvs10\$(Configuration)\win$(PlatformArchitecture)\</OutDir>

-    <IntDir>$(SolutionDir)..\obj\msvs10\$(ProjectName)\$(Configuration)\win$(PlatformArchitecture)\</IntDir>

-    <LibraryPath>$(DXSDK_DIR)lib\x64;$(LibraryPath)</LibraryPath>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">

-    <LibraryPath>$(SCE_ORBIS_SDK_DIR)\target\lib;$(LibraryPath)</LibraryPath>

-    <LinkIncremental>true</LinkIncremental>

-    <GnmUseGnm>true</GnmUseGnm>

-    <GnmUseGnmx>true</GnmUseGnmx>

-    <GnmUseAddressLibrary>true</GnmUseAddressLibrary>

-    <GnmUseLibShaderBinary>true</GnmUseLibShaderBinary>

-    <GnmUseGNF>true</GnmUseGNF>

-    <GnmUseTextureTool>false</GnmUseTextureTool>

-    <GnmUsePM4Dump>true</GnmUsePM4Dump>

-    <GnmUseSampleCommon>false</GnmUseSampleCommon>

-    <GnmProjectType>Sample</GnmProjectType>

-    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>

-    <IntDir>$(SolutionDir)obj\$(ProjectName)\$(Configuration)\</IntDir>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">

-    <LinkIncremental>false</LinkIncremental>

-    <OutDir>$(SolutionDir)..\bin\msvs10\$(Configuration)\win$(PlatformArchitecture)\</OutDir>

-    <IntDir>$(SolutionDir)..\obj\msvs10\$(ProjectName)\$(Configuration)\win$(PlatformArchitecture)\</IntDir>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">

-    <LinkIncremental>false</LinkIncremental>

-    <OutDir>$(SolutionDir)..\bin\msvs10\$(Configuration)\win$(PlatformArchitecture)\</OutDir>

-    <IntDir>$(SolutionDir)..\obj\msvs10\$(ProjectName)\$(Configuration)\win$(PlatformArchitecture)\</IntDir>

-    <LibraryPath>$(DXSDK_DIR)lib\x64;$(LibraryPath)</LibraryPath>

-  </PropertyGroup>

-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">

-    <LibraryPath>$(DXSDK_DIR)lib\x64;$(LibraryPath)</LibraryPath>

-    <LinkIncremental>false</LinkIncremental>

-    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>

-    <IntDir>$(SolutionDir)obj\$(ProjectName)\$(Configuration)\</IntDir>

-  </PropertyGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">

-    <ClCompile>

-      <PrecompiledHeader>

-      </PrecompiledHeader>

-      <WarningLevel>Level3</WarningLevel>

-      <Optimization>Disabled</Optimization>

-      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\Thirdparty\VpxThirdParty\libyuv\include\libyuv;$(SolutionDir)..\..\dec-cores\vp9-dec-core\build;$(SolutionDir)..\..\dec-cores\vp9-dec-core;$(SolutionDir)..\..\dec-cores\vp9-dec-core\build\build_$(Platform);$(SolutionDir)..\..\Thirdparty\VpxThirdParty\libyuv\include;$(SolutionDir)/../../Thirdparty/amd/mcl/1.6/amdmcl/inc</AdditionalIncludeDirectories>

-      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>

-    </ClCompile>

-    <Link>

-      <SubSystem>Console</SubSystem>

-      <GenerateDebugInformation>true</GenerateDebugInformation>

-      <AdditionalLibraryDirectories>$(SolutionDir)..\lib\msvs10\$(Configuration)\win$(PlatformArchitecture)</AdditionalLibraryDirectories>

-      <AdditionalDependencies>vp9-dec-core$(PlatformArchitecture).lib</AdditionalDependencies>

-    </Link>

-  </ItemDefinitionGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">

-    <ClCompile>

-      <PrecompiledHeader>

-      </PrecompiledHeader>

-      <WarningLevel>Level3</WarningLevel>

-      <Optimization>Disabled</Optimization>

-      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\Thirdparty\VpxThirdParty\libyuv\include\libyuv;$(SolutionDir)..\..\dec-cores\vp9-dec-core\build;$(SolutionDir)..\..\dec-cores\vp9-dec-core;$(SolutionDir)..\..\dec-cores\vp9-dec-core\build\build_$(Platform);$(SolutionDir)..\..\Thirdparty\VpxThirdParty\libyuv\include;$(SolutionDir)/../../Thirdparty/amd/mcl/1.6/amdmcl/inc</AdditionalIncludeDirectories>

-      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>

-    </ClCompile>

-    <Link>

-      <SubSystem>Console</SubSystem>

-      <GenerateDebugInformation>true</GenerateDebugInformation>

-      <AdditionalLibraryDirectories>$(SolutionDir)..\lib\msvs10\$(Configuration)\win$(PlatformArchitecture)</AdditionalLibraryDirectories>

-      <AdditionalDependencies>vp9-dec-core$(PlatformArchitecture).lib;D3D11.lib;d3dcompiler.lib</AdditionalDependencies>

-      <IgnoreSpecificDefaultLibraries>

-      </IgnoreSpecificDefaultLibraries>

-    </Link>

-  </ItemDefinitionGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">

-    <ClCompile>

-      <PrecompiledHeader>

-      </PrecompiledHeader>

-      <WarningLevel>Level3</WarningLevel>

-      <Optimization>Disabled</Optimization>

-      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <AdditionalIncludeDirectories>$(SolutionDir)..\Thirdparty\VpxThirdParty\libyuv\include\libyuv;$(SolutionDir)vp9-dec-core\build;$(SolutionDir)vp9-dec-core;$(SolutionDir)vp9-dec-core\build\ORBIS_Debug;$(SolutionDir)..\Thirdparty\VpxThirdParty\libyuv\include;$(SolutionDir)../Thirdparty/amd/mcl/1.6/amdmcl/inc;../libwebm</AdditionalIncludeDirectories>

-      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>

-      <GenerateDebugInformation>true</GenerateDebugInformation>

-    </ClCompile>

-    <Link>

-      <SubSystem>Console</SubSystem>

-      <GenerateDebugInformation>true</GenerateDebugInformation>

-      <AdditionalLibraryDirectories>$(SolutionDir)lib\$(Configuration);$(SolutionDir)ORBIS_Debug</AdditionalLibraryDirectories>

-      <AdditionalDependencies>vp9-dec-core$(PlatformArchitecture).a;libSceUserService_stub_weak.a;libScePerf_stub_weak.a;libSceGnmDriver_stub_weak.a;libScePm4Dump.a;libSceGnf.a;libSceShaderBinary.a;libSceGpuAddress.a;libSceGnmx_debug.a;libSceGnm_debug.a;libScePosix_stub_weak.a;libScePad_stub_weak.a;libSceVideoOut_stub_weak.a;%(AdditionalDependencies)</AdditionalDependencies>

-      <IgnoreSpecificDefaultLibraries>

-      </IgnoreSpecificDefaultLibraries>

-    </Link>

-  </ItemDefinitionGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">

-    <ClCompile>

-      <WarningLevel>Level3</WarningLevel>

-      <PrecompiledHeader>

-      </PrecompiledHeader>

-      <Optimization>MaxSpeed</Optimization>

-      <FunctionLevelLinking>true</FunctionLevelLinking>

-      <IntrinsicFunctions>true</IntrinsicFunctions>

-      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\Thirdparty\VpxThirdParty\libyuv\include\libyuv;$(SolutionDir)..\..\dec-cores\vp9-dec-core\build;$(SolutionDir)..\..\dec-cores\vp9-dec-core;$(SolutionDir)..\..\dec-cores\vp9-dec-core\build\build_$(Platform);$(SolutionDir)..\..\Thirdparty\VpxThirdParty\libyuv\include;$(SolutionDir)/../../Thirdparty/amd/mcl/1.6/amdmcl/inc</AdditionalIncludeDirectories>

-    </ClCompile>

-    <Link>

-      <SubSystem>Console</SubSystem>

-      <GenerateDebugInformation>true</GenerateDebugInformation>

-      <EnableCOMDATFolding>true</EnableCOMDATFolding>

-      <OptimizeReferences>true</OptimizeReferences>

-      <AdditionalDependencies>vp9-dec-core$(PlatformArchitecture).lib</AdditionalDependencies>

-      <AdditionalLibraryDirectories>$(SolutionDir)..\lib\msvs10\$(Configuration)\win$(PlatformArchitecture)</AdditionalLibraryDirectories>

-    </Link>

-  </ItemDefinitionGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">

-    <ClCompile>

-      <WarningLevel>Level3</WarningLevel>

-      <PrecompiledHeader>

-      </PrecompiledHeader>

-      <Optimization>MaxSpeed</Optimization>

-      <FunctionLevelLinking>true</FunctionLevelLinking>

-      <IntrinsicFunctions>true</IntrinsicFunctions>

-      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <AdditionalIncludeDirectories>$(SolutionDir)..\..\dec-cores\vp9-dec-core\build;$(SolutionDir)..\..\dec-cores\vp9-dec-core;$(SolutionDir)..\..\dec-cores\vp9-dec-core\build\build_$(Platform);$(SolutionDir)/../../Thirdparty/amd/mcl/1.6/amdmcl/inc</AdditionalIncludeDirectories>

-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>

-    </ClCompile>

-    <Link>

-      <SubSystem>Console</SubSystem>

-      <GenerateDebugInformation>true</GenerateDebugInformation>

-      <EnableCOMDATFolding>true</EnableCOMDATFolding>

-      <OptimizeReferences>true</OptimizeReferences>

-      <AdditionalDependencies>vp9-dec-core$(PlatformArchitecture).lib;D3D11.lib;d3dcompiler.lib</AdditionalDependencies>

-      <AdditionalLibraryDirectories>$(SolutionDir)..\lib\msvs10\$(Configuration)\win$(PlatformArchitecture)</AdditionalLibraryDirectories>

-      <IgnoreSpecificDefaultLibraries>

-      </IgnoreSpecificDefaultLibraries>

-    </Link>

-    <PostBuildEvent>

-      <Command>

-      </Command>

-    </PostBuildEvent>

-  </ItemDefinitionGroup>

-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">

-    <ClCompile>

-      <WarningLevel>Level3</WarningLevel>

-      <PrecompiledHeader>

-      </PrecompiledHeader>

-      <Optimization>MaxSpeed</Optimization>

-      <FunctionLevelLinking>true</FunctionLevelLinking>

-      <IntrinsicFunctions>true</IntrinsicFunctions>

-      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <AdditionalIncludeDirectories>$(SolutionDir)..\Thirdparty\VpxThirdParty\libyuv\include\libyuv;$(SolutionDir)vp9-dec-core\build;$(SolutionDir)vp9-dec-core;$(SolutionDir)vp9-dec-core\build\ORBIS_Release;$(SolutionDir)..\Thirdparty\VpxThirdParty\libyuv\include;$(SolutionDir)../Thirdparty/amd/mcl/1.6/amdmcl/inc;../libwebm</AdditionalIncludeDirectories>

-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>

-      <OptimizationLevel>Levels</OptimizationLevel>

-      <LinkTimeOptimization>true</LinkTimeOptimization>

-      <NoStrictAliasing>false</NoStrictAliasing>

-    </ClCompile>

-    <Link>

-      <SubSystem>Console</SubSystem>

-      <GenerateDebugInformation>true</GenerateDebugInformation>

-      <EnableCOMDATFolding>true</EnableCOMDATFolding>

-      <OptimizeReferences>true</OptimizeReferences>

-      <AdditionalDependencies>vp9-dec-core$(PlatformArchitecture).a;libSceUserService_stub_weak.a;libScePerf_stub_weak.a;libSceGnmDriver_stub_weak.a;libScePm4Dump.a;libSceGnf.a;libSceShaderBinary.a;libSceGpuAddress.a;libSceGnmx_debug.a;libSceGnm_debug.a;libScePosix_stub_weak.a;libScePad_stub_weak.a;libSceVideoOut_stub_weak.a;%(AdditionalDependencies)</AdditionalDependencies>

-      <AdditionalLibraryDirectories>$(SolutionDir)lib\$(Configuration);</AdditionalLibraryDirectories>

-      <IgnoreSpecificDefaultLibraries>

-      </IgnoreSpecificDefaultLibraries>

-    </Link>

-    <PostBuildEvent>

-      <Command>

-      </Command>

-    </PostBuildEvent>

-  </ItemDefinitionGroup>

-  <ItemGroup>

-    <None Include="ReadMe.txt" />

-  </ItemGroup>

-  <ItemGroup>

-    <ClInclude Include="..\..\vp9-dec-core\vpx_mem\sce_mem.h" />

-    <ClInclude Include="..\libwebm\mkvparser\mkvparser.h" />

-    <ClInclude Include="..\libwebm\mkvparser\mkvreader.h" />

-    <ClInclude Include="args.h" />

-    <ClInclude Include="ivfdec.h" />

-    <ClInclude Include="md5_utils.h" />

-    <ClInclude Include="stdafx.h">

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">false</ExcludedFromBuild>

-    </ClInclude>

-    <ClInclude Include="targetver.h">

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">true</ExcludedFromBuild>

-    </ClInclude>

-    <ClInclude Include="webmdec.h" />

-    <ClInclude Include="y4menc.h" />

-  </ItemGroup>

-  <ItemGroup>

-    <ClCompile Include="..\..\vp9-dec-core\vpx_mem\vpx_mem.c" />

-    <ClCompile Include="..\libwebm\mkvparser\mkvparser.cc" />

-    <ClCompile Include="..\libwebm\mkvparser\mkvreader.cc" />

-    <ClCompile Include="args.c" />

-    <ClCompile Include="ivfdec.c" />

-    <ClCompile Include="md5_utils.c" />

-    <ClCompile Include="stdafx.cpp" />

-    <ClCompile Include="tools_common.c" />

-    <ClCompile Include="user_malloc.cpp" />

-    <ClCompile Include="vpxdec.c" />

-    <ClCompile Include="webmdec.cc" />

-    <ClCompile Include="y4menc.c" />

-  </ItemGroup>

-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

-  <ImportGroup Label="ExtensionTargets" />

-</Project>
\ No newline at end of file
diff --git a/src/third_party/libvpx_gpu/vp9-dec-test/vpxdec/vpxdec.vcxproj.filters b/src/third_party/libvpx_gpu/vp9-dec-test/vpxdec/vpxdec.vcxproj.filters
deleted file mode 100644
index f670f6f..0000000
--- a/src/third_party/libvpx_gpu/vp9-dec-test/vpxdec/vpxdec.vcxproj.filters
+++ /dev/null
@@ -1,90 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>

-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

-  <ItemGroup>

-    <Filter Include="Source Files">

-      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>

-      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>

-    </Filter>

-    <Filter Include="Header Files">

-      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>

-      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>

-    </Filter>

-    <Filter Include="Resource Files">

-      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>

-      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>

-    </Filter>

-  </ItemGroup>

-  <ItemGroup>

-    <None Include="ReadMe.txt" />

-  </ItemGroup>

-  <ItemGroup>

-    <ClInclude Include="stdafx.h">

-      <Filter>Header Files</Filter>

-    </ClInclude>

-    <ClInclude Include="targetver.h">

-      <Filter>Header Files</Filter>

-    </ClInclude>

-    <ClInclude Include="args.h">

-      <Filter>Header Files</Filter>

-    </ClInclude>

-    <ClInclude Include="md5_utils.h">

-      <Filter>Header Files</Filter>

-    </ClInclude>

-    <ClInclude Include="y4menc.h">

-      <Filter>Header Files</Filter>

-    </ClInclude>

-    <ClInclude Include="webmdec.h">

-      <Filter>Header Files</Filter>

-    </ClInclude>

-    <ClInclude Include="ivfdec.h">

-      <Filter>Header Files</Filter>

-    </ClInclude>

-    <ClInclude Include="..\..\vp9-dec-core\vpx_mem\sce_mem.h">

-      <Filter>Header Files</Filter>

-    </ClInclude>

-    <ClInclude Include="..\libwebm\mkvparser\mkvparser.h">

-      <Filter>Header Files</Filter>

-    </ClInclude>

-    <ClInclude Include="..\libwebm\mkvparser\mkvreader.h">

-      <Filter>Header Files</Filter>

-    </ClInclude>

-  </ItemGroup>

-  <ItemGroup>

-    <ClCompile Include="stdafx.cpp">

-      <Filter>Source Files</Filter>

-    </ClCompile>

-    <ClCompile Include="vpxdec.c">

-      <Filter>Source Files</Filter>

-    </ClCompile>

-    <ClCompile Include="tools_common.c">

-      <Filter>Source Files</Filter>

-    </ClCompile>

-    <ClCompile Include="args.c">

-      <Filter>Source Files</Filter>

-    </ClCompile>

-    <ClCompile Include="md5_utils.c">

-      <Filter>Source Files</Filter>

-    </ClCompile>

-    <ClCompile Include="y4menc.c">

-      <Filter>Source Files</Filter>

-    </ClCompile>

-    <ClCompile Include="webmdec.cc">

-      <Filter>Source Files</Filter>

-    </ClCompile>

-    <ClCompile Include="ivfdec.c">

-      <Filter>Source Files</Filter>

-    </ClCompile>

-    <ClCompile Include="user_malloc.cpp">

-      <Filter>Source Files</Filter>

-    </ClCompile>

-    <ClCompile Include="..\..\vp9-dec-core\vpx_mem\vpx_mem.c">

-      <Filter>Source Files</Filter>

-    </ClCompile>

-    <ClCompile Include="..\libwebm\mkvparser\mkvparser.cc">

-      <Filter>Source Files</Filter>

-    </ClCompile>

-    <ClCompile Include="..\libwebm\mkvparser\mkvreader.cc">

-      <Filter>Source Files</Filter>

-    </ClCompile>

-  </ItemGroup>

-</Project>
\ No newline at end of file
diff --git a/src/third_party/libvpx_gpu/vp9decoder.sln b/src/third_party/libvpx_gpu/vp9decoder.sln
deleted file mode 100644
index 87ac9f9..0000000
--- a/src/third_party/libvpx_gpu/vp9decoder.sln
+++ /dev/null
@@ -1,97 +0,0 @@
-

-Microsoft Visual Studio Solution File, Format Version 12.00

-# Visual Studio 2013

-VisualStudioVersion = 12.0.40629.0

-MinimumVisualStudioVersion = 10.0.40219.1

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vp9-dec-core", "vp9-dec-core\build\vpx-dec-core.vcxproj", "{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}"

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vpxdec", "vp9-dec-test\vpxdec\vpxdec.vcxproj", "{427CA27F-0F97-4791-912D-E2499DCAE406}"

-	ProjectSection(ProjectDependencies) = postProject

-		{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74} = {DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "google-tests", "vp9-dec-test\google-tests\build\test-vp9-dec.vcxproj", "{020D5EB9-D317-46FE-9CEC-557444DCDC6E}"

-	ProjectSection(ProjectDependencies) = postProject

-		{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74} = {DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}

-	EndProjectSection

-EndProject

-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{3FD52CF0-07C7-4FFB-B2D1-6D23F366E206}"

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "luxSimplePlayer", "vp9-dec-test\libSimplePlayer\libSimplePlayer.vcxproj", "{901DB192-225E-48D3-8C4D-015A4DE1F6B4}"

-	ProjectSection(ProjectDependencies) = postProject

-		{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74} = {DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}

-	EndProjectSection

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libSceSampleUtil", "vp9-dec-test\PS4\common\source\sampleutil\libSceSampleUtil.vcxproj", "{30A1B994-C2C6-485F-911B-FB4674366DA8}"

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_toolkit", "vp9-dec-test\PS4\toolkit\toolkit.vcxproj", "{2F4CCF89-7649-4C7F-8CBF-F976B4FBC2B6}"

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_framework", "vp9-dec-test\PS4\framework\framework.vcxproj", "{F950CC65-80EF-4B1F-86A3-2B87B3F23C96}"

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_dbg_font", "vp9-dec-test\PS4\dbg_font\dbg_font.vcxproj", "{43565AD8-688C-4451-A81F-2ABA8E957753}"

-EndProject

-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "player", "player", "{1453DBCA-657E-4D99-A391-EDDE23FC4396}"

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ErrorResilienceTest", "vp9-dec-test\ErrorResilienceTest\ErrorResilienceTest.vcxproj", "{F216E2AC-3265-4071-9F17-709D747FF1D1}"

-	ProjectSection(ProjectDependencies) = postProject

-		{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74} = {DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}

-	EndProjectSection

-EndProject

-Global

-	GlobalSection(SolutionConfigurationPlatforms) = preSolution

-		Debug|ORBIS = Debug|ORBIS

-		Release|ORBIS = Release|ORBIS

-	EndGlobalSection

-	GlobalSection(ProjectConfigurationPlatforms) = postSolution

-		{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Debug|ORBIS.ActiveCfg = Debug|ORBIS

-		{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Debug|ORBIS.Build.0 = Debug|ORBIS

-		{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Release|ORBIS.ActiveCfg = Release|ORBIS

-		{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Release|ORBIS.Build.0 = Release|ORBIS

-		{427CA27F-0F97-4791-912D-E2499DCAE406}.Debug|ORBIS.ActiveCfg = Debug|ORBIS

-		{427CA27F-0F97-4791-912D-E2499DCAE406}.Debug|ORBIS.Build.0 = Debug|ORBIS

-		{427CA27F-0F97-4791-912D-E2499DCAE406}.Release|ORBIS.ActiveCfg = Release|ORBIS

-		{427CA27F-0F97-4791-912D-E2499DCAE406}.Release|ORBIS.Build.0 = Release|ORBIS

-		{020D5EB9-D317-46FE-9CEC-557444DCDC6E}.Debug|ORBIS.ActiveCfg = Debug|ORBIS

-		{020D5EB9-D317-46FE-9CEC-557444DCDC6E}.Debug|ORBIS.Build.0 = Debug|ORBIS

-		{020D5EB9-D317-46FE-9CEC-557444DCDC6E}.Release|ORBIS.ActiveCfg = Release|ORBIS

-		{020D5EB9-D317-46FE-9CEC-557444DCDC6E}.Release|ORBIS.Build.0 = Release|ORBIS

-		{901DB192-225E-48D3-8C4D-015A4DE1F6B4}.Debug|ORBIS.ActiveCfg = Debug|ORBIS

-		{901DB192-225E-48D3-8C4D-015A4DE1F6B4}.Debug|ORBIS.Build.0 = Debug|ORBIS

-		{901DB192-225E-48D3-8C4D-015A4DE1F6B4}.Release|ORBIS.ActiveCfg = Release|ORBIS

-		{901DB192-225E-48D3-8C4D-015A4DE1F6B4}.Release|ORBIS.Build.0 = Release|ORBIS

-		{30A1B994-C2C6-485F-911B-FB4674366DA8}.Debug|ORBIS.ActiveCfg = Debug|ORBIS

-		{30A1B994-C2C6-485F-911B-FB4674366DA8}.Debug|ORBIS.Build.0 = Debug|ORBIS

-		{30A1B994-C2C6-485F-911B-FB4674366DA8}.Release|ORBIS.ActiveCfg = Release|ORBIS

-		{30A1B994-C2C6-485F-911B-FB4674366DA8}.Release|ORBIS.Build.0 = Release|ORBIS

-		{2F4CCF89-7649-4C7F-8CBF-F976B4FBC2B6}.Debug|ORBIS.ActiveCfg = Debug|ORBIS

-		{2F4CCF89-7649-4C7F-8CBF-F976B4FBC2B6}.Debug|ORBIS.Build.0 = Debug|ORBIS

-		{2F4CCF89-7649-4C7F-8CBF-F976B4FBC2B6}.Release|ORBIS.ActiveCfg = Release|ORBIS

-		{2F4CCF89-7649-4C7F-8CBF-F976B4FBC2B6}.Release|ORBIS.Build.0 = Release|ORBIS

-		{F950CC65-80EF-4B1F-86A3-2B87B3F23C96}.Debug|ORBIS.ActiveCfg = Debug|ORBIS

-		{F950CC65-80EF-4B1F-86A3-2B87B3F23C96}.Debug|ORBIS.Build.0 = Debug|ORBIS

-		{F950CC65-80EF-4B1F-86A3-2B87B3F23C96}.Release|ORBIS.ActiveCfg = Release|ORBIS

-		{F950CC65-80EF-4B1F-86A3-2B87B3F23C96}.Release|ORBIS.Build.0 = Release|ORBIS

-		{43565AD8-688C-4451-A81F-2ABA8E957753}.Debug|ORBIS.ActiveCfg = Debug|ORBIS

-		{43565AD8-688C-4451-A81F-2ABA8E957753}.Debug|ORBIS.Build.0 = Debug|ORBIS

-		{43565AD8-688C-4451-A81F-2ABA8E957753}.Release|ORBIS.ActiveCfg = Release|ORBIS

-		{43565AD8-688C-4451-A81F-2ABA8E957753}.Release|ORBIS.Build.0 = Release|ORBIS

-		{F216E2AC-3265-4071-9F17-709D747FF1D1}.Debug|ORBIS.ActiveCfg = Debug|ORBIS

-		{F216E2AC-3265-4071-9F17-709D747FF1D1}.Debug|ORBIS.Build.0 = Debug|ORBIS

-		{F216E2AC-3265-4071-9F17-709D747FF1D1}.Release|ORBIS.ActiveCfg = Release|ORBIS

-		{F216E2AC-3265-4071-9F17-709D747FF1D1}.Release|ORBIS.Build.0 = Release|ORBIS

-	EndGlobalSection

-	GlobalSection(SolutionProperties) = preSolution

-		HideSolutionNode = FALSE

-	EndGlobalSection

-	GlobalSection(NestedProjects) = preSolution

-		{427CA27F-0F97-4791-912D-E2499DCAE406} = {3FD52CF0-07C7-4FFB-B2D1-6D23F366E206}

-		{020D5EB9-D317-46FE-9CEC-557444DCDC6E} = {3FD52CF0-07C7-4FFB-B2D1-6D23F366E206}

-		{901DB192-225E-48D3-8C4D-015A4DE1F6B4} = {1453DBCA-657E-4D99-A391-EDDE23FC4396}

-		{30A1B994-C2C6-485F-911B-FB4674366DA8} = {1453DBCA-657E-4D99-A391-EDDE23FC4396}

-		{2F4CCF89-7649-4C7F-8CBF-F976B4FBC2B6} = {1453DBCA-657E-4D99-A391-EDDE23FC4396}

-		{F950CC65-80EF-4B1F-86A3-2B87B3F23C96} = {1453DBCA-657E-4D99-A391-EDDE23FC4396}

-		{43565AD8-688C-4451-A81F-2ABA8E957753} = {1453DBCA-657E-4D99-A391-EDDE23FC4396}

-		{1453DBCA-657E-4D99-A391-EDDE23FC4396} = {3FD52CF0-07C7-4FFB-B2D1-6D23F366E206}

-		{F216E2AC-3265-4071-9F17-709D747FF1D1} = {3FD52CF0-07C7-4FFB-B2D1-6D23F366E206}

-	EndGlobalSection

-EndGlobal

diff --git a/src/third_party/llvm-project/libunwind/libunwind.gyp b/src/third_party/llvm-project/libunwind/libunwind.gyp
index 833ca4a..3a32bbd 100644
--- a/src/third_party/llvm-project/libunwind/libunwind.gyp
+++ b/src/third_party/llvm-project/libunwind/libunwind.gyp
@@ -20,8 +20,6 @@
       'include_dirs': [
         'include',
         '<(DEPTH)/third_party/llvm-project/libcxx/include',
-        '<(DEPTH)/third_party/musl/include',
-        '<(DEPTH)/third_party/musl/generated/include',
       ],
       'dependencies': [
         '<(DEPTH)/starboard/common/common.gyp:common',
@@ -86,8 +84,6 @@
       'all_dependent_settings': {
         'include_dirs': [
           '<(DEPTH)/third_party/llvm-project/libcxx/include',
-          '<(DEPTH)/third_party/musl/include',
-          '<(DEPTH)/third_party/musl/generated/include',
         ],
         'defines': [
           # Ensure that __external_threading is used for threading support.
diff --git a/src/third_party/llvm-project/libunwind/src/AddressSpace.hpp b/src/third_party/llvm-project/libunwind/src/AddressSpace.hpp
index e3a7e40..a2ea283 100644
--- a/src/third_party/llvm-project/libunwind/src/AddressSpace.hpp
+++ b/src/third_party/llvm-project/libunwind/src/AddressSpace.hpp
@@ -385,6 +385,9 @@
 
 inline bool LocalAddressSpace::findUnwindSections(pint_t targetAddr,
                                                   UnwindInfoSections &info) {
+#if defined(STARBOARD)
+  return false;
+#endif
 #ifdef __APPLE__
   dyld_unwind_sections dyldInfo;
   if (_dyld_find_unwind_sections((void *)targetAddr, &dyldInfo)) {
@@ -584,6 +587,7 @@
 inline bool LocalAddressSpace::findFunctionName(pint_t addr, char *buf,
                                                 size_t bufLen,
                                                 unw_word_t *offset) {
+#if !defined(STARBOARD)
 #if _LIBUNWIND_USE_DLADDR
   Dl_info dyldInfo;
   if (dladdr((void *)addr, &dyldInfo)) {
@@ -594,6 +598,7 @@
     }
   }
 #endif
+#endif
   return false;
 }
 
diff --git a/src/third_party/musl/arch/aarch64/bits/alltypes.h b/src/third_party/musl/arch/aarch64/bits/alltypes.h
new file mode 100644
index 0000000..f90365e
--- /dev/null
+++ b/src/third_party/musl/arch/aarch64/bits/alltypes.h
@@ -0,0 +1,401 @@
+#define _Addr long
+#define _Int64 long
+#define _Reg long
+
+#if defined(__NEED_va_list) && !defined(__DEFINED_va_list)
+typedef __builtin_va_list va_list;
+#define __DEFINED_va_list
+#endif
+
+#if defined(__NEED___isoc_va_list) && !defined(__DEFINED___isoc_va_list)
+typedef __builtin_va_list __isoc_va_list;
+#define __DEFINED___isoc_va_list
+#endif
+
+
+#ifndef __cplusplus
+#if defined(__NEED_wchar_t) && !defined(__DEFINED_wchar_t)
+typedef unsigned wchar_t;
+#define __DEFINED_wchar_t
+#endif
+
+#endif
+#if defined(__NEED_wint_t) && !defined(__DEFINED_wint_t)
+typedef unsigned wint_t;
+#define __DEFINED_wint_t
+#endif
+
+
+#if defined(__NEED_blksize_t) && !defined(__DEFINED_blksize_t)
+typedef int blksize_t;
+#define __DEFINED_blksize_t
+#endif
+
+#if defined(__NEED_nlink_t) && !defined(__DEFINED_nlink_t)
+typedef unsigned int nlink_t;
+#define __DEFINED_nlink_t
+#endif
+
+
+#if defined(__NEED_float_t) && !defined(__DEFINED_float_t)
+typedef float float_t;
+#define __DEFINED_float_t
+#endif
+
+#if defined(__NEED_double_t) && !defined(__DEFINED_double_t)
+typedef double double_t;
+#define __DEFINED_double_t
+#endif
+
+
+#if defined(__NEED_max_align_t) && !defined(__DEFINED_max_align_t)
+typedef struct { long long __ll; long double __ld; } max_align_t;
+#define __DEFINED_max_align_t
+#endif
+
+
+#if defined(__NEED_time_t) && !defined(__DEFINED_time_t)
+typedef long time_t;
+#define __DEFINED_time_t
+#endif
+
+#if defined(__NEED_suseconds_t) && !defined(__DEFINED_suseconds_t)
+typedef long suseconds_t;
+#define __DEFINED_suseconds_t
+#endif
+
+
+#if defined(__NEED_pthread_attr_t) && !defined(__DEFINED_pthread_attr_t)
+typedef struct { union { int __i[14]; volatile int __vi[14]; unsigned long __s[7]; } __u; } pthread_attr_t;
+#define __DEFINED_pthread_attr_t
+#endif
+
+#if defined(__NEED_pthread_mutex_t) && !defined(__DEFINED_pthread_mutex_t)
+typedef struct { union { int __i[10]; volatile int __vi[10]; volatile void *volatile __p[5]; } __u; } pthread_mutex_t;
+#define __DEFINED_pthread_mutex_t
+#endif
+
+#if defined(__NEED_mtx_t) && !defined(__DEFINED_mtx_t)
+typedef struct { union { int __i[10]; volatile int __vi[10]; volatile void *volatile __p[5]; } __u; } mtx_t;
+#define __DEFINED_mtx_t
+#endif
+
+#if defined(__NEED_pthread_cond_t) && !defined(__DEFINED_pthread_cond_t)
+typedef struct { union { int __i[12]; volatile int __vi[12]; void *__p[6]; } __u; } pthread_cond_t;
+#define __DEFINED_pthread_cond_t
+#endif
+
+#if defined(__NEED_cnd_t) && !defined(__DEFINED_cnd_t)
+typedef struct { union { int __i[12]; volatile int __vi[12]; void *__p[6]; } __u; } cnd_t;
+#define __DEFINED_cnd_t
+#endif
+
+#if defined(__NEED_pthread_rwlock_t) && !defined(__DEFINED_pthread_rwlock_t)
+typedef struct { union { int __i[14]; volatile int __vi[14]; void *__p[7]; } __u; } pthread_rwlock_t;
+#define __DEFINED_pthread_rwlock_t
+#endif
+
+#if defined(__NEED_pthread_barrier_t) && !defined(__DEFINED_pthread_barrier_t)
+typedef struct { union { int __i[8]; volatile int __vi[8]; void *__p[4]; } __u; } pthread_barrier_t;
+#define __DEFINED_pthread_barrier_t
+#endif
+
+#if defined(__NEED_size_t) && !defined(__DEFINED_size_t)
+typedef unsigned _Addr size_t;
+#define __DEFINED_size_t
+#endif
+
+#if defined(__NEED_uintptr_t) && !defined(__DEFINED_uintptr_t)
+typedef unsigned _Addr uintptr_t;
+#define __DEFINED_uintptr_t
+#endif
+
+#if defined(__NEED_ptrdiff_t) && !defined(__DEFINED_ptrdiff_t)
+typedef _Addr ptrdiff_t;
+#define __DEFINED_ptrdiff_t
+#endif
+
+#if defined(__NEED_ssize_t) && !defined(__DEFINED_ssize_t)
+typedef _Addr ssize_t;
+#define __DEFINED_ssize_t
+#endif
+
+#if defined(__NEED_intptr_t) && !defined(__DEFINED_intptr_t)
+typedef _Addr intptr_t;
+#define __DEFINED_intptr_t
+#endif
+
+#if defined(__NEED_regoff_t) && !defined(__DEFINED_regoff_t)
+typedef _Addr regoff_t;
+#define __DEFINED_regoff_t
+#endif
+
+#if defined(__NEED_register_t) && !defined(__DEFINED_register_t)
+typedef _Reg register_t;
+#define __DEFINED_register_t
+#endif
+
+
+#if defined(__NEED_int8_t) && !defined(__DEFINED_int8_t)
+typedef signed char     int8_t;
+#define __DEFINED_int8_t
+#endif
+
+#if defined(__NEED_int16_t) && !defined(__DEFINED_int16_t)
+typedef signed short    int16_t;
+#define __DEFINED_int16_t
+#endif
+
+#if defined(__NEED_int32_t) && !defined(__DEFINED_int32_t)
+typedef signed int      int32_t;
+#define __DEFINED_int32_t
+#endif
+
+#if defined(__NEED_int64_t) && !defined(__DEFINED_int64_t)
+typedef signed _Int64   int64_t;
+#define __DEFINED_int64_t
+#endif
+
+#if defined(__NEED_intmax_t) && !defined(__DEFINED_intmax_t)
+typedef signed _Int64   intmax_t;
+#define __DEFINED_intmax_t
+#endif
+
+#if defined(__NEED_uint8_t) && !defined(__DEFINED_uint8_t)
+typedef unsigned char   uint8_t;
+#define __DEFINED_uint8_t
+#endif
+
+#if defined(__NEED_uint16_t) && !defined(__DEFINED_uint16_t)
+typedef unsigned short  uint16_t;
+#define __DEFINED_uint16_t
+#endif
+
+#if defined(__NEED_uint32_t) && !defined(__DEFINED_uint32_t)
+typedef unsigned int    uint32_t;
+#define __DEFINED_uint32_t
+#endif
+
+#if defined(__NEED_uint64_t) && !defined(__DEFINED_uint64_t)
+typedef unsigned _Int64 uint64_t;
+#define __DEFINED_uint64_t
+#endif
+
+#if defined(__NEED_u_int64_t) && !defined(__DEFINED_u_int64_t)
+typedef unsigned _Int64 u_int64_t;
+#define __DEFINED_u_int64_t
+#endif
+
+#if defined(__NEED_uintmax_t) && !defined(__DEFINED_uintmax_t)
+typedef unsigned _Int64 uintmax_t;
+#define __DEFINED_uintmax_t
+#endif
+
+
+#if defined(__NEED_mode_t) && !defined(__DEFINED_mode_t)
+typedef unsigned mode_t;
+#define __DEFINED_mode_t
+#endif
+
+#if defined(__NEED_nlink_t) && !defined(__DEFINED_nlink_t)
+typedef unsigned _Reg nlink_t;
+#define __DEFINED_nlink_t
+#endif
+
+#if defined(__NEED_off_t) && !defined(__DEFINED_off_t)
+typedef _Int64 off_t;
+#define __DEFINED_off_t
+#endif
+
+#if defined(__NEED_ino_t) && !defined(__DEFINED_ino_t)
+typedef unsigned _Int64 ino_t;
+#define __DEFINED_ino_t
+#endif
+
+#if defined(__NEED_dev_t) && !defined(__DEFINED_dev_t)
+typedef unsigned _Int64 dev_t;
+#define __DEFINED_dev_t
+#endif
+
+#if defined(__NEED_blksize_t) && !defined(__DEFINED_blksize_t)
+typedef long blksize_t;
+#define __DEFINED_blksize_t
+#endif
+
+#if defined(__NEED_blkcnt_t) && !defined(__DEFINED_blkcnt_t)
+typedef _Int64 blkcnt_t;
+#define __DEFINED_blkcnt_t
+#endif
+
+#if defined(__NEED_fsblkcnt_t) && !defined(__DEFINED_fsblkcnt_t)
+typedef unsigned _Int64 fsblkcnt_t;
+#define __DEFINED_fsblkcnt_t
+#endif
+
+#if defined(__NEED_fsfilcnt_t) && !defined(__DEFINED_fsfilcnt_t)
+typedef unsigned _Int64 fsfilcnt_t;
+#define __DEFINED_fsfilcnt_t
+#endif
+
+
+#if defined(__NEED_wint_t) && !defined(__DEFINED_wint_t)
+typedef unsigned wint_t;
+#define __DEFINED_wint_t
+#endif
+
+#if defined(__NEED_wctype_t) && !defined(__DEFINED_wctype_t)
+typedef unsigned long wctype_t;
+#define __DEFINED_wctype_t
+#endif
+
+
+#if defined(__NEED_timer_t) && !defined(__DEFINED_timer_t)
+typedef void * timer_t;
+#define __DEFINED_timer_t
+#endif
+
+#if defined(__NEED_clockid_t) && !defined(__DEFINED_clockid_t)
+typedef int clockid_t;
+#define __DEFINED_clockid_t
+#endif
+
+#if defined(__NEED_clock_t) && !defined(__DEFINED_clock_t)
+typedef long clock_t;
+#define __DEFINED_clock_t
+#endif
+
+#if defined(__NEED_struct_timeval) && !defined(__DEFINED_struct_timeval)
+struct timeval { time_t tv_sec; suseconds_t tv_usec; };
+#define __DEFINED_struct_timeval
+#endif
+
+#if defined(__NEED_struct_timespec) && !defined(__DEFINED_struct_timespec)
+struct timespec { time_t tv_sec; long tv_nsec; };
+#define __DEFINED_struct_timespec
+#endif
+
+
+#if defined(__NEED_pid_t) && !defined(__DEFINED_pid_t)
+typedef int pid_t;
+#define __DEFINED_pid_t
+#endif
+
+#if defined(__NEED_id_t) && !defined(__DEFINED_id_t)
+typedef unsigned id_t;
+#define __DEFINED_id_t
+#endif
+
+#if defined(__NEED_uid_t) && !defined(__DEFINED_uid_t)
+typedef unsigned uid_t;
+#define __DEFINED_uid_t
+#endif
+
+#if defined(__NEED_gid_t) && !defined(__DEFINED_gid_t)
+typedef unsigned gid_t;
+#define __DEFINED_gid_t
+#endif
+
+#if defined(__NEED_key_t) && !defined(__DEFINED_key_t)
+typedef int key_t;
+#define __DEFINED_key_t
+#endif
+
+#if defined(__NEED_useconds_t) && !defined(__DEFINED_useconds_t)
+typedef unsigned useconds_t;
+#define __DEFINED_useconds_t
+#endif
+
+
+#ifdef __cplusplus
+#if defined(__NEED_pthread_t) && !defined(__DEFINED_pthread_t)
+typedef unsigned long pthread_t;
+#define __DEFINED_pthread_t
+#endif
+
+#else
+#if defined(__NEED_pthread_t) && !defined(__DEFINED_pthread_t)
+typedef struct __pthread * pthread_t;
+#define __DEFINED_pthread_t
+#endif
+
+#endif
+#if defined(__NEED_pthread_once_t) && !defined(__DEFINED_pthread_once_t)
+typedef int pthread_once_t;
+#define __DEFINED_pthread_once_t
+#endif
+
+#if defined(__NEED_pthread_key_t) && !defined(__DEFINED_pthread_key_t)
+typedef unsigned pthread_key_t;
+#define __DEFINED_pthread_key_t
+#endif
+
+#if defined(__NEED_pthread_spinlock_t) && !defined(__DEFINED_pthread_spinlock_t)
+typedef int pthread_spinlock_t;
+#define __DEFINED_pthread_spinlock_t
+#endif
+
+#if defined(__NEED_pthread_mutexattr_t) && !defined(__DEFINED_pthread_mutexattr_t)
+typedef struct { unsigned __attr; } pthread_mutexattr_t;
+#define __DEFINED_pthread_mutexattr_t
+#endif
+
+#if defined(__NEED_pthread_condattr_t) && !defined(__DEFINED_pthread_condattr_t)
+typedef struct { unsigned __attr; } pthread_condattr_t;
+#define __DEFINED_pthread_condattr_t
+#endif
+
+#if defined(__NEED_pthread_barrierattr_t) && !defined(__DEFINED_pthread_barrierattr_t)
+typedef struct { unsigned __attr; } pthread_barrierattr_t;
+#define __DEFINED_pthread_barrierattr_t
+#endif
+
+#if defined(__NEED_pthread_rwlockattr_t) && !defined(__DEFINED_pthread_rwlockattr_t)
+typedef struct { unsigned __attr[2]; } pthread_rwlockattr_t;
+#define __DEFINED_pthread_rwlockattr_t
+#endif
+
+
+#if defined(__NEED_FILE) && !defined(__DEFINED_FILE)
+typedef struct _IO_FILE FILE;
+#define __DEFINED_FILE
+#endif
+
+
+#if defined(__NEED_mbstate_t) && !defined(__DEFINED_mbstate_t)
+typedef struct __mbstate_t { unsigned __opaque1, __opaque2; } mbstate_t;
+#define __DEFINED_mbstate_t
+#endif
+
+
+#if defined(__NEED_locale_t) && !defined(__DEFINED_locale_t)
+typedef struct __locale_struct * locale_t;
+#define __DEFINED_locale_t
+#endif
+
+
+#if defined(__NEED_sigset_t) && !defined(__DEFINED_sigset_t)
+typedef struct __sigset_t { unsigned long __bits[128/sizeof(long)]; } sigset_t;
+#define __DEFINED_sigset_t
+#endif
+
+
+#if defined(__NEED_struct_iovec) && !defined(__DEFINED_struct_iovec)
+struct iovec { void *iov_base; size_t iov_len; };
+#define __DEFINED_struct_iovec
+#endif
+
+
+#if defined(__NEED_socklen_t) && !defined(__DEFINED_socklen_t)
+typedef unsigned socklen_t;
+#define __DEFINED_socklen_t
+#endif
+
+#if defined(__NEED_sa_family_t) && !defined(__DEFINED_sa_family_t)
+typedef unsigned short sa_family_t;
+#define __DEFINED_sa_family_t
+#endif
+
+
+#undef _Addr
+#undef _Int64
+#undef _Reg
diff --git a/src/third_party/musl/arch/arm/bits/alltypes.h b/src/third_party/musl/arch/arm/bits/alltypes.h
new file mode 100644
index 0000000..f8c6e76
--- /dev/null
+++ b/src/third_party/musl/arch/arm/bits/alltypes.h
@@ -0,0 +1,385 @@
+#define _Addr int
+#define _Int64 long long
+#define _Reg int
+
+#if defined(__NEED_va_list) && !defined(__DEFINED_va_list)
+typedef __builtin_va_list va_list;
+#define __DEFINED_va_list
+#endif
+
+#if defined(__NEED___isoc_va_list) && !defined(__DEFINED___isoc_va_list)
+typedef __builtin_va_list __isoc_va_list;
+#define __DEFINED___isoc_va_list
+#endif
+
+
+#ifndef __cplusplus
+#if defined(__NEED_wchar_t) && !defined(__DEFINED_wchar_t)
+typedef unsigned wchar_t;
+#define __DEFINED_wchar_t
+#endif
+
+#endif
+
+#if defined(__NEED_float_t) && !defined(__DEFINED_float_t)
+typedef float float_t;
+#define __DEFINED_float_t
+#endif
+
+#if defined(__NEED_double_t) && !defined(__DEFINED_double_t)
+typedef double double_t;
+#define __DEFINED_double_t
+#endif
+
+
+#if defined(__NEED_max_align_t) && !defined(__DEFINED_max_align_t)
+typedef struct { long long __ll; long double __ld; } max_align_t;
+#define __DEFINED_max_align_t
+#endif
+
+
+#if defined(__NEED_time_t) && !defined(__DEFINED_time_t)
+typedef long time_t;
+#define __DEFINED_time_t
+#endif
+
+#if defined(__NEED_suseconds_t) && !defined(__DEFINED_suseconds_t)
+typedef long suseconds_t;
+#define __DEFINED_suseconds_t
+#endif
+
+
+#if defined(__NEED_pthread_attr_t) && !defined(__DEFINED_pthread_attr_t)
+typedef struct { union { int __i[9]; volatile int __vi[9]; unsigned __s[9]; } __u; } pthread_attr_t;
+#define __DEFINED_pthread_attr_t
+#endif
+
+#if defined(__NEED_pthread_mutex_t) && !defined(__DEFINED_pthread_mutex_t)
+typedef struct { union { int __i[6]; volatile int __vi[6]; volatile void *volatile __p[6]; } __u; } pthread_mutex_t;
+#define __DEFINED_pthread_mutex_t
+#endif
+
+#if defined(__NEED_mtx_t) && !defined(__DEFINED_mtx_t)
+typedef struct { union { int __i[6]; volatile int __vi[6]; volatile void *volatile __p[6]; } __u; } mtx_t;
+#define __DEFINED_mtx_t
+#endif
+
+#if defined(__NEED_pthread_cond_t) && !defined(__DEFINED_pthread_cond_t)
+typedef struct { union { int __i[12]; volatile int __vi[12]; void *__p[12]; } __u; } pthread_cond_t;
+#define __DEFINED_pthread_cond_t
+#endif
+
+#if defined(__NEED_cnd_t) && !defined(__DEFINED_cnd_t)
+typedef struct { union { int __i[12]; volatile int __vi[12]; void *__p[12]; } __u; } cnd_t;
+#define __DEFINED_cnd_t
+#endif
+
+#if defined(__NEED_pthread_rwlock_t) && !defined(__DEFINED_pthread_rwlock_t)
+typedef struct { union { int __i[8]; volatile int __vi[8]; void *__p[8]; } __u; } pthread_rwlock_t;
+#define __DEFINED_pthread_rwlock_t
+#endif
+
+#if defined(__NEED_pthread_barrier_t) && !defined(__DEFINED_pthread_barrier_t)
+typedef struct { union { int __i[5]; volatile int __vi[5]; void *__p[5]; } __u; } pthread_barrier_t;
+#define __DEFINED_pthread_barrier_t
+#endif
+
+#if defined(__NEED_size_t) && !defined(__DEFINED_size_t)
+typedef unsigned _Addr size_t;
+#define __DEFINED_size_t
+#endif
+
+#if defined(__NEED_uintptr_t) && !defined(__DEFINED_uintptr_t)
+typedef unsigned _Addr uintptr_t;
+#define __DEFINED_uintptr_t
+#endif
+
+#if defined(__NEED_ptrdiff_t) && !defined(__DEFINED_ptrdiff_t)
+typedef _Addr ptrdiff_t;
+#define __DEFINED_ptrdiff_t
+#endif
+
+#if defined(__NEED_ssize_t) && !defined(__DEFINED_ssize_t)
+typedef _Addr ssize_t;
+#define __DEFINED_ssize_t
+#endif
+
+#if defined(__NEED_intptr_t) && !defined(__DEFINED_intptr_t)
+typedef _Addr intptr_t;
+#define __DEFINED_intptr_t
+#endif
+
+#if defined(__NEED_regoff_t) && !defined(__DEFINED_regoff_t)
+typedef _Addr regoff_t;
+#define __DEFINED_regoff_t
+#endif
+
+#if defined(__NEED_register_t) && !defined(__DEFINED_register_t)
+typedef _Reg register_t;
+#define __DEFINED_register_t
+#endif
+
+
+#if defined(__NEED_int8_t) && !defined(__DEFINED_int8_t)
+typedef signed char     int8_t;
+#define __DEFINED_int8_t
+#endif
+
+#if defined(__NEED_int16_t) && !defined(__DEFINED_int16_t)
+typedef signed short    int16_t;
+#define __DEFINED_int16_t
+#endif
+
+#if defined(__NEED_int32_t) && !defined(__DEFINED_int32_t)
+typedef signed int      int32_t;
+#define __DEFINED_int32_t
+#endif
+
+#if defined(__NEED_int64_t) && !defined(__DEFINED_int64_t)
+typedef signed _Int64   int64_t;
+#define __DEFINED_int64_t
+#endif
+
+#if defined(__NEED_intmax_t) && !defined(__DEFINED_intmax_t)
+typedef signed _Int64   intmax_t;
+#define __DEFINED_intmax_t
+#endif
+
+#if defined(__NEED_uint8_t) && !defined(__DEFINED_uint8_t)
+typedef unsigned char   uint8_t;
+#define __DEFINED_uint8_t
+#endif
+
+#if defined(__NEED_uint16_t) && !defined(__DEFINED_uint16_t)
+typedef unsigned short  uint16_t;
+#define __DEFINED_uint16_t
+#endif
+
+#if defined(__NEED_uint32_t) && !defined(__DEFINED_uint32_t)
+typedef unsigned int    uint32_t;
+#define __DEFINED_uint32_t
+#endif
+
+#if defined(__NEED_uint64_t) && !defined(__DEFINED_uint64_t)
+typedef unsigned _Int64 uint64_t;
+#define __DEFINED_uint64_t
+#endif
+
+#if defined(__NEED_u_int64_t) && !defined(__DEFINED_u_int64_t)
+typedef unsigned _Int64 u_int64_t;
+#define __DEFINED_u_int64_t
+#endif
+
+#if defined(__NEED_uintmax_t) && !defined(__DEFINED_uintmax_t)
+typedef unsigned _Int64 uintmax_t;
+#define __DEFINED_uintmax_t
+#endif
+
+
+#if defined(__NEED_mode_t) && !defined(__DEFINED_mode_t)
+typedef unsigned mode_t;
+#define __DEFINED_mode_t
+#endif
+
+#if defined(__NEED_nlink_t) && !defined(__DEFINED_nlink_t)
+typedef unsigned _Reg nlink_t;
+#define __DEFINED_nlink_t
+#endif
+
+#if defined(__NEED_off_t) && !defined(__DEFINED_off_t)
+typedef _Int64 off_t;
+#define __DEFINED_off_t
+#endif
+
+#if defined(__NEED_ino_t) && !defined(__DEFINED_ino_t)
+typedef unsigned _Int64 ino_t;
+#define __DEFINED_ino_t
+#endif
+
+#if defined(__NEED_dev_t) && !defined(__DEFINED_dev_t)
+typedef unsigned _Int64 dev_t;
+#define __DEFINED_dev_t
+#endif
+
+#if defined(__NEED_blksize_t) && !defined(__DEFINED_blksize_t)
+typedef long blksize_t;
+#define __DEFINED_blksize_t
+#endif
+
+#if defined(__NEED_blkcnt_t) && !defined(__DEFINED_blkcnt_t)
+typedef _Int64 blkcnt_t;
+#define __DEFINED_blkcnt_t
+#endif
+
+#if defined(__NEED_fsblkcnt_t) && !defined(__DEFINED_fsblkcnt_t)
+typedef unsigned _Int64 fsblkcnt_t;
+#define __DEFINED_fsblkcnt_t
+#endif
+
+#if defined(__NEED_fsfilcnt_t) && !defined(__DEFINED_fsfilcnt_t)
+typedef unsigned _Int64 fsfilcnt_t;
+#define __DEFINED_fsfilcnt_t
+#endif
+
+
+#if defined(__NEED_wint_t) && !defined(__DEFINED_wint_t)
+typedef unsigned wint_t;
+#define __DEFINED_wint_t
+#endif
+
+#if defined(__NEED_wctype_t) && !defined(__DEFINED_wctype_t)
+typedef unsigned long wctype_t;
+#define __DEFINED_wctype_t
+#endif
+
+
+#if defined(__NEED_timer_t) && !defined(__DEFINED_timer_t)
+typedef void * timer_t;
+#define __DEFINED_timer_t
+#endif
+
+#if defined(__NEED_clockid_t) && !defined(__DEFINED_clockid_t)
+typedef int clockid_t;
+#define __DEFINED_clockid_t
+#endif
+
+#if defined(__NEED_clock_t) && !defined(__DEFINED_clock_t)
+typedef long clock_t;
+#define __DEFINED_clock_t
+#endif
+
+#if defined(__NEED_struct_timeval) && !defined(__DEFINED_struct_timeval)
+struct timeval { time_t tv_sec; suseconds_t tv_usec; };
+#define __DEFINED_struct_timeval
+#endif
+
+#if defined(__NEED_struct_timespec) && !defined(__DEFINED_struct_timespec)
+struct timespec { time_t tv_sec; long tv_nsec; };
+#define __DEFINED_struct_timespec
+#endif
+
+
+#if defined(__NEED_pid_t) && !defined(__DEFINED_pid_t)
+typedef int pid_t;
+#define __DEFINED_pid_t
+#endif
+
+#if defined(__NEED_id_t) && !defined(__DEFINED_id_t)
+typedef unsigned id_t;
+#define __DEFINED_id_t
+#endif
+
+#if defined(__NEED_uid_t) && !defined(__DEFINED_uid_t)
+typedef unsigned uid_t;
+#define __DEFINED_uid_t
+#endif
+
+#if defined(__NEED_gid_t) && !defined(__DEFINED_gid_t)
+typedef unsigned gid_t;
+#define __DEFINED_gid_t
+#endif
+
+#if defined(__NEED_key_t) && !defined(__DEFINED_key_t)
+typedef int key_t;
+#define __DEFINED_key_t
+#endif
+
+#if defined(__NEED_useconds_t) && !defined(__DEFINED_useconds_t)
+typedef unsigned useconds_t;
+#define __DEFINED_useconds_t
+#endif
+
+
+#ifdef __cplusplus
+#if defined(__NEED_pthread_t) && !defined(__DEFINED_pthread_t)
+typedef unsigned long pthread_t;
+#define __DEFINED_pthread_t
+#endif
+
+#else
+#if defined(__NEED_pthread_t) && !defined(__DEFINED_pthread_t)
+typedef struct __pthread * pthread_t;
+#define __DEFINED_pthread_t
+#endif
+
+#endif
+#if defined(__NEED_pthread_once_t) && !defined(__DEFINED_pthread_once_t)
+typedef int pthread_once_t;
+#define __DEFINED_pthread_once_t
+#endif
+
+#if defined(__NEED_pthread_key_t) && !defined(__DEFINED_pthread_key_t)
+typedef unsigned pthread_key_t;
+#define __DEFINED_pthread_key_t
+#endif
+
+#if defined(__NEED_pthread_spinlock_t) && !defined(__DEFINED_pthread_spinlock_t)
+typedef int pthread_spinlock_t;
+#define __DEFINED_pthread_spinlock_t
+#endif
+
+#if defined(__NEED_pthread_mutexattr_t) && !defined(__DEFINED_pthread_mutexattr_t)
+typedef struct { unsigned __attr; } pthread_mutexattr_t;
+#define __DEFINED_pthread_mutexattr_t
+#endif
+
+#if defined(__NEED_pthread_condattr_t) && !defined(__DEFINED_pthread_condattr_t)
+typedef struct { unsigned __attr; } pthread_condattr_t;
+#define __DEFINED_pthread_condattr_t
+#endif
+
+#if defined(__NEED_pthread_barrierattr_t) && !defined(__DEFINED_pthread_barrierattr_t)
+typedef struct { unsigned __attr; } pthread_barrierattr_t;
+#define __DEFINED_pthread_barrierattr_t
+#endif
+
+#if defined(__NEED_pthread_rwlockattr_t) && !defined(__DEFINED_pthread_rwlockattr_t)
+typedef struct { unsigned __attr[2]; } pthread_rwlockattr_t;
+#define __DEFINED_pthread_rwlockattr_t
+#endif
+
+
+#if defined(__NEED_FILE) && !defined(__DEFINED_FILE)
+typedef struct _IO_FILE FILE;
+#define __DEFINED_FILE
+#endif
+
+
+#if defined(__NEED_mbstate_t) && !defined(__DEFINED_mbstate_t)
+typedef struct __mbstate_t { unsigned __opaque1, __opaque2; } mbstate_t;
+#define __DEFINED_mbstate_t
+#endif
+
+
+#if defined(__NEED_locale_t) && !defined(__DEFINED_locale_t)
+typedef struct __locale_struct * locale_t;
+#define __DEFINED_locale_t
+#endif
+
+
+#if defined(__NEED_sigset_t) && !defined(__DEFINED_sigset_t)
+typedef struct __sigset_t { unsigned long __bits[128/sizeof(long)]; } sigset_t;
+#define __DEFINED_sigset_t
+#endif
+
+
+#if defined(__NEED_struct_iovec) && !defined(__DEFINED_struct_iovec)
+struct iovec { void *iov_base; size_t iov_len; };
+#define __DEFINED_struct_iovec
+#endif
+
+
+#if defined(__NEED_socklen_t) && !defined(__DEFINED_socklen_t)
+typedef unsigned socklen_t;
+#define __DEFINED_socklen_t
+#endif
+
+#if defined(__NEED_sa_family_t) && !defined(__DEFINED_sa_family_t)
+typedef unsigned short sa_family_t;
+#define __DEFINED_sa_family_t
+#endif
+
+
+#undef _Addr
+#undef _Int64
+#undef _Reg
diff --git a/src/third_party/musl/arch/i386/bits/alltypes.h b/src/third_party/musl/arch/i386/bits/alltypes.h
new file mode 100644
index 0000000..6bbc3ab
--- /dev/null
+++ b/src/third_party/musl/arch/i386/bits/alltypes.h
@@ -0,0 +1,433 @@
+#define _Addr int
+#define _Int64 long long
+#define _Reg int
+
+#if __GNUC__ >= 3
+#if defined(__NEED_va_list) && !defined(__DEFINED_va_list)
+typedef __builtin_va_list va_list;
+#define __DEFINED_va_list
+#endif
+
+#if defined(__NEED___isoc_va_list) && !defined(__DEFINED___isoc_va_list)
+typedef __builtin_va_list __isoc_va_list;
+#define __DEFINED___isoc_va_list
+#endif
+
+#else
+#if defined(__NEED_va_list) && !defined(__DEFINED_va_list)
+typedef struct __va_list * va_list;
+#define __DEFINED_va_list
+#endif
+
+#if defined(__NEED___isoc_va_list) && !defined(__DEFINED___isoc_va_list)
+typedef struct __va_list * __isoc_va_list;
+#define __DEFINED___isoc_va_list
+#endif
+
+#endif
+
+#ifndef __cplusplus
+#ifdef __WCHAR_TYPE__
+#if defined(__NEED_wchar_t) && !defined(__DEFINED_wchar_t)
+typedef __WCHAR_TYPE__ wchar_t;
+#define __DEFINED_wchar_t
+#endif
+
+#else
+#if defined(__NEED_wchar_t) && !defined(__DEFINED_wchar_t)
+typedef long wchar_t;
+#define __DEFINED_wchar_t
+#endif
+
+#endif
+#endif
+
+#if defined(__FLT_EVAL_METHOD__) && __FLT_EVAL_METHOD__ == 0
+#if defined(__NEED_float_t) && !defined(__DEFINED_float_t)
+typedef float float_t;
+#define __DEFINED_float_t
+#endif
+
+#if defined(__NEED_double_t) && !defined(__DEFINED_double_t)
+typedef double double_t;
+#define __DEFINED_double_t
+#endif
+
+#else
+#if defined(__NEED_float_t) && !defined(__DEFINED_float_t)
+typedef long double float_t;
+#define __DEFINED_float_t
+#endif
+
+#if defined(__NEED_double_t) && !defined(__DEFINED_double_t)
+typedef long double double_t;
+#define __DEFINED_double_t
+#endif
+
+#endif
+
+#if !defined(__cplusplus)
+#if defined(__NEED_max_align_t) && !defined(__DEFINED_max_align_t)
+typedef struct { _Alignas(8) long long __ll; long double __ld; } max_align_t;
+#define __DEFINED_max_align_t
+#endif
+
+#elif defined(__GNUC__)
+#if defined(__NEED_max_align_t) && !defined(__DEFINED_max_align_t)
+typedef struct { __attribute__((__aligned__(8))) long long __ll; long double __ld; } max_align_t;
+#define __DEFINED_max_align_t
+#endif
+
+#else
+#if defined(__NEED_max_align_t) && !defined(__DEFINED_max_align_t)
+typedef struct { alignas(8) long long __ll; long double __ld; } max_align_t;
+#define __DEFINED_max_align_t
+#endif
+
+#endif
+
+#if defined(__NEED_time_t) && !defined(__DEFINED_time_t)
+typedef long time_t;
+#define __DEFINED_time_t
+#endif
+
+#if defined(__NEED_suseconds_t) && !defined(__DEFINED_suseconds_t)
+typedef long suseconds_t;
+#define __DEFINED_suseconds_t
+#endif
+
+
+#if defined(__NEED_pthread_attr_t) && !defined(__DEFINED_pthread_attr_t)
+typedef struct { union { int __i[9]; volatile int __vi[9]; unsigned __s[9]; } __u; } pthread_attr_t;
+#define __DEFINED_pthread_attr_t
+#endif
+
+#if defined(__NEED_pthread_mutex_t) && !defined(__DEFINED_pthread_mutex_t)
+typedef struct { union { int __i[6]; volatile int __vi[6]; volatile void *volatile __p[6]; } __u; } pthread_mutex_t;
+#define __DEFINED_pthread_mutex_t
+#endif
+
+#if defined(__NEED_mtx_t) && !defined(__DEFINED_mtx_t)
+typedef struct { union { int __i[6]; volatile int __vi[6]; volatile void *volatile __p[6]; } __u; } mtx_t;
+#define __DEFINED_mtx_t
+#endif
+
+#if defined(__NEED_pthread_cond_t) && !defined(__DEFINED_pthread_cond_t)
+typedef struct { union { int __i[12]; volatile int __vi[12]; void *__p[12]; } __u; } pthread_cond_t;
+#define __DEFINED_pthread_cond_t
+#endif
+
+#if defined(__NEED_cnd_t) && !defined(__DEFINED_cnd_t)
+typedef struct { union { int __i[12]; volatile int __vi[12]; void *__p[12]; } __u; } cnd_t;
+#define __DEFINED_cnd_t
+#endif
+
+#if defined(__NEED_pthread_rwlock_t) && !defined(__DEFINED_pthread_rwlock_t)
+typedef struct { union { int __i[8]; volatile int __vi[8]; void *__p[8]; } __u; } pthread_rwlock_t;
+#define __DEFINED_pthread_rwlock_t
+#endif
+
+#if defined(__NEED_pthread_barrier_t) && !defined(__DEFINED_pthread_barrier_t)
+typedef struct { union { int __i[5]; volatile int __vi[5]; void *__p[5]; } __u; } pthread_barrier_t;
+#define __DEFINED_pthread_barrier_t
+#endif
+
+#if defined(__NEED_size_t) && !defined(__DEFINED_size_t)
+typedef unsigned _Addr size_t;
+#define __DEFINED_size_t
+#endif
+
+#if defined(__NEED_uintptr_t) && !defined(__DEFINED_uintptr_t)
+typedef unsigned _Addr uintptr_t;
+#define __DEFINED_uintptr_t
+#endif
+
+#if defined(__NEED_ptrdiff_t) && !defined(__DEFINED_ptrdiff_t)
+typedef _Addr ptrdiff_t;
+#define __DEFINED_ptrdiff_t
+#endif
+
+#if defined(__NEED_ssize_t) && !defined(__DEFINED_ssize_t)
+typedef _Addr ssize_t;
+#define __DEFINED_ssize_t
+#endif
+
+#if defined(__NEED_intptr_t) && !defined(__DEFINED_intptr_t)
+typedef _Addr intptr_t;
+#define __DEFINED_intptr_t
+#endif
+
+#if defined(__NEED_regoff_t) && !defined(__DEFINED_regoff_t)
+typedef _Addr regoff_t;
+#define __DEFINED_regoff_t
+#endif
+
+#if defined(__NEED_register_t) && !defined(__DEFINED_register_t)
+typedef _Reg register_t;
+#define __DEFINED_register_t
+#endif
+
+
+#if defined(__NEED_int8_t) && !defined(__DEFINED_int8_t)
+typedef signed char     int8_t;
+#define __DEFINED_int8_t
+#endif
+
+#if defined(__NEED_int16_t) && !defined(__DEFINED_int16_t)
+typedef signed short    int16_t;
+#define __DEFINED_int16_t
+#endif
+
+#if defined(__NEED_int32_t) && !defined(__DEFINED_int32_t)
+typedef signed int      int32_t;
+#define __DEFINED_int32_t
+#endif
+
+#if defined(__NEED_int64_t) && !defined(__DEFINED_int64_t)
+typedef signed _Int64   int64_t;
+#define __DEFINED_int64_t
+#endif
+
+#if defined(__NEED_intmax_t) && !defined(__DEFINED_intmax_t)
+typedef signed _Int64   intmax_t;
+#define __DEFINED_intmax_t
+#endif
+
+#if defined(__NEED_uint8_t) && !defined(__DEFINED_uint8_t)
+typedef unsigned char   uint8_t;
+#define __DEFINED_uint8_t
+#endif
+
+#if defined(__NEED_uint16_t) && !defined(__DEFINED_uint16_t)
+typedef unsigned short  uint16_t;
+#define __DEFINED_uint16_t
+#endif
+
+#if defined(__NEED_uint32_t) && !defined(__DEFINED_uint32_t)
+typedef unsigned int    uint32_t;
+#define __DEFINED_uint32_t
+#endif
+
+#if defined(__NEED_uint64_t) && !defined(__DEFINED_uint64_t)
+typedef unsigned _Int64 uint64_t;
+#define __DEFINED_uint64_t
+#endif
+
+#if defined(__NEED_u_int64_t) && !defined(__DEFINED_u_int64_t)
+typedef unsigned _Int64 u_int64_t;
+#define __DEFINED_u_int64_t
+#endif
+
+#if defined(__NEED_uintmax_t) && !defined(__DEFINED_uintmax_t)
+typedef unsigned _Int64 uintmax_t;
+#define __DEFINED_uintmax_t
+#endif
+
+
+#if defined(__NEED_mode_t) && !defined(__DEFINED_mode_t)
+typedef unsigned mode_t;
+#define __DEFINED_mode_t
+#endif
+
+#if defined(__NEED_nlink_t) && !defined(__DEFINED_nlink_t)
+typedef unsigned _Reg nlink_t;
+#define __DEFINED_nlink_t
+#endif
+
+#if defined(__NEED_off_t) && !defined(__DEFINED_off_t)
+typedef _Int64 off_t;
+#define __DEFINED_off_t
+#endif
+
+#if defined(__NEED_ino_t) && !defined(__DEFINED_ino_t)
+typedef unsigned _Int64 ino_t;
+#define __DEFINED_ino_t
+#endif
+
+#if defined(__NEED_dev_t) && !defined(__DEFINED_dev_t)
+typedef unsigned _Int64 dev_t;
+#define __DEFINED_dev_t
+#endif
+
+#if defined(__NEED_blksize_t) && !defined(__DEFINED_blksize_t)
+typedef long blksize_t;
+#define __DEFINED_blksize_t
+#endif
+
+#if defined(__NEED_blkcnt_t) && !defined(__DEFINED_blkcnt_t)
+typedef _Int64 blkcnt_t;
+#define __DEFINED_blkcnt_t
+#endif
+
+#if defined(__NEED_fsblkcnt_t) && !defined(__DEFINED_fsblkcnt_t)
+typedef unsigned _Int64 fsblkcnt_t;
+#define __DEFINED_fsblkcnt_t
+#endif
+
+#if defined(__NEED_fsfilcnt_t) && !defined(__DEFINED_fsfilcnt_t)
+typedef unsigned _Int64 fsfilcnt_t;
+#define __DEFINED_fsfilcnt_t
+#endif
+
+
+#if defined(__NEED_wint_t) && !defined(__DEFINED_wint_t)
+typedef unsigned wint_t;
+#define __DEFINED_wint_t
+#endif
+
+#if defined(__NEED_wctype_t) && !defined(__DEFINED_wctype_t)
+typedef unsigned long wctype_t;
+#define __DEFINED_wctype_t
+#endif
+
+
+#if defined(__NEED_timer_t) && !defined(__DEFINED_timer_t)
+typedef void * timer_t;
+#define __DEFINED_timer_t
+#endif
+
+#if defined(__NEED_clockid_t) && !defined(__DEFINED_clockid_t)
+typedef int clockid_t;
+#define __DEFINED_clockid_t
+#endif
+
+#if defined(__NEED_clock_t) && !defined(__DEFINED_clock_t)
+typedef long clock_t;
+#define __DEFINED_clock_t
+#endif
+
+#if defined(__NEED_struct_timeval) && !defined(__DEFINED_struct_timeval)
+struct timeval { time_t tv_sec; suseconds_t tv_usec; };
+#define __DEFINED_struct_timeval
+#endif
+
+#if defined(__NEED_struct_timespec) && !defined(__DEFINED_struct_timespec)
+struct timespec { time_t tv_sec; long tv_nsec; };
+#define __DEFINED_struct_timespec
+#endif
+
+
+#if defined(__NEED_pid_t) && !defined(__DEFINED_pid_t)
+typedef int pid_t;
+#define __DEFINED_pid_t
+#endif
+
+#if defined(__NEED_id_t) && !defined(__DEFINED_id_t)
+typedef unsigned id_t;
+#define __DEFINED_id_t
+#endif
+
+#if defined(__NEED_uid_t) && !defined(__DEFINED_uid_t)
+typedef unsigned uid_t;
+#define __DEFINED_uid_t
+#endif
+
+#if defined(__NEED_gid_t) && !defined(__DEFINED_gid_t)
+typedef unsigned gid_t;
+#define __DEFINED_gid_t
+#endif
+
+#if defined(__NEED_key_t) && !defined(__DEFINED_key_t)
+typedef int key_t;
+#define __DEFINED_key_t
+#endif
+
+#if defined(__NEED_useconds_t) && !defined(__DEFINED_useconds_t)
+typedef unsigned useconds_t;
+#define __DEFINED_useconds_t
+#endif
+
+
+#ifdef __cplusplus
+#if defined(__NEED_pthread_t) && !defined(__DEFINED_pthread_t)
+typedef unsigned long pthread_t;
+#define __DEFINED_pthread_t
+#endif
+
+#else
+#if defined(__NEED_pthread_t) && !defined(__DEFINED_pthread_t)
+typedef struct __pthread * pthread_t;
+#define __DEFINED_pthread_t
+#endif
+
+#endif
+#if defined(__NEED_pthread_once_t) && !defined(__DEFINED_pthread_once_t)
+typedef int pthread_once_t;
+#define __DEFINED_pthread_once_t
+#endif
+
+#if defined(__NEED_pthread_key_t) && !defined(__DEFINED_pthread_key_t)
+typedef unsigned pthread_key_t;
+#define __DEFINED_pthread_key_t
+#endif
+
+#if defined(__NEED_pthread_spinlock_t) && !defined(__DEFINED_pthread_spinlock_t)
+typedef int pthread_spinlock_t;
+#define __DEFINED_pthread_spinlock_t
+#endif
+
+#if defined(__NEED_pthread_mutexattr_t) && !defined(__DEFINED_pthread_mutexattr_t)
+typedef struct { unsigned __attr; } pthread_mutexattr_t;
+#define __DEFINED_pthread_mutexattr_t
+#endif
+
+#if defined(__NEED_pthread_condattr_t) && !defined(__DEFINED_pthread_condattr_t)
+typedef struct { unsigned __attr; } pthread_condattr_t;
+#define __DEFINED_pthread_condattr_t
+#endif
+
+#if defined(__NEED_pthread_barrierattr_t) && !defined(__DEFINED_pthread_barrierattr_t)
+typedef struct { unsigned __attr; } pthread_barrierattr_t;
+#define __DEFINED_pthread_barrierattr_t
+#endif
+
+#if defined(__NEED_pthread_rwlockattr_t) && !defined(__DEFINED_pthread_rwlockattr_t)
+typedef struct { unsigned __attr[2]; } pthread_rwlockattr_t;
+#define __DEFINED_pthread_rwlockattr_t
+#endif
+
+
+#if defined(__NEED_FILE) && !defined(__DEFINED_FILE)
+typedef struct _IO_FILE FILE;
+#define __DEFINED_FILE
+#endif
+
+
+#if defined(__NEED_mbstate_t) && !defined(__DEFINED_mbstate_t)
+typedef struct __mbstate_t { unsigned __opaque1, __opaque2; } mbstate_t;
+#define __DEFINED_mbstate_t
+#endif
+
+
+#if defined(__NEED_locale_t) && !defined(__DEFINED_locale_t)
+typedef struct __locale_struct * locale_t;
+#define __DEFINED_locale_t
+#endif
+
+
+#if defined(__NEED_sigset_t) && !defined(__DEFINED_sigset_t)
+typedef struct __sigset_t { unsigned long __bits[128/sizeof(long)]; } sigset_t;
+#define __DEFINED_sigset_t
+#endif
+
+
+#if defined(__NEED_struct_iovec) && !defined(__DEFINED_struct_iovec)
+struct iovec { void *iov_base; size_t iov_len; };
+#define __DEFINED_struct_iovec
+#endif
+
+
+#if defined(__NEED_socklen_t) && !defined(__DEFINED_socklen_t)
+typedef unsigned socklen_t;
+#define __DEFINED_socklen_t
+#endif
+
+#if defined(__NEED_sa_family_t) && !defined(__DEFINED_sa_family_t)
+typedef unsigned short sa_family_t;
+#define __DEFINED_sa_family_t
+#endif
+
+
+#undef _Addr
+#undef _Int64
+#undef _Reg
diff --git a/src/third_party/musl/arch/mips/bits/alltypes.h b/src/third_party/musl/arch/mips/bits/alltypes.h
new file mode 100644
index 0000000..2d70952
--- /dev/null
+++ b/src/third_party/musl/arch/mips/bits/alltypes.h
@@ -0,0 +1,385 @@
+#define _Addr int
+#define _Int64 long long
+#define _Reg int
+
+#if defined(__NEED_va_list) && !defined(__DEFINED_va_list)
+typedef __builtin_va_list va_list;
+#define __DEFINED_va_list
+#endif
+
+#if defined(__NEED___isoc_va_list) && !defined(__DEFINED___isoc_va_list)
+typedef __builtin_va_list __isoc_va_list;
+#define __DEFINED___isoc_va_list
+#endif
+
+
+#ifndef __cplusplus
+#if defined(__NEED_wchar_t) && !defined(__DEFINED_wchar_t)
+typedef int wchar_t;
+#define __DEFINED_wchar_t
+#endif
+
+#endif
+
+#if defined(__NEED_float_t) && !defined(__DEFINED_float_t)
+typedef float float_t;
+#define __DEFINED_float_t
+#endif
+
+#if defined(__NEED_double_t) && !defined(__DEFINED_double_t)
+typedef double double_t;
+#define __DEFINED_double_t
+#endif
+
+
+#if defined(__NEED_max_align_t) && !defined(__DEFINED_max_align_t)
+typedef struct { long long __ll; long double __ld; } max_align_t;
+#define __DEFINED_max_align_t
+#endif
+
+
+#if defined(__NEED_time_t) && !defined(__DEFINED_time_t)
+typedef long time_t;
+#define __DEFINED_time_t
+#endif
+
+#if defined(__NEED_suseconds_t) && !defined(__DEFINED_suseconds_t)
+typedef long suseconds_t;
+#define __DEFINED_suseconds_t
+#endif
+
+
+#if defined(__NEED_pthread_attr_t) && !defined(__DEFINED_pthread_attr_t)
+typedef struct { union { int __i[9]; volatile int __vi[9]; unsigned __s[9]; } __u; } pthread_attr_t;
+#define __DEFINED_pthread_attr_t
+#endif
+
+#if defined(__NEED_pthread_mutex_t) && !defined(__DEFINED_pthread_mutex_t)
+typedef struct { union { int __i[6]; volatile int __vi[6]; volatile void *volatile __p[6]; } __u; } pthread_mutex_t;
+#define __DEFINED_pthread_mutex_t
+#endif
+
+#if defined(__NEED_mtx_t) && !defined(__DEFINED_mtx_t)
+typedef struct { union { int __i[6]; volatile int __vi[6]; volatile void *volatile __p[6]; } __u; } mtx_t;
+#define __DEFINED_mtx_t
+#endif
+
+#if defined(__NEED_pthread_cond_t) && !defined(__DEFINED_pthread_cond_t)
+typedef struct { union { int __i[12]; volatile int __vi[12]; void *__p[12]; } __u; } pthread_cond_t;
+#define __DEFINED_pthread_cond_t
+#endif
+
+#if defined(__NEED_cnd_t) && !defined(__DEFINED_cnd_t)
+typedef struct { union { int __i[12]; volatile int __vi[12]; void *__p[12]; } __u; } cnd_t;
+#define __DEFINED_cnd_t
+#endif
+
+#if defined(__NEED_pthread_rwlock_t) && !defined(__DEFINED_pthread_rwlock_t)
+typedef struct { union { int __i[8]; volatile int __vi[8]; void *__p[8]; } __u; } pthread_rwlock_t;
+#define __DEFINED_pthread_rwlock_t
+#endif
+
+#if defined(__NEED_pthread_barrier_t) && !defined(__DEFINED_pthread_barrier_t)
+typedef struct { union { int __i[5]; volatile int __vi[5]; void *__p[5]; } __u; } pthread_barrier_t;
+#define __DEFINED_pthread_barrier_t
+#endif
+
+#if defined(__NEED_size_t) && !defined(__DEFINED_size_t)
+typedef unsigned _Addr size_t;
+#define __DEFINED_size_t
+#endif
+
+#if defined(__NEED_uintptr_t) && !defined(__DEFINED_uintptr_t)
+typedef unsigned _Addr uintptr_t;
+#define __DEFINED_uintptr_t
+#endif
+
+#if defined(__NEED_ptrdiff_t) && !defined(__DEFINED_ptrdiff_t)
+typedef _Addr ptrdiff_t;
+#define __DEFINED_ptrdiff_t
+#endif
+
+#if defined(__NEED_ssize_t) && !defined(__DEFINED_ssize_t)
+typedef _Addr ssize_t;
+#define __DEFINED_ssize_t
+#endif
+
+#if defined(__NEED_intptr_t) && !defined(__DEFINED_intptr_t)
+typedef _Addr intptr_t;
+#define __DEFINED_intptr_t
+#endif
+
+#if defined(__NEED_regoff_t) && !defined(__DEFINED_regoff_t)
+typedef _Addr regoff_t;
+#define __DEFINED_regoff_t
+#endif
+
+#if defined(__NEED_register_t) && !defined(__DEFINED_register_t)
+typedef _Reg register_t;
+#define __DEFINED_register_t
+#endif
+
+
+#if defined(__NEED_int8_t) && !defined(__DEFINED_int8_t)
+typedef signed char     int8_t;
+#define __DEFINED_int8_t
+#endif
+
+#if defined(__NEED_int16_t) && !defined(__DEFINED_int16_t)
+typedef signed short    int16_t;
+#define __DEFINED_int16_t
+#endif
+
+#if defined(__NEED_int32_t) && !defined(__DEFINED_int32_t)
+typedef signed int      int32_t;
+#define __DEFINED_int32_t
+#endif
+
+#if defined(__NEED_int64_t) && !defined(__DEFINED_int64_t)
+typedef signed _Int64   int64_t;
+#define __DEFINED_int64_t
+#endif
+
+#if defined(__NEED_intmax_t) && !defined(__DEFINED_intmax_t)
+typedef signed _Int64   intmax_t;
+#define __DEFINED_intmax_t
+#endif
+
+#if defined(__NEED_uint8_t) && !defined(__DEFINED_uint8_t)
+typedef unsigned char   uint8_t;
+#define __DEFINED_uint8_t
+#endif
+
+#if defined(__NEED_uint16_t) && !defined(__DEFINED_uint16_t)
+typedef unsigned short  uint16_t;
+#define __DEFINED_uint16_t
+#endif
+
+#if defined(__NEED_uint32_t) && !defined(__DEFINED_uint32_t)
+typedef unsigned int    uint32_t;
+#define __DEFINED_uint32_t
+#endif
+
+#if defined(__NEED_uint64_t) && !defined(__DEFINED_uint64_t)
+typedef unsigned _Int64 uint64_t;
+#define __DEFINED_uint64_t
+#endif
+
+#if defined(__NEED_u_int64_t) && !defined(__DEFINED_u_int64_t)
+typedef unsigned _Int64 u_int64_t;
+#define __DEFINED_u_int64_t
+#endif
+
+#if defined(__NEED_uintmax_t) && !defined(__DEFINED_uintmax_t)
+typedef unsigned _Int64 uintmax_t;
+#define __DEFINED_uintmax_t
+#endif
+
+
+#if defined(__NEED_mode_t) && !defined(__DEFINED_mode_t)
+typedef unsigned mode_t;
+#define __DEFINED_mode_t
+#endif
+
+#if defined(__NEED_nlink_t) && !defined(__DEFINED_nlink_t)
+typedef unsigned _Reg nlink_t;
+#define __DEFINED_nlink_t
+#endif
+
+#if defined(__NEED_off_t) && !defined(__DEFINED_off_t)
+typedef _Int64 off_t;
+#define __DEFINED_off_t
+#endif
+
+#if defined(__NEED_ino_t) && !defined(__DEFINED_ino_t)
+typedef unsigned _Int64 ino_t;
+#define __DEFINED_ino_t
+#endif
+
+#if defined(__NEED_dev_t) && !defined(__DEFINED_dev_t)
+typedef unsigned _Int64 dev_t;
+#define __DEFINED_dev_t
+#endif
+
+#if defined(__NEED_blksize_t) && !defined(__DEFINED_blksize_t)
+typedef long blksize_t;
+#define __DEFINED_blksize_t
+#endif
+
+#if defined(__NEED_blkcnt_t) && !defined(__DEFINED_blkcnt_t)
+typedef _Int64 blkcnt_t;
+#define __DEFINED_blkcnt_t
+#endif
+
+#if defined(__NEED_fsblkcnt_t) && !defined(__DEFINED_fsblkcnt_t)
+typedef unsigned _Int64 fsblkcnt_t;
+#define __DEFINED_fsblkcnt_t
+#endif
+
+#if defined(__NEED_fsfilcnt_t) && !defined(__DEFINED_fsfilcnt_t)
+typedef unsigned _Int64 fsfilcnt_t;
+#define __DEFINED_fsfilcnt_t
+#endif
+
+
+#if defined(__NEED_wint_t) && !defined(__DEFINED_wint_t)
+typedef unsigned wint_t;
+#define __DEFINED_wint_t
+#endif
+
+#if defined(__NEED_wctype_t) && !defined(__DEFINED_wctype_t)
+typedef unsigned long wctype_t;
+#define __DEFINED_wctype_t
+#endif
+
+
+#if defined(__NEED_timer_t) && !defined(__DEFINED_timer_t)
+typedef void * timer_t;
+#define __DEFINED_timer_t
+#endif
+
+#if defined(__NEED_clockid_t) && !defined(__DEFINED_clockid_t)
+typedef int clockid_t;
+#define __DEFINED_clockid_t
+#endif
+
+#if defined(__NEED_clock_t) && !defined(__DEFINED_clock_t)
+typedef long clock_t;
+#define __DEFINED_clock_t
+#endif
+
+#if defined(__NEED_struct_timeval) && !defined(__DEFINED_struct_timeval)
+struct timeval { time_t tv_sec; suseconds_t tv_usec; };
+#define __DEFINED_struct_timeval
+#endif
+
+#if defined(__NEED_struct_timespec) && !defined(__DEFINED_struct_timespec)
+struct timespec { time_t tv_sec; long tv_nsec; };
+#define __DEFINED_struct_timespec
+#endif
+
+
+#if defined(__NEED_pid_t) && !defined(__DEFINED_pid_t)
+typedef int pid_t;
+#define __DEFINED_pid_t
+#endif
+
+#if defined(__NEED_id_t) && !defined(__DEFINED_id_t)
+typedef unsigned id_t;
+#define __DEFINED_id_t
+#endif
+
+#if defined(__NEED_uid_t) && !defined(__DEFINED_uid_t)
+typedef unsigned uid_t;
+#define __DEFINED_uid_t
+#endif
+
+#if defined(__NEED_gid_t) && !defined(__DEFINED_gid_t)
+typedef unsigned gid_t;
+#define __DEFINED_gid_t
+#endif
+
+#if defined(__NEED_key_t) && !defined(__DEFINED_key_t)
+typedef int key_t;
+#define __DEFINED_key_t
+#endif
+
+#if defined(__NEED_useconds_t) && !defined(__DEFINED_useconds_t)
+typedef unsigned useconds_t;
+#define __DEFINED_useconds_t
+#endif
+
+
+#ifdef __cplusplus
+#if defined(__NEED_pthread_t) && !defined(__DEFINED_pthread_t)
+typedef unsigned long pthread_t;
+#define __DEFINED_pthread_t
+#endif
+
+#else
+#if defined(__NEED_pthread_t) && !defined(__DEFINED_pthread_t)
+typedef struct __pthread * pthread_t;
+#define __DEFINED_pthread_t
+#endif
+
+#endif
+#if defined(__NEED_pthread_once_t) && !defined(__DEFINED_pthread_once_t)
+typedef int pthread_once_t;
+#define __DEFINED_pthread_once_t
+#endif
+
+#if defined(__NEED_pthread_key_t) && !defined(__DEFINED_pthread_key_t)
+typedef unsigned pthread_key_t;
+#define __DEFINED_pthread_key_t
+#endif
+
+#if defined(__NEED_pthread_spinlock_t) && !defined(__DEFINED_pthread_spinlock_t)
+typedef int pthread_spinlock_t;
+#define __DEFINED_pthread_spinlock_t
+#endif
+
+#if defined(__NEED_pthread_mutexattr_t) && !defined(__DEFINED_pthread_mutexattr_t)
+typedef struct { unsigned __attr; } pthread_mutexattr_t;
+#define __DEFINED_pthread_mutexattr_t
+#endif
+
+#if defined(__NEED_pthread_condattr_t) && !defined(__DEFINED_pthread_condattr_t)
+typedef struct { unsigned __attr; } pthread_condattr_t;
+#define __DEFINED_pthread_condattr_t
+#endif
+
+#if defined(__NEED_pthread_barrierattr_t) && !defined(__DEFINED_pthread_barrierattr_t)
+typedef struct { unsigned __attr; } pthread_barrierattr_t;
+#define __DEFINED_pthread_barrierattr_t
+#endif
+
+#if defined(__NEED_pthread_rwlockattr_t) && !defined(__DEFINED_pthread_rwlockattr_t)
+typedef struct { unsigned __attr[2]; } pthread_rwlockattr_t;
+#define __DEFINED_pthread_rwlockattr_t
+#endif
+
+
+#if defined(__NEED_FILE) && !defined(__DEFINED_FILE)
+typedef struct _IO_FILE FILE;
+#define __DEFINED_FILE
+#endif
+
+
+#if defined(__NEED_mbstate_t) && !defined(__DEFINED_mbstate_t)
+typedef struct __mbstate_t { unsigned __opaque1, __opaque2; } mbstate_t;
+#define __DEFINED_mbstate_t
+#endif
+
+
+#if defined(__NEED_locale_t) && !defined(__DEFINED_locale_t)
+typedef struct __locale_struct * locale_t;
+#define __DEFINED_locale_t
+#endif
+
+
+#if defined(__NEED_sigset_t) && !defined(__DEFINED_sigset_t)
+typedef struct __sigset_t { unsigned long __bits[128/sizeof(long)]; } sigset_t;
+#define __DEFINED_sigset_t
+#endif
+
+
+#if defined(__NEED_struct_iovec) && !defined(__DEFINED_struct_iovec)
+struct iovec { void *iov_base; size_t iov_len; };
+#define __DEFINED_struct_iovec
+#endif
+
+
+#if defined(__NEED_socklen_t) && !defined(__DEFINED_socklen_t)
+typedef unsigned socklen_t;
+#define __DEFINED_socklen_t
+#endif
+
+#if defined(__NEED_sa_family_t) && !defined(__DEFINED_sa_family_t)
+typedef unsigned short sa_family_t;
+#define __DEFINED_sa_family_t
+#endif
+
+
+#undef _Addr
+#undef _Int64
+#undef _Reg
diff --git a/src/third_party/musl/generated/include/bits/alltypes.h b/src/third_party/musl/arch/x86_64/bits/alltypes.h
similarity index 100%
rename from src/third_party/musl/generated/include/bits/alltypes.h
rename to src/third_party/musl/arch/x86_64/bits/alltypes.h
diff --git a/src/third_party/musl/generate.sh b/src/third_party/musl/generate.sh
new file mode 100755
index 0000000..a3d7285
--- /dev/null
+++ b/src/third_party/musl/generate.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+sed -f tools/mkalltypes.sed arch/aarch64/bits/alltypes.h.in  include/alltypes.h.in > arch/aarch64/bits/alltypes.h
+sed -f tools/mkalltypes.sed arch/arm/bits/alltypes.h.in include/alltypes.h.in > arch/arm/bits/alltypes.h
+sed -f tools/mkalltypes.sed arch/x86_64/bits/alltypes.h.in include/alltypes.h.in > arch/x86_64/bits/alltypes.h
+sed -f tools/mkalltypes.sed arch/i386/bits/alltypes.h.in include/alltypes.h.in > arch/i386/bits/alltypes.h
+sed -f tools/mkalltypes.sed arch/mips/bits/alltypes.h.in include/alltypes.h.in > arch/mips/bits/alltypes.h
+
diff --git a/src/third_party/musl/generated/README.md b/src/third_party/musl/generated/README.md
deleted file mode 100644
index ae1726d..0000000
--- a/src/third_party/musl/generated/README.md
+++ /dev/null
@@ -1,4 +0,0 @@
-This directory contains generated headers made by
-running "./configure && make" on a stock Google Rodete machine.
-
-TODO: Generate these via the Cobalt gyp build.
diff --git a/src/third_party/musl/musl.gyp b/src/third_party/musl/musl.gyp
index 58afe2f..895e07f 100644
--- a/src/third_party/musl/musl.gyp
+++ b/src/third_party/musl/musl.gyp
@@ -57,7 +57,6 @@
         '-isystem<(DEPTH)/third_party/musl/include',
         '-isystem<(DEPTH)/third_party/musl/arch/x86_64',
         '-isystem<(DEPTH)/third_party/musl/arch/generic',
-        '-isystem<(DEPTH)/third_party/musl/generated/include',
         '-w',
       ],
       'direct_dependent_settings': {
@@ -77,19 +76,25 @@
       'conditions': [
         ['musl_arch in ["i386", "x86_64", "aarch64"]', {
           'sources': [
-            'src/fenv/<(musl_arch)/fenv.s'
+            'src/fenv/<(musl_arch)/fenv.s',
+            'src/setjmp/<(musl_arch)/setjmp.s',
+            'src/setjmp/<(musl_arch)/longjmp.s',
           ],
         }],
         ['musl_arch == "arm"', {
           'sources': [
             'src/fenv/arm/fenv.c',
-            'src/fenv/arm/fenv-hf.S'
+            'src/fenv/arm/fenv-hf.S',
+            'src/setjmp/<(musl_arch)/setjmp.s',
+            'src/setjmp/<(musl_arch)/longjmp.s',
           ],
         }],
         ['musl_arch == "mips"', {
           'sources': [
             'src/fenv/mips/fenv.S,',
-            'src/fenv/mips/fenv-sf.c'
+            'src/fenv/mips/fenv-sf.c',
+            'src/setjmp/<(musl_arch)/setjmp.S',
+            'src/setjmp/<(musl_arch)/longjmp.S',
           ],
         }],
         ['musl_arch in ["i386", "x86_64"]', {
@@ -123,6 +128,7 @@
             'src/starboard/ctype/__ctype_get_mb_cur_max.c',
             'src/starboard/errno/__errno_location.c',
             'src/starboard/exit/abort.c',
+            'src/starboard/hwcap/sethwcap.c',
             'src/starboard/locale/freelocale.c',
             'src/starboard/locale/langinfo.c',
             'src/starboard/locale/localeconv.c',
diff --git a/src/third_party/musl/src/math/rint.c b/src/third_party/musl/src/math/rint.c
index dd14bf6..54414b5 100644
--- a/src/third_party/musl/src/math/rint.c
+++ b/src/third_party/musl/src/math/rint.c
@@ -1,6 +1,7 @@
 #include <float.h>
 #include <math.h>
 #include <stdint.h>
+#include "libc.h"
 
 #if FLT_EVAL_METHOD==0 || FLT_EVAL_METHOD==1
 #define EPS DBL_EPSILON
@@ -31,3 +32,7 @@
 		return s ? -0.0 : 0;
 	return y;
 }
+
+#ifdef COBALT_MUSL_W_GLIBC_HEADERS
+weak_alias(rint_internal, rint);
+#endif  // COBALT_MUSL_W_GLIBC_HEADERS
diff --git a/src/third_party/musl/src/starboard/hwcap/sethwcap.c b/src/third_party/musl/src/starboard/hwcap/sethwcap.c
new file mode 100644
index 0000000..8f54cd6
--- /dev/null
+++ b/src/third_party/musl/src/starboard/hwcap/sethwcap.c
@@ -0,0 +1,15 @@
+#include "hwcap_impl.h"
+#include "libc.h"
+#include "starboard/cpu_features.h"
+
+size_t __hwcap;
+
+// Set __hwcap bitmask by Starboard CPU features API.
+void init_musl_hwcap() {
+  SbCPUFeatures features;
+  if (SbCPUFeaturesGet(&features)) {
+    __hwcap = features.hwcap;
+  } else {
+    __hwcap = 0;
+  }
+}
diff --git a/src/third_party/musl/src/starboard/internal/hwcap_impl.h b/src/third_party/musl/src/starboard/internal/hwcap_impl.h
new file mode 100644
index 0000000..4039e08
--- /dev/null
+++ b/src/third_party/musl/src/starboard/internal/hwcap_impl.h
@@ -0,0 +1,14 @@
+#ifndef _HWCAP_IMPL_H_
+#define _HWCAP_IMPL_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif  // __cplusplus
+
+void init_musl_hwcap();
+
+#ifdef __cplusplus
+}  // extern "C"
+#endif  // __cplusplus
+
+#endif
diff --git a/src/v8/gypfiles/toolchain.gypi b/src/v8/gypfiles/toolchain.gypi
index fce4d07..14183a9 100644
--- a/src/v8/gypfiles/toolchain.gypi
+++ b/src/v8/gypfiles/toolchain.gypi
@@ -158,12 +158,14 @@
     }],
   ],
   'target_defaults': {
-    'ldflags_host': [
-      # mksnapshot can not be compiled on host machine with default clang
-      # linker.
-      '-fuse-ld=lld',
-    ],
     'conditions': [
+      ['clang==1', {
+        'ldflags_host': [
+          # mksnapshot can not be compiled on host machine with default clang
+          # linker.
+          '-fuse-ld=lld',
+        ],
+      }],
       ['v8_target_arch=="arm"', {
         'defines': [
           'V8_TARGET_ARCH_ARM',
diff --git a/src/v8/src/builtins/builtins-regexp-gen.cc b/src/v8/src/builtins/builtins-regexp-gen.cc
index 4227c62..34e8af9 100644
--- a/src/v8/src/builtins/builtins-regexp-gen.cc
+++ b/src/v8/src/builtins/builtins-regexp-gen.cc
@@ -2022,10 +2022,7 @@
             Node* const result_fixed_array = LoadElements(result);
             Node* const match = LoadFixedArrayElement(result_fixed_array, 0);
 
-            // The match is guaranteed to be a string on the fast path.
-            CSA_ASSERT(this, IsString(match));
-
-            var_match.Bind(match);
+            var_match.Bind(ToString_Inline(context, match));
             Goto(&if_didmatch);
           }
 
diff --git a/src/v8/src/regexp/regexp-utils.cc b/src/v8/src/regexp/regexp-utils.cc
index d483125..4030ad4 100644
--- a/src/v8/src/regexp/regexp-utils.cc
+++ b/src/v8/src/regexp/regexp-utils.cc
@@ -35,7 +35,7 @@
 
 namespace {
 
-V8_INLINE bool HasInitialRegExpMap(Isolate* isolate, Handle<JSReceiver> recv) {
+V8_INLINE bool HasInitialRegExpMap(Isolate* isolate, JSReceiver* recv) {
   return recv->map() == isolate->regexp_function()->initial_map();
 }
 
@@ -46,7 +46,7 @@
                                               uint64_t value) {
   Handle<Object> value_as_object =
       isolate->factory()->NewNumberFromInt64(value);
-  if (HasInitialRegExpMap(isolate, recv)) {
+  if (HasInitialRegExpMap(isolate, *recv)) {
     JSRegExp::cast(*recv)->set_last_index(*value_as_object, SKIP_WRITE_BARRIER);
     return recv;
   } else {
@@ -57,7 +57,7 @@
 
 MaybeHandle<Object> RegExpUtils::GetLastIndex(Isolate* isolate,
                                               Handle<JSReceiver> recv) {
-  if (HasInitialRegExpMap(isolate, recv)) {
+  if (HasInitialRegExpMap(isolate, *recv)) {
     return handle(JSRegExp::cast(*recv)->last_index(), isolate);
   } else {
     return Object::GetProperty(recv, isolate->factory()->lastIndex_string());
@@ -142,9 +142,7 @@
 
   JSReceiver* recv = JSReceiver::cast(*obj);
 
-  // Check the receiver's map.
-  Handle<JSFunction> regexp_function = isolate->regexp_function();
-  if (recv->map() != regexp_function->initial_map()) return false;
+  if (!HasInitialRegExpMap(isolate, recv)) return false;
 
   // Check the receiver's prototype's map.
   Object* proto = recv->map()->prototype();
diff --git a/src/v8/src/runtime/runtime-regexp.cc b/src/v8/src/runtime/runtime-regexp.cc
index d0afcd2..135853a 100644
--- a/src/v8/src/runtime/runtime-regexp.cc
+++ b/src/v8/src/runtime/runtime-regexp.cc
@@ -1303,10 +1303,9 @@
 MUST_USE_RESULT MaybeHandle<String> RegExpReplace(Isolate* isolate,
                                                   Handle<JSRegExp> regexp,
                                                   Handle<String> string,
-                                                  Handle<Object> replace_obj) {
+                                                  Handle<String> replace) {
   // Functional fast-paths are dispatched directly by replace builtin.
   DCHECK(RegExpUtils::IsUnmodifiedRegExp(isolate, regexp));
-  DCHECK(!replace_obj->IsCallable());
 
   Factory* factory = isolate->factory();
 
@@ -1314,9 +1313,6 @@
   const bool global = (flags & JSRegExp::kGlobal) != 0;
   const bool sticky = (flags & JSRegExp::kSticky) != 0;
 
-  Handle<String> replace;
-  ASSIGN_RETURN_ON_EXCEPTION(isolate, replace,
-                             Object::ToString(isolate, replace_obj), String);
   replace = String::Flatten(replace);
 
   Handle<RegExpMatchInfo> last_match_info = isolate->regexp_last_match_info();
@@ -1411,18 +1407,23 @@
   CONVERT_ARG_HANDLE_CHECKED(String, subject, 1);
   CONVERT_ARG_HANDLE_CHECKED(RegExpMatchInfo, last_match_info, 2);
   CONVERT_ARG_HANDLE_CHECKED(JSArray, result_array, 3);
+
+  DCHECK(RegExpUtils::IsUnmodifiedRegExp(isolate, regexp));
   CHECK(result_array->HasObjectElements());
 
   subject = String::Flatten(subject);
   CHECK(regexp->GetFlags() & JSRegExp::kGlobal);
 
+  Object* result;
   if (regexp->CaptureCount() == 0) {
-    return SearchRegExpMultiple<false>(isolate, subject, regexp,
-                                       last_match_info, result_array);
+    result = SearchRegExpMultiple<false>(isolate, subject, regexp,
+                                         last_match_info, result_array);
   } else {
-    return SearchRegExpMultiple<true>(isolate, subject, regexp, last_match_info,
-                                      result_array);
+    result = SearchRegExpMultiple<true>(isolate, subject, regexp,
+                                        last_match_info, result_array);
   }
+  DCHECK(RegExpUtils::IsUnmodifiedRegExp(isolate, regexp));
+  return result;
 }
 
 RUNTIME_FUNCTION(Runtime_StringReplaceNonGlobalRegExpWithFunction) {
@@ -1737,14 +1738,6 @@
 
   string = String::Flatten(string);
 
-  // Fast-path for unmodified JSRegExps.
-  if (RegExpUtils::IsUnmodifiedRegExp(isolate, recv)) {
-    RETURN_RESULT_OR_FAILURE(
-        isolate, RegExpReplace(isolate, Handle<JSRegExp>::cast(recv), string,
-                               replace_obj));
-  }
-
-  const uint32_t length = string->length();
   const bool functional_replace = replace_obj->IsCallable();
 
   Handle<String> replace;
@@ -1753,6 +1746,21 @@
                                        Object::ToString(isolate, replace_obj));
   }
 
+  // Fast-path for unmodified JSRegExps (and non-functional replace).
+  if (RegExpUtils::IsUnmodifiedRegExp(isolate, recv)) {
+    // We should never get here with functional replace because unmodified
+    // regexp and functional replace should be fully handled in CSA code.
+    CHECK(!functional_replace);
+    Handle<Object> result;
+    ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
+        isolate, result,
+        RegExpReplace(isolate, Handle<JSRegExp>::cast(recv), string, replace));
+    DCHECK(RegExpUtils::IsUnmodifiedRegExp(isolate, recv));
+    return *result;
+  }
+
+  const uint32_t length = string->length();
+
   Handle<Object> global_obj;
   ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
       isolate, global_obj,
diff --git a/src/v8/src/wasm/baseline/liftoff-compiler.cc b/src/v8/src/wasm/baseline/liftoff-compiler.cc
index 255ee03..0acbc07 100644
--- a/src/v8/src/wasm/baseline/liftoff-compiler.cc
+++ b/src/v8/src/wasm/baseline/liftoff-compiler.cc
@@ -62,8 +62,13 @@
 
 class LiftoffCompiler {
  public:
+  // This was causing cascading build errors when compiling v8 for the older
+  // clang compilers.Some private variables of this class have their move
+  // constructor implicitly deleted. Trying to fix that causes a chain of
+  // deleting the move constructor for multiple classes.
+#if !defined(V8_OS_STARBOARD)
   MOVE_ONLY_NO_DEFAULT_CONSTRUCTOR(LiftoffCompiler);
-
+#endif
   // TODO(clemensh): Make this a template parameter.
   static constexpr wasm::Decoder::ValidateFlag validate =
       wasm::Decoder::kValidate;
diff --git a/src/v8/src/wasm/wasm-debug.cc b/src/v8/src/wasm/wasm-debug.cc
index 87995df..60366bd 100644
--- a/src/v8/src/wasm/wasm-debug.cc
+++ b/src/v8/src/wasm/wasm-debug.cc
@@ -92,7 +92,13 @@
 }
 
 class InterpreterHandle {
+  // This was causing cascading build errors when compiling v8 for the older
+  // clang compilers.Some private variables of this class have their move
+  // constructor implicitly deleted. Trying to fix that causes a chain of
+  // deleting the move constructor for multiple classes.
+#if !defined(V8_OS_STARBOARD)
   MOVE_ONLY_NO_DEFAULT_CONSTRUCTOR(InterpreterHandle);
+#endif
   Isolate* isolate_;
   const WasmModule* module_;
   WasmInterpreter interpreter_;
diff --git a/src/v8/src/x64/assembler-x64.cc b/src/v8/src/x64/assembler-x64.cc
index c8f326e..1b768de 100644
--- a/src/v8/src/x64/assembler-x64.cc
+++ b/src/v8/src/x64/assembler-x64.cc
@@ -36,9 +36,10 @@
 
 namespace {
 
-#if !V8_LIBC_MSVCRT
-
-V8_INLINE uint64_t _xgetbv(unsigned int xcr) {
+V8_INLINE uint64_t xgetbv(unsigned int xcr) {
+#if V8_LIBC_MSVCRT
+  return _xgetbv(xcr);
+#else
   unsigned eax, edx;
   // Check xgetbv; this uses a .byte sequence instead of the instruction
   // directly because older assemblers do not include support for xgetbv and
@@ -46,13 +47,9 @@
   // used.
   __asm__ volatile(".byte 0x0F, 0x01, 0xD0" : "=a"(eax), "=d"(edx) : "c"(xcr));
   return static_cast<uint64_t>(eax) | (static_cast<uint64_t>(edx) << 32);
+#endif
 }
 
-#define _XCR_XFEATURE_ENABLED_MASK 0
-
-#endif  // !V8_LIBC_MSVCRT
-
-
 bool OSHasAVXSupport() {
 #if V8_OS_MACOSX
   // Mac OS X up to 10.9 has a bug where AVX transitions were indeed being
@@ -72,7 +69,7 @@
   if (kernel_version_major <= 13) return false;
 #endif  // V8_OS_MACOSX
   // Check whether OS claims to support AVX.
-  uint64_t feature_mask = _xgetbv(_XCR_XFEATURE_ENABLED_MASK);
+  uint64_t feature_mask = xgetbv(0);  // XCR_XFEATURE_ENABLED_MASK
   return (feature_mask & 0x6) == 0x6;
 }