Roll Mojo to b88737ed62969ce3203085748f0d53ff4f09ba5b.

This entailed also rolling buildtools and build/config, and copying a
few things over from the Mojo repo (at the above revision), in
particular third_party/android_platform. (As a bonus, I also updated
clang to the same version used by the Mojo repo.)

I also had to update uses of mojom enums (from MY_ENUM_VALUE to
MyEnum::VALUE).

R=jamesr@chromium.org

Review URL: https://codereview.chromium.org/1399343002 .
diff --git a/DEPS b/DEPS
index d128aa7..6055c40 100644
--- a/DEPS
+++ b/DEPS
@@ -19,7 +19,7 @@
 
 vars = {
   'chromium_git': 'https://chromium.googlesource.com',
-  'buildtools_revision': '15308f469a704c45d15567fa69cd94ce07ad0e1b',
+  'buildtools_revision': '565d04e8741429fb1b4f26d102f2c6c3b849edeb',
   'boringssl_revision': 'a7997f12be358e58aeb2345bb8b88a9d53240024',
 }
 
@@ -35,7 +35,7 @@
    Var('chromium_git') + '/chromium/src/base.git' + '@' +  '664aee2139dbf56a3b9ce75cd3ccb7581b92035f',
 
   'src/build/config':
-   Var('chromium_git') + '/chromium/src/build/config.git' + '@' +  '7b232bf79c2ae9a6e2daed8ea8f446735fdd19d9',
+   Var('chromium_git') + '/chromium/src/build/config.git' + '@' + '8b3ea542b26d9adce77515ab063e88a8148fa09a',
 
   'src/build/toolchain':
    Var('chromium_git') + '/chromium/src/build/toolchain.git' + '@' +  '3793779608aa15ae1bfb09853636aea5a5e42a59',
@@ -65,7 +65,7 @@
      Var('chromium_git') + '/chromium/deps/icu.git' + '@' + '7c81740601355556e630da515b74d889ba2f8d08',
 
   'src/third_party/mojo/src/mojo/public':
-     Var('chromium_git') + '/external/github.com/domokit/mojo_sdk.git' + '@' + '6336180b7be8ef4c8a8db3dab6b7a7bb0409c423',
+     Var('chromium_git') + '/external/github.com/domokit/mojo_sdk.git' + '@' + '15fd82cc2c30e084a44ad4fdeea6db9dbc96b71d',
 
   'src/tools/grit':
     Var('chromium_git') + '/external/grit-i18n.git' + '@' + 'c1b1591a05209c1ad467e845ba8543c22f9072af', # from svn revision 189
@@ -74,7 +74,7 @@
     Var('chromium_git') + '/chromiumos/third_party/pyelftools.git' + '@' + '19b3e610c86fcadb837d252c794cb5e8008826ae',
 
   'src/third_party/mojo_devtools':
-    'https://github.com/domokit/devtools.git' + '@' + 'b979a23b899ea5e5ed933cc15ef445835787d9c6',
+    'https://github.com/domokit/devtools.git' + '@' + '0c49abb6f81b6dbb114e1e081070b19e510e3347',
 }
 
 deps_os = {
diff --git a/build/android/gyp/package_resources.py b/build/android/gyp/package_resources.py
index 5393766..f2c2a6e 100755
--- a/build/android/gyp/package_resources.py
+++ b/build/android/gyp/package_resources.py
@@ -16,9 +16,52 @@
 import optparse
 import os
 import shutil
+import zipfile
 
 from util import build_utils
 
+
+# List is generated from the chrome_apk.apk_intermediates.ap_ via:
+#     unzip -l $FILE_AP_ | cut -c31- | grep res/draw | cut -d'/' -f 2 | sort \
+#     | uniq | grep -- -tvdpi- | cut -c10-
+# and then manually sorted.
+# Note that we can't just do a cross-product of dimentions because the filenames
+# become too big and aapt fails to create the files.
+# This leaves all default drawables (mdpi) in the main apk. Android gets upset
+# though if any drawables are missing from the default drawables/ directory.
+DENSITY_SPLITS = {
+    'hdpi': (
+        'hdpi-v4', # Order matters for output file names.
+        'ldrtl-hdpi-v4',
+        'sw600dp-hdpi-v13',
+        'ldrtl-hdpi-v17',
+        'ldrtl-sw600dp-hdpi-v17',
+        'hdpi-v21',
+    ),
+    'xhdpi': (
+        'xhdpi-v4',
+        'ldrtl-xhdpi-v4',
+        'sw600dp-xhdpi-v13',
+        'ldrtl-xhdpi-v17',
+        'ldrtl-sw600dp-xhdpi-v17',
+        'xhdpi-v21',
+    ),
+    'xxhdpi': (
+        'xxhdpi-v4',
+        'ldrtl-xxhdpi-v4',
+        'sw600dp-xxhdpi-v13',
+        'ldrtl-xxhdpi-v17',
+        'ldrtl-sw600dp-xxhdpi-v17',
+        'xxhdpi-v21',
+    ),
+    'tvdpi': (
+        'tvdpi-v4',
+        'sw600dp-tvdpi-v13',
+        'ldrtl-sw600dp-tvdpi-v17',
+    ),
+}
+
+
 def ParseArgs():
   """Parses command line options.
 
@@ -28,8 +71,8 @@
   parser = optparse.OptionParser()
   build_utils.AddDepfileOption(parser)
   parser.add_option('--android-sdk', help='path to the Android SDK folder')
-  parser.add_option('--android-sdk-tools',
-                    help='path to the Android SDK build tools folder')
+  parser.add_option('--aapt-path',
+                    help='path to the Android aapt tool')
 
   parser.add_option('--configuration-name',
                     help='Gyp\'s configuration name (Debug or Release).')
@@ -48,6 +91,10 @@
                     help='directories containing assets to be packaged')
   parser.add_option('--no-compress', help='disables compression for the '
                     'given comma separated list of extensions')
+  parser.add_option(
+      '--create-density-splits',
+      action='store_true',
+      help='Enables density splits')
 
   parser.add_option('--apk-path',
                     help='Path to output (partial) apk.')
@@ -58,7 +105,7 @@
     parser.error('No positional arguments should be given.')
 
   # Check that required options have been provided.
-  required_options = ('android_sdk', 'android_sdk_tools', 'configuration_name',
+  required_options = ('android_sdk', 'aapt_path', 'configuration_name',
                       'android_manifest', 'version_code', 'version_name',
                       'apk_path')
 
@@ -114,10 +161,33 @@
   return package_command
 
 
+def RenameDensitySplits(apk_path):
+  """Renames all density splits to have shorter / predictable names."""
+  for density, config in DENSITY_SPLITS.iteritems():
+    src_path = '%s_%s' % (apk_path, '_'.join(config))
+    dst_path = '%s-%s' % (apk_path, density)
+    if os.path.exists(dst_path):
+      os.unlink(dst_path)
+    os.rename(src_path, dst_path)
+
+
+def CheckDensityMissedConfigs(apk_path):
+  """Raises an exception if apk_path contains any density-specifc files."""
+  triggers = ['-%s' % density for density in DENSITY_SPLITS]
+  with zipfile.ZipFile(apk_path) as main_apk_zip:
+    for name in main_apk_zip.namelist():
+      for trigger in triggers:
+        if trigger in name and not 'mipmap-' in name:
+          raise Exception(('Found density in main apk that should have been ' +
+                           'put into a split: %s\nYou need to update ' +
+                           'package_resources.py to include this new ' +
+                           'config.') % name)
+
+
 def main():
   options = ParseArgs()
   android_jar = os.path.join(options.android_sdk, 'android.jar')
-  aapt = os.path.join(options.android_sdk_tools, 'aapt')
+  aapt = options.aapt_path
 
   with build_utils.TempDir() as temp_dir:
     package_command = [aapt,
@@ -128,7 +198,6 @@
                        '--no-crunch',
                        '-f',
                        '--auto-add-overlay',
-
                        '-I', android_jar,
                        '-F', options.apk_path,
                        '--ignore-assets', build_utils.AAPT_IGNORE_PATTERN,
@@ -152,12 +221,20 @@
         build_utils.ExtractAll(z, path=subdir)
         package_command += PackageArgsForExtractedZip(subdir)
 
+    if options.create_density_splits:
+      for config in DENSITY_SPLITS.itervalues():
+        package_command.extend(('--split', ','.join(config)))
+
     if 'Debug' in options.configuration_name:
       package_command += ['--debug-mode']
 
     build_utils.CheckOutput(
         package_command, print_stdout=False, print_stderr=False)
 
+    if options.create_density_splits:
+      CheckDensityMissedConfigs(options.apk_path)
+      RenameDensitySplits(options.apk_path)
+
     if options.depfile:
       build_utils.WriteDepfile(
           options.depfile,
diff --git a/build/android/gyp/process_resources.py b/build/android/gyp/process_resources.py
index 2ac9d6e..d227954 100755
--- a/build/android/gyp/process_resources.py
+++ b/build/android/gyp/process_resources.py
@@ -23,9 +23,8 @@
 from util import build_utils
 
 # Import jinja2 from third_party/jinja2
-sys.path.insert(1, os.path.join(
-    os.path.dirname(__file__),
-    '../../../third_party/mojo/src/mojo/public/third_party'))
+sys.path.insert(1,
+    os.path.join(os.path.dirname(__file__), '../../../third_party'))
 from jinja2 import Template # pylint: disable=F0401
 
 
@@ -39,8 +38,8 @@
   build_utils.AddDepfileOption(parser)
 
   parser.add_option('--android-sdk', help='path to the Android SDK folder')
-  parser.add_option('--android-sdk-tools',
-                    help='path to the Android SDK build tools folder')
+  parser.add_option('--aapt-path',
+                    help='path to the Android aapt tool')
   parser.add_option('--non-constant-id', action='store_true')
 
   parser.add_option('--android-manifest', help='AndroidManifest.xml path')
@@ -103,7 +102,7 @@
   # Check that required options have been provided.
   required_options = (
       'android_sdk',
-      'android_sdk_tools',
+      'aapt_path',
       'android_manifest',
       'dependencies_res_zips',
       'resource_dirs',
@@ -304,7 +303,7 @@
 
   options = ParseArgs(args)
   android_jar = os.path.join(options.android_sdk, 'android.jar')
-  aapt = os.path.join(options.android_sdk_tools, 'aapt')
+  aapt = options.aapt_path
 
   input_files = []
 
diff --git a/mojo/services/network/host_resolver_apptest.cc b/mojo/services/network/host_resolver_apptest.cc
index 959f7bd..7ff7b0b 100644
--- a/mojo/services/network/host_resolver_apptest.cc
+++ b/mojo/services/network/host_resolver_apptest.cc
@@ -23,7 +23,7 @@
 class HostResolverTestHelper {
  public:
   static bool Match4(uint8_t* expected_ipv4, const NetAddressPtr& address) {
-    EXPECT_EQ(NET_ADDRESS_FAMILY_IPV4, address->family);
+    EXPECT_EQ(NetAddressFamily::IPV4, address->family);
     for (size_t i = 0; i < address->ipv4->addr.size(); i++) {
       if (address->ipv4->addr[i] != expected_ipv4[i]) {
         return false;
@@ -33,7 +33,7 @@
   }
 
   static bool Match6(uint8_t* expected_ipv6, const NetAddressPtr& address) {
-    EXPECT_EQ(NET_ADDRESS_FAMILY_IPV6, address->family);
+    EXPECT_EQ(NetAddressFamily::IPV6, address->family);
     for (size_t i = 0; i < address->ipv6->addr.size(); i++) {
       if (address->ipv6->addr[i] != expected_ipv6[i]) {
         return false;
@@ -43,7 +43,7 @@
   }
 
   static void DebugPrint(const NetAddressPtr& address) {
-    if (address->family == NET_ADDRESS_FAMILY_IPV4) {
+    if (address->family == NetAddressFamily::IPV4) {
       for (size_t i = 0; i < address->ipv4->addr.size(); i++) {
         if (i > 0) {
           printf(".");
@@ -51,7 +51,7 @@
         printf("%d", address->ipv4->addr[i]);
       }
       printf("\n");
-    } else if (address->family == NET_ADDRESS_FAMILY_IPV6) {
+    } else if (address->family == NetAddressFamily::IPV6) {
       for (size_t i = 0; i < address->ipv6->addr.size(); i++) {
         if ((i > 0) && ((i % 2) == 0)) {
           printf(":");
@@ -92,7 +92,7 @@
 TEST_F(HostResolverImplTest, LocalhostV4) {
   HostResolverPtr host_resolver;
   network_service_->CreateHostResolver(GetProxy(&host_resolver));
-  host_resolver->GetHostAddresses("localhost", NET_ADDRESS_FAMILY_IPV4,
+  host_resolver->GetHostAddresses("localhost", NetAddressFamily::IPV4,
       [](NetworkErrorPtr error, Array<NetAddressPtr> addresses) {
     EXPECT_EQ(net::OK, error->code);
     EXPECT_GT(addresses.size(), 0U);
@@ -105,7 +105,7 @@
 TEST_F(HostResolverImplTest, LocalhostV6) {
   HostResolverPtr host_resolver;
   network_service_->CreateHostResolver(GetProxy(&host_resolver));
-  host_resolver->GetHostAddresses("localhost", NET_ADDRESS_FAMILY_IPV6,
+  host_resolver->GetHostAddresses("localhost", NetAddressFamily::IPV6,
       [](NetworkErrorPtr error, Array<NetAddressPtr> addresses) {
     uint8_t localhost6[] = {0, 0, 0, 0, 0, 0, 0, 0,
                             0, 0, 0, 0, 0, 0, 0, 1};
@@ -123,7 +123,7 @@
 TEST_F(HostResolverImplTest, NameNotResolved) {
   HostResolverPtr host_resolver;
   network_service_->CreateHostResolver(GetProxy(&host_resolver));
-  host_resolver->GetHostAddresses("local.77778888", NET_ADDRESS_FAMILY_IPV4,
+  host_resolver->GetHostAddresses("local.77778888", NetAddressFamily::IPV4,
       [](NetworkErrorPtr error, Array<NetAddressPtr> addresses) {
     EXPECT_EQ(net::ERR_NAME_NOT_RESOLVED, error->code);
     EXPECT_EQ(0U, addresses.size());
@@ -133,7 +133,7 @@
 TEST_F(HostResolverImplTest, DropOnFloor) {
   HostResolverPtr host_resolver;
   network_service_->CreateHostResolver(GetProxy(&host_resolver));
-  host_resolver->GetHostAddresses("localhost", NET_ADDRESS_FAMILY_IPV4,
+  host_resolver->GetHostAddresses("localhost", NetAddressFamily::IPV4,
       [](NetworkErrorPtr error, Array<NetAddressPtr> addresses) {
   });
 }
diff --git a/mojo/services/network/host_resolver_impl.cc b/mojo/services/network/host_resolver_impl.cc
index b132843..7877f13 100644
--- a/mojo/services/network/host_resolver_impl.cc
+++ b/mojo/services/network/host_resolver_impl.cc
@@ -85,11 +85,11 @@
 
 static net::AddressFamily ConvertFamily(NetAddressFamily family) {
   switch (family) {
-    case NET_ADDRESS_FAMILY_UNSPECIFIED:
+    case NetAddressFamily::UNSPECIFIED:
       return net::ADDRESS_FAMILY_UNSPECIFIED;
-    case NET_ADDRESS_FAMILY_IPV4:
+    case NetAddressFamily::IPV4:
       return net::ADDRESS_FAMILY_IPV4;
-    case NET_ADDRESS_FAMILY_IPV6:
+    case NetAddressFamily::IPV6:
       return net::ADDRESS_FAMILY_IPV6;
     default:
       NOTREACHED();
diff --git a/mojo/services/network/http_connection_impl.cc b/mojo/services/network/http_connection_impl.cc
index 1fb8a44..6203c23 100644
--- a/mojo/services/network/http_connection_impl.cc
+++ b/mojo/services/network/http_connection_impl.cc
@@ -150,7 +150,7 @@
   }
 
   void Send(bool fin, MessageType type, uint32_t num_bytes) override {
-    if (!fin || type != MESSAGE_TYPE_TEXT) {
+    if (!fin || type != MessageType::TEXT) {
       NOTIMPLEMENTED();
       Close();
     }
@@ -190,7 +190,7 @@
       return;
 
     if (buffer)
-      client_->DidReceiveData(true, MESSAGE_TYPE_TEXT, num_bytes);
+      client_->DidReceiveData(true, MessageType::TEXT, num_bytes);
   }
 
   // Checks whether Close() has been called.
diff --git a/mojo/services/network/http_server_apptest.cc b/mojo/services/network/http_server_apptest.cc
index 4ad7ca4..e493f89 100644
--- a/mojo/services/network/http_server_apptest.cc
+++ b/mojo/services/network/http_server_apptest.cc
@@ -38,7 +38,7 @@
 
 NetAddressPtr GetLocalHostWithAnyPort() {
   NetAddressPtr addr(NetAddress::New());
-  addr->family = NET_ADDRESS_FAMILY_IPV4;
+  addr->family = NetAddressFamily::IPV4;
   addr->ipv4 = NetAddressIPv4::New();
   addr->ipv4->port = 0;
   addr->ipv4->addr.resize(4);
@@ -372,7 +372,7 @@
   void OnFinishedWritingSendStream(uint32_t num_bytes, const char* buffer) {
     EXPECT_TRUE(buffer);
 
-    web_socket_->Send(true, WebSocket::MESSAGE_TYPE_TEXT, num_bytes);
+    web_socket_->Send(true, WebSocket::MessageType::TEXT, num_bytes);
   }
 
   void OnFinishedReadingReceiveStream(uint32_t num_bytes, const char* data) {
diff --git a/mojo/services/network/net_address_type_converters.cc b/mojo/services/network/net_address_type_converters.cc
index 31dc9d9..c652b4d 100644
--- a/mojo/services/network/net_address_type_converters.cc
+++ b/mojo/services/network/net_address_type_converters.cc
@@ -13,12 +13,12 @@
     return net::IPEndPoint();
 
   switch (obj->family) {
-    case NET_ADDRESS_FAMILY_IPV4:
+    case NetAddressFamily::IPV4:
       if (!obj->ipv4)
         break;
       return net::IPEndPoint(obj->ipv4->addr.storage(), obj->ipv4->port);
 
-    case NET_ADDRESS_FAMILY_IPV6:
+    case NetAddressFamily::IPV6:
       if (!obj->ipv6)
         break;
       return net::IPEndPoint(obj->ipv6->addr.storage(), obj->ipv6->port);
@@ -37,14 +37,14 @@
 
   switch (obj.GetFamily()) {
     case net::ADDRESS_FAMILY_IPV4:
-      net_address->family = NET_ADDRESS_FAMILY_IPV4;
+      net_address->family = NetAddressFamily::IPV4;
       net_address->ipv4 = NetAddressIPv4::New();
       net_address->ipv4->port = static_cast<uint16>(obj.port());
       net_address->ipv4->addr = Array<uint8_t>::From(obj.address());
       break;
-    case NET_ADDRESS_FAMILY_IPV6:
+    case net::ADDRESS_FAMILY_IPV6:
       net_address->ipv6 = NetAddressIPv6::New();
-      net_address->family = NET_ADDRESS_FAMILY_IPV6;
+      net_address->family = NetAddressFamily::IPV6;
       net_address->ipv6->port = static_cast<uint16>(obj.port());
       net_address->ipv6->addr = Array<uint8_t>::From(obj.address());
       break;
diff --git a/mojo/services/network/udp_socket_apptest.cc b/mojo/services/network/udp_socket_apptest.cc
index 7ed5809..2b602f4 100644
--- a/mojo/services/network/udp_socket_apptest.cc
+++ b/mojo/services/network/udp_socket_apptest.cc
@@ -21,7 +21,7 @@
 
 NetAddressPtr GetLocalHostWithAnyPort() {
   NetAddressPtr addr(NetAddress::New());
-  addr->family = NET_ADDRESS_FAMILY_IPV4;
+  addr->family = NetAddressFamily::IPV4;
   addr->ipv4 = NetAddressIPv4::New();
   addr->ipv4->port = 0;
   addr->ipv4->addr.resize(4);
diff --git a/mojo/services/network/url_loader_impl.cc b/mojo/services/network/url_loader_impl.cc
index 4dea9b7..8d305bc 100644
--- a/mojo/services/network/url_loader_impl.cc
+++ b/mojo/services/network/url_loader_impl.cc
@@ -103,11 +103,11 @@
   DISALLOW_COPY_AND_ASSIGN(UploadDataPipeElementReader);
 };
 
-bool IsValidCacheMode(int cache_mode) {
+bool IsValidCacheMode(URLRequest::CacheMode cache_mode) {
   switch (cache_mode) {
-    case URLRequest::CACHE_MODE_DEFAULT:
-    case URLRequest::CACHE_MODE_BYPASS_CACHE:
-    case URLRequest::CACHE_MODE_ONLY_FROM_CACHE:
+    case URLRequest::CacheMode::DEFAULT:
+    case URLRequest::CacheMode::BYPASS_CACHE:
+    case URLRequest::CacheMode::ONLY_FROM_CACHE:
       return true;
   }
   return false;
@@ -572,12 +572,12 @@
   }
   int load_flags = 0;
   switch (request->cache_mode) {
-    case URLRequest::CACHE_MODE_DEFAULT:
+    case URLRequest::CacheMode::DEFAULT:
       break;
-    case URLRequest::CACHE_MODE_BYPASS_CACHE:
+    case URLRequest::CacheMode::BYPASS_CACHE:
       load_flags |= net::LOAD_BYPASS_CACHE;
       break;
-    case URLRequest::CACHE_MODE_ONLY_FROM_CACHE:
+    case URLRequest::CacheMode::ONLY_FROM_CACHE:
       load_flags |= net::LOAD_ONLY_FROM_CACHE;
       break;
   }
diff --git a/mojo/services/network/web_socket_impl.cc b/mojo/services/network/web_socket_impl.cc
index 7b1a37e..7dd9b23 100644
--- a/mojo/services/network/web_socket_impl.cc
+++ b/mojo/services/network/web_socket_impl.cc
@@ -25,19 +25,19 @@
                      WebSocket::MessageType> {
   static net::WebSocketFrameHeader::OpCode Convert(
       WebSocket::MessageType type) {
-    DCHECK(type == WebSocket::MESSAGE_TYPE_CONTINUATION ||
-           type == WebSocket::MESSAGE_TYPE_TEXT ||
-           type == WebSocket::MESSAGE_TYPE_BINARY);
+    DCHECK(type == WebSocket::MessageType::CONTINUATION ||
+           type == WebSocket::MessageType::TEXT ||
+           type == WebSocket::MessageType::BINARY);
     typedef net::WebSocketFrameHeader::OpCode OpCode;
     // These compile asserts verify that the same underlying values are used for
     // both types, so we can simply cast between them.
-    COMPILE_ASSERT(static_cast<OpCode>(WebSocket::MESSAGE_TYPE_CONTINUATION) ==
+    COMPILE_ASSERT(static_cast<OpCode>(WebSocket::MessageType::CONTINUATION) ==
                        net::WebSocketFrameHeader::kOpCodeContinuation,
                    enum_values_must_match_for_opcode_continuation);
-    COMPILE_ASSERT(static_cast<OpCode>(WebSocket::MESSAGE_TYPE_TEXT) ==
+    COMPILE_ASSERT(static_cast<OpCode>(WebSocket::MessageType::TEXT) ==
                        net::WebSocketFrameHeader::kOpCodeText,
                    enum_values_must_match_for_opcode_text);
-    COMPILE_ASSERT(static_cast<OpCode>(WebSocket::MESSAGE_TYPE_BINARY) ==
+    COMPILE_ASSERT(static_cast<OpCode>(WebSocket::MessageType::BINARY) ==
                        net::WebSocketFrameHeader::kOpCodeBinary,
                    enum_values_must_match_for_opcode_binary);
     return static_cast<OpCode>(type);
diff --git a/testing/android/native_test/java/src/org/chromium/native_test/NativeBrowserTestActivity.java b/testing/android/native_test/java/src/org/chromium/native_test/NativeBrowserTestActivity.java
new file mode 100644
index 0000000..ac2ddee
--- /dev/null
+++ b/testing/android/native_test/java/src/org/chromium/native_test/NativeBrowserTestActivity.java
@@ -0,0 +1,46 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.native_test;
+
+import android.os.Bundle;
+
+/**
+ * An {@link android.app.Activity} for running native browser tests.
+ */
+public abstract class NativeBrowserTestActivity extends NativeTestActivity {
+
+    private static final String BROWSER_TESTS_FLAGS[] = {
+        // content::kSingleProcessTestsFlag
+        "--single_process",
+
+        // switches::kUseFakeDeviceForMediaStream
+        "--use-fake-device-for-media-stream",
+
+        // switches::kUseFakeUIForMediaStream
+        "--use-fake-ui-for-media-stream"
+    };
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        for (String flag : BROWSER_TESTS_FLAGS) {
+            appendCommandLineFlags(flag);
+        }
+    }
+
+    @Override
+    public void onStart() {
+        initializeBrowserProcess();
+        super.onStart();
+    }
+
+    /** Initializes the browser process.
+     *
+     *  This generally includes loading native libraries and switching to the native command line,
+     *  among other things.
+     */
+    protected abstract void initializeBrowserProcess();
+
+}
diff --git a/testing/android/native_test/java/src/org/chromium/native_test/NativeTestActivity.java b/testing/android/native_test/java/src/org/chromium/native_test/NativeTestActivity.java
index e8c4055..35a79f8 100644
--- a/testing/android/native_test/java/src/org/chromium/native_test/NativeTestActivity.java
+++ b/testing/android/native_test/java/src/org/chromium/native_test/NativeTestActivity.java
@@ -6,16 +6,14 @@
 
 import android.app.Activity;
 import android.content.Context;
+import android.content.Intent;
 import android.os.Bundle;
 import android.os.Environment;
 import android.os.Handler;
 
 import org.chromium.base.CommandLine;
+import org.chromium.base.JNINamespace;
 import org.chromium.base.Log;
-import org.chromium.base.PathUtils;
-import org.chromium.base.PowerMonitor;
-import org.chromium.base.ResourceExtractor;
-import org.chromium.base.library_loader.NativeLibraries;
 
 import java.io.File;
 
@@ -24,6 +22,7 @@
  *  Our tests need to go up to our own java classes, which is not possible using
  *  the native activity class loader.
  */
+@JNINamespace("testing::android")
 public class NativeTestActivity extends Activity {
     public static final String EXTRA_COMMAND_LINE_FILE =
             "org.chromium.native_test.NativeTestActivity.CommandLineFile";
@@ -32,30 +31,59 @@
     public static final String EXTRA_STDOUT_FILE =
             "org.chromium.native_test.NativeTestActivity.StdoutFile";
 
-    private static final String TAG = Log.makeTag("native_test");
+    private static final String TAG = "cr.native_test";
     private static final String EXTRA_RUN_IN_SUB_THREAD = "RunInSubThread";
     // We post a delayed task to run tests so that we do not block onCreate().
     private static final long RUN_TESTS_DELAY_IN_MS = 300;
 
+    private String mCommandLineFilePath;
+    private StringBuilder mCommandLineFlags = new StringBuilder();
+    private boolean mRunInSubThread = false;
+    private boolean mStdoutFifo = false;
+    private String mStdoutFilePath;
+
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         CommandLine.init(new String[]{});
 
-        // Needed by path_utils_unittest.cc
-        PathUtils.setPrivateDataDirectorySuffix("chrome", getApplicationContext());
+        parseArgumentsFromIntent(getIntent());
+    }
 
-        ResourceExtractor resourceExtractor = ResourceExtractor.get(getApplicationContext());
-        resourceExtractor.setExtractAllPaksAndV8SnapshotForTesting();
-        resourceExtractor.startExtractingResources();
-        resourceExtractor.waitForCompletion();
+    private void parseArgumentsFromIntent(Intent intent) {
+        mCommandLineFilePath = intent.getStringExtra(EXTRA_COMMAND_LINE_FILE);
+        if (mCommandLineFilePath == null) {
+            mCommandLineFilePath = "";
+        } else {
+            File commandLineFile = new File(mCommandLineFilePath);
+            if (!commandLineFile.isAbsolute()) {
+                mCommandLineFilePath = Environment.getExternalStorageDirectory() + "/"
+                        + mCommandLineFilePath;
+            }
+            Log.i(TAG, "command line file path: %s", mCommandLineFilePath);
+        }
 
-        // Needed by system_monitor_unittest.cc
-        PowerMonitor.createForTests(this);
+        String commandLineFlags = intent.getStringExtra(EXTRA_COMMAND_LINE_FLAGS);
+        if (commandLineFlags != null) mCommandLineFlags.append(commandLineFlags);
 
-        loadLibraries();
-        Bundle extras = this.getIntent().getExtras();
-        if (extras != null && extras.containsKey(EXTRA_RUN_IN_SUB_THREAD)) {
+        mRunInSubThread = intent.hasExtra(EXTRA_RUN_IN_SUB_THREAD);
+
+        mStdoutFilePath = intent.getStringExtra(EXTRA_STDOUT_FILE);
+        if (mStdoutFilePath == null) {
+            mStdoutFilePath = new File(getFilesDir(), "test.fifo").getAbsolutePath();
+            mStdoutFifo = true;
+        }
+    }
+
+    protected void appendCommandLineFlags(String flags) {
+        mCommandLineFlags.append(" ").append(flags);
+    }
+
+    @Override
+    public void onStart() {
+        super.onStart();
+
+        if (mRunInSubThread) {
             // Create a new thread and run tests on it.
             new Thread() {
                 @Override
@@ -76,31 +104,8 @@
     }
 
     private void runTests() {
-        String commandLineFlags = getIntent().getStringExtra(EXTRA_COMMAND_LINE_FLAGS);
-        if (commandLineFlags == null) commandLineFlags = "";
-
-        String commandLineFilePath = getIntent().getStringExtra(EXTRA_COMMAND_LINE_FILE);
-        if (commandLineFilePath == null) {
-            commandLineFilePath = "";
-        } else {
-            File commandLineFile = new File(commandLineFilePath);
-            if (!commandLineFile.isAbsolute()) {
-                commandLineFilePath = Environment.getExternalStorageDirectory() + "/"
-                        + commandLineFilePath;
-            }
-            Log.i(TAG, "command line file path: %s", commandLineFilePath);
-        }
-
-        String stdoutFilePath = getIntent().getStringExtra(EXTRA_STDOUT_FILE);
-        boolean stdoutFifo = false;
-        if (stdoutFilePath == null) {
-            stdoutFilePath = new File(getFilesDir(), "test.fifo").getAbsolutePath();
-            stdoutFifo = true;
-        }
-
-        // This directory is used by build/android/pylib/test_package_apk.py.
-        nativeRunTests(commandLineFlags, commandLineFilePath, stdoutFilePath, stdoutFifo,
-                getApplicationContext());
+        nativeRunTests(mCommandLineFlags.toString(), mCommandLineFilePath, mStdoutFilePath,
+                mStdoutFifo, getApplicationContext());
         finish();
     }
 
@@ -111,14 +116,6 @@
         Log.e(TAG, "[ RUNNER_FAILED ] could not load native library");
     }
 
-    private void loadLibraries() {
-        for (String library : NativeLibraries.LIBRARIES) {
-            Log.i(TAG, "loading: %s", library);
-            System.loadLibrary(library);
-            Log.i(TAG, "loaded: %s", library);
-        }
-    }
-
     private native void nativeRunTests(String commandLineFlags, String commandLineFilePath,
             String stdoutFilePath, boolean stdoutFifo, Context appContext);
 }
diff --git a/testing/android/native_test/java/src/org/chromium/native_test/NativeTestInstrumentationTestRunner.java b/testing/android/native_test/java/src/org/chromium/native_test/NativeTestInstrumentationTestRunner.java
index c5a4443..5c0cb93 100644
--- a/testing/android/native_test/java/src/org/chromium/native_test/NativeTestInstrumentationTestRunner.java
+++ b/testing/android/native_test/java/src/org/chromium/native_test/NativeTestInstrumentationTestRunner.java
@@ -31,27 +31,32 @@
  *  An Instrumentation that runs tests based on NativeTestActivity.
  */
 public class NativeTestInstrumentationTestRunner extends Instrumentation {
-    // TODO(jbudorick): Remove this extra when b/18981674 is fixed.
-    public static final String EXTRA_ONLY_OUTPUT_FAILURES =
-            "org.chromium.native_test.NativeTestInstrumentationTestRunner."
-                    + "OnlyOutputFailures";
 
-    private static final String TAG = Log.makeTag("native_test");
+    public static final String EXTRA_NATIVE_TEST_ACTIVITY =
+            "org.chromium.native_test.NativeTestInstrumentationTestRunner."
+                    + "NativeTestActivity";
+
+    private static final String TAG = "cr.native_test";
 
     private static final int ACCEPT_TIMEOUT_MS = 5000;
+    private static final String DEFAULT_NATIVE_TEST_ACTIVITY =
+            "org.chromium.native_test.NativeUnitTestActivity";
     private static final Pattern RE_TEST_OUTPUT = Pattern.compile("\\[ *([^ ]*) *\\] ?([^ ]+) .*");
 
+    private ResultsBundleGenerator mBundleGenerator = new RobotiumBundleGenerator();
     private String mCommandLineFile;
     private String mCommandLineFlags;
+    private String mNativeTestActivity;
+    private Bundle mLogBundle = new Bundle();
     private File mStdoutFile;
-    private Bundle mLogBundle;
-    private ResultsBundleGenerator mBundleGenerator;
-    private boolean mOnlyOutputFailures;
 
     @Override
     public void onCreate(Bundle arguments) {
         mCommandLineFile = arguments.getString(NativeTestActivity.EXTRA_COMMAND_LINE_FILE);
         mCommandLineFlags = arguments.getString(NativeTestActivity.EXTRA_COMMAND_LINE_FLAGS);
+        mNativeTestActivity = arguments.getString(EXTRA_NATIVE_TEST_ACTIVITY);
+        if (mNativeTestActivity == null) mNativeTestActivity = DEFAULT_NATIVE_TEST_ACTIVITY;
+
         try {
             mStdoutFile = File.createTempFile(
                     ".temp_stdout_", ".txt", Environment.getExternalStorageDirectory());
@@ -61,9 +66,6 @@
             finish(Activity.RESULT_CANCELED, new Bundle());
             return;
         }
-        mLogBundle = new Bundle();
-        mBundleGenerator = new RobotiumBundleGenerator();
-        mOnlyOutputFailures = arguments.containsKey(EXTRA_ONLY_OUTPUT_FAILURES);
         start();
     }
 
@@ -100,9 +102,7 @@
      */
     private Activity startNativeTestActivity() {
         Intent i = new Intent(Intent.ACTION_MAIN);
-        i.setComponent(new ComponentName(
-                "org.chromium.native_test",
-                "org.chromium.native_test.NativeTestActivity"));
+        i.setComponent(new ComponentName(getContext().getPackageName(), mNativeTestActivity));
         i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         if (mCommandLineFile != null) {
             Log.i(TAG, "Passing command line file extra: %s", mCommandLineFile);
@@ -139,26 +139,17 @@
             for (String l = r.readLine(); l != null && !l.equals("<<ScopedMainEntryLogger");
                     l = r.readLine()) {
                 Matcher m = RE_TEST_OUTPUT.matcher(l);
-                boolean isFailure = false;
                 if (m.matches()) {
                     if (m.group(1).equals("RUN")) {
                         results.put(m.group(2), ResultsBundleGenerator.TestResult.UNKNOWN);
                     } else if (m.group(1).equals("FAILED")) {
                         results.put(m.group(2), ResultsBundleGenerator.TestResult.FAILED);
-                        isFailure = true;
-                        mLogBundle.putString(Instrumentation.REPORT_KEY_STREAMRESULT, l + "\n");
-                        sendStatus(0, mLogBundle);
                     } else if (m.group(1).equals("OK")) {
                         results.put(m.group(2), ResultsBundleGenerator.TestResult.PASSED);
                     }
                 }
-
-                // TODO(jbudorick): mOnlyOutputFailures is a workaround for b/18981674. Remove it
-                // once that issue is fixed.
-                if (!mOnlyOutputFailures || isFailure) {
-                    mLogBundle.putString(Instrumentation.REPORT_KEY_STREAMRESULT, l + "\n");
-                    sendStatus(0, mLogBundle);
-                }
+                mLogBundle.putString(Instrumentation.REPORT_KEY_STREAMRESULT, l + "\n");
+                sendStatus(0, mLogBundle);
                 Log.i(TAG, l);
             }
         } catch (FileNotFoundException e) {
diff --git a/testing/android/native_test/java/src/org/chromium/native_test/NativeUnitTestActivity.java b/testing/android/native_test/java/src/org/chromium/native_test/NativeUnitTestActivity.java
new file mode 100644
index 0000000..2a2a8dd
--- /dev/null
+++ b/testing/android/native_test/java/src/org/chromium/native_test/NativeUnitTestActivity.java
@@ -0,0 +1,48 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.native_test;
+
+import android.os.Bundle;
+
+import org.chromium.base.Log;
+import org.chromium.base.PathUtils;
+import org.chromium.base.PowerMonitor;
+import org.chromium.base.ResourceExtractor;
+import org.chromium.base.library_loader.NativeLibraries;
+
+/**
+ * An {@link android.app.Activity} for running native unit tests.
+ * (i.e., not browser tests)
+ */
+public class NativeUnitTestActivity extends NativeTestActivity {
+
+    private static final String TAG = "cr.native_test";
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        // Needed by path_utils_unittest.cc
+        PathUtils.setPrivateDataDirectorySuffix("chrome", getApplicationContext());
+
+        ResourceExtractor resourceExtractor = ResourceExtractor.get(getApplicationContext());
+        resourceExtractor.setExtractAllPaksAndV8SnapshotForTesting();
+        resourceExtractor.startExtractingResources();
+        resourceExtractor.waitForCompletion();
+
+        // Needed by system_monitor_unittest.cc
+        PowerMonitor.createForTests(this);
+
+        loadLibraries();
+    }
+
+    private void loadLibraries() {
+        for (String library : NativeLibraries.LIBRARIES) {
+            Log.i(TAG, "loading: %s", library);
+            System.loadLibrary(library);
+            Log.i(TAG, "loaded: %s", library);
+        }
+    }
+}
diff --git a/testing/android/native_test/native_test_jni_onload.cc b/testing/android/native_test/native_test_jni_onload.cc
index 041aa74..8fecc44 100644
--- a/testing/android/native_test/native_test_jni_onload.cc
+++ b/testing/android/native_test/native_test_jni_onload.cc
@@ -10,11 +10,11 @@
 namespace {
 
 bool RegisterJNI(JNIEnv* env) {
-  return RegisterNativeTestJNI(env);
+  return testing::android::RegisterNativeTestJNI(env);
 }
 
 bool Init() {
-  InstallHandlers();
+  testing::android::InstallHandlers();
   return true;
 }
 
diff --git a/testing/android/native_test/native_test_launcher.cc b/testing/android/native_test/native_test_launcher.cc
index d49ca11..343f118 100644
--- a/testing/android/native_test/native_test_launcher.cc
+++ b/testing/android/native_test/native_test_launcher.cc
@@ -28,14 +28,12 @@
 #include "jni/NativeTestActivity_jni.h"
 #include "testing/android/native_test/native_test_util.h"
 
-using testing::native_test_util::ArgsToArgv;
-using testing::native_test_util::ParseArgsFromCommandLineFile;
-using testing::native_test_util::ParseArgsFromString;
-using testing::native_test_util::ScopedMainEntryLogger;
-
 // The main function of the program to be wrapped as a test apk.
 extern int main(int argc, char** argv);
 
+namespace testing {
+namespace android {
+
 namespace {
 
 // The test runner script writes the command line file in
@@ -123,7 +121,7 @@
       exit(EXIT_FAILURE);
     }
   }
-  if (!base::android::RedirectStream(stdout, stdout_file_path, "w")) {
+  if (!base::android::RedirectStream(stdout, stdout_file_path, "w+")) {
     AndroidLog(ANDROID_LOG_ERROR, "Failed to redirect stream to file: %s: %s\n",
                stdout_file_path.value().c_str(), strerror(errno));
     exit(EXIT_FAILURE);
@@ -145,7 +143,6 @@
   return RegisterNativesImpl(env);
 }
 
-
 // TODO(nileshagrawal): now that we're using FIFO, test scripts can detect EOF.
 // Remove the signal handlers.
 void InstallHandlers() {
@@ -159,3 +156,6 @@
     sigaction(kExceptionSignals[i], &sa, &g_old_sa[kExceptionSignals[i]]);
   }
 }
+
+}  // namespace android
+}  // namespace testing
diff --git a/testing/android/native_test/native_test_launcher.h b/testing/android/native_test/native_test_launcher.h
index cdd1e76..ea4dfe8 100644
--- a/testing/android/native_test/native_test_launcher.h
+++ b/testing/android/native_test/native_test_launcher.h
@@ -7,7 +7,13 @@
 
 #include <jni.h>
 
+namespace testing {
+namespace android {
+
 void InstallHandlers();
 bool RegisterNativeTestJNI(JNIEnv* env);
 
+}  // namespace android
+}  // namespace testing
+
 #endif  // TESTING_ANDROID_NATIVE_TEST_LAUNCHER_H_
diff --git a/testing/android/native_test/native_test_util.cc b/testing/android/native_test/native_test_util.cc
index 2eaf971..ffb1b11 100644
--- a/testing/android/native_test/native_test_util.cc
+++ b/testing/android/native_test/native_test_util.cc
@@ -10,7 +10,7 @@
 #include "base/strings/string_util.h"
 
 namespace testing {
-namespace native_test_util {
+namespace android {
 
 void ParseArgsFromString(const std::string& command_line,
                          std::vector<std::string>* args) {
@@ -46,5 +46,5 @@
   return argc;
 }
 
-}  // namespace native_test_util
+}  // namespace android
 }  // namespace testing
diff --git a/testing/android/native_test/native_test_util.h b/testing/android/native_test/native_test_util.h
index ef17e52..e647a92 100644
--- a/testing/android/native_test/native_test_util.h
+++ b/testing/android/native_test/native_test_util.h
@@ -12,7 +12,7 @@
 // Helper methods for setting up environment for running gtest tests
 // inside an APK.
 namespace testing {
-namespace native_test_util {
+namespace android {
 
 class ScopedMainEntryLogger {
  public:
@@ -33,7 +33,7 @@
     const char* path, std::vector<std::string>* args);
 int ArgsToArgv(const std::vector<std::string>& args, std::vector<char*>* argv);
 
-}  // namespace native_test_util
+}  // namespace android
 }  // namespace testing
 
 #endif  // TESTING_ANDROID_NATIVE_TEST_UTIL_
diff --git a/third_party/android_platform/LICENSE b/third_party/android_platform/LICENSE
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/third_party/android_platform/LICENSE
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   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.
diff --git a/third_party/android_platform/OWNERS b/third_party/android_platform/OWNERS
new file mode 100644
index 0000000..efbe0ca
--- /dev/null
+++ b/third_party/android_platform/OWNERS
@@ -0,0 +1,2 @@
+cjhopman@chromium.org
+rmcilroy@chromium.org
diff --git a/third_party/android_platform/README.chromium b/third_party/android_platform/README.chromium
new file mode 100644
index 0000000..c34702f
--- /dev/null
+++ b/third_party/android_platform/README.chromium
@@ -0,0 +1,24 @@
+Name: Android Platform engineering tools
+Short Name: android platform development
+URL: https://android.googlesource.com/platform/development
+Version: 0
+Date: 2014/05/02
+Revision: 1b10ec4
+License: Apache 2.0
+License File: NOT_SHIPPED
+Security Critical: no
+
+Description:
+Android Platform engineering tools, specifically stack symbolization scripts
+and a jar containing the AOSP framework to compile the Android WebView
+glue layer against. The sources used to build the AOSP framework jar can be
+checked out using repo on the corresponding manifest file.
+
+Local Modifications:
+Only picked the few scripts needed by chrome.
+Updated output directories to use environment variable.
+When calling addr2line, check the symbol is a file (and not a directory).
+Added support for parsing LOG(FATAL) and DCHECK errors and their
+    stack traces, as emitted by src/base/debug/stack_trace_android.cc
+Added support for finding symbols when library is loaded directly from the APK.
+Changed the toolchain to remove references to 4.6 toolchains.
diff --git a/third_party/android_platform/config.gni b/third_party/android_platform/config.gni
new file mode 100644
index 0000000..88f6362
--- /dev/null
+++ b/third_party/android_platform/config.gni
@@ -0,0 +1,9 @@
+# Copyright 2015 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+relocation_packer_target =
+    "//third_party/android_platform/relocation_packer($host_toolchain)"
+relocation_packer_dir =
+    get_label_info("$relocation_packer_target", "root_out_dir")
+relocation_packer_exe = "${relocation_packer_dir}/android_relocation_packer"
diff --git a/third_party/android_platform/development/scripts/stack b/third_party/android_platform/development/scripts/stack
new file mode 100755
index 0000000..e55f688
--- /dev/null
+++ b/third_party/android_platform/development/scripts/stack
@@ -0,0 +1,172 @@
+#!/usr/bin/env python
+#
+# Copyright (C) 2013 The Android Open Source Project
+#
+# 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.
+
+"""stack symbolizes native crash dumps."""
+
+import getopt
+import glob
+import os
+import sys
+
+import stack_core
+import subprocess
+import symbol
+import sys
+
+DEFAULT_SYMROOT='/tmp/symbols'
+
+def PrintUsage():
+  """Print usage and exit with error."""
+  # pylint: disable-msg=C6310
+  print
+  print "  usage: " + sys.argv[0] + " [options] [FILE]"
+  print
+  print "  --symbols-dir=path"
+  print "       the path to a symbols dir, such as =/tmp/out/target/product/dream/symbols"
+  print
+  print "  --chrome-symbols-dir=path"
+  print "       the path to a Chrome symbols dir (can be absolute or relative"
+  print "       to src), such as =out/Debug/lib"
+  print "       If not specified, will look for the newest lib in out/Debug or"
+  print "       out/Release"
+  print
+  print "  --symbols-zip=path"
+  print "       the path to a symbols zip file, such as =dream-symbols-12345.zip"
+  print
+  print "  --more-info"
+  print "  --less-info"
+  print "       Change the level of detail in the output."
+  print "       --more-info is slower and more verbose, but more functions will"
+  print "       be fully qualified with namespace/classname and have full"
+  print "       argument information. Also, the 'stack data' section will be"
+  print "       printed."
+  print
+  print "  --arch=arm|arm64|x86_64|x86|mips"
+  print "       the target architecture"
+  print
+  print "  FILE should contain a stack trace in it somewhere"
+  print "       the tool will find that and re-print it with"
+  print "       source files and line numbers.  If you don't"
+  print "       pass FILE, or if file is -, it reads from"
+  print "       stdin."
+  print
+  # pylint: enable-msg=C6310
+  sys.exit(1)
+
+def UnzipSymbols(symbolfile, symdir=None):
+  """Unzips a file to DEFAULT_SYMROOT and returns the unzipped location.
+
+  Args:
+    symbolfile: The .zip file to unzip
+    symdir: Optional temporary directory to use for extraction
+
+  Returns:
+    A tuple containing (the directory into which the zip file was unzipped,
+    the path to the "symbols" directory in the unzipped file).  To clean
+    up, the caller can delete the first element of the tuple.
+
+  Raises:
+    SymbolDownloadException: When the unzip fails.
+  """
+  if not symdir:
+    symdir = "%s/%s" % (DEFAULT_SYMROOT, hash(symbolfile))
+  if not os.path.exists(symdir):
+    os.makedirs(symdir)
+
+  print "extracting %s..." % symbolfile
+  saveddir = os.getcwd()
+  os.chdir(symdir)
+  try:
+    unzipcode = subprocess.call(["unzip", "-qq", "-o", symbolfile])
+    if unzipcode > 0:
+      os.remove(symbolfile)
+      raise SymbolDownloadException("failed to extract symbol files (%s)."
+                                    % symbolfile)
+  finally:
+    os.chdir(saveddir)
+
+  android_symbols = glob.glob("%s/out/target/product/*/symbols" % symdir)
+  if android_symbols:
+    return (symdir, android_symbols[0])
+  else:
+    # This is a zip of Chrome symbols, so symbol.CHROME_SYMBOLS_DIR needs to be
+    # updated to point here.
+    symbol.CHROME_SYMBOLS_DIR = symdir
+    return (symdir, symdir)
+
+
+def main():
+  try:
+    options, arguments = getopt.getopt(sys.argv[1:], "",
+                                       ["more-info",
+                                        "less-info",
+                                        "chrome-symbols-dir=",
+                                        "symbols-dir=",
+                                        "symbols-zip=",
+                                        "arch=",
+                                        "help"])
+  except getopt.GetoptError, unused_error:
+    PrintUsage()
+
+  zip_arg = None
+  more_info = False
+  for option, value in options:
+    if option == "--help":
+      PrintUsage()
+    elif option == "--symbols-dir":
+      symbol.SYMBOLS_DIR = os.path.expanduser(value)
+    elif option == "--symbols-zip":
+      zip_arg = os.path.expanduser(value)
+    elif option == "--arch":
+      symbol.ARCH = value
+    elif option == "--chrome-symbols-dir":
+      symbol.CHROME_SYMBOLS_DIR = os.path.join(symbol.CHROME_SYMBOLS_DIR, value)
+    elif option == "--more-info":
+      more_info = True
+    elif option == "--less-info":
+      more_info = False
+
+  if len(arguments) > 1:
+    PrintUsage()
+
+  if not arguments or arguments[0] == "-":
+    print "Reading native crash info from stdin"
+    f = sys.stdin
+  else:
+    print "Searching for native crashes in %s" % arguments[0]
+    f = open(arguments[0], "r")
+
+  lines = f.readlines()
+  f.close()
+
+  rootdir = None
+  if zip_arg:
+    rootdir, symbol.SYMBOLS_DIR = UnzipSymbols(zip_arg)
+
+  print "Reading Android symbols from", symbol.SYMBOLS_DIR
+  print "Reading Chrome symbols from", symbol.CHROME_SYMBOLS_DIR
+  stack_core.ConvertTrace(lines, more_info)
+
+  if rootdir:
+    # be a good citizen and clean up...os.rmdir and os.removedirs() don't work
+    cmd = "rm -rf \"%s\"" % rootdir
+    print "\ncleaning up (%s)" % cmd
+    os.system(cmd)
+
+if __name__ == "__main__":
+  main()
+
+# vi: ts=2 sw=2
diff --git a/third_party/android_platform/development/scripts/stack_core.py b/third_party/android_platform/development/scripts/stack_core.py
new file mode 100755
index 0000000..a11fbb4
--- /dev/null
+++ b/third_party/android_platform/development/scripts/stack_core.py
@@ -0,0 +1,253 @@
+#!/usr/bin/env python
+#
+# Copyright (C) 2013 The Android Open Source Project
+#
+# 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.
+
+"""stack symbolizes native crash dumps."""
+
+import re
+
+import symbol
+
+def PrintTraceLines(trace_lines):
+  """Print back trace."""
+  maxlen = max(map(lambda tl: len(tl[1]), trace_lines))
+  print
+  print "Stack Trace:"
+  print "  RELADDR   " + "FUNCTION".ljust(maxlen) + "  FILE:LINE"
+  for tl in trace_lines:
+    (addr, symbol_with_offset, location) = tl
+    print "  %8s  %s  %s" % (addr, symbol_with_offset.ljust(maxlen), location)
+  return
+
+
+def PrintValueLines(value_lines):
+  """Print stack data values."""
+  maxlen = max(map(lambda tl: len(tl[2]), value_lines))
+  print
+  print "Stack Data:"
+  print "  ADDR      VALUE     " + "FUNCTION".ljust(maxlen) + "  FILE:LINE"
+  for vl in value_lines:
+    (addr, value, symbol_with_offset, location) = vl
+    print "  %8s  %8s  %s  %s" % (addr, value, symbol_with_offset.ljust(maxlen), location)
+  return
+
+UNKNOWN = "<unknown>"
+HEAP = "[heap]"
+STACK = "[stack]"
+
+
+def PrintOutput(trace_lines, value_lines, more_info):
+  if trace_lines:
+    PrintTraceLines(trace_lines)
+  if value_lines:
+    # TODO(cjhopman): it seems that symbol.SymbolInformation always fails to
+    # find information for addresses in value_lines in chrome libraries, and so
+    # value_lines have little value to us and merely clutter the output.
+    # Since information is sometimes contained in these lines (from system
+    # libraries), don't completely disable them.
+    if more_info:
+      PrintValueLines(value_lines)
+
+def PrintDivider():
+  print
+  print "-----------------------------------------------------\n"
+
+def ConvertTrace(lines, more_info):
+  """Convert strings containing native crash to a stack."""
+  process_info_line = re.compile("(pid: [0-9]+, tid: [0-9]+.*)")
+  signal_line = re.compile("(signal [0-9]+ \(.*\).*)")
+  register_line = re.compile("(([ ]*[0-9a-z]{2} [0-9a-f]{8}){4})")
+  thread_line = re.compile("(.*)(\-\-\- ){15}\-\-\-")
+  dalvik_jni_thread_line = re.compile("(\".*\" prio=[0-9]+ tid=[0-9]+ NATIVE.*)")
+  dalvik_native_thread_line = re.compile("(\".*\" sysTid=[0-9]+ nice=[0-9]+.*)")
+
+  width = "{8}"
+  if symbol.ARCH == "arm64" or symbol.ARCH == "x86_64":
+    width = "{16}"
+
+  # Matches LOG(FATAL) lines, like the following example:
+  #   [FATAL:source_file.cc(33)] Check failed: !instances_.empty()
+  log_fatal_line = re.compile("(\[FATAL\:.*\].*)$")
+
+  # Note that both trace and value line matching allow for variable amounts of
+  # whitespace (e.g. \t). This is because the we want to allow for the stack
+  # tool to operate on AndroidFeedback provided system logs. AndroidFeedback
+  # strips out double spaces that are found in tombsone files and logcat output.
+  #
+  # Examples of matched trace lines include lines from tombstone files like:
+  #   #00  pc 001cf42e  /data/data/com.my.project/lib/libmyproject.so
+  #   #00  pc 001cf42e  /data/data/com.my.project/lib/libmyproject.so (symbol)
+  # Or lines from AndroidFeedback crash report system logs like:
+  #   03-25 00:51:05.520 I/DEBUG ( 65): #00 pc 001cf42e /data/data/com.my.project/lib/libmyproject.so
+  # Please note the spacing differences.
+  trace_line = re.compile("(.*)\#(?P<frame>[0-9]+)[ \t]+(..)[ \t]+(0x)?(?P<address>[0-9a-f]{0,16})[ \t]+(?P<lib>[^\r\n \t]*)(?P<symbol_present> \((?P<symbol_name>.*)\))?")  # pylint: disable-msg=C6310
+
+  # Matches lines emitted by src/base/debug/stack_trace_android.cc, like:
+  #   #00 0x7324d92d /data/app-lib/org.chromium.native_test-1/libbase.cr.so+0x0006992d
+  # This pattern includes the unused named capture groups <symbol_present> and
+  # <symbol_name> so that it can interoperate with the |trace_line| regex.
+  debug_trace_line = re.compile(
+      '(.*)(?P<frame>\#[0-9]+ 0x[0-9a-f]' + width + ') '
+      '(?P<lib>[^+]+)\+0x(?P<address>[0-9a-f]' + width + ')'
+      '(?P<symbol_present>)(?P<symbol_name>)')
+
+  # Examples of matched value lines include:
+  #   bea4170c  8018e4e9  /data/data/com.my.project/lib/libmyproject.so
+  #   bea4170c  8018e4e9  /data/data/com.my.project/lib/libmyproject.so (symbol)
+  #   03-25 00:51:05.530 I/DEBUG ( 65): bea4170c 8018e4e9 /data/data/com.my.project/lib/libmyproject.so
+  # Again, note the spacing differences.
+  value_line = re.compile("(.*)([0-9a-f]" + width + ")[ \t]+([0-9a-f]" + width + ")[ \t]+([^\r\n \t]*)( \((.*)\))?")
+  # Lines from 'code around' sections of the output will be matched before
+  # value lines because otheriwse the 'code around' sections will be confused as
+  # value lines.
+  #
+  # Examples include:
+  #   801cf40c ffffc4cc 00b2f2c5 00b2f1c7 00c1e1a8
+  #   03-25 00:51:05.530 I/DEBUG ( 65): 801cf40c ffffc4cc 00b2f2c5 00b2f1c7 00c1e1a8
+  code_line = re.compile("(.*)[ \t]*[a-f0-9]" + width +
+                         "[ \t]*[a-f0-9]" + width +
+                         "[ \t]*[a-f0-9]" + width +
+                         "[ \t]*[a-f0-9]" + width +
+                         "[ \t]*[a-f0-9]" + width +
+                         "[ \t]*[ \r\n]")  # pylint: disable-msg=C6310
+
+  trace_lines = []
+  value_lines = []
+  last_frame = -1
+
+  # It is faster to get symbol information with a single call rather than with
+  # separate calls for each line. Since symbol.SymbolInformation caches results,
+  # we can extract all the addresses that we will want symbol information for
+  # from the log and call symbol.SymbolInformation so that the results are
+  # cached in the following lookups.
+  code_addresses = {}
+  for ln in lines:
+    line = unicode(ln, errors='ignore')
+    lib, address = None, None
+
+    match = trace_line.match(line) or debug_trace_line.match(line)
+    if match:
+      address, lib = match.group('address', 'lib')
+
+    match = value_line.match(line)
+    if match and not code_line.match(line):
+      (_0, _1, address, lib, _2, _3) = match.groups()
+
+    if lib:
+      code_addresses.setdefault(lib, set()).add(address)
+
+  for lib in code_addresses:
+    symbol.SymbolInformationForSet(
+        symbol.TranslateLibPath(lib), code_addresses[lib], more_info)
+
+  for ln in lines:
+    # AndroidFeedback adds zero width spaces into its crash reports. These
+    # should be removed or the regular expresssions will fail to match.
+    line = unicode(ln, errors='ignore')
+    process_header = process_info_line.search(line)
+    signal_header = signal_line.search(line)
+    register_header = register_line.search(line)
+    thread_header = thread_line.search(line)
+    dalvik_jni_thread_header = dalvik_jni_thread_line.search(line)
+    dalvik_native_thread_header = dalvik_native_thread_line.search(line)
+    log_fatal_header = log_fatal_line.search(line)
+    if (process_header or signal_header or register_header or thread_header or
+        dalvik_jni_thread_header or dalvik_native_thread_header or
+        log_fatal_header) :
+      if trace_lines or value_lines:
+        PrintOutput(trace_lines, value_lines, more_info)
+        PrintDivider()
+        trace_lines = []
+        value_lines = []
+        last_frame = -1
+      if process_header:
+        print process_header.group(1)
+      if signal_header:
+        print signal_header.group(1)
+      if register_header:
+        print register_header.group(1)
+      if thread_header:
+        print thread_header.group(1)
+      if dalvik_jni_thread_header:
+        print dalvik_jni_thread_header.group(1)
+      if dalvik_native_thread_header:
+        print dalvik_native_thread_header.group(1)
+      if log_fatal_header:
+        print log_fatal_header.group(1)
+      continue
+
+    match = trace_line.match(line) or debug_trace_line.match(line)
+    if match:
+      frame, code_addr, area, symbol_present, symbol_name = match.group(
+          'frame', 'address', 'lib', 'symbol_present', 'symbol_name')
+
+      if frame <= last_frame and (trace_lines or value_lines):
+        PrintOutput(trace_lines, value_lines, more_info)
+        PrintDivider()
+        trace_lines = []
+        value_lines = []
+      last_frame = frame
+
+      if area == UNKNOWN or area == HEAP or area == STACK:
+        trace_lines.append((code_addr, "", area))
+      else:
+        # If a calls b which further calls c and c is inlined to b, we want to
+        # display "a -> b -> c" in the stack trace instead of just "a -> c"
+        info = symbol.SymbolInformation(area, code_addr, more_info)
+        nest_count = len(info) - 1
+        for (source_symbol, source_location, object_symbol_with_offset) in info:
+          if not source_symbol:
+            if symbol_present:
+              source_symbol = symbol.CallCppFilt(symbol_name)
+            else:
+              source_symbol = UNKNOWN
+          if not source_location:
+            source_location = area
+          if nest_count > 0:
+            nest_count = nest_count - 1
+            trace_lines.append(("v------>", source_symbol, source_location))
+          else:
+            if not object_symbol_with_offset:
+              object_symbol_with_offset = source_symbol
+            trace_lines.append((code_addr,
+                                object_symbol_with_offset,
+                                source_location))
+    if code_line.match(line):
+      # Code lines should be ignored. If this were exluded the 'code around'
+      # sections would trigger value_line matches.
+      continue;
+    match = value_line.match(line)
+    if match:
+      (unused_, addr, value, area, symbol_present, symbol_name) = match.groups()
+      if area == UNKNOWN or area == HEAP or area == STACK or not area:
+        value_lines.append((addr, value, "", area))
+      else:
+        info = symbol.SymbolInformation(area, value, more_info)
+        (source_symbol, source_location, object_symbol_with_offset) = info.pop()
+        if not source_symbol:
+          if symbol_present:
+            source_symbol = symbol.CallCppFilt(symbol_name)
+          else:
+            source_symbol = UNKNOWN
+        if not source_location:
+          source_location = area
+        if not object_symbol_with_offset:
+          object_symbol_with_offset = source_symbol
+        value_lines.append((addr,
+                            value,
+                            object_symbol_with_offset,
+                            source_location))
+
+  PrintOutput(trace_lines, value_lines, more_info)
diff --git a/third_party/android_platform/development/scripts/symbol.py b/third_party/android_platform/development/scripts/symbol.py
new file mode 100755
index 0000000..5069d9e
--- /dev/null
+++ b/third_party/android_platform/development/scripts/symbol.py
@@ -0,0 +1,576 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2013 The Android Open Source Project
+#
+# 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.
+
+"""Module for looking up symbolic debugging information.
+
+The information can include symbol names, offsets, and source locations.
+"""
+
+import glob
+import itertools
+import os
+import re
+import subprocess
+import zipfile
+
+CHROME_SRC = os.path.join(os.path.realpath(os.path.dirname(__file__)),
+                          os.pardir, os.pardir, os.pardir, os.pardir)
+ANDROID_BUILD_TOP = CHROME_SRC
+SYMBOLS_DIR = CHROME_SRC
+CHROME_SYMBOLS_DIR = CHROME_SRC
+
+ARCH = "arm"
+
+TOOLCHAIN_INFO = None
+
+def Uname():
+  """'uname' for constructing prebuilt/<...> and out/host/<...> paths."""
+  uname = os.uname()[0]
+  if uname == "Darwin":
+    proc = os.uname()[-1]
+    if proc == "i386" or proc == "x86_64":
+      return "darwin-x86"
+    return "darwin-ppc"
+  if uname == "Linux":
+    return "linux-x86"
+  return uname
+
+def ToolPath(tool, toolchain_info=None):
+  """Return a full qualified path to the specified tool"""
+  # ToolPath looks for the tools in the completely incorrect directory.
+  # This looks in the checked in android_tools.
+  if ARCH == "arm":
+    toolchain_source = "arm-linux-androideabi-4.9"
+    toolchain_prefix = "arm-linux-androideabi"
+    ndk = "ndk"
+  elif ARCH == "arm64":
+    toolchain_source = "aarch64-linux-android-4.9"
+    toolchain_prefix = "aarch64-linux-android"
+    ndk = "ndk"
+  elif ARCH == "x86":
+    toolchain_source = "x86-4.9"
+    toolchain_prefix = "i686-linux-android"
+    ndk = "ndk"
+  elif ARCH == "x86_64":
+    toolchain_source = "x86_64-4.9"
+    toolchain_prefix = "x86_64-linux-android"
+    ndk = "ndk"
+  elif ARCH == "mips":
+    toolchain_source = "mipsel-linux-android-4.9"
+    toolchain_prefix = "mipsel-linux-android"
+    ndk = "ndk"
+  else:
+    raise Exception("Could not find tool chain")
+
+  toolchain_subdir = (
+      "third_party/android_tools/%s/toolchains/%s/prebuilt/linux-x86_64/bin" %
+       (ndk, toolchain_source))
+
+  return os.path.join(CHROME_SRC,
+                      toolchain_subdir,
+                      toolchain_prefix + "-" + tool)
+
+def FindToolchain():
+  """Look for the latest available toolchain
+
+  Args:
+    None
+
+  Returns:
+    A pair of strings containing toolchain label and target prefix.
+  """
+  global TOOLCHAIN_INFO
+  if TOOLCHAIN_INFO is not None:
+    return TOOLCHAIN_INFO
+
+  ## Known toolchains, newer ones in the front.
+  gcc_version = "4.9"
+  if ARCH == "arm64":
+    known_toolchains = [
+      ("aarch64-linux-android-" + gcc_version, "aarch64", "aarch64-linux-android")
+    ]
+  elif ARCH == "arm":
+    known_toolchains = [
+      ("arm-linux-androideabi-" + gcc_version, "arm", "arm-linux-androideabi")
+    ]
+  elif ARCH =="x86":
+    known_toolchains = [
+      ("x86-" + gcc_version, "x86", "i686-linux-android")
+    ]
+  elif ARCH =="x86_64":
+    known_toolchains = [
+      ("x86_64-" + gcc_version, "x86_64", "x86_64-linux-android")
+    ]
+  elif ARCH == "mips":
+    known_toolchains = [
+      ("mipsel-linux-android-" + gcc_version, "mips", "mipsel-linux-android")
+    ]
+  else:
+    known_toolchains = []
+
+  # Look for addr2line to check for valid toolchain path.
+  for (label, platform, target) in known_toolchains:
+    toolchain_info = (label, platform, target);
+    if os.path.exists(ToolPath("addr2line", toolchain_info)):
+      TOOLCHAIN_INFO = toolchain_info
+      print "Using toolchain from :" + ToolPath("", TOOLCHAIN_INFO)
+      return toolchain_info
+
+  raise Exception("Could not find tool chain")
+
+def GetAapt():
+  """Returns the path to aapt.
+
+  Args:
+    None
+
+  Returns:
+    the pathname of the 'aapt' executable.
+  """
+  sdk_home = os.path.join('third_party', 'android_tools', 'sdk')
+  sdk_home = os.environ.get('SDK_HOME', sdk_home)
+  aapt_exe = glob.glob(os.path.join(sdk_home, 'build-tools', '*', 'aapt'))
+  if not aapt_exe:
+    return None
+  return sorted(aapt_exe, key=os.path.getmtime, reverse=True)[0]
+
+def ApkMatchPackageName(aapt, apk_path, package_name):
+  """Returns true the APK's package name matches package_name.
+
+  Args:
+    aapt: pathname for the 'aapt' executable.
+    apk_path: pathname of the APK file.
+    package_name: package name to match.
+
+  Returns:
+    True if the package name matches or aapt is None, False otherwise.
+  """
+  if not aapt:
+    # Allow false positives
+    return True
+  aapt_output = subprocess.check_output(
+      [aapt, 'dump', 'badging', apk_path]).split('\n')
+  package_name_re = re.compile(r'package: .*name=\'(\S*)\'')
+  for line in aapt_output:
+    match = package_name_re.match(line)
+    if match:
+      return package_name == match.group(1)
+  return False
+
+def PathListJoin(prefix_list, suffix_list):
+   """Returns each prefix in prefix_list joined with each suffix in suffix list.
+
+   Args:
+     prefix_list: list of path prefixes.
+     suffix_list: list of path suffixes.
+
+   Returns:
+     List of paths each of which joins a prefix with a suffix.
+   """
+   return [
+       os.path.join(prefix, suffix)
+       for prefix in prefix_list for suffix in suffix_list ]
+
+def GetCandidates(dirs, filepart, candidate_fun):
+  """Returns a list of candidate filenames.
+
+  Args:
+    dirs: a list of the directory part of the pathname.
+    filepart: the file part of the pathname.
+    candidate_fun: a function to apply to each candidate, returns a list.
+
+  Returns:
+    A list of candidate files ordered by modification time, newest first.
+  """
+  out_dir = os.environ.get('CHROMIUM_OUT_DIR', 'out')
+  out_dir = os.path.join(CHROME_SYMBOLS_DIR, out_dir)
+  buildtype = os.environ.get('BUILDTYPE')
+  if buildtype:
+    buildtype_list = [ buildtype ]
+  else:
+    buildtype_list = [ 'Debug', 'Release' ]
+
+  candidates = PathListJoin([out_dir], buildtype_list) + [CHROME_SYMBOLS_DIR]
+  candidates = PathListJoin(candidates, dirs)
+  candidates = PathListJoin(candidates, [filepart])
+  candidates = list(
+      itertools.chain.from_iterable(map(candidate_fun, candidates)))
+  candidates = sorted(candidates, key=os.path.getmtime, reverse=True)
+  # candidates = ['/usr/local/google/home/qsr/programmes/mojo/src/out/android_Debug/libmojo_shell.so']
+  return candidates
+
+def GetCandidateApks():
+  """Returns a list of APKs which could contain the library.
+
+  Args:
+    None
+
+  Returns:
+    list of APK filename which could contain the library.
+  """
+  return GetCandidates(['apks'], '*.apk', glob.glob)
+
+def GetCrazyLib(apk_filename):
+  """Returns the name of the first crazy library from this APK.
+
+  Args:
+    apk_filename: name of an APK file.
+
+  Returns:
+    Name of the first library which would be crazy loaded from this APK.
+  """
+  zip_file = zipfile.ZipFile(apk_filename, 'r')
+  for filename in zip_file.namelist():
+    match = re.match('lib/[^/]*/crazy.(lib.*[.]so)', filename)
+    if match:
+      return match.group(1)
+
+def GetMatchingApks(device_apk_name):
+  """Find any APKs which match the package indicated by the device_apk_name.
+
+  Args:
+     device_apk_name: name of the APK on the device.
+
+  Returns:
+     A list of APK filenames which could contain the desired library.
+  """
+  match = re.match('(.*)-[0-9]+[.]apk$', device_apk_name)
+  if not match:
+    return None
+  package_name = match.group(1)
+  return filter(
+      lambda candidate_apk:
+          ApkMatchPackageName(GetAapt(), candidate_apk, package_name),
+      GetCandidateApks())
+
+def MapDeviceApkToLibrary(device_apk_name):
+  """Provide a library name which corresponds with device_apk_name.
+
+  Args:
+    device_apk_name: name of the APK on the device.
+
+  Returns:
+    Name of the library which corresponds to that APK.
+  """
+  matching_apks = GetMatchingApks(device_apk_name)
+  for matching_apk in matching_apks:
+    crazy_lib = GetCrazyLib(matching_apk)
+    if crazy_lib:
+      return crazy_lib
+
+def GetCandidateLibraries(library_name):
+  """Returns a list of candidate library filenames.
+
+  Args:
+    library_name: basename of the library to match.
+
+  Returns:
+    A list of matching library filenames for library_name.
+  """
+  return GetCandidates(
+      ['', 'lib', 'lib.target'], library_name,
+      lambda filename: filter(os.path.exists, [filename]))
+
+def TranslateLibPath(lib):
+  # SymbolInformation(lib, addr) receives lib as the path from symbols
+  # root to the symbols file. This needs to be translated to point to the
+  # correct .so path. If the user doesn't explicitly specify which directory to
+  # use, then use the most recently updated one in one of the known directories.
+  # If the .so is not found somewhere in CHROME_SYMBOLS_DIR, leave it
+  # untranslated in case it is an Android symbol in SYMBOLS_DIR.
+  library_name = os.path.basename(lib)
+
+  # The filename in the stack trace maybe an APK name rather than a library
+  # name. This happens when the library was loaded directly from inside the
+  # APK. If this is the case we try to figure out the library name by looking
+  # for a matching APK file and finding the name of the library in contains.
+  # The name of the APK file on the device is of the form
+  # <package_name>-<number>.apk. The APK file on the host may have any name
+  # so we look at the APK badging to see if the package name matches.
+  if re.search('-[0-9]+[.]apk$', library_name):
+    mapping = MapDeviceApkToLibrary(library_name)
+    if mapping:
+      library_name = mapping
+
+  candidate_libraries = GetCandidateLibraries(library_name)
+  if not candidate_libraries:
+    return lib
+
+  library_path = os.path.relpath(candidate_libraries[0], SYMBOLS_DIR)
+  return '/' + library_path
+
+def SymbolInformation(lib, addr, get_detailed_info):
+  """Look up symbol information about an address.
+
+  Args:
+    lib: library (or executable) pathname containing symbols
+    addr: string hexidecimal address
+
+  Returns:
+    A list of the form [(source_symbol, source_location,
+    object_symbol_with_offset)].
+
+    If the function has been inlined then the list may contain
+    more than one element with the symbols for the most deeply
+    nested inlined location appearing first.  The list is
+    always non-empty, even if no information is available.
+
+    Usually you want to display the source_location and
+    object_symbol_with_offset from the last element in the list.
+  """
+  lib = TranslateLibPath(lib)
+  info = SymbolInformationForSet(lib, set([addr]), get_detailed_info)
+  return (info and info.get(addr)) or [(None, None, None)]
+
+
+def SymbolInformationForSet(lib, unique_addrs, get_detailed_info):
+  """Look up symbol information for a set of addresses from the given library.
+
+  Args:
+    lib: library (or executable) pathname containing symbols
+    unique_addrs: set of hexidecimal addresses
+
+  Returns:
+    A dictionary of the form {addr: [(source_symbol, source_location,
+    object_symbol_with_offset)]} where each address has a list of
+    associated symbols and locations.  The list is always non-empty.
+
+    If the function has been inlined then the list may contain
+    more than one element with the symbols for the most deeply
+    nested inlined location appearing first.  The list is
+    always non-empty, even if no information is available.
+
+    Usually you want to display the source_location and
+    object_symbol_with_offset from the last element in the list.
+  """
+  if not lib:
+    return None
+
+  addr_to_line = CallAddr2LineForSet(lib, unique_addrs)
+  if not addr_to_line:
+    return None
+
+  if get_detailed_info:
+    addr_to_objdump = CallObjdumpForSet(lib, unique_addrs)
+    if not addr_to_objdump:
+      return None
+  else:
+    addr_to_objdump = dict((addr, ("", 0)) for addr in unique_addrs)
+
+  result = {}
+  for addr in unique_addrs:
+    source_info = addr_to_line.get(addr)
+    if not source_info:
+      source_info = [(None, None)]
+    if addr in addr_to_objdump:
+      (object_symbol, object_offset) = addr_to_objdump.get(addr)
+      object_symbol_with_offset = FormatSymbolWithOffset(object_symbol,
+                                                         object_offset)
+    else:
+      object_symbol_with_offset = None
+    result[addr] = [(source_symbol, source_location, object_symbol_with_offset)
+        for (source_symbol, source_location) in source_info]
+
+  return result
+
+
+class MemoizedForSet(object):
+  def __init__(self, fn):
+    self.fn = fn
+    self.cache = {}
+
+  def __call__(self, lib, unique_addrs):
+    lib_cache = self.cache.setdefault(lib, {})
+
+    no_cache = filter(lambda x: x not in lib_cache, unique_addrs)
+    if no_cache:
+      lib_cache.update((k, None) for k in no_cache)
+      result = self.fn(lib, no_cache)
+      if result:
+        lib_cache.update(result)
+
+    return dict((k, lib_cache[k]) for k in unique_addrs if lib_cache[k])
+
+
+@MemoizedForSet
+def CallAddr2LineForSet(lib, unique_addrs):
+  """Look up line and symbol information for a set of addresses.
+
+  Args:
+    lib: library (or executable) pathname containing symbols
+    unique_addrs: set of string hexidecimal addresses look up.
+
+  Returns:
+    A dictionary of the form {addr: [(symbol, file:line)]} where
+    each address has a list of associated symbols and locations
+    or an empty list if no symbol information was found.
+
+    If the function has been inlined then the list may contain
+    more than one element with the symbols for the most deeply
+    nested inlined location appearing first.
+  """
+  if not lib:
+    return None
+
+
+  symbols = SYMBOLS_DIR + lib
+  if not os.path.isfile(symbols):
+    return None
+
+  (label, platform, target) = FindToolchain()
+  cmd = [ToolPath("addr2line"), "--functions", "--inlines",
+      "--demangle", "--exe=" + symbols]
+  child = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
+
+  result = {}
+  addrs = sorted(unique_addrs)
+  for addr in addrs:
+    child.stdin.write("0x%s\n" % addr)
+    child.stdin.flush()
+    records = []
+    first = True
+    while True:
+      symbol = child.stdout.readline().strip()
+      if symbol == "??":
+        symbol = None
+      location = child.stdout.readline().strip()
+      if location == "??:0":
+        location = None
+      if symbol is None and location is None:
+        break
+      records.append((symbol, location))
+      if first:
+        # Write a blank line as a sentinel so we know when to stop
+        # reading inlines from the output.
+        # The blank line will cause addr2line to emit "??\n??:0\n".
+        child.stdin.write("\n")
+        first = False
+    result[addr] = records
+  child.stdin.close()
+  child.stdout.close()
+  return result
+
+
+def StripPC(addr):
+  """Strips the Thumb bit a program counter address when appropriate.
+
+  Args:
+    addr: the program counter address
+
+  Returns:
+    The stripped program counter address.
+  """
+  global ARCH
+
+  if ARCH == "arm":
+    return addr & ~1
+  return addr
+
+@MemoizedForSet
+def CallObjdumpForSet(lib, unique_addrs):
+  """Use objdump to find out the names of the containing functions.
+
+  Args:
+    lib: library (or executable) pathname containing symbols
+    unique_addrs: set of string hexidecimal addresses to find the functions for.
+
+  Returns:
+    A dictionary of the form {addr: (string symbol, offset)}.
+  """
+  if not lib:
+    return None
+
+  symbols = SYMBOLS_DIR + lib
+  if not os.path.exists(symbols):
+    return None
+
+  symbols = SYMBOLS_DIR + lib
+  if not os.path.exists(symbols):
+    return None
+
+  result = {}
+
+  # Function lines look like:
+  #   000177b0 <android::IBinder::~IBinder()+0x2c>:
+  # We pull out the address and function first. Then we check for an optional
+  # offset. This is tricky due to functions that look like "operator+(..)+0x2c"
+  func_regexp = re.compile("(^[a-f0-9]*) \<(.*)\>:$")
+  offset_regexp = re.compile("(.*)\+0x([a-f0-9]*)")
+
+  # A disassembly line looks like:
+  #   177b2:  b510        push  {r4, lr}
+  asm_regexp = re.compile("(^[ a-f0-9]*):[ a-f0-0]*.*$")
+
+  for target_addr in unique_addrs:
+    start_addr_dec = str(StripPC(int(target_addr, 16)))
+    stop_addr_dec = str(StripPC(int(target_addr, 16)) + 8)
+    cmd = [ToolPath("objdump"),
+           "--section=.text",
+           "--demangle",
+           "--disassemble",
+           "--start-address=" + start_addr_dec,
+           "--stop-address=" + stop_addr_dec,
+           symbols]
+
+    current_symbol = None    # The current function symbol in the disassembly.
+    current_symbol_addr = 0  # The address of the current function.
+
+    stream = subprocess.Popen(cmd, stdout=subprocess.PIPE).stdout
+    for line in stream:
+      # Is it a function line like:
+      #   000177b0 <android::IBinder::~IBinder()>:
+      components = func_regexp.match(line)
+      if components:
+        # This is a new function, so record the current function and its address.
+        current_symbol_addr = int(components.group(1), 16)
+        current_symbol = components.group(2)
+
+        # Does it have an optional offset like: "foo(..)+0x2c"?
+        components = offset_regexp.match(current_symbol)
+        if components:
+          current_symbol = components.group(1)
+          offset = components.group(2)
+          if offset:
+            current_symbol_addr -= int(offset, 16)
+
+      # Is it an disassembly line like:
+      #   177b2:  b510        push  {r4, lr}
+      components = asm_regexp.match(line)
+      if components:
+        addr = components.group(1)
+        i_addr = int(addr, 16)
+        i_target = StripPC(int(target_addr, 16))
+        if i_addr == i_target:
+          result[target_addr] = (current_symbol, i_target - current_symbol_addr)
+    stream.close()
+
+  return result
+
+
+def CallCppFilt(mangled_symbol):
+  cmd = [ToolPath("c++filt")]
+  process = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
+  process.stdin.write(mangled_symbol)
+  process.stdin.write("\n")
+  process.stdin.close()
+  demangled_symbol = process.stdout.readline().strip()
+  process.stdout.close()
+  return demangled_symbol
+
+def FormatSymbolWithOffset(symbol, offset):
+  if offset == 0:
+    return symbol
+  return "%s+%d" % (symbol, offset)
diff --git a/third_party/android_platform/webview/frameworks_1597296.jar b/third_party/android_platform/webview/frameworks_1597296.jar
new file mode 100644
index 0000000..1e8ff87
--- /dev/null
+++ b/third_party/android_platform/webview/frameworks_1597296.jar
Binary files differ
diff --git a/third_party/android_platform/webview/frameworks_1597296_manifest.xml b/third_party/android_platform/webview/frameworks_1597296_manifest.xml
new file mode 100644
index 0000000..1fff687
--- /dev/null
+++ b/third_party/android_platform/webview/frameworks_1597296_manifest.xml
@@ -0,0 +1,507 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<manifest>
+  <remote fetch=".." name="goog"/>
+  
+  <default remote="goog" revision="mirror-aosp-master"/>
+  
+  <project groups="device,flo" name="device/asus/deb" revision="f7bd9fa832e3256aa4eb940d1e844f07d966b7ab" upstream="mirror-aosp-master"/>
+  <project groups="device,flo" name="device/asus/flo" revision="3a1aaa95b116d498c89300f7a7dfa75cbddef783" upstream="mirror-aosp-master"/>
+  <project groups="device,flo" name="device/asus/flo-kernel" revision="a9fee327251d98b45e0012dd45358c4318e11bb2" upstream="mirror-aosp-master"/>
+  <project groups="device,fugu" name="device/asus/fugu" revision="4e9139445281885e6cf68939df563955d184d6b9" upstream="mirror-aosp-master"/>
+  <project groups="device,fugu" name="device/asus/fugu-kernel" revision="f3405550c8b134d8bd6e24ce29db7badd1568543" upstream="mirror-aosp-master"/>
+  <project groups="device,grouper" name="device/asus/grouper" revision="c64475945d352fe9d8f21b2bfa5ea09c23d332e3" upstream="mirror-aosp-master"/>
+  <project groups="device,grouper" name="device/asus/tilapia" revision="495f0a9b2064a129af669e9959c2027f984e889c" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="device/common" revision="b143878e855aff96d089c26e99f02879062bdc1b" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="device/generic/arm64" revision="39249053f37b7f9633eb406af3dbedfea7bf8b3e" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="device/generic/armv7-a-neon" revision="2a96372d80c693fc28b29328b3e86b65cab9189b" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="device/generic/common" revision="11c092a6cbfcf6207f07a9a8e3398e747e7f5461" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="device/generic/goldfish" revision="c2f8474518a220b3c1b86b6d4f9fa28ed9bb734a" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="device/generic/mini-emulator-arm64" revision="743dd408af5c662761bafc05eacdb18ade88cf3a" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="device/generic/mini-emulator-armv7-a-neon" revision="94dbaf7049a7947e51d8ec3c62634e3acc29b590" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="device/generic/mini-emulator-mips" revision="3fdb24de40ca27da9a86f10f31314f2a13259db5" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="device/generic/mini-emulator-x86" revision="65d59e2be2cfd713513a05d80a0f75794ab60579" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="device/generic/mini-emulator-x86_64" revision="673aae8bd65d9708821c4062f6a0364a859e7ae4" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="device/generic/mips" revision="7caf8d5796ec0f59b2e1be865b76c5a5ad5707e6" upstream="mirror-aosp-master"/>
+  <project name="device/generic/qemu" revision="bd2543e810f3fa56e9dcfe301b893832534c85db" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="device/generic/x86" revision="17657b831b0903f148a4392d88d83dde1dddab47" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="device/generic/x86_64" revision="138339be1da9b0f34befe3751b0bae874d7253db" upstream="mirror-aosp-master"/>
+  <project groups="device" name="device/google/accessory/arduino" revision="abc5159a3ca9dbb5c7e364a1eab99901a4440ac5" upstream="mirror-aosp-master"/>
+  <project groups="device" name="device/google/accessory/demokit" revision="7dfe7f89a3b174709c773fe319531006e46440d9" upstream="mirror-aosp-master"/>
+  <project groups="device,fugu" name="device/google/atv" revision="1fd2c3361c21d1e67065e50f84d47524c0e1bb5e" upstream="mirror-aosp-master"/>
+  <project groups="device,flounder" name="device/htc/flounder" revision="ba666eb415ce5818beb0b2c4ccbda77a9b8cb272" upstream="mirror-aosp-master"/>
+  <project groups="device,flounder" name="device/htc/flounder-kernel" revision="8a4f5f783201d9acb0a628fdd2a313e508917e49" upstream="mirror-aosp-master"/>
+  <project groups="device,hammerhead" name="device/lge/hammerhead" revision="49ffe76117ec0c77fec250d9a5486de49acdf7d2" upstream="mirror-aosp-master"/>
+  <project groups="device,hammerhead" name="device/lge/hammerhead-kernel" revision="d9dc941819bcc9ceb005b330987f7f7ba1dc46a9" upstream="mirror-aosp-master"/>
+  <project groups="device,mako" name="device/lge/mako" revision="874a9ba73289a542eb28063c985e639da4bd048f" upstream="mirror-aosp-master"/>
+  <project groups="device,mako" name="device/lge/mako-kernel" revision="7bf237bdf8a8c6d516219dc09b3bc114aa0e863d" upstream="mirror-aosp-master"/>
+  <project groups="device,shamu" name="device/moto/shamu" revision="a3e1fdaba0688f22942bbedb52f92b00ad4560b9" upstream="mirror-aosp-master"/>
+  <project groups="device,shamu" name="device/moto/shamu-kernel" revision="78c6a1b3c1af29c82e094c5ace530a1897ecf1f5" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="device/sample" revision="bad2c94542e03d66acceae7a46c383eb9f30911a" upstream="mirror-aosp-master"/>
+  <project groups="device,manta" name="device/samsung/manta" revision="faa39d2fcb8a6e588bdefa7f85f2a66011bc22f1" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/abi/cpp" path="abi/cpp" revision="1c7cf0400b5fd28491d2d670ac4482120542ce4b" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/art" path="art" revision="a500b03003c9286cc049c27fdb2e0f0750f83a30" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/bionic" path="bionic" revision="649f78df79bc45a46de9f3c391f395d5ab4fe73a" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/bootable/bootloader/legacy" path="bootable/bootloader/legacy" revision="3c491d6efb8ff2534a6934702760a6273f197918" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/bootable/recovery" path="bootable/recovery" revision="92242c704846f28932e555dba800f4a701063896" upstream="mirror-aosp-master"/>
+  <project groups="pdk,tradefed" name="platform/build" path="build" revision="9f7c5fef0e7c00d00c67242c2a360911b53374e0" upstream="mirror-aosp-master">
+    <copyfile dest="Makefile" src="core/root.mk"/>
+  </project>
+  <project groups="cts,pdk-cw-fs" name="platform/cts" path="cts" revision="0d6c56f8e4019a721d05bab20357b05ab38efd8b" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/dalvik" path="dalvik" revision="ec199fc9e406cc4ec7348b157d49b96d6897944b" upstream="mirror-aosp-master"/>
+  <project name="platform/developers/build" path="developers/build" revision="f6fd7f242a1f5ac51840ea8d02e24f56fd862f11" upstream="mirror-aosp-master"/>
+  <project name="platform/developers/demos" path="developers/demos" revision="7c700e80b902c8f7778ffd63c287ac5710fd69ef" upstream="mirror-aosp-master"/>
+  <project name="platform/developers/docs" path="developers/docs" revision="c0b835ddd9acc27176dc9a0f7d1aa2faf5d51806" upstream="mirror-aosp-master"/>
+  <project name="platform/developers/samples/android" path="developers/samples/android" revision="1b1d8b0c3f29b2520554602eb72c0e9456efa5ac" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/development" path="development" revision="9c93ba1d30bdbc4c01d051b6bea4c11347368efd" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/docs/source.android.com" path="docs/source.android.com" revision="a23b984af6f82ee0b77e733ef4a955581aa1c979" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/aac" path="external/aac" revision="d149516e1a3a63549d2c654b1398544d5de46a3e" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/android-clat" path="external/android-clat" revision="30588552f63424bd4bdbf5ebdce8ba63d10a7bb2" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/ant-glob" path="external/ant-glob" revision="0f189400fd2a36bf11bfb058e7f3917eb7ed163a" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs,tradefed" name="platform/external/antlr" path="external/antlr" revision="47997265eeb7d954a32ece693bbe6dab740872dd" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/apache-harmony" path="external/apache-harmony" revision="537ad57d762c8e57d847337f377b9606bc2874f7" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/apache-http" path="external/apache-http" revision="3db33b69ecf386804af1710935f64a8eaa0c6253" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/apache-qp" path="external/apache-qp" revision="64ea622b23e6612eb8e7dcae6bfd4314beb022a8" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/apache-xml" path="external/apache-xml" revision="ce8a93585b71d80730020e0cd945442b05dd606b" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/arduino" path="external/arduino" revision="60f21b2e195defce0d56fa789ece5cb04a34e37b" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/bison" path="external/bison" revision="c2418b886165add7f5a31fc5609f0ce2d004a90e" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/blktrace" path="external/blktrace" revision="d345431f16b8f76f30a58193ff2b26d5853e1109" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/bluetooth/bluedroid" path="external/bluetooth/bluedroid" revision="51dcba7a9a9860eb1f6a44ae268cbf24e3411694" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/bouncycastle" path="external/bouncycastle" revision="bd63be61caf85120ee69cda508a35580a230d57c" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/bsdiff" path="external/bsdiff" revision="6f503758fad2cbcf8359e8f0af32e4d79a2a48ae" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/bzip2" path="external/bzip2" revision="1cb636bd8e9e5cdfd5d5b2909a122f6e80db62de" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/ceres-solver" path="external/ceres-solver" revision="79397c21138f54fcff6ec067b44b847f1f7e0e98" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/checkpolicy" path="external/checkpolicy" revision="766346ccd3f0cd929c6763b0482a7b684b5331f0" upstream="mirror-aosp-master"/>
+  <project name="platform/external/chromium-libpac" path="external/chromium-libpac" revision="35152756c6acf9f7af4deed494afb0990b6087cd" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/chromium-trace" path="external/chromium-trace" revision="a4c64913fc7e0930ad3aa40415c5d467e2cc3b8b" upstream="mirror-aosp-master"/>
+  <project name="platform/external/chromium_org" path="external/chromium_org" revision="be0db613a3916853a2abecc9b0bd869b7640022e" upstream="mirror-aosp-master"/>
+  <project name="platform/external/chromium_org/sdch/open-vcdiff" path="external/chromium_org/sdch/open-vcdiff" revision="6d634da5463d9bc5fc88f86aec1d2ac4fe6f612e" upstream="mirror-aosp-master"/>
+  <project name="platform/external/chromium_org/testing/gtest" path="external/chromium_org/testing/gtest" revision="f2c08b9201e74d4896de174d47403a2486c9cf31" upstream="mirror-aosp-master"/>
+  <project name="platform/external/chromium_org/third_party/WebKit" path="external/chromium_org/third_party/WebKit" revision="e867532940814305af6919ad0d230a066310772d" upstream="mirror-aosp-master"/>
+  <project name="platform/external/chromium_org/third_party/angle" path="external/chromium_org/third_party/angle" revision="90f9bfb619635e6e6fe3d6b142cce2c85d894356" upstream="mirror-aosp-master"/>
+  <project name="platform/external/chromium_org/third_party/boringssl/src" path="external/chromium_org/third_party/boringssl/src" revision="da0d1461616a796a3ec17ab0bde246e5620204d6" upstream="mirror-aosp-master"/>
+  <project name="platform/external/chromium_org/third_party/brotli/src" path="external/chromium_org/third_party/brotli/src" revision="63c1c7e94f0bdd23dd20c8cbf0475fdf3f27ab4b" upstream="mirror-aosp-master"/>
+  <project name="platform/external/chromium_org/third_party/eyesfree/src/android/java/src/com/googlecode/eyesfree/braille" path="external/chromium_org/third_party/eyesfree/src/android/java/src/com/googlecode/eyesfree/braille" revision="bb4c72f1deb0b8b2b0468b0bf1050462ebcf6135" upstream="mirror-aosp-master"/>
+  <project name="platform/external/chromium_org/third_party/freetype" path="external/chromium_org/third_party/freetype" revision="585a8c4239bad0147e6b1310d8e2cdcc5024d6d9" upstream="mirror-aosp-master"/>
+  <project name="platform/external/chromium_org/third_party/icu" path="external/chromium_org/third_party/icu" revision="75e8cb4da8d131daa99d9fbed996cbd42083fef3" upstream="mirror-aosp-master"/>
+  <project name="platform/external/chromium_org/third_party/leveldatabase/src" path="external/chromium_org/third_party/leveldatabase/src" revision="d4e10f2a91f5de7bd17adcdbd80c54b19ab336fe" upstream="mirror-aosp-master"/>
+  <project name="platform/external/chromium_org/third_party/libaddressinput/src" path="external/chromium_org/third_party/libaddressinput/src" revision="bc218bd8b5a06b381ac7a99e1301bb900076bb34" upstream="mirror-aosp-master"/>
+  <project name="platform/external/chromium_org/third_party/libjingle/source/talk" path="external/chromium_org/third_party/libjingle/source/talk" revision="2eed1ff3f44fb784dbe3aece06ec6e4781e177f1" upstream="mirror-aosp-master"/>
+  <project name="platform/external/chromium_org/third_party/libjpeg_turbo" path="external/chromium_org/third_party/libjpeg_turbo" revision="5f1d38f9e7ca4dfe188e14a270c76e8f4de75dde" upstream="mirror-aosp-master"/>
+  <project name="platform/external/chromium_org/third_party/libphonenumber/src/phonenumbers" path="external/chromium_org/third_party/libphonenumber/src/phonenumbers" revision="de6af28b9f9f34a31ffb7772b7510fd215a0814e" upstream="mirror-aosp-master"/>
+  <project name="platform/external/chromium_org/third_party/libphonenumber/src/resources" path="external/chromium_org/third_party/libphonenumber/src/resources" revision="8f194ead1ebd76ebb28b7e2dfc0a7baddc62bb22" upstream="mirror-aosp-master"/>
+  <project name="platform/external/chromium_org/third_party/libsrtp" path="external/chromium_org/third_party/libsrtp" revision="b49fa91bb8b4f62eadc5ed004c6b8e83ff0ae44c" upstream="mirror-aosp-master"/>
+  <project name="platform/external/chromium_org/third_party/libvpx" path="external/chromium_org/third_party/libvpx" revision="d79cb8cdf5a8090b3907d067cc572c11dc71c5ea" upstream="mirror-aosp-master"/>
+  <project name="platform/external/chromium_org/third_party/libyuv" path="external/chromium_org/third_party/libyuv" revision="e2a7c3c438c2cb87f179d2b1fcd78faa00f5ec45" upstream="mirror-aosp-master"/>
+  <project name="platform/external/chromium_org/third_party/mesa/src" path="external/chromium_org/third_party/mesa/src" revision="c04f209604ea86ada328d215866505c706a212f5" upstream="mirror-aosp-master"/>
+  <project name="platform/external/chromium_org/third_party/openmax_dl" path="external/chromium_org/third_party/openmax_dl" revision="f79940c95d7a5a6700174c056d3c848e6cccd8bc" upstream="mirror-aosp-master"/>
+  <project name="platform/external/chromium_org/third_party/opus/src" path="external/chromium_org/third_party/opus/src" revision="3f583a81e9073ccf59df6a8eb747a85c49923783" upstream="mirror-aosp-master"/>
+  <project name="platform/external/chromium_org/third_party/ots" path="external/chromium_org/third_party/ots" revision="6c1182f864acaa8046170b25f3337b5168f2217e" upstream="mirror-aosp-master"/>
+  <project name="platform/external/chromium_org/third_party/sfntly/cpp/src" path="external/chromium_org/third_party/sfntly/cpp/src" revision="2bac2ec7167835b214bfe42e762cd2ce6cf8cf1a" upstream="mirror-aosp-master"/>
+  <project name="platform/external/chromium_org/third_party/skia" path="external/chromium_org/third_party/skia" revision="f084d3b1bf483951552ffe3f4b9456162668b3aa" upstream="mirror-aosp-master"/>
+  <project name="platform/external/chromium_org/third_party/smhasher/src" path="external/chromium_org/third_party/smhasher/src" revision="09e3094b8ab52bb1ad9ab8c8351d99df50327b67" upstream="mirror-aosp-master"/>
+  <project name="platform/external/chromium_org/third_party/usrsctp/usrsctplib" path="external/chromium_org/third_party/usrsctp/usrsctplib" revision="4d40c21260bf7ed50d3e06ca4d76e8bbcee3674f" upstream="mirror-aosp-master"/>
+  <project name="platform/external/chromium_org/third_party/webrtc" path="external/chromium_org/third_party/webrtc" revision="5d04ee7f9fa65f7abe7b1cd18e35335c59047e5b" upstream="mirror-aosp-master"/>
+  <project name="platform/external/chromium_org/third_party/yasm/source/patched-yasm" path="external/chromium_org/third_party/yasm/source/patched-yasm" revision="0f308c9bc9aa3258a0e90285b9d4e69bbb5b0a73" upstream="mirror-aosp-master"/>
+  <project name="platform/external/chromium_org/tools/grit" path="external/chromium_org/tools/grit" revision="0d724c494c082ea290e16211e85ffc801d5319bf" upstream="mirror-aosp-master"/>
+  <project name="platform/external/chromium_org/tools/gyp" path="external/chromium_org/tools/gyp" revision="2c322fa0879bb1d22b6ce09b698562d8d7cae36d" upstream="mirror-aosp-master"/>
+  <project name="platform/external/chromium_org/v8" path="external/chromium_org/v8" revision="ea6e97ca4a9c08d180c9ea5a8c3e6524cc3c5e12" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/clang" path="external/clang" revision="8b939a0498b8d24f4a5d7c6e6ac94ddba75ee933" upstream="mirror-aosp-master"/>
+  <project name="platform/external/cmockery" path="external/cmockery" revision="bdd62c531bbdea115a3a7e71bba91c19dd319cc4" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/compiler-rt" path="external/compiler-rt" revision="45badb4fbfc53b8bebbcb431cb4b9807184da901" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/conscrypt" path="external/conscrypt" revision="e53baea9221be7f9828d0f338ede284e22f55722" upstream="mirror-aosp-master"/>
+  <project name="platform/external/deqp" path="external/deqp" revision="7665e4ff5452f9fc261434f98484728a233ef452" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/dexmaker" path="external/dexmaker" revision="00bf6870ff223dec90d9fac39e5dfb464a59f6de" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/dhcpcd" path="external/dhcpcd" revision="4c31886d40a73811283e83bfdaf787bf62ec8cf9" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/dnsmasq" path="external/dnsmasq" revision="f0f842adf0d07ddc6d3338b7098310756b7c6f35" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs,tradefed" name="platform/external/doclava" path="external/doclava" revision="8566f2d5a4aebe02c2324b40b29d351113cd976a" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/droiddriver" path="external/droiddriver" revision="270f805bf930fb13c6a314c130de017298012eb8" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/e2fsprogs" path="external/e2fsprogs" revision="2ca3c65991609bb5b48004ec3c7a66f6b417beed" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs,tradefed" name="platform/external/easymock" path="external/easymock" revision="c9a234086537e5fd820b110bbd99e3cdc695004c" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/eclipse-basebuilder" path="external/eclipse-basebuilder" revision="6134da6347cc997e0cf2921aaadfb46f21c05d85" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/eclipse-windowbuilder" path="external/eclipse-windowbuilder" revision="a5f3ee137e94737538ec3bdf9b3716765d178c17" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/eigen" path="external/eigen" revision="7faaa9f3f0df9d23790277834d426c3d992ac3ba" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/elfutils" path="external/elfutils" revision="bbe96fe08bb58b49fd058ca92da510e1948aaf2e" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs,tradefed" name="platform/external/emma" path="external/emma" revision="daacd02a6b9f7a3e82bdf1cc5b84db85ed59edb1" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/esd" path="external/esd" revision="224a67f2683a7ee997179fc5dd16115e39987b0f" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/expat" path="external/expat" revision="907ec055718996baf36961e7f47f8447e49b3865" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/eyes-free" path="external/eyes-free" revision="16bd4c7a4d1bfe229068b637614dad7c48dd2ceb" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/f2fs-tools" path="external/f2fs-tools" revision="100ea9f321b92fa1e15889ec0ef72b6b8929459d" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/fdlibm" path="external/fdlibm" revision="e240b95f6f3127af5f23c6be77083255392bdf8a" upstream="mirror-aosp-master"/>
+  <project name="platform/external/fio" path="external/fio" revision="b287c3293081dd98182a026a15e63536148b3287" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/flac" path="external/flac" revision="457fe12432caac0de0e430bb976dab681b3ae1a2" upstream="mirror-aosp-master"/>
+  <project name="platform/external/fonttools" path="external/fonttools" revision="5b2a84657752801e007ee075e10beda0afde0ae3" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/freetype" path="external/freetype" revision="9c745321260bb728ab1cd1c8fd5f075854b2ad49" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/fsck_msdos" path="external/fsck_msdos" revision="17a1471db8c528cd9d44ec4385d2eb3614138856" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/gcc-demangle" path="external/gcc-demangle" revision="9241386b62c353302c2f9eccda0672685b252b4d" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/genext2fs" path="external/genext2fs" revision="e11a9c7fe6f1cef99aad2f25afaea37b72fe9f93" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs,qcom_msm8x26" name="platform/external/giflib" path="external/giflib" revision="b5a8e44648685070f146ff8456d36013c502f7a1" upstream="mirror-aosp-master"/>
+  <project name="platform/external/glide" path="external/glide" revision="3dddc8773c50852bc592b8bc32d92eb153ce8dba" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/google-diff-match-patch" path="external/google-diff-match-patch" revision="cecbe12841337860291c2d6a5728b681ec5fca2a" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/google-fonts/carrois-gothic-sc" path="external/google-fonts/carrois-gothic-sc" revision="0062a10458d4c357f3082d66bcb129d11913aaae" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/google-fonts/coming-soon" path="external/google-fonts/coming-soon" revision="2c5cb418c690815545bbb0316eae5fd33b9fc859" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/google-fonts/cutive-mono" path="external/google-fonts/cutive-mono" revision="bce2136662854076023066602526ba299e6556b2" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/google-fonts/dancing-script" path="external/google-fonts/dancing-script" revision="7b6623bd54cee3e48ae8a4f477f616366643cc78" upstream="mirror-aosp-master"/>
+  <project name="platform/external/google-tv-pairing-protocol" path="external/google-tv-pairing-protocol" revision="450c5ad6a6efc16de0383f5aecdfdeac2736ca30" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/gtest" path="external/gtest" revision="67883b9be08f397bd680cd0d2b5185532c76def1" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs,tradefed" name="platform/external/guava" path="external/guava" revision="5e6db342fc75b1945298142530f2d1d1861bce73" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs,tradefed" name="platform/external/hamcrest" path="external/hamcrest" revision="15e01a79e1b28255229f4d3aefc4b030c261afd1" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs,qcom_msm8x26" name="platform/external/harfbuzz_ng" path="external/harfbuzz_ng" revision="b6f5a05cd719668405ec29e587f16d3d59ebd4f4" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/icu" path="external/icu" revision="a1ba4c3899ccd14bfdd9a53b12a67977a2cc321e" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/iproute2" path="external/iproute2" revision="baf99ecf077a1f3b5f4fef1a312ceb1885e55271" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/ipsec-tools" path="external/ipsec-tools" revision="822abcd2d60cc753d53785ce5c34b57f6ca5b5d3" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/iptables" path="external/iptables" revision="94ccd7362d9e5f8f422ee54215af9952ed41a274" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/iputils" path="external/iputils" revision="1c7c426ab377c3a005a36d612ebbb16de86fb7d4" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/jack" path="external/jack" revision="5ceb2025ac5d25ed48183ac2d3dac4691fe761fb" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/jarjar" path="external/jarjar" revision="b9c9541421a9b7ffae2b0de6679438741ae9bbfe" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/javasqlite" path="external/javasqlite" revision="9f4bd3c5c946dcedfad76df812cb24a2829e4193" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/javassist" path="external/javassist" revision="9566207cff5871c672fac1f0d4332d93292036d7" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/jdiff" path="external/jdiff" revision="e4694302d6a3786c64d954e0b3cf42786283bd3c" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/jemalloc" path="external/jemalloc" revision="875f4f09810b9a2af5081972fd1f9dda19ffae5d" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/jhead" path="external/jhead" revision="afe9f55ee6ba3eaee02e7b13809a534ebe98d34a" upstream="mirror-aosp-master"/>
+  <project groups="notdefault,tradefed" name="platform/external/jline" path="external/jline" revision="cad954e739ba001fe3531c31202a7d726c00357e" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/jmdns" path="external/jmdns" revision="f4eb7466d5c09098f9dc54137ed3235e3c43fc9f" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/jpeg" path="external/jpeg" revision="57cc16e38e6461da4317c285eec61c3265e516bf" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs,tradefed" name="platform/external/jsilver" path="external/jsilver" revision="739060b01245f1dc5f1800949b3c30c291253cff" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/jsmn" path="external/jsmn" revision="27b5a35db0630b86791fa037a12da7b37c2aab49" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/jsoncpp" path="external/jsoncpp" revision="7029472cdc862c8bb870340332f86f983cb17c3d" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs,tradefed" name="platform/external/jsr305" path="external/jsr305" revision="a82868820d6350811b9ddfde4bf8ed5016084269" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs,tradefed" name="platform/external/junit" path="external/junit" revision="191f8c8707a105d683fa0fa3ff6f645633f1d463" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/kernel-headers" path="external/kernel-headers" revision="fdcbe82d7a1b2b60c30bdea1ef9c0967ab9550c5" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/ksoap2" path="external/ksoap2" revision="deba639927618694aa92b987654f0279b7c7d3fa" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/libcap-ng" path="external/libcap-ng" revision="52447887e50b49f33f959077c31232edff6659d8" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/libcxx" path="external/libcxx" revision="54e693ac440a3d23bf9fa56bf9b079545c1b0bc1" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/libcxxabi" path="external/libcxxabi" revision="9623d0dca99755d5bbf4623c5513b060bb3a0be4" upstream="mirror-aosp-master"/>
+  <project name="platform/external/libedit" path="external/libedit" revision="92d2359bcffabfcca85c64eb4908556aa69ef96a" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/libexif" path="external/libexif" revision="fa0c1e7d954230cd29d896e6015314b2f68ad7bd" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/libgsm" path="external/libgsm" revision="50761abed8f4734970874165b386cfd4d9599db4" upstream="mirror-aosp-master"/>
+  <project name="platform/external/libhevc" path="external/libhevc" revision="a90d9a91923f2980c49ec34b805e7a910979f96a" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/liblzf" path="external/liblzf" revision="6946aa575b0949d045722794850896099d937cbb" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/libmtp" path="external/libmtp" revision="7075348937f6a8c9d9211942fcb6c376f4227776" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/libnfc-nci" path="external/libnfc-nci" revision="97dff702b35992d4df2b6e479de857c57835da54" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/libnfc-nxp" path="external/libnfc-nxp" revision="76f8fa7177767cb377f9212e207e3ac16f9b8d48" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/libnl" path="external/libnl" revision="f6c30c401b0a9608bbf8c88a4408f3d94b8f7e51" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/libogg" path="external/libogg" revision="ec0b24fb1468abe37be4164a6feb16568e036bde" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/libopus" path="external/libopus" revision="1391dbf0ccd121ce7a49d30e2142d36c8d404990" upstream="mirror-aosp-master"/>
+  <project groups="pdk,pdk-cw-fs" name="platform/external/libpcap" path="external/libpcap" revision="9dab0cd7430a4d23e0a7752fb13b941692171c3d" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/libphonenumber" path="external/libphonenumber" revision="9ecee8b74bf330f20a902e4b974eddb7abedd627" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/libpng" path="external/libpng" revision="094e181e79a3d6c23fd005679025058b7df1ad6c" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/libseccomp-helper" path="external/libseccomp-helper" revision="e87019943a8b5a7cd0880910f671c37b240d5754" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/libselinux" path="external/libselinux" revision="716c74b0c1d76ec904de74d6905bd5f1edfd91e1" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/libsepol" path="external/libsepol" revision="a0e2379329882674721528199ed1dcdbc5bb17b4" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/libssh2" path="external/libssh2" revision="2bb40f2445cab3ba588efb29e1835cdba2b27248" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/libunwind" path="external/libunwind" revision="2767395a8bc92c7cba41024b3ed9cc19408fcd5f" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/libusb" path="external/libusb" revision="3a36cef7ef847d3839090a7c98eb961a602af55b" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/libusb-compat" path="external/libusb-compat" revision="6d4ab8939e4784b2b6eb63d992cc4d44f953bb41" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/libutf" path="external/libutf" revision="9d00b26b4a6fbdf65f4adcd841e9d885d9102b94" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/libvorbis" path="external/libvorbis" revision="de559619fd4dd0d2d9608436696fd44bdf74eba8" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/libvpx" path="external/libvpx" revision="acfe8bb381dd96f2a1cfe44c882ecd06fbce27f1" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/libxml2" path="external/libxml2" revision="092a4128310076d918a20d09d48e6b86a8cd38b0" upstream="mirror-aosp-master"/>
+  <project groups="libyuv,pdk-cw-fs" name="platform/external/libyuv" path="external/libyuv" revision="482a582884351288fb701532359652970b1ba7c0" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/linux-tools-perf" path="external/linux-tools-perf" revision="f608ab242d9b37e4b4c087314806071202d71f41" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/littlemock" path="external/littlemock" revision="a3ea6bf9e6fcf63b69f5635b2ecc1fbd9a9a4dfc" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/lldb" path="external/lldb" revision="8aaa52329ade20107fe28af7085b0a1f395816a8" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/llvm" path="external/llvm" revision="2a9316a6c86a257f0c80f46f067423399a05e49a" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/ltrace" path="external/ltrace" revision="10ffb54609942b390bb9a65964f62425b04df53f" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/lzma" path="external/lzma" revision="b473eaa2840cccf2fef15d53f00bccf92c41b615" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/markdown" path="external/markdown" revision="6f2e3554ae38cc90518d32e02cb57d05988270a6" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/mdnsresponder" path="external/mdnsresponder" revision="a413bce2d767d5b0810016f9b49a69c1e4be2b2f" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/mesa3d" path="external/mesa3d" revision="cfa14c46594a66e3f1b6b50b65b5e9f4fa6302a5" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/messageformat" path="external/messageformat" revision="fb716cce89ee080907bb5d43dfc84a657e4e5282" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/mksh" path="external/mksh" revision="a1c1f910f501fd658f7b2bea133bd47cb8d2395d" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/mockito" path="external/mockito" revision="c7d7be3cdbefd99229903414cf71308f47973aa5" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/mockwebserver" path="external/mockwebserver" revision="7f9280b5b6ff3532ef27d4f938aa2e6bbc895473" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/mp4parser" path="external/mp4parser" revision="16051e950485c6b62127c0446a760111de1a0cb9" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/mtpd" path="external/mtpd" revision="5ea8006691664b7e6d46d6a6dc889eac91b7fe37" upstream="mirror-aosp-master"/>
+  <project name="platform/external/nanohttpd" path="external/nanohttpd" revision="8d6a97830abf9685bc0724c24766c8f9704aacd2" upstream="mirror-aosp-master"/>
+  <project name="platform/external/nanopb-c" path="external/nanopb-c" revision="7ef855e462b9a18b7d330e4b40f350164a6ad9da" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/naver-fonts" path="external/naver-fonts" revision="d5210212745194f3a2661fb65e0675ce9665b9b1" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/netcat" path="external/netcat" revision="444644cfa9a2f3002863caa168fb2d6b34dfd1e8" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/netperf" path="external/netperf" revision="38e47cd883738cb84bdb47a7d263f14f14062d7b" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/neven" path="external/neven" revision="ab02f818aa312f0795152449c29cb994f72e4891" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/nfacct" path="external/nfacct" revision="6f7aae0264821b44e9fe80fb5596c525d3e2f475" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/nist-pkits" path="external/nist-pkits" revision="2c243d61d94b93eaef6fd5e0f727c9a2be838338" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/nist-sip" path="external/nist-sip" revision="b23dbfce7ea84c39cea75b612868a5832cb9af2b" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/noto-fonts" path="external/noto-fonts" revision="7b756aa1520f938b31b304746766b681d4b33f00" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/oauth" path="external/oauth" revision="bc170f58de82000ed6460f111686a850a1890c07" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/objenesis" path="external/objenesis" revision="2a7655c0d503fcf5989098f65bf89eae78c32e5a" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/okhttp" path="external/okhttp" revision="84ae29f837f73df820510dbd0ea57f38485c93c7" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/opencv" path="external/opencv" revision="fc68457d6ba93570aaebf0706a9b2567eaea27c1" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/openssl" path="external/openssl" revision="7b2d12e610bdfd93aa05fc3475726d0f3e25215c" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/oprofile" path="external/oprofile" revision="3722f1053f4cab90c4daf61451713a2d61d79c71" upstream="mirror-aosp-master"/>
+  <project name="platform/external/owasp/sanitizer" path="external/owasp/sanitizer" revision="bbfb25464ff30c5a62dce351d719a8c533afb2a3" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/pcre" path="external/pcre" revision="1dceafb0c217395f704290bc3f176d5f008b791c" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/pdfium" path="external/pdfium" revision="86957661fc29ce82c3101107f95a11d1f9e59932" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/pixman" path="external/pixman" revision="0df1724cbd2a9155d34c4ce5739ea29e18b33b52" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/ppp" path="external/ppp" revision="8b58d9bd02e2c55f547fafbe9ba55b1160665761" upstream="mirror-aosp-master"/>
+  <project groups="pdk-java,tradefed" name="platform/external/proguard" path="external/proguard" revision="9961286c06c25cd03464d3e2b00bd9b9dedf96ba" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/protobuf" path="external/protobuf" revision="4353bbc88f513a3c8863cc5b30e765dd5530faa1" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/qemu" path="external/qemu" revision="328f2d277db190f5165de7d9525332b0d70e9d87" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/qemu-pc-bios" path="external/qemu-pc-bios" revision="20349dae98d7de09a7e390d4a706c64f1db6edc2" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/regex-re2" path="external/regex-re2" revision="9a16eac809c3bbb746f055b38d4e0d5c4f228c73" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/replicaisland" path="external/replicaisland" revision="99e2e54c5d036048caf09bb05eea0969de093104" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/robolectric" path="external/robolectric" revision="d9d53068f24c9af1a332986dd196c163b3ca897c" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/safe-iop" path="external/safe-iop" revision="aa0725fb1da35e47676b6da30009322eb5ed59be" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/scrypt" path="external/scrypt" revision="0306c7856fa4889c859ad6f4e56657afc553bf04" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/sepolicy" path="external/sepolicy" revision="f330f3752922f124305c67683d061c19c9518bed" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs,qcom_msm8x26" name="platform/external/sfntly" path="external/sfntly" revision="b75096eec64a4fed4940b626225ce94abc9bfc45" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs,qcom_msm8x26" name="platform/external/skia" path="external/skia" revision="a78ae5d42637ae6bb2b8662ec0be8987280e8159" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/smack" path="external/smack" revision="d7955ce24d294fb2014c59d11fca184471056f44" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/smali" path="external/smali" revision="5fd395796e215a80c722815bf180728948868f18" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/sonivox" path="external/sonivox" revision="399080e8ae3ebee97a5a57f1072452c4c77b5c5a" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/speex" path="external/speex" revision="ff03110e77ec7fe716c5be11783746f59c814e30" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/sqlite" path="external/sqlite" revision="54948bb3c2632d7df417d821e2d6606bcf64f316" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/srec" path="external/srec" revision="fe5ffaffe727941fe1ea3581be2eab63d228e6c4" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/srtp" path="external/srtp" revision="cd2c0b6ce2e39a9ab13c802c5b8dfeb1ab0d1db5" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/stlport" path="external/stlport" revision="db17bb0732fea4e8fe575f49045449e5b683fd7a" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/strace" path="external/strace" revision="0786ce0827370109be242bd32e81f5e98587f086" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/svox" path="external/svox" revision="6f30c2a64dc0a1d22fe3e9d65b963a2f6cf85f46" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs,tradefed" name="platform/external/tagsoup" path="external/tagsoup" revision="a97828cb3f8f3a1af8470e55d3c5cd62d6a7cb4c" upstream="mirror-aosp-master"/>
+  <project groups="pdk,pdk-cw-fs" name="platform/external/tcpdump" path="external/tcpdump" revision="de49cdcfddf36f2b41ef3278e98a8a550a189952" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/timezonepicker-support" path="external/timezonepicker-support" revision="99e91a76fd74bad10266623d67cdb98d011f709e" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/tinyalsa" path="external/tinyalsa" revision="8863816dc5659a1e4678d17906c90844264d1588" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/tinycompress" path="external/tinycompress" revision="25a4b4b5c7451702a164c98ef502e41cc03e1e1f" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/tinyxml" path="external/tinyxml" revision="143125ff631c481d590cae0d7cc9ccfaaca269c7" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/tinyxml2" path="external/tinyxml2" revision="7974ba13a557b3352b0fd4b2a8c377cb530e886e" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/tremolo" path="external/tremolo" revision="8335d8b2ef4d22dcaccda9726c3a1460be2bd86c" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/valgrind" path="external/valgrind" revision="7e932c20f8e7d79ce2f7c3d397a90cc84ff1b8cc" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/vixl" path="external/vixl" revision="e9c96f757f00b915dd1cb86447fb88f36cb54607" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs,qcom_msm8x26" name="platform/external/webp" path="external/webp" revision="af51b94a435132e9014c324e25fb686b3d07a8c8" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/webrtc" path="external/webrtc" revision="7d252f952a65e5cfee917258f04596e6cfe57398" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/wpa_supplicant_8" path="external/wpa_supplicant_8" revision="907fe1cb0a32f78039e3a4ebe0c4b161da120061" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/xmlwriter" path="external/xmlwriter" revision="e95d92246ee35273dde2bee8b00485cc14c12be5" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/xmp_toolkit" path="external/xmp_toolkit" revision="42ea4dc6d1fc2206a7778029070ed9213e3b0fbf" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/yaffs2" path="external/yaffs2" revision="a2cff2275e1b501ff478b03757d6e4f05fddc2db" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/external/zlib" path="external/zlib" revision="8d977782c1cfe9d75cc9a464439c2ff1e27e1665" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/zopfli" path="external/zopfli" revision="bb96afe13a50bfc17259dcf56f44e997923c705c" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/external/zxing" path="external/zxing" revision="2b56cc1c1442ba598ed1ee9c23e8e9eade076e77" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/frameworks/av" path="frameworks/av" revision="e40442092efa37619d11685451f7e8e8bde9e79a" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/frameworks/base" path="frameworks/base" revision="d843564331e2db18166d3deb8570502092d532ea" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/frameworks/compile/libbcc" path="frameworks/compile/libbcc" revision="4d93866172cdeeda20c78faade9b934f75f2033e" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/frameworks/compile/mclinker" path="frameworks/compile/mclinker" revision="dfd6c08c66b4b3d58fd28b5376478381e1a5647a" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/frameworks/compile/slang" path="frameworks/compile/slang" revision="c4ada7adfa668950a1189832017f7f2469a28d7b" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/frameworks/ex" path="frameworks/ex" revision="842e82f6b8d85c71469f4decdfd5d1a486d55881" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/frameworks/mff" path="frameworks/mff" revision="b9669b8540a1e5c953374d53b115514335e23c27" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/frameworks/minikin" path="frameworks/minikin" revision="69d4fba2f2b7bb2c248cc0e78cf277a6e44665f8" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/frameworks/ml" path="frameworks/ml" revision="21053fad6555b9e0063e263c729aae9beeae7e2b" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/frameworks/multidex" path="frameworks/multidex" revision="ddd65a611834d9a9222603b2e85d558265f0aa85" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/frameworks/native" path="frameworks/native" revision="947a6adf97d9ba86e3ef5704d523b4971246ff1e" upstream="mirror-aosp-master"/>
+  <project name="platform/frameworks/opt/bitmap" path="frameworks/opt/bitmap" revision="5c102db5a1a16a2adcc7728693a6e65a981f91ae" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/frameworks/opt/bluetooth" path="frameworks/opt/bluetooth" revision="192d793d2586b620027edd5b45ff4c72a86cc7be" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/frameworks/opt/calendar" path="frameworks/opt/calendar" revision="03b18577f8f8f799e87a62b8e03889ddacf6daa2" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/frameworks/opt/carddav" path="frameworks/opt/carddav" revision="f08aa2df132dd8dc32a0013d3750137d9dd9280a" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/frameworks/opt/chips" path="frameworks/opt/chips" revision="43f14897cf4577ee319d4a53c0410fe2755735f4" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/frameworks/opt/colorpicker" path="frameworks/opt/colorpicker" revision="f22a676aa67d7913d3436e395fdb7e24e17bb3f8" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/frameworks/opt/datetimepicker" path="frameworks/opt/datetimepicker" revision="bf572fc2476eb041d281a0722e23fd00d6a15922" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/frameworks/opt/emoji" path="frameworks/opt/emoji" revision="709f713ebcd62c61defc270d945810efca179621" upstream="mirror-aosp-master"/>
+  <project name="platform/frameworks/opt/inputconnectioncommon" path="frameworks/opt/inputconnectioncommon" revision="3baece9b20fa480da46d860acd7320fd9eee3386" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/frameworks/opt/inputmethodcommon" path="frameworks/opt/inputmethodcommon" revision="990fcb1a6dbb5d1204cc8ec86e4bc3f691f4aeeb" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/frameworks/opt/mms" path="frameworks/opt/mms" revision="4a5bba9cfefb96706390307b7cf06271b7f9f5e2" upstream="mirror-aosp-master"/>
+  <project name="platform/frameworks/opt/net/ethernet" path="frameworks/opt/net/ethernet" revision="74d270d167ed6c3a6fa28e426da80d51a44a2af0" upstream="mirror-aosp-master"/>
+  <project groups="frameworks_ims,pdk-cw-fs" name="platform/frameworks/opt/net/ims" path="frameworks/opt/net/ims" revision="3ddaa6ec08d417d2848775ad3b5b01b865a9c891" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/frameworks/opt/net/voip" path="frameworks/opt/net/voip" revision="cf38b8464007ebf626fc0d61a646491fc3d794cd" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/frameworks/opt/net/wifi" path="frameworks/opt/net/wifi" revision="cd84f31168f7d3cac6d548aa295a479cc693b89b" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/frameworks/opt/photoviewer" path="frameworks/opt/photoviewer" revision="05b4a96fd6fc0f6bc8b56950fa40102b87a747ee" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/frameworks/opt/setupwizard" path="frameworks/opt/setupwizard" revision="5e1533ae4d68022e854e3d89dd67454820c46526" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/frameworks/opt/telephony" path="frameworks/opt/telephony" revision="2865ee97881486cc533e0336b9865ca5a6ee0a2a" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/frameworks/opt/timezonepicker" path="frameworks/opt/timezonepicker" revision="a508e1f3dd3cc76b98020d319d95878737802cc3" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/frameworks/opt/vcard" path="frameworks/opt/vcard" revision="210ebaab315e389ffc66278e28ecd6230e412b5f" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/frameworks/opt/widget" path="frameworks/opt/widget" revision="466e0e0307b3f6aa4f4be3d9419b5996bd389da5" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/frameworks/rs" path="frameworks/rs" revision="6ffd3c99630fbe475cf34bb530193c9ee4fd9bfd" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/frameworks/support" path="frameworks/support" revision="2f25af8d09aa3ce5db53ef99793bb859322e467c" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/frameworks/testing" path="frameworks/testing" revision="f9b3351f18ae617ea4debddce931a9381ab76a4c" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/frameworks/volley" path="frameworks/volley" revision="35ce77836d8e1e951b8e4b2ec43e07fb7336dab6" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/frameworks/webview" path="frameworks/webview" revision="4e0495ed16a0da2afa1d16bc34a71345172a258f" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/frameworks/wilhelm" path="frameworks/wilhelm" revision="bdbcdf52bb5aa9fbd20d2e2d7877eb6549962c89" upstream="mirror-aosp-master"/>
+  <project name="platform/hardware/akm" path="hardware/akm" revision="068a97a299a8e0d837b8ac67635a96b59595c582" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/hardware/broadcom/libbt" path="hardware/broadcom/libbt" revision="6a45b5611fa101770c6641ddda1aa83fe47b74be" upstream="mirror-aosp-master"/>
+  <project groups="broadcom_wlan" name="platform/hardware/broadcom/wlan" path="hardware/broadcom/wlan" revision="350074487acb6e5b75cf3149ebe815e060e60394" upstream="mirror-aosp-master"/>
+  <project groups="intel" name="platform/hardware/intel/audio_media" path="hardware/intel/audio_media" revision="0ce92df294da2b05fd06c7da49ac5324e68c7a14" upstream="mirror-aosp-master"/>
+  <project groups="intel" name="platform/hardware/intel/bootstub" path="hardware/intel/bootstub" revision="f35042d850c2a056c937a1140a6462dd6411279b" upstream="mirror-aosp-master"/>
+  <project groups="intel" name="platform/hardware/intel/common/bd_prov" path="hardware/intel/common/bd_prov" revision="8af329f2d2b54dfcfa84051d3ce1fae95f79011a" upstream="mirror-aosp-master"/>
+  <project groups="intel" name="platform/hardware/intel/common/libmix" path="hardware/intel/common/libmix" revision="a0b150db4d1ed2bf5234eeec36a4dd2a88ec6b53" upstream="mirror-aosp-master"/>
+  <project groups="intel" name="platform/hardware/intel/common/libstagefrighthw" path="hardware/intel/common/libstagefrighthw" revision="419d34016dceec65ea137490668984eb80119df4" upstream="mirror-aosp-master"/>
+  <project groups="intel" name="platform/hardware/intel/common/libva" path="hardware/intel/common/libva" revision="afa22e4e541f3641f5525350b760f5037b452b33" upstream="mirror-aosp-master"/>
+  <project groups="intel" name="platform/hardware/intel/common/libwsbm" path="hardware/intel/common/libwsbm" revision="77bfea2e6a3dc1e30a17780b48b7b231eef77255" upstream="mirror-aosp-master"/>
+  <project groups="intel" name="platform/hardware/intel/common/omx-components" path="hardware/intel/common/omx-components" revision="5da72011e0c14cf41ac9a2b3f93e59ff7b8be219" upstream="mirror-aosp-master"/>
+  <project groups="intel" name="platform/hardware/intel/common/utils" path="hardware/intel/common/utils" revision="9d7a792711ec5e4fb3474ceff21bdd14547d0981" upstream="mirror-aosp-master"/>
+  <project groups="intel" name="platform/hardware/intel/common/wrs_omxil_core" path="hardware/intel/common/wrs_omxil_core" revision="3f7ceee13aa17ae32d4263aed2ce67eb9a37c58b" upstream="mirror-aosp-master"/>
+  <project groups="intel" name="platform/hardware/intel/img/hwcomposer" path="hardware/intel/img/hwcomposer" revision="6c19d8733a19fe2f1547be9341a45fbbe87d81e8" upstream="mirror-aosp-master"/>
+  <project groups="intel" name="platform/hardware/intel/img/libdrm" path="hardware/intel/img/libdrm" revision="20e32a079154bb3a36ccb43a4dd8e25bd1ef01de" upstream="mirror-aosp-master"/>
+  <project groups="intel" name="platform/hardware/intel/img/psb_headers" path="hardware/intel/img/psb_headers" revision="58ab4ceb5ea3d2733f108cacfcccb93e0c8d84da" upstream="mirror-aosp-master"/>
+  <project groups="intel" name="platform/hardware/intel/img/psb_video" path="hardware/intel/img/psb_video" revision="b35344f5c0b8568df0630efe9fce076e810de8d3" upstream="mirror-aosp-master"/>
+  <project groups="invensense" name="platform/hardware/invensense" path="hardware/invensense" revision="670dfdf96e62446e763f60c7c315fd7e25461242" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/hardware/libhardware" path="hardware/libhardware" revision="40d48e177f243c6093a45301db122a0475cc1124" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/hardware/libhardware_legacy" path="hardware/libhardware_legacy" revision="62e06c838de988286d5d4ddd1d8a30f8af980139" upstream="mirror-aosp-master"/>
+  <project groups="nvidia_audio" name="platform/hardware/nvidia/audio" path="hardware/nvidia/audio" revision="3134b055c05e3681c1f71eed23bd0bd8e57ddfa7" upstream="mirror-aosp-master"/>
+  <project groups="tegra124" name="platform/hardware/nvidia/tegra124" path="hardware/nvidia/tegra124" revision="77d1e2a4bb07d97a7f140f0fa8ddb8b6d52327f6" upstream="mirror-aosp-master"/>
+  <project groups="qcom,qcom_audio" name="platform/hardware/qcom/audio" path="hardware/qcom/audio" revision="bf93daed8583c0f2deec915c6f55064845f905e4" upstream="mirror-aosp-master"/>
+  <project groups="qcom" name="platform/hardware/qcom/bt" path="hardware/qcom/bt" revision="d2b071c3683bace40c9ed666107367dac5a5bb45" upstream="mirror-aosp-master"/>
+  <project groups="qcom,qcom_display" name="platform/hardware/qcom/display" path="hardware/qcom/display" revision="a3d647754dbc4b80d3039b09c0017c038c7363df" upstream="mirror-aosp-master"/>
+  <project groups="qcom,qcom_gps" name="platform/hardware/qcom/gps" path="hardware/qcom/gps" revision="2344717512130b1c2778320fa48c95e37abd8832" upstream="mirror-aosp-master"/>
+  <project groups="qcom" name="platform/hardware/qcom/keymaster" path="hardware/qcom/keymaster" revision="e8d59957d4935fb737ee3604d21b34fa3afb7e95" upstream="mirror-aosp-master"/>
+  <project groups="qcom" name="platform/hardware/qcom/media" path="hardware/qcom/media" revision="220d9e74da540461987b7c819237f92aab9e37aa" upstream="mirror-aosp-master"/>
+  <project groups="qcom_msm8960" name="platform/hardware/qcom/msm8960" path="hardware/qcom/msm8960" revision="c25a431842a26b5756b58a9d4a42c776e0457ba2" upstream="mirror-aosp-master"/>
+  <project groups="qcom_msm8x26" name="platform/hardware/qcom/msm8x26" path="hardware/qcom/msm8x26" revision="0a928ed09e97d7aa2da93f221140be942d70266c" upstream="mirror-aosp-master"/>
+  <project groups="qcom_msm8x27" name="platform/hardware/qcom/msm8x27" path="hardware/qcom/msm8x27" revision="8ff5c0057cbdecfa09410c1710ba043e191a2862" upstream="mirror-aosp-master"/>
+  <project groups="qcom_msm8x74" name="platform/hardware/qcom/msm8x74" path="hardware/qcom/msm8x74" revision="39122a9905ea437593ad4f5171683bcaafad156f" upstream="mirror-aosp-master"/>
+  <project groups="qcom_msm8x84" name="platform/hardware/qcom/msm8x84" path="hardware/qcom/msm8x84" revision="3be8c1e260bcccc7d97043df623208b0531db364" upstream="mirror-aosp-master"/>
+  <project groups="qcom" name="platform/hardware/qcom/power" path="hardware/qcom/power" revision="ff9f4538c09399030fa73e3e65a167852cb91e8f" upstream="mirror-aosp-master"/>
+  <project groups="qcom" name="platform/hardware/qcom/sensors" path="hardware/qcom/sensors" revision="07c5bcdb36158e22d33bac02eecd83d4ff1fb2f8" upstream="mirror-aosp-master"/>
+  <project groups="qcom_wlan" name="platform/hardware/qcom/wlan" path="hardware/qcom/wlan" revision="91840a20fc7e54c2aa2393b982a0abc85baa8299" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/hardware/ril" path="hardware/ril" revision="f34ed01f1e1935c67e153916ea27dddae4d067dc" upstream="mirror-aosp-master"/>
+  <project groups="exynos5" name="platform/hardware/samsung_slsi/exynos5" path="hardware/samsung_slsi/exynos5" revision="cc2706542fc0fb3b54c40e173e9d08d042571660" upstream="mirror-aosp-master"/>
+  <project groups="omap3" name="platform/hardware/ti/omap3" path="hardware/ti/omap3" revision="40292fb9eeb2cf0bb95dc818da12ddcae40b931c" upstream="mirror-aosp-master"/>
+  <project groups="omap4-aah" name="platform/hardware/ti/omap4-aah" path="hardware/ti/omap4-aah" revision="ce711bd57caf8e9d06941d00cc75e216bb24fd9b" upstream="mirror-aosp-master"/>
+  <project groups="omap4" name="platform/hardware/ti/omap4xxx" path="hardware/ti/omap4xxx" revision="fe94a195639921ae99e5a286a735b2deb18b4a09" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/libcore" path="libcore" revision="d910cf339d61153d66f9a3d835eff027791ad78c" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/libnativehelper" path="libnativehelper" revision="c2fadae1a518c1eb92c4d1910fba9809e45caf40" upstream="mirror-aosp-master"/>
+  <project name="platform/ndk" path="ndk" revision="856d3ab5dfcbfed12d849f02b13230ad8ff82938" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/BasicSmsReceiver" path="packages/apps/BasicSmsReceiver" revision="533f8542a278c967faa8ab6f6a3ff6c92f3675ba" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/packages/apps/Bluetooth" path="packages/apps/Bluetooth" revision="37baf3fb0f7288738e137cfafd2b1353100ee76b" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/Browser" path="packages/apps/Browser" revision="fe15d2a0bf7b10a21a53a4e286f6bad5ccbce7d3" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/Calculator" path="packages/apps/Calculator" revision="2d4b45870ca51ea75e2ed4389d32a5f9f4ed1e7f" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/Calendar" path="packages/apps/Calendar" revision="0e7850d774e0c9f8a0f26d180bcdba25be95ea51" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/Camera" path="packages/apps/Camera" revision="618cae955e32fd4d7ede9a3e979e68ca8d663f15" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/Camera2" path="packages/apps/Camera2" revision="6871a7eaf8695f70bb39d7bd78c66b1dcffa6459" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/CellBroadcastReceiver" path="packages/apps/CellBroadcastReceiver" revision="3d4e27c6320bef3e0309b4fb170ad3f98b70664f" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/packages/apps/CertInstaller" path="packages/apps/CertInstaller" revision="b23c2e03c27561369a98633c82227ee3a6014197" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/Contacts" path="packages/apps/Contacts" revision="553e03f650040e820642ccfcb90012c48fd2eb95" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/ContactsCommon" path="packages/apps/ContactsCommon" revision="a4419f35a372701f4ab75d9c834572ab506ebf04" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/DeskClock" path="packages/apps/DeskClock" revision="f83a53475a304b59b38df8e7012e173b32203c10" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/Dialer" path="packages/apps/Dialer" revision="68b0ee54c1f77b9884c100ad6b21887b1b9d37e8" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/Email" path="packages/apps/Email" revision="f44b729bff619d0a9f0b1492726351e41c1e5d5d" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/Exchange" path="packages/apps/Exchange" revision="7766cd438bf2ec7aa113b9d9e1a35fa94926ea54" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/Gallery" path="packages/apps/Gallery" revision="382ba169ac7e66201426399cc5f22bcaf3db01b9" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/Gallery2" path="packages/apps/Gallery2" revision="428ec9306e6a4b0edc540145a8f41c62dc329536" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/HTMLViewer" path="packages/apps/HTMLViewer" revision="2e368f6d87eb82691f855e93f85599b75b489731" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/InCallUI" path="packages/apps/InCallUI" revision="fc0d3f82a3efdd6b4a077e77ef5a245431588a50" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/KeyChain" path="packages/apps/KeyChain" revision="dfeaab7419362fd0dd0aaaa1b123323947f7be36" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/Launcher2" path="packages/apps/Launcher2" revision="b104036cf561bfb9b03ea5c98de469a2259aeeeb" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/Launcher3" path="packages/apps/Launcher3" revision="3e4c4987309b8cf76f524396738bfd75dd137498" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/LegacyCamera" path="packages/apps/LegacyCamera" revision="090283cfff2a09f1ea960fd2ef87564099027ab0" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/ManagedProvisioning" path="packages/apps/ManagedProvisioning" revision="28491c19e41748407b9354d097bc0791896d5abe" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/Mms" path="packages/apps/Mms" revision="466cb5674614407596c332308b4119decaa22aad" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/Music" path="packages/apps/Music" revision="2d11727e5ecf15880dd09295846e189f4e85d656" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/MusicFX" path="packages/apps/MusicFX" revision="c2a07ce075e18f802dddc5f47f41818a1be318a7" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/Nfc" path="packages/apps/Nfc" revision="28e527fc19ec0354c641174087fcdd6a32b15415" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/OMA-DM" path="packages/apps/OMA-DM" revision="8e894b70a808ab91c183507b41e2bc5118078d6a" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/OneTimeInitializer" path="packages/apps/OneTimeInitializer" revision="01e429c08e51291315890de9677151a7e0b6ad35" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/PackageInstaller" path="packages/apps/PackageInstaller" revision="592868a52673dc7a3255447fb43d8d8572f791ff" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/Phone" path="packages/apps/Phone" revision="79731f02b7009206a01182d2cca15dfc8491da09" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/PhoneCommon" path="packages/apps/PhoneCommon" revision="7834c021fe44f211cccbcd880e11a85c3cc2a0d3" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/Protips" path="packages/apps/Protips" revision="9b6836aabee945b6c7a54796a4e6a7ae735f423c" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/Provision" path="packages/apps/Provision" revision="78ca0db658fe6253d506916e36319e620476f809" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/QuickSearchBox" path="packages/apps/QuickSearchBox" revision="2061b9fa4011d75b2558fdae0eec7cfc9c8eefc6" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/Settings" path="packages/apps/Settings" revision="3dd51556bcbf7addcc17d29dd360165ee7ede1ee" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/SmartCardService" path="packages/apps/SmartCardService" revision="29eae320a4bd222b5ff1c092f84f1aebba88d0b7" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/SoundRecorder" path="packages/apps/SoundRecorder" revision="c9fcd85287878c7b58b84a69353526facae28af2" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/SpareParts" path="packages/apps/SpareParts" revision="4db997871e3f4c3f84660815096e5276b47c5c91" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/SpeechRecorder" path="packages/apps/SpeechRecorder" revision="536aa74ff3a77186bef29dc9333a34688fa59d13" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/Stk" path="packages/apps/Stk" revision="f85c76f009148c932a27c86e975da5c59e64e9e2" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/Tag" path="packages/apps/Tag" revision="d9411064719902245bf6251ce39a3fa841ee35c7" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/TvSettings" path="packages/apps/TvSettings" revision="03a27b810ce70f2496f00a59ec79feb1da4e3b64" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/UnifiedEmail" path="packages/apps/UnifiedEmail" revision="e6784ccfb4882430073352d42179765add59412f" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/apps/VoiceDialer" path="packages/apps/VoiceDialer" revision="fd726afabfb115a17c1b4dca8d2129ca3501f1f9" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/experimental" path="packages/experimental" revision="72836101d3ec4ad9f16b354c47f8ed8451fb9b99" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/inputmethods/LatinIME" path="packages/inputmethods/LatinIME" revision="19eefc5109b65b1ecf74190904a1c1aa3b30b640" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/inputmethods/OpenWnn" path="packages/inputmethods/OpenWnn" revision="59aefa242169b7a51c2381daee58ff22fd1834ce" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/providers/ApplicationsProvider" path="packages/providers/ApplicationsProvider" revision="8268a4c790c65bd281ccddc05d272594e4194431" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/packages/providers/CalendarProvider" path="packages/providers/CalendarProvider" revision="a0960e75e946c6412452e6c91ac0d22933c00fd5" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/packages/providers/ContactsProvider" path="packages/providers/ContactsProvider" revision="91f091ffdbd4a87f02cdaedaf61344392d1f5e40" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/packages/providers/DownloadProvider" path="packages/providers/DownloadProvider" revision="b4353615031e181b666417848f9e7a4283a6265a" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/packages/providers/MediaProvider" path="packages/providers/MediaProvider" revision="1646ab9f8650d341af3e976a1afead8b79365bdc" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/providers/PartnerBookmarksProvider" path="packages/providers/PartnerBookmarksProvider" revision="96d0a80af45923767baf449fc8c735c2f71d64ae" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/providers/TelephonyProvider" path="packages/providers/TelephonyProvider" revision="dd36f149b5574211136780885459e94c515cec54" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/providers/TvProvider" path="packages/providers/TvProvider" revision="5462b213ed14735289692cf525a46aa27fc3ba26" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/packages/providers/UserDictionaryProvider" path="packages/providers/UserDictionaryProvider" revision="fffeca3719057b8de24aedd6007fca162c027be5" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/screensavers/Basic" path="packages/screensavers/Basic" revision="1525543c2d8f5c7e55de68d15c1e138d3f3bbb2a" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/screensavers/PhotoTable" path="packages/screensavers/PhotoTable" revision="619158b68f68e627cc770158fe92873c045204a9" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/screensavers/WebView" path="packages/screensavers/WebView" revision="6e0a80f6faed6191acc8ce1b6c79eada09e9e042" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/services/Mms" path="packages/services/Mms" revision="ae4babc2b2ed3031dd7a848bab0c2961ec93efb8" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/services/Telecomm" path="packages/services/Telecomm" revision="88d44c3fdb01d714c361aca74ba9724c555c651f" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/services/Telephony" path="packages/services/Telephony" revision="6e24805f6e1139e98c73e255fa36afc33e640525" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/wallpapers/Basic" path="packages/wallpapers/Basic" revision="65a0d4bf3e95bc35c284dd7a4b2b6634c9032e0c" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/wallpapers/Galaxy4" path="packages/wallpapers/Galaxy4" revision="23b377b33e19186281770009e688247873b2cbc6" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/wallpapers/HoloSpiral" path="packages/wallpapers/HoloSpiral" revision="d8f32caf891a089946bc9c0d1bdb8d04a12103f7" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/wallpapers/LivePicker" path="packages/wallpapers/LivePicker" revision="e0029b91ba0c3e5e5bc355cdaaa7a8c5e9301546" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/wallpapers/MagicSmoke" path="packages/wallpapers/MagicSmoke" revision="49550635fa42e1728eaf5968f2b3cc6363354be9" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/wallpapers/MusicVisualization" path="packages/wallpapers/MusicVisualization" revision="2d55c82db6459c0ac8cffd9a0a279eb576c9b074" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/wallpapers/NoiseField" path="packages/wallpapers/NoiseField" revision="97c177471e95bda94b3409afb0f8d105c432866a" upstream="mirror-aosp-master"/>
+  <project name="platform/packages/wallpapers/PhaseBeam" path="packages/wallpapers/PhaseBeam" revision="5cf62b2505f54247bd5aed0ec6c13101f267af3a" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/pdk" path="pdk" revision="d1ce657ea1560272a08e2090ef241301ea012447" upstream="mirror-aosp-master"/>
+  <project name="platform/prebuilts/android-emulator" path="prebuilts/android-emulator" revision="f5124fada24f678bc88a498a2b3d36487b216180" upstream="mirror-aosp-master"/>
+  <project groups="pdk,darwin" name="platform/prebuilts/clang/darwin-x86/3.1" path="prebuilts/clang/darwin-x86/3.1" revision="426233405bef3c7c825095ab14256c3773894b9b" upstream="mirror-aosp-master"/>
+  <project groups="pdk,darwin" name="platform/prebuilts/clang/darwin-x86/3.2" path="prebuilts/clang/darwin-x86/3.2" revision="af856d77b3cbb1f6afccdc531bee991403c28907" upstream="mirror-aosp-master"/>
+  <project groups="arm,darwin,pdk-cw-fs" name="platform/prebuilts/clang/darwin-x86/arm/3.3" path="prebuilts/clang/darwin-x86/arm/3.3" revision="54acc51e28850485e380b55916868a4e1ff17998" upstream="mirror-aosp-master"/>
+  <project groups="pdk,darwin" name="platform/prebuilts/clang/darwin-x86/host/3.4" path="prebuilts/clang/darwin-x86/host/3.4" revision="a798fe00dbd92ad4e5f7123a2e2bc1d805db04f6" upstream="mirror-aosp-master"/>
+  <project groups="pdk,darwin" name="platform/prebuilts/clang/darwin-x86/host/3.5" path="prebuilts/clang/darwin-x86/host/3.5" revision="0b2b09cc30ef2f1c9a8eed21da0fa92811c4974c" upstream="mirror-aosp-master"/>
+  <project groups="darwin,mips,pdk-cw-fs" name="platform/prebuilts/clang/darwin-x86/mips/3.3" path="prebuilts/clang/darwin-x86/mips/3.3" revision="da3dad928542362835082b2eda44e4dc315d65bb" upstream="mirror-aosp-master"/>
+  <project groups="darwin,pdk-cw-fs,x86" name="platform/prebuilts/clang/darwin-x86/x86/3.3" path="prebuilts/clang/darwin-x86/x86/3.3" revision="f67a83f35e30f92b312fbee852184c3f6dc38f34" upstream="mirror-aosp-master"/>
+  <project groups="pdk,linux" name="platform/prebuilts/clang/linux-x86/3.1" path="prebuilts/clang/linux-x86/3.1" revision="e95b4ce22c825da44d14299e1190ea39a5260bde" upstream="mirror-aosp-master"/>
+  <project groups="pdk,linux" name="platform/prebuilts/clang/linux-x86/3.2" path="prebuilts/clang/linux-x86/3.2" revision="471afab478649078ad7c75ec6b252481a59e19b8" upstream="mirror-aosp-master"/>
+  <project groups="arm,linux,pdk-cw-fs" name="platform/prebuilts/clang/linux-x86/arm/3.3" path="prebuilts/clang/linux-x86/arm/3.3" revision="2f6d2db9e2af3507d132cf5d286a42fe1d47f7bc" upstream="mirror-aosp-master"/>
+  <project groups="pdk,linux" name="platform/prebuilts/clang/linux-x86/host/3.4" path="prebuilts/clang/linux-x86/host/3.4" revision="fae26a039f79d780ddedcad07f164d9e6c05fc87" upstream="mirror-aosp-master"/>
+  <project groups="pdk,linux" name="platform/prebuilts/clang/linux-x86/host/3.5" path="prebuilts/clang/linux-x86/host/3.5" revision="bb02bdf737ba8511177e2aee1f722e0ce5f14f2e" upstream="mirror-aosp-master"/>
+  <project groups="linux,mips,pdk-cw-fs" name="platform/prebuilts/clang/linux-x86/mips/3.3" path="prebuilts/clang/linux-x86/mips/3.3" revision="51f8e2760628588fe268438d612d942c30d13fb2" upstream="mirror-aosp-master"/>
+  <project groups="linux,pdk-cw-fs,x86" name="platform/prebuilts/clang/linux-x86/x86/3.3" path="prebuilts/clang/linux-x86/x86/3.3" revision="017a8a67f92a66b29ab17772e50642a7b9d0f8e6" upstream="mirror-aosp-master"/>
+  <project name="platform/prebuilts/devtools" path="prebuilts/devtools" revision="ea79f9831e9ff72ce4251010eebe5185d3c6c548" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/prebuilts/eclipse" path="prebuilts/eclipse" revision="cf9f78f8cf41b16edf9f712598a42743d5cea4af" upstream="mirror-aosp-master"/>
+  <project groups="notdefault,eclipse" name="platform/prebuilts/eclipse-build-deps" path="prebuilts/eclipse-build-deps" revision="ceb739d6a7c10f5fb5a6cf6e1f702453b1361ad3" upstream="mirror-aosp-master"/>
+  <project groups="notdefault,eclipse" name="platform/prebuilts/eclipse-build-deps-sources" path="prebuilts/eclipse-build-deps-sources" revision="8b7d8f6033ffe2d22905d10cf6d57d5bdcbe519b" upstream="mirror-aosp-master"/>
+  <project groups="pdk,darwin,arm" name="platform/prebuilts/gcc/darwin-x86/aarch64/aarch64-linux-android-4.8" path="prebuilts/gcc/darwin-x86/aarch64/aarch64-linux-android-4.8" revision="a261d38eaebb7ff406a6bb60237b36fc61714d46" upstream="mirror-aosp-master"/>
+  <project groups="pdk,darwin,arm" name="platform/prebuilts/gcc/darwin-x86/aarch64/aarch64-linux-android-4.9" path="prebuilts/gcc/darwin-x86/aarch64/aarch64-linux-android-4.9" revision="4025543df464a3cb3572e3634a24278c707ee2df" upstream="mirror-aosp-master"/>
+  <project groups="pdk,darwin,arm" name="platform/prebuilts/gcc/darwin-x86/arm/arm-eabi-4.8" path="prebuilts/gcc/darwin-x86/arm/arm-eabi-4.8" revision="6d08ca9f45ff685648fd13c75bf5cac4b11c19bb" upstream="mirror-aosp-master"/>
+  <project groups="pdk,darwin,arm" name="platform/prebuilts/gcc/darwin-x86/arm/arm-linux-androideabi-4.8" path="prebuilts/gcc/darwin-x86/arm/arm-linux-androideabi-4.8" revision="264394c23b2686ce52cd4ffb116ced127aa7f8fc" upstream="mirror-aosp-master"/>
+  <project name="platform/prebuilts/gcc/darwin-x86/arm/arm-linux-androideabi-4.9" path="prebuilts/gcc/darwin-x86/arm/arm-linux-androideabi-4.9" revision="e65de21ec791d7c7dd812416fc5bb7865912a5ef" upstream="mirror-aosp-master"/>
+  <project groups="pdk,darwin" name="platform/prebuilts/gcc/darwin-x86/host/headers" path="prebuilts/gcc/darwin-x86/host/headers" revision="4ac4f7cc41cf3c9e36fc3d6cf37fd1cfa9587a68" upstream="mirror-aosp-master"/>
+  <project groups="pdk,darwin" name="platform/prebuilts/gcc/darwin-x86/host/i686-apple-darwin-4.2.1" path="prebuilts/gcc/darwin-x86/host/i686-apple-darwin-4.2.1" revision="8834958755acc291d126ba7ee38ac731d04f9c9e" upstream="mirror-aosp-master"/>
+  <project groups="pdk,darwin,mips" name="platform/prebuilts/gcc/darwin-x86/mips/mips64el-linux-android-4.8" path="prebuilts/gcc/darwin-x86/mips/mips64el-linux-android-4.8" revision="3b5bef47de8017ff39ef5bfbe801e3fa6b272fab" upstream="mirror-aosp-master"/>
+  <project groups="pdk,darwin,mips" name="platform/prebuilts/gcc/darwin-x86/mips/mips64el-linux-android-4.9" path="prebuilts/gcc/darwin-x86/mips/mips64el-linux-android-4.9" revision="b3e5128b2196ecf82b12363409f443f18eb46a9c" upstream="mirror-aosp-master"/>
+  <project groups="pdk,darwin,mips" name="platform/prebuilts/gcc/darwin-x86/mips/mipsel-linux-android-4.8" path="prebuilts/gcc/darwin-x86/mips/mipsel-linux-android-4.8" revision="ba97180acd4251d3acf08530faa4a724af74abd3" upstream="mirror-aosp-master"/>
+  <project groups="pdk,darwin,x86" name="platform/prebuilts/gcc/darwin-x86/x86/x86_64-linux-android-4.8" path="prebuilts/gcc/darwin-x86/x86/x86_64-linux-android-4.8" revision="151333b6cf70c6fc075d18e28e4bb317a666dc8f" upstream="mirror-aosp-master"/>
+  <project groups="pdk,darwin,x86" name="platform/prebuilts/gcc/darwin-x86/x86/x86_64-linux-android-4.9" path="prebuilts/gcc/darwin-x86/x86/x86_64-linux-android-4.9" revision="8edfd4eb3d69ff37346bc3b3f8ea78462e4380c8" upstream="mirror-aosp-master"/>
+  <project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.8" path="prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.8" revision="7334f0a7a872700d0aaf00bea75917c077c45530" upstream="mirror-aosp-master"/>
+  <project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9" path="prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9" revision="6a20db030e486326e70968612662938d12d86a7b" upstream="mirror-aosp-master"/>
+  <project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.8" revision="26e93f6af47f7bd3a9beb5c102a5f45e19bfa38a" upstream="mirror-aosp-master"/>
+  <project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8" path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8" revision="d9735fc81434f2af2c44d86ca57740c673c8d9bc" upstream="mirror-aosp-master"/>
+  <project name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9" path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9" revision="acb2418543b4fc109c51e95acf566cb42f7a9912" upstream="mirror-aosp-master"/>
+  <project groups="pdk,linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8" revision="fdd759c108d1ad27b9b6e134ee346c3b52d52125" upstream="mirror-aosp-master"/>
+  <project name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8" revision="f61a459478cdc31e8aae22a182cdbf814ba08012" upstream="mirror-aosp-master"/>
+  <project name="platform/prebuilts/gcc/linux-x86/host/x86_64-w64-mingw32-4.8" path="prebuilts/gcc/linux-x86/host/x86_64-w64-mingw32-4.8" revision="f691cae2f256d5f72388c0ce9113007a53ad333a" upstream="mirror-aosp-master"/>
+  <project groups="pdk,linux,mips" name="platform/prebuilts/gcc/linux-x86/mips/mips64el-linux-android-4.8" path="prebuilts/gcc/linux-x86/mips/mips64el-linux-android-4.8" revision="38586de6b44714b4adcf21119fe6b267e33f3ca6" upstream="mirror-aosp-master"/>
+  <project groups="pdk,linux,mips" name="platform/prebuilts/gcc/linux-x86/mips/mips64el-linux-android-4.9" path="prebuilts/gcc/linux-x86/mips/mips64el-linux-android-4.9" revision="9de691053130c6d0d07774741aa551efbba13fa6" upstream="mirror-aosp-master"/>
+  <project groups="pdk,linux,mips" name="platform/prebuilts/gcc/linux-x86/mips/mipsel-linux-android-4.8" path="prebuilts/gcc/linux-x86/mips/mipsel-linux-android-4.8" revision="c06b9b305c365163c99d4ffba49ac37ce2716024" upstream="mirror-aosp-master"/>
+  <project groups="pdk,linux,x86" name="platform/prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.8" path="prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.8" revision="e239c938935058df515225b6224103078270aed8" upstream="mirror-aosp-master"/>
+  <project groups="pdk,linux,x86" name="platform/prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.9" path="prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.9" revision="469c65ad4eef1d43e79d8399e4e4282a00161ac5" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/prebuilts/gradle-plugin" path="prebuilts/gradle-plugin" revision="c528a451023d3bf8c93d0d87f70d1b4127b729eb" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/prebuilts/libs/libedit" path="prebuilts/libs/libedit" revision="d32685dba4011664b590b94ad156bc734c2c9bb5" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/prebuilts/maven_repo/android" path="prebuilts/maven_repo/android" revision="12a24bf4124f5a9fb2f21950568502ef7f8a55e3" upstream="mirror-aosp-master"/>
+  <project groups="pdk,tradefed" name="platform/prebuilts/misc" path="prebuilts/misc" revision="f5f456d2745e7e68b8e2b90260fc06de7d30a596" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/prebuilts/ndk" path="prebuilts/ndk" revision="37803394ec494aad7b39bd1a447e975da596eadc" upstream="mirror-aosp-master"/>
+  <project groups="darwin,pdk,pdk-cw-fs" name="platform/prebuilts/python/darwin-x86/2.7.5" path="prebuilts/python/darwin-x86/2.7.5" revision="2bdd4fd418614c7c0101147d02199d0e47c4980e" upstream="mirror-aosp-master"/>
+  <project groups="linux,pdk,pdk-cw-fs" name="platform/prebuilts/python/linux-x86/2.7.5" path="prebuilts/python/linux-x86/2.7.5" revision="5de4f653a1cff7d7acbbb933711537ef47e2723c" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/prebuilts/qemu-kernel" path="prebuilts/qemu-kernel" revision="1dffc580d656397f0ffca65820aac524a7ba6f77" upstream="mirror-aosp-master"/>
+  <project groups="pdk,tradefed" name="platform/prebuilts/sdk" path="prebuilts/sdk" revision="aba340a0b47f3bf28e65b098ed03fb5c94441ed4" upstream="mirror-aosp-master"/>
+  <project groups="pdk,tools" name="platform/prebuilts/tools" path="prebuilts/tools" revision="5ba4574e8c9369b79ca7333b6fc0fd9f2e2cd470" upstream="mirror-aosp-master"/>
+  <project groups="pdk-cw-fs" name="platform/sdk" path="sdk" revision="f3a09cec979464e288e5b0b971002bf0fe089ff4" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/system/core" path="system/core" revision="81906d4b0c508dc308606ca232eaa055255abd1e" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/system/extras" path="system/extras" revision="d2a8aad0cd6dfa5f3d3b1fa1162cdcc9601588fc" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/system/keymaster" path="system/keymaster" revision="4f854a6b87795fba2648fba1b9fc72bf690f93a2" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/system/media" path="system/media" revision="7d62fa85066977c1eabfa59d3ea766b9c8144b84" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/system/netd" path="system/netd" revision="ce0b69e25ae35f93ff7253855bf8a38c7fbf0232" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/system/security" path="system/security" revision="3a6456ec88ad4a3dd4cf5620c328adef998be82d" upstream="mirror-aosp-master"/>
+  <project groups="pdk" name="platform/system/vold" path="system/vold" revision="89bcc638ab24af7bee0ff3ccfa190a08b721f0a4" upstream="mirror-aosp-master"/>
+  <project groups="notdefault,tools" name="platform/tools/adt/eclipse" path="tools/adt/eclipse" revision="ede2ed86419bb4c78428f1ac09825b1a247d8e24" upstream="mirror-aosp-master"/>
+  <project groups="notdefault,tools" name="platform/tools/adt/idea" path="tools/adt/idea" revision="a19adf3564493a5142554176ec8db834554a5428" upstream="mirror-aosp-master"/>
+  <project groups="notdefault,tools" name="platform/tools/base" path="tools/base" revision="53037c688a4ddf38bccc9804027c737aa6561cae" upstream="mirror-aosp-master"/>
+  <project groups="notdefault,tools" name="platform/tools/build" path="tools/build" revision="69c4b95102b4b9862bfba68b3eaf5b7537a705ee" upstream="mirror-aosp-master"/>
+  <project groups="notdefault,tools" name="platform/tools/emulator" path="tools/emulator" revision="c427e5d5227ba9413307670a5d758d9ced394a7e" upstream="mirror-aosp-master"/>
+  <project groups="tools" name="platform/tools/external/fat32lib" path="tools/external/fat32lib" revision="3880776e41ff7def06e351720f2d162f88b58a03" upstream="mirror-aosp-master"/>
+  <project groups="tools" name="platform/tools/external/gradle" path="tools/external/gradle" revision="923b25854f68adda46113661a0cdf2dc31901158" upstream="mirror-aosp-master"/>
+  <project groups="notdefault,tools" name="platform/tools/idea" path="tools/idea" revision="9b5d02ac8c92b1e71523cc15cb3d168d57fbd898" upstream="mirror-aosp-master"/>
+  <project groups="notdefault,tradefed" name="platform/tools/loganalysis" path="tools/loganalysis" revision="e64f495107aaa91f2e40e7e5c92c700d58115fa3" upstream="mirror-aosp-master"/>
+  <project groups="notdefault,motodev" name="platform/tools/motodev" path="tools/motodev" revision="69989786cefbde82527960a1e100ec9afba46a98" upstream="mirror-aosp-master"/>
+  <project groups="notdefault,tools" name="platform/tools/studio/cloud" path="tools/studio/cloud" revision="58f06e77e051fff3903adabca7acdaa9dd12ec2d" upstream="mirror-aosp-master"/>
+  <project groups="notdefault,tools" name="platform/tools/studio/translation" path="tools/studio/translation" revision="4e094acd23094d6edf9823167adf683d2a327de2" upstream="mirror-aosp-master"/>
+  <project groups="notdefault,tools" name="platform/tools/swt" path="tools/swt" revision="8f804c13f826878423684fff95dbfd34485e6f65" upstream="mirror-aosp-master"/>
+</manifest>
diff --git a/third_party/instrumented_libraries/BUILD.gn b/third_party/instrumented_libraries/BUILD.gn
new file mode 100644
index 0000000..9a25322
--- /dev/null
+++ b/third_party/instrumented_libraries/BUILD.gn
@@ -0,0 +1,8 @@
+# Copyright 2015 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# This is just to placate build/config/sanitizers/BUILD.gn (which we can't
+# modify, since it's pulled verbatim from upstream).
+group("deps") {
+}
diff --git a/third_party/mojo/MOJO_VERSION b/third_party/mojo/MOJO_VERSION
index eabe5eb..90c3ebb 100644
--- a/third_party/mojo/MOJO_VERSION
+++ b/third_party/mojo/MOJO_VERSION
@@ -1 +1 @@
-aee3b223f400a7fdabfd5ae1c0eda6c7b38445b1
+b88737ed62969ce3203085748f0d53ff4f09ba5b
diff --git a/tools/android/forwarder2/BUILD.gn b/tools/android/forwarder2/BUILD.gn
index acbd617..fbc9097 100644
--- a/tools/android/forwarder2/BUILD.gn
+++ b/tools/android/forwarder2/BUILD.gn
@@ -53,6 +53,9 @@
   create_native_executable_dist("device_forwarder_prepare_dist") {
     dist_dir = "$root_build_dir/forwarder_dist"
     binary = "$root_build_dir/exe.stripped/device_forwarder"
+    deps = [
+      ":device_forwarder",
+    ]
   }
 }
 
@@ -94,5 +97,8 @@
     outputs = [
       "$root_build_dir/host_forwarder",
     ]
+    deps = [
+      ":host_forwarder",
+    ]
   }
 }
diff --git a/tools/android/md5sum/BUILD.gn b/tools/android/md5sum/BUILD.gn
index 9b458c7..0f52040 100644
--- a/tools/android/md5sum/BUILD.gn
+++ b/tools/android/md5sum/BUILD.gn
@@ -39,6 +39,9 @@
   create_native_executable_dist("md5sum_prepare_dist") {
     dist_dir = "$root_build_dir/md5sum_dist"
     binary = "$root_build_dir/exe.stripped/md5sum_bin"
+    deps = [
+      ":md5sum_bin",
+    ]
   }
 } else {
   # GYP: //tools/android/md5sum/md5sum.gyp:md5sum_bin_host
@@ -49,5 +52,8 @@
     outputs = [
       "$root_build_dir/md5sum_bin_host",
     ]
+    deps = [
+      ":md5sum_bin",
+    ]
   }
 }
diff --git a/tools/clang/scripts/update.sh b/tools/clang/scripts/update.sh
index 2e0f0d0..10aa5c1 100755
--- a/tools/clang/scripts/update.sh
+++ b/tools/clang/scripts/update.sh
@@ -8,10 +8,10 @@
 # Do NOT CHANGE this if you don't know what you're doing -- see
 # https://code.google.com/p/chromium/wiki/UpdatingClang
 # Reverting problematic clang rolls is safe, though.
-CLANG_REVISION=233105
+CLANG_REVISION=238013
 
 # This is incremented when pushing a new build of Clang at the same revision.
-CLANG_SUB_REVISION=2
+CLANG_SUB_REVISION=3
 
 PACKAGE_VERSION="${CLANG_REVISION}-${CLANG_SUB_REVISION}"