Merge change Ibdced0b5

* changes:
  Remove unused #includes.
diff --git a/api/4.xml b/api/4.xml
index bca9816..e996e8f 100644
--- a/api/4.xml
+++ b/api/4.xml
@@ -51157,7 +51157,7 @@
 <method name="breakText"
  return="int"
  abstract="false"
- native="true"
+ native="false"
  synchronized="false"
  static="false"
  final="false"
@@ -51201,7 +51201,7 @@
 <method name="breakText"
  return="int"
  abstract="false"
- native="true"
+ native="false"
  synchronized="false"
  static="false"
  final="false"
@@ -51769,7 +51769,7 @@
 <method name="measureText"
  return="float"
  abstract="false"
- native="true"
+ native="false"
  synchronized="false"
  static="false"
  final="false"
@@ -51786,7 +51786,7 @@
 <method name="measureText"
  return="float"
  abstract="false"
- native="true"
+ native="false"
  synchronized="false"
  static="false"
  final="false"
@@ -51803,7 +51803,7 @@
 <method name="measureText"
  return="float"
  abstract="false"
- native="true"
+ native="false"
  synchronized="false"
  static="false"
  final="false"
diff --git a/api/current.xml b/api/current.xml
index 0ea5ea5..2b75c2e 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -177,17 +177,6 @@
  visibility="public"
 >
 </field>
-<field name="BIND_WALLPAPER"
- type="java.lang.String"
- transient="false"
- volatile="false"
- value="&quot;android.permission.BIND_WALLPAPER&quot;"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
 <field name="BLUETOOTH"
  type="java.lang.String"
  transient="false"
@@ -2550,6 +2539,17 @@
  visibility="public"
 >
 </field>
+<field name="colorBackgroundCacheHint"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="16843435"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="colorForeground"
  type="int"
  transient="false"
@@ -3133,6 +3133,17 @@
  visibility="public"
 >
 </field>
+<field name="dropDownHorizontalOffset"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="16843436"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="dropDownItemStyle"
  type="int"
  transient="false"
@@ -3166,6 +3177,17 @@
  visibility="public"
 >
 </field>
+<field name="dropDownVerticalOffset"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="16843437"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="dropDownWidth"
  type="int"
  transient="false"
@@ -10923,6 +10945,17 @@
  visibility="public"
 >
 </field>
+<field name="stat_notify_sdcard_prepare"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="17301675"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="stat_notify_sdcard_usb"
  type="int"
  transient="false"
@@ -17485,8 +17518,6 @@
 </parameter>
 <parameter name="appSearchData" type="android.os.Bundle">
 </parameter>
-<parameter name="globalSearch" type="boolean">
-</parameter>
 </method>
 <method name="unregisterForContextMenu"
  return="void"
@@ -24039,8 +24070,6 @@
 </parameter>
 <parameter name="appSearchData" type="android.os.Bundle">
 </parameter>
-<parameter name="globalSearch" type="boolean">
-</parameter>
 </method>
 <field name="ACTION_KEY"
  type="java.lang.String"
@@ -24317,6 +24346,17 @@
  visibility="public"
 >
 </field>
+<field name="SUGGEST_PARAMETER_LIMIT"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;limit&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="SUGGEST_URI_PATH_QUERY"
  type="java.lang.String"
  transient="false"
@@ -42756,25 +42796,6 @@
 >
 </field>
 </class>
-<interface name="RegisteredServicesCacheListener"
- abstract="true"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<method name="onRegisteredServicesCacheChanged"
- return="void"
- abstract="true"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
-</interface>
 <class name="ResolveInfo"
  extends="java.lang.Object"
  abstract="false"
@@ -58539,7 +58560,7 @@
 <method name="breakText"
  return="int"
  abstract="false"
- native="true"
+ native="false"
  synchronized="false"
  static="false"
  final="false"
@@ -58583,7 +58604,7 @@
 <method name="breakText"
  return="int"
  abstract="false"
- native="true"
+ native="false"
  synchronized="false"
  static="false"
  final="false"
@@ -59151,7 +59172,7 @@
 <method name="measureText"
  return="float"
  abstract="false"
- native="true"
+ native="false"
  synchronized="false"
  static="false"
  final="false"
@@ -59168,7 +59189,7 @@
 <method name="measureText"
  return="float"
  abstract="false"
- native="true"
+ native="false"
  synchronized="false"
  static="false"
  final="false"
@@ -59185,7 +59206,7 @@
 <method name="measureText"
  return="float"
  abstract="false"
- native="true"
+ native="false"
  synchronized="false"
  static="false"
  final="false"
@@ -63521,21 +63542,6 @@
  visibility="public"
 >
 </method>
-<method name="setGammaForText"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="blackGamma" type="float">
-</parameter>
-<parameter name="whiteGamma" type="float">
-</parameter>
-</method>
 <field name="BOLD"
  type="int"
  transient="false"
@@ -67526,19 +67532,6 @@
 <exception name="IOException" type="java.io.IOException">
 </exception>
 </method>
-<method name="setZoomCallback"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="cb" type="android.hardware.Camera.ZoomCallback">
-</parameter>
-</method>
 <method name="startPreview"
  return="void"
  abstract="false"
@@ -68919,29 +68912,6 @@
 >
 </field>
 </class>
-<interface name="Camera.ZoomCallback"
- abstract="true"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<method name="onZoomUpdate"
- return="void"
- abstract="true"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="zoomLevel" type="int">
-</parameter>
-<parameter name="camera" type="android.hardware.Camera">
-</parameter>
-</method>
-</interface>
 <class name="GeomagneticField"
  extends="java.lang.Object"
  abstract="false"
@@ -113211,37 +113181,6 @@
 >
 </field>
 </interface>
-<class name="ContactsContract.CommonDataKinds.Birthday"
- extends="java.lang.Object"
- abstract="false"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-<field name="BIRTHDAY"
- type="java.lang.String"
- transient="false"
- volatile="false"
- value="&quot;data1&quot;"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="CONTENT_ITEM_TYPE"
- type="java.lang.String"
- transient="false"
- volatile="false"
- value="&quot;vnd.android.cursor.item/birthday&quot;"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-</class>
 <class name="ContactsContract.CommonDataKinds.Email"
  extends="java.lang.Object"
  abstract="false"
@@ -113396,11 +113335,24 @@
  deprecated="not deprecated"
  visibility="public"
 >
+<method name="getTypeResource"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="type" type="java.lang.Integer">
+</parameter>
+</method>
 <field name="CONTENT_ITEM_TYPE"
  type="java.lang.String"
  transient="false"
  volatile="false"
- value="&quot;vnd.android.cursor.item/event&quot;"
+ value="&quot;vnd.android.cursor.item/contact_event&quot;"
  static="true"
  final="true"
  deprecated="not deprecated"
@@ -113429,6 +113381,17 @@
  visibility="public"
 >
 </field>
+<field name="TYPE_BIRTHDAY"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="TYPE_OTHER"
  type="int"
  transient="false"
@@ -115740,6 +115703,98 @@
 >
 </constructor>
 </class>
+<class name="ContactsContract.QuickContact"
+ extends="java.lang.Object"
+ abstract="false"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<constructor name="ContactsContract.QuickContact"
+ type="android.provider.ContactsContract.QuickContact"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</constructor>
+<method name="showQuickContact"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="context" type="android.content.Context">
+</parameter>
+<parameter name="target" type="android.view.View">
+</parameter>
+<parameter name="lookupUri" type="android.net.Uri">
+</parameter>
+<parameter name="mode" type="int">
+</parameter>
+<parameter name="excludeMimes" type="java.lang.String[]">
+</parameter>
+</method>
+<method name="showQuickContact"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="context" type="android.content.Context">
+</parameter>
+<parameter name="target" type="android.graphics.Rect">
+</parameter>
+<parameter name="lookupUri" type="android.net.Uri">
+</parameter>
+<parameter name="mode" type="int">
+</parameter>
+<parameter name="excludeMimes" type="java.lang.String[]">
+</parameter>
+</method>
+<field name="MODE_LARGE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="MODE_MEDIUM"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="MODE_SMALL"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
 <class name="ContactsContract.RawContacts"
  extends="java.lang.Object"
  abstract="false"
@@ -117883,6 +117938,21 @@
  visibility="public"
 >
 </constructor>
+<method name="cancelThumbnailRequest"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="cr" type="android.content.ContentResolver">
+</parameter>
+<parameter name="origId" type="long">
+</parameter>
+</method>
 <method name="getContentUri"
  return="android.net.Uri"
  abstract="false"
@@ -118325,6 +118395,21 @@
  visibility="public"
 >
 </constructor>
+<method name="cancelThumbnailRequest"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="cr" type="android.content.ContentResolver">
+</parameter>
+<parameter name="origId" type="long">
+</parameter>
+</method>
 <method name="getContentUri"
  return="android.net.Uri"
  abstract="false"
@@ -122059,37 +122144,6 @@
 </implements>
 </interface>
 </package>
-<package name="android.service.wallpaper"
->
-<class name="WallpaperSettingsActivity"
- extends="android.preference.PreferenceActivity"
- abstract="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<constructor name="WallpaperSettingsActivity"
- type="android.service.wallpaper.WallpaperSettingsActivity"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</constructor>
-<field name="EXTRA_PREVIEW_MODE"
- type="java.lang.String"
- transient="false"
- volatile="false"
- value="&quot;android.service.wallpaper.PREVIEW_MODE&quot;"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-</class>
-</package>
 <package name="android.speech"
 >
 <class name="RecognizerIntent"
@@ -123233,6 +123287,23 @@
 <parameter name="b" type="java.lang.String">
 </parameter>
 </method>
+<method name="compare"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="context" type="android.content.Context">
+</parameter>
+<parameter name="a" type="java.lang.String">
+</parameter>
+<parameter name="b" type="java.lang.String">
+</parameter>
+</method>
 <method name="convertKeypadLettersToDigits"
  return="java.lang.String"
  abstract="false"
@@ -155026,7 +155097,20 @@
  visibility="public"
 >
 </method>
-<method name="setOnTop"
+<method name="setZOrderMediaOverlay"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="isMediaOverlay" type="boolean">
+</parameter>
+</method>
+<method name="setZOrderOnTop"
  return="void"
  abstract="false"
  native="false"
@@ -155342,6 +155426,21 @@
 <parameter name="startDelay" type="int">
 </parameter>
 </method>
+<method name="awakenScrollBars"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="protected"
+>
+<parameter name="startDelay" type="int">
+</parameter>
+<parameter name="invalidate" type="boolean">
+</parameter>
+</method>
 <method name="bringToFront"
  return="void"
  abstract="false"
@@ -156991,6 +157090,17 @@
  visibility="public"
 >
 </method>
+<method name="isScrollbarFadingEnabled"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="isSelected"
  return="boolean"
  abstract="false"
@@ -157165,19 +157275,6 @@
  visibility="public"
 >
 </method>
-<method name="onCloseSystemDialogs"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="reason" type="java.lang.String">
-</parameter>
-</method>
 <method name="onCreateContextMenu"
  return="void"
  abstract="false"
@@ -171971,6 +172068,48 @@
 </parameter>
 </method>
 </interface>
+<class name="GeolocationPermissions"
+ extends="java.lang.Object"
+ abstract="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<constructor name="GeolocationPermissions"
+ type="android.webkit.GeolocationPermissions"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</constructor>
+</class>
+<interface name="GeolocationPermissions.Callback"
+ abstract="true"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="invoke"
+ return="void"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="origin" type="java.lang.String">
+</parameter>
+<parameter name="allow" type="boolean">
+</parameter>
+<parameter name="remember" type="boolean">
+</parameter>
+</method>
+</interface>
 <class name="HttpAuthHandler"
  extends="android.os.Handler"
  abstract="false"
@@ -173072,6 +173211,32 @@
 <parameter name="quotaUpdater" type="android.webkit.WebStorage.QuotaUpdater">
 </parameter>
 </method>
+<method name="onGeolocationPermissionsHidePrompt"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="onGeolocationPermissionsShowPrompt"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="origin" type="java.lang.String">
+</parameter>
+<parameter name="callback" type="android.webkit.GeolocationPermissions.Callback">
+</parameter>
+</method>
 <method name="onJsAlert"
  return="boolean"
  abstract="false"
@@ -173910,6 +174075,32 @@
 <parameter name="font" type="java.lang.String">
 </parameter>
 </method>
+<method name="setGeolocationDatabasePath"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="true"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="databasePath" type="java.lang.String">
+</parameter>
+</method>
+<method name="setGeolocationEnabled"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="true"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="flag" type="boolean">
+</parameter>
+</method>
 <method name="setJavaScriptCanOpenWindowsAutomatically"
  return="void"
  abstract="false"
@@ -186084,6 +186275,146 @@
 </parameter>
 </method>
 </class>
+<class name="QuickContactBadge"
+ extends="android.widget.ImageView"
+ abstract="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<implements name="android.view.View.OnClickListener">
+</implements>
+<constructor name="QuickContactBadge"
+ type="android.widget.QuickContactBadge"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="context" type="android.content.Context">
+</parameter>
+</constructor>
+<constructor name="QuickContactBadge"
+ type="android.widget.QuickContactBadge"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="context" type="android.content.Context">
+</parameter>
+<parameter name="attrs" type="android.util.AttributeSet">
+</parameter>
+</constructor>
+<constructor name="QuickContactBadge"
+ type="android.widget.QuickContactBadge"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="context" type="android.content.Context">
+</parameter>
+<parameter name="attrs" type="android.util.AttributeSet">
+</parameter>
+<parameter name="defStyle" type="int">
+</parameter>
+</constructor>
+<method name="assignContactFromEmail"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="emailAddress" type="java.lang.String">
+</parameter>
+<parameter name="lazyLookup" type="boolean">
+</parameter>
+</method>
+<method name="assignContactFromPhone"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="phoneNumber" type="java.lang.String">
+</parameter>
+<parameter name="lazyLookup" type="boolean">
+</parameter>
+</method>
+<method name="assignContactUri"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="contactUri" type="android.net.Uri">
+</parameter>
+</method>
+<method name="onClick"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="v" type="android.view.View">
+</parameter>
+</method>
+<method name="setExcludeMimes"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="excludeMimes" type="java.lang.String[]">
+</parameter>
+</method>
+<method name="setMode"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="size" type="int">
+</parameter>
+</method>
+<field name="mExcludeMimes"
+ type="java.lang.String[]"
+ transient="false"
+ volatile="false"
+ value="null"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="protected"
+>
+</field>
+</class>
 <class name="RadioButton"
  extends="android.widget.CompoundButton"
  abstract="false"
diff --git a/cmds/bootanimation/BootAnimation.cpp b/cmds/bootanimation/BootAnimation.cpp
index 834a664..b5b88f3 100644
--- a/cmds/bootanimation/BootAnimation.cpp
+++ b/cmds/bootanimation/BootAnimation.cpp
@@ -53,7 +53,7 @@
 // ---------------------------------------------------------------------------
 
 BootAnimation::BootAnimation() : Thread(false)
-{    
+{
     mSession = new SurfaceComposerClient();
 }
 
@@ -139,6 +139,62 @@
     return NO_ERROR;
 }
 
+status_t BootAnimation::initTexture(void* buffer, size_t len)
+{
+    //StopWatch watch("blah");
+
+    SkBitmap bitmap;
+    SkImageDecoder::DecodeMemory(buffer, len,
+            &bitmap, SkBitmap::kRGB_565_Config,
+            SkImageDecoder::kDecodePixels_Mode);
+
+    // ensure we can call getPixels(). No need to call unlock, since the
+    // bitmap will go out of scope when we return from this method.
+    bitmap.lockPixels();
+
+    const int w = bitmap.width();
+    const int h = bitmap.height();
+    const void* p = bitmap.getPixels();
+
+    GLint crop[4] = { 0, h, w, -h };
+    int tw = 1 << (31 - __builtin_clz(w));
+    int th = 1 << (31 - __builtin_clz(h));
+    if (tw < w) tw <<= 1;
+    if (th < h) th <<= 1;
+
+    switch (bitmap.getConfig()) {
+        case SkBitmap::kARGB_8888_Config:
+            if (tw != w || th != h) {
+                glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tw, th, 0, GL_RGBA,
+                        GL_UNSIGNED_BYTE, 0);
+                glTexSubImage2D(GL_TEXTURE_2D, 0,
+                        0, 0, w, h, GL_RGBA, GL_UNSIGNED_BYTE, p);
+            } else {
+                glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tw, th, 0, GL_RGBA,
+                        GL_UNSIGNED_BYTE, p);
+            }
+            break;
+
+        case SkBitmap::kRGB_565_Config:
+            if (tw != w || th != h) {
+                glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, tw, th, 0, GL_RGB,
+                        GL_UNSIGNED_SHORT_5_6_5, 0);
+                glTexSubImage2D(GL_TEXTURE_2D, 0,
+                        0, 0, w, h, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, p);
+            } else {
+                glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, tw, th, 0, GL_RGB,
+                        GL_UNSIGNED_SHORT_5_6_5, p);
+            }
+            break;
+        default:
+            break;
+    }
+
+    glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, crop);
+
+    return NO_ERROR;
+}
+
 status_t BootAnimation::readyToRun() {
     mAssets.addDefaultAssets();
 
@@ -158,8 +214,8 @@
 
     // initialize opengl and egl
     const EGLint attribs[] = {
-            EGL_DEPTH_SIZE, 0, 
-            EGL_NONE 
+            EGL_DEPTH_SIZE, 0,
+            EGL_NONE
     };
     EGLint w, h, dummy;
     EGLint numConfigs;
@@ -175,10 +231,10 @@
     context = eglCreateContext(display, config, NULL, NULL);
     eglQuerySurface(display, surface, EGL_WIDTH, &w);
     eglQuerySurface(display, surface, EGL_HEIGHT, &h);
-    
+
     if (eglMakeCurrent(display, surface, surface, context) == EGL_FALSE)
         return NO_INIT;
-    
+
     mDisplay = display;
     mContext = context;
     mSurface = surface;
@@ -187,16 +243,27 @@
     mFlingerSurfaceControl = control;
     mFlingerSurface = s;
 
-    // initialize GL
-    glShadeModel(GL_FLAT);
-    glEnable(GL_TEXTURE_2D);
-    glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
+    mAndroidAnimation = false;
+    status_t err = mZip.open("/data/local/bootanimation.zip");
+    if (err != NO_ERROR) {
+        err = mZip.open("/system/media/bootanimation.zip");
+        if (err != NO_ERROR) {
+            mAndroidAnimation = true;
+        }
+    }
 
     return NO_ERROR;
 }
 
-bool BootAnimation::threadLoop() {
-    bool r = android();
+bool BootAnimation::threadLoop()
+{
+    bool r;
+    if (mAndroidAnimation) {
+        r = android();
+    } else {
+        r = movie();
+    }
+
     eglMakeCurrent(mDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
     eglDestroyContext(mDisplay, mContext);
     eglDestroySurface(mDisplay, mSurface);
@@ -207,16 +274,21 @@
     return r;
 }
 
-bool BootAnimation::android() {
+bool BootAnimation::android()
+{
     initTexture(&mAndroid[0], mAssets, "images/android-logo-mask.png");
     initTexture(&mAndroid[1], mAssets, "images/android-logo-shine.png");
 
     // clear screen
+    glShadeModel(GL_FLAT);
     glDisable(GL_DITHER);
     glDisable(GL_SCISSOR_TEST);
     glClear(GL_COLOR_BUFFER_BIT);
     eglSwapBuffers(mDisplay, mSurface);
 
+    glEnable(GL_TEXTURE_2D);
+    glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
+
     const GLint xc = (mWidth  - mAndroid[0].w) / 2;
     const GLint yc = (mHeight - mAndroid[0].h) / 2;
     const Rect updateRect(xc, yc, xc + mAndroid[0].w, yc + mAndroid[0].h);
@@ -259,7 +331,7 @@
         // 12fps: don't animate too fast to preserve CPU
         const nsecs_t sleepTime = 83333 - ns2us(systemTime() - now);
         if (sleepTime > 0)
-            usleep(sleepTime); 
+            usleep(sleepTime);
     } while (!exitPending());
 
     glDeleteTextures(1, &mAndroid[0].name);
@@ -267,6 +339,152 @@
     return false;
 }
 
+
+bool BootAnimation::movie()
+{
+    ZipFileRO& zip(mZip);
+
+    size_t numEntries = zip.getNumEntries();
+    ZipEntryRO desc = zip.findEntryByName("desc.txt");
+    FileMap* descMap = zip.createEntryFileMap(desc);
+    LOGE_IF(!descMap, "descMap is null");
+    if (!descMap) {
+        return false;
+    }
+
+    String8 desString((char const*)descMap->getDataPtr(),
+            descMap->getDataLength());
+    char const* s = desString.string();
+
+    Animation animation;
+
+    // Parse the description file
+    for (;;) {
+        const char* endl = strstr(s, "\n");
+        if (!endl) break;
+        String8 line(s, endl - s);
+        const char* l = line.string();
+        int fps, width, height, count, pause;
+        char path[256];
+        if (sscanf(l, "%d %d %d", &width, &height, &fps) == 3) {
+            //LOGD("> w=%d, h=%d, fps=%d", fps, width, height);
+            animation.width = width;
+            animation.height = height;
+            animation.fps = fps;
+        }
+        if (sscanf(l, "p %d %d %s", &count, &pause, path) == 3) {
+            //LOGD("> count=%d, pause=%d, path=%s", count, pause, path);
+            Animation::Part part;
+            part.count = count;
+            part.pause = pause;
+            part.path = path;
+            animation.parts.add(part);
+        }
+        s = ++endl;
+    }
+
+    // read all the data structures
+    const size_t pcount = animation.parts.size();
+    for (size_t i=0 ; i<numEntries ; i++) {
+        char name[256];
+        ZipEntryRO entry = zip.findEntryByIndex(i);
+        if (zip.getEntryFileName(entry, name, 256) == 0) {
+            const String8 entryName(name);
+            const String8 path(entryName.getPathDir());
+            const String8 leaf(entryName.getPathLeaf());
+            if (leaf.size() > 0) {
+                for (int j=0 ; j<pcount ; j++) {
+                    if (path == animation.parts[j].path) {
+                        int method;
+                        // supports only stored png files
+                        if (zip.getEntryInfo(entry, &method, 0, 0, 0, 0, 0)) {
+                            if (method == ZipFileRO::kCompressStored) {
+                                FileMap* map = zip.createEntryFileMap(entry);
+                                if (map) {
+                                    Animation::Frame frame;
+                                    frame.name = leaf;
+                                    frame.map = map;
+                                    Animation::Part& part(animation.parts.editItemAt(j));
+                                    part.frames.add(frame);
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    // clear screen
+    glShadeModel(GL_FLAT);
+    glDisable(GL_DITHER);
+    glDisable(GL_SCISSOR_TEST);
+    glDisable(GL_BLEND);
+    glClear(GL_COLOR_BUFFER_BIT);
+
+    eglSwapBuffers(mDisplay, mSurface);
+
+    glBindTexture(GL_TEXTURE_2D, 0);
+    glEnable(GL_TEXTURE_2D);
+    glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
+    glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
+    glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
+    glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+    glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+
+    const int xc = (mWidth - animation.width) / 2;
+    const int yc = ((mHeight - animation.height) / 2);
+    nsecs_t lastFrame = systemTime();
+    nsecs_t frameDuration = s2ns(1) / animation.fps;
+
+    for (int i=0 ; i<pcount && !exitPending() ; i++) {
+        const Animation::Part& part(animation.parts[i]);
+        const size_t fcount = part.frames.size();
+        glBindTexture(GL_TEXTURE_2D, 0);
+
+        for (int r=0 ; !part.count || r<part.count ; r++) {
+            for (int j=0 ; j<fcount && !exitPending(); j++) {
+                const Animation::Frame& frame(part.frames[j]);
+
+                if (r > 0) {
+                    glBindTexture(GL_TEXTURE_2D, frame.tid);
+                } else {
+                    if (part.count != 1) {
+                        glGenTextures(1, &frame.tid);
+                        glBindTexture(GL_TEXTURE_2D, frame.tid);
+                        glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+                        glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+                    }
+                    initTexture(
+                            frame.map->getDataPtr(),
+                            frame.map->getDataLength());
+                }
+
+                glDrawTexiOES(xc, yc, 0, animation.width, animation.height);
+                eglSwapBuffers(mDisplay, mSurface);
+
+                nsecs_t now = systemTime();
+                nsecs_t delay = frameDuration - (now - lastFrame);
+                lastFrame = now;
+                long wait = ns2us(frameDuration);
+                if (wait > 0)
+                    usleep(wait);
+            }
+            usleep(part.pause * ns2us(frameDuration));
+        }
+
+        // free the textures for this part
+        if (part.count != 1) {
+            for (int j=0 ; j<fcount ; j++) {
+                const Animation::Frame& frame(part.frames[j]);
+                glDeleteTextures(1, &frame.tid);
+            }
+        }
+    }
+
+    return false;
+}
+
 // ---------------------------------------------------------------------------
 
 }
diff --git a/cmds/bootanimation/BootAnimation.h b/cmds/bootanimation/BootAnimation.h
index afd01fa..e53ba8b 100644
--- a/cmds/bootanimation/BootAnimation.h
+++ b/cmds/bootanimation/BootAnimation.h
@@ -57,8 +57,31 @@
         GLuint  name;
     };
 
+    struct Animation {
+        struct Frame {
+            String8 name;
+            FileMap* map;
+            mutable GLuint tid;
+            bool operator < (const Frame& rhs) const {
+                return name < rhs.name;
+            }
+        };
+        struct Part {
+            int count;
+            int pause;
+            String8 path;
+            SortedVector<Frame> frames;
+        };
+        int fps;
+        int width;
+        int height;
+        Vector<Part> parts;
+    };
+
     status_t initTexture(Texture* texture, AssetManager& asset, const char* name);
+    status_t initTexture(void* buffer, size_t len);
     bool android();
+    bool movie();
 
     sp<SurfaceComposerClient>       mSession;
     AssetManager mAssets;
@@ -70,6 +93,8 @@
     EGLDisplay  mSurface;
     sp<SurfaceControl> mFlingerSurfaceControl;
     sp<Surface> mFlingerSurface;
+    bool        mAndroidAnimation;
+    ZipFileRO   mZip;
 };
 
 // ---------------------------------------------------------------------------
diff --git a/core/java/android/accounts/AccountManagerService.java b/core/java/android/accounts/AccountManagerService.java
index 2d2e75f..6dea023 100644
--- a/core/java/android/accounts/AccountManagerService.java
+++ b/core/java/android/accounts/AccountManagerService.java
@@ -73,7 +73,7 @@
 public class AccountManagerService
         extends IAccountManager.Stub
         implements RegisteredServicesCacheListener {
-    private static final String GOOGLE_ACCOUNT_TYPE = "com.google.GAIA";
+    private static final String GOOGLE_ACCOUNT_TYPE = "com.google";
 
     private static final String NO_BROADCAST_FLAG = "nobroadcast";
 
@@ -81,7 +81,7 @@
 
     private static final int TIMEOUT_DELAY_MS = 1000 * 60;
     private static final String DATABASE_NAME = "accounts.db";
-    private static final int DATABASE_VERSION = 3;
+    private static final int DATABASE_VERSION = 4;
 
     private final Context mContext;
 
@@ -102,6 +102,7 @@
     private static final String ACCOUNTS_ID = "_id";
     private static final String ACCOUNTS_NAME = "name";
     private static final String ACCOUNTS_TYPE = "type";
+    private static final String ACCOUNTS_TYPE_COUNT = "count(type)";
     private static final String ACCOUNTS_PASSWORD = "password";
 
     private static final String TABLE_AUTHTOKENS = "authtokens";
@@ -127,6 +128,8 @@
 
     private static final String[] ACCOUNT_NAME_TYPE_PROJECTION =
             new String[]{ACCOUNTS_ID, ACCOUNTS_NAME, ACCOUNTS_TYPE};
+    private static final String[] ACCOUNT_TYPE_COUNT_PROJECTION =
+            new String[] { ACCOUNTS_TYPE, ACCOUNTS_TYPE_COUNT};
     private static final Intent ACCOUNTS_CHANGED_INTENT;
 
     private static final String COUNT_OF_MATCHING_GRANTS = ""
@@ -849,7 +852,7 @@
         try {
             new Session(response, accountType, expectActivityLaunch) {
                 public void run() throws RemoteException {
-                    mAuthenticator.addAccount(this, mAccountType, authTokenType, requiredFeatures, 
+                    mAuthenticator.addAccount(this, mAccountType, authTokenType, requiredFeatures,
                             options);
                 }
 
@@ -1284,7 +1287,7 @@
         MessageHandler(Looper looper) {
             super(looper);
         }
-        
+
         public void handleMessage(Message msg) {
             if (mBindHelper.handleMessage(msg)) {
                 return;
@@ -1376,6 +1379,12 @@
                 createAccountsDeletionTrigger(db);
                 oldVersion++;
             }
+
+            if (oldVersion == 3) {
+                db.execSQL("UPDATE " + TABLE_ACCOUNTS + " SET " + ACCOUNTS_TYPE +
+                        " = 'com.google' WHERE " + ACCOUNTS_TYPE + " == 'com.google.GAIA'");
+                oldVersion++;
+            }
         }
 
         @Override
@@ -1414,7 +1423,7 @@
             filter.addAction(Intent.ACTION_DEVICE_STORAGE_OK);
             context.registerReceiver(this, filter);
         }
-        
+
         /**
          * Compare the IMSI to the one stored in the login service's
          * database.  If they differ, erase all passwords and
@@ -1455,18 +1464,54 @@
         return asBinder();
     }
 
-    protected void dump(FileDescriptor fd, PrintWriter fout, String[] args) {
-        synchronized (mSessions) {
-            final long now = SystemClock.elapsedRealtime();
-            fout.println("AccountManagerService: " + mSessions.size() + " sessions");
-            for (Session session : mSessions.values()) {
-                fout.println("  " + session.toDebugString(now));
+    /**
+     * Searches array of arguments for the specified string
+     * @param args array of argument strings
+     * @param value value to search for
+     * @return true if the value is contained in the array
+     */
+    private static boolean scanArgs(String[] args, String value) {
+        if (args != null) {
+            for (String arg : args) {
+                if (value.equals(arg)) {
+                    return true;
+                }
             }
         }
+        return false;
+    }
 
-        fout.println();
+    protected void dump(FileDescriptor fd, PrintWriter fout, String[] args) {
+        final boolean isCheckinRequest = scanArgs(args, "--checkin") || scanArgs(args, "-c");
 
-        mAuthenticatorCache.dump(fd, fout, args);
+        if (isCheckinRequest) {
+            // This is a checkin request. *Only* upload the account types and the count of each.
+            SQLiteDatabase db = mOpenHelper.getReadableDatabase();
+
+            Cursor cursor = db.query(TABLE_ACCOUNTS, ACCOUNT_TYPE_COUNT_PROJECTION,
+                    null, null, ACCOUNTS_TYPE, null, null);
+            try {
+                while (cursor.moveToNext()) {
+                    // print type,count
+                    fout.println(cursor.getString(0) + "," + cursor.getString(1));
+                }
+            } finally {
+                if (cursor != null) {
+                    cursor.close();
+                }
+            }
+        } else {
+            synchronized (mSessions) {
+                final long now = SystemClock.elapsedRealtime();
+                fout.println("AccountManagerService: " + mSessions.size() + " sessions");
+                for (Session session : mSessions.values()) {
+                    fout.println("  " + session.toDebugString(now));
+                }
+            }
+
+            fout.println();
+            mAuthenticatorCache.dump(fd, fout, args);
+        }
     }
 
     private void doNotification(Account account, CharSequence message, Intent intent) {
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index 9095ec9..49ebce3 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -2619,14 +2619,10 @@
      * context here, in order to improve quality or specificity of its own
      * searches.  This data will be returned with SEARCH intent(s).  Null if
      * no extra data is required.
-     * @param globalSearch If false, this will only launch the search that has been specifically
-     * defined by the application (which is usually defined as a local search).  If no default
-     * search is defined in the current application or activity, no search will be launched.
-     * If true, this will always launch a platform-global (e.g. web-based) search instead.
      */
-    public void triggerSearch(String query, Bundle appSearchData, boolean globalSearch) {
+    public void triggerSearch(String query, Bundle appSearchData) {
         ensureSearchManager();
-        mSearchManager.triggerSearch(query, getComponentName(), appSearchData, globalSearch);
+        mSearchManager.triggerSearch(query, getComponentName(), appSearchData);
     }
 
     /**
diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java
index 2d7658a..3b8aee9 100644
--- a/core/java/android/app/ActivityManagerNative.java
+++ b/core/java/android/app/ActivityManagerNative.java
@@ -315,8 +315,12 @@
         case ACTIVITY_IDLE_TRANSACTION: {
             data.enforceInterface(IActivityManager.descriptor);
             IBinder token = data.readStrongBinder();
+            Configuration config = null;
+            if (data.readInt() != 0) {
+                config = Configuration.CREATOR.createFromParcel(data);
+            }
             if (token != null) {
-                activityIdle(token);
+                activityIdle(token, config);
             }
             reply.writeNoException();
             return true;
@@ -1397,12 +1401,18 @@
         data.recycle();
         reply.recycle();
     }
-    public void activityIdle(IBinder token) throws RemoteException
+    public void activityIdle(IBinder token, Configuration config) throws RemoteException
     {
         Parcel data = Parcel.obtain();
         Parcel reply = Parcel.obtain();
         data.writeInterfaceToken(IActivityManager.descriptor);
         data.writeStrongBinder(token);
+        if (config != null) {
+            data.writeInt(1);
+            config.writeToParcel(data, 0);
+        } else {
+            data.writeInt(0);
+        }
         mRemote.transact(ACTIVITY_IDLE_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
         reply.readException();
         data.recycle();
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 76a133b..b4ac159 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -122,7 +122,8 @@
     private static final boolean localLOGV = DEBUG ? Config.LOGD : Config.LOGV;
     private static final boolean DEBUG_BROADCAST = false;
     private static final boolean DEBUG_RESULTS = false;
-    private static final boolean DEBUG_BACKUP = true;
+    private static final boolean DEBUG_BACKUP = false;
+    private static final boolean DEBUG_CONFIGURATION = false;
     private static final long MIN_TIME_BETWEEN_GCS = 5*1000;
     private static final Pattern PATTERN_SEMICOLON = Pattern.compile(";");
     private static final int SQLITE_MEM_RELEASED_EVENT_LOG_TAG = 75003;
@@ -1115,6 +1116,7 @@
         boolean stopped;
         boolean hideForNow;
         Configuration newConfig;
+        Configuration createdConfig;
         ActivityRecord nextIdle;
 
         ActivityInfo activityInfo;
@@ -1943,7 +1945,8 @@
                         (a.activity != null ? a.activity.mFinished : false));
                     if (a.activity != null && !a.activity.mFinished) {
                         try {
-                            am.activityIdle(a.token);
+                            am.activityIdle(a.token, a.createdConfig);
+                            a.createdConfig = null;
                         } catch (RemoteException ex) {
                         }
                     }
@@ -2388,6 +2391,8 @@
                 appContext.setOuterContext(activity);
                 CharSequence title = r.activityInfo.loadLabel(appContext.getPackageManager());
                 Configuration config = new Configuration(mConfiguration);
+                if (DEBUG_CONFIGURATION) Log.v(TAG, "Launching activity "
+                        + r.activityInfo.name + " with config " + config);
                 activity.attach(appContext, this, getInstrumentation(), r.token,
                         r.ident, app, r.intent, r.activityInfo, title, r.parent,
                         r.embeddedID, r.lastNonConfigurationInstance,
@@ -2461,6 +2466,7 @@
         Activity a = performLaunchActivity(r, customIntent);
 
         if (a != null) {
+            r.createdConfig = new Configuration(a.getResources().getConfiguration());
             handleResumeActivity(r.token, false, r.isForward);
 
             if (!r.activity.mFinished && r.startsNotResumed) {
@@ -2954,6 +2960,8 @@
             if (!r.activity.mFinished && !a.mStartedActivity
                     && r.activity.mDecor != null && !r.hideForNow) {
                 if (r.newConfig != null) {
+                    if (DEBUG_CONFIGURATION) Log.v(TAG, "Resuming activity "
+                            + r.activityInfo.name + " with newConfig " + r.newConfig);
                     performConfigurationChanged(r.activity, r.newConfig);
                     r.newConfig = null;
                 }
@@ -3195,6 +3203,8 @@
                     }
                 }
                 if (r.newConfig != null) {
+                    if (DEBUG_CONFIGURATION) Log.v(TAG, "Updating activity vis "
+                            + r.activityInfo.name + " with new config " + r.newConfig);
                     performConfigurationChanged(r.activity, r.newConfig);
                     r.newConfig = null;
                 }
@@ -3476,6 +3486,10 @@
 
         Configuration changedConfig = null;
 
+        if (DEBUG_CONFIGURATION) Log.v(TAG, "Relaunching activity "
+                + tmp.token + " with configChanges=0x"
+                + Integer.toHexString(configChanges));
+        
         // First: make sure we have the most recent configuration and most
         // recent version of the activity, or skip it if some previous call
         // had taken a more recent version.
@@ -3494,6 +3508,7 @@
             }
 
             if (tmp == null) {
+                if (DEBUG_CONFIGURATION) Log.v(TAG, "Abort, activity not relaunching!");
                 return;
             }
 
@@ -3503,13 +3518,16 @@
             }
         }
 
+        if (DEBUG_CONFIGURATION) Log.v(TAG, "Relaunching activity "
+                + tmp.token + ": changedConfig=" + changedConfig);
+        
         // If there was a pending configuration change, execute it first.
         if (changedConfig != null) {
             handleConfigurationChanged(changedConfig);
         }
 
         ActivityRecord r = mActivities.get(tmp.token);
-        if (localLOGV) Log.v(TAG, "Handling relaunch of " + r);
+        if (DEBUG_CONFIGURATION) Log.v(TAG, "Handling relaunch of " + r);
         if (r == null) {
             return;
         }
@@ -3595,6 +3613,8 @@
                         // the activity manager may, before then, decide the
                         // activity needs to be destroyed to handle its new
                         // configuration.
+                        if (DEBUG_CONFIGURATION) Log.v(TAG, "Setting activity "
+                                + ar.activityInfo.name + " newConfig=" + newConfig);
                         ar.newConfig = newConfig;
                     }
                 }
@@ -3652,6 +3672,8 @@
             }
         }
 
+        if (DEBUG_CONFIGURATION) Log.v(TAG, "Config callback " + cb
+                + ": shouldChangeConfig=" + shouldChangeConfig);
         if (shouldChangeConfig) {
             cb.onConfigurationChanged(config);
 
@@ -3679,6 +3701,9 @@
         ArrayList<ComponentCallbacks> callbacks
                 = new ArrayList<ComponentCallbacks>();
 
+        if (DEBUG_CONFIGURATION) Log.v(TAG, "Handle configuration changed: "
+                + config);
+        
         synchronized(mPackages) {
             if (mConfiguration == null) {
                 mConfiguration = new Configuration();
@@ -3729,6 +3754,9 @@
             return;
         }
 
+        if (DEBUG_CONFIGURATION) Log.v(TAG, "Handle activity config changed: "
+                + r.activityInfo.name);
+        
         performConfigurationChanged(r.activity, mConfiguration);
     }
 
diff --git a/core/java/android/app/ApplicationContext.java b/core/java/android/app/ApplicationContext.java
index 0582e34..8ba7c01 100644
--- a/core/java/android/app/ApplicationContext.java
+++ b/core/java/android/app/ApplicationContext.java
@@ -2760,6 +2760,7 @@
             if (mFile.exists()) {
                 if (!mFile.renameTo(mBackupFile)) {
                     Log.e(TAG, "Couldn't rename file " + mFile + " to backup file " + mBackupFile);
+                    return false;
                 }
             }
             
diff --git a/core/java/android/app/BackupAgent.java b/core/java/android/app/BackupAgent.java
index 0ac8a1e..b207998 100644
--- a/core/java/android/app/BackupAgent.java
+++ b/core/java/android/app/BackupAgent.java
@@ -36,6 +36,7 @@
  */
 public abstract class BackupAgent extends ContextWrapper {
     private static final String TAG = "BackupAgent";
+    private static final boolean DEBUG = false;
 
     public BackupAgent() {
         super(null);
@@ -116,7 +117,7 @@
                 ParcelFileDescriptor data,
                 ParcelFileDescriptor newState) throws RemoteException {
             // !!! TODO - real implementation; for now just invoke the callbacks directly
-            Log.v(TAG, "doBackup() invoked");
+            if (DEBUG) Log.v(TAG, "doBackup() invoked");
             BackupDataOutput output = new BackupDataOutput(data.getFileDescriptor());
             try {
                 BackupAgent.this.onBackup(oldState, output, newState);
@@ -132,7 +133,7 @@
         public void doRestore(ParcelFileDescriptor data, int appVersionCode,
                 ParcelFileDescriptor newState) throws RemoteException {
             // !!! TODO - real implementation; for now just invoke the callbacks directly
-            Log.v(TAG, "doRestore() invoked");
+            if (DEBUG) Log.v(TAG, "doRestore() invoked");
             BackupDataInput input = new BackupDataInput(data.getFileDescriptor());
             try {
                 BackupAgent.this.onRestore(input, appVersionCode, newState);
diff --git a/core/java/android/app/IActivityManager.java b/core/java/android/app/IActivityManager.java
index 7ad7561..9f505ac 100644
--- a/core/java/android/app/IActivityManager.java
+++ b/core/java/android/app/IActivityManager.java
@@ -109,7 +109,7 @@
     public void setPersistent(IBinder token, boolean isPersistent) throws RemoteException;
     public void attachApplication(IApplicationThread app) throws RemoteException;
     /* oneway */
-    public void activityIdle(IBinder token) throws RemoteException;
+    public void activityIdle(IBinder token, Configuration config) throws RemoteException;
     public void activityPaused(IBinder token, Bundle state) throws RemoteException;
     /* oneway */
     public void activityStopped(IBinder token,
diff --git a/core/java/android/app/ISearchManager.aidl b/core/java/android/app/ISearchManager.aidl
index ed5dd3d..a7d63789 100644
--- a/core/java/android/app/ISearchManager.aidl
+++ b/core/java/android/app/ISearchManager.aidl
@@ -41,7 +41,6 @@
             in ComponentName launchActivity,
             in Bundle appSearchData,
             ISearchManagerCallback searchManagerCallback,
-            boolean globalSearch,
             int ident);
 
     void stopSearch();
diff --git a/core/java/android/app/SearchDialog.java b/core/java/android/app/SearchDialog.java
index 1e9d5a1..605647a 100644
--- a/core/java/android/app/SearchDialog.java
+++ b/core/java/android/app/SearchDialog.java
@@ -127,8 +127,8 @@
     private ArrayList<ComponentName> mPreviousComponents;
 
     // For voice searching
-    private Intent mVoiceWebSearchIntent;
-    private Intent mVoiceAppSearchIntent;
+    private final Intent mVoiceWebSearchIntent;
+    private final Intent mVoiceAppSearchIntent;
 
     // support for AutoCompleteTextView suggestions display
     private SuggestionsAdapter mSuggestionsAdapter;
@@ -156,18 +156,25 @@
      */
     public SearchDialog(Context context) {
         super(context, com.android.internal.R.style.Theme_GlobalSearchBar);
+
+        // Save voice intent for later queries/launching
+        mVoiceWebSearchIntent = new Intent(RecognizerIntent.ACTION_WEB_SEARCH);
+        mVoiceWebSearchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+        mVoiceWebSearchIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
+                RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH);
+
+        mVoiceAppSearchIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
+        mVoiceAppSearchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
     }
 
     /**
-     * We create the search dialog just once, and it stays around (hidden)
-     * until activated by the user.
+     * Create the search dialog and any resources that are used for the
+     * entire lifetime of the dialog.
      */
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
-        setContentView(com.android.internal.R.layout.search_bar);
-
         Window theWindow = getWindow();
         WindowManager.LayoutParams lp = theWindow.getAttributes();
         lp.type = WindowManager.LayoutParams.TYPE_SEARCH_BAR;
@@ -180,6 +187,17 @@
         lp.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE;
         theWindow.setAttributes(lp);
 
+        // Touching outside of the search dialog will dismiss it
+        setCanceledOnTouchOutside(true);        
+    }
+
+    /**
+     * We recreate the dialog view each time it becomes visible so as to limit
+     * the scope of any problems with the contained resources.
+     */
+    private void createContentView() {
+        setContentView(com.android.internal.R.layout.search_bar);
+
         // get the view elements for local access
         SearchBar searchBar = (SearchBar) findViewById(com.android.internal.R.id.search_bar);
         searchBar.setSearchDialog(this);
@@ -211,19 +229,6 @@
         mBadgeLabel.setVisibility(View.GONE);
 
         // Additional adjustments to make Dialog work for Search
-
-        // Touching outside of the search dialog will dismiss it 
-        setCanceledOnTouchOutside(true);
-
-        // Save voice intent for later queries/launching
-        mVoiceWebSearchIntent = new Intent(RecognizerIntent.ACTION_WEB_SEARCH);
-        mVoiceWebSearchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-        mVoiceWebSearchIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
-                RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH);
-        
-        mVoiceAppSearchIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
-        mVoiceAppSearchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-
         mSearchAutoCompleteImeOptions = mSearchAutoComplete.getImeOptions();
     }
 
@@ -358,7 +363,9 @@
         // isDefaultSearchable() should always give the same result.
         mGlobalSearchMode = globalSearch || searchManager.isDefaultSearchable(mSearchable);
         mActivityContext = mSearchable.getActivityContext(getContext());
-        
+
+        createContentView();
+
         // show the dialog. this will call onStart().
         if (!isShowing()) {            
             // The Dialog uses a ContextThemeWrapper for the context; use this to change the
@@ -1805,7 +1812,18 @@
 
     @Override
     public void onBackPressed() {
+        // If the input method is covering the search dialog completely,
+        // e.g. in landscape mode with no hard keyboard, dismiss just the input method
+        InputMethodManager imm = (InputMethodManager)getContext()
+                .getSystemService(Context.INPUT_METHOD_SERVICE);
+        if (imm != null && imm.isFullscreenMode() &&
+                imm.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), 0)) {
+            return;
+        }
+        // Otherwise, go back to any previous source (e.g. back to QSB when
+        // pivoted into a source.
         if (!backToPreviousComponent()) {
+            // If no previous source, close search dialog
             cancel();
         }
     }
diff --git a/core/java/android/app/SearchManager.java b/core/java/android/app/SearchManager.java
index 9851750..3265ac4 100644
--- a/core/java/android/app/SearchManager.java
+++ b/core/java/android/app/SearchManager.java
@@ -1592,8 +1592,7 @@
 
     /**
      * Query parameter added to suggestion queries to limit the number of suggestions returned.
-     *
-     * @hide Pending API council approval
+     * This limit is only advisory and suggestion providers may chose to ignore it.
      */
     public final static String SUGGEST_PARAMETER_LIMIT = "limit";
 
@@ -1786,17 +1785,12 @@
      * context here, in order to improve quality or specificity of its own
      * searches.  This data will be returned with SEARCH intent(s).  Null if
      * no extra data is required.
-     * @param globalSearch If false, this will only launch the search that has been specifically
-     * defined by the application (which is usually defined as a local search).  If no default
-     * search is defined in the current application or activity, no search will be launched.
-     * If true, this will always launch a platform-global (e.g. web-based) search instead.
      *
      * @see #startSearch
      */
     public void triggerSearch(String query,
                               ComponentName launchActivity,
-                              Bundle appSearchData,
-                              boolean globalSearch) {
+                              Bundle appSearchData) {
         if (mIdent == 0) throw new IllegalArgumentException(
                 "Called from outside of an Activity context");
         if (!mAssociatedPackage.equals(launchActivity.getPackageName())) {
@@ -1809,7 +1803,7 @@
         }
         try {
             mService.triggerSearch(query, launchActivity, appSearchData, mSearchManagerCallback,
-                    globalSearch, mIdent);
+                    mIdent);
         } catch (RemoteException ex) {
             Log.e(TAG, "triggerSearch() failed.", ex);
         }
diff --git a/core/java/android/app/Service.java b/core/java/android/app/Service.java
index a32ad85..30e1712 100644
--- a/core/java/android/app/Service.java
+++ b/core/java/android/app/Service.java
@@ -158,9 +158,9 @@
  * happens, the system will later try to restart the service.  An important
  * consequence of this is that if you implement {@link #onStartCommand onStartCommand()}
  * to schedule work to be done asynchronously or in another thread, then you
- * may want to write information about that work into persistent storage
- * during the onStartCommand() call so that it does not get lost if the service later
- * gets killed.
+ * may want to use {@link #START_FLAG_REDELIVERY} to have the system
+ * re-deliver an Intent for you so that it does not get lost if your service
+ * is killed while processing it.
  * 
  * <p>Other application components running in the same process as the service
  * (such as an {@link android.app.Activity}) can, of course, increase the
@@ -230,7 +230,10 @@
      * {@link #onStartCommand}), and there are no new start intents to
      * deliver to it, then take the service out of the started state and
      * don't recreate until a future explicit call to
-     * {@link Context#startService Context.startService(Intent)}.
+     * {@link Context#startService Context.startService(Intent)}.  The
+     * service will not receive a {@link #onStartCommand(Intent, int, int)}
+     * call with a null Intent because it will not be re-started if there
+     * are no pending Intents to deliver.
      * 
      * <p>This mode makes sense for things that want to do some work as a
      * result of being started, but can be stopped when under memory pressure
@@ -252,7 +255,11 @@
      * and the last delivered Intent re-delivered to it again via
      * {@link #onStartCommand}.  This Intent will remain scheduled for
      * redelivery until the service calls {@link #stopSelf(int)} with the
-     * start ID provided to {@link #onStartCommand}.
+     * start ID provided to {@link #onStartCommand}.  The
+     * service will not receive a {@link #onStartCommand(Intent, int, int)}
+     * call with a null Intent because it will will only be re-started if
+     * it is not finished processing all Intents sent to it (and any such
+     * pending events will be delivered at the point of restart).
      */
     public static final int START_REDELIVER_INTENT = 3;
     
@@ -402,6 +409,13 @@
      * safely avoid stopping if there is a start request from a client that you 
      * haven't yet seen in {@link #onStart}. 
      * 
+     * <p><em>Be careful about ordering of your calls to this function.</em>.
+     * If you call this function with the most-recently received ID before
+     * you have called it for previously received IDs, the service will be
+     * immediately stopped anyway.  If you may end up processing IDs out
+     * of order (such as by dispatching them on separate threads), then you
+     * are responsible for stopping them in the same order you received them.</p>
+     * 
      * @param startId The most recent start identifier received in {@link 
      *                #onStart}.
      * @return Returns true if the startId matches the last start request
@@ -423,7 +437,15 @@
     
     /**
      * @deprecated This is a now a no-op, use
-     * {@link #startForeground(int, Notification)} instead.
+     * {@link #startForeground(int, Notification)} instead.  This method
+     * has been turned into a no-op rather than simply being deprecated
+     * because analysis of numerous poorly behaving devices has shown that
+     * increasingly often the trouble is being caused in part by applications
+     * that are abusing it.  Thus, given a choice between introducing
+     * problems in existing applications using this API (by allowing them to
+     * be killed when they would like to avoid it), vs allowing the performance
+     * of the entire system to be decreased, this method was deemed less
+     * important.
      */
     @Deprecated
     public final void setForeground(boolean isForeground) {
diff --git a/core/java/android/app/WallpaperManager.java b/core/java/android/app/WallpaperManager.java
index 38cac87..69c87ee 100644
--- a/core/java/android/app/WallpaperManager.java
+++ b/core/java/android/app/WallpaperManager.java
@@ -44,6 +44,12 @@
 import java.io.IOException;
 import java.io.InputStream;
 
+/**
+ * Provides access to the system wallpaper. With WallpaperManager, you can
+ * get the current wallpaper, get the desired dimensions for the wallpaper, set
+ * the wallpaper, and more. Get an instance of WallpaperManager with
+ * {@link #getInstance(android.content.Context) getInstance()}. 
+ */
 public class WallpaperManager {
     private static String TAG = "WallpaperManager";
     private static boolean DEBUG = false;
@@ -310,8 +316,11 @@
     }
     
     /**
-     * Like {@link #peekDrawable}, but always returns a valid Drawable.  If
+     * Retrieve the current system wallpaper; if
      * no wallpaper is set, the system default wallpaper is returned.
+     * This is returned as an
+     * abstract Drawable that you can install in a View to display whatever
+     * wallpaper the user has currently set. 
      *
      * @return Returns a Drawable object that will draw the wallpaper.
      */
@@ -326,10 +335,10 @@
     }
 
     /**
-     * Retrieve the current system wallpaper.  This is returned as an
+     * Retrieve the current system wallpaper; if there is no wallpaper set,
+     * a null pointer is returned. This is returned as an
      * abstract Drawable that you can install in a View to display whatever
-     * wallpaper the user has currently set.  If there is no wallpaper set,
-     * a null pointer is returned.
+     * wallpaper the user has currently set.  
      *
      * @return Returns a Drawable object that will draw the wallpaper or a
      * null pointer if these is none.
@@ -345,8 +354,15 @@
     }
 
     /**
-     * Like {@link #peekFastDrawable}, but always returns a valid Drawable.  If
-     * no wallpaper is set, the system default wallpaper is returned.
+     * Like {@link #getDrawable()}, but the returned Drawable has a number
+     * of limitations to reduce its overhead as much as possible. It will
+     * never scale the wallpaper (only centering it if the requested bounds
+     * do match the bitmap bounds, which should not be typical), doesn't
+     * allow setting an alpha, color filter, or other attributes, etc.  The
+     * bounds of the returned drawable will be initialized to the same bounds
+     * as the wallpaper, so normally you will not need to touch it.  The
+     * drawable also assumes that it will be used in a context running in
+     * the same density as the screen (not in density compatibility mode).
      *
      * @return Returns a Drawable object that will draw the wallpaper.
      */
@@ -360,15 +376,8 @@
     }
 
     /**
-     * Like {@link #peekDrawable()}, but the returned Drawable has a number
-     * of limitations to reduce its overhead as much as possible: it will
-     * never scale the wallpaper (only centering it if the requested bounds
-     * do match the bitmap bounds, which should not be typical), doesn't
-     * allow setting an alpha, color filter, or other attributes, etc.  The
-     * bounds of the returned drawable will be initialized to the same bounds
-     * as the wallpaper, so normally you will not need to touch it.  The
-     * drawable also assumes that it will be used in a context running in
-     * the same density as the screen (not in density compatibility mode).
+     * Like {@link #getFastDrawable()}, but if there is no wallpaper set,
+     * a null pointer is returned.
      *
      * @return Returns an optimized Drawable object that will draw the
      * wallpaper or a null pointer if these is none.
@@ -566,7 +575,7 @@
      * make sense when the wallpaper is larger than the screen.
      * 
      * @param windowToken The window who these offsets should be associated
-     * with, as returned by {@link android.view.View#getWindowVisibility()
+     * with, as returned by {@link android.view.View#getWindowToken()
      * View.getWindowToken()}.
      * @param xOffset The offset olong the X dimension, from 0 to 1.
      * @param yOffset The offset along the Y dimension, from 0 to 1.
@@ -589,7 +598,7 @@
      * to scroll from whatever its last offsets were.
      * 
      * @param windowToken The window who these offsets should be associated
-     * with, as returned by {@link android.view.View#getWindowVisibility()
+     * with, as returned by {@link android.view.View#getWindowToken()
      * View.getWindowToken()}.
      */
     public void clearWallpaperOffsets(IBinder windowToken) {
diff --git a/core/java/android/backup/AbsoluteFileBackupHelper.java b/core/java/android/backup/AbsoluteFileBackupHelper.java
index ab24675..1dbccc9 100644
--- a/core/java/android/backup/AbsoluteFileBackupHelper.java
+++ b/core/java/android/backup/AbsoluteFileBackupHelper.java
@@ -31,6 +31,7 @@
  */
 public class AbsoluteFileBackupHelper extends FileBackupHelperBase implements BackupHelper {
     private static final String TAG = "AbsoluteFileBackupHelper";
+    private static final boolean DEBUG = false;
 
     Context mContext;
     String[] mFiles;
@@ -54,8 +55,7 @@
     }
 
     public void restoreEntity(BackupDataInputStream data) {
-        // TODO: turn this off before ship
-        Log.d(TAG, "got entity '" + data.getKey() + "' size=" + data.size());
+        if (DEBUG) Log.d(TAG, "got entity '" + data.getKey() + "' size=" + data.size());
         String key = data.getKey();
         if (isKeyInList(key, mFiles)) {
             File f = new File(key);
diff --git a/core/java/android/backup/FileBackupHelper.java b/core/java/android/backup/FileBackupHelper.java
index 4058497..dacfc8f 100644
--- a/core/java/android/backup/FileBackupHelper.java
+++ b/core/java/android/backup/FileBackupHelper.java
@@ -26,6 +26,7 @@
 /** @hide */
 public class FileBackupHelper extends FileBackupHelperBase implements BackupHelper {
     private static final String TAG = "FileBackupHelper";
+    private static final boolean DEBUG = false;
 
     Context mContext;
     File mFilesDir;
@@ -60,8 +61,7 @@
     }
 
     public void restoreEntity(BackupDataInputStream data) {
-        // TODO: turn this off before ship
-        Log.d(TAG, "got entity '" + data.getKey() + "' size=" + data.size());
+        if (DEBUG) Log.d(TAG, "got entity '" + data.getKey() + "' size=" + data.size());
         String key = data.getKey();
         if (isKeyInList(key, mFiles)) {
             File f = new File(mFilesDir, key);
diff --git a/core/java/android/backup/SharedPreferencesBackupHelper.java b/core/java/android/backup/SharedPreferencesBackupHelper.java
index 4a7b399..6a0bc96 100644
--- a/core/java/android/backup/SharedPreferencesBackupHelper.java
+++ b/core/java/android/backup/SharedPreferencesBackupHelper.java
@@ -26,6 +26,7 @@
 /** @hide */
 public class SharedPreferencesBackupHelper extends FileBackupHelperBase implements BackupHelper {
     private static final String TAG = "SharedPreferencesBackupHelper";
+    private static final boolean DEBUG = false;
 
     private Context mContext;
     private String[] mPrefGroups;
@@ -56,9 +57,9 @@
     public void restoreEntity(BackupDataInputStream data) {
         Context context = mContext;
         
-        // TODO: turn this off before ship
-        Log.d(TAG, "got entity '" + data.getKey() + "' size=" + data.size());
         String key = data.getKey();
+        if (DEBUG) Log.d(TAG, "got entity '" + key + "' size=" + data.size());
+
         if (isKeyInList(key, mPrefGroups)) {
             File f = context.getSharedPrefsFile(key).getAbsoluteFile();
             writeFile(f, data);
diff --git a/core/java/android/bluetooth/BluetoothA2dp.java b/core/java/android/bluetooth/BluetoothA2dp.java
index 2e9612a..e8a69d8 100644
--- a/core/java/android/bluetooth/BluetoothA2dp.java
+++ b/core/java/android/bluetooth/BluetoothA2dp.java
@@ -93,10 +93,15 @@
         mContext = c;
 
         IBinder b = ServiceManager.getService(BluetoothA2dpService.BLUETOOTH_A2DP_SERVICE);
-        if (b == null) {
-            throw new RuntimeException("Bluetooth A2DP service not available!");
+        if (b != null) {
+            mService = IBluetoothA2dp.Stub.asInterface(b);
+        } else {
+            Log.w(TAG, "Bluetooth A2DP service not available!");
+
+            // Instead of throwing an exception which prevents people from going
+            // into Wireless settings in the emulator. Let it crash later when it is actually used.
+            mService = null;
         }
-        mService = IBluetoothA2dp.Stub.asInterface(b);
     }
 
     /** Initiate a connection to an A2DP sink.
@@ -133,6 +138,38 @@
         }
     }
 
+    /** Initiate suspend from an A2DP sink.
+     *  Listen for SINK_STATE_CHANGED_ACTION to find out when
+     *  suspend is completed.
+     *  @param device Remote BT device.
+     *  @return false on immediate error, true otherwise
+     *  @hide
+     */
+    public boolean suspendSink(BluetoothDevice device) {
+        try {
+            return mService.suspendSink(device);
+        } catch (RemoteException e) {
+            Log.e(TAG, "", e);
+            return false;
+        }
+    }
+
+    /** Initiate resume from an suspended A2DP sink.
+     *  Listen for SINK_STATE_CHANGED_ACTION to find out when
+     *  resume is completed.
+     *  @param device Remote BT device.
+     *  @return false on immediate error, true otherwise
+     *  @hide
+     */
+    public boolean resumeSink(BluetoothDevice device) {
+        try {
+            return mService.resumeSink(device);
+        } catch (RemoteException e) {
+            Log.e(TAG, "", e);
+            return false;
+        }
+    }
+
     /** Check if a specified A2DP sink is connected.
      *  @param device Remote BT device.
      *  @return True if connected (or playing), false otherwise and on error.
diff --git a/core/java/android/bluetooth/HeadsetBase.java b/core/java/android/bluetooth/HeadsetBase.java
index 29cf41d..e2935c9 100644
--- a/core/java/android/bluetooth/HeadsetBase.java
+++ b/core/java/android/bluetooth/HeadsetBase.java
@@ -211,9 +211,10 @@
      */
 
     public boolean connectAsync() {
-        return connectAsyncNative();
+        int ret = connectAsyncNative();
+        return (ret == 0) ? true : false;
     }
-    private native boolean connectAsyncNative();
+    private native int connectAsyncNative();
 
     public int getRemainingAsyncConnectWaitingTimeMs() {
         return mTimeoutRemainingMs;
diff --git a/core/java/android/bluetooth/IBluetoothA2dp.aidl b/core/java/android/bluetooth/IBluetoothA2dp.aidl
index 2df7f23..002cf4e 100644
--- a/core/java/android/bluetooth/IBluetoothA2dp.aidl
+++ b/core/java/android/bluetooth/IBluetoothA2dp.aidl
@@ -26,6 +26,8 @@
 interface IBluetoothA2dp {
     boolean connectSink(in BluetoothDevice device);
     boolean disconnectSink(in BluetoothDevice device);
+    boolean suspendSink(in BluetoothDevice device);
+    boolean resumeSink(in BluetoothDevice device);
     BluetoothDevice[] getConnectedSinks();  // change to Set<> once AIDL supports
     int getSinkState(in BluetoothDevice device);
     boolean setSinkPriority(in BluetoothDevice device, int priority);
diff --git a/core/java/android/content/AbstractSyncableContentProvider.java b/core/java/android/content/AbstractSyncableContentProvider.java
index 808f30c..fc3acc5 100644
--- a/core/java/android/content/AbstractSyncableContentProvider.java
+++ b/core/java/android/content/AbstractSyncableContentProvider.java
@@ -170,7 +170,7 @@
                         // AbstractGDataSyncAdapter, which will put acore into a crash loop
                         ArrayList<Account> gaiaAccounts = new ArrayList<Account>();
                         for (Account acct: accounts) {
-                            if (acct.type.equals("com.google.GAIA")) {
+                            if (acct.type.equals("com.google")) {
                                 gaiaAccounts.add(acct);
                             }
                         }
diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java
index 307899a..c9edc41c 100644
--- a/core/java/android/content/ContentResolver.java
+++ b/core/java/android/content/ContentResolver.java
@@ -903,7 +903,7 @@
         if (extras != null) {
             String accountName = extras.getString(SYNC_EXTRAS_ACCOUNT);
             if (!TextUtils.isEmpty(accountName)) {
-                account = new Account(accountName, "com.google.GAIA");
+                account = new Account(accountName, "com.google");
             }
             extras.remove(SYNC_EXTRAS_ACCOUNT);
         }
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index 5fb5768..b785dbf 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -1330,7 +1330,7 @@
     public static final String ACTION_UID_REMOVED = "android.intent.action.UID_REMOVED";
     /**
      * Broadcast Action:  The current system wallpaper has changed.  See
-     * {@link Context#getWallpaper} for retrieving the new wallpaper.
+     * {@link android.app.WallpaperManager} for retrieving the new wallpaper.
      */
     @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
     public static final String ACTION_WALLPAPER_CHANGED = "android.intent.action.WALLPAPER_CHANGED";
diff --git a/core/java/android/content/SyncManager.java b/core/java/android/content/SyncManager.java
index 6181a07..5376f78 100644
--- a/core/java/android/content/SyncManager.java
+++ b/core/java/android/content/SyncManager.java
@@ -73,6 +73,7 @@
 import java.util.PriorityQueue;
 import java.util.Random;
 import java.util.Collection;
+import java.util.concurrent.CountDownLatch;
 
 /**
  * @hide
@@ -200,11 +201,7 @@
 
     private BroadcastReceiver mBootCompletedReceiver = new BroadcastReceiver() {
         public void onReceive(Context context, Intent intent) {
-            if (!mFactoryTest) {
-                mBootCompleted = true;
-                AccountManager.get(mContext).addOnAccountsUpdatedListener(SyncManager.this,
-                        mSyncHandler, true /* updateImmediately */);
-            }
+            mSyncHandler.onBootCompleted();
         }
     };
 
@@ -357,8 +354,10 @@
         IntentFilter intentFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
         context.registerReceiver(mConnectivityIntentReceiver, intentFilter);
 
-        intentFilter = new IntentFilter(Intent.ACTION_BOOT_COMPLETED);
-        context.registerReceiver(mBootCompletedReceiver, intentFilter);
+        if (!factoryTest) {
+            intentFilter = new IntentFilter(Intent.ACTION_BOOT_COMPLETED);
+            context.registerReceiver(mBootCompletedReceiver, intentFilter);
+        }
 
         intentFilter = new IntentFilter(ConnectivityManager.ACTION_BACKGROUND_DATA_SETTING_CHANGED);
         context.registerReceiver(mBackgroundDataSettingChanged, intentFilter);
@@ -398,6 +397,13 @@
                 sendCheckAlarmsMessage();
             }
         });
+
+        if (!factoryTest) {
+            AccountManager.get(mContext).addOnAccountsUpdatedListener(SyncManager.this,
+                mSyncHandler, false /* updateImmediately */);
+            // do this synchronously to ensure we have the accounts before this call returns
+            onAccountsUpdated(AccountManager.get(mContext).getAccounts());
+        }
     }
 
     private synchronized void initializeSyncPoll() {
@@ -580,10 +586,8 @@
             Bundle extras, long delay, boolean onlyThoseWithUnkownSyncableState) {
         boolean isLoggable = Log.isLoggable(TAG, Log.VERBOSE);
 
-        if (!mBootCompleted) {
-            if (isLoggable) {
-                Log.v(TAG, "suppressing scheduleSync() since boot hasn't completed");
-            }
+        if (mAccounts == null) {
+            Log.e(TAG, "scheduleSync: the accounts aren't known yet, this should never happen");
             return;
         }
 
@@ -595,10 +599,9 @@
             return;
         }
 
-        final boolean backgroundDataUsageAllowed =
+        final boolean backgroundDataUsageAllowed = !mBootCompleted ||
                 getConnectivityManager().getBackgroundDataSetting();
 
-        if (mAccounts == null) setStatusText("The accounts aren't known yet.");
         if (!mDataConnectionIsConnected) setStatusText("No data connection");
         if (mStorageIsLow) setStatusText("Memory low");
 
@@ -1453,7 +1456,29 @@
         // used to track if we have installed the error notification so that we don't reinstall
         // it if sync is still failing
         private boolean mErrorNotificationInstalled = false;
+        private volatile CountDownLatch mReadyToRunLatch = new CountDownLatch(1);
 
+        public void onBootCompleted() {
+            mBootCompleted = true;
+            if (mReadyToRunLatch != null) {
+                mReadyToRunLatch.countDown();
+            }
+        }
+
+        private void waitUntilReadyToRun() {
+            CountDownLatch latch = mReadyToRunLatch;
+            if (latch != null) {
+                while (true) {
+                    try {
+                        latch.await();
+                        mReadyToRunLatch = null;
+                        return;
+                    } catch (InterruptedException e) {
+                        Thread.currentThread().interrupt();
+                    }
+                }
+            }
+        }
         /**
          * Used to keep track of whether a sync notification is active and who it is for.
          */
@@ -1491,11 +1516,8 @@
         }
 
         public void handleMessage(Message msg) {
-            handleSyncHandlerMessage(msg);
-        }
-
-        private void handleSyncHandlerMessage(Message msg) {
             try {
+                waitUntilReadyToRun();
                 switch (msg.what) {
                     case SyncHandler.MESSAGE_SYNC_FINISHED:
                         if (Log.isLoggable(TAG, Log.VERBOSE)) {
diff --git a/core/java/android/content/SyncStorageEngine.java b/core/java/android/content/SyncStorageEngine.java
index fbdd5ae..fb2608a 100644
--- a/core/java/android/content/SyncStorageEngine.java
+++ b/core/java/android/content/SyncStorageEngine.java
@@ -103,7 +103,7 @@
     public static final String MESG_SUCCESS = "success";
     public static final String MESG_CANCELED = "canceled";
 
-    public static final int MAX_HISTORY = 15;
+    public static final int MAX_HISTORY = 100;
 
     private static final int MSG_WRITE_STATUS = 1;
     private static final long WRITE_STATUS_DELAY = 1000*60*10; // 10 minutes
@@ -1104,7 +1104,7 @@
                                 String accountType = parser.getAttributeValue(
                                         null, "type");
                                 if (accountType == null) {
-                                    accountType = "com.google.GAIA";
+                                    accountType = "com.google";
                                 }
                                 String authorityName = parser.getAttributeValue(
                                         null, "authority");
@@ -1272,7 +1272,7 @@
                 String accountType = hasType
                         ? c.getString(c.getColumnIndex("account_type")) : null;
                 if (accountType == null) {
-                    accountType = "com.google.GAIA";
+                    accountType = "com.google";
                 }
                 String authorityName = c.getString(c.getColumnIndex("authority"));
                 AuthorityInfo authority = this.getOrCreateAuthorityLocked(
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index 27c65f0..83e63b9 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -195,7 +195,15 @@
         if ((flags&PackageManager.GET_ACTIVITIES) != 0) {
             int N = p.activities.size();
             if (N > 0) {
-                pi.activities = new ActivityInfo[N];
+                if ((flags&PackageManager.GET_DISABLED_COMPONENTS) != 0) {
+                    pi.activities = new ActivityInfo[N];
+                } else {
+                    int num = 0;
+                    for (int i=0; i<N; i++) {
+                        if (p.activities.get(i).info.enabled) num++;
+                    }
+                    pi.activities = new ActivityInfo[num];
+                }
                 for (int i=0; i<N; i++) {
                     final Activity activity = p.activities.get(i);
                     if (activity.info.enabled
@@ -208,7 +216,15 @@
         if ((flags&PackageManager.GET_RECEIVERS) != 0) {
             int N = p.receivers.size();
             if (N > 0) {
-                pi.receivers = new ActivityInfo[N];
+                if ((flags&PackageManager.GET_DISABLED_COMPONENTS) != 0) {
+                    pi.receivers = new ActivityInfo[N];
+                } else {
+                    int num = 0;
+                    for (int i=0; i<N; i++) {
+                        if (p.receivers.get(i).info.enabled) num++;
+                    }
+                    pi.receivers = new ActivityInfo[num];
+                }
                 for (int i=0; i<N; i++) {
                     final Activity activity = p.receivers.get(i);
                     if (activity.info.enabled
@@ -221,7 +237,15 @@
         if ((flags&PackageManager.GET_SERVICES) != 0) {
             int N = p.services.size();
             if (N > 0) {
-                pi.services = new ServiceInfo[N];
+                if ((flags&PackageManager.GET_DISABLED_COMPONENTS) != 0) {
+                    pi.services = new ServiceInfo[N];
+                } else {
+                    int num = 0;
+                    for (int i=0; i<N; i++) {
+                        if (p.services.get(i).info.enabled) num++;
+                    }
+                    pi.services = new ServiceInfo[num];
+                }
                 for (int i=0; i<N; i++) {
                     final Service service = p.services.get(i);
                     if (service.info.enabled
@@ -234,7 +258,15 @@
         if ((flags&PackageManager.GET_PROVIDERS) != 0) {
             int N = p.providers.size();
             if (N > 0) {
-                pi.providers = new ProviderInfo[N];
+                if ((flags&PackageManager.GET_DISABLED_COMPONENTS) != 0) {
+                    pi.providers = new ProviderInfo[N];
+                } else {
+                    int num = 0;
+                    for (int i=0; i<N; i++) {
+                        if (p.providers.get(i).info.enabled) num++;
+                    }
+                    pi.providers = new ProviderInfo[num];
+                }
                 for (int i=0; i<N; i++) {
                     final Provider provider = p.providers.get(i);
                     if (provider.info.enabled
@@ -954,6 +986,7 @@
         }
 
         final int NP = PackageParser.NEW_PERMISSIONS.length;
+        StringBuilder implicitPerms = null;
         for (int ip=0; ip<NP; ip++) {
             final PackageParser.NewPermissionInfo npi
                     = PackageParser.NEW_PERMISSIONS[ip];
@@ -961,11 +994,20 @@
                 break;
             }
             if (!pkg.requestedPermissions.contains(npi.name)) {
-                Log.i(TAG, "Impliciting adding " + npi.name + " to old pkg "
-                        + pkg.packageName);
+                if (implicitPerms == null) {
+                    implicitPerms = new StringBuilder(128);
+                    implicitPerms.append(pkg.packageName);
+                    implicitPerms.append(": compat added ");
+                } else {
+                    implicitPerms.append(' ');
+                }
+                implicitPerms.append(npi.name);
                 pkg.requestedPermissions.add(npi.name);
             }
         }
+        if (implicitPerms != null) {
+            Log.i(TAG, implicitPerms.toString());
+        }
         
         if (supportsSmallScreens < 0 || (supportsSmallScreens > 0
                 && pkg.applicationInfo.targetSdkVersion
@@ -1303,8 +1345,10 @@
                     com.android.internal.R.styleable.AndroidManifestApplication_backupAgent);
             if (backupAgent != null) {
                 ai.backupAgentName = buildClassName(pkgName, backupAgent, outError);
-                Log.v(TAG, "android:backupAgent = " + ai.backupAgentName
-                        + " from " + pkgName + "+" + backupAgent);
+                if (false) {
+                    Log.v(TAG, "android:backupAgent = " + ai.backupAgentName
+                            + " from " + pkgName + "+" + backupAgent);
+                }
 
                 if (sa.getBoolean(
                         com.android.internal.R.styleable.AndroidManifestApplication_killAfterRestore,
@@ -1494,8 +1538,9 @@
 
             } else {
                 if (!RIGID_PARSER) {
-                    Log.w(TAG, "Problem in package " + mArchiveSourcePath + ":");
-                    Log.w(TAG, "Unknown element under <application>: " + tagName);
+                    Log.w(TAG, "Unknown element under <application>: " + tagName
+                            + " at " + mArchiveSourcePath + " "
+                            + parser.getPositionDescription());
                     XmlUtils.skipCurrentTag(parser);
                     continue;
                 } else {
@@ -1540,25 +1585,6 @@
         return true;
     }
 
-    private boolean parseComponentInfo(Package owner, int flags,
-            ComponentInfo outInfo, String[] outError, String tag, TypedArray sa,
-            int nameRes, int labelRes, int iconRes, int processRes,
-            int enabledRes) {
-        if (!parsePackageItemInfo(owner, outInfo, outError, tag, sa,
-                nameRes, labelRes, iconRes)) {
-            return false;
-        }
-
-        if (processRes != 0) {
-            outInfo.processName = buildProcessName(owner.applicationInfo.packageName,
-                    owner.applicationInfo.processName, sa.getNonResourceString(processRes),
-                    flags, mSeparateProcesses, outError);
-        }
-        outInfo.enabled = sa.getBoolean(enabledRes, true);
-
-        return outError[0] == null;
-    }
-    
     private Activity parseActivity(Package owner, Resources res,
             XmlPullParser parser, AttributeSet attrs, int flags, String[] outError,
             boolean receiver) throws XmlPullParserException, IOException {
@@ -1717,9 +1743,13 @@
                 if (!RIGID_PARSER) {
                     Log.w(TAG, "Problem in package " + mArchiveSourcePath + ":");
                     if (receiver) {
-                        Log.w(TAG, "Unknown element under <receiver>: " + parser.getName());
+                        Log.w(TAG, "Unknown element under <receiver>: " + parser.getName()
+                                + " at " + mArchiveSourcePath + " "
+                                + parser.getPositionDescription());
                     } else {
-                        Log.w(TAG, "Unknown element under <activity>: " + parser.getName());
+                        Log.w(TAG, "Unknown element under <activity>: " + parser.getName()
+                                + " at " + mArchiveSourcePath + " "
+                                + parser.getPositionDescription());
                     }
                     XmlUtils.skipCurrentTag(parser);
                     continue;
@@ -1859,8 +1889,9 @@
                 }
             } else {
                 if (!RIGID_PARSER) {
-                    Log.w(TAG, "Problem in package " + mArchiveSourcePath + ":");
-                    Log.w(TAG, "Unknown element under <activity-alias>: " + parser.getName());
+                    Log.w(TAG, "Unknown element under <activity-alias>: " + parser.getName()
+                            + " at " + mArchiveSourcePath + " "
+                            + parser.getPositionDescription());
                     XmlUtils.skipCurrentTag(parser);
                     continue;
                 }
@@ -2023,8 +2054,9 @@
                     outInfo.info.grantUriPermissions = true;
                 } else {
                     if (!RIGID_PARSER) {
-                        Log.w(TAG, "Problem in package " + mArchiveSourcePath + ":");
-                        Log.w(TAG, "No path, pathPrefix, or pathPattern for <path-permission>");
+                        Log.w(TAG, "Unknown element under <path-permission>: "
+                                + parser.getName() + " at " + mArchiveSourcePath + " "
+                                + parser.getPositionDescription());
                         XmlUtils.skipCurrentTag(parser);
                         continue;
                     }
@@ -2064,8 +2096,9 @@
 
                 if (!havePerm) {
                     if (!RIGID_PARSER) {
-                        Log.w(TAG, "Problem in package " + mArchiveSourcePath + ":");
-                        Log.w(TAG, "No readPermission or writePermssion for <path-permission>");
+                        Log.w(TAG, "No readPermission or writePermssion for <path-permission>: "
+                                + parser.getName() + " at " + mArchiveSourcePath + " "
+                                + parser.getPositionDescription());
                         XmlUtils.skipCurrentTag(parser);
                         continue;
                     }
@@ -2109,8 +2142,9 @@
                     }
                 } else {
                     if (!RIGID_PARSER) {
-                        Log.w(TAG, "Problem in package " + mArchiveSourcePath + ":");
-                        Log.w(TAG, "No path, pathPrefix, or pathPattern for <path-permission>");
+                        Log.w(TAG, "No path, pathPrefix, or pathPattern for <path-permission>: "
+                                + parser.getName() + " at " + mArchiveSourcePath + " "
+                                + parser.getPositionDescription());
                         XmlUtils.skipCurrentTag(parser);
                         continue;
                     }
@@ -2121,9 +2155,9 @@
 
             } else {
                 if (!RIGID_PARSER) {
-                    Log.w(TAG, "Problem in package " + mArchiveSourcePath + ":");
                     Log.w(TAG, "Unknown element under <provider>: "
-                            + parser.getName());
+                            + parser.getName() + " at " + mArchiveSourcePath + " "
+                            + parser.getPositionDescription());
                     XmlUtils.skipCurrentTag(parser);
                     continue;
                 }
@@ -2201,9 +2235,9 @@
                 }
             } else {
                 if (!RIGID_PARSER) {
-                    Log.w(TAG, "Problem in package " + mArchiveSourcePath + ":");
                     Log.w(TAG, "Unknown element under <service>: "
-                            + parser.getName());
+                            + parser.getName() + " at " + mArchiveSourcePath + " "
+                            + parser.getPositionDescription());
                     XmlUtils.skipCurrentTag(parser);
                     continue;
                 }
@@ -2240,9 +2274,9 @@
                 }
             } else {
                 if (!RIGID_PARSER) {
-                    Log.w(TAG, "Problem in package " + mArchiveSourcePath + ":");
                     Log.w(TAG, "Unknown element under " + tag + ": "
-                            + parser.getName());
+                            + parser.getName() + " at " + mArchiveSourcePath + " "
+                            + parser.getPositionDescription());
                     XmlUtils.skipCurrentTag(parser);
                     continue;
                 }
@@ -2298,8 +2332,9 @@
                     data.putFloat(name, v.getFloat());
                 } else {
                     if (!RIGID_PARSER) {
-                        Log.w(TAG, "Problem in package " + mArchiveSourcePath + ":");
-                        Log.w(TAG, "<meta-data> only supports string, integer, float, color, boolean, and resource reference types");
+                        Log.w(TAG, "<meta-data> only supports string, integer, float, color, boolean, and resource reference types: "
+                                + parser.getName() + " at " + mArchiveSourcePath + " "
+                                + parser.getPositionDescription());
                     } else {
                         outError[0] = "<meta-data> only supports string, integer, float, color, boolean, and resource reference types";
                         data = null;
@@ -2333,6 +2368,7 @@
                 com.android.internal.R.styleable.AndroidManifestIntentFilter_priority, 0);
         if (priority > 0 && isActivity && (flags&PARSE_IS_SYSTEM) == 0) {
             Log.w(TAG, "Activity with priority > 0, forcing to 0 at "
+                    + mArchiveSourcePath + " "
                     + parser.getPositionDescription());
             priority = 0;
         }
@@ -2430,8 +2466,9 @@
                 sa.recycle();
                 XmlUtils.skipCurrentTag(parser);
             } else if (!RIGID_PARSER) {
-                Log.w(TAG, "Problem in package " + mArchiveSourcePath + ":");
-                Log.w(TAG, "Unknown element under <intent-filter>: " + parser.getName());
+                Log.w(TAG, "Unknown element under <intent-filter>: "
+                        + parser.getName() + " at " + mArchiveSourcePath + " "
+                        + parser.getPositionDescription());
                 XmlUtils.skipCurrentTag(parser);
             } else {
                 outError[0] = "Bad element under <intent-filter>: " + parser.getName();
diff --git a/core/java/android/content/pm/RegisteredServicesCacheListener.java b/core/java/android/content/pm/RegisteredServicesCacheListener.java
index 8cf15e4..c92c86e 100644
--- a/core/java/android/content/pm/RegisteredServicesCacheListener.java
+++ b/core/java/android/content/pm/RegisteredServicesCacheListener.java
@@ -2,6 +2,7 @@
 
 /**
  * Listener for changes to the set of registered services managed by a RegisteredServicesCache.
+ * @hide
  */
 public interface RegisteredServicesCacheListener {
     /**
diff --git a/core/java/android/database/sqlite/SQLiteDatabase.java b/core/java/android/database/sqlite/SQLiteDatabase.java
index e425f3a..f621483 100644
--- a/core/java/android/database/sqlite/SQLiteDatabase.java
+++ b/core/java/android/database/sqlite/SQLiteDatabase.java
@@ -54,7 +54,8 @@
  */
 public class SQLiteDatabase extends SQLiteClosable {
     private static final String TAG = "Database";
-    private static final int DB_OPERATION_EVENT = 52000;
+    private static final int EVENT_DB_OPERATION = 52000;
+    private static final int EVENT_DB_CORRUPT = 75004;
 
     /**
      * Algorithms used in ON CONFLICT clause
@@ -739,6 +740,7 @@
             // Try to recover from this, if we can.
             // TODO: should we do this for other open failures?
             Log.e(TAG, "Deleting and re-creating corrupt database " + path, e);
+            EventLog.writeEvent(EVENT_DB_CORRUPT, path);
             new File(path).delete();
             return new SQLiteDatabase(path, factory, flags);
         }
@@ -1732,7 +1734,7 @@
     }
 
     /* package */ void logTimeStat(boolean read, long begin, long end) {
-        EventLog.writeEvent(DB_OPERATION_EVENT, mPath, read ? 0 : 1, end - begin);
+        EventLog.writeEvent(EVENT_DB_OPERATION, mPath, read ? 0 : 1, end - begin);
     }
 
     /**
diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java
index a1da0e4..66f5740 100644
--- a/core/java/android/hardware/Camera.java
+++ b/core/java/android/hardware/Camera.java
@@ -469,6 +469,8 @@
 
     /**
      * Handles the zoom callback.
+     *
+     * @hide
      */
     public interface ZoomCallback
     {
@@ -487,6 +489,7 @@
      * Registers a callback to be invoked when the zoom
      * level is updated by the camera driver.
      * @param cb the callback to run
+     * @hide
      */
     public final void setZoomCallback(ZoomCallback cb)
     {
@@ -1278,7 +1281,11 @@
         }
 
         /**
-         * Sets the scene mode.
+         * Sets the scene mode. Other parameters may be changed after changing
+         * scene mode. For example, flash and supported flash mode may be
+         * changed to "off" in night scene mode. After setting scene mode,
+         * applications should call getParameters to know if some parameters are
+         * changed.
          *
          * @param value SCENE_MODE_XXX string constants.
          */
diff --git a/core/java/android/net/NetworkStateTracker.java b/core/java/android/net/NetworkStateTracker.java
index d3e4ea5..1fb0144 100644
--- a/core/java/android/net/NetworkStateTracker.java
+++ b/core/java/android/net/NetworkStateTracker.java
@@ -123,8 +123,10 @@
     }
 
     public void addPrivateDnsRoutes() {
-        if (DBG) Log.d(TAG, "addPrivateDnsRoutes for " + this +
-                "(" + mInterfaceName + ") - mPrivateDnsRouteSet = "+mPrivateDnsRouteSet);
+        if (DBG) {
+            Log.d(TAG, "addPrivateDnsRoutes for " + this +
+                    "(" + mInterfaceName + ") - mPrivateDnsRouteSet = "+mPrivateDnsRouteSet);
+        }
         if (mInterfaceName != null && !mPrivateDnsRouteSet) {
             for (String addrString : getNameServers()) {
                 int addr = NetworkUtils.lookupHost(addrString);
@@ -138,30 +140,36 @@
     }
 
     public void removePrivateDnsRoutes() {
-        if (DBG) Log.d(TAG, "removePrivateDnsRoutes for " + this +
-                "(" + mInterfaceName + ")");
         // TODO - we should do this explicitly but the NetUtils api doesnt
         // support this yet - must remove all.  No worse than before
         if (mInterfaceName != null && mPrivateDnsRouteSet) {
+            if (DBG) {
+                Log.d(TAG, "removePrivateDnsRoutes for " + mNetworkInfo.getTypeName() +
+                        " (" + mInterfaceName + ")");
+            }
             NetworkUtils.removeHostRoutes(mInterfaceName);
             mPrivateDnsRouteSet = false;
         }
     }
 
     public void addDefaultRoute() {
-        if (DBG) Log.d(TAG, "addDefaultRoute for " + this + "(" +
-                mInterfaceName + "), GatewayAddr=" + mDefaultGatewayAddr);
         if ((mInterfaceName != null) && (mDefaultGatewayAddr != 0) &&
                 mDefaultRouteSet == false) {
+            if (DBG) {
+                Log.d(TAG, "addDefaultRoute for " + mNetworkInfo.getTypeName() +
+                        " (" + mInterfaceName + "), GatewayAddr=" + mDefaultGatewayAddr);
+            }
             NetworkUtils.setDefaultRoute(mInterfaceName, mDefaultGatewayAddr);
             mDefaultRouteSet = true;
         }
     }
 
     public void removeDefaultRoute() {
-        if (DBG) Log.d(TAG, "removeDefaultRoute for " + this + "(" +
-                mInterfaceName + ")");
         if (mInterfaceName != null && mDefaultRouteSet == true) {
+            if (DBG) {
+                Log.d(TAG, "removeDefaultRoute for " + mNetworkInfo.getTypeName() + " (" +
+                        mInterfaceName + ")");
+            }
             NetworkUtils.removeDefaultRoute(mInterfaceName);
             mDefaultRouteSet = false;
         }
diff --git a/core/java/android/pim/vcard/ContactStruct.java b/core/java/android/pim/vcard/ContactStruct.java
index 35224c7..b6a453a 100644
--- a/core/java/android/pim/vcard/ContactStruct.java
+++ b/core/java/android/pim/vcard/ContactStruct.java
@@ -25,8 +25,8 @@
 import android.provider.ContactsContract.Data;
 import android.provider.ContactsContract.Groups;
 import android.provider.ContactsContract.RawContacts;
-import android.provider.ContactsContract.CommonDataKinds.Birthday;
 import android.provider.ContactsContract.CommonDataKinds.Email;
+import android.provider.ContactsContract.CommonDataKinds.Event;
 import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
 import android.provider.ContactsContract.CommonDataKinds.Im;
 import android.provider.ContactsContract.CommonDataKinds.Nickname;
@@ -810,7 +810,8 @@
         } else if (propName.equals("NICKNAME") || propName.equals("X-NICKNAME")) {
             addNickName(propValue);
         } else if (propName.equals("SOUND")) {
-            if (Constants.ATTR_TYPE_X_IRMC_N.equals(paramMap.get(Constants.ATTR_TYPE))) {
+            Collection<String> typeCollection = paramMap.get(Constants.ATTR_TYPE);
+            if (typeCollection != null && typeCollection.contains(Constants.ATTR_TYPE_X_IRMC_N)) {
                 handlePhoneticNameFromSound(propValueList);
             } else {
                 // Ignore this field since Android cannot understand what it is.
@@ -1051,8 +1052,8 @@
             List<String> nameList;
             switch (VCardConfig.getNameOrderType(mVCardType)) {
             case VCardConfig.NAME_ORDER_JAPANESE:
-                if (VCardUtils.containsOnlyAscii(mFamilyName) &&
-                        VCardUtils.containsOnlyAscii(mGivenName)) {
+                if (VCardUtils.containsOnlyPrintableAscii(mFamilyName) &&
+                        VCardUtils.containsOnlyPrintableAscii(mGivenName)) {
                     nameList = Arrays.asList(mPrefix, mGivenName, mMiddleName, mFamilyName, mSuffix);
                 } else {
                     nameList = Arrays.asList(mPrefix, mFamilyName, mMiddleName, mGivenName, mSuffix);
@@ -1123,7 +1124,7 @@
     }
     
     // From GoogleSource.java in Contacts app.
-    private static final String ACCOUNT_TYPE_GOOGLE = "com.google.GAIA";
+    private static final String ACCOUNT_TYPE_GOOGLE = "com.google";
     private static final String GOOGLE_MY_CONTACTS_GROUP = "System Group: My Contacts";
 
     public void pushIntoContentResolver(ContentResolver resolver) {
@@ -1316,9 +1317,10 @@
         
         if (!TextUtils.isEmpty(mBirthday)) {
             builder = ContentProviderOperation.newInsert(Data.CONTENT_URI);
-            builder.withValueBackReference(Birthday.RAW_CONTACT_ID, 0);
-            builder.withValue(Data.MIMETYPE, Birthday.CONTENT_ITEM_TYPE);
-            builder.withValue(Birthday.BIRTHDAY, mBirthday);
+            builder.withValueBackReference(Event.RAW_CONTACT_ID, 0);
+            builder.withValue(Data.MIMETYPE, Event.CONTENT_ITEM_TYPE);
+            builder.withValue(Event.START_DATE, mBirthday);
+            builder.withValue(Event.TYPE, Event.TYPE_BIRTHDAY);
             operationList.add(builder.build());
         }
 
diff --git a/core/java/android/pim/vcard/VCardComposer.java b/core/java/android/pim/vcard/VCardComposer.java
index 40b4fc4..7b75f4a 100644
--- a/core/java/android/pim/vcard/VCardComposer.java
+++ b/core/java/android/pim/vcard/VCardComposer.java
@@ -30,8 +30,8 @@
 import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.Data;
 import android.provider.ContactsContract.RawContacts;
-import android.provider.ContactsContract.CommonDataKinds.Birthday;
 import android.provider.ContactsContract.CommonDataKinds.Email;
+import android.provider.ContactsContract.CommonDataKinds.Event;
 import android.provider.ContactsContract.CommonDataKinds.Im;
 import android.provider.ContactsContract.CommonDataKinds.Nickname;
 import android.provider.ContactsContract.CommonDataKinds.Note;
@@ -56,8 +56,10 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * <p>
@@ -234,9 +236,8 @@
     private static final String VCARD_PROPERTY_X_PHONETIC_LAST_NAME = "X-PHONETIC-LAST-NAME";
 
     // Android specific properties
-    private static final String VCARD_PROPERTY_X_PHONETIC_NAME = "X-PHONETIC-NAME";
+    // TODO: ues extra MIME-TYPE instead of adding this kind of inflexible fields
     private static final String VCARD_PROPERTY_X_NICKNAME = "X-NICKNAME";
-    // TODO: add properties like X-LATITUDE
 
     // Property for call log entry
     private static final String VCARD_PROPERTY_X_TIMESTAMP = "X-IRMC-CALL-DATETIME";
@@ -283,7 +284,9 @@
     private final boolean mUsesQuotedPrintable;
     private final boolean mUsesAndroidProperty;
     private final boolean mUsesDefactProperty;
+    private final boolean mUsesUtf8;
     private final boolean mUsesShiftJis;
+    private final boolean mUsesQPToPrimaryProperties;
 
     private Cursor mCursor;
     private int mIdColumn;
@@ -365,7 +368,9 @@
         mUsesAndroidProperty = VCardConfig
                 .usesAndroidSpecificProperty(vcardType);
         mUsesDefactProperty = VCardConfig.usesDefactProperty(vcardType);
+        mUsesUtf8 = VCardConfig.usesUtf8(vcardType);
         mUsesShiftJis = VCardConfig.usesShiftJis(vcardType);
+        mUsesQPToPrimaryProperties = VCardConfig.usesQPToPrimaryProperties(vcardType);
 
         if (mIsDoCoMo) {
             mCharsetString = CharsetUtils.charsetForVendor(SHIFT_JIS, "docomo").name();
@@ -396,9 +401,10 @@
         }
 
         boolean needCharset = false;
-        if (!(VCardUtils.containsOnlyAscii(phoneName))) {
+        if (!(VCardUtils.containsOnlyPrintableAscii(phoneName))) {
             needCharset = true;
         }
+        // TODO: QP should be used? Using mUsesQPToPrimaryProperties should help.
         appendVCardLine(builder, VCARD_PROPERTY_FULL_NAME, phoneName, needCharset, false);
         appendVCardLine(builder, VCARD_PROPERTY_NAME, phoneName, needCharset, false);
 
@@ -596,7 +602,8 @@
         if (TextUtils.isEmpty(name)) {
             name = mCursor.getString(NUMBER_COLUMN_INDEX);
         }
-        final boolean needCharset = !(VCardUtils.containsOnlyAscii(name));
+        final boolean needCharset = !(VCardUtils.containsOnlyPrintableAscii(name));
+        // TODO: QP should be used? Using mUsesQPToPrimaryProperties should help.
         appendVCardLine(builder, VCARD_PROPERTY_FULL_NAME, name, needCharset, false);
         appendVCardLine(builder, VCARD_PROPERTY_NAME, name, needCharset, false);
 
@@ -633,8 +640,8 @@
                     ContentValues contentValues = namedContentValues.values;
                     String key = contentValues.getAsString(Data.MIMETYPE);
                     if (key != null) {
-                        List<ContentValues> contentValuesList = contentValuesListMap
-                                .get(key);
+                        List<ContentValues> contentValuesList =
+                                contentValuesListMap.get(key);
                         if (contentValuesList == null) {
                             contentValuesList = new ArrayList<ContentValues>();
                             contentValuesListMap.put(key, contentValuesList);
@@ -740,213 +747,328 @@
             final Map<String, List<ContentValues>> contentValuesListMap) {
         final List<ContentValues> contentValuesList = contentValuesListMap
                 .get(StructuredName.CONTENT_ITEM_TYPE);
-        if (contentValuesList != null) {
+        if (contentValuesList != null && contentValuesList.size() > 0) {
             appendStructuredNamesInternal(builder, contentValuesList);
         } else if (mIsDoCoMo) {
             appendVCardLine(builder, VCARD_PROPERTY_NAME, "");
+        } else if (mIsV30) {
+            // vCard 3.0 requires "N" and "FN" properties.
+            appendVCardLine(builder, VCARD_PROPERTY_NAME, "");
+            appendVCardLine(builder, VCARD_PROPERTY_FULL_NAME, "");
         }
     }
 
     private void appendStructuredNamesInternal(final StringBuilder builder,
             final List<ContentValues> contentValuesList) {
+        // For safety, we'll emit just one value around StructuredName, as external importers
+        // may get confused with multiple "N", "FN", etc. properties, though it is valid in
+        // vCard spec.
+        ContentValues primaryContentValues = null;
         for (ContentValues contentValues : contentValuesList) {
-            final String familyName = contentValues
-                    .getAsString(StructuredName.FAMILY_NAME);
-            final String middleName = contentValues
-                    .getAsString(StructuredName.MIDDLE_NAME);
-            final String givenName = contentValues
-                    .getAsString(StructuredName.GIVEN_NAME);
-            final String prefix = contentValues
-                    .getAsString(StructuredName.PREFIX);
-            final String suffix = contentValues
-                    .getAsString(StructuredName.SUFFIX);
-            final String displayName = contentValues
-                    .getAsString(StructuredName.DISPLAY_NAME);
+            Integer isSuperPrimary = contentValues.getAsInteger(StructuredName.IS_SUPER_PRIMARY);
+            if (isSuperPrimary != null && isSuperPrimary != 0) {
+                // We choose "super primary" ContentValues.
+                primaryContentValues = contentValues;
+                break;
+            } else if (primaryContentValues == null && contentValues != null) {
+                // We choose the first ContentValues if "super primary" ContentValues does not exist.
+                primaryContentValues = contentValues;
+            }
+        }
 
-            // For now, some primary element is not encoded into Quoted-Printable, which is not
-            // valid in vCard spec strictly. In the future, we may have to have some flag to
-            // enable composer to encode these primary field into Quoted-Printable.
-            if (!TextUtils.isEmpty(familyName) || !TextUtils.isEmpty(givenName)) {
-                final String encodedFamily = escapeCharacters(familyName);
-                final String encodedGiven = escapeCharacters(givenName);
-                final String encodedMiddle = escapeCharacters(middleName);
-                final String encodedPrefix = escapeCharacters(prefix);
-                final String encodedSuffix = escapeCharacters(suffix);
+        if (primaryContentValues == null) {
+            Log.e(LOG_TAG, "All ContentValues given from database is empty.");
+            primaryContentValues = new ContentValues();
+        }
 
-                // N property. This order is specified by vCard spec and does not depend on countries.
-                builder.append(VCARD_PROPERTY_NAME);
-                if (!(VCardUtils.containsOnlyAscii(familyName) &&
-                        VCardUtils.containsOnlyAscii(givenName) &&
-                        VCardUtils.containsOnlyAscii(middleName) &&
-                        VCardUtils.containsOnlyAscii(prefix) &&
-                        VCardUtils.containsOnlyAscii(suffix))) {
-                    builder.append(VCARD_ATTR_SEPARATOR);
-                    builder.append(mVCardAttributeCharset);
-                }
+        final String familyName = primaryContentValues
+                .getAsString(StructuredName.FAMILY_NAME);
+        final String middleName = primaryContentValues
+                .getAsString(StructuredName.MIDDLE_NAME);
+        final String givenName = primaryContentValues
+                .getAsString(StructuredName.GIVEN_NAME);
+        final String prefix = primaryContentValues
+                .getAsString(StructuredName.PREFIX);
+        final String suffix = primaryContentValues
+                .getAsString(StructuredName.SUFFIX);
+        final String displayName = primaryContentValues
+                .getAsString(StructuredName.DISPLAY_NAME);
 
-                builder.append(VCARD_DATA_SEPARATOR);
-                builder.append(encodedFamily);
-                builder.append(VCARD_ITEM_SEPARATOR);
-                builder.append(encodedGiven);
-                builder.append(VCARD_ITEM_SEPARATOR);
-                builder.append(encodedMiddle);
-                builder.append(VCARD_ITEM_SEPARATOR);
-                builder.append(encodedPrefix);
-                builder.append(VCARD_ITEM_SEPARATOR);
-                builder.append(encodedSuffix);
-                builder.append(VCARD_COL_SEPARATOR);
+        if (!TextUtils.isEmpty(familyName) || !TextUtils.isEmpty(givenName)) {
+            final String encodedFamily;
+            final String encodedGiven;
+            final String encodedMiddle;
+            final String encodedPrefix;
+            final String encodedSuffix;
 
-                final String encodedFullname = VCardUtils.constructNameFromElements(
-                        VCardConfig.getNameOrderType(mVCardType),
-                        encodedFamily, encodedMiddle, encodedGiven, encodedPrefix, encodedSuffix);
+            final boolean reallyUseQuotedPrintableToName =
+                (mUsesQPToPrimaryProperties &&
+                    !(VCardUtils.containsOnlyNonCrLfPrintableAscii(familyName) &&
+                            VCardUtils.containsOnlyNonCrLfPrintableAscii(givenName) &&
+                            VCardUtils.containsOnlyNonCrLfPrintableAscii(middleName) &&
+                            VCardUtils.containsOnlyNonCrLfPrintableAscii(prefix) &&
+                            VCardUtils.containsOnlyNonCrLfPrintableAscii(suffix)));
 
-                // FN property
-                builder.append(VCARD_PROPERTY_FULL_NAME);
-                if (!VCardUtils.containsOnlyAscii(encodedFullname)) {
-                    builder.append(VCARD_ATTR_SEPARATOR);
-                    builder.append(mVCardAttributeCharset);
-                }
-                builder.append(VCARD_DATA_SEPARATOR);
-                builder.append(encodedFullname);
-                builder.append(VCARD_COL_SEPARATOR);
-            } else if (!TextUtils.isEmpty(displayName)) {
-                builder.append(VCARD_PROPERTY_NAME);
-                builder.append(VCARD_ATTR_SEPARATOR);
-                builder.append(mVCardAttributeCharset);
-                builder.append(VCARD_DATA_SEPARATOR);
-                builder.append(escapeCharacters(displayName));
-                builder.append(VCARD_ITEM_SEPARATOR);
-                builder.append(VCARD_ITEM_SEPARATOR);
-                builder.append(VCARD_ITEM_SEPARATOR);
-                builder.append(VCARD_ITEM_SEPARATOR);
-                builder.append(VCARD_COL_SEPARATOR);
-            } else if (mIsDoCoMo) {
-                appendVCardLine(builder, VCARD_PROPERTY_NAME, "");
+            if (reallyUseQuotedPrintableToName) {
+                encodedFamily = encodeQuotedPrintable(familyName);
+                encodedGiven = encodeQuotedPrintable(givenName);
+                encodedMiddle = encodeQuotedPrintable(middleName);
+                encodedPrefix = encodeQuotedPrintable(prefix);
+                encodedSuffix = encodeQuotedPrintable(suffix);
+            } else {
+                encodedFamily = escapeCharacters(familyName);
+                encodedGiven = escapeCharacters(givenName);
+                encodedMiddle = escapeCharacters(middleName);
+                encodedPrefix = escapeCharacters(prefix);
+                encodedSuffix = escapeCharacters(suffix);
             }
 
-            String phoneticFamilyName = contentValues
-                    .getAsString(StructuredName.PHONETIC_FAMILY_NAME);
-            String phoneticMiddleName = contentValues
-                    .getAsString(StructuredName.PHONETIC_MIDDLE_NAME);
-            String phoneticGivenName = contentValues
-                    .getAsString(StructuredName.PHONETIC_GIVEN_NAME);
-            if (!(TextUtils.isEmpty(phoneticFamilyName)
-                    && TextUtils.isEmpty(phoneticMiddleName) && TextUtils
-                    .isEmpty(phoneticGivenName))) { // if not empty
-                if (mIsJapaneseMobilePhone) {
-                    phoneticFamilyName = VCardUtils
-                            .toHalfWidthString(phoneticFamilyName);
-                    phoneticMiddleName = VCardUtils
-                            .toHalfWidthString(phoneticMiddleName);
-                    phoneticGivenName = VCardUtils
-                            .toHalfWidthString(phoneticGivenName);
-                }
+            // N property. This order is specified by vCard spec and does not depend on countries.
+            builder.append(VCARD_PROPERTY_NAME);
+            if (shouldAppendCharsetAttribute(Arrays.asList(
+                    familyName, givenName, middleName, prefix, suffix))) {
+                builder.append(VCARD_ATTR_SEPARATOR);
+                builder.append(mVCardAttributeCharset);
+            }
+            if (reallyUseQuotedPrintableToName) {
+                builder.append(VCARD_ATTR_SEPARATOR);
+                builder.append(VCARD_ATTR_ENCODING_QP);
+            }
 
-                if (mIsV30) {
-                    final String sortString = VCardUtils
-                            .constructNameFromElements(mVCardType,
-                                    phoneticFamilyName, phoneticMiddleName,
-                                    phoneticGivenName);
-                    builder.append(VCARD_PROPERTY_SORT_STRING);
+            builder.append(VCARD_DATA_SEPARATOR);
+            builder.append(encodedFamily);
+            builder.append(VCARD_ITEM_SEPARATOR);
+            builder.append(encodedGiven);
+            builder.append(VCARD_ITEM_SEPARATOR);
+            builder.append(encodedMiddle);
+            builder.append(VCARD_ITEM_SEPARATOR);
+            builder.append(encodedPrefix);
+            builder.append(VCARD_ITEM_SEPARATOR);
+            builder.append(encodedSuffix);
+            builder.append(VCARD_COL_SEPARATOR);
 
-                    if (!VCardUtils.containsOnlyAscii(sortString)) {
-                        // Strictly, adding charset information is NOT valid in
-                        // VCard 3.0,
-                        // but we'll add this info since parser side may be able to
-                        // use the charset via
-                        // this attribute field.
-                        //
-                        // e.g. Japanese mobile phones use Shift_Jis while RFC 2426
-                        // recommends
-                        // UTF-8. By adding this field, parsers may be able to know
-                        // this text
-                        // is NOT UTF-8 but Shift_Jis.
-                        builder.append(VCARD_ATTR_SEPARATOR);
-                        builder.append(mVCardAttributeCharset);
-                    }
+            final String fullname = VCardUtils.constructNameFromElements(
+                    VCardConfig.getNameOrderType(mVCardType),
+                    encodedFamily, encodedMiddle, encodedGiven, encodedPrefix, encodedSuffix);
+            final boolean reallyUseQuotedPrintableToFullname =
+                mUsesQPToPrimaryProperties &&
+                !VCardUtils.containsOnlyNonCrLfPrintableAscii(fullname);
 
-                    builder.append(VCARD_DATA_SEPARATOR);
-                    builder.append(sortString);
-                    builder.append(VCARD_COL_SEPARATOR);
-                } else {
-                    // Note: There is no appropriate property for expressing
-                    // phonetic name in
-                    // VCard 2.1, while there is in VCard 3.0 (SORT-STRING).
-                    // We chose to use DoCoMo's way since it is supported by a
-                    // lot of
-                    // Japanese mobile phones.
-                    //
-                    // TODO: should use Quoted-Pritable?
-                    builder.append(VCARD_PROPERTY_SOUND);
+            final String encodedFullname =
+                reallyUseQuotedPrintableToFullname ?
+                        encodeQuotedPrintable(fullname) :
+                            escapeCharacters(fullname);
+
+            // FN property
+            builder.append(VCARD_PROPERTY_FULL_NAME);
+            if (shouldAppendCharsetAttribute(encodedFullname)) {
+                builder.append(VCARD_ATTR_SEPARATOR);
+                builder.append(mVCardAttributeCharset);
+            }
+            if (reallyUseQuotedPrintableToFullname) {
+                builder.append(VCARD_ATTR_SEPARATOR);
+                builder.append(VCARD_ATTR_ENCODING_QP);
+            }
+            builder.append(VCARD_DATA_SEPARATOR);
+            builder.append(encodedFullname);
+            builder.append(VCARD_COL_SEPARATOR);
+        } else if (!TextUtils.isEmpty(displayName)) {
+            final boolean reallyUseQuotedPrintableToDisplayName =
+                (mUsesQPToPrimaryProperties &&
+                        !VCardUtils.containsOnlyNonCrLfPrintableAscii(displayName));
+            final String encodedDisplayName =
+                    reallyUseQuotedPrintableToDisplayName ?
+                            encodeQuotedPrintable(displayName) :
+                                escapeCharacters(displayName);
+
+            builder.append(VCARD_PROPERTY_NAME);
+            if (shouldAppendCharsetAttribute(encodedDisplayName)) {
+                builder.append(VCARD_ATTR_SEPARATOR);
+                builder.append(mVCardAttributeCharset);
+            }
+            if (reallyUseQuotedPrintableToDisplayName) {
+                builder.append(VCARD_ATTR_SEPARATOR);
+                builder.append(VCARD_ATTR_ENCODING_QP);
+            }
+            builder.append(VCARD_DATA_SEPARATOR);
+            builder.append(encodedDisplayName);
+            builder.append(VCARD_ITEM_SEPARATOR);
+            builder.append(VCARD_ITEM_SEPARATOR);
+            builder.append(VCARD_ITEM_SEPARATOR);
+            builder.append(VCARD_ITEM_SEPARATOR);
+            builder.append(VCARD_COL_SEPARATOR);
+        } else if (mIsDoCoMo) {
+            appendVCardLine(builder, VCARD_PROPERTY_NAME, "");
+        } else if (mIsV30) {
+            appendVCardLine(builder, VCARD_PROPERTY_NAME, "");
+            appendVCardLine(builder, VCARD_PROPERTY_FULL_NAME, "");
+        }
+
+        String phoneticFamilyName = primaryContentValues
+                .getAsString(StructuredName.PHONETIC_FAMILY_NAME);
+        String phoneticMiddleName = primaryContentValues
+                .getAsString(StructuredName.PHONETIC_MIDDLE_NAME);
+        String phoneticGivenName = primaryContentValues
+                .getAsString(StructuredName.PHONETIC_GIVEN_NAME);
+        if (!(TextUtils.isEmpty(phoneticFamilyName)
+                && TextUtils.isEmpty(phoneticMiddleName) &&
+                TextUtils.isEmpty(phoneticGivenName))) { // if not empty
+            if (mIsJapaneseMobilePhone) {
+                phoneticFamilyName = VCardUtils
+                        .toHalfWidthString(phoneticFamilyName);
+                phoneticMiddleName = VCardUtils
+                        .toHalfWidthString(phoneticMiddleName);
+                phoneticGivenName = VCardUtils
+                        .toHalfWidthString(phoneticGivenName);
+            }
+
+            if (mIsV30) {
+                final String sortString = VCardUtils
+                        .constructNameFromElements(mVCardType,
+                                phoneticFamilyName,
+                                phoneticMiddleName,
+                                phoneticGivenName);
+                builder.append(VCARD_PROPERTY_SORT_STRING);
+
+                // Do not need to care about QP, since vCard 3.0 does not allow it.
+                final String encodedSortString = escapeCharacters(sortString);
+                if (shouldAppendCharsetAttribute(encodedSortString)) {
                     builder.append(VCARD_ATTR_SEPARATOR);
-                    builder.append(Constants.ATTR_TYPE_X_IRMC_N);
-                    builder.append(VCARD_ATTR_SEPARATOR);
-
-                    if (!(VCardUtils.containsOnlyAscii(phoneticFamilyName) &&
-                            VCardUtils.containsOnlyAscii(phoneticMiddleName) &&
-                            VCardUtils.containsOnlyAscii(phoneticGivenName))) {
-                        builder.append(mVCardAttributeCharset);
-                        builder.append(VCARD_DATA_SEPARATOR);
-                    }
-
-                    builder.append(escapeCharacters(phoneticFamilyName));
-                    builder.append(VCARD_ITEM_SEPARATOR);
-                    builder.append(escapeCharacters(phoneticMiddleName));
-                    builder.append(VCARD_ITEM_SEPARATOR);
-                    builder.append(escapeCharacters(phoneticGivenName));
-                    builder.append(VCARD_ITEM_SEPARATOR);
-                    builder.append(VCARD_ITEM_SEPARATOR);
-                    builder.append(VCARD_COL_SEPARATOR);
-
-                    if (mUsesAndroidProperty) {
-                        final String phoneticName = VCardUtils
-                                .constructNameFromElements(mVCardType,
-                                        phoneticFamilyName, phoneticMiddleName,
-                                        phoneticGivenName);
-                        builder.append(VCARD_PROPERTY_X_PHONETIC_NAME);
-
-                        if (!VCardUtils.containsOnlyAscii(phoneticName)) {
-                            builder.append(VCARD_ATTR_SEPARATOR);
-                            builder.append(mVCardAttributeCharset);
-                        }
-
-                        builder.append(VCARD_DATA_SEPARATOR);
-                        // TODO: may need to make the text quoted-printable.
-                        builder.append(phoneticName);
-                        builder.append(VCARD_COL_SEPARATOR);
-                    }
+                    builder.append(mVCardAttributeCharset);
                 }
-            } else if (mIsDoCoMo) {
+                builder.append(VCARD_DATA_SEPARATOR);
+                builder.append(encodedSortString);
+                builder.append(VCARD_COL_SEPARATOR);
+            } else {
+                // Note: There is no appropriate property for expressing
+                //       phonetic name in vCard 2.1, while there is in
+                //       vCard 3.0 (SORT-STRING).
+                //       We chose to use DoCoMo's way since it is supported by
+                //       a lot of Japanese mobile phones. This is "X-" property, so
+                //       any parser hopefully would not get confused with this.
                 builder.append(VCARD_PROPERTY_SOUND);
                 builder.append(VCARD_ATTR_SEPARATOR);
                 builder.append(Constants.ATTR_TYPE_X_IRMC_N);
+
+                boolean reallyUseQuotedPrintable =
+                    (mUsesQPToPrimaryProperties &&
+                            !(VCardUtils.containsOnlyNonCrLfPrintableAscii(
+                                    phoneticFamilyName) &&
+                              VCardUtils.containsOnlyNonCrLfPrintableAscii(
+                                    phoneticMiddleName) &&
+                              VCardUtils.containsOnlyNonCrLfPrintableAscii(
+                                    phoneticGivenName)));
+
+                final String encodedPhoneticFamilyName;
+                final String encodedPhoneticMiddleName;
+                final String encodedPhoneticGivenName;
+                if (reallyUseQuotedPrintable) {
+                    encodedPhoneticFamilyName = encodeQuotedPrintable(phoneticFamilyName);
+                    encodedPhoneticMiddleName = encodeQuotedPrintable(phoneticMiddleName);
+                    encodedPhoneticGivenName = encodeQuotedPrintable(phoneticGivenName);
+                } else {
+                    encodedPhoneticFamilyName = escapeCharacters(phoneticFamilyName);
+                    encodedPhoneticMiddleName = escapeCharacters(phoneticMiddleName);
+                    encodedPhoneticGivenName = escapeCharacters(phoneticGivenName);
+                }
+
+                if (shouldAppendCharsetAttribute(Arrays.asList(
+                        encodedPhoneticFamilyName, encodedPhoneticMiddleName,
+                        encodedPhoneticGivenName))) {
+                    builder.append(VCARD_ATTR_SEPARATOR);
+                    builder.append(mVCardAttributeCharset);
+                }
                 builder.append(VCARD_DATA_SEPARATOR);
+                builder.append(encodedPhoneticFamilyName);
                 builder.append(VCARD_ITEM_SEPARATOR);
+                builder.append(encodedPhoneticGivenName);
                 builder.append(VCARD_ITEM_SEPARATOR);
+                builder.append(encodedPhoneticMiddleName);
                 builder.append(VCARD_ITEM_SEPARATOR);
                 builder.append(VCARD_ITEM_SEPARATOR);
                 builder.append(VCARD_COL_SEPARATOR);
             }
+        } else if (mIsDoCoMo) {
+            builder.append(VCARD_PROPERTY_SOUND);
+            builder.append(VCARD_ATTR_SEPARATOR);
+            builder.append(Constants.ATTR_TYPE_X_IRMC_N);
+            builder.append(VCARD_DATA_SEPARATOR);
+            builder.append(VCARD_ITEM_SEPARATOR);
+            builder.append(VCARD_ITEM_SEPARATOR);
+            builder.append(VCARD_ITEM_SEPARATOR);
+            builder.append(VCARD_ITEM_SEPARATOR);
+            builder.append(VCARD_COL_SEPARATOR);
+        }
 
-            if (mUsesDefactProperty) {
-                if (!TextUtils.isEmpty(phoneticGivenName)) {
-                    builder.append(VCARD_PROPERTY_X_PHONETIC_FIRST_NAME);
-                    builder.append(VCARD_DATA_SEPARATOR);
-                    builder.append(phoneticGivenName);
-                    builder.append(VCARD_COL_SEPARATOR);
+        if (mUsesDefactProperty) {
+            if (!TextUtils.isEmpty(phoneticGivenName)) {
+                final boolean reallyUseQuotedPrintable =
+                    (mUsesQPToPrimaryProperties &&
+                            !VCardUtils.containsOnlyNonCrLfPrintableAscii(phoneticGivenName));
+                final String encodedPhoneticGivenName;
+                if (reallyUseQuotedPrintable) {
+                    encodedPhoneticGivenName = encodeQuotedPrintable(phoneticGivenName);
+                } else {
+                    encodedPhoneticGivenName = escapeCharacters(phoneticGivenName);
                 }
-                if (!TextUtils.isEmpty(phoneticMiddleName)) {
-                    builder.append(VCARD_PROPERTY_X_PHONETIC_MIDDLE_NAME);
-                    builder.append(VCARD_DATA_SEPARATOR);
-                    builder.append(phoneticMiddleName);
-                    builder.append(VCARD_COL_SEPARATOR);
+                builder.append(VCARD_PROPERTY_X_PHONETIC_FIRST_NAME);
+                if (shouldAppendCharsetAttribute(encodedPhoneticGivenName)) {
+                    builder.append(VCARD_ATTR_SEPARATOR);
+                    builder.append(mVCardAttributeCharset);
                 }
-                if (!TextUtils.isEmpty(phoneticFamilyName)) {
-                    builder.append(VCARD_PROPERTY_X_PHONETIC_LAST_NAME);
-                    builder.append(VCARD_DATA_SEPARATOR);
-                    builder.append(phoneticFamilyName);
-                    builder.append(VCARD_COL_SEPARATOR);
+                if (reallyUseQuotedPrintable) {
+                    builder.append(VCARD_ATTR_SEPARATOR);
+                    builder.append(VCARD_ATTR_ENCODING_QP);
                 }
+                builder.append(VCARD_DATA_SEPARATOR);
+                builder.append(encodedPhoneticGivenName);
+                builder.append(VCARD_COL_SEPARATOR);
+            }
+            if (!TextUtils.isEmpty(phoneticMiddleName)) {
+                final boolean reallyUseQuotedPrintable =
+                    (mUsesQPToPrimaryProperties &&
+                            !VCardUtils.containsOnlyNonCrLfPrintableAscii(phoneticMiddleName));
+                final String encodedPhoneticMiddleName;
+                if (reallyUseQuotedPrintable) {
+                    encodedPhoneticMiddleName = encodeQuotedPrintable(phoneticMiddleName);
+                } else {
+                    encodedPhoneticMiddleName = escapeCharacters(phoneticMiddleName);
+                }
+                builder.append(VCARD_PROPERTY_X_PHONETIC_MIDDLE_NAME);
+                if (shouldAppendCharsetAttribute(encodedPhoneticMiddleName)) {
+                    builder.append(VCARD_ATTR_SEPARATOR);
+                    builder.append(mVCardAttributeCharset);
+                }
+                if (reallyUseQuotedPrintable) {
+                    builder.append(VCARD_ATTR_SEPARATOR);
+                    builder.append(VCARD_ATTR_ENCODING_QP);
+                }
+                builder.append(VCARD_DATA_SEPARATOR);
+                builder.append(encodedPhoneticMiddleName);
+                builder.append(VCARD_COL_SEPARATOR);
+            }
+            if (!TextUtils.isEmpty(phoneticFamilyName)) {
+                final boolean reallyUseQuotedPrintable =
+                    (mUsesQPToPrimaryProperties &&
+                            !VCardUtils.containsOnlyNonCrLfPrintableAscii(phoneticFamilyName));
+                final String encodedPhoneticFamilyName;
+                if (reallyUseQuotedPrintable) {
+                    encodedPhoneticFamilyName = encodeQuotedPrintable(phoneticFamilyName);
+                } else {
+                    encodedPhoneticFamilyName = escapeCharacters(phoneticFamilyName);
+                }
+                builder.append(VCARD_PROPERTY_X_PHONETIC_LAST_NAME);
+                if (shouldAppendCharsetAttribute(encodedPhoneticFamilyName)) {
+                    builder.append(VCARD_ATTR_SEPARATOR);
+                    builder.append(mVCardAttributeCharset);
+                }
+                if (reallyUseQuotedPrintable) {
+                    builder.append(VCARD_ATTR_SEPARATOR);
+                    builder.append(VCARD_ATTR_ENCODING_QP);
+                }
+                builder.append(VCARD_DATA_SEPARATOR);
+                builder.append(encodedPhoneticFamilyName);
+                builder.append(VCARD_COL_SEPARATOR);
             }
         }
     }
@@ -967,21 +1089,32 @@
             }
 
             for (ContentValues contentValues : contentValuesList) {
-                final String nickname = contentValues
-                        .getAsString(Nickname.NAME);
+                final String nickname = contentValues.getAsString(Nickname.NAME);
                 if (TextUtils.isEmpty(nickname)) {
                     continue;
                 }
-                builder.append(propertyNickname);
 
-                if (!VCardUtils.containsOnlyAscii(propertyNickname)) {
-                    //  Strictly, this is not valid in vCard 3.0. See above.
+                final String encodedNickname;
+                final boolean reallyUseQuotedPrintable =
+                    (mUsesQuotedPrintable &&
+                            !VCardUtils.containsOnlyNonCrLfPrintableAscii(nickname));
+                if (reallyUseQuotedPrintable) {
+                    encodedNickname = encodeQuotedPrintable(nickname);
+                } else {
+                    encodedNickname = escapeCharacters(nickname);
+                }
+
+                builder.append(propertyNickname);
+                if (shouldAppendCharsetAttribute(propertyNickname)) {
                     builder.append(VCARD_ATTR_SEPARATOR);
                     builder.append(mVCardAttributeCharset);
                 }
-
+                if (reallyUseQuotedPrintable) {
+                    builder.append(VCARD_ATTR_SEPARATOR);
+                    builder.append(VCARD_ATTR_ENCODING_QP);
+                }
                 builder.append(VCARD_DATA_SEPARATOR);
-                builder.append(escapeCharacters(nickname));
+                builder.append(encodedNickname);
                 builder.append(VCARD_COL_SEPARATOR);
             }
         }
@@ -991,16 +1124,31 @@
             final Map<String, List<ContentValues>> contentValuesListMap) {
         final List<ContentValues> contentValuesList = contentValuesListMap
                 .get(Phone.CONTENT_ITEM_TYPE);
+        boolean phoneLineExists = false;
         if (contentValuesList != null) {
+            Set<String> phoneSet = new HashSet<String>();
             for (ContentValues contentValues : contentValuesList) {
-                Integer phoneType = contentValues.getAsInteger(Phone.TYPE);
-                int phoneTypeAsPrimitive =
-                    (phoneType == null ? Phone.TYPE_HOME : phoneType);
-                appendVCardTelephoneLine(builder, phoneTypeAsPrimitive,
-                        contentValues.getAsString(Phone.LABEL),
-                        contentValues.getAsString(Phone.NUMBER));
+                final Integer typeAsObject = contentValues.getAsInteger(Phone.TYPE);
+                final String label = contentValues.getAsString(Phone.LABEL);
+                String phoneNumber = contentValues.getAsString(Phone.NUMBER);
+                if (phoneNumber != null) {
+                    phoneNumber = phoneNumber.trim();
+                }
+                if (TextUtils.isEmpty(phoneNumber)) {
+                    continue;
+                }
+                phoneLineExists = true;
+                int type = (typeAsObject != null ? typeAsObject : Phone.TYPE_HOME);
+                // TODO: Premature, since this allows two phone numbers which are
+                //        same from the view of phone number format (e.g. "100" v.s. "1-0-0")
+                if (!phoneSet.contains(phoneNumber)) {
+                    phoneSet.add(phoneNumber);
+                    appendVCardTelephoneLine(builder, type, label, phoneNumber);
+                }
             }
-        } else if (mIsDoCoMo) {
+        }
+
+        if (!phoneLineExists && mIsDoCoMo) {
             appendVCardTelephoneLine(builder, Phone.TYPE_HOME, "", "");
         }
     }
@@ -1009,14 +1157,30 @@
             final Map<String, List<ContentValues>> contentValuesListMap) {
         final List<ContentValues> contentValuesList = contentValuesListMap
                 .get(Email.CONTENT_ITEM_TYPE);
+        boolean emailAddressExists = false;
         if (contentValuesList != null) {
+            Set<String> addressSet = new HashSet<String>();
             for (ContentValues contentValues : contentValuesList) {
-                appendVCardEmailLine(builder, contentValues
-                        .getAsInteger(Email.TYPE), contentValues
-                        .getAsString(Email.LABEL), contentValues
-                        .getAsString(Email.DATA));
+                Integer typeAsObject = contentValues.getAsInteger(Email.TYPE);
+                final int type = (typeAsObject != null ?
+                        typeAsObject : Email.TYPE_OTHER);
+                final String label = contentValues.getAsString(Email.LABEL);
+                String emailAddress = contentValues.getAsString(Email.DATA);
+                if (emailAddress != null) {
+                    emailAddress = emailAddress.trim();
+                }
+                if (TextUtils.isEmpty(emailAddress)) {
+                    continue;
+                }
+                emailAddressExists = true;
+                if (!addressSet.contains(emailAddress)) {
+                    addressSet.add(emailAddress);
+                    appendVCardEmailLine(builder, type, label, emailAddress);
+                }
             }
-        } else if (mIsDoCoMo) {
+        }
+
+        if (!emailAddressExists && mIsDoCoMo) {
             appendVCardEmailLine(builder, Email.TYPE_HOME, "", "");
         }
     }
@@ -1025,7 +1189,6 @@
             final Map<String, List<ContentValues>> contentValuesListMap) {
         final List<ContentValues> contentValuesList = contentValuesListMap
                 .get(StructuredPostal.CONTENT_ITEM_TYPE);
-
         if (contentValuesList != null) {
             if (mIsDoCoMo) {
                 appendPostalsForDoCoMo(builder, contentValuesList);
@@ -1042,7 +1205,7 @@
     }
 
     /**
-     * Try to append just one line. If there's no appropriate address
+     * Tries to append just one line. If there's no appropriate address
      * information, append an empty line.
      */
     private void appendPostalsForDoCoMo(final StringBuilder builder,
@@ -1087,7 +1250,9 @@
         for (ContentValues contentValues : contentValuesList) {
             final Integer type = contentValues.getAsInteger(StructuredPostal.TYPE);
             final String label = contentValues.getAsString(StructuredPostal.LABEL);
-            appendVCardPostalLine(builder, type, label, contentValues);
+            if (type != null) {
+                appendVCardPostalLine(builder, type, label, contentValues);
+            }
         }
     }
 
@@ -1099,6 +1264,12 @@
             for (ContentValues contentValues : contentValuesList) {
                 Integer protocol = contentValues.getAsInteger(Im.PROTOCOL);
                 String data = contentValues.getAsString(Im.DATA);
+                if (data != null) {
+                    data = data.trim();
+                }
+                if (TextUtils.isEmpty(data)) {
+                    continue;
+                }
 
                 if (protocol != null && protocol == Im.PROTOCOL_GOOGLE_TALK) {
                     if (VCardConfig.usesAndroidSpecificProperty(mVCardType)) {
@@ -1116,8 +1287,13 @@
                 .get(Website.CONTENT_ITEM_TYPE);
         if (contentValuesList != null) {
             for (ContentValues contentValues : contentValuesList) {
-                final String website = contentValues.getAsString(Website.URL);
-                appendVCardLine(builder, VCARD_PROPERTY_URL, website);
+                String website = contentValues.getAsString(Website.URL);
+                if (website != null) {
+                    website = website.trim();
+                }
+                if (!TextUtils.isEmpty(website)) {
+                    appendVCardLine(builder, VCARD_PROPERTY_URL, website);
+                }
             }
         }
     }
@@ -1125,13 +1301,22 @@
     private void appendBirthday(final StringBuilder builder,
             final Map<String, List<ContentValues>> contentValuesListMap) {
         final List<ContentValues> contentValuesList = contentValuesListMap
-                .get(Birthday.CONTENT_ITEM_TYPE);
+                .get(Event.CONTENT_ITEM_TYPE);
         if (contentValuesList != null && contentValuesList.size() > 0) {
+            Integer eventType = contentValuesList.get(0).getAsInteger(Event.TYPE);
+            if (eventType == null || !eventType.equals(Event.TYPE_BIRTHDAY)) {
+                return;
+            }
             // Theoretically, there must be only one birthday for each vCard data and
             // we are afraid of some parse error occuring in some devices, so
             // we emit only one birthday entry for now.
-            final String birthday = contentValuesList.get(0).getAsString(Birthday.BIRTHDAY);
-            appendVCardLine(builder, VCARD_PROPERTY_BIRTHDAY, birthday);
+            String birthday = contentValuesList.get(0).getAsString(Event.START_DATE);
+            if (birthday != null) {
+                birthday = birthday.trim();
+            }
+            if (!TextUtils.isEmpty(birthday)) {
+                appendVCardLine(builder, VCARD_PROPERTY_BIRTHDAY, birthday);
+            }
         }
     }
 
@@ -1141,14 +1326,29 @@
                 .get(Organization.CONTENT_ITEM_TYPE);
         if (contentValuesList != null) {
             for (ContentValues contentValues : contentValuesList) {
-                final String company = contentValues
+                String company = contentValues
                         .getAsString(Organization.COMPANY);
-                final String title = contentValues
+                if (company != null) {
+                    company = company.trim();
+                }
+                String title = contentValues
                         .getAsString(Organization.TITLE);
-                appendVCardLine(builder, VCARD_PROPERTY_ORG, company, true,
-                        mUsesQuotedPrintable);
-                appendVCardLine(builder, VCARD_PROPERTY_TITLE, title, true,
-                        mUsesQuotedPrintable);
+                if (title != null) {
+                    title = title.trim();
+                }
+
+                if (!TextUtils.isEmpty(company)) {
+                    appendVCardLine(builder, VCARD_PROPERTY_ORG, company,
+                            !VCardUtils.containsOnlyPrintableAscii(company),
+                            (mUsesQuotedPrintable &&
+                                    !VCardUtils.containsOnlyNonCrLfPrintableAscii(company)));
+                }
+                if (!TextUtils.isEmpty(title)) {
+                    appendVCardLine(builder, VCARD_PROPERTY_TITLE, title,
+                            !VCardUtils.containsOnlyPrintableAscii(title),
+                            (mUsesQuotedPrintable &&
+                                    !VCardUtils.containsOnlyNonCrLfPrintableAscii(title)));
+                }
             }
         }
     }
@@ -1201,7 +1401,10 @@
                 StringBuilder noteBuilder = new StringBuilder();
                 boolean first = true;
                 for (ContentValues contentValues : contentValuesList) {
-                    final String note = contentValues.getAsString(Note.NOTE);
+                    String note = contentValues.getAsString(Note.NOTE);
+                    if (note == null) {
+                        note = "";
+                    }
                     if (note.length() > 0) {
                         if (first) {
                             first = false;
@@ -1211,14 +1414,27 @@
                         noteBuilder.append(note);
                     }
                 }
-                appendVCardLine(builder, VCARD_PROPERTY_NOTE, noteBuilder.toString(),
-                        true, mUsesQuotedPrintable);
+                final String noteStr = noteBuilder.toString();
+                // This means we scan noteStr completely twice, which is redundant.
+                // But for now, we assume this is not so time-consuming..
+                final boolean shouldAppendCharsetInfo =
+                    !VCardUtils.containsOnlyPrintableAscii(noteStr);
+                final boolean reallyUseQuotedPrintable =
+                        (mUsesQuotedPrintable &&
+                            !VCardUtils.containsOnlyNonCrLfPrintableAscii(noteStr));
+                appendVCardLine(builder, VCARD_PROPERTY_NOTE, noteStr,
+                        shouldAppendCharsetInfo, reallyUseQuotedPrintable);
             } else {
                 for (ContentValues contentValues : contentValuesList) {
-                    final String note = contentValues.getAsString(Note.NOTE);
-                    if (!TextUtils.isEmpty(note)) {
-                        appendVCardLine(builder, VCARD_PROPERTY_NOTE, note, true,
-                                mUsesQuotedPrintable);
+                    final String noteStr = contentValues.getAsString(Note.NOTE);
+                    if (!TextUtils.isEmpty(noteStr)) {
+                        final boolean shouldAppendCharsetInfo =
+                                !VCardUtils.containsOnlyPrintableAscii(noteStr);
+                        final boolean reallyUseQuotedPrintable =
+                                (mUsesQuotedPrintable &&
+                                    !VCardUtils.containsOnlyNonCrLfPrintableAscii(noteStr));
+                        appendVCardLine(builder, VCARD_PROPERTY_NOTE, noteStr,
+                                shouldAppendCharsetInfo, reallyUseQuotedPrintable);
                     }
                 }
             }
@@ -1339,15 +1555,31 @@
         builder.append(VCARD_PROPERTY_ADR);
         builder.append(VCARD_ATTR_SEPARATOR);
 
+        // Note: Not sure why we need to emit "empty" line even when actual data does not exist.
+        // There may be some reason or may not be any. We keep safer side.
+        // TODO: investigate this.
         boolean dataExists = false;
         String[] dataArray = VCardUtils.getVCardPostalElements(contentValues);
+        boolean actuallyUseQuotedPrintable = false;
+        boolean shouldAppendCharset = false;
+        for (String data : dataArray) {
+            if (!TextUtils.isEmpty(data)) {
+                dataExists = true;
+                if (!shouldAppendCharset && !VCardUtils.containsOnlyPrintableAscii(data)) {
+                    shouldAppendCharset = true;
+                }
+                if (mUsesQuotedPrintable && !VCardUtils.containsOnlyNonCrLfPrintableAscii(data)) {
+                    actuallyUseQuotedPrintable = true;
+                    break;
+                }
+            }
+        }
+
         int length = dataArray.length;
-        final boolean useQuotedPrintable = mUsesQuotedPrintable;
         for (int i = 0; i < length; i++) {
             String data = dataArray[i];
             if (!TextUtils.isEmpty(data)) {
-                dataExists = true;
-                if (useQuotedPrintable) {
+                if (actuallyUseQuotedPrintable) {
                     dataArray[i] = encodeQuotedPrintable(data);
                 } else {
                     dataArray[i] = escapeCharacters(data);
@@ -1394,25 +1626,40 @@
             }
         }
 
-        if (typeAsString != null) {
-            appendTypeAttribute(builder, typeAsString);
-        }
+        // Attribute(s).
 
-        if (dataExists) {
-            // Strictly, vCard 3.0 does not allow exporters to emit charset information,
-            // but we will add it since the information should be useful for importers,
-            //
-            // Assume no parser does not emit error with this attribute in vCard 3.0.
+        {
+            boolean shouldAppendAttrSeparator = false;
             if (typeAsString != null) {
-                builder.append(VCARD_ATTR_SEPARATOR);
+                appendTypeAttribute(builder, typeAsString);
+                shouldAppendAttrSeparator = true;
             }
-            builder.append(mVCardAttributeCharset);
 
-            if (useQuotedPrintable) {
-                builder.append(VCARD_ATTR_SEPARATOR);
-                builder.append(VCARD_ATTR_ENCODING_QP);
+            if (dataExists) {
+                if (shouldAppendCharset) {
+                    // Strictly, vCard 3.0 does not allow exporters to emit charset information,
+                    // but we will add it since the information should be useful for importers,
+                    //
+                    // Assume no parser does not emit error with this attribute in vCard 3.0.
+                    if (shouldAppendAttrSeparator) {
+                        builder.append(VCARD_ATTR_SEPARATOR);
+                    }
+                    builder.append(mVCardAttributeCharset);
+                    shouldAppendAttrSeparator = true;
+                }
+
+                if (actuallyUseQuotedPrintable) {
+                    if (shouldAppendAttrSeparator) {
+                        builder.append(VCARD_ATTR_SEPARATOR);
+                    }
+                    builder.append(VCARD_ATTR_ENCODING_QP);
+                    shouldAppendAttrSeparator = true;
+                }
             }
         }
+
+        // Property values.
+
         builder.append(VCARD_DATA_SEPARATOR);
         if (dataExists) {
             // The elements in dataArray are already encoded to quoted printable
@@ -1631,6 +1878,35 @@
         builder.append(type);
     }
 
+    /**
+     * Returns true when the property line should contain charset attribute
+     * information. This method may return true even when vCard version is 3.0.
+     *
+     * Strictly, adding charset information is invalid in VCard 3.0.
+     * However we'll add the info only when used charset is not UTF-8
+     * in vCard 3.0 format, since parser side may be able to use the charset
+     * via this field, though we may encounter another problem by adding it...
+     *
+     * e.g. Japanese mobile phones use Shift_Jis while RFC 2426
+     * recommends UTF-8. By adding this field, parsers may be able
+     * to know this text is NOT UTF-8 but Shift_Jis.
+     */
+    private boolean shouldAppendCharsetAttribute(final String propertyValue) {
+        return (!VCardUtils.containsOnlyPrintableAscii(propertyValue) &&
+                        (!mIsV30 || !mUsesUtf8));
+    }
+
+    private boolean shouldAppendCharsetAttribute(final List<String> propertyValueList) {
+        boolean shouldAppendBasically = false;
+        for (String propertyValue : propertyValueList) {
+            if (!VCardUtils.containsOnlyPrintableAscii(propertyValue)) {
+                shouldAppendBasically = true;
+                break;
+            }
+        }
+        return shouldAppendBasically && (!mIsV30 || !mUsesUtf8);
+    }
+
     private String encodeQuotedPrintable(String str) {
         if (TextUtils.isEmpty(str)) {
             return "";
diff --git a/core/java/android/pim/vcard/VCardConfig.java b/core/java/android/pim/vcard/VCardConfig.java
index bc19551..68cd0df 100644
--- a/core/java/android/pim/vcard/VCardConfig.java
+++ b/core/java/android/pim/vcard/VCardConfig.java
@@ -55,7 +55,7 @@
     
     private static final int FLAG_CHARSET_UTF8 = 0;
     private static final int FLAG_CHARSET_SHIFT_JIS = 0x20;
-    
+
     /**
      * The flag indicating the vCard composer will add some "X-" properties used only in Android
      * when the formal vCard specification does not have appropriate fields for that data.
@@ -85,7 +85,7 @@
      * in vCard 3.0). Some external parsers may get confused with non-valid, non-"X-" properties.
      */
     private static final int FLAG_USE_DEFACT_PROPERTY = 0x40000000;
-    
+
     /**
      * The flag indicating some specific dialect seen in vcard of DoCoMo (one of Japanese
      * mobile careers) should be used. This flag does not include any other information like
@@ -94,10 +94,20 @@
      */
     private static final int FLAG_DOCOMO = 0x20000000;
 
+    /**
+     * The flag indicating the vCard composer use Quoted-Printable toward even "primary" types.
+     * In this context, "primary" types means "N", "FN", etc. which are usually "not" encoded
+     * into Quoted-Printable format in external exporters.
+     * This flag is useful when some target importer does not accept "primary" property values
+     * without Quoted-Printable encoding.
+     *
+     * @hide Temporaly made public. We don't strictly define "primary", so we may change the
+     * behavior around this flag in the future. Do not use this flag without any reason.
+     */
+    public static final int FLAG_USE_QP_TO_PRIMARY_PROPERTIES = 0x10000000;
     
     // VCard types
 
-
     /**
      * General vCard format with the version 2.1. Uses UTF-8 for the charset.
      * When composing a vCard entry, the US convension will be used.
@@ -114,10 +124,10 @@
     /**
      * General vCard format with the version 3.0. Uses UTF-8 for the charset.
      * 
-     * Note that this type is not fully implemented, so probably some bugs remain especially
-     * in parsing part.
-     * 
-     * TODO: implement this type.
+     * Note that this type is not fully implemented, so probably some bugs remain both in
+     * parsing and composing.
+     *
+     * TODO: implement this type correctly.
      */
     public static final int VCARD_TYPE_V30_GENERIC =
         (FLAG_V30 | NAME_ORDER_DEFAULT | FLAG_CHARSET_UTF8 |
@@ -243,6 +253,10 @@
                 (vcardType == VCARD_TYPE_DOCOMO));
     }
 
+    public static boolean usesUtf8(int vcardType) {
+        return ((vcardType & FLAG_CHARSET_UTF8) != 0);
+    }
+
     public static boolean usesShiftJis(int vcardType) {
         return ((vcardType & FLAG_CHARSET_SHIFT_JIS) != 0);
     }
@@ -257,7 +271,7 @@
     public static boolean needsToConvertPhoneticString(int vcardType) {
         return (vcardType == VCARD_TYPE_DOCOMO);
     }
-    
+
     public static int getNameOrderType(int vcardType) {
         return vcardType & NAME_ORDER_MASK;
     }
@@ -265,19 +279,27 @@
     public static boolean usesAndroidSpecificProperty(int vcardType) {
         return ((vcardType & FLAG_USE_ANDROID_PROPERTY) != 0);
     }
-    
+
     public static boolean usesDefactProperty(int vcardType) {
         return ((vcardType & FLAG_USE_DEFACT_PROPERTY) != 0);
     }
-    
+
     public static boolean onlyOneNoteFieldIsAvailable(int vcardType) {
         return vcardType == VCARD_TYPE_DOCOMO;
     }
-    
+
     public static boolean showPerformanceLog() {
         return (VCardConfig.LOG_LEVEL & VCardConfig.LOG_LEVEL_PERFORMANCE_MEASUREMENT) != 0;
     }
-    
+
+    /**
+     * @hide
+     */
+    public static boolean usesQPToPrimaryProperties(int vcardType) {
+       return (usesQuotedPrintable(vcardType) &&
+               ((vcardType & FLAG_USE_QP_TO_PRIMARY_PROPERTIES) != 0));
+    }
+
     private VCardConfig() {
     }
 }
\ No newline at end of file
diff --git a/core/java/android/pim/vcard/VCardUtils.java b/core/java/android/pim/vcard/VCardUtils.java
index ffceade..4f50103 100644
--- a/core/java/android/pim/vcard/VCardUtils.java
+++ b/core/java/android/pim/vcard/VCardUtils.java
@@ -283,7 +283,7 @@
         return builder.toString();
     }
     
-    public static boolean containsOnlyAscii(String str) {
+    public static boolean containsOnlyPrintableAscii(String str) {
         if (TextUtils.isEmpty(str)) {
             return true;
         }
@@ -299,13 +299,35 @@
         }
         return true;
     }
-    
+
+    /**
+     * This is useful when checking the string should be encoded into quoted-printable
+     * or not, which is required by vCard 2.1.
+     * See the definition of "7bit" in vCard 2.1 spec for more information.
+     */
+    public static boolean containsOnlyNonCrLfPrintableAscii(String str) {
+        if (TextUtils.isEmpty(str)) {
+            return true;
+        }
+
+        final int length = str.length();
+        final int asciiFirst = 0x20;
+        final int asciiLast = 0x126;
+        for (int i = 0; i < length; i = str.offsetByCodePoints(i, 1)) {
+            int c = str.codePointAt(i);
+            if (c < asciiFirst || asciiLast < c || c == '\n' || c == '\r') {
+                return false;
+            }
+        }
+        return true;
+    }
+
     /**
      * This is useful since vCard 3.0 often requires the ("X-") properties and groups
      * should contain only alphabets, digits, and hyphen.
      * 
      * Note: It is already known some devices (wrongly) outputs properties with characters
-     *       which should not be in the field. One example is "X-GOOGLE TALK". We appreciate
+     *       which should not be in the field. One example is "X-GOOGLE TALK". We accept
      *       such kind of input but must never output it unless the target is very specific
      *       to the device which is able to parse the malformed input. 
      */
diff --git a/core/java/android/preference/Preference.java b/core/java/android/preference/Preference.java
index cebb75c..08a2a9f 100644
--- a/core/java/android/preference/Preference.java
+++ b/core/java/android/preference/Preference.java
@@ -102,7 +102,6 @@
     private int mLayoutResId = com.android.internal.R.layout.preference;
     private int mWidgetLayoutResId;
     private boolean mHasSpecifiedLayout = false;
-    private View mLayoutView;
     
     private OnPreferenceChangeInternalListener mListener;
     
@@ -337,7 +336,7 @@
         if (!mHasSpecifiedLayout) {
             mHasSpecifiedLayout = true;
         }
-        mLayoutView = null;
+        
         mLayoutResId = layoutResId;
     }
     
@@ -361,7 +360,6 @@
      * @see #setLayoutResource(int)
      */
     public void setWidgetLayoutResource(int widgetLayoutResId) {
-        mLayoutView = null;
         mWidgetLayoutResId = widgetLayoutResId;
     }
 
@@ -389,10 +387,7 @@
      */
     public View getView(View convertView, ViewGroup parent) {
         if (convertView == null) {
-            if (mLayoutView == null) {
-                mLayoutView = onCreateView(parent);
-            }
-            convertView = mLayoutView;
+            convertView = onCreateView(parent);
         }
         onBindView(convertView);
         return convertView;
diff --git a/core/java/android/provider/Contacts.java b/core/java/android/provider/Contacts.java
index d4d3a7e..1a38166 100644
--- a/core/java/android/provider/Contacts.java
+++ b/core/java/android/provider/Contacts.java
@@ -668,12 +668,14 @@
 
             /**
              * The directory twig for this sub-table
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String CONTENT_DIRECTORY = "phones";
 
             /**
              * The default sort order for this table
+             * @deprecated see {@link android.provider.ContactsContract}
              */
             @Deprecated
             public static final String DEFAULT_SORT_ORDER = "number ASC";
@@ -1925,6 +1927,9 @@
      */
     @Deprecated
     public static final class Intents {
+        /**
+         * @deprecated see {@link android.provider.ContactsContract}
+         */
         @Deprecated
         public Intents() {
         }
diff --git a/core/java/android/provider/ContactsContract.java b/core/java/android/provider/ContactsContract.java
index 1b13f52..1d6c8ef 100644
--- a/core/java/android/provider/ContactsContract.java
+++ b/core/java/android/provider/ContactsContract.java
@@ -57,6 +57,14 @@
     public static final String CALLER_IS_SYNCADAPTER = "caller_is_syncadapter";
 
     /**
+     * A query parameter key used to specify the package that is requesting a query.
+     * This is used for restricting data based on package name.
+     *
+     * @hide
+     */
+    public static final String REQUESTING_PACKAGE_PARAM_KEY = "requesting_package";
+
+    /**
      * @hide should be removed when users are updated to refer to SyncState
      * @deprecated use SyncState instead
      */
@@ -1684,26 +1692,6 @@
         }
 
         /**
-         * Common data definition for birthdays.
-         */
-        public static final class Birthday implements DataColumnsWithJoins {
-            /**
-             * This utility class cannot be instantiated
-             */
-            private Birthday() {}
-
-            /** MIME type used when storing this in data table. */
-            public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/birthday";
-
-            /**
-             * The birthday. This must be of the form YYYY-MM-DD or YYYY-MM-DDThh:mm:ss
-             * These are xs:date and xs:dateTime
-             * <P>Type: TEXT</P>
-             */
-            public static final String BIRTHDAY = DATA1;
-        }
-
-        /**
          * Common data definition for relations.
          */
         public static final class Relation implements DataColumnsWithJoins, CommonColumns {
@@ -1747,16 +1735,34 @@
             private Event() {}
 
             /** MIME type used when storing this in data table. */
-            public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/event";
+            public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/contact_event";
 
             public static final int TYPE_ANNIVERSARY = 1;
             public static final int TYPE_OTHER = 2;
+            public static final int TYPE_BIRTHDAY = 3;
 
             /**
              * The event start date as the user entered it.
              * <P>Type: TEXT</P>
              */
             public static final String START_DATE = DATA;
+
+            /**
+             * Return the string resource that best describes the given
+             * {@link #TYPE}. Will always return a valid resource.
+             */
+            public static int getTypeResource(Integer type) {
+                if (type == null) {
+                    return com.android.internal.R.string.eventTypeOther;
+                }
+                switch (type) {
+                    case TYPE_ANNIVERSARY:
+                        return com.android.internal.R.string.eventTypeAnniversary;
+                    case TYPE_BIRTHDAY: return com.android.internal.R.string.eventTypeBirthday;
+                    case TYPE_OTHER: return com.android.internal.R.string.eventTypeOther;
+                    default: return com.android.internal.R.string.eventTypeOther;
+                }
+            }
         }
 
         /**
@@ -2125,18 +2131,16 @@
     }
 
     /**
-     * Helper methods to display FastTrack dialogs that allow users to pivot on
+     * Helper methods to display QuickContact dialogs that allow users to pivot on
      * a specific {@link Contacts} entry.
-     *
-     * @hide
      */
-    public static final class FastTrack {
+    public static final class QuickContact {
         /**
          * Action used to trigger person pivot dialog.
          * @hide
          */
-        public static final String ACTION_FAST_TRACK =
-                "com.android.contacts.action.FAST_TRACK";
+        public static final String ACTION_QUICK_CONTACT =
+                "com.android.contacts.action.QUICK_CONTACT";
 
         /**
          * Extra used to specify pivot dialog location in screen coordinates.
@@ -2158,19 +2162,19 @@
         public static final String EXTRA_EXCLUDE_MIMES = "exclude_mimes";
 
         /**
-         * Small FastTrack mode, usually presented with minimal actions.
+         * Small QuickContact mode, usually presented with minimal actions.
          */
         public static final int MODE_SMALL = 1;
 
         /**
-         * Medium FastTrack mode, includes actions and light summary describing
+         * Medium QuickContact mode, includes actions and light summary describing
          * the {@link Contacts} entry being shown. This may include social
          * status and presence details.
          */
         public static final int MODE_MEDIUM = 2;
 
         /**
-         * Large FastTrack mode, includes actions and larger, card-like summary
+         * Large QuickContact mode, includes actions and larger, card-like summary
          * of the {@link Contacts} entry being shown. This may include detailed
          * information, such as a photo.
          */
@@ -2188,7 +2192,7 @@
          *            should be centered around. In particular, if the dialog
          *            has a "callout" arrow, it will be pointed and centered
          *            around this {@link View}.
-         * @param lookupUri A {@link Contacts#CONTENT_LOOKUP_URI} style
+         * @param lookupUri A {@link ContactsContract.Contacts#CONTENT_LOOKUP_URI} style
          *            {@link Uri} that describes a specific contact to feature
          *            in this dialog.
          * @param mode Any of {@link #MODE_SMALL}, {@link #MODE_MEDIUM}, or
@@ -2199,7 +2203,7 @@
          *            already viewing the contact details card, this can be used
          *            to omit the details entry from the dialog.
          */
-        public static void showFastTrack(Context context, View target, Uri lookupUri, int mode,
+        public static void showQuickContact(Context context, View target, Uri lookupUri, int mode,
                 String[] excludeMimes) {
             // Find location and bounds of target view
             final int[] location = new int[2];
@@ -2212,7 +2216,7 @@
             rect.bottom = rect.top + target.getHeight();
 
             // Trigger with obtained rectangle
-            showFastTrack(context, rect, lookupUri, mode, excludeMimes);
+            showQuickContact(context, rect, lookupUri, mode, excludeMimes);
         }
 
         /**
@@ -2227,7 +2231,7 @@
          *            centered around, in screen coordinates. In particular, if
          *            the dialog has a "callout" arrow, it will be pointed and
          *            centered around this {@link Rect}.
-         * @param lookupUri A {@link Contacts#CONTENT_LOOKUP_URI} style
+         * @param lookupUri A {@link ContactsContract.Contacts#CONTENT_LOOKUP_URI} style
          *            {@link Uri} that describes a specific contact to feature
          *            in this dialog.
          * @param mode Any of {@link #MODE_SMALL}, {@link #MODE_MEDIUM}, or
@@ -2238,10 +2242,13 @@
          *            already viewing the contact details card, this can be used
          *            to omit the details entry from the dialog.
          */
-        public static void showFastTrack(Context context, Rect target, Uri lookupUri, int mode,
+        public static void showQuickContact(Context context, Rect target, Uri lookupUri, int mode,
                 String[] excludeMimes) {
             // Launch pivot dialog through intent for now
-            final Intent intent = new Intent(ACTION_FAST_TRACK);
+            final Intent intent = new Intent(ACTION_QUICK_CONTACT);
+            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP
+                    | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
+
             intent.setData(lookupUri);
             intent.putExtra(EXTRA_TARGET_RECT, target);
             intent.putExtra(EXTRA_MODE, mode);
diff --git a/core/java/android/provider/LiveFolders.java b/core/java/android/provider/LiveFolders.java
index 19f361b..7856bab 100644
--- a/core/java/android/provider/LiveFolders.java
+++ b/core/java/android/provider/LiveFolders.java
@@ -40,12 +40,11 @@
  * to retrieve the folder's content.</p>
  *
  * <h3>Setting up the live folder activity</h3>
- * <p>The following code sample shows how to write an activity that creates a live fodler:</p>
+ * <p>The following code sample shows how to write an activity that creates a live folder:</p>
  * <pre>
  * public static class MyLiveFolder extends Activity {
  *     public static final Uri CONTENT_URI = Uri.parse("content://my.app/live");
  *
- *     &amp;#064;Override
  *     protected void onCreate(Bundle savedInstanceState) {
  *         super.onCreate(savedInstanceState);
  *
diff --git a/core/java/android/provider/MediaStore.java b/core/java/android/provider/MediaStore.java
index 106e833..062080d 100644
--- a/core/java/android/provider/MediaStore.java
+++ b/core/java/android/provider/MediaStore.java
@@ -240,6 +240,26 @@
         private static final String[] PROJECTION = new String[] {_ID, MediaColumns.DATA};
 
         /**
+         * This method cancels the thumbnail request so clients waiting for getThumbnail will be
+         * interrupted and return immediately. Only the original process which made the getThumbnail
+         * requests can cancel their own requests.
+         *
+         * @param cr ContentResolver
+         * @param origId original image or video id. use -1 to cancel all requests.
+         * @param baseUri the base URI of requested thumbnails
+         */
+        static void cancelThumbnailRequest(ContentResolver cr, long origId, Uri baseUri) {
+            Uri cancelUri = baseUri.buildUpon().appendQueryParameter("cancel", "1")
+                    .appendQueryParameter("orig_id", String.valueOf(origId)).build();
+            Cursor c = null;
+            try {
+                c = cr.query(cancelUri, PROJECTION, null, null, null);
+            }
+            finally {
+                if (c != null) c.close();
+            }
+        }
+        /**
          * This method ensure thumbnails associated with origId are generated and decode the byte
          * stream from database (MICRO_KIND) or file (MINI_KIND).
          *
@@ -257,6 +277,7 @@
                 BitmapFactory.Options options, Uri baseUri, boolean isVideo) {
             Bitmap bitmap = null;
             String filePath = null;
+            // Log.v(TAG, "getThumbnail: origId="+origId+", kind="+kind+", isVideo="+isVideo);
             // some optimization for MICRO_KIND: if the magic is non-zero, we don't bother
             // querying MediaProvider and simply return thumbnail.
             if (kind == MICRO_KIND) {
@@ -319,24 +340,29 @@
                 // We probably run out of space, so create the thumbnail in memory.
                 if (bitmap == null) {
                     Log.v(TAG, "We probably run out of space, so create the thumbnail in memory.");
-                    int targetSize = kind == MINI_KIND ? ThumbnailUtil.THUMBNAIL_TARGET_SIZE :
-                            ThumbnailUtil.MINI_THUMB_TARGET_SIZE;
-                    int maxPixelNum = kind == MINI_KIND ? ThumbnailUtil.THUMBNAIL_MAX_NUM_PIXELS :
-                            ThumbnailUtil.MINI_THUMB_MAX_NUM_PIXELS;
+
                     Uri uri = Uri.parse(
                             baseUri.buildUpon().appendPath(String.valueOf(origId))
                                     .toString().replaceFirst("thumbnails", "media"));
-                    if (isVideo) {
+                    if (filePath == null) {
+                        if (c != null) c.close();
                         c = cr.query(uri, PROJECTION, null, null, null);
-                        if (c != null && c.moveToFirst()) {
-                            bitmap = ThumbnailUtil.createVideoThumbnail(c.getString(1));
-                            if (kind == MICRO_KIND) {
-                                bitmap = ThumbnailUtil.extractMiniThumb(bitmap,
-                                        targetSize, targetSize, ThumbnailUtil.RECYCLE_INPUT);
-                            }
+                        if (c == null || !c.moveToFirst()) {
+                            return null;
+                        }
+                        filePath = c.getString(1);
+                    }
+                    if (isVideo) {
+                        bitmap = ThumbnailUtil.createVideoThumbnail(filePath);
+                        if (kind == MICRO_KIND) {
+                            bitmap = ThumbnailUtil.extractMiniThumb(bitmap,
+                                    ThumbnailUtil.MINI_THUMB_TARGET_SIZE,
+                                    ThumbnailUtil.MINI_THUMB_TARGET_SIZE,
+                                    ThumbnailUtil.RECYCLE_INPUT);
                         }
                     } else {
-                        bitmap = ThumbnailUtil.makeBitmap(targetSize, maxPixelNum, uri, cr);
+                        bitmap = ThumbnailUtil.createImageThumbnail(cr, filePath, uri, origId,
+                                kind, false);
                     }
                 }
             } catch (SQLiteException ex) {
@@ -635,6 +661,18 @@
             }
 
             /**
+             * This method cancels the thumbnail request so clients waiting for getThumbnail will be
+             * interrupted and return immediately. Only the original process which made the getThumbnail
+             * requests can cancel their own requests.
+             *
+             * @param cr ContentResolver
+             * @param origId original image id
+             */
+            public static void cancelThumbnailRequest(ContentResolver cr, long origId) {
+                InternalThumbnails.cancelThumbnailRequest(cr, origId, EXTERNAL_CONTENT_URI);
+            }
+
+            /**
              * This method checks if the thumbnails of the specified image (origId) has been created.
              * It will be blocked until the thumbnails are generated.
              *
@@ -1552,6 +1590,18 @@
          */
         public static class Thumbnails implements BaseColumns {
             /**
+             * This method cancels the thumbnail request so clients waiting for getThumbnail will be
+             * interrupted and return immediately. Only the original process which made the getThumbnail
+             * requests can cancel their own requests.
+             *
+             * @param cr ContentResolver
+             * @param origId original video id
+             */
+            public static void cancelThumbnailRequest(ContentResolver cr, long origId) {
+                InternalThumbnails.cancelThumbnailRequest(cr, origId, EXTERNAL_CONTENT_URI);
+            }
+
+            /**
              * This method checks if the thumbnails of the specified image (origId) has been created.
              * It will be blocked until the thumbnails are generated.
              *
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 1cd4506..2ca17f6 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -464,7 +464,7 @@
                 resolver.insert(uri, values);
                 return true;
             } catch (SQLException e) {
-                Log.e(TAG, "Can't set key " + name + " in " + uri, e);
+                Log.w(TAG, "Can't set key " + name + " in " + uri, e);
                 return false;
             }
         }
@@ -501,7 +501,7 @@
                     mValues.put(name, value);
                 } catch (SQLException e) {
                     // SQL error: return null, but don't cache it.
-                    Log.e(TAG, "Can't get key " + name + " from " + mUri, e);
+                    Log.w(TAG, "Can't get key " + name + " from " + mUri, e);
                 } finally {
                     if (c != null) c.close();
                 }
@@ -3191,6 +3191,13 @@
                 "vending_pd_resend_frequency_ms";
 
         /**
+         * Time before an asset in the 'DOWNLOADING' state is considered ready
+         * for an install kick on the client.
+         */
+        public static final String VENDING_DOWNLOADING_KICK_TIMEOUT_MS =
+                "vending_downloading_kick_ms";
+
+        /**
          * Size of buffer in bytes for Vending to use when reading cache files.
          */
         public static final String VENDING_DISK_INPUT_BUFFER_BYTES =
@@ -3739,7 +3746,7 @@
                         // The stored URL is bad...  ignore it.
                     } catch (IllegalArgumentException e) {
                         // Column not found
-                        Log.e(TAG, "Intent column not found", e);
+                        Log.w(TAG, "Intent column not found", e);
                     }
                 }
             } finally {
diff --git a/core/java/android/server/BluetoothA2dpService.java b/core/java/android/server/BluetoothA2dpService.java
index 0fc2e7e..d61b42f 100644
--- a/core/java/android/server/BluetoothA2dpService.java
+++ b/core/java/android/server/BluetoothA2dpService.java
@@ -112,6 +112,13 @@
                     Message msg = Message.obtain(mHandler, MESSAGE_CONNECT_TO, device);
                     mHandler.sendMessageDelayed(msg, 6000);
                 }
+            } else if (action.equals(BluetoothDevice.ACTION_ACL_DISCONNECTED)) {
+                synchronized (this) {
+                    if (mAudioDevices.containsKey(device)) {
+                        int state = mAudioDevices.get(device);
+                        handleSinkStateChange(device, state, BluetoothA2dp.STATE_DISCONNECTED);
+                    }
+                }
             }
         }
     };
@@ -135,6 +142,7 @@
         mIntentFilter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
         mIntentFilter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);
         mIntentFilter.addAction(BluetoothDevice.ACTION_ACL_CONNECTED);
+        mIntentFilter.addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED);
         mContext.registerReceiver(mReceiver, mIntentFilter);
 
         mAudioDevices = new HashMap<BluetoothDevice, Integer>();
@@ -325,6 +333,50 @@
         }
     }
 
+    public synchronized boolean suspendSink(BluetoothDevice device) {
+        mContext.enforceCallingOrSelfPermission(BLUETOOTH_ADMIN_PERM,
+                            "Need BLUETOOTH_ADMIN permission");
+        if (DBG) log("suspendSink(" + device + ")");
+        if (device == null || mAudioDevices == null) {
+            return false;
+        }
+        String path = mBluetoothService.getObjectPathFromAddress(device.getAddress());
+        Integer state = mAudioDevices.get(device);
+        if (path == null || state == null) {
+            return false;
+        }
+        switch (state.intValue()) {
+        case BluetoothA2dp.STATE_CONNECTED:
+            return true;
+        case BluetoothA2dp.STATE_PLAYING:
+            return suspendSinkNative(path);
+        default:
+            return false;
+        }
+    }
+
+    public synchronized boolean resumeSink(BluetoothDevice device) {
+        mContext.enforceCallingOrSelfPermission(BLUETOOTH_ADMIN_PERM,
+                            "Need BLUETOOTH_ADMIN permission");
+        if (DBG) log("resumeSink(" + device + ")");
+        if (device == null || mAudioDevices == null) {
+            return false;
+        }
+        String path = mBluetoothService.getObjectPathFromAddress(device.getAddress());
+        Integer state = mAudioDevices.get(device);
+        if (path == null || state == null) {
+            return false;
+        }
+        switch (state.intValue()) {
+        case BluetoothA2dp.STATE_PLAYING:
+            return true;
+        case BluetoothA2dp.STATE_CONNECTED:
+            return resumeSinkNative(path);
+        default:
+            return false;
+        }
+    }
+
     public synchronized BluetoothDevice[] getConnectedSinks() {
         mContext.enforceCallingOrSelfPermission(BLUETOOTH_PERM, "Need BLUETOOTH permission");
         Set<BluetoothDevice> sinks = lookupSinksMatchingStates(
@@ -445,5 +497,7 @@
     private native void cleanupNative();
     private synchronized native boolean connectSinkNative(String path);
     private synchronized native boolean disconnectSinkNative(String path);
+    private synchronized native boolean suspendSinkNative(String path);
+    private synchronized native boolean resumeSinkNative(String path);
     private synchronized native Object []getSinkPropertiesNative(String path);
 }
diff --git a/core/java/android/server/BluetoothEventLoop.java b/core/java/android/server/BluetoothEventLoop.java
index 037e9d3..0152223 100644
--- a/core/java/android/server/BluetoothEventLoop.java
+++ b/core/java/android/server/BluetoothEventLoop.java
@@ -403,9 +403,13 @@
             mBluetoothService.cancelPairingUserInput(address);
             return null;
         }
-        // Set state to BONDING, for incoming connections it will be set here.
-        // For outgoing connections, it gets set when call createBond.
-        mBluetoothService.getBondState().setBondState(address, BluetoothDevice.BOND_BONDING);
+        // Set state to BONDING. For incoming connections it will be set here.
+        // For outgoing connections, it gets set when we call createBond.
+        // Also set it only when the state is not already Bonded, we can sometimes
+        // get an authorization request from the remote end if it doesn't have the link key
+        // while we still have it.
+        if (mBluetoothService.getBondState().getBondState(address) != BluetoothDevice.BOND_BONDED)
+            mBluetoothService.getBondState().setBondState(address, BluetoothDevice.BOND_BONDING);
         return address;
     }
 
diff --git a/core/java/android/server/BluetoothService.java b/core/java/android/server/BluetoothService.java
index 4e926a6..edf6d10 100644
--- a/core/java/android/server/BluetoothService.java
+++ b/core/java/android/server/BluetoothService.java
@@ -757,9 +757,7 @@
         if (!BluetoothAdapter.checkBluetoothAddress(address)) {
             return null;
         }
-        Map <String, String> properties = mDeviceProperties.get(address);
-        if (properties != null) return properties.get("Name");
-        return null;
+        return getRemoteDeviceProperty(address, "Name");
     }
 
     /**
diff --git a/core/java/android/server/search/SearchManagerService.java b/core/java/android/server/search/SearchManagerService.java
index 5e0b3d2..78ea2e3 100644
--- a/core/java/android/server/search/SearchManagerService.java
+++ b/core/java/android/server/search/SearchManagerService.java
@@ -247,14 +247,13 @@
             ComponentName launchActivity,
             Bundle appSearchData,
             ISearchManagerCallback searchManagerCallback,
-            boolean globalSearch,
             int ident) {
         getSearchDialog().startSearch(
                 query,
                 false,
                 launchActivity,
                 appSearchData,
-                globalSearch,
+                false,
                 searchManagerCallback,
                 ident,
                 true); // triger search after launching
diff --git a/core/java/android/service/wallpaper/WallpaperSettingsActivity.java b/core/java/android/service/wallpaper/WallpaperSettingsActivity.java
index 501947da..cde5ab25 100644
--- a/core/java/android/service/wallpaper/WallpaperSettingsActivity.java
+++ b/core/java/android/service/wallpaper/WallpaperSettingsActivity.java
@@ -24,6 +24,7 @@
  * Base class for activities that will be used to configure the settings of
  * a wallpaper.  You should derive from this class to allow it to select the
  * proper theme of the activity depending on how it is being used.
+ * @hide Live Wallpaper
  */
 public class WallpaperSettingsActivity extends PreferenceActivity {
     /**
diff --git a/core/java/android/syncml/package.html b/core/java/android/syncml/package.html
deleted file mode 100644
index cb4ca46..0000000
--- a/core/java/android/syncml/package.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<HTML>
-<BODY>
-Support classes for SyncML.
-{@hide}
-</BODY>
-</HTML>
\ No newline at end of file
diff --git a/core/java/android/syncml/pim/PropertyNode.java b/core/java/android/syncml/pim/PropertyNode.java
deleted file mode 100644
index 3a5c994..0000000
--- a/core/java/android/syncml/pim/PropertyNode.java
+++ /dev/null
@@ -1,324 +0,0 @@
-/*
- * Copyright (C) 2007 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.
- */
-
-package android.syncml.pim;
-
-import android.content.ContentValues;
-
-import org.apache.commons.codec.binary.Base64;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.Map.Entry;
-import java.util.regex.Pattern;
-
-@Deprecated
-public class PropertyNode {
-
-    public String propName;
-
-    public String propValue;
-
-    public List<String> propValue_vector;
-
-    /** Store value as byte[],after decode.
-     * Used when propValue is encoded by something like BASE64, QUOTED-PRINTABLE, etc.
-     */
-    public byte[] propValue_bytes;
-
-    /** param store: key=paramType, value=paramValue
-     * Note that currently PropertyNode class does not support multiple param-values
-     * defined in vCard 3.0 (See also RFC 2426). multiple-values are stored as
-     * one String value like "A,B", not ["A", "B"]...
-     * TODO: fix this. 
-     */
-    public ContentValues paramMap;
-
-    /** Only for TYPE=??? param store. */
-    public Set<String> paramMap_TYPE;
-
-    /** Store group values. Used only in VCard. */
-    public Set<String> propGroupSet;
-    
-    public PropertyNode() {
-        propName = "";
-        propValue = "";
-        propValue_vector = new ArrayList<String>();
-        paramMap = new ContentValues();
-        paramMap_TYPE = new HashSet<String>();
-        propGroupSet = new HashSet<String>();
-    }
-    
-    public PropertyNode(
-            String propName, String propValue, List<String> propValue_vector,
-            byte[] propValue_bytes, ContentValues paramMap, Set<String> paramMap_TYPE,
-            Set<String> propGroupSet) {
-        if (propName != null) {
-            this.propName = propName;
-        } else {
-            this.propName = "";
-        }
-        if (propValue != null) {
-            this.propValue = propValue;
-        } else {
-            this.propValue = "";
-        }
-        if (propValue_vector != null) {
-            this.propValue_vector = propValue_vector;
-        } else {
-            this.propValue_vector = new ArrayList<String>();
-        }
-        this.propValue_bytes = propValue_bytes;
-        if (paramMap != null) {
-            this.paramMap = paramMap;
-        } else {
-            this.paramMap = new ContentValues();
-        }
-        if (paramMap_TYPE != null) {
-            this.paramMap_TYPE = paramMap_TYPE;
-        } else {
-            this.paramMap_TYPE = new HashSet<String>();
-        }
-        if (propGroupSet != null) {
-            this.propGroupSet = propGroupSet;
-        } else {
-            this.propGroupSet = new HashSet<String>();
-        }
-    }
-    
-    @Override
-    public boolean equals(Object obj) {
-        if (!(obj instanceof PropertyNode)) {
-            return false;
-        }
-        
-        PropertyNode node = (PropertyNode)obj;
-        
-        if (propName == null || !propName.equals(node.propName)) {
-            return false;
-        } else if (!paramMap.equals(node.paramMap)) {
-            return false;
-        } else if (!paramMap_TYPE.equals(node.paramMap_TYPE)) {
-            return false;
-        } else if (!propGroupSet.equals(node.propGroupSet)) {
-            return false;
-        }
-        
-        if (propValue_bytes != null && Arrays.equals(propValue_bytes, node.propValue_bytes)) {
-            return true;
-        } else {
-            // Log.d("@@@", propValue + ", " + node.propValue);
-            if (!propValue.equals(node.propValue)) {
-                return false;
-            }
-
-            // The value in propValue_vector is not decoded even if it should be
-            // decoded by BASE64 or QUOTED-PRINTABLE. When the size of propValue_vector
-            // is 1, the encoded value is stored in propValue, so we do not have to
-            // check it.
-            return (propValue_vector.equals(node.propValue_vector) ||
-                    propValue_vector.size() == 1 ||
-                    node.propValue_vector.size() == 1);
-        }
-    }
-    
-    @Override
-    public String toString() {
-        StringBuilder builder = new StringBuilder();
-        builder.append("propName: ");
-        builder.append(propName);
-        builder.append(", paramMap: ");
-        builder.append(paramMap.toString());
-        builder.append(", propmMap_TYPE: ");
-        builder.append(paramMap_TYPE.toString());
-        builder.append(", propGroupSet: ");
-        builder.append(propGroupSet.toString());
-        if (propValue_vector != null && propValue_vector.size() > 1) {
-            builder.append(", propValue_vector size: ");
-            builder.append(propValue_vector.size());
-        }
-        if (propValue_bytes != null) {
-            builder.append(", propValue_bytes size: ");
-            builder.append(propValue_bytes.length);
-        }
-        builder.append(", propValue: ");
-        builder.append(propValue);
-        return builder.toString();
-    }
-    
-    /**
-     * Encode this object into a string which can be decoded. 
-     */
-    public String encode() {
-        // PropertyNode#toString() is for reading, not for parsing in the future.
-        // We construct appropriate String here.
-        StringBuilder builder = new StringBuilder();
-        if (propName.length() > 0) {
-            builder.append("propName:[");
-            builder.append(propName);
-            builder.append("],");
-        }
-        int size = propGroupSet.size();
-        if (size > 0) {
-            Set<String> set = propGroupSet;
-            builder.append("propGroup:[");
-            int i = 0;
-            for (String group : set) {
-                // We do not need to double quote groups.
-                // group        = 1*(ALPHA / DIGIT / "-")
-                builder.append(group);
-                if (i < size - 1) {
-                    builder.append(",");
-                }
-                i++;
-            }
-            builder.append("],");
-        }
-
-        if (paramMap.size() > 0 || paramMap_TYPE.size() > 0) {
-            ContentValues values = paramMap;
-            builder.append("paramMap:[");
-            size = paramMap.size(); 
-            int i = 0;
-            for (Entry<String, Object> entry : values.valueSet()) {
-                // Assuming param-key does not contain NON-ASCII nor symbols.
-                //
-                // According to vCard 3.0:
-                // param-name   = iana-token / x-name
-                builder.append(entry.getKey());
-
-                // param-value may contain any value including NON-ASCIIs.
-                // We use the following replacing rule.
-                // \ -> \\
-                // , -> \,
-                // In String#replaceAll(), "\\\\" means a single backslash.
-                builder.append("=");
-                builder.append(entry.getValue().toString()
-                        .replaceAll("\\\\", "\\\\\\\\")
-                        .replaceAll(",", "\\\\,"));
-                if (i < size -1) {
-                    builder.append(",");
-                }
-                i++;
-            }
-
-            Set<String> set = paramMap_TYPE;
-            size = paramMap_TYPE.size();
-            if (i > 0 && size > 0) {
-                builder.append(",");
-            }
-            i = 0;
-            for (String type : set) {
-                builder.append("TYPE=");
-                builder.append(type
-                        .replaceAll("\\\\", "\\\\\\\\")
-                        .replaceAll(",", "\\\\,"));
-                if (i < size - 1) {
-                    builder.append(",");
-                }
-                i++;
-            }
-            builder.append("],");
-        }
-
-        size = propValue_vector.size();
-        if (size > 0) {
-            builder.append("propValue:[");
-            List<String> list = propValue_vector;
-            for (int i = 0; i < size; i++) {
-                builder.append(list.get(i)
-                        .replaceAll("\\\\", "\\\\\\\\")
-                        .replaceAll(",", "\\\\,"));
-                if (i < size -1) {
-                    builder.append(",");
-                }
-            }
-            builder.append("],");
-        }
-
-        return builder.toString();
-    }
-
-    public static PropertyNode decode(String encodedString) {
-        PropertyNode propertyNode = new PropertyNode();
-        String trimed = encodedString.trim();
-        if (trimed.length() == 0) {
-            return propertyNode;
-        }
-        String[] elems = trimed.split("],");
-        
-        for (String elem : elems) {
-            int index = elem.indexOf('[');
-            String name = elem.substring(0, index - 1);
-            Pattern pattern = Pattern.compile("(?<!\\\\),");
-            String[] values = pattern.split(elem.substring(index + 1), -1);
-            if (name.equals("propName")) {
-                propertyNode.propName = values[0];
-            } else if (name.equals("propGroupSet")) {
-                for (String value : values) {
-                    propertyNode.propGroupSet.add(value);
-                }
-            } else if (name.equals("paramMap")) {
-                ContentValues paramMap = propertyNode.paramMap;
-                Set<String> paramMap_TYPE = propertyNode.paramMap_TYPE;
-                for (String value : values) {
-                    String[] tmp = value.split("=", 2);
-                    String mapKey = tmp[0];
-                    // \, -> ,
-                    // \\ -> \
-                    // In String#replaceAll(), "\\\\" means a single backslash.
-                    String mapValue =
-                        tmp[1].replaceAll("\\\\,", ",").replaceAll("\\\\\\\\", "\\\\");
-                    if (mapKey.equalsIgnoreCase("TYPE")) {
-                        paramMap_TYPE.add(mapValue);
-                    } else {
-                        paramMap.put(mapKey, mapValue);
-                    }
-                }
-            } else if (name.equals("propValue")) {
-                StringBuilder builder = new StringBuilder();
-                List<String> list = propertyNode.propValue_vector;
-                int length = values.length;
-                for (int i = 0; i < length; i++) {
-                    String normValue = values[i]
-                                              .replaceAll("\\\\,", ",")
-                                              .replaceAll("\\\\\\\\", "\\\\");
-                    list.add(normValue);
-                    builder.append(normValue);
-                    if (i < length - 1) {
-                        builder.append(";");
-                    }
-                }
-                propertyNode.propValue = builder.toString();
-            }
-        }
-        
-        // At this time, QUOTED-PRINTABLE is already decoded to Java String.
-        // We just need to decode BASE64 String to binary.
-        String encoding = propertyNode.paramMap.getAsString("ENCODING");
-        if (encoding != null &&
-                (encoding.equalsIgnoreCase("BASE64") ||
-                        encoding.equalsIgnoreCase("B"))) {
-            propertyNode.propValue_bytes =
-                Base64.decodeBase64(propertyNode.propValue_vector.get(0).getBytes());
-        }
-        
-        return propertyNode;
-    }
-}
diff --git a/core/java/android/syncml/pim/VBuilder.java b/core/java/android/syncml/pim/VBuilder.java
deleted file mode 100644
index b6cb674..0000000
--- a/core/java/android/syncml/pim/VBuilder.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2007 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.
- */
-
-package android.syncml.pim;
-
-import java.util.List;
-
-@Deprecated
-public interface VBuilder {
-    void start();
-
-    void end();
-
-    /**
-     * @param type
-     *            VXX <br>
-     *            BEGIN:VXX
-     */
-    void startRecord(String type);
-
-    /** END:VXX */
-    void endRecord();
-
-    void startProperty();
-
-    void endProperty();
-
-    /**
-     * @param group 
-     */
-    void propertyGroup(String group);
-    
-    /**
-     * @param name
-     *            N <br>
-     *            N
-     */
-    void propertyName(String name);
-
-    /**
-     * @param type
-     *            LANGUAGE \ ENCODING <br>
-     *            ;LANGUage= \ ;ENCODING=
-     */
-    void propertyParamType(String type);
-
-    /**
-     * @param value
-     *            FR-EN \ GBK <br>
-     *            FR-EN \ GBK
-     */
-    void propertyParamValue(String value);
-
-    void propertyValues(List<String> values);
-}
diff --git a/core/java/android/syncml/pim/VBuilderCollection.java b/core/java/android/syncml/pim/VBuilderCollection.java
deleted file mode 100644
index 06e3100..0000000
--- a/core/java/android/syncml/pim/VBuilderCollection.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright (C) 2009 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.
- */
-
-package android.syncml.pim;
-
-import java.util.Collection;
-import java.util.List;
-
-@Deprecated
-public class VBuilderCollection implements VBuilder {
-
-    private final Collection<VBuilder> mVBuilderCollection;
-    
-    public VBuilderCollection(Collection<VBuilder> vBuilderCollection) {
-        mVBuilderCollection = vBuilderCollection; 
-    }
-    
-    public Collection<VBuilder> getVBuilderCollection() {
-        return mVBuilderCollection;
-    }
-    
-    public void start() {
-        for (VBuilder builder : mVBuilderCollection) {
-            builder.start();
-        }
-    }
-    
-    public void end() {
-        for (VBuilder builder : mVBuilderCollection) {
-            builder.end();
-        }
-    }
-
-    public void startRecord(String type) {
-        for (VBuilder builder : mVBuilderCollection) {
-            builder.startRecord(type);
-        }
-    }
-    
-    public void endRecord() {
-        for (VBuilder builder : mVBuilderCollection) {
-            builder.endRecord();
-        }
-    }
-
-    public void startProperty() {
-        for (VBuilder builder : mVBuilderCollection) {
-            builder.startProperty();
-        }
-    }
-
-    
-    public void endProperty() {
-        for (VBuilder builder : mVBuilderCollection) {
-            builder.endProperty();
-        }
-    }
-
-    public void propertyGroup(String group) {
-        for (VBuilder builder : mVBuilderCollection) {
-            builder.propertyGroup(group);
-        }
-    }
-
-    public void propertyName(String name) {
-        for (VBuilder builder : mVBuilderCollection) {
-            builder.propertyName(name);
-        }
-    }
-
-    public void propertyParamType(String type) {
-        for (VBuilder builder : mVBuilderCollection) {
-            builder.propertyParamType(type);
-        }
-    }
-
-    public void propertyParamValue(String value) {
-        for (VBuilder builder : mVBuilderCollection) {
-            builder.propertyParamValue(value);
-        }
-    }
-
-    public void propertyValues(List<String> values) {
-        for (VBuilder builder : mVBuilderCollection) {
-            builder.propertyValues(values);
-        }
-    }
-}
diff --git a/core/java/android/syncml/pim/VDataBuilder.java b/core/java/android/syncml/pim/VDataBuilder.java
deleted file mode 100644
index db8a299..0000000
--- a/core/java/android/syncml/pim/VDataBuilder.java
+++ /dev/null
@@ -1,312 +0,0 @@
-/*
- * Copyright (C) 2007 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.
- */
-
-package android.syncml.pim;
-
-import android.content.ContentValues;
-import android.util.CharsetUtils;
-import android.util.Log;
-
-import org.apache.commons.codec.DecoderException;
-import org.apache.commons.codec.binary.Base64;
-import org.apache.commons.codec.net.QuotedPrintableCodec;
-
-import java.io.UnsupportedEncodingException;
-import java.nio.ByteBuffer;
-import java.nio.charset.Charset;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Store the parse result to custom datastruct: VNode, PropertyNode
- * Maybe several vcard instance, so use vNodeList to store.
- * VNode: standy by a vcard instance.
- * PropertyNode: standy by a property line of a card.
- */
-@Deprecated
-public class VDataBuilder implements VBuilder {
-    static private String LOG_TAG = "VDATABuilder"; 
-    
-    /**
-     * If there's no other information available, this class uses this charset for encoding
-     * byte arrays.
-     */
-    static public String DEFAULT_CHARSET = "UTF-8"; 
-    
-    /** type=VNode */
-    public List<VNode> vNodeList = new ArrayList<VNode>();
-    private int mNodeListPos = 0;
-    private VNode mCurrentVNode;
-    private PropertyNode mCurrentPropNode;
-    private String mCurrentParamType;
-    
-    /**
-     * The charset using which VParser parses the text.
-     */
-    private String mSourceCharset;
-    
-    /**
-     * The charset with which byte array is encoded to String.
-     */
-    private String mTargetCharset;
-    
-    private boolean mStrictLineBreakParsing;
-    
-    public VDataBuilder() {
-        this(VParser.DEFAULT_CHARSET, DEFAULT_CHARSET, false);
-    }
-
-    public VDataBuilder(String charset, boolean strictLineBreakParsing) {
-        this(null, charset, strictLineBreakParsing);
-    }
-    
-    /**
-     * @hide sourceCharset is temporal. 
-     */
-    public VDataBuilder(String sourceCharset, String targetCharset,
-            boolean strictLineBreakParsing) {
-        if (sourceCharset != null) {
-            mSourceCharset = sourceCharset;
-        } else {
-            mSourceCharset = VParser.DEFAULT_CHARSET;
-        }
-        if (targetCharset != null) {
-            mTargetCharset = targetCharset;
-        } else {
-            mTargetCharset = DEFAULT_CHARSET;
-        }
-        mStrictLineBreakParsing = strictLineBreakParsing;
-    }
-
-    public void start() {
-    }
-
-    public void end() {
-    }
-
-    // Note: I guess that this code assumes the Record may nest like this:
-    // START:VPOS
-    // ...
-    // START:VPOS2
-    // ...
-    // END:VPOS2
-    // ...
-    // END:VPOS
-    //
-    // However the following code has a bug.
-    // When error occurs after calling startRecord(), the entry which is probably
-    // the cause of the error remains to be in vNodeList, while endRecord() is not called.
-    //
-    // I leave this code as is since I'm not familiar with vcalendar specification.
-    // But I believe we should refactor this code in the future.
-    // Until this, the last entry has to be removed when some error occurs.
-    public void startRecord(String type) {
-        
-        VNode vnode = new VNode();
-        vnode.parseStatus = 1;
-        vnode.VName = type;
-        // I feel this should be done in endRecord(), but it cannot be done because of
-        // the reason above.
-        vNodeList.add(vnode);
-        mNodeListPos = vNodeList.size() - 1;
-        mCurrentVNode = vNodeList.get(mNodeListPos);
-    }
-
-    public void endRecord() {
-        VNode endNode = vNodeList.get(mNodeListPos);
-        endNode.parseStatus = 0;
-        while(mNodeListPos > 0){
-            mNodeListPos--;
-            if((vNodeList.get(mNodeListPos)).parseStatus == 1)
-                break;
-        }
-        mCurrentVNode = vNodeList.get(mNodeListPos);
-    }
-
-    public void startProperty() {
-        mCurrentPropNode = new PropertyNode();
-    }
-
-    public void endProperty() {
-        mCurrentVNode.propList.add(mCurrentPropNode);
-    }
-    
-    public void propertyName(String name) {
-        mCurrentPropNode.propName = name;
-    }
-
-    // Used only in VCard.
-    public void propertyGroup(String group) {
-        mCurrentPropNode.propGroupSet.add(group);
-    }
-    
-    public void propertyParamType(String type) {
-        mCurrentParamType = type;
-    }
-
-    public void propertyParamValue(String value) {
-        if (mCurrentParamType == null ||
-                mCurrentParamType.equalsIgnoreCase("TYPE")) {
-            mCurrentPropNode.paramMap_TYPE.add(value);
-        } else {
-            mCurrentPropNode.paramMap.put(mCurrentParamType, value);
-        }
-
-        mCurrentParamType = null;
-    }
-
-    private String encodeString(String originalString, String targetCharset) {
-        if (mSourceCharset.equalsIgnoreCase(targetCharset)) {
-            return originalString;
-        }
-        Charset charset = Charset.forName(mSourceCharset);
-        ByteBuffer byteBuffer = charset.encode(originalString);
-        // byteBuffer.array() "may" return byte array which is larger than
-        // byteBuffer.remaining(). Here, we keep on the safe side.
-        byte[] bytes = new byte[byteBuffer.remaining()];
-        byteBuffer.get(bytes);
-        try {
-            return new String(bytes, targetCharset);
-        } catch (UnsupportedEncodingException e) {
-            Log.e(LOG_TAG, "Failed to encode: charset=" + targetCharset);
-            return new String(bytes);
-        }
-    }
-    
-    private String handleOneValue(String value, String targetCharset, String encoding) {
-        if (encoding != null) {
-            if (encoding.equals("BASE64") || encoding.equals("B")) {
-                // Assume BASE64 is used only when the number of values is 1.
-                mCurrentPropNode.propValue_bytes =
-                    Base64.decodeBase64(value.getBytes());
-                return value;
-            } else if (encoding.equals("QUOTED-PRINTABLE")) {
-                String quotedPrintable = value
-                .replaceAll("= ", " ").replaceAll("=\t", "\t");
-                String[] lines;
-                if (mStrictLineBreakParsing) {
-                    lines = quotedPrintable.split("\r\n");
-                } else {
-                    StringBuilder builder = new StringBuilder();
-                    int length = quotedPrintable.length();
-                    ArrayList<String> list = new ArrayList<String>();
-                    for (int i = 0; i < length; i++) {
-                        char ch = quotedPrintable.charAt(i);
-                        if (ch == '\n') {
-                            list.add(builder.toString());
-                            builder = new StringBuilder();
-                        } else if (ch == '\r') {
-                            list.add(builder.toString());
-                            builder = new StringBuilder();
-                            if (i < length - 1) {
-                                char nextCh = quotedPrintable.charAt(i + 1);
-                                if (nextCh == '\n') {
-                                    i++;
-                                }
-                            }
-                        } else {
-                            builder.append(ch);
-                        }
-                    }
-                    String finalLine = builder.toString();
-                    if (finalLine.length() > 0) {
-                        list.add(finalLine);
-                    }
-                    lines = list.toArray(new String[0]);
-                }
-                StringBuilder builder = new StringBuilder();
-                for (String line : lines) {
-                    if (line.endsWith("=")) {
-                        line = line.substring(0, line.length() - 1);
-                    }
-                    builder.append(line);
-                }
-                byte[] bytes;
-                try {
-                    bytes = builder.toString().getBytes(mSourceCharset);
-                } catch (UnsupportedEncodingException e1) {
-                    Log.e(LOG_TAG, "Failed to encode: charset=" + mSourceCharset);
-                    bytes = builder.toString().getBytes();
-                }
-                
-                try {
-                    bytes = QuotedPrintableCodec.decodeQuotedPrintable(bytes);
-                } catch (DecoderException e) {
-                    Log.e(LOG_TAG, "Failed to decode quoted-printable: " + e);
-                    return "";
-                }
-
-                try {
-                    return new String(bytes, targetCharset);
-                } catch (UnsupportedEncodingException e) {
-                    Log.e(LOG_TAG, "Failed to encode: charset=" + targetCharset);
-                    return new String(bytes);
-                }
-            }
-            // Unknown encoding. Fall back to default.
-        }
-        return encodeString(value, targetCharset);
-    }
-    
-    public void propertyValues(List<String> values) {
-        if (values == null || values.size() == 0) {
-            mCurrentPropNode.propValue_bytes = null;
-            mCurrentPropNode.propValue_vector.clear();
-            mCurrentPropNode.propValue_vector.add("");
-            mCurrentPropNode.propValue = "";
-            return;
-        }
-        
-        ContentValues paramMap = mCurrentPropNode.paramMap;
-        
-        String targetCharset = CharsetUtils.nameForDefaultVendor(paramMap.getAsString("CHARSET")); 
-        String encoding = paramMap.getAsString("ENCODING"); 
-        
-        if (targetCharset == null || targetCharset.length() == 0) {
-            targetCharset = mTargetCharset;
-        }
-        
-        for (String value : values) {
-            mCurrentPropNode.propValue_vector.add(
-                    handleOneValue(value, targetCharset, encoding));
-        }
-
-        mCurrentPropNode.propValue = listToString(mCurrentPropNode.propValue_vector);
-    }
-
-    private String listToString(List<String> list){
-        int size = list.size();
-        if (size > 1) {
-            StringBuilder typeListB = new StringBuilder();
-            for (String type : list) {
-                typeListB.append(type).append(";");
-            }
-            int len = typeListB.length();
-            if (len > 0 && typeListB.charAt(len - 1) == ';') {
-                return typeListB.substring(0, len - 1);
-            }
-            return typeListB.toString();
-        } else if (size == 1) {
-            return list.get(0);
-        } else {
-            return "";
-        }
-    }
-    
-    public String getResult(){
-        return null;
-    }
-}
diff --git a/core/java/android/syncml/pim/VNode.java b/core/java/android/syncml/pim/VNode.java
deleted file mode 100644
index 378a9d1..0000000
--- a/core/java/android/syncml/pim/VNode.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2007 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.
- */
-
-package android.syncml.pim;
-
-import java.util.ArrayList;
-
-@Deprecated
-public class VNode {
-
-    public String VName;
-
-    public ArrayList<PropertyNode> propList = new ArrayList<PropertyNode>();
-
-    /** 0:parse over. 1:parsing. */
-    public int parseStatus = 1;
-}
diff --git a/core/java/android/syncml/pim/VParser.java b/core/java/android/syncml/pim/VParser.java
deleted file mode 100644
index fc302f1..0000000
--- a/core/java/android/syncml/pim/VParser.java
+++ /dev/null
@@ -1,740 +0,0 @@
-/*
- * Copyright (C) 2007 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.
- */
-
-package android.syncml.pim;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.UnsupportedEncodingException;
-
-/**
- * This interface is used to parse the V format files, such as VCard & VCal
- */
-@Deprecated
-abstract public class VParser {
-    // Assume that "iso-8859-1" is able to map "all" 8bit characters to some unicode and
-    // decode the unicode to the original charset. If not, this setting will cause some bug. 
-    public static String DEFAULT_CHARSET = "iso-8859-1";
-
-    /**
-     * The buffer used to store input stream
-     */
-    protected String mBuffer = null;
-
-    /** The builder to build parsed data */
-    protected VBuilder mBuilder = null;
-
-    /** The encoding type */
-    protected String mEncoding = null;
-
-    protected final int PARSE_ERROR = -1;
-
-    protected final String mDefaultEncoding = "8BIT";
-
-    /**
-     * If offset reach '\r\n' return 2. Else return PARSE_ERROR.
-     */
-    protected int parseCrlf(int offset) {
-        if (offset >= mBuffer.length())
-            return PARSE_ERROR;
-        char ch = mBuffer.charAt(offset);
-        if (ch == '\r') {
-            offset++;
-            ch = mBuffer.charAt(offset);
-            if (ch == '\n') {
-                return 2;
-            }
-        }
-        return PARSE_ERROR;
-    }
-
-    /**
-     * Parse the given stream
-     *
-     * @param is
-     *            The source to parse.
-     * @param encoding
-     *            The encoding type.
-     * @param builder
-     *            The v builder which used to construct data.
-     * @return Return true for success, otherwise false.
-     * @throws IOException
-     */
-    public boolean parse(InputStream is, String encoding, VBuilder builder)
-            throws IOException {
-        setInputStream(is, encoding);
-        mBuilder = builder;
-        int ret = 0, offset = 0, sum = 0;
-
-        if (mBuilder != null) {
-            mBuilder.start();
-        }
-        for (;;) {
-            ret = parseVFile(offset); // for next property length
-            if (PARSE_ERROR == ret) {
-                break;
-            } else {
-                offset += ret;
-                sum += ret;
-            }
-        }
-        if (mBuilder != null) {
-            mBuilder.end();
-        }
-        return (mBuffer.length() == sum);
-    }
-
-    /**
-     * Parse the given stream with the default encoding.
-     * 
-     * @param is
-     *            The source to parse.
-     * @param builder
-     *            The v builder which used to construct data.
-     * @return Return true for success, otherwise false.
-     * @throws IOException
-     */
-    public boolean parse(InputStream is, VBuilder builder) throws IOException {
-        return parse(is, DEFAULT_CHARSET, builder);
-    }
-    
-    /**
-     * Copy the content of input stream and filter the "folding"
-     */
-    protected void setInputStream(InputStream is, String encoding)
-            throws UnsupportedEncodingException {
-        InputStreamReader reader = new InputStreamReader(is, encoding);
-        StringBuilder b = new StringBuilder();
-
-        int ch;
-        try {
-            while ((ch = reader.read()) != -1) {
-                if (ch == '\r') {
-                    ch = reader.read();
-                    if (ch == '\n') {
-                        ch = reader.read();
-                        if (ch == ' ' || ch == '\t') {
-                            b.append((char) ch);
-                            continue;
-                        }
-                        b.append("\r\n");
-                        if (ch == -1) {
-                            break;
-                        }
-                    } else {
-                        b.append("\r");
-                    }
-                }
-                b.append((char) ch);
-            }
-            mBuffer = b.toString();
-        } catch (Exception e) {
-            return;
-        }
-        return;
-    }
-
-    /**
-     * abstract function, waiting implement.<br>
-     * analyse from offset, return the length of consumed property.
-     */
-    abstract protected int parseVFile(int offset);
-
-    /**
-     * From offset, jump ' ', '\t', '\r\n' sequence, return the length of jump.<br>
-     * 1 * (SPACE / HTAB / CRLF)
-     */
-    protected int parseWsls(int offset) {
-        int ret = 0, sum = 0;
-
-        try {
-            char ch = mBuffer.charAt(offset);
-            if (ch == ' ' || ch == '\t') {
-                sum++;
-                offset++;
-            } else if ((ret = parseCrlf(offset)) != PARSE_ERROR) {
-                offset += ret;
-                sum += ret;
-            } else {
-                return PARSE_ERROR;
-            }
-            for (;;) {
-                ch = mBuffer.charAt(offset);
-                if (ch == ' ' || ch == '\t') {
-                    sum++;
-                    offset++;
-                } else if ((ret = parseCrlf(offset)) != PARSE_ERROR) {
-                    offset += ret;
-                    sum += ret;
-                } else {
-                    break;
-                }
-            }
-        } catch (IndexOutOfBoundsException e) {
-            ;
-        }
-        if (sum > 0)
-            return sum;
-        return PARSE_ERROR;
-    }
-
-    /**
-     * To determine if the given string equals to the start of the current
-     * string.
-     *
-     * @param offset
-     *            The offset in buffer of current string
-     * @param tar
-     *            The given string.
-     * @param ignoreCase
-     *            To determine case sensitive or not.
-     * @return The consumed characters, otherwise return PARSE_ERROR.
-     */
-    protected int parseString(int offset, final String tar, boolean ignoreCase) {
-        int sum = 0;
-        if (tar == null) {
-            return PARSE_ERROR;
-        }
-
-        if (ignoreCase) {
-            int len = tar.length();
-            try {
-                if (mBuffer.substring(offset, offset + len).equalsIgnoreCase(
-                        tar)) {
-                    sum = len;
-                } else {
-                    return PARSE_ERROR;
-                }
-            } catch (IndexOutOfBoundsException e) {
-                return PARSE_ERROR;
-            }
-
-        } else { /* case sensitive */
-            if (mBuffer.startsWith(tar, offset)) {
-                sum = tar.length();
-            } else {
-                return PARSE_ERROR;
-            }
-        }
-        return sum;
-    }
-
-    /**
-     * Skip the white space in string.
-     */
-    protected int removeWs(int offset) {
-        if (offset >= mBuffer.length())
-            return PARSE_ERROR;
-        int sum = 0;
-        char ch;
-        while ((ch = mBuffer.charAt(offset)) == ' ' || ch == '\t') {
-            offset++;
-            sum++;
-        }
-        return sum;
-    }
-
-    /**
-     * "X-" word, and its value. Return consumed length.
-     */
-    protected int parseXWord(int offset) {
-        int ret = 0, sum = 0;
-        ret = parseString(offset, "X-", true);
-        if (PARSE_ERROR == ret)
-            return PARSE_ERROR;
-        offset += ret;
-        sum += ret;
-
-        ret = parseWord(offset);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        sum += ret;
-        return sum;
-    }
-
-    /**
-     * From offset, parse as :mEncoding ?= 7bit / 8bit / quoted-printable /
-     * base64
-     */
-    protected int parseValue(int offset) {
-        int ret = 0;
-
-        if (mEncoding == null || mEncoding.equalsIgnoreCase("7BIT")
-                || mEncoding.equalsIgnoreCase("8BIT")
-                || mEncoding.toUpperCase().startsWith("X-")) {
-            ret = parse8bit(offset);
-            if (ret != PARSE_ERROR) {
-                return ret;
-            }
-            return PARSE_ERROR;
-        }
-
-        if (mEncoding.equalsIgnoreCase("QUOTED-PRINTABLE")) {
-            ret = parseQuotedPrintable(offset);
-            if (ret != PARSE_ERROR) {
-                return ret;
-            }
-            return PARSE_ERROR;
-        }
-
-        if (mEncoding.equalsIgnoreCase("BASE64")) {
-            ret = parseBase64(offset);
-            if (ret != PARSE_ERROR) {
-                return ret;
-            }
-            return PARSE_ERROR;
-        }
-        return PARSE_ERROR;
-    }
-
-    /**
-     * Refer to RFC 1521, 8bit text
-     */
-    protected int parse8bit(int offset) {
-        int index = 0;
-
-        index = mBuffer.substring(offset).indexOf("\r\n");
-
-        if (index == -1)
-            return PARSE_ERROR;
-        else
-            return index;
-
-    }
-
-    /**
-     * Refer to RFC 1521, quoted printable text ([*(ptext / SPACE / TAB) ptext]
-     * ["="] CRLF)
-     */
-    protected int parseQuotedPrintable(int offset) {
-        int ret = 0, sum = 0;
-
-        ret = removeWs(offset);
-        offset += ret;
-        sum += ret;
-
-        for (;;) {
-            ret = parsePtext(offset);
-            if (PARSE_ERROR == ret)
-                break;
-            offset += ret;
-            sum += ret;
-
-            ret = removeWs(offset);
-            offset += ret;
-            sum += ret;
-        }
-
-        ret = parseString(offset, "=", false);
-        if (ret != PARSE_ERROR) {
-            // offset += ret;
-            sum += ret;
-        }
-
-        return sum;
-    }
-
-    /**
-     * return 1 or 3 <any ASCII character except "=", SPACE, or TAB>
-     */
-    protected int parsePtext(int offset) {
-        int ret = 0;
-
-        try {
-            char ch = mBuffer.charAt(offset);
-            if (isPrintable(ch) && ch != '=' && ch != ' ' && ch != '\t') {
-                return 1;
-            }
-        } catch (IndexOutOfBoundsException e) {
-            return PARSE_ERROR;
-        }
-
-        ret = parseOctet(offset);
-        if (ret != PARSE_ERROR) {
-            return ret;
-        }
-        return PARSE_ERROR;
-    }
-
-    /**
-     * start with "=" two of (DIGIT / "A" / "B" / "C" / "D" / "E" / "F") <br>
-     * So maybe return 3.
-     */
-    protected int parseOctet(int offset) {
-        int ret = 0, sum = 0;
-
-        ret = parseString(offset, "=", false);
-        if (PARSE_ERROR == ret)
-            return PARSE_ERROR;
-        offset += ret;
-        sum += ret;
-
-        try {
-            int ch = mBuffer.charAt(offset);
-            if (ch == ' ' || ch == '\t')
-                return ++sum;
-            if ((ch >= '0' && ch <= '9') || (ch >= 'A' && ch <= 'F')) {
-                offset++;
-                sum++;
-                ch = mBuffer.charAt(offset);
-                if ((ch >= '0' && ch <= '9') || (ch >= 'A' && ch <= 'F')) {
-                    sum++;
-                    return sum;
-                }
-            }
-        } catch (IndexOutOfBoundsException e) {
-            ;
-        }
-        return PARSE_ERROR;
-    }
-
-    /**
-     * Refer to RFC 1521, base64 text The end of the text is marked with two
-     * CRLF sequences
-     */
-    protected int parseBase64(int offset) {
-        int sum = 0;
-        try {
-            for (;;) {
-                char ch;
-                ch = mBuffer.charAt(offset);
-
-                if (ch == '\r') {
-                    int ret = parseString(offset, "\r\n\r\n", false);
-                    sum += ret;
-                    break;
-                } else {
-                    /* ignore none base64 character */
-                    sum++;
-                    offset++;
-                }
-            }
-        } catch (IndexOutOfBoundsException e) {
-            return PARSE_ERROR;
-        }
-        sum -= 2;/* leave one CRLF to parse the end of this property */
-        return sum;
-    }
-
-    /**
-     * Any printable ASCII sequence except [ ]=:.,;
-     */
-    protected int parseWord(int offset) {
-        int sum = 0;
-        try {
-            for (;;) {
-                char ch = mBuffer.charAt(offset);
-                if (!isPrintable(ch))
-                    break;
-                if (ch == ' ' || ch == '=' || ch == ':' || ch == '.'
-                        || ch == ',' || ch == ';')
-                    break;
-                if (ch == '\\') {
-                    ch = mBuffer.charAt(offset + 1);
-                    if (ch == ';') {
-                        offset++;
-                        sum++;
-                    }
-                }
-                offset++;
-                sum++;
-            }
-        } catch (IndexOutOfBoundsException e) {
-            ;
-        }
-        if (sum == 0)
-            return PARSE_ERROR;
-        return sum;
-    }
-
-    /**
-     * If it is a letter or digit.
-     */
-    protected boolean isLetterOrDigit(char ch) {
-        if (ch >= '0' && ch <= '9')
-            return true;
-        if (ch >= 'a' && ch <= 'z')
-            return true;
-        if (ch >= 'A' && ch <= 'Z')
-            return true;
-        return false;
-    }
-
-    /**
-     * If it is printable in ASCII
-     */
-    protected boolean isPrintable(char ch) {
-        if (ch >= ' ' && ch <= '~')
-            return true;
-        return false;
-    }
-
-    /**
-     * If it is a letter.
-     */
-    protected boolean isLetter(char ch) {
-        if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) {
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * Get a word from current position.
-     */
-    protected String getWord(int offset) {
-        StringBuilder word = new StringBuilder();
-        try {
-            for (;;) {
-                char ch = mBuffer.charAt(offset);
-                if (isLetterOrDigit(ch) || ch == '-') {
-                    word.append(ch);
-                    offset++;
-                } else {
-                    break;
-                }
-            }
-        } catch (IndexOutOfBoundsException e) {
-            ;
-        }
-        return word.toString();
-    }
-
-    /**
-     * If is: "INLINE" / "URL" / "CONTENT-ID" / "CID" / "X-" word
-     */
-    protected int parsePValueVal(int offset) {
-        int ret = 0, sum = 0;
-
-        ret = parseString(offset, "INLINE", true);
-        if (ret != PARSE_ERROR) {
-            sum += ret;
-            return sum;
-        }
-
-        ret = parseString(offset, "URL", true);
-        if (ret != PARSE_ERROR) {
-            sum += ret;
-            return sum;
-        }
-
-        ret = parseString(offset, "CONTENT-ID", true);
-        if (ret != PARSE_ERROR) {
-            sum += ret;
-            return sum;
-        }
-
-        ret = parseString(offset, "CID", true);
-        if (ret != PARSE_ERROR) {
-            sum += ret;
-            return sum;
-        }
-
-        ret = parseString(offset, "INLINE", true);
-        if (ret != PARSE_ERROR) {
-            sum += ret;
-            return sum;
-        }
-
-        ret = parseXWord(offset);
-        if (ret != PARSE_ERROR) {
-            sum += ret;
-            return sum;
-        }
-
-        return PARSE_ERROR;
-    }
-
-    /**
-     * If is: "7BIT" / "8BIT" / "QUOTED-PRINTABLE" / "BASE64" / "X-" word and
-     * set mEncoding.
-     */
-    protected int parsePEncodingVal(int offset) {
-        int ret = 0, sum = 0;
-
-        ret = parseString(offset, "7BIT", true);
-        if (ret != PARSE_ERROR) {
-            mEncoding = "7BIT";
-            sum += ret;
-            return sum;
-        }
-
-        ret = parseString(offset, "8BIT", true);
-        if (ret != PARSE_ERROR) {
-            mEncoding = "8BIT";
-            sum += ret;
-            return sum;
-        }
-
-        ret = parseString(offset, "QUOTED-PRINTABLE", true);
-        if (ret != PARSE_ERROR) {
-            mEncoding = "QUOTED-PRINTABLE";
-            sum += ret;
-            return sum;
-        }
-
-        ret = parseString(offset, "BASE64", true);
-        if (ret != PARSE_ERROR) {
-            mEncoding = "BASE64";
-            sum += ret;
-            return sum;
-        }
-
-        ret = parseXWord(offset);
-        if (ret != PARSE_ERROR) {
-            mEncoding = mBuffer.substring(offset).substring(0, ret);
-            sum += ret;
-            return sum;
-        }
-
-        return PARSE_ERROR;
-    }
-
-    /**
-     * Refer to RFC1521, section 7.1<br>
-     * If is: "us-ascii" / "iso-8859-xxx" / "X-" word
-     */
-    protected int parseCharsetVal(int offset) {
-        int ret = 0, sum = 0;
-
-        ret = parseString(offset, "us-ascii", true);
-        if (ret != PARSE_ERROR) {
-            sum += ret;
-            return sum;
-        }
-
-        ret = parseString(offset, "iso-8859-1", true);
-        if (ret != PARSE_ERROR) {
-            sum += ret;
-            return sum;
-        }
-
-        ret = parseString(offset, "iso-8859-2", true);
-        if (ret != PARSE_ERROR) {
-            sum += ret;
-            return sum;
-        }
-
-        ret = parseString(offset, "iso-8859-3", true);
-        if (ret != PARSE_ERROR) {
-            sum += ret;
-            return sum;
-        }
-
-        ret = parseString(offset, "iso-8859-4", true);
-        if (ret != PARSE_ERROR) {
-            sum += ret;
-            return sum;
-        }
-
-        ret = parseString(offset, "iso-8859-5", true);
-        if (ret != PARSE_ERROR) {
-            sum += ret;
-            return sum;
-        }
-
-        ret = parseString(offset, "iso-8859-6", true);
-        if (ret != PARSE_ERROR) {
-            sum += ret;
-            return sum;
-        }
-
-        ret = parseString(offset, "iso-8859-7", true);
-        if (ret != PARSE_ERROR) {
-            sum += ret;
-            return sum;
-        }
-
-        ret = parseString(offset, "iso-8859-8", true);
-        if (ret != PARSE_ERROR) {
-            sum += ret;
-            return sum;
-        }
-
-        ret = parseString(offset, "iso-8859-9", true);
-        if (ret != PARSE_ERROR) {
-            sum += ret;
-            return sum;
-        }
-
-        ret = parseXWord(offset);
-        if (ret != PARSE_ERROR) {
-            sum += ret;
-            return sum;
-        }
-
-        return PARSE_ERROR;
-    }
-
-    /**
-     * Refer to RFC 1766<br>
-     * like: XXX(sequence letters)-XXX(sequence letters)
-     */
-    protected int parseLangVal(int offset) {
-        int ret = 0, sum = 0;
-
-        ret = parseTag(offset);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-
-        for (;;) {
-            ret = parseString(offset, "-", false);
-            if (PARSE_ERROR == ret) {
-                break;
-            }
-            offset += ret;
-            sum += ret;
-
-            ret = parseTag(offset);
-            if (PARSE_ERROR == ret) {
-                break;
-            }
-            offset += ret;
-            sum += ret;
-        }
-        return sum;
-    }
-
-    /**
-     * From first 8 position, is sequence LETTER.
-     */
-    protected int parseTag(int offset) {
-        int sum = 0, i = 0;
-
-        try {
-            for (i = 0; i < 8; i++) {
-                char ch = mBuffer.charAt(offset);
-                if (!isLetter(ch)) {
-                    break;
-                }
-                sum++;
-                offset++;
-            }
-        } catch (IndexOutOfBoundsException e) {
-            ;
-        }
-        if (i == 0) {
-            return PARSE_ERROR;
-        }
-        return sum;
-    }
-
-}
diff --git a/core/java/android/syncml/pim/package.html b/core/java/android/syncml/pim/package.html
deleted file mode 100644
index cb4ca46..0000000
--- a/core/java/android/syncml/pim/package.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<HTML>
-<BODY>
-Support classes for SyncML.
-{@hide}
-</BODY>
-</HTML>
\ No newline at end of file
diff --git a/core/java/android/syncml/pim/vcard/ContactStruct.java b/core/java/android/syncml/pim/vcard/ContactStruct.java
deleted file mode 100644
index e212c3f..0000000
--- a/core/java/android/syncml/pim/vcard/ContactStruct.java
+++ /dev/null
@@ -1,1006 +0,0 @@
-/*
- * Copyright (C) 2007 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.
- */
-
-package android.syncml.pim.vcard;
-
-import android.content.AbstractSyncableContentProvider;
-import android.content.ContentResolver;
-import android.content.ContentUris;
-import android.content.ContentValues;
-import android.net.Uri;
-import android.provider.Contacts;
-import android.provider.CallLog.Calls;
-import android.provider.Contacts.ContactMethods;
-import android.provider.Contacts.Extensions;
-import android.provider.Contacts.GroupMembership;
-import android.provider.Contacts.Organizations;
-import android.provider.Contacts.People;
-import android.provider.Contacts.Phones;
-import android.provider.Contacts.Photos;
-import android.syncml.pim.PropertyNode;
-import android.syncml.pim.VNode;
-import android.telephony.PhoneNumberUtils;
-import android.text.TextUtils;
-import android.util.Log;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Map.Entry;
-
-/**
- * The parameter class of VCardComposer.
- * This class standy by the person-contact in
- * Android system, we must use this class instance as parameter to transmit to
- * VCardComposer so that create vCard string.
- * 
- * @deprecated Please use the new code in android.pim.vcard
- */
-// TODO: rename the class name, next step
-@Deprecated
-public class ContactStruct {
-    private static final String LOG_TAG = "ContactStruct";
-    
-    // Note: phonetic name probably should be "LAST FIRST MIDDLE" for European languages, and
-    //       space should be added between each element while it should not be in Japanese.
-    //       But unfortunately, we currently do not have the data and are not sure whether we should
-    //       support European version of name ordering.
-    //
-    // TODO: Implement the logic described above if we really need European version of
-    //        phonetic name handling. Also, adding the appropriate test case of vCard would be
-    //        highly appreciated.
-    public static final int NAME_ORDER_TYPE_ENGLISH = 0;
-    public static final int NAME_ORDER_TYPE_JAPANESE = 1;
-
-    /** MUST exist */
-    public String name;
-    public String phoneticName;
-    /** maybe folding */
-    public List<String> notes = new ArrayList<String>();
-    /** maybe folding */
-    public String title;
-    /** binary bytes of pic. */
-    public byte[] photoBytes;
-    /** The type of Photo (e.g. JPEG, BMP, etc.) */
-    public String photoType;
-    /** Only for GET. Use addPhoneList() to PUT. */
-    public List<PhoneData> phoneList;
-    /** Only for GET. Use addContactmethodList() to PUT. */
-    public List<ContactMethod> contactmethodList;
-    /** Only for GET. Use addOrgList() to PUT. */
-    public List<OrganizationData> organizationList;
-    /** Only for GET. Use addExtension() to PUT */
-    public Map<String, List<String>> extensionMap;
-
-    public String timeStamp;
-
-    // Use organizationList instead when handling ORG.
-    @Deprecated
-    public String company;
-    
-    public static class PhoneData {
-        public int type;
-        /** maybe folding */
-        public String data;
-        public String label;
-        public boolean isPrimary; 
-    }
-
-    public static class ContactMethod {
-        // Contacts.KIND_EMAIL, Contacts.KIND_POSTAL
-        public int kind;
-        // e.g. Contacts.ContactMethods.TYPE_HOME, Contacts.PhoneColumns.TYPE_HOME
-        // If type == Contacts.PhoneColumns.TYPE_CUSTOM, label is used.
-        public int type;
-        public String data;
-        // Used only when TYPE is TYPE_CUSTOM.
-        public String label;
-        public boolean isPrimary;
-    }
-    
-    public static class OrganizationData {
-        public int type;
-        public String companyName;
-        public String positionName;
-        public boolean isPrimary;
-    }
-
-    /**
-     * Add a phone info to phoneList.
-     * @param data phone number
-     * @param type type col of content://contacts/phones
-     * @param label lable col of content://contacts/phones
-     */
-    public void addPhone(int type, String data, String label, boolean isPrimary){
-        if (phoneList == null) {
-            phoneList = new ArrayList<PhoneData>();
-        }
-        PhoneData phoneData = new PhoneData();
-        phoneData.type = type;
-        
-        StringBuilder builder = new StringBuilder();
-        String trimed = data.trim();
-        int length = trimed.length();
-        for (int i = 0; i < length; i++) {
-            char ch = trimed.charAt(i);
-            if (('0' <= ch && ch <= '9') || (i == 0 && ch == '+')) {
-                builder.append(ch);
-            }
-        }
-        phoneData.data = PhoneNumberUtils.formatNumber(builder.toString());
-        phoneData.label = label;
-        phoneData.isPrimary = isPrimary;
-        phoneList.add(phoneData);
-    }
-
-    /**
-     * Add call history time stamp and call type.
-     * @param type call type
-     * @param timeStamp timeStamp
-     */
-    public void addCallHistoryTimeStamp(int type, String date) {
-        // Extension for call history as defined in
-        // in the Specification for Ic Mobile Communcation - ver 1.1,
-        // Oct 2000. This is used to send the details of the call
-        // history - missed, incoming, outgoing along with date and time
-        // to the requesting device (For example, transferring phone book
-        // when connected over bluetooth)
-        // X-IRMC-CALL-DATETIME;MISSED:20050320T100000
-        String strCallType;
-        if (type == Calls.INCOMING_TYPE) {
-            strCallType = "INCOMING";
-        } else if (type == Calls.OUTGOING_TYPE) {
-            strCallType = "OUTGOING";
-        } else if (type == Calls.MISSED_TYPE) {
-            strCallType = "MISSED";
-        } else {
-            strCallType = "";
-        }
-        timeStamp = "X-IRMC-CALL-DATETIME;" + strCallType + ":" + date;
-    }
-
-    /**
-     * Add a contactmethod info to contactmethodList.
-     * @param kind integer value defined in Contacts.java
-     * (e.g. Contacts.KIND_EMAIL)
-     * @param type type col of content://contacts/contact_methods
-     * @param data contact data
-     * @param label extra string used only when kind is Contacts.KIND_CUSTOM.
-     */
-    public void addContactmethod(int kind, int type, String data,
-            String label, boolean isPrimary){
-        if (contactmethodList == null) {
-            contactmethodList = new ArrayList<ContactMethod>();
-        }
-        ContactMethod contactMethod = new ContactMethod();
-        contactMethod.kind = kind;
-        contactMethod.type = type;
-        contactMethod.data = data;
-        contactMethod.label = label;
-        contactMethod.isPrimary = isPrimary;
-        contactmethodList.add(contactMethod);
-    }
-    
-    /**
-     * Add a Organization info to organizationList.
-     */
-    public void addOrganization(int type, String companyName, String positionName,
-            boolean isPrimary) {
-        if (organizationList == null) {
-            organizationList = new ArrayList<OrganizationData>();
-        }
-        OrganizationData organizationData = new OrganizationData();
-        organizationData.type = type;
-        organizationData.companyName = companyName;
-        organizationData.positionName = positionName;
-        organizationData.isPrimary = isPrimary;
-        organizationList.add(organizationData);
-    }
-
-    /**
-     * Set "position" value to the appropriate data. If there's more than one
-     * OrganizationData objects, the value is set to the last one. If there's no
-     * OrganizationData object, a new OrganizationData is created, whose company name is
-     * empty.  
-     * 
-     * TODO: incomplete logic. fix this:
-     * 
-     * e.g. This assumes ORG comes earlier, but TITLE may come earlier like this, though we do not
-     * know how to handle it in general cases...
-     * ----
-     * TITLE:Software Engineer
-     * ORG:Google
-     * ----
-     */
-    public void setPosition(String positionValue) {
-        if (organizationList == null) {
-            organizationList = new ArrayList<OrganizationData>();
-        }
-        int size = organizationList.size();
-        if (size == 0) {
-            addOrganization(Contacts.OrganizationColumns.TYPE_OTHER, "", null, false);
-            size = 1;
-        }
-        OrganizationData lastData = organizationList.get(size - 1);
-        lastData.positionName = positionValue;
-    }
-    
-    public void addExtension(PropertyNode propertyNode) {
-        if (propertyNode.propValue.length() == 0) {
-            return;
-        }
-        // Now store the string into extensionMap.
-        List<String> list;
-        String name = propertyNode.propName;
-        if (extensionMap == null) {
-            extensionMap = new HashMap<String, List<String>>();
-        }
-        if (!extensionMap.containsKey(name)){
-            list = new ArrayList<String>();
-            extensionMap.put(name, list);
-        } else {
-            list = extensionMap.get(name);
-        }        
-        
-        list.add(propertyNode.encode());
-    }
-    
-    private static String getNameFromNProperty(List<String> elems, int nameOrderType) {
-        // Family, Given, Middle, Prefix, Suffix. (1 - 5)
-        int size = elems.size();
-        if (size > 1) {
-            StringBuilder builder = new StringBuilder();
-            boolean builderIsEmpty = true;
-            // Prefix
-            if (size > 3 && elems.get(3).length() > 0) {
-                builder.append(elems.get(3));
-                builderIsEmpty = false;
-            }
-            String first, second;
-            if (nameOrderType == NAME_ORDER_TYPE_JAPANESE) {
-                first = elems.get(0);
-                second = elems.get(1);
-            } else {
-                first = elems.get(1);
-                second = elems.get(0);
-            }
-            if (first.length() > 0) {
-                if (!builderIsEmpty) {
-                    builder.append(' ');
-                }
-                builder.append(first);
-                builderIsEmpty = false;
-            }
-            // Middle name
-            if (size > 2 && elems.get(2).length() > 0) {
-                if (!builderIsEmpty) {
-                    builder.append(' ');
-                }
-                builder.append(elems.get(2));
-                builderIsEmpty = false;
-            }
-            if (second.length() > 0) {
-                if (!builderIsEmpty) {
-                    builder.append(' ');
-                }
-                builder.append(second);
-                builderIsEmpty = false;
-            }
-            // Suffix
-            if (size > 4 && elems.get(4).length() > 0) {
-                if (!builderIsEmpty) {
-                    builder.append(' ');
-                }
-                builder.append(elems.get(4));
-                builderIsEmpty = false;
-            }
-            return builder.toString();
-        } else if (size == 1) {
-            return elems.get(0);
-        } else {
-            return "";
-        }
-    }
-    
-    public static ContactStruct constructContactFromVNode(VNode node,
-            int nameOrderType) {
-        if (!node.VName.equals("VCARD")) {
-            // Impossible in current implementation. Just for safety.
-            Log.e(LOG_TAG, "Non VCARD data is inserted.");
-            return null;
-        }
-
-        // For name, there are three fields in vCard: FN, N, NAME.
-        // We prefer FN, which is a required field in vCard 3.0 , but not in vCard 2.1.
-        // Next, we prefer NAME, which is defined only in vCard 3.0.
-        // Finally, we use N, which is a little difficult to parse.
-        String fullName = null;
-        String nameFromNProperty = null;
-
-        // Some vCard has "X-PHONETIC-FIRST-NAME", "X-PHONETIC-MIDDLE-NAME", and
-        // "X-PHONETIC-LAST-NAME"
-        String xPhoneticFirstName = null;
-        String xPhoneticMiddleName = null;
-        String xPhoneticLastName = null;
-        
-        ContactStruct contact = new ContactStruct();
-
-        // Each Column of four properties has ISPRIMARY field
-        // (See android.provider.Contacts)
-        // If false even after the following loop, we choose the first
-        // entry as a "primary" entry.
-        boolean prefIsSetAddress = false;
-        boolean prefIsSetPhone = false;
-        boolean prefIsSetEmail = false;
-        boolean prefIsSetOrganization = false;
-        
-        for (PropertyNode propertyNode: node.propList) {
-            String name = propertyNode.propName;
-
-            if (TextUtils.isEmpty(propertyNode.propValue)) {
-                continue;
-            }
-            
-            if (name.equals("VERSION")) {
-                // vCard version. Ignore this.
-            } else if (name.equals("FN")) {
-                fullName = propertyNode.propValue;
-            } else if (name.equals("NAME") && fullName == null) {
-                // Only in vCard 3.0. Use this if FN does not exist.
-                // Though, note that vCard 3.0 requires FN.
-                fullName = propertyNode.propValue;
-            } else if (name.equals("N")) {
-                nameFromNProperty = getNameFromNProperty(propertyNode.propValue_vector,
-                        nameOrderType);
-            } else if (name.equals("SORT-STRING")) {
-                contact.phoneticName = propertyNode.propValue;
-            } else if (name.equals("SOUND")) {
-                if (propertyNode.paramMap_TYPE.contains("X-IRMC-N") &&
-                        contact.phoneticName == null) {
-                    // Some Japanese mobile phones use this field for phonetic name,
-                    // since vCard 2.1 does not have "SORT-STRING" type.
-                    // Also, in some cases, the field has some ';' in it.
-                    // We remove them.
-                    StringBuilder builder = new StringBuilder();
-                    String value = propertyNode.propValue;
-                    int length = value.length();
-                    for (int i = 0; i < length; i++) {
-                        char ch = value.charAt(i);
-                        if (ch != ';') {
-                            builder.append(ch);
-                        }
-                    }
-                    contact.phoneticName = builder.toString();
-                } else {
-                    contact.addExtension(propertyNode);
-                }
-            } else if (name.equals("ADR")) {
-                List<String> values = propertyNode.propValue_vector;
-                boolean valuesAreAllEmpty = true;
-                for (String value : values) {
-                    if (value.length() > 0) {
-                        valuesAreAllEmpty = false;
-                        break;
-                    }
-                }
-                if (valuesAreAllEmpty) {
-                    continue;
-                }
-
-                int kind = Contacts.KIND_POSTAL;
-                int type = -1;
-                String label = "";
-                boolean isPrimary = false;
-                for (String typeString : propertyNode.paramMap_TYPE) {
-                    if (typeString.equals("PREF") && !prefIsSetAddress) {
-                        // Only first "PREF" is considered.
-                        prefIsSetAddress = true;
-                        isPrimary = true;
-                    } else if (typeString.equalsIgnoreCase("HOME")) {
-                        type = Contacts.ContactMethodsColumns.TYPE_HOME;
-                        label = "";
-                    } else if (typeString.equalsIgnoreCase("WORK") || 
-                            typeString.equalsIgnoreCase("COMPANY")) {
-                        // "COMPANY" seems emitted by Windows Mobile, which is not
-                        // specifically supported by vCard 2.1. We assume this is same
-                        // as "WORK".
-                        type = Contacts.ContactMethodsColumns.TYPE_WORK;
-                        label = "";
-                    } else if (typeString.equalsIgnoreCase("POSTAL")) {
-                        kind = Contacts.KIND_POSTAL;
-                    } else if (typeString.equalsIgnoreCase("PARCEL") || 
-                            typeString.equalsIgnoreCase("DOM") ||
-                            typeString.equalsIgnoreCase("INTL")) {
-                        // We do not have a kind or type matching these.
-                        // TODO: fix this. We may need to split entries into two.
-                        // (e.g. entries for KIND_POSTAL and KIND_PERCEL)
-                    } else if (typeString.toUpperCase().startsWith("X-") &&
-                            type < 0) {
-                        type = Contacts.ContactMethodsColumns.TYPE_CUSTOM;
-                        label = typeString.substring(2);
-                    } else if (type < 0) {
-                        // vCard 3.0 allows iana-token. Also some vCard 2.1 exporters
-                        // emit non-standard types. We do not handle their values now.
-                        type = Contacts.ContactMethodsColumns.TYPE_CUSTOM;
-                        label = typeString;
-                    }
-                }
-                // We use "HOME" as default
-                if (type < 0) {
-                    type = Contacts.ContactMethodsColumns.TYPE_HOME;
-                }
-                                
-                // adr-value    = 0*6(text-value ";") text-value
-                //              ; PO Box, Extended Address, Street, Locality, Region, Postal
-                //              ; Code, Country Name
-                String address;
-                List<String> list = propertyNode.propValue_vector;
-                int size = list.size();
-                if (size > 1) {
-                    StringBuilder builder = new StringBuilder();
-                    boolean builderIsEmpty = true;
-                    if (Locale.getDefault().getCountry().equals(Locale.JAPAN.getCountry())) {
-                        // In Japan, the order is reversed.
-                        for (int i = size - 1; i >= 0; i--) {
-                            String addressPart = list.get(i);
-                            if (addressPart.length() > 0) {
-                                if (!builderIsEmpty) {
-                                    builder.append(' ');
-                                }
-                                builder.append(addressPart);
-                                builderIsEmpty = false;
-                            }
-                        }
-                    } else {
-                        for (int i = 0; i < size; i++) {
-                            String addressPart = list.get(i);
-                            if (addressPart.length() > 0) {
-                                if (!builderIsEmpty) {
-                                    builder.append(' ');
-                                }
-                                builder.append(addressPart);
-                                builderIsEmpty = false;
-                            }
-                        }
-                    }
-                    address = builder.toString().trim();
-                } else {
-                    address = propertyNode.propValue; 
-                }
-                contact.addContactmethod(kind, type, address, label, isPrimary);
-            } else if (name.equals("ORG")) {
-                // vCard specification does not specify other types.
-                int type = Contacts.OrganizationColumns.TYPE_WORK;
-                boolean isPrimary = false;
-                
-                for (String typeString : propertyNode.paramMap_TYPE) {
-                    if (typeString.equals("PREF") && !prefIsSetOrganization) {
-                        // vCard specification officially does not have PREF in ORG.
-                        // This is just for safety.
-                        prefIsSetOrganization = true;
-                        isPrimary = true;
-                    }
-                    // XXX: Should we cope with X- words?
-                }
-
-                List<String> list = propertyNode.propValue_vector; 
-                int size = list.size();
-                StringBuilder builder = new StringBuilder();
-                for (Iterator<String> iter = list.iterator(); iter.hasNext();) {
-                    builder.append(iter.next());
-                    if (iter.hasNext()) {
-                        builder.append(' ');
-                    }
-                }
-
-                contact.addOrganization(type, builder.toString(), "", isPrimary);
-            } else if (name.equals("TITLE")) {
-                contact.setPosition(propertyNode.propValue);
-            } else if (name.equals("ROLE")) {
-                contact.setPosition(propertyNode.propValue);
-            } else if (name.equals("PHOTO")) {
-                // We prefer PHOTO to LOGO.
-                String valueType = propertyNode.paramMap.getAsString("VALUE");
-                if (valueType != null && valueType.equals("URL")) {
-                    // TODO: do something.
-                } else {
-                    // Assume PHOTO is stored in BASE64. In that case,
-                    // data is already stored in propValue_bytes in binary form.
-                    // It should be automatically done by VBuilder (VDataBuilder/VCardDatabuilder) 
-                    contact.photoBytes = propertyNode.propValue_bytes;
-                    String type = propertyNode.paramMap.getAsString("TYPE");
-                    if (type != null) {
-                        contact.photoType = type;
-                    }
-                }
-            } else if (name.equals("LOGO")) {
-                // When PHOTO is not available this is not URL,
-                // we use this instead of PHOTO.
-                String valueType = propertyNode.paramMap.getAsString("VALUE");
-                if (valueType != null && valueType.equals("URL")) {
-                    // TODO: do something.
-                } else if (contact.photoBytes == null) {
-                    contact.photoBytes = propertyNode.propValue_bytes;
-                    String type = propertyNode.paramMap.getAsString("TYPE");
-                    if (type != null) {
-                        contact.photoType = type;
-                    }
-                }
-            } else if (name.equals("EMAIL")) {
-                int type = -1;
-                String label = null;
-                boolean isPrimary = false;
-                for (String typeString : propertyNode.paramMap_TYPE) {
-                    if (typeString.equals("PREF") && !prefIsSetEmail) {
-                        // Only first "PREF" is considered.
-                        prefIsSetEmail = true;
-                        isPrimary = true;
-                    } else if (typeString.equalsIgnoreCase("HOME")) {
-                        type = Contacts.ContactMethodsColumns.TYPE_HOME;
-                    } else if (typeString.equalsIgnoreCase("WORK")) {
-                        type = Contacts.ContactMethodsColumns.TYPE_WORK;
-                    } else if (typeString.equalsIgnoreCase("CELL")) {
-                        // We do not have Contacts.ContactMethodsColumns.TYPE_MOBILE yet.
-                        type = Contacts.ContactMethodsColumns.TYPE_CUSTOM;
-                        label = Contacts.ContactMethodsColumns.MOBILE_EMAIL_TYPE_NAME;
-                    } else if (typeString.toUpperCase().startsWith("X-") &&
-                            type < 0) {
-                        type = Contacts.ContactMethodsColumns.TYPE_CUSTOM;
-                        label = typeString.substring(2);
-                    } else if (type < 0) {
-                        // vCard 3.0 allows iana-token.
-                        // We may have INTERNET (specified in vCard spec),
-                        // SCHOOL, etc.
-                        type = Contacts.ContactMethodsColumns.TYPE_CUSTOM;
-                        label = typeString;
-                    }
-                }
-                // We use "OTHER" as default.
-                if (type < 0) {
-                    type = Contacts.ContactMethodsColumns.TYPE_OTHER;
-                }
-                contact.addContactmethod(Contacts.KIND_EMAIL,
-                        type, propertyNode.propValue,label, isPrimary);
-            } else if (name.equals("TEL")) {
-                int type = -1;
-                String label = null;
-                boolean isPrimary = false;
-                boolean isFax = false;
-                for (String typeString : propertyNode.paramMap_TYPE) {
-                    if (typeString.equals("PREF") && !prefIsSetPhone) {
-                        // Only first "PREF" is considered.
-                        prefIsSetPhone = true;
-                        isPrimary = true;
-                    } else if (typeString.equalsIgnoreCase("HOME")) {
-                        type = Contacts.PhonesColumns.TYPE_HOME;
-                    } else if (typeString.equalsIgnoreCase("WORK")) {
-                        type = Contacts.PhonesColumns.TYPE_WORK;
-                    } else if (typeString.equalsIgnoreCase("CELL")) {
-                        type = Contacts.PhonesColumns.TYPE_MOBILE;
-                    } else if (typeString.equalsIgnoreCase("PAGER")) {
-                        type = Contacts.PhonesColumns.TYPE_PAGER;
-                    } else if (typeString.equalsIgnoreCase("FAX")) {
-                        isFax = true;
-                    } else if (typeString.equalsIgnoreCase("VOICE") ||
-                            typeString.equalsIgnoreCase("MSG")) {
-                        // Defined in vCard 3.0. Ignore these because they
-                        // conflict with "HOME", "WORK", etc.
-                        // XXX: do something?
-                    } else if (typeString.toUpperCase().startsWith("X-") &&
-                            type < 0) {
-                        type = Contacts.PhonesColumns.TYPE_CUSTOM;
-                        label = typeString.substring(2);
-                    } else if (type < 0){
-                        // We may have MODEM, CAR, ISDN, etc...
-                        type = Contacts.PhonesColumns.TYPE_CUSTOM;
-                        label = typeString;
-                    }
-                }
-                // We use "HOME" as default
-                if (type < 0) {
-                    type = Contacts.PhonesColumns.TYPE_HOME;
-                }
-                if (isFax) {
-                    if (type == Contacts.PhonesColumns.TYPE_HOME) {
-                        type = Contacts.PhonesColumns.TYPE_FAX_HOME; 
-                    } else if (type == Contacts.PhonesColumns.TYPE_WORK) {
-                        type = Contacts.PhonesColumns.TYPE_FAX_WORK; 
-                    }
-                }
-
-                contact.addPhone(type, propertyNode.propValue, label, isPrimary);
-            } else if (name.equals("NOTE")) {
-                contact.notes.add(propertyNode.propValue);
-            } else if (name.equals("BDAY")) {
-                contact.addExtension(propertyNode);
-            } else if (name.equals("URL")) {
-                contact.addExtension(propertyNode);
-            } else if (name.equals("REV")) {                
-                // Revision of this VCard entry. I think we can ignore this.
-                contact.addExtension(propertyNode);
-            } else if (name.equals("UID")) {
-                contact.addExtension(propertyNode);
-            } else if (name.equals("KEY")) {
-                // Type is X509 or PGP? I don't know how to handle this...
-                contact.addExtension(propertyNode);
-            } else if (name.equals("MAILER")) {
-                contact.addExtension(propertyNode);
-            } else if (name.equals("TZ")) {
-                contact.addExtension(propertyNode);
-            } else if (name.equals("GEO")) {
-                contact.addExtension(propertyNode);
-            } else if (name.equals("NICKNAME")) {
-                // vCard 3.0 only.
-                contact.addExtension(propertyNode);
-            } else if (name.equals("CLASS")) {
-                // vCard 3.0 only.
-                // e.g. CLASS:CONFIDENTIAL
-                contact.addExtension(propertyNode);
-            } else if (name.equals("PROFILE")) {
-                // VCard 3.0 only. Must be "VCARD". I think we can ignore this.
-                contact.addExtension(propertyNode);
-            } else if (name.equals("CATEGORIES")) {
-                // VCard 3.0 only.
-                // e.g. CATEGORIES:INTERNET,IETF,INDUSTRY,INFORMATION TECHNOLOGY
-                contact.addExtension(propertyNode);
-            } else if (name.equals("SOURCE")) {
-                // VCard 3.0 only.
-                contact.addExtension(propertyNode);
-            } else if (name.equals("PRODID")) {
-                // VCard 3.0 only.
-                // To specify the identifier for the product that created
-                // the vCard object.
-                contact.addExtension(propertyNode);
-            } else if (name.equals("X-PHONETIC-FIRST-NAME")) {
-                xPhoneticFirstName = propertyNode.propValue;
-            } else if (name.equals("X-PHONETIC-MIDDLE-NAME")) {
-                xPhoneticMiddleName = propertyNode.propValue;
-            } else if (name.equals("X-PHONETIC-LAST-NAME")) {
-                xPhoneticLastName = propertyNode.propValue;
-            } else {
-                // Unknown X- words and IANA token.
-                contact.addExtension(propertyNode);
-            }
-        }
-
-        if (fullName != null) {
-            contact.name = fullName;
-        } else if(nameFromNProperty != null) {
-            contact.name = nameFromNProperty;
-        } else {
-            contact.name = "";
-        }
-
-        if (contact.phoneticName == null &&
-                (xPhoneticFirstName != null || xPhoneticMiddleName != null ||
-                        xPhoneticLastName != null)) {
-            // Note: In Europe, this order should be "LAST FIRST MIDDLE". See the comment around
-            //       NAME_ORDER_TYPE_* for more detail.
-            String first;
-            String second;
-            if (nameOrderType == NAME_ORDER_TYPE_JAPANESE) {
-                first = xPhoneticLastName;
-                second = xPhoneticFirstName;
-            } else {
-                first = xPhoneticFirstName;
-                second = xPhoneticLastName;
-            }
-            StringBuilder builder = new StringBuilder();
-            if (first != null) {
-                builder.append(first);
-            }
-            if (xPhoneticMiddleName != null) {
-                builder.append(xPhoneticMiddleName);
-            }
-            if (second != null) {
-                builder.append(second);
-            }
-            contact.phoneticName = builder.toString();
-        }
-        
-        // Remove unnecessary white spaces.
-        // It is found that some mobile phone emits  phonetic name with just one white space
-        // when a user does not specify one.
-        // This logic is effective toward such kind of weird data.
-        if (contact.phoneticName != null) {
-            contact.phoneticName = contact.phoneticName.trim();
-        }
-
-        // If there is no "PREF", we choose the first entries as primary.
-        if (!prefIsSetPhone &&
-                contact.phoneList != null && 
-                contact.phoneList.size() > 0) {
-            contact.phoneList.get(0).isPrimary = true;
-        }
-
-        if (!prefIsSetAddress && contact.contactmethodList != null) {
-            for (ContactMethod contactMethod : contact.contactmethodList) {
-                if (contactMethod.kind == Contacts.KIND_POSTAL) {
-                    contactMethod.isPrimary = true;
-                    break;
-                }
-            }
-        }
-        if (!prefIsSetEmail && contact.contactmethodList != null) {
-            for (ContactMethod contactMethod : contact.contactmethodList) {
-                if (contactMethod.kind == Contacts.KIND_EMAIL) {
-                    contactMethod.isPrimary = true;
-                    break;
-                }
-            }
-        }
-        if (!prefIsSetOrganization &&
-                contact.organizationList != null &&
-                contact.organizationList.size() > 0) {
-            contact.organizationList.get(0).isPrimary = true;
-        }
-        
-        return contact;
-    }
-    
-    public String displayString() {
-        if (name.length() > 0) {
-            return name;
-        }
-        if (contactmethodList != null && contactmethodList.size() > 0) {
-            for (ContactMethod contactMethod : contactmethodList) {
-                if (contactMethod.kind == Contacts.KIND_EMAIL && contactMethod.isPrimary) {
-                    return contactMethod.data;
-                }
-            }
-        }
-        if (phoneList != null && phoneList.size() > 0) {
-            for (PhoneData phoneData : phoneList) {
-                if (phoneData.isPrimary) {
-                    return phoneData.data;
-                }
-            }
-        }
-        return "";
-    }
-    
-    private void pushIntoContentProviderOrResolver(Object contentSomething,
-            long myContactsGroupId) {
-        ContentResolver resolver = null;
-        AbstractSyncableContentProvider provider = null;
-        if (contentSomething instanceof ContentResolver) {
-            resolver = (ContentResolver)contentSomething;
-        } else if (contentSomething instanceof AbstractSyncableContentProvider) {
-            provider = (AbstractSyncableContentProvider)contentSomething;
-        } else {
-            Log.e(LOG_TAG, "Unsupported object came.");
-            return;
-        }
-        
-        ContentValues contentValues = new ContentValues();
-        contentValues.put(People.NAME, name);
-        contentValues.put(People.PHONETIC_NAME, phoneticName);
-        
-        if (notes.size() > 1) {
-            StringBuilder builder = new StringBuilder();
-            for (String note : notes) {
-                builder.append(note);
-                builder.append("\n");
-            }
-            contentValues.put(People.NOTES, builder.toString());
-        } else if (notes.size() == 1){
-            contentValues.put(People.NOTES, notes.get(0));
-        }
-        
-        Uri personUri;
-        long personId = 0;
-        if (resolver != null) {
-            personUri = Contacts.People.createPersonInMyContactsGroup(
-                    resolver, contentValues);
-            if (personUri != null) {
-                personId = ContentUris.parseId(personUri);
-            }
-        } else {
-            personUri = provider.insert(People.CONTENT_URI, contentValues);
-            if (personUri != null) {
-                personId = ContentUris.parseId(personUri);
-                ContentValues values = new ContentValues();
-                values.put(GroupMembership.PERSON_ID, personId);
-                values.put(GroupMembership.GROUP_ID, myContactsGroupId);
-                Uri resultUri = provider.insert(GroupMembership.CONTENT_URI, values);
-                if (resultUri == null) {
-                    Log.e(LOG_TAG, "Faild to insert the person to MyContact.");
-                    provider.delete(personUri, null, null);
-                    personUri = null;
-                }
-            }
-        }
-
-        if (personUri == null) {
-            Log.e(LOG_TAG, "Failed to create the contact.");
-            return;
-        }
-        
-        if (photoBytes != null) {
-            if (resolver != null) {
-                People.setPhotoData(resolver, personUri, photoBytes);
-            } else {
-                Uri photoUri = Uri.withAppendedPath(personUri, Contacts.Photos.CONTENT_DIRECTORY);
-                ContentValues values = new ContentValues();
-                values.put(Photos.DATA, photoBytes);
-                provider.update(photoUri, values, null, null);
-            }
-        }
-        
-        long primaryPhoneId = -1;
-        if (phoneList != null && phoneList.size() > 0) {
-            for (PhoneData phoneData : phoneList) {
-                ContentValues values = new ContentValues();
-                values.put(Contacts.PhonesColumns.TYPE, phoneData.type);
-                if (phoneData.type == Contacts.PhonesColumns.TYPE_CUSTOM) {
-                    values.put(Contacts.PhonesColumns.LABEL, phoneData.label);
-                }
-                // Already formatted.
-                values.put(Contacts.PhonesColumns.NUMBER, phoneData.data);
-                
-                // Not sure about Contacts.PhonesColumns.NUMBER_KEY ...
-                values.put(Contacts.PhonesColumns.ISPRIMARY, 1);
-                values.put(Contacts.Phones.PERSON_ID, personId);
-                Uri phoneUri;
-                if (resolver != null) {
-                    phoneUri = resolver.insert(Phones.CONTENT_URI, values);
-                } else {
-                    phoneUri = provider.insert(Phones.CONTENT_URI, values);
-                }
-                if (phoneData.isPrimary) {
-                    primaryPhoneId = Long.parseLong(phoneUri.getLastPathSegment());
-                }
-            }
-        }
-        
-        long primaryOrganizationId = -1;
-        if (organizationList != null && organizationList.size() > 0) {
-            for (OrganizationData organizationData : organizationList) {
-                ContentValues values = new ContentValues();
-                // Currently, we do not use TYPE_CUSTOM.
-                values.put(Contacts.OrganizationColumns.TYPE,
-                        organizationData.type);
-                values.put(Contacts.OrganizationColumns.COMPANY,
-                        organizationData.companyName);
-                values.put(Contacts.OrganizationColumns.TITLE,
-                        organizationData.positionName);
-                values.put(Contacts.OrganizationColumns.ISPRIMARY, 1);
-                values.put(Contacts.OrganizationColumns.PERSON_ID, personId);
-                
-                Uri organizationUri;
-                if (resolver != null) {
-                    organizationUri = resolver.insert(Organizations.CONTENT_URI, values);
-                } else {
-                    organizationUri = provider.insert(Organizations.CONTENT_URI, values);
-                }
-                if (organizationData.isPrimary) {
-                    primaryOrganizationId = Long.parseLong(organizationUri.getLastPathSegment());
-                }
-            }
-        }
-        
-        long primaryEmailId = -1;
-        if (contactmethodList != null && contactmethodList.size() > 0) {
-            for (ContactMethod contactMethod : contactmethodList) {
-                ContentValues values = new ContentValues();
-                values.put(Contacts.ContactMethodsColumns.KIND, contactMethod.kind);
-                values.put(Contacts.ContactMethodsColumns.TYPE, contactMethod.type);
-                if (contactMethod.type == Contacts.ContactMethodsColumns.TYPE_CUSTOM) {
-                    values.put(Contacts.ContactMethodsColumns.LABEL, contactMethod.label);
-                }
-                values.put(Contacts.ContactMethodsColumns.DATA, contactMethod.data);
-                values.put(Contacts.ContactMethodsColumns.ISPRIMARY, 1);
-                values.put(Contacts.ContactMethods.PERSON_ID, personId);
-                
-                if (contactMethod.kind == Contacts.KIND_EMAIL) {
-                    Uri emailUri;
-                    if (resolver != null) {
-                        emailUri = resolver.insert(ContactMethods.CONTENT_URI, values);
-                    } else {
-                        emailUri = provider.insert(ContactMethods.CONTENT_URI, values);
-                    }
-                    if (contactMethod.isPrimary) {
-                        primaryEmailId = Long.parseLong(emailUri.getLastPathSegment());
-                    }
-                } else {  // probably KIND_POSTAL
-                    if (resolver != null) {
-                        resolver.insert(ContactMethods.CONTENT_URI, values);
-                    } else {
-                        provider.insert(ContactMethods.CONTENT_URI, values);
-                    }
-                }
-            }
-        }
-        
-        if (extensionMap != null && extensionMap.size() > 0) {
-            ArrayList<ContentValues> contentValuesArray;
-            if (resolver != null) {
-                contentValuesArray = new ArrayList<ContentValues>();
-            } else {
-                contentValuesArray = null;
-            }
-            for (Entry<String, List<String>> entry : extensionMap.entrySet()) {
-                String key = entry.getKey();
-                List<String> list = entry.getValue();
-                for (String value : list) {
-                    ContentValues values = new ContentValues();
-                    values.put(Extensions.NAME, key);
-                    values.put(Extensions.VALUE, value);
-                    values.put(Extensions.PERSON_ID, personId);
-                    if (resolver != null) {
-                        contentValuesArray.add(values);
-                    } else {
-                        provider.insert(Extensions.CONTENT_URI, values);
-                    }
-                }
-            }
-            if (resolver != null) {
-                resolver.bulkInsert(Extensions.CONTENT_URI,
-                        contentValuesArray.toArray(new ContentValues[0]));
-            }
-        }
-        
-        if (primaryPhoneId >= 0 || primaryOrganizationId >= 0 || primaryEmailId >= 0) {
-            ContentValues values = new ContentValues();
-            if (primaryPhoneId >= 0) {
-                values.put(People.PRIMARY_PHONE_ID, primaryPhoneId);
-            }
-            if (primaryOrganizationId >= 0) {
-                values.put(People.PRIMARY_ORGANIZATION_ID, primaryOrganizationId);
-            }
-            if (primaryEmailId >= 0) {
-                values.put(People.PRIMARY_EMAIL_ID, primaryEmailId);
-            }
-            if (resolver != null) {
-                resolver.update(personUri, values, null, null);
-            } else {
-                provider.update(personUri, values, null, null);
-            }
-        }
-    }
-
-    /**
-     * Push this object into database in the resolver.
-     */
-    public void pushIntoContentResolver(ContentResolver resolver) {
-        pushIntoContentProviderOrResolver(resolver, 0);
-    }
-    
-    /**
-     * Push this object into AbstractSyncableContentProvider object.
-     */
-    public void pushIntoAbstractSyncableContentProvider(
-            AbstractSyncableContentProvider provider, long myContactsGroupId) {
-        boolean successful = false;
-        provider.beginBatch();
-        try {
-            pushIntoContentProviderOrResolver(provider, myContactsGroupId);
-            successful = true;
-        } finally {
-            provider.endBatch(successful);
-        }
-    }
-    
-    public boolean isIgnorable() {
-        return TextUtils.isEmpty(name) &&
-                TextUtils.isEmpty(phoneticName) &&
-                (phoneList == null || phoneList.size() == 0) &&
-                (contactmethodList == null || contactmethodList.size() == 0);
-    }
-}
diff --git a/core/java/android/syncml/pim/vcard/VCardComposer.java b/core/java/android/syncml/pim/vcard/VCardComposer.java
deleted file mode 100644
index a75ccf7..0000000
--- a/core/java/android/syncml/pim/vcard/VCardComposer.java
+++ /dev/null
@@ -1,358 +0,0 @@
-/*
- * Copyright (C) 2007 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.
- */
-
-package android.syncml.pim.vcard;
-
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.commons.codec.binary.Base64;
-
-import android.provider.Contacts;
-import android.syncml.pim.vcard.ContactStruct.PhoneData;
-
-/**
- * Compose VCard string
- */
-@Deprecated
-public class VCardComposer {
-    final public static int VERSION_VCARD21_INT = 1;
-
-    final public static int VERSION_VCARD30_INT = 2;
-
-    /**
-     * A new line
-     */
-    private String mNewline;
-
-    /**
-     * The composed string
-     */
-    private StringBuilder mResult;
-
-    /**
-     * The email's type
-     */
-    static final private HashSet<String> emailTypes = new HashSet<String>(
-            Arrays.asList("CELL", "AOL", "APPLELINK", "ATTMAIL", "CIS",
-                    "EWORLD", "INTERNET", "IBMMAIL", "MCIMAIL", "POWERSHARE",
-                    "PRODIGY", "TLX", "X400"));
-
-    static final private HashSet<String> phoneTypes = new HashSet<String>(
-            Arrays.asList("PREF", "WORK", "HOME", "VOICE", "FAX", "MSG",
-                    "CELL", "PAGER", "BBS", "MODEM", "CAR", "ISDN", "VIDEO"));
-
-    static final private String TAG = "VCardComposer";
-
-    public VCardComposer() {
-    }
-
-    private static final HashMap<Integer, String> phoneTypeMap = new HashMap<Integer, String>();
-
-    private static final HashMap<Integer, String> emailTypeMap = new HashMap<Integer, String>();
-
-    static {
-        phoneTypeMap.put(Contacts.Phones.TYPE_HOME, "HOME");
-        phoneTypeMap.put(Contacts.Phones.TYPE_MOBILE, "CELL");
-        phoneTypeMap.put(Contacts.Phones.TYPE_WORK, "WORK");
-        // FAX_WORK not exist in vcard spec. The approximate is the combine of
-        // WORK and FAX, here only map to FAX
-        phoneTypeMap.put(Contacts.Phones.TYPE_FAX_WORK, "WORK;FAX");
-        phoneTypeMap.put(Contacts.Phones.TYPE_FAX_HOME, "HOME;FAX");
-        phoneTypeMap.put(Contacts.Phones.TYPE_PAGER, "PAGER");
-        phoneTypeMap.put(Contacts.Phones.TYPE_OTHER, "X-OTHER");
-        emailTypeMap.put(Contacts.ContactMethods.TYPE_HOME, "HOME");
-        emailTypeMap.put(Contacts.ContactMethods.TYPE_WORK, "WORK");
-    }
-
-    /**
-     * Create a vCard String.
-     *
-     * @param struct
-     *            see more from ContactStruct class
-     * @param vcardversion
-     *            MUST be VERSION_VCARD21 /VERSION_VCARD30
-     * @return vCard string
-     * @throws VCardException
-     *             struct.name is null /vcardversion not match
-     */
-    public String createVCard(ContactStruct struct, int vcardversion)
-            throws VCardException {
-
-        mResult = new StringBuilder();
-        // check exception:
-        if (struct.name == null || struct.name.trim().equals("")) {
-            throw new VCardException(" struct.name MUST have value.");
-        }
-        if (vcardversion == VERSION_VCARD21_INT) {
-            mNewline = "\r\n";
-        } else if (vcardversion == VERSION_VCARD30_INT) {
-            mNewline = "\n";
-        } else {
-            throw new VCardException(
-                    " version not match VERSION_VCARD21 or VERSION_VCARD30.");
-        }
-        // build vcard:
-        mResult.append("BEGIN:VCARD").append(mNewline);
-
-        if (vcardversion == VERSION_VCARD21_INT) {
-            mResult.append("VERSION:2.1").append(mNewline);
-        } else {
-            mResult.append("VERSION:3.0").append(mNewline);
-        }
-
-        if (!isNull(struct.name)) {
-            appendNameStr(struct.name);
-        }
-
-        if (!isNull(struct.company)) {
-            mResult.append("ORG:").append(struct.company).append(mNewline);
-        }
-
-        if (struct.notes.size() > 0 && !isNull(struct.notes.get(0))) {
-            mResult.append("NOTE:").append(
-                    foldingString(struct.notes.get(0), vcardversion)).append(mNewline);
-        }
-
-        if (!isNull(struct.title)) {
-            mResult.append("TITLE:").append(
-                    foldingString(struct.title, vcardversion)).append(mNewline);
-        }
-
-        if (struct.photoBytes != null) {
-            appendPhotoStr(struct.photoBytes, struct.photoType, vcardversion);
-        }
-
-        if (struct.phoneList != null) {
-            appendPhoneStr(struct.phoneList, vcardversion);
-        }
-
-        if (struct.contactmethodList != null) {
-            appendContactMethodStr(struct.contactmethodList, vcardversion);
-        }
-
-        if (!isNull(struct.timeStamp)) {
-            mResult.append(struct.timeStamp).append(mNewline);
-        }
-
-        mResult.append("END:VCARD").append(mNewline);
-        return mResult.toString();
-    }
-
-    /**
-     * Alter str to folding supported format.
-     *
-     * @param str
-     *            the string to be folded
-     * @param version
-     *            the vcard version
-     * @return the folded string
-     */
-    private String foldingString(String str, int version) {
-        if (str.endsWith("\r\n")) {
-            str = str.substring(0, str.length() - 2);
-        } else if (str.endsWith("\n")) {
-            str = str.substring(0, str.length() - 1);
-        } else {
-            return null;
-        }
-
-        str = str.replaceAll("\r\n", "\n");
-        if (version == VERSION_VCARD21_INT) {
-            return str.replaceAll("\n", "\r\n ");
-        } else if (version == VERSION_VCARD30_INT) {
-            return str.replaceAll("\n", "\n ");
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * Build LOGO property. format LOGO's param and encode value as base64.
-     *
-     * @param bytes
-     *            the binary string to be converted
-     * @param type
-     *            the type of the content
-     * @param version
-     *            the version of vcard
-     */
-    private void appendPhotoStr(byte[] bytes, String type, int version)
-            throws VCardException {
-        String value, encodingStr;
-        try {
-            value = foldingString(new String(Base64.encodeBase64(bytes, true)),
-                    version);
-        } catch (Exception e) {
-            throw new VCardException(e.getMessage());
-        }
-
-        if (isNull(type) || type.toUpperCase().indexOf("JPEG") >= 0) {
-            type = "JPEG";
-        } else if (type.toUpperCase().indexOf("GIF") >= 0) {
-            type = "GIF";
-        } else if (type.toUpperCase().indexOf("BMP") >= 0) {
-            type = "BMP";
-        } else {
-            // Handle the string like "image/tiff".
-            int indexOfSlash = type.indexOf("/");
-            if (indexOfSlash >= 0) {
-                type = type.substring(indexOfSlash + 1).toUpperCase();
-            } else {
-                type = type.toUpperCase();
-            }
-        }
-
-        mResult.append("LOGO;TYPE=").append(type);
-        if (version == VERSION_VCARD21_INT) {
-            encodingStr = ";ENCODING=BASE64:";
-            value = value + mNewline;
-        } else if (version == VERSION_VCARD30_INT) {
-            encodingStr = ";ENCODING=b:";
-        } else {
-            return;
-        }
-        mResult.append(encodingStr).append(value).append(mNewline);
-    }
-
-    private boolean isNull(String str) {
-        if (str == null || str.trim().equals("")) {
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * Build FN and N property. format N's value.
-     *
-     * @param name
-     *            the name of the contact
-     */
-    private void appendNameStr(String name) {
-        mResult.append("FN:").append(name).append(mNewline);
-        mResult.append("N:").append(name).append(mNewline);
-        /*
-         * if(name.indexOf(";") > 0)
-         * mResult.append("N:").append(name).append(mNewline); else
-         * if(name.indexOf(" ") > 0) mResult.append("N:").append(name.replace(' ',
-         * ';')). append(mNewline); else
-         * mResult.append("N:").append(name).append("; ").append(mNewline);
-         */
-    }
-
-    /** Loop append TEL property. */
-    private void appendPhoneStr(List<ContactStruct.PhoneData> phoneList,
-            int version) {
-        HashMap<String, String> numMap = new HashMap<String, String>();
-        String joinMark = version == VERSION_VCARD21_INT ? ";" : ",";
-
-        for (ContactStruct.PhoneData phone : phoneList) {
-            String type;
-            if (!isNull(phone.data)) {
-                type = getPhoneTypeStr(phone);
-                if (version == VERSION_VCARD30_INT && type.indexOf(";") != -1) {
-                    type = type.replace(";", ",");
-                }
-                if (numMap.containsKey(phone.data)) {
-                    type = numMap.get(phone.data) + joinMark + type;
-                }
-                numMap.put(phone.data, type);
-            }
-        }
-
-        for (Map.Entry<String, String> num : numMap.entrySet()) {
-            if (version == VERSION_VCARD21_INT) {
-                mResult.append("TEL;");
-            } else { // vcard3.0
-                mResult.append("TEL;TYPE=");
-            }
-            mResult.append(num.getValue()).append(":").append(num.getKey())
-                    .append(mNewline);
-        }
-    }
-
-    private String getPhoneTypeStr(PhoneData phone) {
-
-        int phoneType = phone.type;
-        String typeStr, label;
-
-        if (phoneTypeMap.containsKey(phoneType)) {
-            typeStr = phoneTypeMap.get(phoneType);
-        } else if (phoneType == Contacts.Phones.TYPE_CUSTOM) {
-            label = phone.label.toUpperCase();
-            if (phoneTypes.contains(label) || label.startsWith("X-")) {
-                typeStr = label;
-            } else {
-                typeStr = "X-CUSTOM-" + label;
-            }
-        } else {
-            // TODO: need be updated with the provider's future changes
-            typeStr = "VOICE"; // the default type is VOICE in spec.
-        }
-        return typeStr;
-    }
-
-    /** Loop append ADR / EMAIL property. */
-    private void appendContactMethodStr(
-            List<ContactStruct.ContactMethod> contactMList, int version) {
-
-        HashMap<String, String> emailMap = new HashMap<String, String>();
-        String joinMark = version == VERSION_VCARD21_INT ? ";" : ",";
-        for (ContactStruct.ContactMethod contactMethod : contactMList) {
-            // same with v2.1 and v3.0
-            switch (contactMethod.kind) {
-            case Contacts.KIND_EMAIL:
-                String mailType = "INTERNET";
-                if (!isNull(contactMethod.data)) {
-                    int methodType = new Integer(contactMethod.type).intValue();
-                    if (emailTypeMap.containsKey(methodType)) {
-                        mailType = emailTypeMap.get(methodType);
-                    } else if (emailTypes.contains(contactMethod.label
-                            .toUpperCase())) {
-                        mailType = contactMethod.label.toUpperCase();
-                    }
-                    if (emailMap.containsKey(contactMethod.data)) {
-                        mailType = emailMap.get(contactMethod.data) + joinMark
-                                + mailType;
-                    }
-                    emailMap.put(contactMethod.data, mailType);
-                }
-                break;
-            case Contacts.KIND_POSTAL:
-                if (!isNull(contactMethod.data)) {
-                    mResult.append("ADR;TYPE=POSTAL:").append(
-                            foldingString(contactMethod.data, version)).append(
-                            mNewline);
-                }
-                break;
-            default:
-                break;
-            }
-        }
-        for (Map.Entry<String, String> email : emailMap.entrySet()) {
-            if (version == VERSION_VCARD21_INT) {
-                mResult.append("EMAIL;");
-            } else {
-                mResult.append("EMAIL;TYPE=");
-            }
-            mResult.append(email.getValue()).append(":").append(email.getKey())
-                    .append(mNewline);
-        }
-    }
-}
diff --git a/core/java/android/syncml/pim/vcard/VCardDataBuilder.java b/core/java/android/syncml/pim/vcard/VCardDataBuilder.java
deleted file mode 100644
index 7158a76..0000000
--- a/core/java/android/syncml/pim/vcard/VCardDataBuilder.java
+++ /dev/null
@@ -1,447 +0,0 @@
-/*
- * Copyright (C) 2007 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.
- */
-
-package android.syncml.pim.vcard;
-
-import android.app.ProgressDialog;
-import android.content.AbstractSyncableContentProvider;
-import android.content.ContentProvider;
-import android.content.ContentResolver;
-import android.content.ContentValues;
-import android.content.IContentProvider;
-import android.os.Handler;
-import android.provider.Contacts;
-import android.syncml.pim.PropertyNode;
-import android.syncml.pim.VBuilder;
-import android.syncml.pim.VNode;
-import android.syncml.pim.VParser;
-import android.text.TextUtils;
-import android.util.CharsetUtils;
-import android.util.Log;
-
-import org.apache.commons.codec.DecoderException;
-import org.apache.commons.codec.binary.Base64;
-import org.apache.commons.codec.net.QuotedPrintableCodec;
-
-import java.io.UnsupportedEncodingException;
-import java.nio.ByteBuffer;
-import java.nio.charset.Charset;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * VBuilder for VCard. VCard may contain big photo images encoded by BASE64,
- * If we store all VNode entries in memory like VDataBuilder.java,
- * OutOfMemoryError may be thrown. Thus, this class push each VCard entry into
- * ContentResolver immediately.
- */
-@Deprecated
-public class VCardDataBuilder implements VBuilder {
-    static private String LOG_TAG = "VCardDataBuilder"; 
-    
-    /**
-     * If there's no other information available, this class uses this charset for encoding
-     * byte arrays.
-     */
-    static public String DEFAULT_CHARSET = "UTF-8"; 
-    
-    private class ProgressShower implements Runnable {
-        private ContactStruct mContact;
-        
-        public ProgressShower(ContactStruct contact) {
-            mContact = contact;
-        }
-        
-        public void run () {
-            mProgressDialog.setMessage(mProgressMessage + "\n" + 
-                    mContact.displayString());
-        }
-    }
-    
-    /** type=VNode */
-    private VNode mCurrentVNode;
-    private PropertyNode mCurrentPropNode;
-    private String mCurrentParamType;
-    
-    /**
-     * The charset using which VParser parses the text.
-     */
-    private String mSourceCharset;
-    
-    /**
-     * The charset with which byte array is encoded to String.
-     */
-    private String mTargetCharset;
-    private boolean mStrictLineBreakParsing;
-    private ContentResolver mContentResolver;
-    
-    // For letting VCardDataBuilder show the display name of VCard while handling it.
-    private Handler mHandler;
-    private ProgressDialog mProgressDialog;
-    private String mProgressMessage;
-    private Runnable mOnProgressRunnable;
-    private boolean mLastNameComesBeforeFirstName;
-    
-    // Just for testing.
-    private long mTimeCreateContactStruct;
-    private long mTimePushIntoContentResolver;
-    
-    // Ideally, this should be ContactsProvider but it seems Class loader cannot find it,
-    // even when it is subclass of ContactsProvider...
-    private AbstractSyncableContentProvider mProvider;
-    private long mMyContactsGroupId;
-    
-    public VCardDataBuilder(ContentResolver resolver) {
-        mTargetCharset = DEFAULT_CHARSET;
-        mContentResolver = resolver;
-    }
-    
-    /**
-     * Constructor which requires minimum requiredvariables.
-     * 
-     * @param resolver insert each data into this ContentResolver
-     * @param progressDialog 
-     * @param progressMessage
-     * @param handler if this importer works on the different thread than main one,
-     * set appropriate handler object. If not, it is ok to set this null.
-     */
-    public VCardDataBuilder(ContentResolver resolver,
-            ProgressDialog progressDialog,
-            String progressMessage,
-            Handler handler) {
-        this(resolver, progressDialog, progressMessage, handler,
-                null, null, false, false);
-    }
-
-    public VCardDataBuilder(ContentResolver resolver,
-            ProgressDialog progressDialog,
-            String progressMessage,
-            Handler handler,
-            String charset,
-            boolean strictLineBreakParsing,
-            boolean lastNameComesBeforeFirstName) {
-        this(resolver, progressDialog, progressMessage, handler,
-                null, charset, strictLineBreakParsing,
-                lastNameComesBeforeFirstName);
-    }
-    
-    /**
-     * @hide
-     */
-    public VCardDataBuilder(ContentResolver resolver,
-            ProgressDialog progressDialog,
-            String progressMessage,
-            Handler handler,
-            String sourceCharset,
-            String targetCharset,
-            boolean strictLineBreakParsing,
-            boolean lastNameComesBeforeFirstName) {
-        if (sourceCharset != null) {
-            mSourceCharset = sourceCharset;
-        } else {
-            mSourceCharset = VParser.DEFAULT_CHARSET;
-        }
-        if (targetCharset != null) {
-            mTargetCharset = targetCharset;
-        } else {
-            mTargetCharset = DEFAULT_CHARSET;
-        }
-        mContentResolver = resolver;
-        mStrictLineBreakParsing = strictLineBreakParsing;
-        mHandler = handler;
-        mProgressDialog = progressDialog;
-        mProgressMessage = progressMessage;
-        mLastNameComesBeforeFirstName = lastNameComesBeforeFirstName;
-        
-        tryGetOriginalProvider();
-    }
-    
-    private void tryGetOriginalProvider() {
-        final ContentResolver resolver = mContentResolver;
-        
-        if ((mMyContactsGroupId = Contacts.People.tryGetMyContactsGroupId(resolver)) == 0) {
-            Log.e(LOG_TAG, "Could not get group id of MyContact");
-            return;
-        }
-
-        IContentProvider iProviderForName = resolver.acquireProvider(Contacts.CONTENT_URI);
-        ContentProvider contentProvider =
-            ContentProvider.coerceToLocalContentProvider(iProviderForName);
-        if (contentProvider == null) {
-            Log.e(LOG_TAG, "Fail to get ContentProvider object.");
-            return;
-        }
-        
-        if (!(contentProvider instanceof AbstractSyncableContentProvider)) {
-            Log.e(LOG_TAG,
-                    "Acquired ContentProvider object is not AbstractSyncableContentProvider.");
-            return;
-        }
-        
-        mProvider = (AbstractSyncableContentProvider)contentProvider; 
-    }
-    
-    public void setOnProgressRunnable(Runnable runnable) {
-        mOnProgressRunnable = runnable;
-    }
-    
-    public void start() {
-    }
-
-    public void end() {
-    }
-
-    /**
-     * Assume that VCard is not nested. In other words, this code does not accept 
-     */
-    public void startRecord(String type) {
-        if (mCurrentVNode != null) {
-            // This means startRecord() is called inside startRecord() - endRecord() block.
-            // TODO: should throw some Exception
-            Log.e(LOG_TAG, "Nested VCard code is not supported now.");
-        }
-        mCurrentVNode = new VNode();
-        mCurrentVNode.parseStatus = 1;
-        mCurrentVNode.VName = type;
-    }
-
-    public void endRecord() {
-        mCurrentVNode.parseStatus = 0;
-        long start = System.currentTimeMillis();
-        ContactStruct contact = ContactStruct.constructContactFromVNode(mCurrentVNode,
-                mLastNameComesBeforeFirstName ? ContactStruct.NAME_ORDER_TYPE_JAPANESE :
-                    ContactStruct.NAME_ORDER_TYPE_ENGLISH);
-        mTimeCreateContactStruct += System.currentTimeMillis() - start;
-        if (!contact.isIgnorable()) {
-            if (mProgressDialog != null && mProgressMessage != null) {
-                if (mHandler != null) {
-                    mHandler.post(new ProgressShower(contact));
-                } else {
-                    mProgressDialog.setMessage(mProgressMessage + "\n" + 
-                            contact.displayString());
-                }
-            }
-            start = System.currentTimeMillis();
-            if (mProvider != null) {
-                contact.pushIntoAbstractSyncableContentProvider(
-                        mProvider, mMyContactsGroupId);
-            } else {
-                contact.pushIntoContentResolver(mContentResolver);
-            }
-            mTimePushIntoContentResolver += System.currentTimeMillis() - start;
-        }
-        if (mOnProgressRunnable != null) {
-            mOnProgressRunnable.run();
-        }
-        mCurrentVNode = null;
-    }
-
-    public void startProperty() {
-        mCurrentPropNode = new PropertyNode();
-    }
-
-    public void endProperty() {
-        mCurrentVNode.propList.add(mCurrentPropNode);
-        mCurrentPropNode = null;
-    }
-    
-    public void propertyName(String name) {
-        mCurrentPropNode.propName = name;
-    }
-
-    public void propertyGroup(String group) {
-        mCurrentPropNode.propGroupSet.add(group);
-    }
-    
-    public void propertyParamType(String type) {
-        mCurrentParamType = type;
-    }
-
-    public void propertyParamValue(String value) {
-        if (mCurrentParamType == null ||
-                mCurrentParamType.equalsIgnoreCase("TYPE")) {
-            mCurrentPropNode.paramMap_TYPE.add(value);
-        } else {
-            mCurrentPropNode.paramMap.put(mCurrentParamType, value);
-        }
-
-        mCurrentParamType = null;
-    }
-    
-    private String encodeString(String originalString, String targetCharset) {
-        if (mSourceCharset.equalsIgnoreCase(targetCharset)) {
-            return originalString;
-        }
-        Charset charset = Charset.forName(mSourceCharset);
-        ByteBuffer byteBuffer = charset.encode(originalString);
-        // byteBuffer.array() "may" return byte array which is larger than
-        // byteBuffer.remaining(). Here, we keep on the safe side.
-        byte[] bytes = new byte[byteBuffer.remaining()];
-        byteBuffer.get(bytes);
-        try {
-            return new String(bytes, targetCharset);
-        } catch (UnsupportedEncodingException e) {
-            Log.e(LOG_TAG, "Failed to encode: charset=" + targetCharset);
-            return new String(bytes);
-        }
-    }
-    
-    private String handleOneValue(String value, String targetCharset, String encoding) {
-        if (encoding != null) {
-            if (encoding.equals("BASE64") || encoding.equals("B")) {
-                mCurrentPropNode.propValue_bytes =
-                    Base64.decodeBase64(value.getBytes());
-                return value;
-            } else if (encoding.equals("QUOTED-PRINTABLE")) {
-                // "= " -> " ", "=\t" -> "\t".
-                // Previous code had done this replacement. Keep on the safe side.
-                StringBuilder builder = new StringBuilder();
-                int length = value.length();
-                for (int i = 0; i < length; i++) {
-                    char ch = value.charAt(i);
-                    if (ch == '=' && i < length - 1) {
-                        char nextCh = value.charAt(i + 1);
-                        if (nextCh == ' ' || nextCh == '\t') {
-
-                            builder.append(nextCh);
-                            i++;
-                            continue;
-                        }
-                    }
-                    builder.append(ch);
-                }
-                String quotedPrintable = builder.toString();
-                
-                String[] lines;
-                if (mStrictLineBreakParsing) {
-                    lines = quotedPrintable.split("\r\n");
-                } else {
-                    builder = new StringBuilder();
-                    length = quotedPrintable.length();
-                    ArrayList<String> list = new ArrayList<String>();
-                    for (int i = 0; i < length; i++) {
-                        char ch = quotedPrintable.charAt(i);
-                        if (ch == '\n') {
-                            list.add(builder.toString());
-                            builder = new StringBuilder();
-                        } else if (ch == '\r') {
-                            list.add(builder.toString());
-                            builder = new StringBuilder();
-                            if (i < length - 1) {
-                                char nextCh = quotedPrintable.charAt(i + 1);
-                                if (nextCh == '\n') {
-                                    i++;
-                                }
-                            }
-                        } else {
-                            builder.append(ch);
-                        }
-                    }
-                    String finalLine = builder.toString();
-                    if (finalLine.length() > 0) {
-                        list.add(finalLine);
-                    }
-                    lines = list.toArray(new String[0]);
-                }
-                
-                builder = new StringBuilder();
-                for (String line : lines) {
-                    if (line.endsWith("=")) {
-                        line = line.substring(0, line.length() - 1);
-                    }
-                    builder.append(line);
-                }
-                byte[] bytes;
-                try {
-                    bytes = builder.toString().getBytes(mSourceCharset);
-                } catch (UnsupportedEncodingException e1) {
-                    Log.e(LOG_TAG, "Failed to encode: charset=" + mSourceCharset);
-                    bytes = builder.toString().getBytes();
-                }
-                
-                try {
-                    bytes = QuotedPrintableCodec.decodeQuotedPrintable(bytes);
-                } catch (DecoderException e) {
-                    Log.e(LOG_TAG, "Failed to decode quoted-printable: " + e);
-                    return "";
-                }
-
-                try {
-                    return new String(bytes, targetCharset);
-                } catch (UnsupportedEncodingException e) {
-                    Log.e(LOG_TAG, "Failed to encode: charset=" + targetCharset);
-                    return new String(bytes);
-                }
-            }
-            // Unknown encoding. Fall back to default.
-        }
-        return encodeString(value, targetCharset);
-    }
-    
-    public void propertyValues(List<String> values) {
-        if (values == null || values.size() == 0) {
-            mCurrentPropNode.propValue_bytes = null;
-            mCurrentPropNode.propValue_vector.clear();
-            mCurrentPropNode.propValue_vector.add("");
-            mCurrentPropNode.propValue = "";
-            return;
-        }
-        
-        ContentValues paramMap = mCurrentPropNode.paramMap;
-        
-        String targetCharset = CharsetUtils.nameForDefaultVendor(paramMap.getAsString("CHARSET")); 
-        String encoding = paramMap.getAsString("ENCODING"); 
-        
-        Log.d("@@@", String.format("targetCharset: \"%s\", encoding: \"%s\"",
-                targetCharset, encoding));
-
-        if (TextUtils.isEmpty(targetCharset)) {
-            targetCharset = mTargetCharset;
-        }
-        
-        for (String value : values) {
-            mCurrentPropNode.propValue_vector.add(
-                    handleOneValue(value, targetCharset, encoding));
-        }
-
-        mCurrentPropNode.propValue = listToString(mCurrentPropNode.propValue_vector);
-    }
-
-    public void showDebugInfo() {
-        Log.d(LOG_TAG, "time for creating ContactStruct: " + mTimeCreateContactStruct + " ms");
-        Log.d(LOG_TAG, "time for insert ContactStruct to database: " + 
-                mTimePushIntoContentResolver + " ms");
-    }
-    
-    private String listToString(List<String> list){
-        int size = list.size();
-        if (size > 1) {
-            StringBuilder builder = new StringBuilder();
-            int i = 0;
-            for (String type : list) {
-                builder.append(type);
-                if (i < size - 1) {
-                    builder.append(";");
-                }
-            }
-            return builder.toString();
-        } else if (size == 1) {
-            return list.get(0);
-        } else {
-            return "";
-        }
-    }
-}
diff --git a/core/java/android/syncml/pim/vcard/VCardEntryCounter.java b/core/java/android/syncml/pim/vcard/VCardEntryCounter.java
deleted file mode 100644
index 0658290..0000000
--- a/core/java/android/syncml/pim/vcard/VCardEntryCounter.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (C) 2009 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.
- */
-
-package android.syncml.pim.vcard;
-
-import java.util.List;
-
-import android.syncml.pim.VBuilder;
-
-@Deprecated
-public class VCardEntryCounter implements VBuilder {
-    private int mCount;
-    
-    public int getCount() {
-        return mCount;
-    }
-    
-    public void start() {
-    }
-    
-    public void end() {
-    }
-
-    public void startRecord(String type) {
-    }
-
-    public void endRecord() {
-        mCount++;
-    }
-    
-    public void startProperty() {
-    }
-    
-    public void endProperty() {
-    }
-
-    public void propertyGroup(String group) {
-    }
-
-    public void propertyName(String name) {
-    }
-
-    public void propertyParamType(String type) {
-    }
-
-    public void propertyParamValue(String value) {
-    }
-
-    public void propertyValues(List<String> values) {
-    }    
-}
\ No newline at end of file
diff --git a/core/java/android/syncml/pim/vcard/VCardException.java b/core/java/android/syncml/pim/vcard/VCardException.java
deleted file mode 100644
index 92ca0de..0000000
--- a/core/java/android/syncml/pim/vcard/VCardException.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2007 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.
- */
-
-package android.syncml.pim.vcard;
-
-@Deprecated
-public class VCardException extends java.lang.Exception{
-    // constructors
-
-    /**
-     * Constructs a VCardException object
-     */
-
-    public VCardException()
-    {
-    }
-
-    /**
-     * Constructs a VCardException object
-     *
-     * @param message the error message
-     */
-
-    public VCardException( String message )
-    {
-        super( message );
-    }
-
-}
diff --git a/core/java/android/syncml/pim/vcard/VCardNestedException.java b/core/java/android/syncml/pim/vcard/VCardNestedException.java
deleted file mode 100644
index aa064fd..0000000
--- a/core/java/android/syncml/pim/vcard/VCardNestedException.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 2009 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.
- */
-
-package android.syncml.pim.vcard;
-
-/**
- * VCardException thrown when VCard is nested without VCardParser's being notified.
- */
-@Deprecated
-public class VCardNestedException extends VCardException {
-    public VCardNestedException() {}
-    public VCardNestedException(String message) {
-        super(message);
-    }
-}
diff --git a/core/java/android/syncml/pim/vcard/VCardParser.java b/core/java/android/syncml/pim/vcard/VCardParser.java
deleted file mode 100644
index 4fe8c73..0000000
--- a/core/java/android/syncml/pim/vcard/VCardParser.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.syncml.pim.vcard;
-
-import android.syncml.pim.VDataBuilder;
-import android.util.Config;
-import android.util.Log;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-
-@Deprecated
-public class VCardParser {
-
-    // TODO: fix this.
-    VCardParser_V21 mParser = null;
-
-    public final static String VERSION_VCARD21 = "vcard2.1";
-
-    public final static String VERSION_VCARD30 = "vcard3.0";
-
-    final public static int VERSION_VCARD21_INT = 1;
-
-    final public static int VERSION_VCARD30_INT = 2;
-
-    String mVersion = null;
-
-    static final private String TAG = "VCardParser";
-
-    public VCardParser() {
-    }
-
-    /**
-     * If version not given. Search from vcard string of the VERSION property.
-     * Then instance mParser to appropriate parser.
-     *
-     * @param vcardStr
-     *            the content of vcard data
-     */
-    private void judgeVersion(String vcardStr) {
-        if (mVersion == null) {// auto judge
-            int verIdx = vcardStr.indexOf("\nVERSION:");
-            if (verIdx == -1) // if not have VERSION, v2.1 default
-                mVersion = VERSION_VCARD21;
-            else {
-                String verStr = vcardStr.substring(verIdx, vcardStr.indexOf(
-                        "\n", verIdx + 1));
-                if (verStr.indexOf("2.1") > 0)
-                    mVersion = VERSION_VCARD21;
-                else if (verStr.indexOf("3.0") > 0)
-                    mVersion = VERSION_VCARD30;
-                else
-                    mVersion = VERSION_VCARD21;
-            }
-        }
-        if (mVersion.equals(VERSION_VCARD21))
-            mParser = new VCardParser_V21();
-        if (mVersion.equals(VERSION_VCARD30))
-            mParser = new VCardParser_V30();
-    }
-
-    /**
-     * To make sure the vcard string has proper wrap character
-     *
-     * @param vcardStr
-     *            the string to be checked
-     * @return string after verified
-     */
-    private String verifyVCard(String vcardStr) {
-        this.judgeVersion(vcardStr);
-        // -- indent line:
-        vcardStr = vcardStr.replaceAll("\r\n", "\n");
-        String[] strlist = vcardStr.split("\n");
-        StringBuilder v21str = new StringBuilder("");
-        for (int i = 0; i < strlist.length; i++) {
-            if (strlist[i].indexOf(":") < 0) {
-                if (strlist[i].length() == 0 && strlist[i + 1].indexOf(":") > 0)
-                    v21str.append(strlist[i]).append("\r\n");
-                else
-                    v21str.append(" ").append(strlist[i]).append("\r\n");
-            } else
-                v21str.append(strlist[i]).append("\r\n");
-        }
-        return v21str.toString();
-    }
-
-    /**
-     * Set current version
-     *
-     * @param version
-     *            the new version
-     */
-    private void setVersion(String version) {
-        this.mVersion = version;
-    }
-
-    /**
-     * Parse the given vcard string
-     *
-     * @param vcardStr
-     *            to content to be parsed
-     * @param builder
-     *            the data builder to hold data
-     * @return true if the string is successfully parsed, else return false
-     * @throws VCardException
-     * @throws IOException
-     */
-    public boolean parse(String vcardStr, VDataBuilder builder)
-            throws VCardException, IOException {
-
-        vcardStr = this.verifyVCard(vcardStr);
-
-        boolean isSuccess = mParser.parse(new ByteArrayInputStream(vcardStr
-                .getBytes()), "US-ASCII", builder);
-        if (!isSuccess) {
-            if (mVersion.equals(VERSION_VCARD21)) {
-                if (Config.LOGD)
-                    Log.d(TAG, "Parse failed for vCard 2.1 parser."
-                            + " Try to use 3.0 parser.");
-
-                this.setVersion(VERSION_VCARD30);
-
-                return this.parse(vcardStr, builder);
-            }
-            throw new VCardException("parse failed.(even use 3.0 parser)");
-        }
-        return true;
-    }
-}
diff --git a/core/java/android/syncml/pim/vcard/VCardParser_V21.java b/core/java/android/syncml/pim/vcard/VCardParser_V21.java
deleted file mode 100644
index e6379a9..0000000
--- a/core/java/android/syncml/pim/vcard/VCardParser_V21.java
+++ /dev/null
@@ -1,976 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.syncml.pim.vcard;
-
-import android.syncml.pim.VBuilder;
-import android.syncml.pim.VParser;
-import android.util.Log;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-
-/**
- * This class is used to parse vcard. Please refer to vCard Specification 2.1.
- */
-@Deprecated
-public class VCardParser_V21 {
-    private static final String LOG_TAG = "VCardParser_V21";
-    
-    public static final String DEFAULT_CHARSET = VParser.DEFAULT_CHARSET;
-    
-    /** Store the known-type */
-    private static final HashSet<String> sKnownTypeSet = new HashSet<String>(
-            Arrays.asList("DOM", "INTL", "POSTAL", "PARCEL", "HOME", "WORK",
-                    "PREF", "VOICE", "FAX", "MSG", "CELL", "PAGER", "BBS",
-                    "MODEM", "CAR", "ISDN", "VIDEO", "AOL", "APPLELINK",
-                    "ATTMAIL", "CIS", "EWORLD", "INTERNET", "IBMMAIL",
-                    "MCIMAIL", "POWERSHARE", "PRODIGY", "TLX", "X400", "GIF",
-                    "CGM", "WMF", "BMP", "MET", "PMB", "DIB", "PICT", "TIFF",
-                    "PDF", "PS", "JPEG", "QTIME", "MPEG", "MPEG2", "AVI",
-                    "WAVE", "AIFF", "PCM", "X509", "PGP"));
-
-    /** Store the known-value */
-    private static final HashSet<String> sKnownValueSet = new HashSet<String>(
-            Arrays.asList("INLINE", "URL", "CONTENT-ID", "CID"));
-        
-    /** Store the property names available in vCard 2.1 */
-    private static final HashSet<String> sAvailablePropertyNameV21 =
-        new HashSet<String>(Arrays.asList(
-                "BEGIN", "LOGO", "PHOTO", "LABEL", "FN", "TITLE", "SOUND",
-                "VERSION", "TEL", "EMAIL", "TZ", "GEO", "NOTE", "URL",
-                "BDAY", "ROLE", "REV", "UID", "KEY", "MAILER"));
-
-    // Though vCard 2.1 specification does not allow "B" encoding, some data may have it.
-    // We allow it for safety...
-    private static final HashSet<String> sAvailableEncodingV21 =
-        new HashSet<String>(Arrays.asList(
-                "7BIT", "8BIT", "QUOTED-PRINTABLE", "BASE64", "B"));
-    
-    // Used only for parsing END:VCARD.
-    private String mPreviousLine;
-    
-    /** The builder to build parsed data */
-    protected VBuilder mBuilder = null;
-
-    /** The encoding type */
-    protected String mEncoding = null;
-    
-    protected final String sDefaultEncoding = "8BIT";
-    
-    // Should not directly read a line from this. Use getLine() instead.
-    protected BufferedReader mReader;
-    
-    private boolean mCanceled;
-    
-    // In some cases, vCard is nested. Currently, we only consider the most interior vCard data.
-    // See v21_foma_1.vcf in test directory for more information.
-    private int mNestCount;
-    
-    // In order to reduce warning message as much as possible, we hold the value which made Logger
-    // emit a warning message.
-    protected HashSet<String> mWarningValueMap = new HashSet<String>();
-    
-    // Just for debugging
-    private long mTimeTotal;
-    private long mTimeStartRecord;
-    private long mTimeEndRecord;
-    private long mTimeStartProperty;
-    private long mTimeEndProperty;
-    private long mTimeParseItems;
-    private long mTimeParseItem1;
-    private long mTimeParseItem2;
-    private long mTimeParseItem3;
-    private long mTimeHandlePropertyValue1;
-    private long mTimeHandlePropertyValue2;
-    private long mTimeHandlePropertyValue3;
-    
-    /**
-     * Create a new VCard parser.
-     */
-    public VCardParser_V21() {
-        super();
-    }
-
-    public VCardParser_V21(VCardSourceDetector detector) {
-        super();
-        if (detector != null && detector.getType() == VCardSourceDetector.TYPE_FOMA) {
-            mNestCount = 1;
-        }
-    }
-    
-    /**
-     * Parse the file at the given position
-     * vcard_file   = [wsls] vcard [wsls]
-     */
-    protected void parseVCardFile() throws IOException, VCardException {
-        boolean firstReading = true;
-        while (true) {
-            if (mCanceled) {
-                break;
-            }
-            if (!parseOneVCard(firstReading)) {
-                break;
-            }
-            firstReading = false;
-        }
-
-        if (mNestCount > 0) {
-            boolean useCache = true;
-            for (int i = 0; i < mNestCount; i++) {
-                readEndVCard(useCache, true);
-                useCache = false;
-            }
-        }
-    }
-
-    protected String getVersion() {
-        return "2.1";
-    }
-    
-    /**
-     * @return true when the propertyName is a valid property name.
-     */
-    protected boolean isValidPropertyName(String propertyName) {
-        if (!(sAvailablePropertyNameV21.contains(propertyName.toUpperCase()) ||
-                propertyName.startsWith("X-")) && 
-                !mWarningValueMap.contains(propertyName)) {
-            mWarningValueMap.add(propertyName);
-            Log.w(LOG_TAG, "Property name unsupported by vCard 2.1: " + propertyName);
-        }
-        return true;
-    }
-
-    /**
-     * @return true when the encoding is a valid encoding.
-     */
-    protected boolean isValidEncoding(String encoding) {
-        return sAvailableEncodingV21.contains(encoding.toUpperCase());
-    }
-    
-    /**
-     * @return String. It may be null, or its length may be 0
-     * @throws IOException
-     */
-    protected String getLine() throws IOException {
-        return mReader.readLine();
-    }
-    
-    /**
-     * @return String with it's length > 0
-     * @throws IOException
-     * @throws VCardException when the stream reached end of line
-     */
-    protected String getNonEmptyLine() throws IOException, VCardException {
-        String line;
-        while (true) {
-            line = getLine();
-            if (line == null) {
-                throw new VCardException("Reached end of buffer.");
-            } else if (line.trim().length() > 0) {                
-                return line;
-            }
-        }
-    }
-    
-    /**
-     *  vcard        = "BEGIN" [ws] ":" [ws] "VCARD" [ws] 1*CRLF
-     *                 items *CRLF
-     *                 "END" [ws] ":" [ws] "VCARD"
-     */
-    private boolean parseOneVCard(boolean firstReading) throws IOException, VCardException {
-        boolean allowGarbage = false;
-        if (firstReading) {
-            if (mNestCount > 0) {
-                for (int i = 0; i < mNestCount; i++) {
-                    if (!readBeginVCard(allowGarbage)) {
-                        return false;
-                    }
-                    allowGarbage = true;
-                }
-            }
-        }
-
-        if (!readBeginVCard(allowGarbage)) {
-            return false;
-        }
-        long start;
-        if (mBuilder != null) {
-            start = System.currentTimeMillis();
-            mBuilder.startRecord("VCARD");
-            mTimeStartRecord += System.currentTimeMillis() - start;
-        }
-        start = System.currentTimeMillis();
-        parseItems();
-        mTimeParseItems += System.currentTimeMillis() - start;
-        readEndVCard(true, false);
-        if (mBuilder != null) {
-            start = System.currentTimeMillis();
-            mBuilder.endRecord();
-            mTimeEndRecord += System.currentTimeMillis() - start;
-        }
-        return true;
-    }
-    
-    /**
-     * @return True when successful. False when reaching the end of line  
-     * @throws IOException
-     * @throws VCardException
-     */
-    protected boolean readBeginVCard(boolean allowGarbage)
-            throws IOException, VCardException {
-        String line;
-        do {
-            while (true) {
-                line = getLine();
-                if (line == null) {
-                    return false;
-                } else if (line.trim().length() > 0) {
-                    break;
-                }
-            }
-            String[] strArray = line.split(":", 2);
-            int length = strArray.length;
-
-            // Though vCard 2.1/3.0 specification does not allow lower cases,
-            // some data may have them, so we allow it (Actually, previous code
-            // had explicitly allowed "BEGIN:vCard" though there's no example).
-            //
-            // TODO: ignore non vCard entry (e.g. vcalendar).
-            // XXX: Not sure, but according to VDataBuilder.java, vcalendar
-            // entry
-            // may be nested. Just seeking "END:SOMETHING" may not be enough.
-            // e.g.
-            // BEGIN:VCARD
-            // ... (Valid. Must parse this)
-            // END:VCARD
-            // BEGIN:VSOMETHING
-            // ... (Must ignore this)
-            // BEGIN:VSOMETHING2
-            // ... (Must ignore this)
-            // END:VSOMETHING2
-            // ... (Must ignore this!)
-            // END:VSOMETHING
-            // BEGIN:VCARD
-            // ... (Valid. Must parse this)
-            // END:VCARD
-            // INVALID_STRING (VCardException should be thrown)
-            if (length == 2 &&
-                    strArray[0].trim().equalsIgnoreCase("BEGIN") &&
-                    strArray[1].trim().equalsIgnoreCase("VCARD")) {
-                return true;
-            } else if (!allowGarbage) {
-                if (mNestCount > 0) {
-                    mPreviousLine = line;
-                    return false;
-                } else {
-                    throw new VCardException(
-                            "Expected String \"BEGIN:VCARD\" did not come "
-                            + "(Instead, \"" + line + "\" came)");
-                }
-            }
-        } while(allowGarbage);
-
-        throw new VCardException("Reached where must not be reached.");
-    }
-
-    /**
-     * The arguments useCache and allowGarbase are usually true and false accordingly when
-     * this function is called outside this function itself. 
-     * 
-     * @param useCache When true, line is obtained from mPreviousline. Otherwise, getLine()
-     * is used.
-     * @param allowGarbage When true, ignore non "END:VCARD" line.
-     * @throws IOException
-     * @throws VCardException
-     */
-    protected void readEndVCard(boolean useCache, boolean allowGarbage)
-            throws IOException, VCardException {
-        String line;
-        do {
-            if (useCache) {
-                // Though vCard specification does not allow lower cases,
-                // some data may have them, so we allow it.
-                line = mPreviousLine;
-            } else {
-                while (true) {
-                    line = getLine();
-                    if (line == null) {
-                        throw new VCardException("Expected END:VCARD was not found.");
-                    } else if (line.trim().length() > 0) {
-                        break;
-                    }
-                }
-            }
-
-            String[] strArray = line.split(":", 2);
-            if (strArray.length == 2 &&
-                    strArray[0].trim().equalsIgnoreCase("END") &&
-                    strArray[1].trim().equalsIgnoreCase("VCARD")) {
-                return;
-            } else if (!allowGarbage) {
-                throw new VCardException("END:VCARD != \"" + mPreviousLine + "\"");
-            }
-            useCache = false;
-        } while (allowGarbage);
-    }
-    
-    /**
-     * items = *CRLF item 
-     *       / item
-     */
-    protected void parseItems() throws IOException, VCardException {
-        /* items *CRLF item / item */
-        boolean ended = false;
-        
-        if (mBuilder != null) {
-            long start = System.currentTimeMillis();
-            mBuilder.startProperty();
-            mTimeStartProperty += System.currentTimeMillis() - start;
-        }
-        ended = parseItem();
-        if (mBuilder != null && !ended) {
-            long start = System.currentTimeMillis();
-            mBuilder.endProperty();
-            mTimeEndProperty += System.currentTimeMillis() - start;
-        }
-
-        while (!ended) {
-            // follow VCARD ,it wont reach endProperty
-            if (mBuilder != null) {
-                long start = System.currentTimeMillis();
-                mBuilder.startProperty();
-                mTimeStartProperty += System.currentTimeMillis() - start;
-            }
-            ended = parseItem();
-            if (mBuilder != null && !ended) {
-                long start = System.currentTimeMillis();
-                mBuilder.endProperty();
-                mTimeEndProperty += System.currentTimeMillis() - start;
-            }
-        }
-    }
-    
-    /**
-     * item      = [groups "."] name    [params] ":" value CRLF
-     *           / [groups "."] "ADR"   [params] ":" addressparts CRLF
-     *           / [groups "."] "ORG"   [params] ":" orgparts CRLF
-     *           / [groups "."] "N"     [params] ":" nameparts CRLF
-     *           / [groups "."] "AGENT" [params] ":" vcard CRLF 
-     */
-    protected boolean parseItem() throws IOException, VCardException {
-        mEncoding = sDefaultEncoding;
-
-        String line = getNonEmptyLine();
-        long start = System.currentTimeMillis();
-
-        String[] propertyNameAndValue = separateLineAndHandleGroup(line);
-        if (propertyNameAndValue == null) {
-            return true;
-        }
-        if (propertyNameAndValue.length != 2) {
-            throw new VCardException("Invalid line \"" + line + "\""); 
-        }
-        String propertyName = propertyNameAndValue[0].toUpperCase();
-        String propertyValue = propertyNameAndValue[1];
-
-        mTimeParseItem1 += System.currentTimeMillis() - start;
-
-        if (propertyName.equals("ADR") ||
-                propertyName.equals("ORG") ||
-                propertyName.equals("N")) {
-            start = System.currentTimeMillis();
-            handleMultiplePropertyValue(propertyName, propertyValue);
-            mTimeParseItem3 += System.currentTimeMillis() - start;
-            return false;
-        } else if (propertyName.equals("AGENT")) {
-            handleAgent(propertyValue);
-            return false;
-        } else if (isValidPropertyName(propertyName)) {
-            if (propertyName.equals("BEGIN")) {
-                if (propertyValue.equals("VCARD")) {
-                    throw new VCardNestedException("This vCard has nested vCard data in it.");
-                } else {
-                    throw new VCardException("Unknown BEGIN type: " + propertyValue);
-                }
-            } else if (propertyName.equals("VERSION") &&
-                    !propertyValue.equals(getVersion())) {
-                throw new VCardVersionException("Incompatible version: " + 
-                        propertyValue + " != " + getVersion());
-            }
-            start = System.currentTimeMillis();
-            handlePropertyValue(propertyName, propertyValue);
-            mTimeParseItem2 += System.currentTimeMillis() - start;
-            return false;
-        }
-        
-        throw new VCardException("Unknown property name: \"" + 
-                propertyName + "\"");
-    }
-
-    static private final int STATE_GROUP_OR_PROPNAME = 0;
-    static private final int STATE_PARAMS = 1;
-    // vCard 3.1 specification allows double-quoted param-value, while vCard 2.1 does not.
-    // This is just for safety.
-    static private final int STATE_PARAMS_IN_DQUOTE = 2;
-    
-    protected String[] separateLineAndHandleGroup(String line) throws VCardException {
-        int length = line.length();
-        int state = STATE_GROUP_OR_PROPNAME;
-        int nameIndex = 0;
-
-        String[] propertyNameAndValue = new String[2];
-        
-        for (int i = 0; i < length; i++) {
-            char ch = line.charAt(i); 
-            switch (state) {
-            case STATE_GROUP_OR_PROPNAME:
-                if (ch == ':') { 
-                    String propertyName = line.substring(nameIndex, i);
-                    if (propertyName.equalsIgnoreCase("END")) {
-                        mPreviousLine = line;
-                        return null;
-                    }
-                    if (mBuilder != null) {
-                        mBuilder.propertyName(propertyName);
-                    }
-                    propertyNameAndValue[0] = propertyName; 
-                    if (i < length - 1) {
-                        propertyNameAndValue[1] = line.substring(i + 1); 
-                    } else {
-                        propertyNameAndValue[1] = "";
-                    }
-                    return propertyNameAndValue;
-                } else if (ch == '.') {
-                    String groupName = line.substring(nameIndex, i);
-                    if (mBuilder != null) {
-                        mBuilder.propertyGroup(groupName);
-                    }
-                    nameIndex = i + 1;
-                } else if (ch == ';') {
-                    String propertyName = line.substring(nameIndex, i);
-                    if (propertyName.equalsIgnoreCase("END")) {
-                        mPreviousLine = line;
-                        return null;
-                    }
-                    if (mBuilder != null) {
-                        mBuilder.propertyName(propertyName);
-                    }
-                    propertyNameAndValue[0] = propertyName;
-                    nameIndex = i + 1;
-                    state = STATE_PARAMS;
-                }
-                break;
-            case STATE_PARAMS:
-                if (ch == '"') {
-                    state = STATE_PARAMS_IN_DQUOTE;
-                } else if (ch == ';') { 
-                    handleParams(line.substring(nameIndex, i));
-                    nameIndex = i + 1;
-                } else if (ch == ':') {
-                    handleParams(line.substring(nameIndex, i));
-                    if (i < length - 1) {
-                        propertyNameAndValue[1] = line.substring(i + 1);
-                    } else {
-                        propertyNameAndValue[1] = "";
-                    }
-                    return propertyNameAndValue;
-                }
-                break;
-            case STATE_PARAMS_IN_DQUOTE:
-                if (ch == '"') {
-                    state = STATE_PARAMS;
-                }
-                break;
-            }
-        }
-        
-        throw new VCardException("Invalid line: \"" + line + "\"");
-    }
-    
-    
-    /**
-     * params      = ";" [ws] paramlist
-     * paramlist   = paramlist [ws] ";" [ws] param
-     *             / param
-     * param       = "TYPE" [ws] "=" [ws] ptypeval
-     *             / "VALUE" [ws] "=" [ws] pvalueval
-     *             / "ENCODING" [ws] "=" [ws] pencodingval
-     *             / "CHARSET" [ws] "=" [ws] charsetval
-     *             / "LANGUAGE" [ws] "=" [ws] langval
-     *             / "X-" word [ws] "=" [ws] word
-     *             / knowntype
-     */
-    protected void handleParams(String params) throws VCardException {
-        String[] strArray = params.split("=", 2);
-        if (strArray.length == 2) {
-            String paramName = strArray[0].trim();
-            String paramValue = strArray[1].trim();
-            if (paramName.equals("TYPE")) {
-                handleType(paramValue);
-            } else if (paramName.equals("VALUE")) {
-                handleValue(paramValue);
-            } else if (paramName.equals("ENCODING")) {
-                handleEncoding(paramValue);
-            } else if (paramName.equals("CHARSET")) {
-                handleCharset(paramValue);
-            } else if (paramName.equals("LANGUAGE")) {
-                handleLanguage(paramValue);
-            } else if (paramName.startsWith("X-")) {
-                handleAnyParam(paramName, paramValue);
-            } else {
-                throw new VCardException("Unknown type \"" + paramName + "\"");
-            }
-        } else {
-            handleType(strArray[0]);
-        }
-    }
-    
-    /**
-     * ptypeval  = knowntype / "X-" word
-     */
-    protected void handleType(String ptypeval) {
-        String upperTypeValue = ptypeval;
-        if (!(sKnownTypeSet.contains(upperTypeValue) || upperTypeValue.startsWith("X-")) && 
-                !mWarningValueMap.contains(ptypeval)) {
-            mWarningValueMap.add(ptypeval);
-            Log.w(LOG_TAG, "Type unsupported by vCard 2.1: " + ptypeval);
-        }
-        if (mBuilder != null) {
-            mBuilder.propertyParamType("TYPE");
-            mBuilder.propertyParamValue(upperTypeValue);
-        }
-    }
-    
-    /**
-     * pvalueval = "INLINE" / "URL" / "CONTENT-ID" / "CID" / "X-" word
-     */
-    protected void handleValue(String pvalueval) throws VCardException {
-        if (sKnownValueSet.contains(pvalueval.toUpperCase()) ||
-                pvalueval.startsWith("X-")) {
-            if (mBuilder != null) {
-                mBuilder.propertyParamType("VALUE");
-                mBuilder.propertyParamValue(pvalueval);
-            }
-        } else {
-            throw new VCardException("Unknown value \"" + pvalueval + "\"");
-        }
-    }
-    
-    /**
-     * pencodingval = "7BIT" / "8BIT" / "QUOTED-PRINTABLE" / "BASE64" / "X-" word
-     */
-    protected void handleEncoding(String pencodingval) throws VCardException {
-        if (isValidEncoding(pencodingval) ||
-                pencodingval.startsWith("X-")) {
-            if (mBuilder != null) {
-                mBuilder.propertyParamType("ENCODING");
-                mBuilder.propertyParamValue(pencodingval);
-            }
-            mEncoding = pencodingval;
-        } else {
-            throw new VCardException("Unknown encoding \"" + pencodingval + "\"");
-        }
-    }
-    
-    /**
-     * vCard specification only allows us-ascii and iso-8859-xxx (See RFC 1521),
-     * but some vCard contains other charset, so we allow them. 
-     */
-    protected void handleCharset(String charsetval) {
-        if (mBuilder != null) {
-            mBuilder.propertyParamType("CHARSET");
-            mBuilder.propertyParamValue(charsetval);
-        }
-    }
-    
-    /**
-     * See also Section 7.1 of RFC 1521
-     */
-    protected void handleLanguage(String langval) throws VCardException {
-        String[] strArray = langval.split("-");
-        if (strArray.length != 2) {
-            throw new VCardException("Invalid Language: \"" + langval + "\"");
-        }
-        String tmp = strArray[0];
-        int length = tmp.length();
-        for (int i = 0; i < length; i++) {
-            if (!isLetter(tmp.charAt(i))) {
-                throw new VCardException("Invalid Language: \"" + langval + "\"");
-            }
-        }
-        tmp = strArray[1];
-        length = tmp.length();
-        for (int i = 0; i < length; i++) {
-            if (!isLetter(tmp.charAt(i))) {
-                throw new VCardException("Invalid Language: \"" + langval + "\"");
-            }
-        }
-        if (mBuilder != null) {
-            mBuilder.propertyParamType("LANGUAGE");
-            mBuilder.propertyParamValue(langval);
-        }
-    }
-
-    /**
-     * Mainly for "X-" type. This accepts any kind of type without check.
-     */
-    protected void handleAnyParam(String paramName, String paramValue) {
-        if (mBuilder != null) {
-            mBuilder.propertyParamType(paramName);
-            mBuilder.propertyParamValue(paramValue);
-        }
-    }
-    
-    protected void handlePropertyValue(
-            String propertyName, String propertyValue) throws
-            IOException, VCardException {
-        if (mEncoding.equalsIgnoreCase("QUOTED-PRINTABLE")) {
-            long start = System.currentTimeMillis();
-            String result = getQuotedPrintable(propertyValue);
-            if (mBuilder != null) {
-                ArrayList<String> v = new ArrayList<String>();
-                v.add(result);
-                mBuilder.propertyValues(v);
-            }
-            mTimeHandlePropertyValue2 += System.currentTimeMillis() - start;
-        } else if (mEncoding.equalsIgnoreCase("BASE64") ||
-                mEncoding.equalsIgnoreCase("B")) {
-            long start = System.currentTimeMillis();
-            // It is very rare, but some BASE64 data may be so big that
-            // OutOfMemoryError occurs. To ignore such cases, use try-catch.
-            try {
-                String result = getBase64(propertyValue);
-                if (mBuilder != null) {
-                    ArrayList<String> v = new ArrayList<String>();
-                    v.add(result);
-                    mBuilder.propertyValues(v);
-                }
-            } catch (OutOfMemoryError error) {
-                Log.e(LOG_TAG, "OutOfMemoryError happened during parsing BASE64 data!");
-                if (mBuilder != null) {
-                    mBuilder.propertyValues(null);
-                }
-            }
-            mTimeHandlePropertyValue3 += System.currentTimeMillis() - start;
-        } else {
-            if (!(mEncoding == null || mEncoding.equalsIgnoreCase("7BIT")
-                    || mEncoding.equalsIgnoreCase("8BIT")
-                    || mEncoding.toUpperCase().startsWith("X-"))) {
-                Log.w(LOG_TAG, "The encoding unsupported by vCard spec: \"" + mEncoding + "\".");
-            }
-
-            long start = System.currentTimeMillis();
-            if (mBuilder != null) {
-                ArrayList<String> v = new ArrayList<String>();
-                v.add(maybeUnescapeText(propertyValue));
-                mBuilder.propertyValues(v);
-            }
-            mTimeHandlePropertyValue1 += System.currentTimeMillis() - start;
-        }
-    }
-    
-    protected String getQuotedPrintable(String firstString) throws IOException, VCardException {
-        // Specifically, there may be some padding between = and CRLF.
-        // See the following:
-        //
-        // qp-line := *(qp-segment transport-padding CRLF)
-        //            qp-part transport-padding
-        // qp-segment := qp-section *(SPACE / TAB) "="
-        //             ; Maximum length of 76 characters
-        //
-        // e.g. (from RFC 2045)
-        // Now's the time =
-        // for all folk to come=
-        //  to the aid of their country.
-        if (firstString.trim().endsWith("=")) {
-            // remove "transport-padding"
-            int pos = firstString.length() - 1;
-            while(firstString.charAt(pos) != '=') {
-            }
-            StringBuilder builder = new StringBuilder();
-            builder.append(firstString.substring(0, pos + 1));
-            builder.append("\r\n");
-            String line;
-            while (true) {
-                line = getLine();
-                if (line == null) {
-                    throw new VCardException(
-                            "File ended during parsing quoted-printable String");
-                }
-                if (line.trim().endsWith("=")) {
-                    // remove "transport-padding"
-                    pos = line.length() - 1;
-                    while(line.charAt(pos) != '=') {
-                    }
-                    builder.append(line.substring(0, pos + 1));
-                    builder.append("\r\n");
-                } else {
-                    builder.append(line);
-                    break;
-                }
-            }
-            return builder.toString(); 
-        } else {
-            return firstString;
-        }
-    }
-    
-    protected String getBase64(String firstString) throws IOException, VCardException {
-        StringBuilder builder = new StringBuilder();
-        builder.append(firstString);
-        
-        while (true) {
-            String line = getLine();
-            if (line == null) {
-                throw new VCardException(
-                        "File ended during parsing BASE64 binary");
-            }
-            if (line.length() == 0) {
-                break;
-            }
-            builder.append(line);
-        }
-        
-        return builder.toString();
-    }
-    
-    /**
-     * Mainly for "ADR", "ORG", and "N"
-     * We do not care the number of strnosemi here.
-     * 
-     * addressparts = 0*6(strnosemi ";") strnosemi
-     *              ; PO Box, Extended Addr, Street, Locality, Region,
-     *                Postal Code, Country Name
-     * orgparts     = *(strnosemi ";") strnosemi
-     *              ; First is Organization Name,
-     *                remainder are Organization Units.
-     * nameparts    = 0*4(strnosemi ";") strnosemi
-     *              ; Family, Given, Middle, Prefix, Suffix.
-     *              ; Example:Public;John;Q.;Reverend Dr.;III, Esq.
-     * strnosemi    = *(*nonsemi ("\;" / "\" CRLF)) *nonsemi
-     *              ; To include a semicolon in this string, it must be escaped
-     *              ; with a "\" character.
-     *              
-     * We are not sure whether we should add "\" CRLF to each value.
-     * For now, we exclude them.               
-     */
-    protected void handleMultiplePropertyValue(
-            String propertyName, String propertyValue) throws IOException, VCardException {
-        // vCard 2.1 does not allow QUOTED-PRINTABLE here, but some data have it.
-        if (mEncoding.equalsIgnoreCase("QUOTED-PRINTABLE")) {
-            propertyValue = getQuotedPrintable(propertyValue);
-        }
-
-        if (mBuilder != null) {
-            // TODO: limit should be set in accordance with propertyName?
-            StringBuilder builder = new StringBuilder();
-            ArrayList<String> list = new ArrayList<String>();
-            int length = propertyValue.length();
-            for (int i = 0; i < length; i++) {
-                char ch = propertyValue.charAt(i);
-                if (ch == '\\' && i < length - 1) {
-                    char nextCh = propertyValue.charAt(i + 1);
-                    String unescapedString = maybeUnescape(nextCh); 
-                    if (unescapedString != null) {
-                        builder.append(unescapedString);
-                        i++;
-                    } else {
-                        builder.append(ch);
-                    }
-                } else if (ch == ';') {
-                    list.add(builder.toString());
-                    builder = new StringBuilder();
-                } else {
-                    builder.append(ch);
-                }
-            }
-            list.add(builder.toString());
-            mBuilder.propertyValues(list);
-        }
-    }
-    
-    /**
-     * vCard 2.1 specifies AGENT allows one vcard entry. It is not encoded at all.
-     * 
-     * item     = ...
-     *          / [groups "."] "AGENT"
-     *            [params] ":" vcard CRLF
-     * vcard    = "BEGIN" [ws] ":" [ws] "VCARD" [ws] 1*CRLF
-     *            items *CRLF "END" [ws] ":" [ws] "VCARD"
-     * 
-     */
-    protected void handleAgent(String propertyValue) throws VCardException {
-        throw new VCardException("AGENT Property is not supported.");
-        /* This is insufficient support. Also, AGENT Property is very rare.
-           Ignore it for now.
-           TODO: fix this.
-
-        String[] strArray = propertyValue.split(":", 2);
-        if (!(strArray.length == 2 ||
-                strArray[0].trim().equalsIgnoreCase("BEGIN") && 
-                strArray[1].trim().equalsIgnoreCase("VCARD"))) {
-            throw new VCardException("BEGIN:VCARD != \"" + propertyValue + "\"");
-        }
-        parseItems();
-        readEndVCard();
-        */
-    }
-    
-    /**
-     * For vCard 3.0.
-     */
-    protected String maybeUnescapeText(String text) {
-        return text;
-    }
-    
-    /**
-     * Returns unescaped String if the character should be unescaped. Return null otherwise.
-     * e.g. In vCard 2.1, "\;" should be unescaped into ";" while "\x" should not be.
-     */
-    protected String maybeUnescape(char ch) {
-        // Original vCard 2.1 specification does not allow transformation
-        // "\:" -> ":", "\," -> ",", and "\\" -> "\", but previous implementation of
-        // this class allowed them, so keep it as is.
-        if (ch == '\\' || ch == ';' || ch == ':' || ch == ',') {
-            return String.valueOf(ch);
-        } else {
-            return null;
-        }
-    }
-    
-    /**
-     * Parse the given stream and constructs VCardDataBuilder object.
-     * Note that vCard 2.1 specification allows "CHARSET" parameter, and some career sets
-     * local encoding to it. For example, Japanese phone career uses Shift_JIS, which
-     * is not formally allowed in vCard specification.
-     * As a result, there is a case where the encoding given here does not do well with
-     * the "CHARSET".
-     * 
-     * In order to avoid such cases, It may be fine to use "ISO-8859-1" as an encoding,
-     * and to encode each localized String afterward.
-     * 
-     * RFC 2426 "recommends" (not forces) to use UTF-8, so it may be OK to use
-     * UTF-8 as an encoding when parsing vCard 3.0. But note that some Japanese
-     * phone uses Shift_JIS as a charset (e.g. W61SH), and another uses
-     * "CHARSET=SHIFT_JIS", which is explicitly prohibited in vCard 3.0 specification
-     * (e.g. W53K). 
-     *      
-     * @param is
-     *            The source to parse.
-     * @param charset
-     *            The charset.
-     * @param builder
-     *            The v builder which used to construct data.
-     * @return Return true for success, otherwise false.
-     * @throws IOException
-     */
-    public boolean parse(InputStream is, String charset, VBuilder builder)
-            throws IOException, VCardException {
-        // TODO: make this count error entries instead of just throwing VCardException.
-        
-        // TODO: If we really need to allow only CRLF as line break,
-        // we will have to develop our own BufferedReader().
-        mReader = new CustomBufferedReader(new InputStreamReader(is, charset));
-        
-        mBuilder = builder;
-
-        long start = System.currentTimeMillis();
-        if (mBuilder != null) {
-            mBuilder.start();
-        }
-        parseVCardFile();
-        if (mBuilder != null) {
-            mBuilder.end();
-        }
-        mTimeTotal += System.currentTimeMillis() - start;
-                
-        return true;
-    }
-    
-    public boolean parse(InputStream is, VBuilder builder) throws IOException, VCardException {
-        return parse(is, DEFAULT_CHARSET, builder);
-    }
-    
-    /**
-     * Cancel parsing.
-     * Actual cancel is done after the end of the current one vcard entry parsing.
-     */
-    public void cancel() {
-        mCanceled = true;
-    }
-    
-    /**
-     * It is very, very rare case, but there is a case where
-     * canceled may be already true outside this object.
-     * @hide
-     */
-    public void parse(InputStream is, String charset, VBuilder builder, boolean canceled)
-            throws IOException, VCardException {
-        mCanceled = canceled;
-        parse(is, charset, builder);
-    }
-    
-    public void showDebugInfo() {
-        Log.d(LOG_TAG, "total parsing time:  " + mTimeTotal + " ms");
-        if (mReader instanceof CustomBufferedReader) {
-            Log.d(LOG_TAG, "total readLine time: " +
-                    ((CustomBufferedReader)mReader).getTotalmillisecond() + " ms");
-        }
-        Log.d(LOG_TAG, "mTimeStartRecord: " + mTimeStartRecord + " ms");
-        Log.d(LOG_TAG, "mTimeEndRecord: " + mTimeEndRecord + " ms");
-        Log.d(LOG_TAG, "mTimeParseItem1: " + mTimeParseItem1 + " ms");
-        Log.d(LOG_TAG, "mTimeParseItem2: " + mTimeParseItem2 + " ms");
-        Log.d(LOG_TAG, "mTimeParseItem3: " + mTimeParseItem3 + " ms");
-        Log.d(LOG_TAG, "mTimeHandlePropertyValue1: " + mTimeHandlePropertyValue1 + " ms");
-        Log.d(LOG_TAG, "mTimeHandlePropertyValue2: " + mTimeHandlePropertyValue2 + " ms");
-        Log.d(LOG_TAG, "mTimeHandlePropertyValue3: " + mTimeHandlePropertyValue3 + " ms");
-    }
-    
-    private boolean isLetter(char ch) {
-        if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) {
-            return true;
-        }
-        return false;
-    }
-}
-
-class CustomBufferedReader extends BufferedReader {
-    private long mTime;
-    
-    public CustomBufferedReader(Reader in) {
-        super(in);
-    }
-    
-    @Override
-    public String readLine() throws IOException {
-        long start = System.currentTimeMillis();
-        String ret = super.readLine();
-        long end = System.currentTimeMillis();
-        mTime += end - start;
-        return ret;
-    }
-    
-    public long getTotalmillisecond() {
-        return mTime;
-    }
-}
diff --git a/core/java/android/syncml/pim/vcard/VCardParser_V30.java b/core/java/android/syncml/pim/vcard/VCardParser_V30.java
deleted file mode 100644
index 10da408..0000000
--- a/core/java/android/syncml/pim/vcard/VCardParser_V30.java
+++ /dev/null
@@ -1,307 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.syncml.pim.vcard;
-
-import android.util.Log;
-
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.HashSet;
-
-/**
- * This class is used to parse vcard3.0. <br>
- * Please refer to vCard Specification 3.0 (http://tools.ietf.org/html/rfc2426)
- */
-@Deprecated
-public class VCardParser_V30 extends VCardParser_V21 {
-    private static final String LOG_TAG = "VCardParser_V30";
-    
-    private static final HashSet<String> acceptablePropsWithParam = new HashSet<String>(
-            Arrays.asList(
-                    "BEGIN", "LOGO", "PHOTO", "LABEL", "FN", "TITLE", "SOUND", 
-                    "VERSION", "TEL", "EMAIL", "TZ", "GEO", "NOTE", "URL",
-                    "BDAY", "ROLE", "REV", "UID", "KEY", "MAILER", // 2.1
-                    "NAME", "PROFILE", "SOURCE", "NICKNAME", "CLASS",
-                    "SORT-STRING", "CATEGORIES", "PRODID")); // 3.0
-    
-    // Although "7bit" and "BASE64" is not allowed in vCard 3.0, we allow it for safety.
-    private static final HashSet<String> sAcceptableEncodingV30 = new HashSet<String>(
-            Arrays.asList("7BIT", "8BIT", "BASE64", "B"));
-    
-    // Although RFC 2426 specifies some property must not have parameters, we allow it, 
-    // since there may be some careers which violates the RFC...
-    private static final HashSet<String> acceptablePropsWithoutParam = new HashSet<String>();
-
-    private String mPreviousLine;
-    
-    @Override
-    protected String getVersion() {
-        return "3.0";
-    }
-    
-    @Override
-    protected boolean isValidPropertyName(String propertyName) {
-        if (!(acceptablePropsWithParam.contains(propertyName) ||
-                acceptablePropsWithoutParam.contains(propertyName) ||
-                propertyName.startsWith("X-")) &&
-                !mWarningValueMap.contains(propertyName)) {
-            mWarningValueMap.add(propertyName);
-            Log.w(LOG_TAG, "Property name unsupported by vCard 3.0: " + propertyName);
-        }
-        return true;
-    }
-    
-    @Override
-    protected boolean isValidEncoding(String encoding) {
-        return sAcceptableEncodingV30.contains(encoding.toUpperCase());
-    }
-    
-    @Override
-    protected String getLine() throws IOException {
-        if (mPreviousLine != null) {
-            String ret = mPreviousLine;
-            mPreviousLine = null;
-            return ret;
-        } else {
-            return mReader.readLine();
-        }
-    }
-    
-    /**
-     * vCard 3.0 requires that the line with space at the beginning of the line
-     * must be combined with previous line. 
-     */
-    @Override
-    protected String getNonEmptyLine() throws IOException, VCardException {
-        String line;
-        StringBuilder builder = null;
-        while (true) {
-            line = mReader.readLine();
-            if (line == null) {
-                if (builder != null) {
-                    return builder.toString();
-                } else if (mPreviousLine != null) {
-                    String ret = mPreviousLine;
-                    mPreviousLine = null;
-                    return ret;
-                }
-                throw new VCardException("Reached end of buffer.");
-            } else if (line.length() == 0) {
-                if (builder != null) {
-                    return builder.toString();
-                } else if (mPreviousLine != null) {
-                    String ret = mPreviousLine;
-                    mPreviousLine = null;
-                    return ret;
-                }
-            } else if (line.charAt(0) == ' ' || line.charAt(0) == '\t') {
-                if (builder != null) {
-                    // See Section 5.8.1 of RFC 2425 (MIME-DIR document).
-                    // Following is the excerpts from it.  
-                    //
-                    // DESCRIPTION:This is a long description that exists on a long line.
-                    // 
-                    // Can be represented as:
-                    //
-                    // DESCRIPTION:This is a long description
-                    //  that exists on a long line.
-                    //
-                    // It could also be represented as:
-                    //
-                    // DESCRIPTION:This is a long descrip
-                    //  tion that exists o
-                    //  n a long line.
-                    builder.append(line.substring(1));
-                } else if (mPreviousLine != null) {
-                    builder = new StringBuilder();
-                    builder.append(mPreviousLine);
-                    mPreviousLine = null;
-                    builder.append(line.substring(1));
-                } else {
-                    throw new VCardException("Space exists at the beginning of the line");
-                }
-            } else {
-                if (mPreviousLine == null) {
-                    mPreviousLine = line;
-                    if (builder != null) {
-                        return builder.toString();
-                    }
-                } else {
-                    String ret = mPreviousLine;
-                    mPreviousLine = line;
-                    return ret;
-                }
-            }
-        }
-    }
-    
-    
-    /**
-     * vcard = [group "."] "BEGIN" ":" "VCARD" 1*CRLF
-     *         1*(contentline)
-     *         ;A vCard object MUST include the VERSION, FN and N types.
-     *         [group "."] "END" ":" "VCARD" 1*CRLF
-     */
-    @Override
-    protected boolean readBeginVCard(boolean allowGarbage) throws IOException, VCardException {
-        // TODO: vCard 3.0 supports group.
-        return super.readBeginVCard(allowGarbage);
-    }
-    
-    @Override
-    protected void readEndVCard(boolean useCache, boolean allowGarbage)
-            throws IOException, VCardException {
-        // TODO: vCard 3.0 supports group.
-        super.readEndVCard(useCache, allowGarbage);
-    }
-
-    /**
-     * vCard 3.0 allows iana-token as paramType, while vCard 2.1 does not.
-     */
-    @Override
-    protected void handleParams(String params) throws VCardException {
-        try {
-            super.handleParams(params);
-        } catch (VCardException e) {
-            // maybe IANA type
-            String[] strArray = params.split("=", 2);
-            if (strArray.length == 2) {
-                handleAnyParam(strArray[0], strArray[1]);
-            } else {
-                // Must not come here in the current implementation.
-                throw new VCardException(
-                        "Unknown params value: " + params);
-            }
-        }
-    }
-    
-    @Override
-    protected void handleAnyParam(String paramName, String paramValue) {
-        // vCard 3.0 accept comma-separated multiple values, but
-        // current PropertyNode does not accept it.
-        // For now, we do not split the values.
-        //
-        // TODO: fix this.
-        super.handleAnyParam(paramName, paramValue);
-    }
-    
-    /**
-     *  vCard 3.0 defines
-     *  
-     *  param         = param-name "=" param-value *("," param-value)
-     *  param-name    = iana-token / x-name
-     *  param-value   = ptext / quoted-string
-     *  quoted-string = DQUOTE QSAFE-CHAR DQUOTE
-     */
-    @Override
-    protected void handleType(String ptypevalues) {
-        String[] ptypeArray = ptypevalues.split(",");
-        mBuilder.propertyParamType("TYPE");
-        for (String value : ptypeArray) {
-            int length = value.length();
-            if (length >= 2 && value.startsWith("\"") && value.endsWith("\"")) {
-                mBuilder.propertyParamValue(value.substring(1, value.length() - 1));
-            } else {
-                mBuilder.propertyParamValue(value);
-            }
-        }
-    }
-
-    @Override
-    protected void handleAgent(String propertyValue) throws VCardException {
-        // The way how vCard 3.0 supports "AGENT" is completely different from vCard 2.0.
-        //
-        // e.g.
-        // AGENT:BEGIN:VCARD\nFN:Joe Friday\nTEL:+1-919-555-7878\n
-        //  TITLE:Area Administrator\, Assistant\n EMAIL\;TYPE=INTERN\n
-        //  ET:jfriday@host.com\nEND:VCARD\n
-        //
-        // TODO: fix this.
-        //
-        // issue:
-        //  vCard 3.0 also allows this as an example.
-        //
-        // AGENT;VALUE=uri:
-        //  CID:JQPUBLIC.part3.960129T083020.xyzMail@host3.com
-        //
-        // This is not VCARD. Should we support this?
-        throw new VCardException("AGENT in vCard 3.0 is not supported yet.");
-    }
-    
-    /**
-     * vCard 3.0 does not require two CRLF at the last of BASE64 data.
-     * It only requires that data should be MIME-encoded.
-     */
-    @Override
-    protected String getBase64(String firstString) throws IOException, VCardException {
-        StringBuilder builder = new StringBuilder();
-        builder.append(firstString);
-        
-        while (true) {
-            String line = getLine();
-            if (line == null) {
-                throw new VCardException(
-                        "File ended during parsing BASE64 binary");
-            }
-            if (line.length() == 0) {
-                break;
-            } else if (!line.startsWith(" ") && !line.startsWith("\t")) {
-                mPreviousLine = line;
-                break;
-            }
-            builder.append(line);
-        }
-        
-        return builder.toString();
-    }
-    
-    /**
-     * ESCAPED-CHAR = "\\" / "\;" / "\," / "\n" / "\N")
-     *              ; \\ encodes \, \n or \N encodes newline
-     *              ; \; encodes ;, \, encodes ,
-     *              
-     * Note: Apple escape ':' into '\:' while does not escape '\'
-     */ 
-    @Override
-    protected String maybeUnescapeText(String text) {
-        StringBuilder builder = new StringBuilder();
-        int length = text.length();
-        for (int i = 0; i < length; i++) {
-            char ch = text.charAt(i);
-            if (ch == '\\' && i < length - 1) {
-                char next_ch = text.charAt(++i); 
-                if (next_ch == 'n' || next_ch == 'N') {
-                    builder.append("\r\n");
-                } else {
-                    builder.append(next_ch);
-                }
-            } else {
-                builder.append(ch);
-            }
-        }
-        return builder.toString();
-    }
-    
-    @Override
-    protected String maybeUnescape(char ch) {
-        if (ch == 'n' || ch == 'N') {
-            return "\r\n";
-        } else {
-            return String.valueOf(ch);
-        }
-    }
-}
diff --git a/core/java/android/syncml/pim/vcard/VCardSourceDetector.java b/core/java/android/syncml/pim/vcard/VCardSourceDetector.java
deleted file mode 100644
index 75172af..0000000
--- a/core/java/android/syncml/pim/vcard/VCardSourceDetector.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Copyright (C) 2009 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.
- */
-
-package android.syncml.pim.vcard;
-
-import android.syncml.pim.VBuilder;
-
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-/**
- * Class which tries to detects the source of the vCard from its properties.
- * Currently this implementation is very premature.
- */
-@Deprecated
-public class VCardSourceDetector implements VBuilder {
-    // Should only be used in package. 
-    static final int TYPE_UNKNOWN = 0;
-    static final int TYPE_APPLE = 1;
-    static final int TYPE_JAPANESE_MOBILE_PHONE = 2;  // Used in Japanese mobile phones.
-    static final int TYPE_FOMA = 3;  // Used in some Japanese FOMA mobile phones.
-    static final int TYPE_WINDOWS_MOBILE_JP = 4;
-    // TODO: Excel, etc.
-
-    private static Set<String> APPLE_SIGNS = new HashSet<String>(Arrays.asList(
-            "X-PHONETIC-FIRST-NAME", "X-PHONETIC-MIDDLE-NAME", "X-PHONETIC-LAST-NAME",
-            "X-ABADR", "X-ABUID"));
-    
-    private static Set<String> JAPANESE_MOBILE_PHONE_SIGNS = new HashSet<String>(Arrays.asList(
-            "X-GNO", "X-GN", "X-REDUCTION"));
-    
-    private static Set<String> WINDOWS_MOBILE_PHONE_SIGNS = new HashSet<String>(Arrays.asList(
-            "X-MICROSOFT-ASST_TEL", "X-MICROSOFT-ASSISTANT", "X-MICROSOFT-OFFICELOC"));
-    
-    // Note: these signes appears before the signs of the other type (e.g. "X-GN").
-    // In other words, Japanese FOMA mobile phones are detected as FOMA, not JAPANESE_MOBILE_PHONES.
-    private static Set<String> FOMA_SIGNS = new HashSet<String>(Arrays.asList(
-            "X-SD-VERN", "X-SD-FORMAT_VER", "X-SD-CATEGORIES", "X-SD-CLASS", "X-SD-DCREATED",
-            "X-SD-DESCRIPTION"));
-    private static String TYPE_FOMA_CHARSET_SIGN = "X-SD-CHAR_CODE";
-    
-    private int mType = TYPE_UNKNOWN;
-    // Some mobile phones (like FOMA) tells us the charset of the data.
-    private boolean mNeedParseSpecifiedCharset;
-    private String mSpecifiedCharset;
-    
-    public void start() {
-    }
-    
-    public void end() {
-    }
-
-    public void startRecord(String type) {
-    }    
-
-    public void startProperty() {
-        mNeedParseSpecifiedCharset = false;
-    }
-    
-    public void endProperty() {
-    }
-
-    public void endRecord() {
-    }
-
-    public void propertyGroup(String group) {
-    }
-    
-    public void propertyName(String name) {
-        if (name.equalsIgnoreCase(TYPE_FOMA_CHARSET_SIGN)) {
-            mType = TYPE_FOMA;
-            mNeedParseSpecifiedCharset = true;
-            return;
-        }
-        if (mType != TYPE_UNKNOWN) {
-            return;
-        }
-        if (WINDOWS_MOBILE_PHONE_SIGNS.contains(name)) {
-            mType = TYPE_WINDOWS_MOBILE_JP;
-        } else if (FOMA_SIGNS.contains(name)) {
-            mType = TYPE_FOMA;
-        } else if (JAPANESE_MOBILE_PHONE_SIGNS.contains(name)) {
-            mType = TYPE_JAPANESE_MOBILE_PHONE;
-        } else if (APPLE_SIGNS.contains(name)) {
-            mType = TYPE_APPLE;
-        }
-    }
-
-    public void propertyParamType(String type) {
-    }
-
-    public void propertyParamValue(String value) {
-    }
-
-    public void propertyValues(List<String> values) {
-        if (mNeedParseSpecifiedCharset && values.size() > 0) {
-            mSpecifiedCharset = values.get(0);
-        }
-    }
-
-    int getType() {
-        return mType;
-    }
-    
-    /**
-     * Return charset String guessed from the source's properties.
-     * This method must be called after parsing target file(s).
-     * @return Charset String. Null is returned if guessing the source fails.
-     */
-    public String getEstimatedCharset() {
-        if (mSpecifiedCharset != null) {
-            return mSpecifiedCharset;
-        }
-        switch (mType) {
-        case TYPE_WINDOWS_MOBILE_JP:
-        case TYPE_FOMA:
-        case TYPE_JAPANESE_MOBILE_PHONE:
-            return "SHIFT_JIS";
-        case TYPE_APPLE:
-            return "UTF-8";
-        default:
-            return null;
-        }
-    }
-}
diff --git a/core/java/android/syncml/pim/vcard/VCardVersionException.java b/core/java/android/syncml/pim/vcard/VCardVersionException.java
deleted file mode 100644
index 8afec9b..0000000
--- a/core/java/android/syncml/pim/vcard/VCardVersionException.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2009 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.
- */
-
-package android.syncml.pim.vcard;
-
-/**
- * VCardException used only when the version of the vCard is different.
- */
-@Deprecated
-public class VCardVersionException extends VCardException {
-    public VCardVersionException() {
-    }
-
-    public VCardVersionException(String message) {
-        super(message);
-    }
-}
diff --git a/core/java/android/syncml/pim/vcard/package.html b/core/java/android/syncml/pim/vcard/package.html
deleted file mode 100644
index cb4ca46..0000000
--- a/core/java/android/syncml/pim/vcard/package.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<HTML>
-<BODY>
-Support classes for SyncML.
-{@hide}
-</BODY>
-</HTML>
\ No newline at end of file
diff --git a/core/java/android/text/method/QwertyKeyListener.java b/core/java/android/text/method/QwertyKeyListener.java
index f736f85..2e76470 100644
--- a/core/java/android/text/method/QwertyKeyListener.java
+++ b/core/java/android/text/method/QwertyKeyListener.java
@@ -405,12 +405,13 @@
         PICKER_SETS.put('C', "\u00C7\u0106\u010C");
         PICKER_SETS.put('D', "\u010E");
         PICKER_SETS.put('E', "\u00C8\u00C9\u00CA\u00CB\u0118\u011A\u0112");
+        PICKER_SETS.put('G', "\u011E");
         PICKER_SETS.put('L', "\u0141");
         PICKER_SETS.put('I', "\u00CC\u00CD\u00CE\u00CF\u012A\u0130");
         PICKER_SETS.put('N', "\u00D1\u0143\u0147");
         PICKER_SETS.put('O', "\u00D8\u0152\u00D5\u00D2\u00D3\u00D4\u00D6\u014C");
         PICKER_SETS.put('R', "\u0158");
-        PICKER_SETS.put('S', "\u015A\u0160");
+        PICKER_SETS.put('S', "\u015A\u0160\u015E");
         PICKER_SETS.put('T', "\u0164");
         PICKER_SETS.put('U', "\u00D9\u00DA\u00DB\u00DC\u016E\u016A");
         PICKER_SETS.put('Y', "\u00DD\u0178");
@@ -419,12 +420,13 @@
         PICKER_SETS.put('c', "\u00E7\u0107\u010D");
         PICKER_SETS.put('d', "\u010F");
         PICKER_SETS.put('e', "\u00E8\u00E9\u00EA\u00EB\u0119\u011B\u0113");
+        PICKER_SETS.put('g', "\u011F");
         PICKER_SETS.put('i', "\u00EC\u00ED\u00EE\u00EF\u012B\u0131");
         PICKER_SETS.put('l', "\u0142");
         PICKER_SETS.put('n', "\u00F1\u0144\u0148");
         PICKER_SETS.put('o', "\u00F8\u0153\u00F5\u00F2\u00F3\u00F4\u00F6\u014D");
         PICKER_SETS.put('r', "\u0159");
-        PICKER_SETS.put('s', "\u00A7\u00DF\u015B\u0161");
+        PICKER_SETS.put('s', "\u00A7\u00DF\u015B\u0161\u015F");
         PICKER_SETS.put('t', "\u0165");
         PICKER_SETS.put('u', "\u00F9\u00FA\u00FB\u00FC\u016F\u016B");
         PICKER_SETS.put('y', "\u00FD\u00FF");
diff --git a/core/java/android/text/method/Touch.java b/core/java/android/text/method/Touch.java
index dfc16f5..6995107 100644
--- a/core/java/android/text/method/Touch.java
+++ b/core/java/android/text/method/Touch.java
@@ -72,6 +72,24 @@
     }
 
     /**
+     * @hide
+     * Returns the maximum scroll value in x.
+     */
+    public static int getMaxScrollX(TextView widget, Layout layout, int y) {
+        int top = layout.getLineForVertical(y);
+        int bottom = layout.getLineForVertical(y + widget.getHeight()
+                - widget.getTotalPaddingTop() -widget.getTotalPaddingBottom());
+        int left = Integer.MAX_VALUE;
+        int right = 0;
+        for (int i = top; i <= bottom; i++) {
+            left = (int) Math.min(left, layout.getLineLeft(i));
+            right = (int) Math.max(right, layout.getLineRight(i));
+        }
+        return right - left - widget.getWidth() - widget.getTotalPaddingLeft()
+                - widget.getTotalPaddingRight();
+    }
+
+    /**
      * Handles touch events for dragging.  You may want to do other actions
      * like moving the cursor on touch as well.
      */
diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java
index 356f55a..ca5e1de 100644
--- a/core/java/android/view/SurfaceView.java
+++ b/core/java/android/view/SurfaceView.java
@@ -289,6 +289,23 @@
     }
 
     /**
+     * Control whether the surface view's surface is placed on top of another
+     * regular surface view in the window (but still behind the window itself).
+     * This is typically used to place overlays on top of an underlying media
+     * surface view.
+     * 
+     * <p>Note that this must be set before the surface view's containing
+     * window is attached to the window manager.
+     * 
+     * <p>Calling this overrides any previous call to {@link #setZOrderOnTop}.
+     */
+    public void setZOrderMediaOverlay(boolean isMediaOverlay) {
+        mWindowType = isMediaOverlay
+                ? WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA_OVERLAY
+                : WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA;
+    }
+    
+    /**
      * Control whether the surface view's surface is placed on top of its
      * window.  Normally it is placed behind the window, to allow it to
      * (for the most part) appear to composite with the views in the
@@ -298,8 +315,10 @@
      * 
      * <p>Note that this must be set before the surface view's containing
      * window is attached to the window manager.
+     * 
+     * <p>Calling this overrides any previous call to {@link #setZOrderMediaOverlay}.
      */
-    public void setOnTop(boolean onTop) {
+    public void setZOrderOnTop(boolean onTop) {
         mWindowType = onTop ? WindowManager.LayoutParams.TYPE_APPLICATION_PANEL
                 : WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA;
     }
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index a39faae..7d821b5 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -4740,7 +4740,7 @@
      */
     protected boolean awakenScrollBars() {
         return mScrollCache != null &&
-                awakenScrollBars(mScrollCache.scrollBarDefaultDelayBeforeFade);
+                awakenScrollBars(mScrollCache.scrollBarDefaultDelayBeforeFade, true);
     }
 
     /**
@@ -4778,6 +4778,48 @@
      * @see #setVerticalScrollBarEnabled(boolean)
      */
     protected boolean awakenScrollBars(int startDelay) {
+        return awakenScrollBars(startDelay, true);
+    }
+        
+    /**
+     * <p>
+     * Trigger the scrollbars to draw. When invoked this method starts an
+     * animation to fade the scrollbars out after a fixed delay. If a subclass
+     * provides animated scrolling, the start delay should equal the duration of
+     * the scrolling animation.
+     * </p>
+     * 
+     * <p>
+     * The animation starts only if at least one of the scrollbars is enabled,
+     * as specified by {@link #isHorizontalScrollBarEnabled()} and
+     * {@link #isVerticalScrollBarEnabled()}. When the animation is started,
+     * this method returns true, and false otherwise. If the animation is
+     * started, this method calls {@link #invalidate()} if the invalidate parameter 
+     * is set to true; in that case the caller
+     * should not call {@link #invalidate()}.
+     * </p>
+     * 
+     * <p>
+     * This method should be invoked everytime a subclass directly updates the
+     * scroll parameters.
+     * </p>
+     * 
+     * @param startDelay the delay, in milliseconds, after which the animation
+     *        should start; when the delay is 0, the animation starts
+     *        immediately
+     * 
+     * @param invalidate Wheter this method should call invalidate
+     * 
+     * @return true if the animation is played, false otherwise
+     * 
+     * @see #scrollBy(int, int)
+     * @see #scrollTo(int, int)
+     * @see #isHorizontalScrollBarEnabled()
+     * @see #isVerticalScrollBarEnabled()
+     * @see #setHorizontalScrollBarEnabled(boolean)
+     * @see #setVerticalScrollBarEnabled(boolean)
+     */
+    protected boolean awakenScrollBars(int startDelay, boolean invalidate) {
         final ScrollabilityCache scrollCache = mScrollCache;
         
         if (scrollCache == null || !scrollCache.fadeScrollBars) {
@@ -4790,8 +4832,10 @@
 
         if (isHorizontalScrollBarEnabled() || isVerticalScrollBarEnabled()) {
 
-            // Invalidate to show the scrollbars
-            invalidate();
+            if (invalidate) {
+                // Invalidate to show the scrollbars
+                invalidate();
+            }
 
             if (scrollCache.state == ScrollabilityCache.OFF) {
                 // FIXME: this is copied from WindowManagerService.
@@ -5321,12 +5365,24 @@
         initScrollCache();
         final ScrollabilityCache scrollabilityCache = mScrollCache;
         scrollabilityCache.fadeScrollBars = fadeScrollbars;
-        if (!fadeScrollbars) {
+        if (fadeScrollbars) {
+            scrollabilityCache.state = ScrollabilityCache.OFF;
+        } else {
             scrollabilityCache.state = ScrollabilityCache.ON;
         }
     }
     
     /**
+     * 
+     * Returns true if scrollbars will fade when this view is not scrolling
+     * 
+     * @return true if scrollbar fading is enabled
+     */
+    public boolean isScrollbarFadingEnabled() {
+        return mScrollCache != null && mScrollCache.fadeScrollBars; 
+    }
+    
+    /**
      * <p>Specify the style of the scrollbars. The scrollbars can be overlaid or
      * inset. When inset, they add to the padding of the view. And the scrollbars
      * can be drawn inside the padding area or on the edge of the view. For example,
@@ -8292,6 +8348,7 @@
     /**
      * This needs to be a better API (NOT ON VIEW) before it is exposed.  If
      * it is ever exposed at all.
+     * @hide
      */
     public void onCloseSystemDialogs(String reason) {
     }
diff --git a/core/java/android/view/ViewRoot.java b/core/java/android/view/ViewRoot.java
index 398abf8..dba2e04 100644
--- a/core/java/android/view/ViewRoot.java
+++ b/core/java/android/view/ViewRoot.java
@@ -1841,7 +1841,7 @@
             }
         } break;
         case DIE:
-            dispatchDetachedFromWindow();
+            doDie();
             break;
         case DISPATCH_KEY_FROM_IME: {
             if (LOCAL_LOGV) Log.v(
@@ -2520,6 +2520,14 @@
     }
 
     public void die(boolean immediate) {
+        if (immediate) {
+            doDie();
+        } else {
+            sendEmptyMessage(DIE);
+        }
+    }
+
+    void doDie() {
         checkThread();
         if (Config.LOGV) Log.v("ViewRoot", "DIE in " + this + " of " + mSurface);
         synchronized (this) {
@@ -2543,11 +2551,7 @@
             }
             if (mAdded) {
                 mAdded = false;
-                if (immediate) {
-                    dispatchDetachedFromWindow();
-                } else if (mView != null) {
-                    sendEmptyMessage(DIE);
-                }
+                dispatchDetachedFromWindow();
             }
         }
     }
diff --git a/core/java/android/webkit/CallbackProxy.java b/core/java/android/webkit/CallbackProxy.java
index 37efdb0..8d55247 100644
--- a/core/java/android/webkit/CallbackProxy.java
+++ b/core/java/android/webkit/CallbackProxy.java
@@ -106,6 +106,7 @@
     private static final int GEOLOCATION_PERMISSIONS_SHOW_PROMPT = 130;
     private static final int GEOLOCATION_PERMISSIONS_HIDE_PROMPT = 131;
     private static final int RECEIVED_TOUCH_ICON_URL             = 132;
+    private static final int GET_VISITED_HISTORY                 = 133;
 
     // Message triggered by the client to resume execution
     private static final int NOTIFY                              = 200;
@@ -655,6 +656,12 @@
                 int lineNumber = msg.getData().getInt("lineNumber");
                 mWebChromeClient.addMessageToConsole(message, lineNumber, sourceID);
                 break;
+
+            case GET_VISITED_HISTORY:
+                if (mWebChromeClient != null) {
+                    mWebChromeClient.getVisitedHistory((ValueCallback<String[]>)msg.obj);
+                }
+                break;
         }
     }
 
@@ -1329,4 +1336,16 @@
         }
         return result.getResult();
     }
+
+    /**
+     * @hide pending API council approval
+     */
+    public void getVisitedHistory(ValueCallback<String[]> callback) {
+        if (mWebChromeClient == null) {
+            return;
+        }
+        Message msg = obtainMessage(GET_VISITED_HISTORY);
+        msg.obj = callback;
+        sendMessage(msg);
+    }
 }
diff --git a/core/java/android/webkit/GeolocationPermissions.java b/core/java/android/webkit/GeolocationPermissions.java
index c0cac01..483e9e9 100755
--- a/core/java/android/webkit/GeolocationPermissions.java
+++ b/core/java/android/webkit/GeolocationPermissions.java
@@ -28,7 +28,6 @@
 /**
  * Implements the Java side of GeolocationPermissions. Simply marshalls calls
  * from the UI thread to the WebKit thread.
- * @hide
  */
 public final class GeolocationPermissions {
     /**
@@ -72,6 +71,7 @@
 
     /**
      * Gets the singleton instance of the class.
+     * @hide
      */
     public static GeolocationPermissions getInstance() {
       if (sInstance == null) {
@@ -82,6 +82,7 @@
 
     /**
      * Creates the UI message handler. Must be called on the UI thread.
+     * @hide
      */
     public void createUIHandler() {
         if (mUIHandler == null) {
@@ -110,6 +111,7 @@
 
     /**
      * Creates the message handler. Must be called on the WebKit thread.
+     * @hide
      */
     public void createHandler() {
         if (mHandler == null) {
@@ -186,6 +188,7 @@
      * WebCore::SecurityOrigin::toString(). As long as all 'HTML 5 modules'
      * (Database, Geolocation etc) do so, it's safe to match up origins for the
      * purposes of displaying UI.
+     * @hide
      */
     public void getOrigins(ValueCallback<Set> callback) {
         if (callback != null) {
@@ -209,6 +212,7 @@
 
     /**
      * Gets the permission state for the specified origin.
+     * @hide
      */
     public void getAllowed(String origin, ValueCallback<Boolean> callback) {
         if (callback == null) {
@@ -241,6 +245,7 @@
      * Clears the permission state for the specified origin. This method may be
      * called before the WebKit thread has intialized the message handler.
      * Messages will be queued until this time.
+     * @hide
      */
     public void clear(String origin) {
         // Called on the UI thread.
@@ -261,6 +266,7 @@
      * Allows the specified origin. This method may be called before the WebKit
      * thread has intialized the message handler. Messages will be queued until
      * this time.
+     * @hide
      */
     public void allow(String origin) {
         // Called on the UI thread.
@@ -279,6 +285,7 @@
 
     /**
      * Clears the permission state for all origins.
+     * @hide
      */
     public void clearAll() {
         // Called on the UI thread.
diff --git a/core/java/android/webkit/HTML5VideoViewProxy.java b/core/java/android/webkit/HTML5VideoViewProxy.java
index 8b783e8..b7a9065 100644
--- a/core/java/android/webkit/HTML5VideoViewProxy.java
+++ b/core/java/android/webkit/HTML5VideoViewProxy.java
@@ -39,10 +39,8 @@
 import android.view.Gravity;
 import android.view.View;
 import android.view.ViewGroup;
-import android.webkit.ViewManager.ChildView;
 import android.widget.AbsoluteLayout;
 import android.widget.FrameLayout;
-import android.widget.ImageView;
 import android.widget.MediaController;
 import android.widget.VideoView;
 
@@ -56,20 +54,22 @@
  */
 class HTML5VideoViewProxy extends Handler
                           implements MediaPlayer.OnPreparedListener,
-                          MediaPlayer.OnCompletionListener {
+                          MediaPlayer.OnCompletionListener,
+                          MediaPlayer.OnErrorListener {
     // Logging tag.
     private static final String LOGTAG = "HTML5VideoViewProxy";
 
     // Message Ids for WebCore thread -> UI thread communication.
-    private static final int INIT              = 100;
-    private static final int PLAY              = 101;
-    private static final int SET_POSTER        = 102;
-    private static final int SEEK              = 103;
-    private static final int PAUSE             = 104;
+    private static final int PLAY                = 100;
+    private static final int SEEK                = 101;
+    private static final int PAUSE               = 102;
+    private static final int ERROR               = 103;
+    private static final int LOAD_DEFAULT_POSTER = 104;
 
     // Message Ids to be handled on the WebCore thread
     private static final int PREPARED          = 200;
     private static final int ENDED             = 201;
+    private static final int POSTER_FETCHED    = 202;
 
     // The C++ MediaPlayerPrivateAndroid object.
     int mNativePointer;
@@ -77,10 +77,9 @@
     private Handler mWebCoreHandler;
     // The WebView instance that created this view.
     private WebView mWebView;
-    // The ChildView instance used by the ViewManager.
-    private ChildView mChildView;
     // The poster image to be shown when the video is not playing.
-    private ImageView mPosterView;
+    // This ref prevents the bitmap from being GC'ed.
+    private Bitmap mPoster;
     // The poster downloader.
     private PosterDownloader mPosterDownloader;
     // The seek position.
@@ -138,6 +137,7 @@
             mVideoView.setVideoURI(Uri.parse(url));
             mVideoView.setOnCompletionListener(proxy);
             mVideoView.setOnPreparedListener(proxy);
+            mVideoView.setOnErrorListener(proxy);
             mVideoView.seekTo(time);
             mLayout.addView(mVideoView, layoutParams);
             mProgressView = client.getVideoLoadingProgressView();
@@ -163,11 +163,12 @@
         }
 
         public static void onPrepared() {
-            if (mProgressView != null) {
-                mProgressView.setVisibility(View.GONE);
-                mLayout.removeView(mProgressView);
-                mProgressView = null;
+            if (mProgressView == null || mLayout == null) {
+                return;
             }
+            mProgressView.setVisibility(View.GONE);
+            mLayout.removeView(mProgressView);
+            mProgressView = null;
         }
     }
 
@@ -189,6 +190,12 @@
         playbackEnded();
     }
 
+    // MediaPlayer.OnErrorListener
+    public boolean onError(MediaPlayer mp, int what, int extra) {
+        sendMessage(obtainMessage(ERROR));
+        return false;
+    }
+
     public void playbackEnded() {
         Message msg = Message.obtain(mWebCoreHandler, ENDED);
         mWebCoreHandler.sendMessage(msg);
@@ -199,18 +206,6 @@
     public void handleMessage(Message msg) {
         // This executes on the UI thread.
         switch (msg.what) {
-            case INIT: {
-                mPosterView = new ImageView(mWebView.getContext());
-                WebChromeClient client = mWebView.getWebChromeClient();
-                if (client != null) {
-                    Bitmap poster = client.getDefaultVideoPoster();
-                    if (poster != null) {
-                        mPosterView.setImageBitmap(poster);
-                    }
-                }
-                mChildView.mView = mPosterView;
-                break;
-            }
             case PLAY: {
                 String url = (String) msg.obj;
                 WebChromeClient client = mWebView.getWebChromeClient();
@@ -219,11 +214,6 @@
                 }
                 break;
             }
-            case SET_POSTER: {
-                Bitmap poster = (Bitmap) msg.obj;
-                mPosterView.setImageBitmap(poster);
-                break;
-            }
             case SEEK: {
                 Integer time = (Integer) msg.obj;
                 mSeekPosition = time;
@@ -234,6 +224,20 @@
                 VideoPlayer.pause(this);
                 break;
             }
+            case ERROR: {
+                WebChromeClient client = mWebView.getWebChromeClient();
+                if (client != null) {
+                    client.onHideCustomView();
+                }
+                break;
+            }
+            case LOAD_DEFAULT_POSTER: {
+                WebChromeClient client = mWebView.getWebChromeClient();
+                if (client != null) {
+                    doSetPoster(client.getDefaultVideoPoster());
+                }
+                break;
+            }
         }
     }
 
@@ -302,9 +306,7 @@
                 if (mPosterBytes.size() > 0) {
                     Bitmap poster = BitmapFactory.decodeByteArray(
                             mPosterBytes.toByteArray(), 0, mPosterBytes.size());
-                    if (poster != null) {
-                        mProxy.doSetPoster(poster);
-                    }
+                    mProxy.doSetPoster(poster);
                 }
                 cleanup();
             } else if (mStatusCode >= 300 && mStatusCode < 400) {
@@ -401,6 +403,10 @@
                     case ENDED:
                         nativeOnEnded(mNativePointer);
                         break;
+                    case POSTER_FETCHED:
+                        Bitmap poster = (Bitmap) msg.obj;
+                        nativeOnPosterFetched(poster, mNativePointer);
+                        break;
                 }
             }
         };
@@ -410,10 +416,11 @@
         if (poster == null) {
             return;
         }
-        // Send the bitmap over to the UI thread.
-        Message message = obtainMessage(SET_POSTER);
-        message.obj = poster;
-        sendMessage(message);
+        // Save a ref to the bitmap and send it over to the WebCore thread.
+        mPoster = poster;
+        Message msg = Message.obtain(mWebCoreHandler, POSTER_FETCHED);
+        msg.obj = poster;
+        mWebCoreHandler.sendMessage(msg);
     }
 
     public Context getContext() {
@@ -453,38 +460,15 @@
     }
 
     /**
-     * Create the child view that will cary the poster.
+     * Tear down this proxy object.
      */
-    public void createView() {
-        mChildView = mWebView.mViewManager.createView();
-        sendMessage(obtainMessage(INIT));
-    }
-
-    /**
-     * Attach the poster view.
-     * @param x, y are the screen coordinates where the poster should be hung.
-     * @param width, height denote the size of the poster.
-     */
-    public void attachView(int x, int y, int width, int height) {
-        if (mChildView == null) {
-            return;
-        }
-        mChildView.attachView(x, y, width, height);
-    }
-
-    /**
-     * Remove the child view and, thus, the poster.
-     */
-    public void removeView() {
-        if (mChildView == null) {
-            return;
-        }
-        mChildView.removeView();
+    public void teardown() {
         // This is called by the C++ MediaPlayerPrivate dtor.
         // Cancel any active poster download.
         if (mPosterDownloader != null) {
             mPosterDownloader.cancelAndReleaseQueue();
         }
+        mNativePointer = 0;
     }
 
     /**
@@ -493,6 +477,8 @@
      */
     public void loadPoster(String url) {
         if (url == null) {
+            Message message = obtainMessage(LOAD_DEFAULT_POSTER);
+            sendMessage(message);
             return;
         }
         // Cancel any active poster download.
@@ -516,4 +502,5 @@
 
     private native void nativeOnPrepared(int duration, int width, int height, int nativePointer);
     private native void nativeOnEnded(int nativePointer);
+    private native void nativeOnPosterFetched(Bitmap poster, int nativePointer);
 }
diff --git a/core/java/android/webkit/PluginManager.java b/core/java/android/webkit/PluginManager.java
index 766bd75..4588f46 100644
--- a/core/java/android/webkit/PluginManager.java
+++ b/core/java/android/webkit/PluginManager.java
@@ -29,6 +29,7 @@
 import android.content.pm.ServiceInfo;
 import android.content.pm.Signature;
 import android.content.pm.PackageManager.NameNotFoundException;
+import android.os.SystemProperties;
 import android.util.Log;
 
 /**
@@ -65,6 +66,14 @@
 
     private ArrayList<PackageInfo> mPackageInfoCache;
 
+    // Only plugin matches one of the signatures in the list can be loaded
+    // inside the WebView process
+    private static final String SIGNATURE_1 = "308204c5308203ada003020102020900d7cb412f75f4887e300d06092a864886f70d010105050030819d310b3009060355040613025553311330110603550408130a43616c69666f726e69613111300f0603550407130853616e204a6f736531233021060355040a131a41646f62652053797374656d7320496e636f72706f7261746564311c301a060355040b1313496e666f726d6174696f6e2053797374656d73312330210603550403131a41646f62652053797374656d7320496e636f72706f7261746564301e170d3039313030313030323331345a170d3337303231363030323331345a30819d310b3009060355040613025553311330110603550408130a43616c69666f726e69613111300f0603550407130853616e204a6f736531233021060355040a131a41646f62652053797374656d7320496e636f72706f7261746564311c301a060355040b1313496e666f726d6174696f6e2053797374656d73312330210603550403131a41646f62652053797374656d7320496e636f72706f726174656430820120300d06092a864886f70d01010105000382010d0030820108028201010099724f3e05bbd78843794f357776e04b340e13cb1c9ccb3044865180d7d8fec8166c5bbd876da8b80aa71eb6ba3d4d3455c9a8de162d24a25c4c1cd04c9523affd06a279fc8f0d018f242486bdbb2dbfbf6fcb21ed567879091928b876f7ccebc7bccef157366ebe74e33ae1d7e9373091adab8327482154afc0693a549522f8c796dd84d16e24bb221f5dbb809ca56dd2b6e799c5fa06b6d9c5c09ada54ea4c5db1523a9794ed22a3889e5e05b29f8ee0a8d61efe07ae28f65dece2ff7edc5b1416d7c7aad7f0d35e8f4a4b964dbf50ae9aa6d620157770d974131b3e7e3abd6d163d65758e2f0822db9c88598b9db6263d963d13942c91fc5efe34fc1e06e3020103a382010630820102301d0603551d0e041604145af418e419a639e1657db960996364a37ef20d403081d20603551d230481ca3081c780145af418e419a639e1657db960996364a37ef20d40a181a3a481a030819d310b3009060355040613025553311330110603550408130a43616c69666f726e69613111300f0603550407130853616e204a6f736531233021060355040a131a41646f62652053797374656d7320496e636f72706f7261746564311c301a060355040b1313496e666f726d6174696f6e2053797374656d73312330210603550403131a41646f62652053797374656d7320496e636f72706f7261746564820900d7cb412f75f4887e300c0603551d13040530030101ff300d06092a864886f70d0101050500038201010076c2a11fe303359689c2ebc7b2c398eff8c3f9ad545cdbac75df63bf7b5395b6988d1842d6aa1556d595b5692e08224d667a4c9c438f05e74906c53dd8016dde7004068866f01846365efd146e9bfaa48c9ecf657f87b97c757da11f225c4a24177bf2d7188e6cce2a70a1e8a841a14471eb51457398b8a0addd8b6c8c1538ca8f1e40b4d8b960009ea22c188d28924813d2c0b4a4d334b7cf05507e1fcf0a06fe946c7ffc435e173af6fc3e3400643710acc806f830a14788291d46f2feed9fb5c70423ca747ed1572d752894ac1f19f93989766308579393fabb43649aa8806a313b1ab9a50922a44c2467b9062037f2da0d484d9ffd8fe628eeea629ba637";
+
+    private static final Signature[] SIGNATURES = new Signature[] {
+        new Signature(SIGNATURE_1)
+    };
+
     private PluginManager(Context context) {
         mContext = context;
         mPackageInfoCache = new ArrayList<PackageInfo>();
@@ -146,14 +155,19 @@
                 if (signatures == null) {
                     continue;
                 }
-                boolean signatureMatch = false;
-                for (Signature signature : signatures) {
-                    // TODO: check signature against Google provided one
-                    signatureMatch = true;
-                    break;
-                }
-                if (!signatureMatch) {
-                    continue;
+                if (SystemProperties.getBoolean("ro.secure", false)) {
+                    boolean signatureMatch = false;
+                    for (Signature signature : signatures) {
+                        for (int i = 0; i < SIGNATURES.length; i++) {
+                            if (SIGNATURES[i].equals(signature)) {
+                                signatureMatch = true;
+                                break;
+                            }
+                        }
+                    }
+                    if (!signatureMatch) {
+                        continue;
+                    }
                 }
                 mPackageInfoCache.add(pkgInfo);
                 directories.add(directory);
diff --git a/core/java/android/webkit/WebChromeClient.java b/core/java/android/webkit/WebChromeClient.java
index 1ae1d85..7f5b862 100644
--- a/core/java/android/webkit/WebChromeClient.java
+++ b/core/java/android/webkit/WebChromeClient.java
@@ -240,14 +240,12 @@
     /**
      * Instructs the client to show a prompt to ask the user to set the
      * Geolocation permission state for the specified origin.
-     * @hide pending API council approval.
      */
     public void onGeolocationPermissionsShowPrompt(String origin,
             GeolocationPermissions.Callback callback) {}
 
     /**
      * Instructs the client to hide the Geolocation permissions prompt.
-     * @hide pending API council approval.
      */
     public void onGeolocationPermissionsHidePrompt() {}
 
@@ -297,4 +295,11 @@
     public View getVideoLoadingProgressView() {
         return null;
     }
+
+    /** Obtains a list of all visited history items, used for link coloring
+     * @hide pending API Council approval
+     */
+    public void getVisitedHistory(ValueCallback<String[]> callback) {
+    }
+
 }
diff --git a/core/java/android/webkit/WebSettings.java b/core/java/android/webkit/WebSettings.java
index 0cfcb95..4fedec9 100644
--- a/core/java/android/webkit/WebSettings.java
+++ b/core/java/android/webkit/WebSettings.java
@@ -1005,7 +1005,6 @@
      * @param databasePath String path to the directory where the Geolocation
      *     permissions database should be saved. May be the empty string but
      *     should never be null.
-     * @hide pending api council approval
      */
     public synchronized void setGeolocationDatabasePath(String databasePath) {
         if (databasePath != null && !databasePath.equals(mDatabasePath)) {
@@ -1122,7 +1121,6 @@
     /**
      * Sets whether Geolocation is enabled.
      * @param flag Whether Geolocation should be enabled.
-     * @hide pending api council approval
      */
     public synchronized void setGeolocationEnabled(boolean flag) {
         if (mGeolocationEnabled != flag) {
diff --git a/core/java/android/webkit/WebTextView.java b/core/java/android/webkit/WebTextView.java
index d24a5ab..e0d41c2 100644
--- a/core/java/android/webkit/WebTextView.java
+++ b/core/java/android/webkit/WebTextView.java
@@ -87,11 +87,12 @@
     // Gets set to true when the the IME jumps to the next textfield.  When this
     // happens, the next time the user hits a key it is okay for the focus
     // pointer to not match the WebTextView's node pointer
-    private boolean         mOkayForFocusNotToMatch;
+    boolean                 mOkayForFocusNotToMatch;
     // Whether or not a selection change was generated from webkit.  If it was,
     // we do not need to pass the selection back to webkit.
     private boolean         mFromWebKit;
     private boolean         mGotTouchDown;
+    private boolean         mInSetTextAndKeepSelection;
     // Array to store the final character added in onTextChanged, so that its
     // KeyEvents may be determined.
     private char[]          mCharacter = new char[1];
@@ -276,25 +277,6 @@
     }
 
     /**
-     *  Create a fake touch up event at (x,y) with respect to this WebTextView.
-     *  This is used by WebView to act as though a touch event which happened
-     *  before we placed the WebTextView actually hit it, so that it can place
-     *  the cursor accordingly.
-     */
-    /* package */ void fakeTouchEvent(float x, float y) {
-        // We need to ensure that there is a Layout, since the Layout is used
-        // in determining where to place the cursor.
-        if (getLayout() == null) {
-            measure(mWidthSpec, mHeightSpec);
-        }
-        // Create a fake touch up, which is used to place the cursor.
-        MotionEvent ev = MotionEvent.obtain(0, 0, MotionEvent.ACTION_UP,
-                x, y, 0);
-        onTouchEvent(ev);
-        ev.recycle();
-    }
-
-    /**
      *  Determine whether this WebTextView currently represents the node
      *  represented by ptr.
      *  @param  ptr Pointer to a node to compare to.
@@ -414,7 +396,9 @@
                 Log.v(LOGTAG, "onTextChanged start=" + start
                         + " start + before=" + (start + before));
             }
-            mWebView.setSelection(start, start + before);
+            if (!mInSetTextAndKeepSelection) {
+                mWebView.setSelection(start, start + before);
+            }
         }
         if (!cannotUseKeyEvents) {
             int length = events.length;
@@ -457,7 +441,14 @@
             int smallerSlop = slop/2;
             if (dx > smallerSlop || dy > smallerSlop) {
                 if (mWebView != null) {
-                    mWebView.scrollFocusedTextInput(mScrollX, mScrollY);
+                    float maxScrollX = (float) Touch.getMaxScrollX(this,
+                                getLayout(), mScrollY);
+                    if (DebugFlags.WEB_TEXT_VIEW) {
+                        Log.v(LOGTAG, "onTouchEvent x=" + mScrollX + " y="
+                                + mScrollY + " maxX=" + maxScrollX);
+                    }
+                    mWebView.scrollFocusedTextInput(maxScrollX > 0 ?
+                            mScrollX / maxScrollX : 0, mScrollY);
                 }
                 mScrolled = true;
                 return true;
@@ -803,7 +794,9 @@
     /* package */ void setTextAndKeepSelection(String text) {
         mPreChange = text.toString();
         Editable edit = (Editable) getText();
+        mInSetTextAndKeepSelection = true;
         edit.replace(0, edit.length(), text);
+        mInSetTextAndKeepSelection = false;
         updateCachedTextfield();
     }
 
@@ -813,4 +806,14 @@
     /* package */ void updateCachedTextfield() {
         mWebView.updateCachedTextfield(getText().toString());
     }
+
+    @Override
+    public boolean requestRectangleOnScreen(Rect rectangle) {
+        // don't scroll while in zoom animation. When it is done, we will adjust
+        // the WebTextView if it is in editing mode.
+        if (!mWebView.inAnimateZoom()) {
+            return super.requestRectangleOnScreen(rectangle);
+        }
+        return false;
+    }
 }
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index 603f67a..4bc1a0e 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -1111,6 +1111,12 @@
         ArrayList<byte[]> history = new ArrayList<byte[]>(size);
         for (int i = 0; i < size; i++) {
             WebHistoryItem item = list.getItemAtIndex(i);
+            if (null == item) {
+                // FIXME: this shouldn't happen
+                // need to determine how item got set to null
+                Log.w(LOGTAG, "saveState: Unexpected null history item.");
+                return null;
+            }
             byte[] data = item.getFlattenedData();
             if (data == null) {
                 // It would be very odd to not have any data for a given history
@@ -1917,12 +1923,15 @@
                 int oldY = mScrollY;
                 mScrollX = pinLocX(mScrollX);
                 mScrollY = pinLocY(mScrollY);
-                // android.util.Log.d("skia", "recordNewContentSize -
-                // abortAnimation");
-                abortAnimation(); // just in case
                 if (oldX != mScrollX || oldY != mScrollY) {
                     sendOurVisibleRect();
                 }
+                if (!mScroller.isFinished()) {
+                    // We are in the middle of a scroll.  Repin the final scroll
+                    // position.
+                    mScroller.setFinalX(pinLocX(mScroller.getFinalX()));
+                    mScroller.setFinalY(pinLocY(mScroller.getFinalY()));
+                }
             }
         }
         contentSizeChanged(updateLayout);
@@ -2814,6 +2823,10 @@
         }
     }
 
+    boolean inAnimateZoom() {
+        return mZoomScale != 0;
+    }
+
     /**
      * Need to adjust the WebTextView after a change in zoom, since mActualScale
      * has changed.  This is especially important for password fields, which are
@@ -2850,17 +2863,31 @@
                 invalidate();
                 if (mNeedToAdjustWebTextView) {
                     mNeedToAdjustWebTextView = false;
-                    mWebTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX,
-                            contentToViewDimension(
-                            nativeFocusCandidateTextSize()));
-                    Rect bounds = nativeFocusCandidateNodeBounds();
-                    Rect vBox = contentToViewRect(bounds);
-                    mWebTextView.setRect(vBox.left, vBox.top, vBox.width(),
-                            vBox.height());
-                    // If it is a password field, start drawing the
-                    // WebTextView once again.
-                    if (nativeFocusCandidateIsPassword()) {
-                        mWebTextView.setInPassword(true);
+                    Rect contentBounds = nativeFocusCandidateNodeBounds();
+                    Rect vBox = contentToViewRect(contentBounds);
+                    Rect visibleRect = new Rect();
+                    calcOurVisibleRect(visibleRect);
+                    if (visibleRect.contains(vBox)) {
+                        // As a result of the zoom, the textfield is now on
+                        // screen.  Place the WebTextView in its new place,
+                        // accounting for our new scroll/zoom values.
+                        mWebTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX,
+                                contentToViewDimension(
+                                nativeFocusCandidateTextSize()));
+                        mWebTextView.setRect(vBox.left, vBox.top, vBox.width(),
+                                vBox.height());
+                        // If it is a password field, start drawing the
+                        // WebTextView once again.
+                        if (nativeFocusCandidateIsPassword()) {
+                            mWebTextView.setInPassword(true);
+                        }
+                    } else {
+                        // The textfield is now off screen.  The user probably
+                        // was not zooming to see the textfield better.  Remove
+                        // the WebTextView.  If the user types a key, and the
+                        // textfield is still in focus, we will reconstruct
+                        // the WebTextView and scroll it back on screen.
+                        mWebTextView.remove();
                     }
                 }
             }
@@ -3000,17 +3027,6 @@
             if (mWebTextView == null) return;
 
             imm.showSoftInput(mWebTextView, 0);
-            // Now we need to fake a touch event to place the cursor where the
-            // user touched.
-            AbsoluteLayout.LayoutParams lp = (AbsoluteLayout.LayoutParams)
-                    mWebTextView.getLayoutParams();
-            if (lp != null) {
-                // Take the last touch and adjust for the location of the
-                // WebTextView.
-                float x = mLastTouchX + (float) (mScrollX - lp.x);
-                float y = mLastTouchY + (float) (mScrollY - lp.y);
-                mWebTextView.fakeTouchEvent(x, y);
-            }
             if (mInZoomOverview) {
                 // if in zoom overview mode, call doDoubleTap() to bring it back
                 // to normal mode so that user can enter text.
@@ -3855,11 +3871,25 @@
 
                     if (mSnapScrollMode == SNAP_X
                             || mSnapScrollMode == SNAP_X_LOCK) {
-                        scrollBy(deltaX, 0);
+                        if (deltaX == 0) {
+                            // keep the scrollbar on the screen even there is no
+                            // scroll
+                            awakenScrollBars(ViewConfiguration
+                                    .getScrollDefaultDelay(), false);
+                        } else {
+                            scrollBy(deltaX, 0);
+                        }
                         mLastTouchX = x;
                     } else if (mSnapScrollMode == SNAP_Y
                             || mSnapScrollMode == SNAP_Y_LOCK) {
-                        scrollBy(0, deltaY);
+                        if (deltaY == 0) {
+                            // keep the scrollbar on the screen even there is no
+                            // scroll
+                            awakenScrollBars(ViewConfiguration
+                                    .getScrollDefaultDelay(), false);
+                        } else {
+                            scrollBy(0, deltaY);
+                        }
                         mLastTouchY = y;
                     } else {
                         scrollBy(deltaX, deltaY);
@@ -3884,6 +3914,9 @@
                 }
 
                 if (done) {
+                    // keep the scrollbar on the screen even there is no scroll
+                    awakenScrollBars(ViewConfiguration.getScrollDefaultDelay(),
+                            false);
                     // return false to indicate that we can't pan out of the
                     // view space
                     return false;
@@ -4498,18 +4531,19 @@
 
     /**
      * Scroll the focused text field/area to match the WebTextView
-     * @param x New x position of the WebTextView in view coordinates
+     * @param xPercent New x position of the WebTextView from 0 to 1.
      * @param y New y position of the WebTextView in view coordinates
      */
-    /*package*/ void scrollFocusedTextInput(int x, int y) {
+    /*package*/ void scrollFocusedTextInput(float xPercent, int y) {
         if (!inEditingMode() || mWebViewCore == null) {
             return;
         }
-        mWebViewCore.sendMessage(EventHub.SCROLL_TEXT_INPUT, viewToContentX(x),
+        mWebViewCore.sendMessage(EventHub.SCROLL_TEXT_INPUT,
                 // Since this position is relative to the top of the text input
                 // field, we do not need to take the title bar's height into
                 // consideration.
-                viewToContentDimension(y));
+                viewToContentDimension(y),
+                new Float(xPercent));
     }
 
     /**
@@ -4801,9 +4835,11 @@
     /* package */ void passToJavaScript(String currentText, KeyEvent event) {
         if (nativeCursorWantsKeyEvents() && !nativeCursorMatchesFocus()) {
             mWebViewCore.sendMessage(EventHub.CLICK);
-            int select = nativeFocusCandidateIsTextField() ?
-                    nativeFocusCandidateMaxLength() : 0;
-            setSelection(select, select);
+            if (mWebTextView.mOkayForFocusNotToMatch) {
+                int select = nativeFocusCandidateIsTextField() ?
+                        nativeFocusCandidateMaxLength() : 0;
+                setSelection(select, select);
+            }
         }
         WebViewCore.JSKeyData arg = new WebViewCore.JSKeyData();
         arg.mEvent = event;
diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java
index 8b6746e..86685fb 100644
--- a/core/java/android/webkit/WebViewCore.java
+++ b/core/java/android/webkit/WebViewCore.java
@@ -311,10 +311,13 @@
                 });
     }
 
-    protected String[] populateVisitedLinks() {
-        // FIXME: getVisitedHistory needs permission and host may not have.
-//        return Browser.getVisitedHistory(mContext.getContentResolver());
-        return new String[0];
+    protected void populateVisitedLinks() {
+        ValueCallback callback = new ValueCallback<String[]>() {
+            public void onReceiveValue(String[] value) {
+                sendMessage(EventHub.POPULATE_VISITED_LINKS, (Object)value);
+            }
+        };
+        mCallbackProxy.getVisitedHistory(callback);
     }
 
     /**
@@ -531,6 +534,11 @@
      */
     private native void nativeGeolocationPermissionsProvide(String origin, boolean allow, boolean remember);
 
+    /**
+     * Provide WebCore with the previously visted links from the history database
+     */
+    private native void  nativeProvideVisitedHistory(String[] history);
+
     // EventHub for processing messages
     private final EventHub mEventHub;
     // WebCore thread handler
@@ -811,6 +819,8 @@
         // Geolocation
         static final int GEOLOCATION_PERMISSIONS_PROVIDE = 180;
 
+        static final int POPULATE_VISITED_LINKS = 181;
+
         // private message ids
         private static final int DESTROY =     200;
 
@@ -872,7 +882,8 @@
                             break;
 
                         case SCROLL_TEXT_INPUT:
-                            nativeScrollFocusedTextInput(msg.arg1, msg.arg2);
+                            nativeScrollFocusedTextInput(
+                                    ((Float) msg.obj).floatValue(), msg.arg1);
                             break;
 
                         case LOAD_URL:
@@ -1233,6 +1244,10 @@
                                 ((Message) msg.obj).sendToTarget();
                             }
                             break;
+
+                        case POPULATE_VISITED_LINKS:
+                            nativeProvideVisitedHistory((String[])msg.obj);
+                            break;
                     }
                 }
             };
@@ -2076,9 +2091,9 @@
     private native void nativeUpdateFrameCacheIfLoading();
 
     /**
-     * Scroll the focused textfield to (x, y) in document space
+     * Scroll the focused textfield to (xPercent, y) in document space
      */
-    private native void nativeScrollFocusedTextInput(int x, int y);
+    private native void nativeScrollFocusedTextInput(float xPercent, int y);
 
     // these must be in document space (i.e. not scaled/zoomed).
     private native void nativeSetScrollOffset(int gen, int dx, int dy);
diff --git a/core/java/android/widget/AutoCompleteTextView.java b/core/java/android/widget/AutoCompleteTextView.java
index 953dd92..1449ea5 100644
--- a/core/java/android/widget/AutoCompleteTextView.java
+++ b/core/java/android/widget/AutoCompleteTextView.java
@@ -82,6 +82,8 @@
  * @attr ref android.R.styleable#AutoCompleteTextView_dropDownAnchor
  * @attr ref android.R.styleable#AutoCompleteTextView_dropDownWidth
  * @attr ref android.R.styleable#AutoCompleteTextView_dropDownHeight
+ * @attr ref android.R.styleable#AutoCompleteTextView_dropDownVerticalOffset
+ * @attr ref android.R.styleable#AutoCompleteTextView_dropDownHorizontalOffset
  */
 public class AutoCompleteTextView extends EditText implements Filter.FilterListener {
     static final boolean DEBUG = false;
@@ -1153,7 +1155,7 @@
                 heightSpec = mDropDownHeight;
             }
 
-            mPopup.setOutsideTouchable(mForceIgnoreOutsideTouch ? false : !mDropDownAlwaysVisible);
+            mPopup.setOutsideTouchable(!mForceIgnoreOutsideTouch && !mDropDownAlwaysVisible);
 
             mPopup.update(getDropDownAnchorView(), mDropDownHorizontalOffset,
                     mDropDownVerticalOffset, widthSpec, heightSpec);
@@ -1183,8 +1185,8 @@
             
             // use outside touchable to dismiss drop down when touching outside of it, so
             // only set this if the dropdown is not always visible
-            mPopup.setOutsideTouchable(mForceIgnoreOutsideTouch ? false : !mDropDownAlwaysVisible);
-            mPopup.setTouchInterceptor(new PopupTouchIntercepter());
+            mPopup.setOutsideTouchable(!mForceIgnoreOutsideTouch && !mDropDownAlwaysVisible);
+            mPopup.setTouchInterceptor(new PopupTouchInterceptor());
             mPopup.showAsDropDown(getDropDownAnchorView(),
                     mDropDownHorizontalOffset, mDropDownVerticalOffset);
             mDropDownList.setSelection(ListView.INVALID_POSITION);
@@ -1408,9 +1410,10 @@
         }
     }
 
-    private class PopupTouchIntercepter implements OnTouchListener {
+    private class PopupTouchInterceptor implements OnTouchListener {
         public boolean onTouch(View v, MotionEvent event) {
-            if (event.getAction() == MotionEvent.ACTION_DOWN) {
+            if (event.getAction() == MotionEvent.ACTION_DOWN &&
+                    mPopup != null && mPopup.isShowing()) {
                 mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED);
                 showDropDown();
             }
diff --git a/core/java/android/widget/GridView.java b/core/java/android/widget/GridView.java
index 70555dc..ffe9908 100644
--- a/core/java/android/widget/GridView.java
+++ b/core/java/android/widget/GridView.java
@@ -220,6 +220,8 @@
                 selectedView = temp;
             }
 
+            // mReferenceView will change with each call to makeRow()
+            // do not cache in a local variable outside of this loop
             nextTop = mReferenceView.getBottom() + mVerticalSpacing;
 
             pos += mNumColumns;
@@ -233,7 +235,8 @@
         final int horizontalSpacing = mHorizontalSpacing;
 
         int last;
-        int nextLeft = mListPadding.left + ((mStretchMode == STRETCH_SPACING_UNIFORM) ? horizontalSpacing : 0);
+        int nextLeft = mListPadding.left +
+                ((mStretchMode == STRETCH_SPACING_UNIFORM) ? horizontalSpacing : 0);
 
         if (!mStackFromBottom) {
             last = Math.min(startPos + mNumColumns, mItemCount);
@@ -252,16 +255,14 @@
         final boolean inClick = touchModeDrawsInPressedState();
         final int selectedPosition = mSelectedPosition;
 
-        mReferenceView = null;
-
+        View child = null;
         for (int pos = startPos; pos < last; pos++) {
             // is this the selected item?
             boolean selected = pos == selectedPosition;
             // does the list view have focus or contain focus
 
             final int where = flow ? -1 : pos - startPos;
-            final View child = makeAndAddView(pos, y, flow, nextLeft, selected, where);
-            mReferenceView = child;
+            child = makeAndAddView(pos, y, flow, nextLeft, selected, where);
 
             nextLeft += columnWidth;
             if (pos < last - 1) {
@@ -273,6 +274,8 @@
             }
         }
 
+        mReferenceView = child;
+        
         if (selectedView != null) {
             mReferenceViewInSelectedRow = mReferenceView;
         }
@@ -465,6 +468,11 @@
         mFirstPosition = motionRowStart;
 
         final View referenceView = mReferenceView;
+        // We didn't have anything to layout, bail out
+        if (referenceView == null) {
+            return null;
+        }
+
         final int verticalSpacing = mVerticalSpacing;
 
         View above;
diff --git a/core/java/android/widget/FasttrackBadgeWidget.java b/core/java/android/widget/QuickContactBadge.java
similarity index 86%
rename from core/java/android/widget/FasttrackBadgeWidget.java
rename to core/java/android/widget/QuickContactBadge.java
index 8c8e054..8019f14 100644
--- a/core/java/android/widget/FasttrackBadgeWidget.java
+++ b/core/java/android/widget/QuickContactBadge.java
@@ -25,7 +25,7 @@
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
 import android.provider.ContactsContract.Contacts;
-import android.provider.ContactsContract.FastTrack;
+import android.provider.ContactsContract.QuickContact;
 import android.provider.ContactsContract.Intents;
 import android.provider.ContactsContract.PhoneLookup;
 import android.provider.ContactsContract.RawContacts;
@@ -33,14 +33,13 @@
 import android.util.AttributeSet;
 import android.view.View;
 import android.view.View.OnClickListener;
+import com.android.internal.R;
 
 /**
- * Widget used to show an image with the standard fasttrack badge
+ * Widget used to show an image with the standard QuickContact badge
  * and on-click behavior.
- *
- * @hide
  */
-public class FasttrackBadgeWidget extends ImageView implements OnClickListener {
+public class QuickContactBadge extends ImageView implements OnClickListener {
 
     private Uri mContactUri;
     private String mContactEmail;
@@ -48,6 +47,7 @@
     private int mMode;
     private QueryHandler mQueryHandler;
     private Drawable mBadgeBackground;
+    private Drawable mNoBadgeBackground;
 
     protected String[] mExcludeMimes = null;
 
@@ -72,23 +72,23 @@
 
 
 
-    public FasttrackBadgeWidget(Context context) {
+    public QuickContactBadge(Context context) {
         this(context, null);
     }
 
-    public FasttrackBadgeWidget(Context context, AttributeSet attrs) {
+    public QuickContactBadge(Context context, AttributeSet attrs) {
         this(context, attrs, 0);
     }
 
-    public FasttrackBadgeWidget(Context context, AttributeSet attrs, int defStyle) {
+    public QuickContactBadge(Context context, AttributeSet attrs, int defStyle) {
         super(context, attrs, defStyle);
 
         TypedArray a =
             context.obtainStyledAttributes(attrs,
-                    com.android.internal.R.styleable.FasttrackBadgeWidget, defStyle, 0);
+                    com.android.internal.R.styleable.QuickContactBadge, defStyle, 0);
 
-        mMode = a.getInt(com.android.internal.R.styleable.FasttrackBadgeWidget_fasttrackWindowSize,
-                FastTrack.MODE_MEDIUM);
+        mMode = a.getInt(com.android.internal.R.styleable.QuickContactBadge_quickContactWindowSize,
+                QuickContact.MODE_MEDIUM);
 
         a.recycle();
 
@@ -103,8 +103,17 @@
     }
 
     /**
-     * Assign the contact uri that this fasttrack badge should be associated
-     * with. Note that this is only used for displaying the fasttrack window and
+     * Set the QuickContact window mode. Options are {@link QuickContact#MODE_SMALL},
+     * {@link QuickContact#MODE_MEDIUM}, {@link QuickContact#MODE_LARGE}.
+     * @param size
+     */
+    public void setMode(int size) {
+        mMode = size;
+    }
+
+    /**
+     * Assign the contact uri that this QuickContactBadge should be associated
+     * with. Note that this is only used for displaying the QuickContact window and
      * won't bind the contact's photo for you.
      *
      * @param contactUri Either a {@link Contacts#CONTENT_URI} or
@@ -119,7 +128,10 @@
 
     private void onContactUriChanged() {
         if (mContactUri == null && mContactEmail == null && mContactPhone == null) {
-            setBackgroundDrawable(null);
+            if (mNoBadgeBackground == null) {
+                mNoBadgeBackground = getResources().getDrawable(R.drawable.quickcontact_nobadge);
+            }
+            setBackgroundDrawable(mNoBadgeBackground);
         } else {
             setBackgroundDrawable(mBadgeBackground);
         }
@@ -167,15 +179,6 @@
         }
     }
 
-    /**
-     * Set the fasttrack window mode. Options are {@link FastTrack#MODE_SMALL},
-     * {@link FastTrack#MODE_MEDIUM}, {@link FastTrack#MODE_LARGE}.
-     * @param size
-     */
-    public void setMode(int size) {
-        mMode = size;
-    }
-
     public void onClick(View v) {
         if (mContactUri != null) {
             final ContentResolver resolver = getContext().getContentResolver();
@@ -205,7 +208,7 @@
     }
 
     private void trigger(Uri lookupUri) {
-        FastTrack.showFastTrack(getContext(), this, lookupUri, mMode, mExcludeMimes);
+        QuickContact.showQuickContact(getContext(), this, lookupUri, mMode, mExcludeMimes);
     }
 
     private class QueryHandler extends AsyncQueryHandler {
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 37ef153..bf3d26e 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -328,11 +328,16 @@
 
         mTextPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG);
         mTextPaint.density = getResources().getDisplayMetrics().density;
+        mTextPaint.setCompatibilityScaling(
+                getResources().getCompatibilityInfo().applicationScale);
+        
         // If we get the paint from the skin, we should set it to left, since
         // the layout always wants it to be left.
         // mTextPaint.setTextAlign(Paint.Align.LEFT);
 
         mHighlightPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
+        mHighlightPaint.setCompatibilityScaling(
+                getResources().getCompatibilityInfo().applicationScale);
 
         mMovement = getDefaultMovementMethod();
         mTransformation = null;
diff --git a/core/java/android/widget/VideoView.java b/core/java/android/widget/VideoView.java
index 549f984..8142a82 100644
--- a/core/java/android/widget/VideoView.java
+++ b/core/java/android/widget/VideoView.java
@@ -222,11 +222,13 @@
             Log.w(TAG, "Unable to open content: " + mUri, ex);
             mCurrentState = STATE_ERROR;
             mTargetState = STATE_ERROR;
+            mErrorListener.onError(mMediaPlayer, MediaPlayer.MEDIA_ERROR_UNKNOWN, 0);
             return;
         } catch (IllegalArgumentException ex) {
             Log.w(TAG, "Unable to open content: " + mUri, ex);
             mCurrentState = STATE_ERROR;
             mTargetState = STATE_ERROR;
+            mErrorListener.onError(mMediaPlayer, MediaPlayer.MEDIA_ERROR_UNKNOWN, 0);
             return;
         }
     }
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java
index 35c66ba..4b26b8f 100644
--- a/core/java/com/android/internal/os/BatteryStatsImpl.java
+++ b/core/java/com/android/internal/os/BatteryStatsImpl.java
@@ -867,15 +867,15 @@
 
                 String[] nameStringArray = mProcWakelocksName;
                 long[] wlData = mProcWakelocksData;
-                Process.parseProcLine(wlBuffer, startIndex, endIndex, PROC_WAKELOCKS_FORMAT, 
-                        nameStringArray, wlData, null);
+                boolean parsed = Process.parseProcLine(wlBuffer, startIndex, endIndex,
+                        PROC_WAKELOCKS_FORMAT, nameStringArray, wlData, null);
                 
                 name = nameStringArray[0];
                 count = (int) wlData[1];
                 // convert nanoseconds to microseconds with rounding.
                 totalTime = (wlData[2] + 500) / 1000;
 
-                if (name.length() > 0) {
+                if (parsed && name.length() > 0) {
                     if (!m.containsKey(name)) {
                         m.put(name, new KernelWakelockStats(count, totalTime, 
                                 sKernelWakelockUpdateVersion));
@@ -892,7 +892,7 @@
                             numUpdatedWlNames++;
                         }
                     }
-                }              
+                }
                 startIndex = endIndex;
             }
 
@@ -2988,7 +2988,10 @@
             if (mBackupFile.exists()) {
                 mBackupFile.delete();
             }
-            mFile.renameTo(mBackupFile);
+            if (!mFile.renameTo(mBackupFile)) {
+                Log.w("BatteryStats", "Failed to back up file before writing new stats");
+                return;
+            }
         }
 
         try {
@@ -3003,8 +3006,14 @@
             mBackupFile.delete();
 
             mLastWriteTime = SystemClock.elapsedRealtime();
+            return;
         } catch (IOException e) {
-            Log.e("BatteryStats", "Error writing battery statistics", e);
+            Log.w("BatteryStats", "Error writing battery statistics", e);
+        }
+        if (mFile.exists()) {
+            if (!mFile.delete()) {
+                Log.w(TAG, "Failed to delete mangled file " + mFile);
+            }
         }
     }
 
diff --git a/core/java/com/android/internal/widget/ContactHeaderWidget.java b/core/java/com/android/internal/widget/ContactHeaderWidget.java
index 0d25728..b98794b 100644
--- a/core/java/com/android/internal/widget/ContactHeaderWidget.java
+++ b/core/java/com/android/internal/widget/ContactHeaderWidget.java
@@ -47,7 +47,7 @@
 import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.CheckBox;
-import android.widget.FasttrackBadgeWidget;
+import android.widget.QuickContactBadge;
 import android.widget.FrameLayout;
 import android.widget.ImageView;
 import android.widget.TextView;
@@ -68,7 +68,7 @@
     private View mAggregateBadge;
     private TextView mPhoneticNameView;
     private CheckBox mStarredView;
-    private FasttrackBadgeWidget mPhotoView;
+    private QuickContactBadge mPhotoView;
     private ImageView mPresenceView;
     private TextView mStatusView;
     private TextView mStatusAttributionView;
@@ -171,7 +171,7 @@
         mStarredView = (CheckBox)findViewById(R.id.star);
         mStarredView.setOnClickListener(this);
 
-        mPhotoView = (FasttrackBadgeWidget) findViewById(R.id.photo);
+        mPhotoView = (QuickContactBadge) findViewById(R.id.photo);
 
         mPresenceView = (ImageView) findViewById(R.id.presence);
 
diff --git a/core/java/com/android/internal/widget/LockPatternView.java b/core/java/com/android/internal/widget/LockPatternView.java
index cfcf111..6adce6d 100644
--- a/core/java/com/android/internal/widget/LockPatternView.java
+++ b/core/java/com/android/internal/widget/LockPatternView.java
@@ -20,6 +20,7 @@
 import com.android.internal.R;
 
 import android.content.Context;
+import android.content.res.Resources;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.graphics.Canvas;
@@ -34,6 +35,7 @@
 import android.os.SystemClock;
 import android.os.Vibrator;
 import android.util.AttributeSet;
+import android.util.Log;
 import android.view.MotionEvent;
 import android.view.View;
 
@@ -49,7 +51,7 @@
  */
 public class LockPatternView extends View {
     // Vibrator pattern for creating a tactile bump
-    private static final long[] VIBE_PATTERN = {0, 1, 40, 41};
+    private static final long[] DEFAULT_VIBE_PATTERN = {0, 1, 40, 41};
 
     private static final boolean PROFILE_DRAWING = false;
     private boolean mDrawingProfilingStarted = false;
@@ -118,6 +120,8 @@
 
     private Vibrator vibe; // Vibrator for creating tactile feedback
 
+    private long[] mVibePattern;
+
     /**
      * Represents a cell in the 3 X 3 matrix of the unlock pattern view.
      */
@@ -213,6 +217,12 @@
         void onPatternCleared();
 
         /**
+         * The user extended the pattern currently being drawn by one cell.
+         * @param pattern The pattern with newly added cell.
+         */
+        void onPatternCellAdded(List<Cell> pattern);
+
+        /**
          * A pattern was detected from the user.
          * @param pattern The pattern.
          */
@@ -250,6 +260,27 @@
         // we assume all bitmaps have the same size
         mBitmapWidth = mBitmapBtnDefault.getWidth();
         mBitmapHeight = mBitmapBtnDefault.getHeight();
+
+        // allow vibration pattern to be customized
+        mVibePattern = loadVibratePattern(com.android.internal.R.array.config_virtualKeyVibePattern);
+    }
+
+    private long[] loadVibratePattern(int id) {
+        int[] pattern = null;
+        try {
+            pattern = getResources().getIntArray(id);
+        } catch (Resources.NotFoundException e) {
+            Log.e("LockPatternView", "Vibrate pattern missing, using default", e);
+        }
+        if (pattern == null) {
+            return DEFAULT_VIBE_PATTERN;
+        }
+
+        long[] tmpPattern = new long[pattern.length];
+        for (int i = 0; i < pattern.length; i++) {
+            tmpPattern[i] = pattern[i];
+        }
+        return tmpPattern;
     }
 
     private Bitmap getBitmapFor(int resId) {
@@ -437,7 +468,7 @@
             }
             addCellToPattern(cell);
             if (mTactileFeedbackEnabled){
-                vibe.vibrate(VIBE_PATTERN, -1); // Generate tactile feedback
+                vibe.vibrate(mVibePattern, -1); // Generate tactile feedback
             }
             return cell;
         }
@@ -447,6 +478,9 @@
     private void addCellToPattern(Cell newCell) {
         mPatternDrawLookup[newCell.getRow()][newCell.getColumn()] = true;
         mPattern.add(newCell);
+        if (mOnPatternListener != null) {
+            mOnPatternListener.onPatternCellAdded(mPattern);
+        }
     }
 
     // helper method to find which cell a point maps to
diff --git a/core/java/com/android/internal/widget/RotarySelector.java b/core/java/com/android/internal/widget/RotarySelector.java
index 8939346..ba828df 100644
--- a/core/java/com/android/internal/widget/RotarySelector.java
+++ b/core/java/com/android/internal/widget/RotarySelector.java
@@ -57,6 +57,7 @@
     // UI elements
     private Bitmap mBackground;
     private Bitmap mDimple;
+    private Bitmap mDimpleDim;
 
     private Bitmap mLeftHandleIcon;
     private Bitmap mRightHandleIcon;
@@ -178,6 +179,7 @@
         // Assets (all are BitmapDrawables).
         mBackground = getBitmapFor(R.drawable.jog_dial_bg);
         mDimple = getBitmapFor(R.drawable.jog_dial_dimple);
+        mDimpleDim = getBitmapFor(R.drawable.jog_dial_dimple_dim);
 
         mArrowLongLeft = getBitmapFor(R.drawable.jog_dial_arrow_long_left_green);
         mArrowLongRight = getBitmapFor(R.drawable.jog_dial_arrow_long_right_red);
@@ -347,6 +349,9 @@
 //            canvas.drawCircle(or + bgTop, midX, or, mPaint);
 //        }
 
+        // dimple selection
+        Bitmap dimpleBitmap = mGrabbedState == NOTHING_GRABBED ? mDimple : mDimpleDim;
+
         // left dimple / icon
         {
             final int xOffset = mLeftHandleX + mRotaryOffsetX;
@@ -356,13 +361,13 @@
                     mOuterRadius,
                     xOffset);
             if (isHoriz()) {
-                drawCentered(mDimple, canvas, xOffset, drawableY + bgTop);
+                drawCentered(dimpleBitmap, canvas, xOffset, drawableY + bgTop);
                 if (mGrabbedState != RIGHT_HANDLE_GRABBED) {
                     drawCentered(mLeftHandleIcon, canvas, xOffset, drawableY + bgTop);
                 }
             } else {
                 // vertical
-                drawCentered(mDimple, canvas, drawableY + bgTop, height - xOffset);
+                drawCentered(dimpleBitmap, canvas, drawableY + bgTop, height - xOffset);
                 if (mGrabbedState != RIGHT_HANDLE_GRABBED) {
                     drawCentered(mLeftHandleIcon, canvas, drawableY + bgTop, height - xOffset);
                 }
@@ -381,10 +386,10 @@
                     xOffset);
 
             if (isHoriz()) {
-                drawCentered(mDimple, canvas, xOffset, drawableY + bgTop);
+                drawCentered(dimpleBitmap, canvas, xOffset, drawableY + bgTop);
             } else {
                 // vertical
-                drawCentered(mDimple, canvas, drawableY + bgTop, height - xOffset);
+                drawCentered(dimpleBitmap, canvas, drawableY + bgTop, height - xOffset);
             }
         }
 
@@ -398,13 +403,13 @@
                     xOffset);
 
             if (isHoriz()) {
-                drawCentered(mDimple, canvas, xOffset, drawableY + bgTop);
+                drawCentered(dimpleBitmap, canvas, xOffset, drawableY + bgTop);
                 if (mGrabbedState != LEFT_HANDLE_GRABBED) {
                     drawCentered(mRightHandleIcon, canvas, xOffset, drawableY + bgTop);
                 }
             } else {
                 // vertical
-                drawCentered(mDimple, canvas, drawableY + bgTop, height - xOffset);
+                drawCentered(dimpleBitmap, canvas, drawableY + bgTop, height - xOffset);
                 if (mGrabbedState != LEFT_HANDLE_GRABBED) {
                     drawCentered(mRightHandleIcon, canvas, drawableY + bgTop, height - xOffset);
                 }
@@ -422,9 +427,9 @@
                     dimpleLeft);
 
             if (isHoriz()) {
-                drawCentered(mDimple, canvas, dimpleLeft, drawableY + bgTop);
+                drawCentered(dimpleBitmap, canvas, dimpleLeft, drawableY + bgTop);
             } else {
-                drawCentered(mDimple, canvas, drawableY + bgTop, height - dimpleLeft);
+                drawCentered(dimpleBitmap, canvas, drawableY + bgTop, height - dimpleLeft);
             }
             dimpleLeft -= mDimpleSpacing;
         }
@@ -440,9 +445,9 @@
                     dimpleRight);
 
             if (isHoriz()) {
-                drawCentered(mDimple, canvas, dimpleRight, drawableY + bgTop);
+                drawCentered(dimpleBitmap, canvas, dimpleRight, drawableY + bgTop);
             } else {
-                drawCentered(mDimple, canvas, drawableY + bgTop, height - dimpleRight);
+                drawCentered(dimpleBitmap, canvas, drawableY + bgTop, height - dimpleRight);
             }
             dimpleRight += mDimpleSpacing;
         }
diff --git a/core/jni/android/graphics/Paint.cpp b/core/jni/android/graphics/Paint.cpp
index 6b7f045..780badc 100644
--- a/core/jni/android/graphics/Paint.cpp
+++ b/core/jni/android/graphics/Paint.cpp
@@ -569,11 +569,11 @@
     {"descent","()F", (void*) SkPaintGlue::descent},
     {"getFontMetrics", "(Landroid/graphics/Paint$FontMetrics;)F", (void*)SkPaintGlue::getFontMetrics},
     {"getFontMetricsInt", "(Landroid/graphics/Paint$FontMetricsInt;)I", (void*)SkPaintGlue::getFontMetricsInt},
-    {"measureText","([CII)F", (void*) SkPaintGlue::measureText_CII},
-    {"measureText","(Ljava/lang/String;)F", (void*) SkPaintGlue::measureText_String},
-    {"measureText","(Ljava/lang/String;II)F", (void*) SkPaintGlue::measureText_StringII},
-    {"breakText","([CIIF[F)I", (void*) SkPaintGlue::breakTextC},
-    {"breakText","(Ljava/lang/String;ZF[F)I", (void*) SkPaintGlue::breakTextS},
+    {"native_measureText","([CII)F", (void*) SkPaintGlue::measureText_CII},
+    {"native_measureText","(Ljava/lang/String;)F", (void*) SkPaintGlue::measureText_String},
+    {"native_measureText","(Ljava/lang/String;II)F", (void*) SkPaintGlue::measureText_StringII},
+    {"native_breakText","([CIIF[F)I", (void*) SkPaintGlue::breakTextC},
+    {"native_breakText","(Ljava/lang/String;ZF[F)I", (void*) SkPaintGlue::breakTextS},
     {"native_getTextWidths","(I[CII[F)I", (void*) SkPaintGlue::getTextWidths___CII_F},
     {"native_getTextWidths","(ILjava/lang/String;II[F)I", (void*) SkPaintGlue::getTextWidths__StringII_F},
     {"native_getTextPath","(I[CIIFFI)V", (void*) SkPaintGlue::getTextPath___CIIFFPath},
diff --git a/core/jni/android_bluetooth_HeadsetBase.cpp b/core/jni/android_bluetooth_HeadsetBase.cpp
index bb19e92..bad0186 100644
--- a/core/jni/android_bluetooth_HeadsetBase.cpp
+++ b/core/jni/android_bluetooth_HeadsetBase.cpp
@@ -260,7 +260,7 @@
 #endif
 }
 
-static jboolean connectAsyncNative(JNIEnv *env, jobject obj) {
+static jint connectAsyncNative(JNIEnv *env, jobject obj) {
     LOGV(__FUNCTION__);
 #ifdef HAVE_BLUETOOTH
     struct sockaddr_rc addr;
@@ -268,7 +268,7 @@
 
     if (nat->rfcomm_connected) {
         LOGV("RFCOMM socket is already connected or connection is in progress.");
-        return JNI_TRUE;
+        return 0;
     }
 
     if (nat->rfcomm_sock < 0) {
@@ -278,7 +278,7 @@
         if (nat->rfcomm_sock < 0) {
             LOGE("%s: Could not create RFCOMM socket: %s\n", __FUNCTION__,
                  strerror(errno));
-            return JNI_FALSE;
+            return -1;
         }
 
         if (debug_no_encrypt()) {
@@ -291,7 +291,7 @@
                     sizeof(lm)) < 0) {
             LOGE("%s: Can't set RFCOMM link mode", __FUNCTION__);
             close(nat->rfcomm_sock);
-            return JNI_FALSE;
+            return -1;
         }
         LOGI("Created RFCOMM socket fd %d.", nat->rfcomm_sock);
     }
@@ -314,7 +314,7 @@
             if (rc >= 0) {
                 nat->rfcomm_connected = 1;
                 LOGI("async connect successful");
-                return JNI_TRUE;
+                return 0;
             }
             else if (rc < 0) {
                 if (errno == EINPROGRESS || errno == EAGAIN)
@@ -322,20 +322,20 @@
                     LOGI("async connect is in progress (%s)",
                          strerror(errno));
                     nat->rfcomm_connected = -1;
-                    return JNI_TRUE;
+                    return 0;
                 }
                 else
                 {
                     LOGE("async connect error: %s (%d)", strerror(errno), errno);
                     close(nat->rfcomm_sock);
                     nat->rfcomm_sock = -1;
-                    return JNI_FALSE;
+                    return -errno;
                 }
             }
         } // fcntl(nat->rfcomm_sock ...)
     } // if (nat->rfcomm_sock_flags >= 0)
 #endif
-    return JNI_FALSE;
+    return -1;
 }
 
 static jint waitForAsyncConnectNative(JNIEnv *env, jobject obj,
@@ -357,9 +357,11 @@
         close(nat->rfcomm_sock);
         nat->rfcomm_sock = -1;
     }
-    if (JNI_FALSE == connectAsyncNative(env, obj)) {
+    int ret = connectAsyncNative(env, obj);
+
+    if (ret < 0) {
         LOGI("Failed to re-open RFCOMM socket!");
-        return -1;
+        return ret;
     }
 
     if (nat->rfcomm_sock >= 0) {
@@ -532,7 +534,7 @@
     {"initializeNativeDataNative", "(I)V", (void *)initializeNativeDataNative},
     {"cleanupNativeDataNative", "()V", (void *)cleanupNativeDataNative},
     {"connectNative", "()Z", (void *)connectNative},
-    {"connectAsyncNative", "()Z", (void *)connectAsyncNative},
+    {"connectAsyncNative", "()I", (void *)connectAsyncNative},
     {"waitForAsyncConnectNative", "(I)I", (void *)waitForAsyncConnectNative},
     {"disconnectNative", "()V", (void *)disconnectNative},
     {"sendURCNative", "(Ljava/lang/String;)Z", (void *)sendURCNative},
diff --git a/core/jni/android_server_BluetoothA2dpService.cpp b/core/jni/android_server_BluetoothA2dpService.cpp
index ba13519..7a3bbbb 100644
--- a/core/jni/android_server_BluetoothA2dpService.cpp
+++ b/core/jni/android_server_BluetoothA2dpService.cpp
@@ -163,6 +163,38 @@
     return JNI_FALSE;
 }
 
+static jboolean suspendSinkNative(JNIEnv *env, jobject object,
+                                     jstring path) {
+#ifdef HAVE_BLUETOOTH
+    LOGV(__FUNCTION__);
+    if (nat) {
+        const char *c_path = env->GetStringUTFChars(path, NULL);
+        bool ret = dbus_func_args_async(env, nat->conn, -1, NULL, NULL, nat,
+                           c_path, "org.bluez.audio.Sink", "Suspend",
+                           DBUS_TYPE_INVALID);
+        env->ReleaseStringUTFChars(path, c_path);
+        return ret ? JNI_TRUE : JNI_FALSE;
+    }
+#endif
+    return JNI_FALSE;
+}
+
+static jboolean resumeSinkNative(JNIEnv *env, jobject object,
+                                     jstring path) {
+#ifdef HAVE_BLUETOOTH
+    LOGV(__FUNCTION__);
+    if (nat) {
+        const char *c_path = env->GetStringUTFChars(path, NULL);
+        bool ret = dbus_func_args_async(env, nat->conn, -1, NULL, NULL, nat,
+                           c_path, "org.bluez.audio.Sink", "Resume",
+                           DBUS_TYPE_INVALID);
+        env->ReleaseStringUTFChars(path, c_path);
+        return ret ? JNI_TRUE : JNI_FALSE;
+    }
+#endif
+    return JNI_FALSE;
+}
+
 #ifdef HAVE_BLUETOOTH
 DBusHandlerResult a2dp_event_filter(DBusMessage *msg, JNIEnv *env) {
     DBusError err;
@@ -215,6 +247,8 @@
     /* Bluez audio 4.40 API */
     {"connectSinkNative", "(Ljava/lang/String;)Z", (void *)connectSinkNative},
     {"disconnectSinkNative", "(Ljava/lang/String;)Z", (void *)disconnectSinkNative},
+    {"suspendSinkNative", "(Ljava/lang/String;)Z", (void*)suspendSinkNative},
+    {"resumeSinkNative", "(Ljava/lang/String;)Z", (void*)resumeSinkNative},
     {"getSinkPropertiesNative", "(Ljava/lang/String;)[Ljava/lang/Object;",
                                     (void *)getSinkPropertiesNative},
 };
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 60a2ecb1..d0621e7 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -342,11 +342,8 @@
     <!-- ================================== -->
     <eat-comment />
 
-    <!-- Permissions for direct access to Google accounts.
-         Note that while right now this is only used for Google accounts,
-         we expect in the future to have a more general account management
-         facility so this is specified as a general platform permission
-         group for accessing accounts. -->
+    <!-- Permissions for direct access to the accounts managed
+         by the Account Manager. -->
     <permission-group android:name="android.permission-group.ACCOUNTS"
         android:label="@string/permgrouplab_accounts"
         android:description="@string/permgroupdesc_accounts" />
@@ -915,7 +912,8 @@
         android:protectionLevel="signature" />
 
     <!-- Must be required by wallpaper services, to ensure that only the
-         system can bind to them. -->
+         system can bind to them.
+         @hide Live Wallpaper -->
     <permission android:name="android.permission.BIND_WALLPAPER"
         android:label="@string/permlab_bindWallpaper"
         android:description="@string/permdesc_bindWallpaper"
diff --git a/core/res/res/drawable-hdpi/contact_header_bg.9.png b/core/res/res/drawable-hdpi/contact_header_bg.9.png
new file mode 100755
index 0000000..981b2e9
--- /dev/null
+++ b/core/res/res/drawable-hdpi/contact_header_bg.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_btn_search.png b/core/res/res/drawable-hdpi/ic_btn_search.png
index 23eebf5..775cabb 100644
--- a/core/res/res/drawable-hdpi/ic_btn_search.png
+++ b/core/res/res/drawable-hdpi/ic_btn_search.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_btn_speak_now.png b/core/res/res/drawable-hdpi/ic_btn_speak_now.png
index 6dc01fb..a60f7d9 100644
--- a/core/res/res/drawable-hdpi/ic_btn_speak_now.png
+++ b/core/res/res/drawable-hdpi/ic_btn_speak_now.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_contact_picture_2.png b/core/res/res/drawable-hdpi/ic_contact_picture_2.png
new file mode 100755
index 0000000..5e65276
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_contact_picture_2.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_contact_picture_3.png b/core/res/res/drawable-hdpi/ic_contact_picture_3.png
new file mode 100755
index 0000000..a8ec1e1
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_contact_picture_3.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lock_idle_alarm.png b/core/res/res/drawable-hdpi/ic_lock_idle_alarm.png
index 3f3af06..140acfe 100644
--- a/core/res/res/drawable-hdpi/ic_lock_idle_alarm.png
+++ b/core/res/res/drawable-hdpi/ic_lock_idle_alarm.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_preferences.png b/core/res/res/drawable-hdpi/ic_menu_preferences.png
index 64c42d2..153b01e 100644
--- a/core/res/res/drawable-hdpi/ic_menu_preferences.png
+++ b/core/res/res/drawable-hdpi/ic_menu_preferences.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_dial_dimple_dim.png b/core/res/res/drawable-hdpi/jog_dial_dimple_dim.png
new file mode 100644
index 0000000..49effe5
--- /dev/null
+++ b/core/res/res/drawable-hdpi/jog_dial_dimple_dim.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/fasttrack_badge_pressed.9.png b/core/res/res/drawable-hdpi/quickcontact_badge_pressed.9.png
similarity index 100%
rename from core/res/res/drawable-hdpi/fasttrack_badge_pressed.9.png
rename to core/res/res/drawable-hdpi/quickcontact_badge_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/fasttrack_badge_small_pressed.9.png b/core/res/res/drawable-hdpi/quickcontact_badge_small_pressed.9.png
similarity index 100%
rename from core/res/res/drawable-hdpi/fasttrack_badge_small_pressed.9.png
rename to core/res/res/drawable-hdpi/quickcontact_badge_small_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/fasttrack_badge_small_unpressed.9.png b/core/res/res/drawable-hdpi/quickcontact_badge_small_unpressed.9.png
similarity index 100%
rename from core/res/res/drawable-hdpi/fasttrack_badge_small_unpressed.9.png
rename to core/res/res/drawable-hdpi/quickcontact_badge_small_unpressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/fasttrack_badge_unpressed.9.png b/core/res/res/drawable-hdpi/quickcontact_badge_unpressed.9.png
similarity index 100%
rename from core/res/res/drawable-hdpi/fasttrack_badge_unpressed.9.png
rename to core/res/res/drawable-hdpi/quickcontact_badge_unpressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_notify_alarm.png b/core/res/res/drawable-hdpi/stat_notify_alarm.png
index 89daee1..63a5317 100755
--- a/core/res/res/drawable-hdpi/stat_notify_alarm.png
+++ b/core/res/res/drawable-hdpi/stat_notify_alarm.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_notify_chat.png b/core/res/res/drawable-hdpi/stat_notify_chat.png
index dbe18ab..097a979 100755
--- a/core/res/res/drawable-hdpi/stat_notify_chat.png
+++ b/core/res/res/drawable-hdpi/stat_notify_chat.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_notify_error.png b/core/res/res/drawable-hdpi/stat_notify_error.png
index 9853cda..37c8853 100644
--- a/core/res/res/drawable-hdpi/stat_notify_error.png
+++ b/core/res/res/drawable-hdpi/stat_notify_error.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_notify_sdcard.png b/core/res/res/drawable-hdpi/stat_notify_sdcard.png
old mode 100755
new mode 100644
index 320d63d..d3b624b
--- a/core/res/res/drawable-hdpi/stat_notify_sdcard.png
+++ b/core/res/res/drawable-hdpi/stat_notify_sdcard.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_notify_sdcard_prepare.png b/core/res/res/drawable-hdpi/stat_notify_sdcard_prepare.png
new file mode 100644
index 0000000..a483ba2
--- /dev/null
+++ b/core/res/res/drawable-hdpi/stat_notify_sdcard_prepare.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_notify_sdcard_usb.png b/core/res/res/drawable-hdpi/stat_notify_sdcard_usb.png
old mode 100755
new mode 100644
index 1b49692..a5e369e2
--- a/core/res/res/drawable-hdpi/stat_notify_sdcard_usb.png
+++ b/core/res/res/drawable-hdpi/stat_notify_sdcard_usb.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_data_connected_1x.png b/core/res/res/drawable-hdpi/stat_sys_data_connected_1x.png
index 58d2dbb..12d4ac4 100644
--- a/core/res/res/drawable-hdpi/stat_sys_data_connected_1x.png
+++ b/core/res/res/drawable-hdpi/stat_sys_data_connected_1x.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_data_connected_3g.png b/core/res/res/drawable-hdpi/stat_sys_data_connected_3g.png
index 42af121..4f1f377 100644
--- a/core/res/res/drawable-hdpi/stat_sys_data_connected_3g.png
+++ b/core/res/res/drawable-hdpi/stat_sys_data_connected_3g.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_data_connected_e.png b/core/res/res/drawable-hdpi/stat_sys_data_connected_e.png
index 6106dd4..c65f56a 100644
--- a/core/res/res/drawable-hdpi/stat_sys_data_connected_e.png
+++ b/core/res/res/drawable-hdpi/stat_sys_data_connected_e.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_data_connected_g.png b/core/res/res/drawable-hdpi/stat_sys_data_connected_g.png
index cc6e2849..4aca0c7 100644
--- a/core/res/res/drawable-hdpi/stat_sys_data_connected_g.png
+++ b/core/res/res/drawable-hdpi/stat_sys_data_connected_g.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_data_connected_h.png b/core/res/res/drawable-hdpi/stat_sys_data_connected_h.png
new file mode 100755
index 0000000..24e07ab
--- /dev/null
+++ b/core/res/res/drawable-hdpi/stat_sys_data_connected_h.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_data_in_1x.png b/core/res/res/drawable-hdpi/stat_sys_data_in_1x.png
index cd1afe9..511e22a 100644
--- a/core/res/res/drawable-hdpi/stat_sys_data_in_1x.png
+++ b/core/res/res/drawable-hdpi/stat_sys_data_in_1x.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_data_in_3g.png b/core/res/res/drawable-hdpi/stat_sys_data_in_3g.png
index 5848981..64f8087 100644
--- a/core/res/res/drawable-hdpi/stat_sys_data_in_3g.png
+++ b/core/res/res/drawable-hdpi/stat_sys_data_in_3g.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_data_in_e.png b/core/res/res/drawable-hdpi/stat_sys_data_in_e.png
index e4c6c2b..90aaf71 100644
--- a/core/res/res/drawable-hdpi/stat_sys_data_in_e.png
+++ b/core/res/res/drawable-hdpi/stat_sys_data_in_e.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_data_in_g.png b/core/res/res/drawable-hdpi/stat_sys_data_in_g.png
index 05a910b..c21387e 100644
--- a/core/res/res/drawable-hdpi/stat_sys_data_in_g.png
+++ b/core/res/res/drawable-hdpi/stat_sys_data_in_g.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_data_in_h.png b/core/res/res/drawable-hdpi/stat_sys_data_in_h.png
new file mode 100755
index 0000000..f2f6daa
--- /dev/null
+++ b/core/res/res/drawable-hdpi/stat_sys_data_in_h.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_data_inandout_1x.png b/core/res/res/drawable-hdpi/stat_sys_data_inandout_1x.png
index c398d6f..19ea80c 100644
--- a/core/res/res/drawable-hdpi/stat_sys_data_inandout_1x.png
+++ b/core/res/res/drawable-hdpi/stat_sys_data_inandout_1x.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_data_inandout_3g.png b/core/res/res/drawable-hdpi/stat_sys_data_inandout_3g.png
index b4383e2..ebfa6fb 100644
--- a/core/res/res/drawable-hdpi/stat_sys_data_inandout_3g.png
+++ b/core/res/res/drawable-hdpi/stat_sys_data_inandout_3g.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_data_inandout_e.png b/core/res/res/drawable-hdpi/stat_sys_data_inandout_e.png
index 78b04db..7ccd7de 100644
--- a/core/res/res/drawable-hdpi/stat_sys_data_inandout_e.png
+++ b/core/res/res/drawable-hdpi/stat_sys_data_inandout_e.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_data_inandout_g.png b/core/res/res/drawable-hdpi/stat_sys_data_inandout_g.png
index 9475159..c614d0d 100644
--- a/core/res/res/drawable-hdpi/stat_sys_data_inandout_g.png
+++ b/core/res/res/drawable-hdpi/stat_sys_data_inandout_g.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_data_inandout_h.png b/core/res/res/drawable-hdpi/stat_sys_data_inandout_h.png
new file mode 100755
index 0000000..5d6ef05
--- /dev/null
+++ b/core/res/res/drawable-hdpi/stat_sys_data_inandout_h.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_data_out_1x.png b/core/res/res/drawable-hdpi/stat_sys_data_out_1x.png
index e1eb5b0..adf5f95 100644
--- a/core/res/res/drawable-hdpi/stat_sys_data_out_1x.png
+++ b/core/res/res/drawable-hdpi/stat_sys_data_out_1x.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_data_out_3g.png b/core/res/res/drawable-hdpi/stat_sys_data_out_3g.png
index 2f49d60..9936f2a 100644
--- a/core/res/res/drawable-hdpi/stat_sys_data_out_3g.png
+++ b/core/res/res/drawable-hdpi/stat_sys_data_out_3g.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_data_out_e.png b/core/res/res/drawable-hdpi/stat_sys_data_out_e.png
index 433fa8d..904c565 100644
--- a/core/res/res/drawable-hdpi/stat_sys_data_out_e.png
+++ b/core/res/res/drawable-hdpi/stat_sys_data_out_e.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_data_out_g.png b/core/res/res/drawable-hdpi/stat_sys_data_out_g.png
index eb43a91..1261c15 100644
--- a/core/res/res/drawable-hdpi/stat_sys_data_out_g.png
+++ b/core/res/res/drawable-hdpi/stat_sys_data_out_g.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_data_out_h.png b/core/res/res/drawable-hdpi/stat_sys_data_out_h.png
new file mode 100755
index 0000000..5e3122d6
--- /dev/null
+++ b/core/res/res/drawable-hdpi/stat_sys_data_out_h.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_gps_acquiring.png b/core/res/res/drawable-hdpi/stat_sys_gps_acquiring.png
index fe7b2cc..9003d67 100644
--- a/core/res/res/drawable-hdpi/stat_sys_gps_acquiring.png
+++ b/core/res/res/drawable-hdpi/stat_sys_gps_acquiring.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_gps_on.png b/core/res/res/drawable-hdpi/stat_sys_gps_on.png
index 6ab4720..99a8c6c 100644
--- a/core/res/res/drawable-hdpi/stat_sys_gps_on.png
+++ b/core/res/res/drawable-hdpi/stat_sys_gps_on.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_no_sim.png b/core/res/res/drawable-hdpi/stat_sys_no_sim.png
index 48d1ca3..157491e 100644
--- a/core/res/res/drawable-hdpi/stat_sys_no_sim.png
+++ b/core/res/res/drawable-hdpi/stat_sys_no_sim.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_phone_call.png b/core/res/res/drawable-hdpi/stat_sys_phone_call.png
index 0aa15d6..950713b 100644
--- a/core/res/res/drawable-hdpi/stat_sys_phone_call.png
+++ b/core/res/res/drawable-hdpi/stat_sys_phone_call.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_phone_call_bluetooth.png b/core/res/res/drawable-hdpi/stat_sys_phone_call_bluetooth.png
index a143f87..2d13237 100644
--- a/core/res/res/drawable-hdpi/stat_sys_phone_call_bluetooth.png
+++ b/core/res/res/drawable-hdpi/stat_sys_phone_call_bluetooth.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_phone_call_forward.png b/core/res/res/drawable-hdpi/stat_sys_phone_call_forward.png
index b1ab8ac..07a2e9d 100644
--- a/core/res/res/drawable-hdpi/stat_sys_phone_call_forward.png
+++ b/core/res/res/drawable-hdpi/stat_sys_phone_call_forward.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_phone_call_on_hold.png b/core/res/res/drawable-hdpi/stat_sys_phone_call_on_hold.png
index b881a67..033a558 100644
--- a/core/res/res/drawable-hdpi/stat_sys_phone_call_on_hold.png
+++ b/core/res/res/drawable-hdpi/stat_sys_phone_call_on_hold.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_speakerphone.png b/core/res/res/drawable-hdpi/stat_sys_speakerphone.png
index 62eadb3..51dea58 100644
--- a/core/res/res/drawable-hdpi/stat_sys_speakerphone.png
+++ b/core/res/res/drawable-hdpi/stat_sys_speakerphone.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_vp_phone_call.png b/core/res/res/drawable-hdpi/stat_sys_vp_phone_call.png
index d6b25d2..dfb3424 100644
--- a/core/res/res/drawable-hdpi/stat_sys_vp_phone_call.png
+++ b/core/res/res/drawable-hdpi/stat_sys_vp_phone_call.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_vp_phone_call_bluetooth.png b/core/res/res/drawable-hdpi/stat_sys_vp_phone_call_bluetooth.png
index a143f87..2d13237 100644
--- a/core/res/res/drawable-hdpi/stat_sys_vp_phone_call_bluetooth.png
+++ b/core/res/res/drawable-hdpi/stat_sys_vp_phone_call_bluetooth.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_vp_phone_call_on_hold.png b/core/res/res/drawable-hdpi/stat_sys_vp_phone_call_on_hold.png
index 53608cf..402295b 100644
--- a/core/res/res/drawable-hdpi/stat_sys_vp_phone_call_on_hold.png
+++ b/core/res/res/drawable-hdpi/stat_sys_vp_phone_call_on_hold.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_warning.png b/core/res/res/drawable-hdpi/stat_sys_warning.png
index 8f7bd5d..37c8853 100644
--- a/core/res/res/drawable-hdpi/stat_sys_warning.png
+++ b/core/res/res/drawable-hdpi/stat_sys_warning.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_wifi_signal_0.png b/core/res/res/drawable-hdpi/stat_sys_wifi_signal_0.png
index 9a0aa21..55a2ad8 100644
--- a/core/res/res/drawable-hdpi/stat_sys_wifi_signal_0.png
+++ b/core/res/res/drawable-hdpi/stat_sys_wifi_signal_0.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_wifi_signal_1.png b/core/res/res/drawable-hdpi/stat_sys_wifi_signal_1.png
index 39db490..d16b3e8 100644
--- a/core/res/res/drawable-hdpi/stat_sys_wifi_signal_1.png
+++ b/core/res/res/drawable-hdpi/stat_sys_wifi_signal_1.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_wifi_signal_2.png b/core/res/res/drawable-hdpi/stat_sys_wifi_signal_2.png
index 5c0ae76..2511083 100644
--- a/core/res/res/drawable-hdpi/stat_sys_wifi_signal_2.png
+++ b/core/res/res/drawable-hdpi/stat_sys_wifi_signal_2.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_wifi_signal_3.png b/core/res/res/drawable-hdpi/stat_sys_wifi_signal_3.png
index f7e0b38..e0799a5 100644
--- a/core/res/res/drawable-hdpi/stat_sys_wifi_signal_3.png
+++ b/core/res/res/drawable-hdpi/stat_sys_wifi_signal_3.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_wifi_signal_4.png b/core/res/res/drawable-hdpi/stat_sys_wifi_signal_4.png
index 5ad5d12..2385c3a 100644
--- a/core/res/res/drawable-hdpi/stat_sys_wifi_signal_4.png
+++ b/core/res/res/drawable-hdpi/stat_sys_wifi_signal_4.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/statusbar_background.9.png b/core/res/res/drawable-hdpi/statusbar_background.9.png
new file mode 100644
index 0000000..dcca695
--- /dev/null
+++ b/core/res/res/drawable-hdpi/statusbar_background.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/statusbar_background.png b/core/res/res/drawable-hdpi/statusbar_background.png
deleted file mode 100644
index c2b3a5e..0000000
--- a/core/res/res/drawable-hdpi/statusbar_background.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-hdpi/sym_def_app_icon.png b/core/res/res/drawable-hdpi/sym_def_app_icon.png
index 4b5384f..075d908 100644
--- a/core/res/res/drawable-hdpi/sym_def_app_icon.png
+++ b/core/res/res/drawable-hdpi/sym_def_app_icon.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/title_bar_medium.9.png b/core/res/res/drawable-hdpi/title_bar_medium.9.png
new file mode 100644
index 0000000..311a54a
--- /dev/null
+++ b/core/res/res/drawable-hdpi/title_bar_medium.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/title_bar_medium.png b/core/res/res/drawable-hdpi/title_bar_medium.png
deleted file mode 100644
index c13dd26..0000000
--- a/core/res/res/drawable-hdpi/title_bar_medium.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-hdpi/title_bar_portrait.9.png b/core/res/res/drawable-hdpi/title_bar_portrait.9.png
index 161432f..70f7cc2 100644
--- a/core/res/res/drawable-hdpi/title_bar_portrait.9.png
+++ b/core/res/res/drawable-hdpi/title_bar_portrait.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/title_bar_shadow.9.png b/core/res/res/drawable-hdpi/title_bar_shadow.9.png
index e67f457..e6dab63 100644
--- a/core/res/res/drawable-hdpi/title_bar_shadow.9.png
+++ b/core/res/res/drawable-hdpi/title_bar_shadow.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/title_bar_tall.9.png b/core/res/res/drawable-hdpi/title_bar_tall.9.png
new file mode 100644
index 0000000..5c1a69f
--- /dev/null
+++ b/core/res/res/drawable-hdpi/title_bar_tall.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/title_bar_tall.png b/core/res/res/drawable-hdpi/title_bar_tall.png
deleted file mode 100644
index f177440..0000000
--- a/core/res/res/drawable-hdpi/title_bar_tall.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-land-hdpi/bottombar_565.png b/core/res/res/drawable-land-hdpi/bottombar_565.png
new file mode 100755
index 0000000..9df56ca
--- /dev/null
+++ b/core/res/res/drawable-land-hdpi/bottombar_565.png
Binary files differ
diff --git a/core/res/res/drawable-land-hdpi/statusbar_background.png b/core/res/res/drawable-land-hdpi/statusbar_background.png
deleted file mode 100644
index 4a955c5..0000000
--- a/core/res/res/drawable-land-hdpi/statusbar_background.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-land-hdpi/title_bar_tall.png b/core/res/res/drawable-land-hdpi/title_bar_tall.png
deleted file mode 100644
index 96b5ffe..0000000
--- a/core/res/res/drawable-land-hdpi/title_bar_tall.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-land/bottombar_565.png b/core/res/res/drawable-land-mdpi/bottombar_565.png
similarity index 100%
rename from core/res/res/drawable-land/bottombar_565.png
rename to core/res/res/drawable-land-mdpi/bottombar_565.png
Binary files differ
diff --git a/core/res/res/drawable-land-mdpi/statusbar_background.png b/core/res/res/drawable-land-mdpi/statusbar_background.png
deleted file mode 100644
index ef61e52..0000000
--- a/core/res/res/drawable-land-mdpi/statusbar_background.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-land-mdpi/title_bar_tall.png b/core/res/res/drawable-land-mdpi/title_bar_tall.png
deleted file mode 100644
index 16290fb..0000000
--- a/core/res/res/drawable-land-mdpi/title_bar_tall.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable/contact_header_bg.9.png b/core/res/res/drawable-mdpi/contact_header_bg.9.png
similarity index 100%
rename from core/res/res/drawable/contact_header_bg.9.png
rename to core/res/res/drawable-mdpi/contact_header_bg.9.png
Binary files differ
diff --git a/core/res/res/drawable/ic_contact_picture_2.png b/core/res/res/drawable-mdpi/ic_contact_picture_2.png
similarity index 100%
rename from core/res/res/drawable/ic_contact_picture_2.png
rename to core/res/res/drawable-mdpi/ic_contact_picture_2.png
Binary files differ
diff --git a/core/res/res/drawable/ic_contact_picture_3.png b/core/res/res/drawable-mdpi/ic_contact_picture_3.png
similarity index 100%
rename from core/res/res/drawable/ic_contact_picture_3.png
rename to core/res/res/drawable-mdpi/ic_contact_picture_3.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_lock_idle_alarm.png b/core/res/res/drawable-mdpi/ic_lock_idle_alarm.png
index 8c8899f..f917b83 100644
--- a/core/res/res/drawable-mdpi/ic_lock_idle_alarm.png
+++ b/core/res/res/drawable-mdpi/ic_lock_idle_alarm.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_preferences.png b/core/res/res/drawable-mdpi/ic_menu_preferences.png
index b8e7141..4da26e3 100644
--- a/core/res/res/drawable-mdpi/ic_menu_preferences.png
+++ b/core/res/res/drawable-mdpi/ic_menu_preferences.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_dial_dimple_dim.png b/core/res/res/drawable-mdpi/jog_dial_dimple_dim.png
new file mode 100644
index 0000000..664e89d
--- /dev/null
+++ b/core/res/res/drawable-mdpi/jog_dial_dimple_dim.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/fasttrack_badge_pressed.9.png b/core/res/res/drawable-mdpi/quickcontact_badge_pressed.9.png
similarity index 100%
rename from core/res/res/drawable-mdpi/fasttrack_badge_pressed.9.png
rename to core/res/res/drawable-mdpi/quickcontact_badge_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/fasttrack_badge_small_pressed.9.png b/core/res/res/drawable-mdpi/quickcontact_badge_small_pressed.9.png
similarity index 100%
rename from core/res/res/drawable-mdpi/fasttrack_badge_small_pressed.9.png
rename to core/res/res/drawable-mdpi/quickcontact_badge_small_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/fasttrack_badge_small_unpressed.9.png b/core/res/res/drawable-mdpi/quickcontact_badge_small_unpressed.9.png
similarity index 100%
rename from core/res/res/drawable-mdpi/fasttrack_badge_small_unpressed.9.png
rename to core/res/res/drawable-mdpi/quickcontact_badge_small_unpressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/fasttrack_badge_unpressed.9.png b/core/res/res/drawable-mdpi/quickcontact_badge_unpressed.9.png
similarity index 100%
rename from core/res/res/drawable-mdpi/fasttrack_badge_unpressed.9.png
rename to core/res/res/drawable-mdpi/quickcontact_badge_unpressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_notify_alarm.png b/core/res/res/drawable-mdpi/stat_notify_alarm.png
index 1b01b85..d01ccca 100644
--- a/core/res/res/drawable-mdpi/stat_notify_alarm.png
+++ b/core/res/res/drawable-mdpi/stat_notify_alarm.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_notify_chat.png b/core/res/res/drawable-mdpi/stat_notify_chat.png
index 238f043..a3f2f96 100644
--- a/core/res/res/drawable-mdpi/stat_notify_chat.png
+++ b/core/res/res/drawable-mdpi/stat_notify_chat.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_notify_sdcard.png b/core/res/res/drawable-mdpi/stat_notify_sdcard.png
index feac3b7..23093ac 100644
--- a/core/res/res/drawable-mdpi/stat_notify_sdcard.png
+++ b/core/res/res/drawable-mdpi/stat_notify_sdcard.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_notify_sdcard_prepare.png b/core/res/res/drawable-mdpi/stat_notify_sdcard_prepare.png
new file mode 100644
index 0000000..9abb1c9
--- /dev/null
+++ b/core/res/res/drawable-mdpi/stat_notify_sdcard_prepare.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_notify_sdcard_usb.png b/core/res/res/drawable-mdpi/stat_notify_sdcard_usb.png
index 6de4043..9880694 100644
--- a/core/res/res/drawable-mdpi/stat_notify_sdcard_usb.png
+++ b/core/res/res/drawable-mdpi/stat_notify_sdcard_usb.png
Binary files differ
diff --git a/core/res/res/drawable/stat_sys_data_connected_h.png b/core/res/res/drawable-mdpi/stat_sys_data_connected_h.png
similarity index 100%
rename from core/res/res/drawable/stat_sys_data_connected_h.png
rename to core/res/res/drawable-mdpi/stat_sys_data_connected_h.png
Binary files differ
diff --git a/core/res/res/drawable/stat_sys_data_in_h.png b/core/res/res/drawable-mdpi/stat_sys_data_in_h.png
similarity index 100%
rename from core/res/res/drawable/stat_sys_data_in_h.png
rename to core/res/res/drawable-mdpi/stat_sys_data_in_h.png
Binary files differ
diff --git a/core/res/res/drawable/stat_sys_data_inandout_h.png b/core/res/res/drawable-mdpi/stat_sys_data_inandout_h.png
similarity index 100%
rename from core/res/res/drawable/stat_sys_data_inandout_h.png
rename to core/res/res/drawable-mdpi/stat_sys_data_inandout_h.png
Binary files differ
diff --git a/core/res/res/drawable/stat_sys_data_out_h.png b/core/res/res/drawable-mdpi/stat_sys_data_out_h.png
similarity index 100%
rename from core/res/res/drawable/stat_sys_data_out_h.png
rename to core/res/res/drawable-mdpi/stat_sys_data_out_h.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/statusbar_background.9.png b/core/res/res/drawable-mdpi/statusbar_background.9.png
new file mode 100644
index 0000000..eb7c1a4
--- /dev/null
+++ b/core/res/res/drawable-mdpi/statusbar_background.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/statusbar_background.png b/core/res/res/drawable-mdpi/statusbar_background.png
deleted file mode 100644
index 204d76a..0000000
--- a/core/res/res/drawable-mdpi/statusbar_background.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-mdpi/title_bar_medium.9.png b/core/res/res/drawable-mdpi/title_bar_medium.9.png
new file mode 100644
index 0000000..2d41d02
--- /dev/null
+++ b/core/res/res/drawable-mdpi/title_bar_medium.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/title_bar_medium.png b/core/res/res/drawable-mdpi/title_bar_medium.png
deleted file mode 100644
index 9d01f79..0000000
--- a/core/res/res/drawable-mdpi/title_bar_medium.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-mdpi/title_bar_portrait.9.png b/core/res/res/drawable-mdpi/title_bar_portrait.9.png
index 482d82e..13b18d8 100644
--- a/core/res/res/drawable-mdpi/title_bar_portrait.9.png
+++ b/core/res/res/drawable-mdpi/title_bar_portrait.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/title_bar_shadow.9.png b/core/res/res/drawable-mdpi/title_bar_shadow.9.png
index 08723665..dbcefee 100644
--- a/core/res/res/drawable-mdpi/title_bar_shadow.9.png
+++ b/core/res/res/drawable-mdpi/title_bar_shadow.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/title_bar_tall.9.png b/core/res/res/drawable-mdpi/title_bar_tall.9.png
new file mode 100644
index 0000000..5a050c4
--- /dev/null
+++ b/core/res/res/drawable-mdpi/title_bar_tall.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/title_bar_tall.png b/core/res/res/drawable-mdpi/title_bar_tall.png
deleted file mode 100644
index cd565dc..0000000
--- a/core/res/res/drawable-mdpi/title_bar_tall.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable/fasttrack_badge.xml b/core/res/res/drawable/quickcontact_badge.xml
similarity index 87%
rename from core/res/res/drawable/fasttrack_badge.xml
rename to core/res/res/drawable/quickcontact_badge.xml
index c6c9a93..bd5aeb6 100644
--- a/core/res/res/drawable/fasttrack_badge.xml
+++ b/core/res/res/drawable/quickcontact_badge.xml
@@ -19,10 +19,10 @@
         android:state_focused="false"
         android:state_selected="false"
         android:state_pressed="false"
-        android:drawable="@drawable/fasttrack_badge_unpressed" />
+        android:drawable="@drawable/quickcontact_badge_unpressed" />
 
     <item
         android:state_pressed="true"
-        android:drawable="@drawable/fasttrack_badge_pressed" />
+        android:drawable="@drawable/quickcontact_badge_pressed" />
 
 </selector>
diff --git a/core/res/res/drawable/fasttrack_badge_small.xml b/core/res/res/drawable/quickcontact_badge_small.xml
similarity index 86%
rename from core/res/res/drawable/fasttrack_badge_small.xml
rename to core/res/res/drawable/quickcontact_badge_small.xml
index c8837e4..a38ba1e 100644
--- a/core/res/res/drawable/fasttrack_badge_small.xml
+++ b/core/res/res/drawable/quickcontact_badge_small.xml
@@ -19,10 +19,10 @@
         android:state_focused="false"
         android:state_selected="false"
         android:state_pressed="false"
-        android:drawable="@drawable/fasttrack_badge_small_unpressed" />
+        android:drawable="@drawable/quickcontact_badge_small_unpressed" />
 
     <item
         android:state_pressed="true"
-        android:drawable="@drawable/fasttrack_badge_small_pressed" />
+        android:drawable="@drawable/quickcontact_badge_small_pressed" />
 
 </selector>
diff --git a/core/res/res/drawable/quickcontact_nobadge.xml b/core/res/res/drawable/quickcontact_nobadge.xml
new file mode 100644
index 0000000..922fa0e
--- /dev/null
+++ b/core/res/res/drawable/quickcontact_nobadge.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/* bubble_with_chats.xml
+**
+** Copyright 2009, Google Inc.
+**
+** 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.
+*/
+-->
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_pressed="true" android:drawable="@drawable/quickcontact_nobadge_pressed" />
+    <item android:state_selected="true" android:drawable="@drawable/quickcontact_nobadge_highlight" />
+    <item android:state_focused="true" android:drawable="@drawable/quickcontact_nobadge_highlight" />
+    <item android:state_enabled="false" android:drawable="@drawable/quickcontact_nobadge_normal" />
+    <item android:drawable="@drawable/quickcontact_nobadge_normal" />
+</selector>
diff --git a/core/res/res/drawable/quickcontact_nobadge_highlight.9.png b/core/res/res/drawable/quickcontact_nobadge_highlight.9.png
new file mode 100644
index 0000000..f0f50b3
--- /dev/null
+++ b/core/res/res/drawable/quickcontact_nobadge_highlight.9.png
Binary files differ
diff --git a/core/res/res/drawable/quickcontact_nobadge_normal.9.png b/core/res/res/drawable/quickcontact_nobadge_normal.9.png
new file mode 100644
index 0000000..01cc9dc
--- /dev/null
+++ b/core/res/res/drawable/quickcontact_nobadge_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable/quickcontact_nobadge_pressed.9.png b/core/res/res/drawable/quickcontact_nobadge_pressed.9.png
new file mode 100644
index 0000000..6e22c87
--- /dev/null
+++ b/core/res/res/drawable/quickcontact_nobadge_pressed.9.png
Binary files differ
diff --git a/core/res/res/layout/contact_header.xml b/core/res/res/layout/contact_header.xml
index 2dbc311..d551a26 100644
--- a/core/res/res/layout/contact_header.xml
+++ b/core/res/res/layout/contact_header.xml
@@ -22,12 +22,11 @@
     android:background="@drawable/title_bar_medium"
     android:paddingRight="5dip">
 
-    <android.widget.FasttrackBadgeWidget android:id="@+id/photo"
-        android:layout_alignParentLeft="true"
+    <android.widget.QuickContactBadge android:id="@+id/photo"
         android:layout_gravity="center_vertical"
-        android:layout_marginRight="10dip"
-        android:layout_marginLeft="10dip"
-        style="@*android:style/Widget.FasttrackBadgeWidget.WindowSmall" />
+        android:layout_marginRight="8dip"
+        android:layout_marginLeft="-1dip"
+        style="@*android:style/Widget.QuickContactBadge.WindowSmall" />
     />
 
     <LinearLayout
@@ -60,7 +59,7 @@
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
             android:textAppearance="?android:attr/textAppearanceSmall"
-            android:maxLines="1"
+            android:singleLine="true"
             android:ellipsize="end"
             android:layout_marginTop="-4dip"
         />
diff --git a/core/res/res/layout/keyguard_screen_rotary_unlock.xml b/core/res/res/layout/keyguard_screen_rotary_unlock.xml
index 9f18124..59b69cd 100644
--- a/core/res/res/layout/keyguard_screen_rotary_unlock.xml
+++ b/core/res/res/layout/keyguard_screen_rotary_unlock.xml
@@ -30,7 +30,7 @@
 <RelativeLayout
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
-    android:background="#A0000000"
+    android:background="#70000000"
         >
 
     <TextView
@@ -135,4 +135,4 @@
 
 </RelativeLayout>
 
-</FrameLayout>
\ No newline at end of file
+</FrameLayout>
diff --git a/core/res/res/layout/keyguard_screen_rotary_unlock_land.xml b/core/res/res/layout/keyguard_screen_rotary_unlock_land.xml
index 5fe1dde..c503455 100644
--- a/core/res/res/layout/keyguard_screen_rotary_unlock_land.xml
+++ b/core/res/res/layout/keyguard_screen_rotary_unlock_land.xml
@@ -30,7 +30,7 @@
         android:orientation="horizontal"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent"
-        android:background="#A0000000"
+        android:background="#70000000"
         >
 
     <!-- left side -->
diff --git a/core/res/res/layout/keyguard_screen_unlock_landscape.xml b/core/res/res/layout/keyguard_screen_unlock_landscape.xml
index 059e899..3e00ae8e1 100644
--- a/core/res/res/layout/keyguard_screen_unlock_landscape.xml
+++ b/core/res/res/layout/keyguard_screen_unlock_landscape.xml
@@ -26,7 +26,7 @@
     android:orientation="horizontal"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
-    android:background="#A0000000"
+    android:background="#70000000"
         >
 
     <!-- left side: instructions and emergency call button -->
diff --git a/core/res/res/layout/keyguard_screen_unlock_portrait.xml b/core/res/res/layout/keyguard_screen_unlock_portrait.xml
index f3c7559..0525356 100644
--- a/core/res/res/layout/keyguard_screen_unlock_portrait.xml
+++ b/core/res/res/layout/keyguard_screen_unlock_portrait.xml
@@ -26,7 +26,7 @@
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     android:gravity="center_horizontal"
-    android:background="#A0000000"
+    android:background="#70000000"
         >
 
     <LinearLayout
diff --git a/core/res/res/layout/screen_progress.xml b/core/res/res/layout/screen_progress.xml
index e3347e4..477cadb 100644
--- a/core/res/res/layout/screen_progress.xml
+++ b/core/res/res/layout/screen_progress.xml
@@ -20,58 +20,55 @@
 This is the basic layout for a screen, with all of its features enabled.
 -->
 
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:fitsSystemWindows="true"
+    android:orientation="vertical"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent"
 >
-    <LinearLayout
-        android:orientation="vertical"
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent"
+    <RelativeLayout android:id="@android:id/title_container" 
+        style="?android:attr/windowTitleBackgroundStyle"
+        android:layout_width="fill_parent" 
+        android:layout_height="?android:attr/windowTitleSize"
     >
-        <RelativeLayout android:id="@android:id/title_container" 
-            style="?android:attr/windowTitleBackgroundStyle"
-            android:layout_width="fill_parent" 
-            android:layout_height="?android:attr/windowTitleSize"
-        >
-            <ProgressBar android:id="@+android:id/progress_circular"
-                style="?android:attr/progressBarStyleSmallTitle"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_marginLeft="5dip"
-                android:layout_alignParentRight="true"
-                android:layout_centerVertical="true"
-                android:visibility="gone"
-                android:max="10000"
-            />
-            <ProgressBar android:id="@+android:id/progress_horizontal"
-                style="?android:attr/progressBarStyleHorizontal"
-                android:layout_width="fill_parent"
-                android:layout_height="wrap_content"
-                android:layout_marginLeft="2dip"
-                android:layout_alignParentLeft="true"
-                android:layout_toLeftOf="@android:id/progress_circular"
-                android:layout_centerVertical="true"
-                android:visibility="gone"
-                android:max="10000" 
-            />
-            <TextView android:id="@android:id/title"
-                style="?android:attr/windowTitleStyle"
-                android:layout_width="fill_parent" 
-                android:layout_height="fill_parent"
-                android:layout_alignParentLeft="true"
-                android:layout_toLeftOf="@android:id/progress_circular"
-                android:background="@null"
-                android:fadingEdge="horizontal"
-                android:gravity="center_vertical"
-                android:scrollHorizontally="true" 
-            />
-        </RelativeLayout>
-        <FrameLayout android:id="@android:id/content"
-            android:layout_width="fill_parent"
-            android:layout_height="0dip"
-            android:layout_weight="1"
-            android:foregroundGravity="fill_horizontal|top"
-            android:foreground="?android:attr/windowContentOverlay"
+        <ProgressBar android:id="@+android:id/progress_circular"
+            style="?android:attr/progressBarStyleSmallTitle"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="5dip"
+            android:layout_alignParentRight="true"
+            android:layout_centerVertical="true"
+            android:visibility="gone"
+            android:max="10000"
         />
-    </LinearLayout>
-</FrameLayout>
+        <ProgressBar android:id="@+android:id/progress_horizontal"
+            style="?android:attr/progressBarStyleHorizontal"
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="2dip"
+            android:layout_alignParentLeft="true"
+            android:layout_toLeftOf="@android:id/progress_circular"
+            android:layout_centerVertical="true"
+            android:visibility="gone"
+            android:max="10000" 
+        />
+        <TextView android:id="@android:id/title"
+            style="?android:attr/windowTitleStyle"
+            android:layout_width="fill_parent" 
+            android:layout_height="fill_parent"
+            android:layout_alignParentLeft="true"
+            android:layout_toLeftOf="@android:id/progress_circular"
+            android:background="@null"
+            android:fadingEdge="horizontal"
+            android:gravity="center_vertical"
+            android:scrollHorizontally="true" 
+        />
+    </RelativeLayout>
+    <FrameLayout android:id="@android:id/content"
+        android:layout_width="fill_parent"
+        android:layout_height="0dip"
+        android:layout_weight="1"
+        android:foregroundGravity="fill_horizontal|top"
+        android:foreground="?android:attr/windowContentOverlay"
+    />
+</LinearLayout>
diff --git a/core/res/res/layout/select_dialog_item.xml b/core/res/res/layout/select_dialog_item.xml
index f1840ba..60a74a4 100644
--- a/core/res/res/layout/select_dialog_item.xml
+++ b/core/res/res/layout/select_dialog_item.xml
@@ -29,7 +29,7 @@
     android:layout_height="wrap_content"
     android:minHeight="?android:attr/listPreferredItemHeight"
     android:textAppearance="?android:attr/textAppearanceLarge"
-    android:textColor="@android:color/bright_foreground_light"
+    android:textColor="@android:color/primary_text_light_disable_only"
     android:gravity="center_vertical"
     android:paddingLeft="14dip"
     android:paddingRight="15dip"
diff --git a/core/res/res/layout/select_dialog_multichoice.xml b/core/res/res/layout/select_dialog_multichoice.xml
index 3bd1a48..55fc39b 100644
--- a/core/res/res/layout/select_dialog_multichoice.xml
+++ b/core/res/res/layout/select_dialog_multichoice.xml
@@ -19,7 +19,8 @@
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:minHeight="?android:attr/listPreferredItemHeight"
-    android:textAppearance="?android:attr/textAppearanceLargeInverse"
+    android:textAppearance="?android:attr/textAppearanceLarge"
+    android:textColor="@android:color/primary_text_light_disable_only"
     android:gravity="center_vertical"
     android:paddingLeft="12dip"
     android:paddingRight="7dip"
diff --git a/core/res/res/layout/select_dialog_singlechoice.xml b/core/res/res/layout/select_dialog_singlechoice.xml
index 3e07f23..220af64 100644
--- a/core/res/res/layout/select_dialog_singlechoice.xml
+++ b/core/res/res/layout/select_dialog_singlechoice.xml
@@ -20,7 +20,7 @@
     android:layout_height="wrap_content"
     android:minHeight="?android:attr/listPreferredItemHeight"
     android:textAppearance="?android:attr/textAppearanceLarge"
-    android:textColor="@android:color/bright_foreground_light"
+    android:textColor="@android:color/primary_text_light_disable_only"
     android:gravity="center_vertical"
     android:paddingLeft="12dip"
     android:paddingRight="7dip"
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index 6f109df..bfb25b8 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -28,6 +28,11 @@
         <attr name="colorForegroundInverse" format="color" />
         <!-- Color that matches (as closely as possible) the window background. -->
         <attr name="colorBackground" format="color" />
+        <!-- This is a hint for a solid color that can be used for caching
+             rendered views.  This will be the color of the background when
+             there is a solid background color; it will be null when the
+             background is a texture or translucent. -->
+        <attr name="colorBackgroundCacheHint" format="color" />
         <!-- Default disabled alpha for widgets that set enabled/disabled alpha programmatically. -->
         <attr name="disabledAlpha" format="float" />
         <!-- Default background dim amount when a menu, dialog, or something similar pops up. -->
@@ -396,20 +401,20 @@
         <attr name="spinnerItemStyle" format="reference" />
         <!-- Default MapView style. -->
         <attr name="mapViewStyle" format="reference" />
-        <!-- Default Fasttrack badge style. -->
-        <attr name="fasttrackBadgeWidgetStyle" format="reference" />
-        <!-- Default Fasttrack badge style with small fasttrack window. -->
-        <attr name="fasttrackBadgeWidgetStyleWindowSmall" format="reference" />
-        <!-- Default Fasttrack badge style with medium fasttrack window. -->
-        <attr name="fasttrackBadgeWidgetStyleWindowMedium" format="reference" />
-        <!-- Default Fasttrack badge style with large fasttrack window. -->
-        <attr name="fasttrackBadgeWidgetStyleWindowLarge" format="reference" />
-        <!-- Default Fasttrack badge style with small fasttrack window. -->
-        <attr name="fasttrackBadgeWidgetStyleSmallWindowSmall" format="reference" />
-        <!-- Default Fasttrack badge style with medium fasttrack window. -->
-        <attr name="fasttrackBadgeWidgetStyleSmallWindowMedium" format="reference" />
-        <!-- Default Fasttrack badge style with large fasttrack window. -->
-        <attr name="fasttrackBadgeWidgetStyleSmallWindowLarge" format="reference" />
+        <!-- Default quickcontact badge style. -->
+        <attr name="quickContactBadgeStyle" format="reference" />
+        <!-- Default quickcontact badge style with small quickcontact window. -->
+        <attr name="quickContactBadgeStyleWindowSmall" format="reference" />
+        <!-- Default quickcontact badge style with medium quickcontact window. -->
+        <attr name="quickContactBadgeStyleWindowMedium" format="reference" />
+        <!-- Default quickcontact badge style with large quickcontact window. -->
+        <attr name="quickContactBadgeStyleWindowLarge" format="reference" />
+        <!-- Default quickcontact badge style with small quickcontact window. -->
+        <attr name="quickContactBadgeStyleSmallWindowSmall" format="reference" />
+        <!-- Default quickcontact badge style with medium quickcontact window. -->
+        <attr name="quickContactBadgeStyleSmallWindowMedium" format="reference" />
+        <!-- Default quickcontact badge style with large quickcontact window. -->
+        <attr name="quickContactBadgeStyleSmallWindowLarge" format="reference" />
 
         <!-- =================== -->
         <!-- Preference styles   -->
@@ -2222,8 +2227,8 @@
         <attr name="orientation" />
     </declare-styleable>
 
-    <declare-styleable name="FasttrackBadgeWidget">
-        <attr name="fasttrackWindowSize">
+    <declare-styleable name="QuickContactBadge">
+        <attr name="quickContactWindowSize">
             <enum name="modeSmall" value="1" />
             <enum name="modeMedium" value="2" />
             <enum name="modeLarge" value="3" />
diff --git a/core/res/res/values/colors.xml b/core/res/res/values/colors.xml
index 15841a8..5d3069b 100644
--- a/core/res/res/values/colors.xml
+++ b/core/res/res/values/colors.xml
@@ -4,16 +4,16 @@
 **
 ** Copyright 2006, 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 
+** 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 
+**     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 
+** 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.
 */
 -->
@@ -65,12 +65,12 @@
     <drawable name="menu_full_frame">@drawable/menu_background_fill_parent_width</drawable>
     <drawable name="editbox_dropdown_dark_frame">@drawable/editbox_dropdown_background_dark</drawable>
     <drawable name="editbox_dropdown_light_frame">@drawable/editbox_dropdown_background</drawable>
-    
+
     <drawable name="input_method_fullscreen_background">#fff9f9f9</drawable>
-    
+
     <!-- For date picker widget -->
     <drawable name="selected_day_background">#ff0092f4</drawable>
-  
+
     <!-- For settings framework -->
     <color name="lighter_gray">#ddd</color>
     <color name="darker_gray">#aaa</color>
@@ -78,7 +78,7 @@
     <!-- For security permissions -->
     <color name="perms_dangerous_grp_color">#dd6826</color>
     <color name="perms_dangerous_perm_color">#dd6826</color>
-    
+
     <!-- For search-related UIs -->
     <color name="search_url_text_normal">#7fa87f</color>
     <color name="search_url_text_selected">@android:color/black</color>
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 498b5cf..9f4af83 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -146,7 +146,11 @@
 
     <!-- Display low battery warning when battery level dips to this value -->
     <integer name="config_lowBatteryWarningLevel">15</integer>
+
     <!-- Close low battery warning when battery level reaches this value -->
     <integer name="config_lowBatteryCloseWarningLevel">20</integer>
 
+    <!-- Allow the menu hard key to be disabled in LockScreen on some devices -->
+    <bool name="config_disableMenuKeyInLockScreen">false</bool>
+
 </resources>
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index 97fb80a..52e32002 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -1175,6 +1175,9 @@
   <public type="attr" name="scrollbarFadeDuration" />
   <public type="attr" name="scrollbarDefaultDelayBeforeFade" />
   <public type="attr" name="fadeScrollbars" />
+  <public type="attr" name="colorBackgroundCacheHint" />
+  <public type="attr" name="dropDownHorizontalOffset" />
+  <public type="attr" name="dropDownVerticalOffset" />
   
   <public type="style" name="Theme.Wallpaper" />
   <public type="style" name="Theme.Wallpaper.NoTitleBar" />
@@ -1190,4 +1193,5 @@
        can be seen. -->
   <public type="drawable" name="screen_background_dark_transparent" />
   <public type="drawable" name="screen_background_light_transparent" />
+  <public type="drawable" name="stat_notify_sdcard_prepare" />
 </resources>
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 7f97bd1..7760db1 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -337,9 +337,9 @@
         various network features.</string>
 
     <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
-    <string name="permgrouplab_accounts">Your Google accounts</string>
+    <string name="permgrouplab_accounts">Your accounts</string>
     <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
-    <string name="permgroupdesc_accounts">Access the available Google accounts.</string>
+    <string name="permgroupdesc_accounts">Access the available accounts.</string>
 
     <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permgrouplab_hardwareControls">Hardware controls</string>
@@ -1243,6 +1243,13 @@
     <!-- MMS phone number type -->
     <string name="phoneTypeMms">MMS</string>
 
+    <!-- Label for a birthday event -->
+    <string name="eventTypeBirthday">Birthday</string>
+    <!-- Label for an anniversary event -->
+    <string name="eventTypeAnniversary">Anniversary</string>
+    <!-- Label for other events -->
+    <string name="eventTypeOther">Event</string>
+
     <!-- Custom email type -->
     <string name="emailTypeCustom">Custom</string>
     <!-- Home email type -->
@@ -1299,7 +1306,7 @@
     <string name="orgTypeOther">Other</string>
     <!-- Custom organization type -->
     <string name="orgTypeCustom">Custom</string>
-    
+
     <!-- Attbution of a contact status update, when the time of update is unknown -->
     <string name="contact_status_update_attribution">Via <xliff:g id="source" example="Google Talk">%1$s</xliff:g></string>
 
@@ -2088,4 +2095,9 @@
 
     <!-- Do Not Translate: Alternate eri.xml -->
     <string name="alternate_eri_file">/data/eri.xml</string>
+
+    <string name="pptp_vpn_description">Point-to-Point Tunneling Protocol</string>
+    <string name="l2tp_vpn_description">Layer 2 Tunneling Protocol</string>
+    <string name="l2tp_ipsec_psk_vpn_description">Pre-shared key based L2TP/IPSec VPN</string>
+    <string name="l2tp_ipsec_crt_vpn_description">Certificate based L2TP/IPSec VPN</string>
 </resources>
diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml
index 47c68ad..6e38138 100644
--- a/core/res/res/values/styles.xml
+++ b/core/res/res/values/styles.xml
@@ -459,12 +459,13 @@
 
     <style name="Widget.ListView" parent="Widget.AbsListView">
         <item name="android:listSelector">@android:drawable/list_selector_background</item>
-        <item name="android:cacheColorHint">?android:attr/colorBackground</item>
+        <item name="android:cacheColorHint">?android:attr/colorBackgroundCacheHint</item>
         <item name="android:divider">@android:drawable/divider_horizontal_dark_opaque</item>
     </style>
     
     <style name="Widget.ListView.White" parent="Widget.AbsListView">
         <item name="android:listSelector">@android:drawable/list_selector_background</item>
+        <item name="android:cacheColorHint">?android:attr/colorBackgroundCacheHint</item>
         <item name="android:divider">@android:drawable/divider_horizontal_bright_opaque</item>
     </style>    
 
@@ -523,44 +524,44 @@
         <item name="android:shadowRadius">2.75</item>
     </style>
 
-    <style name="Widget.FasttrackBadgeWidget">
+    <style name="Widget.QuickContactBadge">
         <item name="android:layout_width">50dip</item>
         <item name="android:layout_height">56dip</item>
-        <item name="android:background">@android:drawable/fasttrack_badge</item>
+        <item name="android:background">@android:drawable/quickcontact_badge</item>
         <item name="android:clickable">true</item>
         <item name="android:scaleType">fitCenter</item>
     </style>
     
-    <style name="Widget.FasttrackBadgeWidgetSmall">
+    <style name="Widget.QuickContactBadgeSmall">
         <item name="android:layout_width">39dip</item>
         <item name="android:layout_height">42dip</item>
-        <item name="android:background">@android:drawable/fasttrack_badge_small</item>
+        <item name="android:background">@android:drawable/quickcontact_badge_small</item>
         <item name="android:clickable">true</item>
         <item name="android:scaleType">fitCenter</item>
     </style>
 
-    <style name="Widget.FasttrackBadgeWidget.WindowSmall">
-        <item name="android:fasttrackWindowSize">modeSmall</item>
+    <style name="Widget.QuickContactBadge.WindowSmall">
+        <item name="android:quickContactWindowSize">modeSmall</item>
     </style>
 
-    <style name="Widget.FasttrackBadgeWidget.WindowMedium">
-        <item name="android:fasttrackWindowSize">modeMedium</item>
+    <style name="Widget.QuickContactBadge.WindowMedium">
+        <item name="android:quickContactWindowSize">modeMedium</item>
     </style>
 
-    <style name="Widget.FasttrackBadgeWidget.WindowLarge">
-        <item name="android:fasttrackWindowSize">modeLarge</item>
+    <style name="Widget.QuickContactBadge.WindowLarge">
+        <item name="android:quickContactWindowSize">modeLarge</item>
     </style>
     
-    <style name="Widget.FasttrackBadgeWidgetSmall.WindowSmall">
-        <item name="android:fasttrackWindowSize">modeSmall</item>
+    <style name="Widget.QuickContactBadgeSmall.WindowSmall">
+        <item name="android:quickContactWindowSize">modeSmall</item>
     </style>
 
-    <style name="Widget.FasttrackBadgeWidgetSmall.WindowMedium">
-        <item name="android:fasttrackWindowSize">modeMedium</item>
+    <style name="Widget.QuickContactBadgeSmall.WindowMedium">
+        <item name="android:quickContactWindowSize">modeMedium</item>
     </style>
 
-    <style name="Widget.FasttrackBadgeWidgetSmall.WindowLarge">
-        <item name="android:fasttrackWindowSize">modeLarge</item>
+    <style name="Widget.QuickContactBadgeSmall.WindowLarge">
+        <item name="android:quickContactWindowSize">modeLarge</item>
     </style>
 
     <!-- Text Appearances -->
diff --git a/core/res/res/values/themes.xml b/core/res/res/values/themes.xml
index 5ddbce2..17ea66a 100644
--- a/core/res/res/values/themes.xml
+++ b/core/res/res/values/themes.xml
@@ -30,6 +30,7 @@
         <item name="colorForeground">@android:color/bright_foreground_dark</item>
         <item name="colorForegroundInverse">@android:color/bright_foreground_dark_inverse</item>
         <item name="colorBackground">@android:color/background_dark</item>
+        <item name="colorBackgroundCacheHint">?android:attr/colorBackground</item>
         <item name="disabledAlpha">0.5</item>
         <item name="backgroundDimAmount">0.6</item>
 
@@ -174,12 +175,12 @@
         <item name="spinnerItemStyle">@android:style/Widget.TextView.SpinnerItem</item>
         <item name="dropDownHintAppearance">@android:style/TextAppearance.Widget.DropDownHint</item>
         <item name="keyboardViewStyle">@android:style/Widget.KeyboardView</item>
-        <item name="fasttrackBadgeWidgetStyleWindowSmall">@android:style/Widget.FasttrackBadgeWidget.WindowSmall</item>
-        <item name="fasttrackBadgeWidgetStyleWindowMedium">@android:style/Widget.FasttrackBadgeWidget.WindowMedium</item>
-        <item name="fasttrackBadgeWidgetStyleWindowLarge">@android:style/Widget.FasttrackBadgeWidget.WindowLarge</item>
-        <item name="fasttrackBadgeWidgetStyleSmallWindowSmall">@android:style/Widget.FasttrackBadgeWidgetSmall.WindowSmall</item>
-        <item name="fasttrackBadgeWidgetStyleSmallWindowMedium">@android:style/Widget.FasttrackBadgeWidgetSmall.WindowMedium</item>
-        <item name="fasttrackBadgeWidgetStyleSmallWindowLarge">@android:style/Widget.FasttrackBadgeWidgetSmall.WindowLarge</item>
+        <item name="quickContactBadgeStyleWindowSmall">@android:style/Widget.QuickContactBadge.WindowSmall</item>
+        <item name="quickContactBadgeStyleWindowMedium">@android:style/Widget.QuickContactBadge.WindowMedium</item>
+        <item name="quickContactBadgeStyleWindowLarge">@android:style/Widget.QuickContactBadge.WindowLarge</item>
+        <item name="quickContactBadgeStyleSmallWindowSmall">@android:style/Widget.QuickContactBadgeSmall.WindowSmall</item>
+        <item name="quickContactBadgeStyleSmallWindowMedium">@android:style/Widget.QuickContactBadgeSmall.WindowMedium</item>
+        <item name="quickContactBadgeStyleSmallWindowLarge">@android:style/Widget.QuickContactBadgeSmall.WindowLarge</item>
         
         <!-- Preference styles -->
         <item name="preferenceScreenStyle">@android:style/Preference.PreferenceScreen</item>
@@ -289,6 +290,7 @@
     	 wallpaper appear behind them.  -->
     <style name="Theme.Wallpaper">
         <item name="android:windowBackground">@android:color/transparent</item>
+        <item name="android:colorBackgroundCacheHint">@null</item>
         <item name="android:windowShowWallpaper">true</item>
     </style>
 
@@ -308,6 +310,7 @@
          top of a dark background. -->
     <style name="Theme.WallpaperSettings">
         <item name="android:windowBackground">@android:drawable/screen_background_dark_transparent</item>
+        <item name="android:colorBackgroundCacheHint">@null</item>
         <item name="android:windowIsTranslucent">true</item>
         <item name="android:windowAnimationStyle">@android:style/Animation.Translucent</item>
     </style>
@@ -316,6 +319,7 @@
          top of a light background. -->
     <style name="Theme.Light.WallpaperSettings">
         <item name="android:windowBackground">@android:drawable/screen_background_light_transparent</item>
+        <item name="android:colorBackgroundCacheHint">@null</item>
         <item name="android:windowIsTranslucent">true</item>
         <item name="android:windowAnimationStyle">@android:style/Animation.Translucent</item>
     </style>
@@ -335,6 +339,7 @@
          flag and appropriate animations for your windows.  -->
     <style name="Theme.Translucent">
         <item name="android:windowBackground">@android:color/transparent</item>
+        <item name="android:colorBackgroundCacheHint">@null</item>
         <item name="android:windowIsTranslucent">true</item>
         <!-- Note that we use the base animation style here (that is no
              animations) because we really have no idea how this kind of
@@ -379,6 +384,8 @@
         <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
         <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
 
+        <item name="android:colorBackgroundCacheHint">@null</item>
+        
         <item name="textAppearance">@android:style/TextAppearance</item>
         <item name="textAppearanceInverse">@android:style/TextAppearance.Inverse</item>
 
@@ -422,6 +429,7 @@
          background, and turns off dimming behind the window. -->
     <style name="Theme.Panel">
         <item name="android:windowBackground">@android:color/transparent</item>
+        <item name="android:colorBackgroundCacheHint">@null</item>
         <item name="android:windowFrame">@null</item>
         <item name="android:windowContentOverlay">@null</item>
         <item name="android:windowIsFloating">true</item>
@@ -436,6 +444,7 @@
          background, and turns off dimming behind the window. -->
     <style name="Theme.Light.Panel">
         <item name="android:windowBackground">@android:color/transparent</item>
+        <item name="android:colorBackgroundCacheHint">@null</item>
         <item name="android:windowFrame">@null</item>
         <item name="android:windowContentOverlay">@null</item>
         <item name="android:windowIsFloating">true</item>
diff --git a/docs/html/sdk/ndk/1.6_r1/index.jd b/docs/html/sdk/ndk/1.6_r1/index.jd
new file mode 100644
index 0000000..e066f95
--- /dev/null
+++ b/docs/html/sdk/ndk/1.6_r1/index.jd
@@ -0,0 +1,360 @@
+ndk=true
+ndk.version=1.6
+ndk.rel.id=1
+ndk.date=September 2009
+
+ndk.win_download=android-ndk-1.6_r1-windows.zip
+ndk.win_bytes=25896444
+ndk.win_checksum=a213c9592f24c61620755c6c43f85210
+
+ndk.mac_download=android-ndk-1.6_r1-darwin-x86.zip
+ndk.mac_bytes=20611080
+ndk.mac_checksum=93c5b8b92a1f7b1cdadf267cab8ec403
+
+ndk.linux_download=android-ndk-1.6_r1-linux-x86.zip
+ndk.linux_bytes=19421662
+ndk.linux_checksum=464d3dc02739b82917e6f0591e17edd1
+
+page.title=Android 1.6 NDK, Release 1
+@jd:body
+
+<h2 id="overview">What is the Android NDK?</h2>
+
+<p>The Android NDK provides tools that allow Android application developers
+to embed components that make use of native code in their Android applications.
+</p>
+
+<p>Android applications run in the Dalvik virtual machine. The NDK allows 
+developers to implement parts of their applications using native-code languages 
+such as C and C++. This can provide benefits to certain classes of applications, 
+in the form of reuse of existing code and in some cases increased speed.</p>
+
+<p>The NDK provides:</p>
+
+<ul>
+<li>A set of tools and build files used to generate native code libraries from C
+and C++ sources</li>
+<li>A way to embed the corresponding native libraries into application package
+files (.apks) that can be deployed on Android devices</li>
+<li>A set of native system headers and libraries that will be supported in all
+future versions of the Android platform, starting from Android 1.5 </li>
+<li>Documentation, samples, and tutorials</li>
+</ul>
+
+<p>This release of the NDK supports the ARMv5TE machine instruction set
+and provides stable headers for libc (the C library), libm (the Math library), 
+OpenGL ES 1.1 (3D graphics library), the JNI interface, and other libraries.</p>
+
+<p>The NDK will not benefit most applications. As a developer, you will need 
+to balance its benefits against its drawbacks; notably, using native code does 
+not result in an automatic performance increase, but does always increase 
+application complexity. Typical good candidates for the NDK are self-contained,
+CPU-intensive operations that don't allocate much memory, such as signal processing,
+physics simulation, and so on. Simply re-coding a method to run in C usually does 
+not result in a large performance increase. The NDK can, however, can be 
+an effective way to reuse a large corpus of existing C/C++ code.</p>
+
+<p>Please note that the NDK <em>does not</em> enable you to develop native-only
+applications. Android's primary runtime remains the Dalvik virtual machine.</p>
+
+<h2 id="contents">Contents of the NDK</h2>
+
+<h4>Development tools</h4>
+
+<p>The NDK includes a set of cross-toolchains (compilers, linkers, etc..) that
+can generate native ARM binaries on Linux, OS X, and Windows (with Cygwin)
+platforms.</p>
+
+<p>It provides a set of system headers for stable native APIs that are
+guaranteed to be supported in all later releases of the platform:</p>
+
+<ul>
+<li>libc (C library) headers</li>
+<li>libm (math library) headers</li>
+<li>JNI interface headers</li>
+<li>libz (Zlib compression) headers</li>
+<li>liblog (Android logging) header</li>
+<li>OpenGL ES 1.1 (3D graphics library) headers</li>
+<li>A Minimal set of headers for C++ support</li>
+</ul>
+
+<p>The NDK also provides a build system that lets you work efficiently with your
+sources, without having to handle the toolchain/platform/CPU/ABI details. You
+create very short build files to describe which sources to compile and which
+Android application will use them &mdash; the build system compiles the sources
+and places the shared libraries directly in your application project. </p>
+
+<p class="caution"><strong>Important:</strong> With the exception of the
+libraries listed above, native system libraries in the Android platform are
+<em>not</em> stable and may change in future platform versions.
+Your applications should <em>only</em> make use of the stable native system
+libraries provided in this NDK. </p>
+
+<h4>Documentation</h4>
+
+<p>The NDK package includes a set of documentation that describes the
+capabilities of the NDK and how to use it to create shared libraries for your
+Android applications. In this release, the documentation is provided only in the
+downloadable NDK package. You can find the documentation in the
+<code>&lt;ndk&gt;/docs/</code> directory. Included are these files:</p>
+
+<ul>
+<li>INSTALL.TXT &mdash; describes how to install the NDK and configure it for
+your host system</li>
+<li>OVERVIEW.TXT &mdash; provides an overview of the NDK capabilities and
+usage</li>
+<li>ANDROID-MK.TXT &mdash; describes the use of the Android.mk file, which
+defines the native sources you want to compile</li>
+<li>APPLICATION-MK.TXT &mdash; describes the use of the Application.mk file,
+which describes the native sources required by your Android application</li>
+<li>HOWTO.TXT &mdash; information about common tasks associated with NDK 
+development.</li>
+<li>SYSTEM-ISSUES.TXT &mdash; known issues in the Android system images 
+that you should be aware of, if you are developing using the NDK. </li>
+<li>STABLE-APIS.TXT &mdash; a complete list of the stable APIs exposed
+by headers in the NDK.</li>
+<li>CHANGES.TXT &mdash; a complete list of changes to the NDK across all 
+releases.</li>
+</ul>
+
+<p>Additionally, the package includes detailed information about the "bionic"
+C library provided with the Android platform that you should be aware of, if you
+are developing using the NDK. You can find the documentation in the 
+<code>&lt;ndk&gt;/docs/system/libc/</code> directory:</p>
+
+<ul>
+<li>OVERVIEW.TXT &mdash; provides an overview of the "bionic" C library and the 
+features it offers.</li>
+</ul>
+
+<h4>Sample applications</h4>
+
+<p>The NDK includes three sample Android applications that illustrate how to use
+native code in your Android applications:</p>
+
+<ul>
+<li><code>hello-jni</code> &mdash; A simple application that loads a string from
+a native method implemented in a shared library and then displays it in the
+application UI. </li>
+<li><code>two-libs</code> &mdash; A simple application that loads a shared
+library dynamically and calls a native method provided by the library. In this
+case, the method is implemented in a static library that is imported by the 
+shared library. </li>
+<li><code>san-angeles</code> &mdash; A simple application that renders 3D 
+graphics through the native OpenGL ES APIs, while managing activity lifecycle 
+with a {@link android.opengl.GLSurfaceView GLSurfaceView} object. </li>
+</ul>
+
+<p>For more information, see <a href="#samples">Using the Sample
+Applications</a>.</p>
+
+<h2 id="requirements">System and Software Requirements</h2>
+
+<p>The sections below describe the system and software requirements for using
+the Android NDK, as well as platform compatibility considerations that affect
+appplications using libraries produced with the NDK. </p>
+
+<h4>The Android SDK</h4>
+<ul>
+  <li>A complete Android SDK installation (including all dependencies) is
+required.</li>
+  <li>Android 1.5 SDK or later version is required.</li>
+</ul>
+
+<h4>Supported operating systems</h4>
+<ul>
+  <li>Windows XP (32-bit) or Vista (32- or 64-bit)</li>
+  <li>Mac OS X 10.4.8 or later (x86 only)</li>
+  <li>Linux (32- or 64-bit, tested on Linux Ubuntu Dapper Drake)</li>
+</ul>
+
+<h4>Required development tools</h4>
+<ul>
+  <li>For all development platforms, GNU Make 3.81 or later is required. Earlier
+versions of GNU Make might work but have not been tested.</li>
+  <li>For Windows, a recent release of <a
+href="http://www.cygwin.com">Cygwin</a> is required. </li>
+</ul>
+
+<h4>Android platform compatibility</h4>
+<ul>
+  <li>The native libraries created by the Android NDK can only be used on
+devices running the Android 1.5 platform version or later. This is due to 
+toolchain and ABI related changes that make the native libraries incompatible
+with 1.0 and 1.1 system images.</li>
+  <li>For this reason, you should use native libraries produced with the NDK in
+applications that are deployable to devices running the Android 1.5 platform
+version or later. 
+  <li>To ensure compatibility, an application using a native library
+produced with the NDK <em>must</em> declare a <code>&lt;uses-library&gt;</code> 
+element in its manifest file, with an <code>android:minSdkVersion</code> attribute 
+value of "3" or higher. For example:
+
+<pre>&lt;manifest&gt;
+  ...
+  &lt;uses-sdk android:minSdkVersion="3" /&gt;
+  ...
+&lt;/manifest&gt;</pre>
+
+<p>Additionally, if you use this NDK to create a native library that uses the
+OpenGL ES APIs, the application containing the library can be deployed only to
+devices running Android 1.6 or later. To ensure compatibility in this case, 
+the application <em>must</em> declare an <code>android:minSdkVersion</code>
+attribute value of "4" or higher. </p>
+
+<p>For more information about API Level and its relationship to Android 
+platform versions, see <a href="{@docRoot}guide/appendix/api-levels.html">
+Android API Levels</a>.</p></li>
+</ul>
+
+<h2 id="installing">Installing the NDK</h2>
+
+<p>Installing the NDK on your development computer is straightforward and
+involves extracting the NDK from its download package and running a host-setup
+script. </p>
+
+<p>Before you get started make sure that you have downloaded the latest <a
+href="{@docRoot}sdk/index.html">Android SDK</a> and upgraded your applications
+and environment as needed. The NDK will not work with older versions of the
+Android SDK. Also, take a moment to review the <a href="#requirements">System
+and Software Requirements</a> for the NDK, if you haven't already. </p>
+
+<p>To install the NDK, follow these steps:</p>
+
+<ol>
+<li>From the table at the top of this page, select the NDK package that is
+appropriate for your development computer and download the package.</li>
+<li>Uncompress the NDK download package using tools available on your computer.
+When uncompressed, the NDK files are contained in a directory called
+<code>android-ndk-&lt;version&gt;</code>. You can rename the NDK directory if
+necessary and you can move it to any location on your computer. This
+documentation refers to the NDK directory as <code>&lt;ndk&gt;</code>.  </li>
+<li>Open a terminal, change to the NDK directory, and run the host-setup script.
+The script sets up your environment and generates a host configuration file used
+later, when building your shared libraries. The path to the host-setup script
+is:
+
+<p><code>&lt;ndk&gt;/build/host-setup.sh</code></p>
+
+<p>If the script completes successfully, it prints a "Host setup complete."
+message. If it fails, it prints instructions that you can follow to correct any
+problems. </p>
+</li>
+</ol>
+
+<p>Once you have run the host-setup script, you are ready start working with the
+NDK. </p>
+
+<h2 id="gettingstarted">Getting Started with the NDK</h2>
+
+<p>Once you've installed the NDK successfully, take a few minutes to read the
+documentation included in the NDK. You can find the documentation in the
+<code>&lt;ndk&gt;/docs/</code> directory. In particular, please read the
+OVERVIEW.TXT document completely, so that you understand the intent of the NDK
+and how to use it.</p>
+
+<p>If you used a previous version of the NDK, take a moment to review the 
+list of NDK changes in the CHANGES.TXT document. </p>
+
+<p>Here's the general outline of how you work with the NDK tools:</p>
+
+<ol>
+<li>Place your native sources under
+<code>&lt;project&gt;/jni/...</code></li>
+<li>Create <code>&lt;project&gt;/jni/Android.mk</code> to
+describe your native sources to the NDK build system</li>
+<li>Create <code>&lt;ndk&gt;/apps/&lt;my_app&gt;/Application.mk</code> to
+describe your Android application and native sources it needs to the NDK build
+system. This file sets up the link between an Android SDK application project
+and any number of shared libraries defined in the
+<code>&lt;project&gt;/jni/</code> folder and it specifies the path to the
+application project that will receive the shared library built from the
+sources.</li>
+<li>Build your native code by running this make command from the top-level NDK
+directory:
+
+<p><code>$ make APP=&lt;my_app&gt;</code></p>
+
+<p>The build tools copy the stripped, shared libraries needed by your
+application to the proper location in the application's project directory.</p>
+</li>
+
+<li>Finally, compile your application using the SDK tools in the usual way. The
+SDK build tools will package the shared libraries in the application's
+deployable .apk file. </p></li>
+
+</ol>
+
+<p>For complete information on all of the steps listed above, please see the
+documentation included with the NDK package. </p>
+
+
+<h2 id="samples">Using the Sample Applications</h2>
+
+<p>The NDK includes three sample applications that illustrate how to use native
+code in your Android applications:</p>
+
+<ul>
+<li><code>hello-jni</code> &mdash; A simple application that loads a string from
+a native method implemented in a shared library and then displays it in the
+application UI. </li>
+<li><code>two-libs</code> &mdash; A simple application that loads a shared
+library dynamically and calls a native method provided by the library. In this
+case, the method is implemented in a static library imported by the shared
+library. </li>
+<li><code>san-angeles</code> &mdash; A simple application that renders 3D 
+graphics through the native OpenGL ES APIs, while managing activity lifecycle 
+with a {@link android.opengl.GLSurfaceView GLSurfaceView} object. </li>
+</ul>
+
+<p>For each sample, the NDK includes an Android application project, as well as
+the corresponding C source code and the necessary Android.mk and Application.mk
+files. The application projects are provided in
+<code>&lt;ndk&gt;/apps/&lt;app_name&gt;/project/</code> and the C source for
+each application is provided in
+<code>&lt;ndk&gt;/apps/&lt;app_name&gt;/project/jni/</code>.</p>
+
+<p>Once you have installed the NDK, you can build the shared libraries from the
+NDK by using these commands from the root of the NDK directory:</p>
+<ul>
+<li><code>$ make APP=hello-jni</code> &mdash; compiles
+<code>&lt;ndk&gt;/apps/hello-jni/project/jni/hello-jni.c</code> and outputs a
+shared library to
+<code>&lt;ndk&gt;/apps/hello-jni/project/libs/armeabi/libhello-jni.so</code>.
+</li>
+<li><code>$ make APP=two-libs</code> &mdash; compiles
+<code>&lt;ndk&gt;/apps/two-libs/project/jni/second.c</code> and
+<code>first.c</code> and outputs a shared library to
+<code>&lt;ndk&gt;/apps/two-libs/project/libs/armeabi/libtwolib-second.so</code>.
+</li>
+</ul>
+
+<p>Next, build the sample Android applications that use the shared
+libraries:</p>
+
+<ul>
+<li>If you are developing in Eclipse with ADT, use the New Project Wizard to
+create a new Android project for each sample, using the "Import from Existing
+Source" option and importing the source from 
+<code>&lt;ndk&gt;/apps/&lt;app_name&gt;/project/</code>. Then, set up an AVD, if
+necessary, and build/run the application in the emulator. For more information
+about creating a new Android project in Eclipse, see <a
+href="{@docRoot}guide/developing/eclipse-adt.html">Developing in
+Eclipse</a>.</li>
+<li>If you are developing with Ant, use the <code>android</code> tool to create
+the build file for each of the sample projects at
+<code>&lt;ndk&gt;/apps/&lt;app_name&gt;/project/</code>. Then set up an AVD, if
+necessary, build your project in the usual way, and run it in the emulator. 
+For more information, see <a
+href="{@docRoot}guide/developing/other-ide.html">Developing in Other
+IDEs</a>.</li>
+</ul>
+
+<h2>Discussion Forum and Mailing List</h2>
+
+<p>If you have questions about the NDK or would like to read or contribute to
+discussions about it, please visit the <a
+href="http://groups.google.com/group/android-ndk">android-ndk</a> group and 
+mailing list.</p>
+
+
diff --git a/docs/html/sdk/sdk_toc.cs b/docs/html/sdk/sdk_toc.cs
index b8116aa..143a38d 100644
--- a/docs/html/sdk/sdk_toc.cs
+++ b/docs/html/sdk/sdk_toc.cs
@@ -82,7 +82,7 @@
   <li>
     <h2>Native Development Tools</h2>
     <ul>
-      <li><a href="<?cs var:toroot ?>sdk/ndk/1.5_r1/index.html">Android 1.5 NDK, r1</a></li>
+      <li><a href="<?cs var:toroot ?>sdk/ndk/1.6_r1/index.html">Android 1.6 NDK, r1</a></li>
     </ul>
   </li>
   <li>
diff --git a/docs/html/sdk/terms.jd b/docs/html/sdk/terms.jd
index ffc574a..614a438 100644
--- a/docs/html/sdk/terms.jd
+++ b/docs/html/sdk/terms.jd
@@ -1,6 +1,4 @@
 page.title=Terms and Conditions
-sdk.version=1.6
-sdk.preview=true
 hide_license_footer=true
 @jd:body
 
diff --git a/graphics/java/android/graphics/Paint.java b/graphics/java/android/graphics/Paint.java
index 862e827..3e3f87b 100644
--- a/graphics/java/android/graphics/Paint.java
+++ b/graphics/java/android/graphics/Paint.java
@@ -36,6 +36,10 @@
     private Typeface    mTypeface;
     private Xfermode    mXfermode;
 
+    private boolean     mHasCompatScaling;
+    private float       mCompatScaling;
+    private float       mInvCompatScaling;
+    
     private static final Style[] sStyleArray = {
         Style.FILL, Style.STROKE, Style.FILL_AND_STROKE
     };
@@ -189,6 +193,7 @@
     public Paint(int flags) {
         mNativePaint = native_init();
         setFlags(flags | DEFAULT_PAINT_FLAGS);
+        mCompatScaling = mInvCompatScaling = 1;
     }
 
     /**
@@ -200,12 +205,17 @@
      */
     public Paint(Paint paint) {
         mNativePaint = native_initWithPaint(paint.mNativePaint);
+        mHasCompatScaling = paint.mHasCompatScaling;
+        mCompatScaling = paint.mCompatScaling;
+        mInvCompatScaling = paint.mInvCompatScaling;
     }
 
     /** Restores the paint to its default settings. */
     public void reset() {
         native_reset(mNativePaint);
         setFlags(DEFAULT_PAINT_FLAGS);
+        mHasCompatScaling = false;
+        mCompatScaling = mInvCompatScaling = 1;
     }
     
     /**
@@ -225,9 +235,24 @@
             mShader         = src.mShader;
             mTypeface       = src.mTypeface;
             mXfermode       = src.mXfermode;
+            mHasCompatScaling = src.mHasCompatScaling;
+            mCompatScaling    = src.mCompatScaling;
+            mInvCompatScaling = src.mInvCompatScaling;
         }
     }
 
+    /** @hide */
+    public void setCompatibilityScaling(float factor) {
+        if (factor == 1.0) {
+            mHasCompatScaling = false;
+            mCompatScaling = mInvCompatScaling = 1.0f;
+        } else {
+            mHasCompatScaling = true;
+            mCompatScaling = factor;
+            mInvCompatScaling = 1.0f/factor;
+        }
+    }
+    
     /**
      * Return the paint's flags. Use the Flag enum to test flag values.
      *
@@ -972,8 +997,17 @@
      * @param count THe number of characters to measure, beginning with start
      * @return      The width of the text
      */
-    public native float measureText(char[] text, int index, int count);
+    public float measureText(char[] text, int index, int count) {
+        if (!mHasCompatScaling) return native_measureText(text, index, count);
+        final float oldSize = getTextSize();
+        setTextSize(oldSize*mCompatScaling);
+        float w = native_measureText(text, index, count);
+        setTextSize(oldSize);
+        return w*mInvCompatScaling;
+    }
 
+    private native float native_measureText(char[] text, int index, int count);
+    
     /**
      * Return the width of the text.
      *
@@ -982,16 +1016,34 @@
      * @param end   1 beyond the index of the last character to measure
      * @return      The width of the text
      */
-    public native float measureText(String text, int start, int end);
+    public float measureText(String text, int start, int end) {
+        if (!mHasCompatScaling) return native_measureText(text, start, end);
+        final float oldSize = getTextSize();
+        setTextSize(oldSize*mCompatScaling);
+        float w = native_measureText(text, start, end);
+        setTextSize(oldSize);
+        return w*mInvCompatScaling;
+    }
 
+    private native float native_measureText(String text, int start, int end);
+    
     /**
      * Return the width of the text.
      *
      * @param text  The text to measure
      * @return      The width of the text
      */
-    public native float measureText(String text);
+    public float measureText(String text) {
+        if (!mHasCompatScaling) return native_measureText(text);
+        final float oldSize = getTextSize();
+        setTextSize(oldSize*mCompatScaling);
+        float w = native_measureText(text);
+        setTextSize(oldSize);
+        return w*mInvCompatScaling;
+    }
 
+    private native float native_measureText(String text);
+    
     /**
      * Return the width of the text.
      *
@@ -1013,10 +1065,10 @@
         }
 
         char[] buf = TemporaryBuffer.obtain(end - start);
-    	TextUtils.getChars(text, start, end, buf, 0);
-    	float result = measureText(buf, 0, end - start);
+        TextUtils.getChars(text, start, end, buf, 0);
+        float result = measureText(buf, 0, end - start);
         TemporaryBuffer.recycle(buf);
-    	return result;
+        return result;
     }
     
     /**
@@ -1036,8 +1088,22 @@
      * @return The number of chars that were measured. Will always be <=
      *         abs(count).
      */
-    public native int breakText(char[] text, int index, int count,
-                                float maxWidth, float[] measuredWidth);
+    public int breakText(char[] text, int index, int count,
+                                float maxWidth, float[] measuredWidth) {
+        if (!mHasCompatScaling) {
+            return native_breakText(text, index, count, maxWidth, measuredWidth);
+        }
+        final float oldSize = getTextSize();
+        setTextSize(oldSize*mCompatScaling);
+        int res = native_breakText(text, index, count, maxWidth*mCompatScaling,
+                measuredWidth);
+        setTextSize(oldSize);
+        if (measuredWidth != null) measuredWidth[0] *= mInvCompatScaling;
+        return res;
+    }
+
+    private native int native_breakText(char[] text, int index, int count,
+                                        float maxWidth, float[] measuredWidth);
 
     /**
      * Measure the text, stopping early if the measured width exceeds maxWidth.
@@ -1094,8 +1160,22 @@
      * @return The number of chars that were measured. Will always be <=
      *         abs(count).
      */
-    public native int breakText(String text, boolean measureForwards,
-                                float maxWidth, float[] measuredWidth);
+    public int breakText(String text, boolean measureForwards,
+                                float maxWidth, float[] measuredWidth) {
+        if (!mHasCompatScaling) {
+            return native_breakText(text, measureForwards, maxWidth, measuredWidth);
+        }
+        final float oldSize = getTextSize();
+        setTextSize(oldSize*mCompatScaling);
+        int res = native_breakText(text, measureForwards, maxWidth*mCompatScaling,
+                measuredWidth);
+        setTextSize(oldSize);
+        if (measuredWidth != null) measuredWidth[0] *= mInvCompatScaling;
+        return res;
+    }
+
+    private native int native_breakText(String text, boolean measureForwards,
+                                        float maxWidth, float[] measuredWidth);
 
     /**
      * Return the advance widths for the characters in the string.
@@ -1113,7 +1193,18 @@
                 || count > widths.length) {
             throw new ArrayIndexOutOfBoundsException();
         }
-        return native_getTextWidths(mNativePaint, text, index, count, widths);
+        
+        if (!mHasCompatScaling) {
+            return native_getTextWidths(mNativePaint, text, index, count, widths);
+        }
+        final float oldSize = getTextSize();
+        setTextSize(oldSize*mCompatScaling);
+        int res = native_getTextWidths(mNativePaint, text, index, count, widths);
+        setTextSize(oldSize);
+        for (int i=0; i<res; i++) {
+            widths[i] *= mInvCompatScaling;
+        }
+        return res;
     }
 
     /**
@@ -1164,7 +1255,18 @@
         if (end - start > widths.length) {
             throw new ArrayIndexOutOfBoundsException();
         }
-        return native_getTextWidths(mNativePaint, text, start, end, widths);
+        
+        if (!mHasCompatScaling) {
+            return native_getTextWidths(mNativePaint, text, start, end, widths);
+        }
+        final float oldSize = getTextSize();
+        setTextSize(oldSize*mCompatScaling);
+        int res = native_getTextWidths(mNativePaint, text, start, end, widths);
+        setTextSize(oldSize);
+        for (int i=0; i<res; i++) {
+            widths[i] *= mInvCompatScaling;
+        }
+        return res;
     }
     
     /**
diff --git a/graphics/java/android/graphics/Typeface.java b/graphics/java/android/graphics/Typeface.java
index 9bcab72..f0d5a6a 100644
--- a/graphics/java/android/graphics/Typeface.java
+++ b/graphics/java/android/graphics/Typeface.java
@@ -180,6 +180,8 @@
      *
      * @param blackGamma gamma coefficient for black text
      * @param whiteGamma gamma coefficient for white text
+     *
+     * @hide - this is just for calibrating devices, not for normal apps
      */
     public static native void setGammaForText(float blackGamma, float whiteGamma);
 }
diff --git a/graphics/java/android/graphics/drawable/BitmapDrawable.java b/graphics/java/android/graphics/drawable/BitmapDrawable.java
index f42788e..29e14d2 100644
--- a/graphics/java/android/graphics/drawable/BitmapDrawable.java
+++ b/graphics/java/android/graphics/drawable/BitmapDrawable.java
@@ -115,6 +115,7 @@
      * @deprecated Use {@link #BitmapDrawable(Resources, String)} to ensure
      * that the drawable has correctly set its target density.
      */
+    @Deprecated
     public BitmapDrawable(String filepath) {
         this(new BitmapState(BitmapFactory.decodeFile(filepath)), null);
         if (mBitmap == null) {
@@ -138,6 +139,7 @@
      * @deprecated Use {@link #BitmapDrawable(Resources, java.io.InputStream)} to ensure
      * that the drawable has correctly set its target density.
      */
+    @Deprecated
     public BitmapDrawable(java.io.InputStream is) {
         this(new BitmapState(BitmapFactory.decodeStream(is)), null);
         if (mBitmap == null) {
diff --git a/graphics/java/android/graphics/drawable/GradientDrawable.java b/graphics/java/android/graphics/drawable/GradientDrawable.java
index ddbbaf1..91a2bc1 100644
--- a/graphics/java/android/graphics/drawable/GradientDrawable.java
+++ b/graphics/java/android/graphics/drawable/GradientDrawable.java
@@ -319,7 +319,16 @@
                     }
                 }
                 else {
+                    // since the caller is only giving us 1 value, we will force
+                    // it to be square if the rect is too small in one dimension
+                    // to show it. If we did nothing, Skia would clamp the rad
+                    // independently along each axis, giving us a thin ellips
+                    // if the rect were very wide but not very tall
                     float rad = st.mRadius;
+                    float r = Math.min(mRect.width(), mRect.height()) * 0.5f;
+                    if (rad > r) {
+                        rad = r;
+                    }
                     canvas.drawRoundRect(mRect, rad, rad, mFillPaint);
                     if (haveStroke) {
                         canvas.drawRoundRect(mRect, rad, rad, mStrokePaint);
diff --git a/graphics/java/android/renderscript/BaseObj.java b/graphics/java/android/renderscript/BaseObj.java
index c626d5d..e802ec5 100644
--- a/graphics/java/android/renderscript/BaseObj.java
+++ b/graphics/java/android/renderscript/BaseObj.java
@@ -66,8 +66,8 @@
             mRS = null;
             mID = 0;
             mDestroyed = true;
-            Log.v(RenderScript.LOG_TAG,
-                  getClass() + " auto finalizing object without having released the RS reference.");
+            //Log.v(RenderScript.LOG_TAG, getClass() +
+            // " auto finalizing object without having released the RS reference.");
         }
         super.finalize();
     }
diff --git a/keystore/tests/Android.mk b/keystore/tests/Android.mk
new file mode 100644
index 0000000..95604c6
--- /dev/null
+++ b/keystore/tests/Android.mk
@@ -0,0 +1,15 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+# We only want this apk build for tests.
+LOCAL_MODULE_TAGS := tests
+LOCAL_CERTIFICATE := platform
+
+LOCAL_JAVA_LIBRARIES := android.test.runner
+
+# Include all test java files.
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_PACKAGE_NAME := KeyStoreTests
+
+include $(BUILD_PACKAGE)
diff --git a/keystore/tests/AndroidManifest.xml b/keystore/tests/AndroidManifest.xml
new file mode 100644
index 0000000..1a5f065
--- /dev/null
+++ b/keystore/tests/AndroidManifest.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2009 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.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          package="android.security.tests"
+          android:sharedUserId="android.uid.system">
+
+    <application>
+        <uses-library android:name="android.test.runner" />
+    </application>
+
+    <instrumentation android:name=".KeyStoreTestRunner"
+        android:targetPackage="android.security.tests"
+        android:label="KeyStore Tests">
+    </instrumentation>
+</manifest>
diff --git a/keystore/tests/src/android/security/KeyStoreTest.java b/keystore/tests/src/android/security/KeyStoreTest.java
new file mode 100755
index 0000000..569d8da
--- /dev/null
+++ b/keystore/tests/src/android/security/KeyStoreTest.java
@@ -0,0 +1,135 @@
+/*
+ * Copyright (C) 2009 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.
+ */
+
+package android.security.tests;
+
+import android.app.Activity;
+import android.security.KeyStore;
+import android.test.ActivityUnitTestCase;
+import android.test.suitebuilder.annotation.MediumTest;
+
+/**
+ * Junit / Instrumentation test case for KeyStore class
+ *
+ * Running the test suite:
+ *
+ *  adb shell am instrument -w android.security.tests/.KeyStoreTestRunner
+ */
+@MediumTest
+public class KeyStoreTest extends ActivityUnitTestCase<Activity> {
+    private static final String TEST_PASSWD = "12345678";
+    private static final String TEST_EMPTY_PASSWD = "";
+    private static final String TEST_SHORT_PASSWD = "short";
+    private static final String TEST_PASSWD2 = "87654321";
+    private static final String TEST_KEYNAME = "testkey";
+    private static final String TEST_KEYNAME1 = "testkey1";
+    private static final String TEST_KEYNAME2 = "testkey2";
+    private static final String TEST_KEYVALUE = "test value";
+
+    private KeyStore mKeyStore = null;
+
+    public KeyStoreTest() {
+        super(Activity.class);
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        mKeyStore = KeyStore.getInstance();
+        if (mKeyStore.test() != KeyStore.UNINITIALIZED) mKeyStore.reset();
+        assertEquals(KeyStore.UNINITIALIZED, mKeyStore.test());
+        super.setUp();
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        mKeyStore.reset();
+        super.tearDown();
+    }
+
+    public void testTest() throws Exception {
+        assertEquals(KeyStore.UNINITIALIZED, mKeyStore.test());
+    }
+
+    public void testPassword() throws Exception {
+        //assertFalse(mKeyStore.password(TEST_EMPTY_PASSWD));
+        //assertFalse(mKeyStore.password(TEST_SHORT_PASSWD));
+
+        assertTrue(mKeyStore.password(TEST_PASSWD));
+        assertEquals(KeyStore.NO_ERROR, mKeyStore.test());
+
+        assertFalse(mKeyStore.password(TEST_PASSWD2, TEST_PASSWD2));
+        //assertFalse(mKeyStore.password(TEST_PASSWD, TEST_SHORT_PASSWD));
+
+        assertTrue(mKeyStore.password(TEST_PASSWD, TEST_PASSWD2));
+    }
+
+    public void testPut() throws Exception {
+        assertFalse(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE));
+        assertFalse(mKeyStore.contains(TEST_KEYNAME));
+        mKeyStore.password(TEST_PASSWD);
+        assertTrue(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE));
+    }
+
+    public void testDelete() throws Exception {
+        assertTrue(mKeyStore.delete(TEST_KEYNAME));
+        mKeyStore.password(TEST_PASSWD);
+        assertTrue(mKeyStore.delete(TEST_KEYNAME));
+
+        mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE);
+        assertTrue(mKeyStore.delete(TEST_KEYNAME));
+    }
+
+    public void testContains() throws Exception {
+        assertFalse(mKeyStore.contains(TEST_KEYNAME));
+
+        mKeyStore.password(TEST_PASSWD);
+        assertFalse(mKeyStore.contains(TEST_KEYNAME));
+
+        mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE);
+        assertTrue(mKeyStore.contains(TEST_KEYNAME));
+    }
+
+    public void testSaw() throws Exception {
+        String[] results = mKeyStore.saw(TEST_KEYNAME);
+        assertEquals(0, results.length);
+
+        mKeyStore.password(TEST_PASSWD);
+        mKeyStore.put(TEST_KEYNAME1, TEST_KEYVALUE);
+        mKeyStore.put(TEST_KEYNAME2, TEST_KEYVALUE);
+
+        results = mKeyStore.saw(TEST_KEYNAME);
+        assertEquals(2, results.length);
+    }
+
+    public void testLock() throws Exception {
+        assertFalse(mKeyStore.lock());
+
+        mKeyStore.password(TEST_PASSWD);
+        assertEquals(KeyStore.NO_ERROR, mKeyStore.test());
+
+        assertTrue(mKeyStore.lock());
+        assertEquals(KeyStore.LOCKED, mKeyStore.test());
+    }
+
+    public void testUnlock() throws Exception {
+        mKeyStore.password(TEST_PASSWD);
+        assertEquals(KeyStore.NO_ERROR, mKeyStore.test());
+        mKeyStore.lock();
+
+        assertFalse(mKeyStore.unlock(TEST_PASSWD2));
+        assertTrue(mKeyStore.unlock(TEST_PASSWD));
+    }
+}
diff --git a/keystore/tests/src/android/security/KeyStoreTestRunner.java b/keystore/tests/src/android/security/KeyStoreTestRunner.java
new file mode 100644
index 0000000..c85922d
--- /dev/null
+++ b/keystore/tests/src/android/security/KeyStoreTestRunner.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2009 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.
+ */
+
+package android.security.tests;
+
+import junit.framework.TestSuite;
+
+import android.test.InstrumentationTestRunner;
+import android.test.InstrumentationTestSuite;
+
+/**
+ * Instrumentation Test Runner for all KeyStore unit tests.
+ *
+ * Running all tests:
+ *
+ *   runtest keystore-unit
+ * or
+ *   adb shell am instrument -w android.security.tests/.KeyStoreTestRunner
+ */
+
+public class KeyStoreTestRunner extends InstrumentationTestRunner {
+
+    @Override
+    public TestSuite getAllTests() {
+        TestSuite suite = new InstrumentationTestSuite(this);
+        suite.addTestSuite(android.security.tests.KeyStoreTest.class);
+        return suite;
+    }
+
+    @Override
+    public ClassLoader getLoader() {
+        return KeyStoreTestRunner.class.getClassLoader();
+    }
+}
diff --git a/libs/audioflinger/AudioFlinger.cpp b/libs/audioflinger/AudioFlinger.cpp
index 6500791..8e967fb 100644
--- a/libs/audioflinger/AudioFlinger.cpp
+++ b/libs/audioflinger/AudioFlinger.cpp
@@ -74,6 +74,8 @@
 static const int kDumpLockRetries = 50;
 static const int kDumpLockSleep = 20000;
 
+static const nsecs_t kWarningThrottle = seconds(5);
+
 
 #define AUDIOFLINGER_SECURITY_ENABLED 1
 
@@ -601,18 +603,19 @@
         return result;
     }
 
-    // Check if parameters are for an output
-    PlaybackThread *playbackThread = checkPlaybackThread_l(ioHandle);
-    if (playbackThread != NULL) {
-        return playbackThread->setParameters(keyValuePairs);
+    // hold a strong ref on thread in case closeOutput() or closeInput() is called
+    // and the thread is exited once the lock is released
+    sp<ThreadBase> thread;
+    {
+        Mutex::Autolock _l(mLock);
+        thread = checkPlaybackThread_l(ioHandle);
+        if (thread == NULL) {
+            thread = checkRecordThread_l(ioHandle);
+        }
     }
-
-    // Check if parameters are for an input
-    RecordThread *recordThread = checkRecordThread_l(ioHandle);
-    if (recordThread != NULL) {
-        return recordThread->setParameters(keyValuePairs);
+    if (thread != NULL) {
+        return thread->setParameters(keyValuePairs);
     }
-
     return BAD_VALUE;
 }
 
@@ -624,6 +627,9 @@
     if (ioHandle == 0) {
         return mAudioHardware->getParameters(keys);
     }
+
+    Mutex::Autolock _l(mLock);
+
     PlaybackThread *playbackThread = checkPlaybackThread_l(ioHandle);
     if (playbackThread != NULL) {
         return playbackThread->getParameters(keys);
@@ -734,7 +740,7 @@
 
 void AudioFlinger::ThreadBase::exit()
 {
-    // keep a strong ref on ourself so that we want get
+    // keep a strong ref on ourself so that we wont get
     // destroyed in the middle of requestExitAndWait()
     sp <ThreadBase> strongMe = this;
 
@@ -776,9 +782,14 @@
 
     mNewParameters.add(keyValuePairs);
     mWaitWorkCV.signal();
-    mParamCond.wait(mLock);
-    status = mParamStatus;
-    mWaitWorkCV.signal();
+    // wait condition with timeout in case the thread loop has exited
+    // before the request could be processed
+    if (mParamCond.waitRelative(mLock, seconds(2)) == NO_ERROR) {
+        status = mParamStatus;
+        mWaitWorkCV.signal();
+    } else {
+        status = TIMED_OUT;
+    }
     return status;
 }
 
@@ -1170,7 +1181,10 @@
     size_t enabledTracks = 0;
     nsecs_t standbyTime = systemTime();
     size_t mixBufferSize = mFrameCount * mFrameSize;
-    nsecs_t maxPeriod = seconds(mFrameCount) / mSampleRate * 2;
+    // FIXME: Relaxed timing because of a certain device that can't meet latency
+    // Should be reduced to 2x after the vendor fixes the driver issue
+    nsecs_t maxPeriod = seconds(mFrameCount) / mSampleRate * 3;
+    nsecs_t lastWarning = 0;
 
     while (!exitPending())
     {
@@ -1183,7 +1197,9 @@
 
             if (checkForNewParameters_l()) {
                 mixBufferSize = mFrameCount * mFrameSize;
-                maxPeriod = seconds(mFrameCount) / mSampleRate * 2;
+                // FIXME: Relaxed timing because of a certain device that can't meet latency
+                // Should be reduced to 2x after the vendor fixes the driver issue
+                maxPeriod = seconds(mFrameCount) / mSampleRate * 3;
             }
 
             const SortedVector< wp<Track> >& activeTracks = mActiveTracks;
@@ -1260,10 +1276,15 @@
             mNumWrites++;
             mInWrite = false;
             mStandby = false;
-            nsecs_t delta = systemTime() - mLastWriteTime;
+            nsecs_t now = systemTime();
+            nsecs_t delta = now - mLastWriteTime;
             if (delta > maxPeriod) {
-                LOGW("write blocked for %llu msecs, thread %p", ns2ms(delta), this);
                 mNumDelayedWrites++;
+                if ((now - lastWarning) > kWarningThrottle) {
+                    LOGW("write blocked for %llu msecs, %d delayed writes, thread %p",
+                            ns2ms(delta), mNumDelayedWrites, this);
+                    lastWarning = now;
+                }
             }
         } else {
             usleep(sleepTime);
diff --git a/libs/rs/java/Film/res/raw/filmimage.c b/libs/rs/java/Film/res/raw/filmimage.c
index 3bd9496..d154c68 100644
--- a/libs/rs/java/Film/res/raw/filmimage.c
+++ b/libs/rs/java/Film/res/raw/filmimage.c
@@ -4,7 +4,7 @@
 #pragma stateVertex(orthoWindow)
 #pragma stateRaster(flat)
 #pragma stateFragment(PgmFragBackground)
-#pragma stateFragmentStore(MyBlend)
+#pragma stateStore(MyBlend)
 
 
 int main(void* con, int ft, int launchID) {
diff --git a/libs/rs/java/Film/res/raw/filmstrip.c b/libs/rs/java/Film/res/raw/filmstrip.c
index 8fbfee1..bf75675 100644
--- a/libs/rs/java/Film/res/raw/filmstrip.c
+++ b/libs/rs/java/Film/res/raw/filmstrip.c
@@ -3,7 +3,7 @@
 #pragma version(1)
 #pragma stateVertex(PVBackground)
 #pragma stateFragment(PFBackground)
-#pragma stateFragmentStore(PSBackground)
+#pragma stateStore(PSBackground)
 
 #define STATE_TRIANGLE_OFFSET_COUNT 0
 #define STATE_LAST_FOCUS 1
@@ -33,7 +33,7 @@
     drawSimpleMesh(NAMED_mesh);
 
     // Start of images.
-    bindProgramFragmentStore(NAMED_PSImages);
+    bindProgramStore(NAMED_PSImages);
     bindProgramFragment(NAMED_PFImages);
     bindProgramVertex(NAMED_PVImages);
 
diff --git a/libs/rs/java/Fountain/res/raw/fountain.c b/libs/rs/java/Fountain/res/raw/fountain.c
index 86f0f99..f218f9b 100644
--- a/libs/rs/java/Fountain/res/raw/fountain.c
+++ b/libs/rs/java/Fountain/res/raw/fountain.c
@@ -1,8 +1,5 @@
 // Fountain test script
 #pragma version(1)
-#pragma stateVertex(default)
-#pragma stateFragment(default)
-#pragma stateFragmentStore(default)
 
 int newPart = 0;
 
diff --git a/libs/rs/java/Rollo/res/raw/rollo.c b/libs/rs/java/Rollo/res/raw/rollo.c
index 6376715..b31be81 100644
--- a/libs/rs/java/Rollo/res/raw/rollo.c
+++ b/libs/rs/java/Rollo/res/raw/rollo.c
@@ -1,7 +1,7 @@
 #pragma version(1)
 #pragma stateVertex(PV)
 #pragma stateFragment(PF)
-#pragma stateFragmentStore(PFS)
+#pragma stateStore(PFS)
 
 // Scratch buffer layout
 #define SCRATCH_FADE 0
@@ -105,7 +105,7 @@
     if ((zoom < 1.1f) && (zoom > 0.9f)) {
         bindProgramVertex(NAMED_PVOrtho);
         bindProgramFragment(NAMED_PFText);
-        bindProgramFragmentStore(NAMED_PFSText);
+        bindProgramStore(NAMED_PFSText);
 
         rot = drawRot * scale;
         index = 0;
@@ -144,7 +144,7 @@
 
         bindProgramVertex(NAMED_PV);
         bindProgramFragment(NAMED_PF);
-        bindProgramFragmentStore(NAMED_PFS);
+        bindProgramStore(NAMED_PFS);
     }
 
     // Draw the selected icon
diff --git a/libs/rs/java/Rollo/res/raw/rollo2.c b/libs/rs/java/Rollo/res/raw/rollo2.c
index 256fa3c..5b5cb2d 100644
--- a/libs/rs/java/Rollo/res/raw/rollo2.c
+++ b/libs/rs/java/Rollo/res/raw/rollo2.c
@@ -1,7 +1,7 @@
 #pragma version(1)
 #pragma stateVertex(PV)
 #pragma stateFragment(PF)
-#pragma stateFragmentStore(PFS)
+#pragma stateStore(PFS)
 
 // Scratch buffer layout
 #define SCRATCH_FADE 0
diff --git a/libs/rs/rsContext.cpp b/libs/rs/rsContext.cpp
index 70add92..169d5d4 100644
--- a/libs/rs/rsContext.cpp
+++ b/libs/rs/rsContext.cpp
@@ -103,12 +103,14 @@
     ObjectBaseRef<ProgramFragment> frag(mFragment);
     ObjectBaseRef<ProgramVertex> vtx(mVertex);
     ObjectBaseRef<ProgramFragmentStore> store(mFragmentStore);
+    ObjectBaseRef<ProgramRaster> raster(mRaster);
 
     bool ret = s->run(this, launchID);
 
     mFragment.set(frag);
     mVertex.set(vtx);
     mFragmentStore.set(store);
+    mRaster.set(raster);
     return ret;
 }
 
@@ -124,7 +126,6 @@
     eglQuerySurface(mEGL.mDisplay, mEGL.mSurface, EGL_HEIGHT, &mEGL.mHeight);
     glViewport(0, 0, mEGL.mWidth, mEGL.mHeight);
     glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
-    //glEnable(GL_POINT_SMOOTH);
 
     glClearColor(mRootScript->mEnviroment.mClearColor[0],
                  mRootScript->mEnviroment.mClearColor[1],
diff --git a/libs/rs/rsMatrix.cpp b/libs/rs/rsMatrix.cpp
index 5f68197..2f21405 100644
--- a/libs/rs/rsMatrix.cpp
+++ b/libs/rs/rsMatrix.cpp
@@ -85,7 +85,7 @@
     const float zx = z * x;
     const float xs = x * s;
     const float ys = y * s;
-    const float zs = z * s;		
+    const float zs = z * s;
     m[ 0] = x*x*nc +  c;
     m[ 4] =  xy*nc - zs;
     m[ 8] =  zx*nc + ys;
@@ -156,4 +156,9 @@
     m[15]= 0;
 }
 
-
+void Matrix::vectorMultiply(float *out, const float *in) const {
+    out[0] = (m[0] * in[0]) + (m[4] * in[1]) + (m[8] * in[2]) + m[12];
+    out[1] = (m[1] * in[0]) + (m[5] * in[1]) + (m[9] * in[2]) + m[13];
+    out[2] = (m[2] * in[0]) + (m[6] * in[1]) + (m[10] * in[2]) + m[14];
+    out[3] = (m[3] * in[0]) + (m[7] * in[1]) + (m[11] * in[2]) + m[15];
+}
diff --git a/libs/rs/rsMatrix.h b/libs/rs/rsMatrix.h
index 7dc4165..11ce42e 100644
--- a/libs/rs/rsMatrix.h
+++ b/libs/rs/rsMatrix.h
@@ -23,7 +23,7 @@
 namespace android {
 namespace renderscript {
 
-struct Matrix 
+struct Matrix
 {
     float m[16];
 
@@ -47,6 +47,8 @@
     void loadOrtho(float l, float r, float b, float t, float n, float f);
     void loadFrustum(float l, float r, float b, float t, float n, float f);
 
+    void vectorMultiply(float *v4out, const float *v3in) const;
+
     void multiply(const Matrix *rhs) {
         Matrix tmp;
         tmp.loadMultiply(this, rhs);
@@ -71,7 +73,7 @@
 
 
 };
-    
+
 
 
 }
diff --git a/libs/rs/rsProgramVertex.cpp b/libs/rs/rsProgramVertex.cpp
index 9bfa602..eea8b3b 100644
--- a/libs/rs/rsProgramVertex.cpp
+++ b/libs/rs/rsProgramVertex.cpp
@@ -121,7 +121,14 @@
     mDirty = true;
 }
 
-
+void ProgramVertex::transformToScreen(const Context *rsc, float *v4out, const float *v3in) const
+{
+    float *f = static_cast<float *>(mConstants->getPtr());
+    Matrix mvp;
+    mvp.loadMultiply((Matrix *)&f[RS_PROGRAM_VERTEX_MODELVIEW_OFFSET],
+                     (Matrix *)&f[RS_PROGRAM_VERTEX_PROJECTION_OFFSET]);
+    mvp.vectorMultiply(v4out, v3in);
+}
 
 ProgramVertexState::ProgramVertexState()
 {
diff --git a/libs/rs/rsProgramVertex.h b/libs/rs/rsProgramVertex.h
index e198f23..493668c 100644
--- a/libs/rs/rsProgramVertex.h
+++ b/libs/rs/rsProgramVertex.h
@@ -43,6 +43,9 @@
     void setModelviewMatrix(const rsc_Matrix *) const;
     void setTextureMatrix(const rsc_Matrix *) const;
 
+    void transformToScreen(const Context *, float *v4out, const float *v3in) const;
+
+
 protected:
     uint32_t mLightCount;
     ObjectBaseRef<const Light> mLights[MAX_LIGHTS];
diff --git a/libs/rs/rsScript.h b/libs/rs/rsScript.h
index 0067fc8..8aa4542 100644
--- a/libs/rs/rsScript.h
+++ b/libs/rs/rsScript.h
@@ -51,7 +51,7 @@
 
         ObjectBaseRef<ProgramVertex> mVertex;
         ObjectBaseRef<ProgramFragment> mFragment;
-        //ObjectBaseRef<ProgramRaster> mRaster;
+        ObjectBaseRef<ProgramRaster> mRaster;
         ObjectBaseRef<ProgramFragmentStore> mFragmentStore;
         InvokeFunc_t mInvokables[MAX_SCRIPT_BANKS];
         const char * mScriptText;
diff --git a/libs/rs/rsScriptC.cpp b/libs/rs/rsScriptC.cpp
index e63ed24..20088da 100644
--- a/libs/rs/rsScriptC.cpp
+++ b/libs/rs/rsScriptC.cpp
@@ -72,6 +72,9 @@
     if (mEnviroment.mVertex.get()) {
         rsc->setVertex(mEnviroment.mVertex.get());
     }
+    if (mEnviroment.mRaster.get()) {
+        rsc->setRaster(mEnviroment.mRaster.get());
+    }
 
     if (launchIndex == 0) {
         mEnviroment.mStartTimeMillis
@@ -175,6 +178,7 @@
     s->mEnviroment.mFragment.set(rsc->getDefaultProgramFragment());
     s->mEnviroment.mVertex.set(rsc->getDefaultProgramVertex());
     s->mEnviroment.mFragmentStore.set(rsc->getDefaultProgramFragmentStore());
+    s->mEnviroment.mRaster.set(rsc->getDefaultProgramRaster());
 
     if (s->mProgram.mScript) {
         const static int pragmaMax = 16;
@@ -204,6 +208,18 @@
             }
 
             if (!strcmp(str[ct], "stateRaster")) {
+                if (!strcmp(str[ct+1], "default")) {
+                    continue;
+                }
+                if (!strcmp(str[ct+1], "parent")) {
+                    s->mEnviroment.mRaster.clear();
+                    continue;
+                }
+                ProgramRaster * pr = (ProgramRaster *)rsc->lookupName(str[ct+1]);
+                if (pr != NULL) {
+                    s->mEnviroment.mRaster.set(pr);
+                    continue;
+                }
                 LOGE("Unreconized value %s passed to stateRaster", str[ct+1]);
             }
 
@@ -223,7 +239,7 @@
                 LOGE("Unreconized value %s passed to stateFragment", str[ct+1]);
             }
 
-            if (!strcmp(str[ct], "stateFragmentStore")) {
+            if (!strcmp(str[ct], "stateStore")) {
                 if (!strcmp(str[ct+1], "default")) {
                     continue;
                 }
@@ -237,7 +253,7 @@
                     s->mEnviroment.mFragmentStore.set(pfs);
                     continue;
                 }
-                LOGE("Unreconized value %s passed to stateFragmentStore", str[ct+1]);
+                LOGE("Unreconized value %s passed to stateStore", str[ct+1]);
             }
 
         }
diff --git a/libs/rs/rsScriptC_Lib.cpp b/libs/rs/rsScriptC_Lib.cpp
index f5f182f..17d14f5 100644
--- a/libs/rs/rsScriptC_Lib.cpp
+++ b/libs/rs/rsScriptC_Lib.cpp
@@ -22,6 +22,8 @@
 #include "acc/acc.h"
 #include "utils/Timers.h"
 
+#define GL_GLEXT_PROTOTYPES
+
 #include <GLES/gl.h>
 #include <GLES/glext.h>
 
@@ -672,6 +674,23 @@
     glDrawArrays(GL_LINES, 0, 2);
 }
 
+static void SC_drawPoint(float x, float y, float z)
+{
+    GET_TLS();
+    rsc->setupCheck();
+
+    float vtx[] = { x, y, z };
+
+    glBindBuffer(GL_ARRAY_BUFFER, 0);
+    glEnableClientState(GL_VERTEX_ARRAY);
+    glVertexPointer(3, GL_FLOAT, 0, vtx);
+
+    glDisableClientState(GL_NORMAL_ARRAY);
+    glDisableClientState(GL_COLOR_ARRAY);
+
+    glDrawArrays(GL_POINTS, 0, 1);
+}
+
 static void SC_drawQuadTexCoords(float x1, float y1, float z1,
                                  float u1, float v1,
                                  float x2, float y2, float z2,
@@ -727,6 +746,48 @@
                          x4, y4, z4, 0, 0);
 }
 
+static void SC_drawSpriteScreenspace(float x, float y, float z, float w, float h)
+{
+    GET_TLS();
+    rsc->setupCheck();
+
+    GLint crop[4] = {0, h, w, -h};
+    glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, crop);
+    glDrawTexfOES(x, y, z, w, h);
+}
+
+static void SC_drawSprite(float x, float y, float z, float w, float h)
+{
+    GET_TLS();
+    rsc->setupCheck();
+
+    float vin[3] = {x, y, z};
+    float vout[4];
+
+    //LOGE("ds  in %f %f %f", x, y, z);
+    rsc->getVertex()->transformToScreen(rsc, vout, vin);
+    //LOGE("ds  out %f %f %f %f", vout[0], vout[1], vout[2], vout[3]);
+    vout[0] /= vout[3];
+    vout[1] /= vout[3];
+    vout[2] /= vout[3];
+
+    vout[0] *= rsc->getWidth() / 2;
+    vout[1] *= rsc->getHeight() / 2;
+    vout[0] += rsc->getWidth() / 2;
+    vout[1] += rsc->getHeight() / 2;
+
+    vout[0] -= w/2;
+    vout[1] -= h/2;
+
+    //LOGE("ds  out2 %f %f %f", vout[0], vout[1], vout[2]);
+
+    // U, V, W, H
+    GLint crop[4] = {0, h, w, -h};
+    glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, crop);
+    glDrawTexiOES(vout[0], vout[1], 0/*vout[2]*/, w, h);
+}
+
+
 static void SC_drawRect(float x1, float y1,
                         float x2, float y2, float z)
 {
@@ -979,7 +1040,7 @@
         "float", "(float, float)" },
     { "abs", (void *)&abs,
         "int", "(int)" },
-    { "absf", (void *)&fabs,
+    { "absf", (void *)&fabsf,
         "float", "(float)" },
     { "sinf_fast", (void *)&SC_sinf_fast,
         "float", "(float)" },
@@ -1131,6 +1192,8 @@
         "void", "(int)" },
     { "bindProgramFragmentStore", (void *)&SC_bindProgramFragmentStore,
         "void", "(int)" },
+    { "bindProgramStore", (void *)&SC_bindProgramFragmentStore,
+        "void", "(int)" },
     { "bindProgramVertex", (void *)&SC_bindProgramVertex,
         "void", "(int)" },
     { "bindSampler", (void *)&SC_bindSampler,
@@ -1153,8 +1216,14 @@
         "void", "(float x1, float y1, float z1, float x2, float y2, float z2, float x3, float y3, float z3, float x4, float y4, float z4)" },
     { "drawQuadTexCoords", (void *)&SC_drawQuadTexCoords,
         "void", "(float x1, float y1, float z1, float u1, float v1, float x2, float y2, float z2, float u2, float v2, float x3, float y3, float z3, float u3, float v3, float x4, float y4, float z4, float u4, float v4)" },
+    { "drawSprite", (void *)&SC_drawSprite,
+        "void", "(float x, float y, float z, float w, float h)" },
+    { "drawSpriteScreenspace", (void *)&SC_drawSpriteScreenspace,
+        "void", "(float x, float y, float z, float w, float h)" },
     { "drawLine", (void *)&SC_drawLine,
         "void", "(float x1, float y1, float z1, float x2, float y2, float z2)" },
+    { "drawPoint", (void *)&SC_drawPoint,
+        "void", "(float x1, float y1, float z1)" },
     { "drawSimpleMesh", (void *)&SC_drawSimpleMesh,
         "void", "(int ism)" },
     { "drawSimpleMeshRange", (void *)&SC_drawSimpleMeshRange,
diff --git a/libs/surfaceflinger/Layer.cpp b/libs/surfaceflinger/Layer.cpp
index 2894bf0..07222ec 100644
--- a/libs/surfaceflinger/Layer.cpp
+++ b/libs/surfaceflinger/Layer.cpp
@@ -294,8 +294,8 @@
                 this, index, w, h, strerror(-err));
     } else {
         LOGD_IF(DEBUG_RESIZE,
-                "Layer::requestBuffer(this=%p), index=%d, w=%d, h=%d",
-                this, index, w, h);
+                "Layer::requestBuffer(this=%p), index=%d, w=%d, h=%d, handle=%p",
+                this, index, w, h, buffer->handle);
     }
 
     if (err == NO_ERROR && buffer->handle != 0) {
@@ -318,22 +318,18 @@
     const Layer::State& front(drawingState());
     const Layer::State& temp(currentState());
 
-    // Index of the back buffer
-    const bool backbufferChanged = (front.w != temp.w) || (front.h != temp.h);
-    if (backbufferChanged) {
+    if ((front.requested_w != temp.requested_w) || 
+        (front.requested_h != temp.requested_h)) {
         // the size changed, we need to ask our client to request a new buffer
         LOGD_IF(DEBUG_RESIZE,
                     "resize (layer=%p), requested (%dx%d), "
                     "drawing (%d,%d), (%dx%d), (%dx%d)",
-                    this, int(temp.w), int(temp.h),
-                    int(drawingState().w), int(drawingState().h),
+                    this, 
+                    int(temp.requested_w), int(temp.requested_h),
+                    int(front.requested_w), int(front.requested_h),
                     int(mBuffers[0]->getWidth()), int(mBuffers[0]->getHeight()),
                     int(mBuffers[1]->getWidth()), int(mBuffers[1]->getHeight()));
 
-        // record the new size, form this point on, when the client request a
-        // buffer, it'll get the new size.
-        setDrawingSize(temp.w, temp.h);
-
         // we're being resized and there is a freeze display request,
         // acquire a freeze lock, so that the screen stays put
         // until we've redrawn at the new size; this is to avoid
@@ -346,9 +342,16 @@
             }
         }
 
-        // recompute the visible region
-        flags |= Layer::eVisibleRegion;
-        this->contentDirty = true;
+        // this will make sure LayerBase::doTransaction doesn't update
+        // the drawing state's size
+        Layer::State& editDraw(mDrawingState);
+        editDraw.requested_w = temp.requested_w;
+        editDraw.requested_h = temp.requested_h;
+
+        // record the new size, form this point on, when the client request a
+        // buffer, it'll get the new size.
+        setDrawingSize(temp.requested_w, temp.requested_h);
+
         // all buffers need reallocation
         lcblk->reallocate();
     }
@@ -392,11 +395,35 @@
     const Region dirty(lcblk->getDirtyRegion(buf));
     mPostedDirtyRegion = dirty.intersect( newFrontBuffer->getBounds() );
 
-
     const Layer::State& front(drawingState());
-    if (newFrontBuffer->getWidth() == front.w &&
-        newFrontBuffer->getHeight() ==front.h) {
-        mFreezeLock.clear();
+    if (newFrontBuffer->getWidth()  == front.requested_w &&
+        newFrontBuffer->getHeight() == front.requested_h)
+    {
+        if ((front.w != front.requested_w) ||
+            (front.h != front.requested_h))
+        {
+            // Here we pretend the transaction happened by updating the
+            // current and drawing states. Drawing state is only accessed
+            // in this thread, no need to have it locked
+            Layer::State& editDraw(mDrawingState);
+            editDraw.w = editDraw.requested_w;
+            editDraw.h = editDraw.requested_h;
+
+            // We also need to update the current state so that we don't
+            // end-up doing too much work during the next transaction.
+            // NOTE: We actually don't need hold the transaction lock here
+            // because State::w and State::h are only accessed from
+            // this thread
+            Layer::State& editTemp(currentState());
+            editTemp.w = editDraw.w;
+            editTemp.h = editDraw.h;
+
+            // recompute visible region
+            recomputeVisibleRegions = true;
+
+            // we now have the correct size, unfreeze the screen
+            mFreezeLock.clear();
+        }
     }
 
     // FIXME: signal an event if we have more buffers waiting
diff --git a/libs/surfaceflinger/LayerBase.cpp b/libs/surfaceflinger/LayerBase.cpp
index a351253..d83c8429 100644
--- a/libs/surfaceflinger/LayerBase.cpp
+++ b/libs/surfaceflinger/LayerBase.cpp
@@ -34,12 +34,6 @@
 #include "DisplayHardware/DisplayHardware.h"
 
 
-// We don't honor the premultiplied alpha flags, which means that
-// premultiplied surface may be composed using a non-premultiplied
-// equation. We do this because it may be a lot faster on some hardware
-// The correct value is HONOR_PREMULTIPLIED_ALPHA = 1
-#define HONOR_PREMULTIPLIED_ALPHA   0
-
 namespace android {
 
 // ---------------------------------------------------------------------------
@@ -89,26 +83,22 @@
     if (flags & ISurfaceComposer::eNonPremultiplied)
         mPremultipliedAlpha = false;
 
-    mCurrentState.z         = 0;
-    mCurrentState.w         = w;
-    mCurrentState.h         = h;
-    mCurrentState.alpha     = 0xFF;
-    mCurrentState.flags     = layerFlags;
-    mCurrentState.sequence  = 0;
+    mCurrentState.z             = 0;
+    mCurrentState.w             = w;
+    mCurrentState.h             = h;
+    mCurrentState.requested_w   = w;
+    mCurrentState.requested_h   = h;
+    mCurrentState.alpha         = 0xFF;
+    mCurrentState.flags         = layerFlags;
+    mCurrentState.sequence      = 0;
     mCurrentState.transform.set(0, 0);
 
     // drawing state & current state are identical
     mDrawingState = mCurrentState;
 }
 
-void LayerBase::commitTransaction(bool skipSize) {
-    const uint32_t w = mDrawingState.w;
-    const uint32_t h = mDrawingState.h;
+void LayerBase::commitTransaction() {
     mDrawingState = mCurrentState;
-    if (skipSize) {
-        mDrawingState.w = w;
-        mDrawingState.h = h;
-    }
 }
 void LayerBase::forceVisibilityTransaction() {
     // this can be called without SurfaceFlinger.mStateLock, but if we
@@ -144,10 +134,10 @@
     return true;
 }
 bool LayerBase::setSize(uint32_t w, uint32_t h) {
-    if (mCurrentState.w == w && mCurrentState.h == h)
+    if (mCurrentState.requested_w == w && mCurrentState.requested_h == h)
         return false;
-    mCurrentState.w = w;
-    mCurrentState.h = h;
+    mCurrentState.requested_w = w;
+    mCurrentState.requested_h = h;
     requestTransaction();
     return true;
 }
@@ -204,13 +194,25 @@
     const Layer::State& front(drawingState());
     const Layer::State& temp(currentState());
 
-    if (temp.sequence != front.sequence) {
+    if ((front.requested_w != temp.requested_w) ||
+        (front.requested_h != temp.requested_h))  {
+        // resize the layer, set the physical size to the requested size
+        Layer::State& editTemp(currentState());
+        editTemp.w = temp.requested_w;
+        editTemp.h = temp.requested_h;
+    }
+
+    if ((front.w != temp.w) || (front.h != temp.h)) {
         // invalidate and recompute the visible regions if needed
-        flags |= eVisibleRegion;
+        flags |= Layer::eVisibleRegion;
         this->contentDirty = true;
     }
 
     if (temp.sequence != front.sequence) {
+        // invalidate and recompute the visible regions if needed
+        flags |= eVisibleRegion;
+        this->contentDirty = true;
+
         const bool linearFiltering = mUseLinearFiltering;
         mUseLinearFiltering = false;
         if (!(mFlags & DisplayHardware::SLOW_CONFIG)) {
@@ -223,7 +225,7 @@
     }
 
     // Commit the transaction
-    commitTransaction(flags & eRestartTransaction);
+    commitTransaction();
     return flags;
 }
 
diff --git a/libs/surfaceflinger/LayerBase.h b/libs/surfaceflinger/LayerBase.h
index 233737d..16ee542 100644
--- a/libs/surfaceflinger/LayerBase.h
+++ b/libs/surfaceflinger/LayerBase.h
@@ -88,6 +88,8 @@
             struct State {
                 uint32_t        w;
                 uint32_t        h;
+                uint32_t        requested_w;
+                uint32_t        requested_h;
                 uint32_t        z;
                 uint8_t         alpha;
                 uint8_t         flags;
@@ -107,7 +109,7 @@
             bool setTransparentRegionHint(const Region& opaque);
             bool setFlags(uint8_t flags, uint8_t mask);
             
-            void commitTransaction(bool skipSize);
+            void commitTransaction();
             bool requestTransaction();
             void forceVisibilityTransaction();
             
@@ -211,7 +213,6 @@
     
     enum { // flags for doTransaction()
         eVisibleRegion      = 0x00000002,
-        eRestartTransaction = 0x00000008
     };
 
 
diff --git a/libs/surfaceflinger/SurfaceFlinger.cpp b/libs/surfaceflinger/SurfaceFlinger.cpp
index 4ee176c..eb0983a 100644
--- a/libs/surfaceflinger/SurfaceFlinger.cpp
+++ b/libs/surfaceflinger/SurfaceFlinger.cpp
@@ -594,12 +594,6 @@
             const uint32_t flags = layer->doTransaction(0);
             if (flags & Layer::eVisibleRegion)
                 mVisibleRegionsDirty = true;
-
-            if (flags & Layer::eRestartTransaction) {
-                // restart the transaction, but back-off a little
-                layer->setTransactionFlags(eTransactionNeeded);
-                setTransactionFlags(eTraversalNeeded, ms2ns(8));
-            }
         }
     }
 
@@ -1131,7 +1125,14 @@
         // take effect before returning.
         Mutex::Autolock _l(mStateLock);
         while (mResizeTransationPending) {
-            mTransactionCV.wait(mStateLock);
+            status_t err = mTransactionCV.waitRelative(mStateLock, s2ns(5));
+            if (CC_UNLIKELY(err != NO_ERROR)) {
+                // just in case something goes wrong in SF, return to the
+                // called after a few seconds.
+                LOGW_IF(err == TIMED_OUT, "closeGlobalTransaction timed out!");
+                mResizeTransationPending = false;
+                break;
+            }
         }
     }
 }
diff --git a/libs/utils/BackupData.cpp b/libs/utils/BackupData.cpp
index 2535094..adb3174 100644
--- a/libs/utils/BackupData.cpp
+++ b/libs/utils/BackupData.cpp
@@ -107,7 +107,7 @@
     } else {
         k = key;
     }
-    if (true) {
+    if (false) {
         LOGD("Writing entity: prefix='%s' key='%s' dataSize=%d", m_keyPrefix.string(), key.string(),
                 dataSize);
     }
diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java
index d6463a1..bb16215a 100644
--- a/media/java/android/media/AudioManager.java
+++ b/media/java/android/media/AudioManager.java
@@ -725,7 +725,7 @@
      *         false if otherwise
      */
     public boolean isBluetoothA2dpOn() {
-        if (AudioSystem.getDeviceConnectionState(AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP,"") 
+        if (AudioSystem.getDeviceConnectionState(AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP,"")
             == AudioSystem.DEVICE_STATE_UNAVAILABLE) {
             return false;
         } else {
@@ -750,7 +750,7 @@
      *         false if otherwise
      */
     public boolean isWiredHeadsetOn() {
-        if (AudioSystem.getDeviceConnectionState(AudioSystem.DEVICE_OUT_WIRED_HEADSET,"") 
+        if (AudioSystem.getDeviceConnectionState(AudioSystem.DEVICE_OUT_WIRED_HEADSET,"")
                 == AudioSystem.DEVICE_STATE_UNAVAILABLE) {
             return false;
         } else {
@@ -1063,7 +1063,9 @@
      *            {@link #FX_KEYPRESS_SPACEBAR},
      *            {@link #FX_KEYPRESS_DELETE},
      *            {@link #FX_KEYPRESS_RETURN},
-     * @param volume Sound effect volume
+     * @param volume Sound effect volume.
+     * The volume value is a raw scalar so UI controls should be scaled logarithmically.
+     * If a volume of -1 is specified, the AudioManager.STREAM_MUSIC stream volume minus 3dB will be used.
      * NOTE: This version is for applications that have their own
      * settings panel for enabling and controlling volume.
      */
diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java
index 307cf22..d90871e 100644
--- a/media/java/android/media/AudioService.java
+++ b/media/java/android/media/AudioService.java
@@ -178,12 +178,14 @@
                 if (mMediaServerOk) {
                     sendMsg(mAudioHandler, MSG_MEDIA_SERVER_DIED, SHARED_MSG, SENDMSG_NOOP, 0, 0,
                             null, 1500);
+                    mMediaServerOk = false;
                 }
                 break;
             case AudioSystem.AUDIO_STATUS_OK:
                 if (!mMediaServerOk) {
                     sendMsg(mAudioHandler, MSG_MEDIA_SERVER_STARTED, SHARED_MSG, SENDMSG_NOOP, 0, 0,
                             null, 0);
+                    mMediaServerOk = true;
                 }
                 break;
             default:
@@ -619,11 +621,12 @@
     /** @see AudioManager#playSoundEffect(int) */
     public void playSoundEffect(int effectType) {
         sendMsg(mAudioHandler, MSG_PLAY_SOUND_EFFECT, SHARED_MSG, SENDMSG_NOOP,
-                effectType, SOUND_EFFECT_VOLUME, null, 0);
+                effectType, -1, null, 0);
     }
 
     /** @see AudioManager#playSoundEffect(int, float) */
     public void playSoundEffectVolume(int effectType, float volume) {
+        loadSoundEffects();
         sendMsg(mAudioHandler, MSG_PLAY_SOUND_EFFECT, SHARED_MSG, SENDMSG_NOOP,
                 effectType, (int) (volume * 1000), null, 0);
     }
@@ -634,6 +637,9 @@
      */
     public boolean loadSoundEffects() {
         synchronized (mSoundEffectsLock) {
+            if (mSoundPool != null) {
+                return true;
+            }
             mSoundPool = new SoundPool(NUM_SOUNDPOOL_CHANNELS, AudioSystem.STREAM_SYSTEM, 0);
             if (mSoundPool == null) {
                 return false;
@@ -1197,10 +1203,20 @@
                 if (mSoundPool == null) {
                     return;
                 }
+                float volFloat;
+                // use STREAM_MUSIC volume attenuated by 3 dB if volume is not specified by caller
+                if (volume < 0) {
+                    // Same linear to log conversion as in native AudioSystem::linearToLog() (AudioSystem.cpp)
+                    float dBPerStep = (float)((0.5 * 100) / MAX_STREAM_VOLUME[AudioSystem.STREAM_MUSIC]);
+                    int musicVolIndex = (mStreamStates[AudioSystem.STREAM_MUSIC].mIndex + 5) / 10;
+                    float musicVoldB = dBPerStep * (musicVolIndex - MAX_STREAM_VOLUME[AudioSystem.STREAM_MUSIC]);
+                    volFloat = (float)Math.pow(10, (musicVoldB - 3)/20);
+                } else {
+                    volFloat = (float) volume / 1000.0f;
+                }
 
                 if (SOUND_EFFECT_FILES_MAP[effectType][1] > 0) {
-                    float v = (float) volume / 1000.0f;
-                    mSoundPool.play(SOUND_EFFECT_FILES_MAP[effectType][1], v, v, 0, 0, 1.0f);
+                    mSoundPool.play(SOUND_EFFECT_FILES_MAP[effectType][1], volFloat, volFloat, 0, 0, 1.0f);
                 } else {
                     MediaPlayer mediaPlayer = new MediaPlayer();
                     if (mediaPlayer != null) {
@@ -1209,6 +1225,7 @@
                             mediaPlayer.setDataSource(filePath);
                             mediaPlayer.setAudioStreamType(AudioSystem.STREAM_SYSTEM);
                             mediaPlayer.prepare();
+                            mediaPlayer.setVolume(volFloat, volFloat);
                             mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
                                 public void onCompletion(MediaPlayer mp) {
                                     cleanupPlayer(mp);
@@ -1267,10 +1284,13 @@
                     break;
 
                 case MSG_MEDIA_SERVER_DIED:
-                    Log.e(TAG, "Media server died.");
                     // Force creation of new IAudioflinger interface
-                    mMediaServerOk = false;
-                    AudioSystem.isMusicActive();
+                    if (!mMediaServerOk) {
+                        Log.e(TAG, "Media server died.");
+                        AudioSystem.isMusicActive();
+                        sendMsg(mAudioHandler, MSG_MEDIA_SERVER_DIED, SHARED_MSG, SENDMSG_NOOP, 0, 0,
+                                null, 500);
+                    }
                     break;
 
                 case MSG_MEDIA_SERVER_STARTED:
@@ -1308,8 +1328,6 @@
 
                     // Restore ringer mode
                     setRingerModeInt(getRingerMode(), false);
-
-                    mMediaServerOk = true;
                     break;
 
                 case MSG_PLAY_SOUND_EFFECT:
diff --git a/media/java/android/media/ExifInterface.java b/media/java/android/media/ExifInterface.java
index 29409ab..6cd4b92 100644
--- a/media/java/android/media/ExifInterface.java
+++ b/media/java/android/media/ExifInterface.java
@@ -92,7 +92,7 @@
     /**
      * Returns the integer value of the specified tag. If there is no such tag
      * in the JPEG file or the value cannot be parsed as integer, return
-     * @{code defaultValue}.
+     * <var>defaultValue</var>.
      *
      * @param tag the name of the tag.
      * @param defaultValue the value to return if the tag is not available.
diff --git a/media/java/android/media/MiniThumbFile.java b/media/java/android/media/MiniThumbFile.java
index def0288..f6e6317 100644
--- a/media/java/android/media/MiniThumbFile.java
+++ b/media/java/android/media/MiniThumbFile.java
@@ -25,6 +25,7 @@
 import java.io.File;
 import java.io.IOException;
 import java.io.RandomAccessFile;
+import java.nio.ByteBuffer;
 import java.nio.channels.FileChannel;
 import java.nio.channels.FileLock;
 import java.util.Hashtable;
@@ -44,12 +45,6 @@
  *       only.
  */
 public class MiniThumbFile {
-    public static final int THUMBNAIL_TARGET_SIZE = 320;
-    public static final int MINI_THUMB_TARGET_SIZE = 96;
-    public static final int THUMBNAIL_MAX_NUM_PIXELS = 512 * 384;
-    public static final int MINI_THUMB_MAX_NUM_PIXELS = 128 * 128;
-    public static final int UNCONSTRAINED = -1;
-
     private static final String TAG = "MiniThumbFile";
     private static final int MINI_THUMB_DATA_FILE_VERSION = 3;
     public static final int BYTES_PER_MINTHUMB = 10000;
@@ -57,6 +52,7 @@
     private Uri mUri;
     private RandomAccessFile mMiniThumbFile;
     private FileChannel mChannel;
+    private ByteBuffer mBuffer;
     private static Hashtable<String, MiniThumbFile> sThumbFiles =
         new Hashtable<String, MiniThumbFile>();
 
@@ -65,6 +61,9 @@
      * we should hashcode of content://media/external/images/media remains the same.
      */
     public static synchronized void reset() {
+        for (MiniThumbFile file : sThumbFiles.values()) {
+            file.deactivate();
+        }
         sThumbFiles.clear();
     }
 
@@ -123,13 +122,16 @@
                     // ignore exception
                 }
             }
-            mChannel = mMiniThumbFile.getChannel();
+            if (mMiniThumbFile != null) {
+                mChannel = mMiniThumbFile.getChannel();
+            }
         }
         return mMiniThumbFile;
     }
 
     public MiniThumbFile(Uri uri) {
         mUri = uri;
+        mBuffer = ByteBuffer.allocateDirect(BYTES_PER_MINTHUMB);
     }
 
     public synchronized void deactivate() {
@@ -145,7 +147,7 @@
 
     // Get the magic number for the specified id in the mini-thumb file.
     // Returns 0 if the magic is not available.
-    public long getMagic(long id) {
+    public synchronized long getMagic(long id) {
         // check the mini thumb file for the right data.  Right is
         // defined as having the right magic number at the offset
         // reserved for this "id".
@@ -154,14 +156,16 @@
             long pos = id * BYTES_PER_MINTHUMB;
             FileLock lock = null;
             try {
-                lock = mChannel.lock();
+                mBuffer.clear();
+                mBuffer.limit(1 + 8);
+
+                lock = mChannel.lock(pos, 1 + 8, true);
                 // check that we can read the following 9 bytes
                 // (1 for the "status" and 8 for the long)
-                if (r.length() >= pos + 1 + 8) {
-                    r.seek(pos);
-                    if (r.readByte() == 1) {
-                        long fileMagic = r.readLong();
-                        return fileMagic;
+                if (mChannel.read(mBuffer, pos) == 9) {
+                    mBuffer.position(0);
+                    if (mBuffer.get() == 1) {
+                        return mBuffer.getLong();
                     }
                 }
             } catch (IOException ex) {
@@ -182,13 +186,7 @@
         return 0;
     }
 
-    public void saveMiniThumbToFile(Bitmap bitmap, long id, long magic)
-            throws IOException {
-        byte[] data = ThumbnailUtil.miniThumbData(bitmap);
-        saveMiniThumbToFile(data, id, magic);
-    }
-
-    public void saveMiniThumbToFile(byte[] data, long id, long magic)
+    public synchronized void saveMiniThumbToFile(byte[] data, long id, long magic)
             throws IOException {
         RandomAccessFile r = miniThumbDataFile();
         if (r == null) return;
@@ -196,25 +194,20 @@
         long pos = id * BYTES_PER_MINTHUMB;
         FileLock lock = null;
         try {
-            lock = mChannel.lock();
             if (data != null) {
                 if (data.length > BYTES_PER_MINTHUMB - HEADER_SIZE) {
                     // not enough space to store it.
                     return;
                 }
-                r.seek(pos);
-                r.writeByte(0);     // we have no data in this slot
+                mBuffer.clear();
+                mBuffer.put((byte) 1);
+                mBuffer.putLong(magic);
+                mBuffer.putInt(data.length);
+                mBuffer.put(data);
+                mBuffer.flip();
 
-                // if magic is 0 then leave it alone
-                if (magic == 0) {
-                    r.skipBytes(8);
-                } else {
-                    r.writeLong(magic);
-                }
-                r.writeInt(data.length);
-                r.write(data);
-                r.seek(pos);
-                r.writeByte(1);  // we have data in this slot
+                lock = mChannel.lock(pos, BYTES_PER_MINTHUMB, false);
+                mChannel.write(mBuffer, pos);
             }
         } catch (IOException ex) {
             Log.e(TAG, "couldn't save mini thumbnail data for "
@@ -241,27 +234,29 @@
      * @param id the ID of the image (same of full size image).
      * @param data the buffer to store mini-thumbnail.
      */
-    public byte [] getMiniThumbFromFile(long id, byte [] data) {
+    public synchronized byte [] getMiniThumbFromFile(long id, byte [] data) {
         RandomAccessFile r = miniThumbDataFile();
         if (r == null) return null;
 
         long pos = id * BYTES_PER_MINTHUMB;
         FileLock lock = null;
         try {
-            lock = mChannel.lock();
-            r.seek(pos);
-            if (r.readByte() == 1) {
-                long magic = r.readLong();
-                int length = r.readInt();
-                int got = r.read(data, 0, length);
-                if (got != length) return null;
-                return data;
-            } else {
-                return null;
+            mBuffer.clear();
+            lock = mChannel.lock(pos, BYTES_PER_MINTHUMB, true);
+            int size = mChannel.read(mBuffer, pos);
+            if (size > 1 + 8 + 4) { // flag, magic, length
+                mBuffer.position(0);
+                byte flag = mBuffer.get();
+                long magic = mBuffer.getLong();
+                int length = mBuffer.getInt();
+
+                if (size >= 1 + 8 + 4 + length && data.length >= length) {
+                    mBuffer.get(data, 0, length);
+                    return data;
+                }
             }
         } catch (IOException ex) {
-            Log.w(TAG, "got exception when reading thumbnail: " + ex);
-            return null;
+            Log.w(TAG, "got exception when reading thumbnail id=" + id + ", exception: " + ex);
         } catch (RuntimeException ex) {
             // Other NIO related exception like disk full, read only channel..etc
             Log.e(TAG, "Got exception when reading thumbnail, id = " + id +
diff --git a/media/java/android/media/ThumbnailUtil.java b/media/java/android/media/ThumbnailUtil.java
index eeee266..f9d69fb 100644
--- a/media/java/android/media/ThumbnailUtil.java
+++ b/media/java/android/media/ThumbnailUtil.java
@@ -18,9 +18,15 @@
 
 import android.net.Uri;
 import android.os.ParcelFileDescriptor;
+import android.provider.BaseColumns;
+import android.provider.MediaStore.Images;
+import android.provider.MediaStore.Images.Thumbnails;
 import android.util.Log;
 
 import android.content.ContentResolver;
+import android.content.ContentUris;
+import android.content.ContentValues;
+import android.database.Cursor;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.graphics.Canvas;
@@ -250,32 +256,6 @@
     }
 
     /**
-     * Creates a byte[] for a given bitmap of the desired size. Recycles the
-     * input bitmap.
-     */
-    public static byte[] miniThumbData(Bitmap source) {
-        if (source == null) return null;
-
-        Bitmap miniThumbnail = extractMiniThumb(
-                source, MINI_THUMB_TARGET_SIZE,
-                MINI_THUMB_TARGET_SIZE,
-                RECYCLE_INPUT);
-
-        ByteArrayOutputStream miniOutStream = new ByteArrayOutputStream();
-        miniThumbnail.compress(Bitmap.CompressFormat.JPEG, 75, miniOutStream);
-        miniThumbnail.recycle();
-
-        try {
-            miniOutStream.close();
-            byte [] data = miniOutStream.toByteArray();
-            return data;
-        } catch (java.io.IOException ex) {
-            Log.e(TAG, "got exception ex " + ex);
-        }
-        return null;
-    }
-
-    /**
      * Create a video thumbnail for a video. May return null if the video is
      * corrupt.
      *
@@ -302,6 +282,67 @@
         return bitmap;
     }
 
+    /**
+     * This method first examines if the thumbnail embedded in EXIF is bigger than our target
+     * size. If not, then it'll create a thumbnail from original image. Due to efficiency
+     * consideration, we want to let MediaThumbRequest avoid calling this method twice for
+     * both kinds, so it only requests for MICRO_KIND and set saveImage to true.
+     *
+     * This method always returns a "square thumbnail" for MICRO_KIND thumbnail.
+     *
+     * @param cr ContentResolver
+     * @param filePath file path needed by EXIF interface
+     * @param uri URI of original image
+     * @param origId image id
+     * @param kind either MINI_KIND or MICRO_KIND
+     * @param saveImage Whether to save MINI_KIND thumbnail obtained in this method.
+     * @return Bitmap
+     */
+    public static Bitmap createImageThumbnail(ContentResolver cr, String filePath, Uri uri,
+            long origId, int kind, boolean saveMini) {
+        boolean wantMini = (kind == Images.Thumbnails.MINI_KIND || saveMini);
+        int targetSize = wantMini ?
+                ThumbnailUtil.THUMBNAIL_TARGET_SIZE : ThumbnailUtil.MINI_THUMB_TARGET_SIZE;
+        int maxPixels = wantMini ?
+                ThumbnailUtil.THUMBNAIL_MAX_NUM_PIXELS : ThumbnailUtil.MINI_THUMB_MAX_NUM_PIXELS;
+        byte[] thumbData = createThumbnailFromEXIF(filePath, targetSize);
+        Bitmap bitmap = null;
+
+        if (thumbData != null) {
+            BitmapFactory.Options options = new BitmapFactory.Options();
+            options.inSampleSize = computeSampleSize(options, targetSize, maxPixels);
+            options.inDither = false;
+            options.inPreferredConfig = Bitmap.Config.ARGB_8888;
+            options.inJustDecodeBounds = false;
+            bitmap = BitmapFactory.decodeByteArray(thumbData, 0, thumbData.length, options);
+        }
+
+        if (bitmap == null) {
+            bitmap = ThumbnailUtil.makeBitmap(targetSize, maxPixels, uri, cr);
+        }
+
+        if (bitmap == null) {
+            return null;
+        }
+
+        if (saveMini) {
+            if (thumbData != null) {
+                ThumbnailUtil.storeThumbnail(cr, origId, thumbData, bitmap.getWidth(),
+                        bitmap.getHeight());
+            } else {
+                ThumbnailUtil.storeThumbnail(cr, origId, bitmap);
+            }
+        }
+
+        if (kind == Images.Thumbnails.MICRO_KIND) {
+            // now we make it a "square thumbnail" for MICRO_KIND thumbnail
+            bitmap = ThumbnailUtil.extractMiniThumb(bitmap,
+                    ThumbnailUtil.MINI_THUMB_TARGET_SIZE,
+                    ThumbnailUtil.MINI_THUMB_TARGET_SIZE, ThumbnailUtil.RECYCLE_INPUT);
+        }
+        return bitmap;
+    }
+
     public static Bitmap transform(Matrix scaler,
             Bitmap source,
             int targetWidth,
@@ -396,6 +437,108 @@
         return b2;
     }
 
+    private static final String[] THUMB_PROJECTION = new String[] {
+        BaseColumns._ID // 0
+    };
 
+    /**
+     * Look up thumbnail uri by given imageId, it will be automatically created if it's not created
+     * yet. Most of the time imageId is identical to thumbId, but it's not always true.
+     * @param req
+     * @param width
+     * @param height
+     * @return Uri Thumbnail uri
+     */
+    private static Uri getImageThumbnailUri(ContentResolver cr, long origId, int width, int height) {
+        Uri thumbUri = Images.Thumbnails.EXTERNAL_CONTENT_URI;
+        Cursor c = cr.query(thumbUri, THUMB_PROJECTION,
+              Thumbnails.IMAGE_ID + "=?",
+              new String[]{String.valueOf(origId)}, null);
+        try {
+            if (c.moveToNext()) {
+                return ContentUris.withAppendedId(thumbUri, c.getLong(0));
+            }
+        } finally {
+            if (c != null) c.close();
+        }
 
+        ContentValues values = new ContentValues(4);
+        values.put(Thumbnails.KIND, Thumbnails.MINI_KIND);
+        values.put(Thumbnails.IMAGE_ID, origId);
+        values.put(Thumbnails.HEIGHT, height);
+        values.put(Thumbnails.WIDTH, width);
+        try {
+            return cr.insert(thumbUri, values);
+        } catch (Exception ex) {
+            Log.w(TAG, ex);
+            return null;
+        }
+    }
+
+    /**
+     * Store a given thumbnail in the database. (Bitmap)
+     */
+    private static boolean storeThumbnail(ContentResolver cr, long origId, Bitmap thumb) {
+        if (thumb == null) return false;
+        try {
+            Uri uri = getImageThumbnailUri(cr, origId, thumb.getWidth(), thumb.getHeight());
+            OutputStream thumbOut = cr.openOutputStream(uri);
+            thumb.compress(Bitmap.CompressFormat.JPEG, 85, thumbOut);
+            thumbOut.close();
+            return true;
+        } catch (Throwable t) {
+            Log.e(TAG, "Unable to store thumbnail", t);
+            return false;
+        }
+    }
+
+    /**
+     * Store a given thumbnail in the database. (byte array)
+     */
+    private static boolean storeThumbnail(ContentResolver cr, long origId, byte[] jpegThumbnail,
+            int width, int height) {
+        if (jpegThumbnail == null) return false;
+
+        Uri uri = getImageThumbnailUri(cr, origId, width, height);
+        if (uri == null) {
+            return false;
+        }
+        try {
+            OutputStream thumbOut = cr.openOutputStream(uri);
+            thumbOut.write(jpegThumbnail);
+            thumbOut.close();
+            return true;
+        } catch (Throwable t) {
+            Log.e(TAG, "Unable to store thumbnail", t);
+            return false;
+        }
+    }
+
+    // Extract thumbnail in image that meets the targetSize criteria.
+    static byte[] createThumbnailFromEXIF(String filePath, int targetSize) {
+        if (filePath == null) return null;
+
+        try {
+            ExifInterface exif = new ExifInterface(filePath);
+            if (exif == null) return null;
+            byte [] thumbData = exif.getThumbnail();
+            if (thumbData == null) return null;
+            // Sniff the size of the EXIF thumbnail before decoding it. Photos
+            // from the device will pass, but images that are side loaded from
+            // other cameras may not.
+            BitmapFactory.Options options = new BitmapFactory.Options();
+            options.inJustDecodeBounds = true;
+            BitmapFactory.decodeByteArray(thumbData, 0, thumbData.length, options);
+
+            int width = options.outWidth;
+            int height = options.outHeight;
+
+            if (width >= targetSize && height >= targetSize) {
+                return thumbData;
+            }
+        } catch (IOException ex) {
+            Log.w(TAG, ex);
+        }
+        return null;
+    }
 }
diff --git a/media/libmediaplayerservice/MediaPlayerService.cpp b/media/libmediaplayerservice/MediaPlayerService.cpp
index 8b1c9dc..a11477a 100644
--- a/media/libmediaplayerservice/MediaPlayerService.cpp
+++ b/media/libmediaplayerservice/MediaPlayerService.cpp
@@ -201,7 +201,7 @@
 };
 
 // TODO: Find real cause of Audio/Video delay in PV framework and remove this workaround
-/* static */ const uint32_t MediaPlayerService::AudioOutput::kAudioVideoDelayMs = 96;
+/* static */ const uint32_t MediaPlayerService::AudioOutput::kAudioVideoDelayMs = 0;
 /* static */ int MediaPlayerService::AudioOutput::mMinBufferCount = 4;
 /* static */ bool MediaPlayerService::AudioOutput::mIsOnEmulator = false;
 
diff --git a/media/libmediaplayerservice/MetadataRetrieverClient.cpp b/media/libmediaplayerservice/MetadataRetrieverClient.cpp
index b34421d..ddd4e24 100644
--- a/media/libmediaplayerservice/MetadataRetrieverClient.cpp
+++ b/media/libmediaplayerservice/MetadataRetrieverClient.cpp
@@ -51,15 +51,8 @@
     mAlbumArtDealer = NULL;
     mThumbnail = NULL;
     mAlbumArt = NULL;
-
-#ifndef NO_OPENCORE
-    mRetriever = new PVMetadataRetriever();
-#else
     mRetriever = NULL;
-#endif
-    if (mRetriever == NULL) {
-        LOGE("failed to initialize the retriever");
-    }
+    mMode = METADATA_MODE_FRAME_CAPTURE_AND_METADATA_RETRIEVAL;
 }
 
 MetadataRetrieverClient::~MetadataRetrieverClient()
@@ -74,7 +67,7 @@
     char buffer[SIZE];
     String8 result;
     result.append(" MetadataRetrieverClient\n");
-    snprintf(buffer, 255, "  pid(%d)\n", mPid);
+    snprintf(buffer, 255, "  pid(%d) mode(%d)\n", mPid, mMode);
     result.append(buffer);
     write(fd, result.string(), result.size());
     write(fd, "\n", 1);
@@ -90,6 +83,7 @@
     mAlbumArtDealer.clear();
     mThumbnail.clear();
     mAlbumArt.clear();
+    mMode = METADATA_MODE_FRAME_CAPTURE_AND_METADATA_RETRIEVAL;
     IPCThreadState::self()->flushCommands();
 }
 
@@ -134,7 +128,10 @@
     LOGV("player type = %d", playerType);
     sp<MediaMetadataRetrieverBase> p = createRetriever(playerType);
     if (p == NULL) return NO_INIT;
-    status_t ret = p->setDataSource(url);
+    status_t ret = p->setMode(mMode);
+    if (ret == NO_ERROR) {
+        ret = p->setDataSource(url);
+    }
     if (ret == NO_ERROR) mRetriever = p;
     return ret;
 }
@@ -143,12 +140,6 @@
 {
     LOGV("setDataSource fd=%d, offset=%lld, length=%lld", fd, offset, length);
     Mutex::Autolock lock(mLock);
-    if (mRetriever == NULL) {
-        LOGE("retriever is not initialized");
-        ::close(fd);
-        return NO_INIT;
-    }
-
     struct stat sb;
     int ret = fstat(fd, &sb);
     if (ret != 0) {
@@ -178,7 +169,10 @@
         ::close(fd);
         return NO_INIT;
     }
-    status_t status = p->setDataSource(fd, offset, length);
+    status_t status = p->setMode(mMode);
+    if (status == NO_ERROR) {
+        p->setDataSource(fd, offset, length);
+    }
     if (status == NO_ERROR) mRetriever = p;
     ::close(fd);
     return status;
@@ -188,22 +182,30 @@
 {
     LOGV("setMode");
     Mutex::Autolock lock(mLock);
-    if (mRetriever == NULL) {
-        LOGE("retriever is not initialized");
-        return NO_INIT;
+    if (mode < METADATA_MODE_NOOP ||
+        mode > METADATA_MODE_FRAME_CAPTURE_AND_METADATA_RETRIEVAL) {
+        LOGE("invalid mode %d", mode);
+        return BAD_VALUE;
     }
-    return mRetriever->setMode(mode);
+    mMode = mode;
+    return NO_ERROR;
 }
 
 status_t MetadataRetrieverClient::getMode(int* mode) const
 {
     LOGV("getMode");
     Mutex::Autolock lock(mLock);
+
+    // TODO:
+    // This may not be necessary.
+    // If setDataSource() has not been called, return the cached value
+    // otherwise, return the value retrieved from the retriever
     if (mRetriever == NULL) {
-        LOGE("retriever is not initialized");
-        return NO_INIT;
+        *mode = mMode;
+    } else {
+        mRetriever->getMode(mode);
     }
-    return mRetriever->getMode(mode);
+    return NO_ERROR;
 }
 
 sp<IMemory> MetadataRetrieverClient::captureFrame()
diff --git a/media/libmediaplayerservice/MetadataRetrieverClient.h b/media/libmediaplayerservice/MetadataRetrieverClient.h
index 88d50bf..8cb8ad1 100644
--- a/media/libmediaplayerservice/MetadataRetrieverClient.h
+++ b/media/libmediaplayerservice/MetadataRetrieverClient.h
@@ -60,6 +60,7 @@
     mutable Mutex                          mLock;
     sp<MediaMetadataRetrieverBase>         mRetriever;
     pid_t                                  mPid;
+    int                                    mMode;
 
     // Keep the shared memory copy of album art and capture frame (for thumbnail)
     sp<MemoryDealer>                       mAlbumArtDealer;
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/stress/MediaPlayerStressTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/stress/MediaPlayerStressTest.java
index 3667fae..90d6ffa 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/stress/MediaPlayerStressTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/stress/MediaPlayerStressTest.java
@@ -40,7 +40,7 @@
 
     private static final int NUMBER_OF_RANDOM_REPOSITION_AND_PLAY = 10;
     private static final int NUMBER_OF_RANDOM_REPOSITION_AND_PLAY_SHORT = 5;
-    private static final int NUMBER_OF_STRESS_LOOPS = 1000;
+    private static final int NUMBER_OF_STRESS_LOOPS = 500;
     private static final int PLAYBACK_END_TOLERANCE = 5000;
     private static final int WAIT_UNTIL_PLAYBACK_FINISH = 515000 ;
 
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/stress/MediaRecorderStressTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/stress/MediaRecorderStressTest.java
index 10796f1..b6a1bfa 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/stress/MediaRecorderStressTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/stress/MediaRecorderStressTest.java
@@ -49,9 +49,9 @@
     private static final int NUMBER_OF_RECORDERANDPLAY_STRESS_LOOPS = 50;
     private static final int NUMBER_OF_SWTICHING_LOOPS_BW_CAMERA_AND_RECORDER = 200;
     private static final long WAIT_TIME_CAMERA_TEST = 3000;  // 3 second
-    private static final long WAIT_TIME_RECORDER_TEST = 60000;  // 6 second
-    private static final long WAIT_TIME_RECORD = 100000;  // 10 seconds
-    private static final long WAIT_TIME_PLAYBACK = 60000;  // 6 second
+    private static final long WAIT_TIME_RECORDER_TEST = 6000;  // 6 second
+    private static final long WAIT_TIME_RECORD = 10000;  // 10 seconds
+    private static final long WAIT_TIME_PLAYBACK = 6000;  // 6 second
     private static final String OUTPUT_FILE = "/sdcard/temp";
     private static final String OUTPUT_FILE_EXT = ".3gp";
     private static final String MEDIA_STRESS_OUTPUT =
diff --git a/opengl/tests/gl2_basic/gl2_basic.cpp b/opengl/tests/gl2_basic/gl2_basic.cpp
index d1090e6..2361db5 100644
--- a/opengl/tests/gl2_basic/gl2_basic.cpp
+++ b/opengl/tests/gl2_basic/gl2_basic.cpp
@@ -175,24 +175,58 @@
     checkGlError("glDrawArrays");
 }
 
-#if 0
+void printEGLConfiguration(EGLDisplay dpy, EGLConfig config) {
 
-void PrintEGLConfig(EGLDisplay dpy, EGLConfig config) {
-    int attrib[] = {EGL_RED_SIZE, EGL_GREEN_SIZE, EGL_BLUE_SIZE, EGL_ALPHA_SIZE,
-            EGL_DEPTH_SIZE, EGL_SURFACE_TYPE, EGL_RENDERABLE_TYPE
-    };
-    for(size_t i = 0; i < sizeof(attrib)/sizeof(attrib[0]); i++) {
-        int value = 0;
-        int a = attrib[i];
-        if (eglGetConfigAttrib(dpy, config, a, &value)) {
-            printf(" 0x%04x: %d", a, value);
+#define X(VAL) {VAL, #VAL}
+    struct {EGLint attribute; const char* name;} names[] = {
+    X(EGL_BUFFER_SIZE),
+    X(EGL_ALPHA_SIZE),
+    X(EGL_BLUE_SIZE),
+    X(EGL_GREEN_SIZE),
+    X(EGL_RED_SIZE),
+    X(EGL_DEPTH_SIZE),
+    X(EGL_STENCIL_SIZE),
+    X(EGL_CONFIG_CAVEAT),
+    X(EGL_CONFIG_ID),
+    X(EGL_LEVEL),
+    X(EGL_MAX_PBUFFER_HEIGHT),
+    X(EGL_MAX_PBUFFER_PIXELS),
+    X(EGL_MAX_PBUFFER_WIDTH),
+    X(EGL_NATIVE_RENDERABLE),
+    X(EGL_NATIVE_VISUAL_ID),
+    X(EGL_NATIVE_VISUAL_TYPE),
+    X(EGL_PRESERVED_RESOURCES),
+    X(EGL_SAMPLES),
+    X(EGL_SAMPLE_BUFFERS),
+    X(EGL_SURFACE_TYPE),
+    X(EGL_TRANSPARENT_TYPE),
+    X(EGL_TRANSPARENT_RED_VALUE),
+    X(EGL_TRANSPARENT_GREEN_VALUE),
+    X(EGL_TRANSPARENT_BLUE_VALUE),
+    X(EGL_BIND_TO_TEXTURE_RGB),
+    X(EGL_BIND_TO_TEXTURE_RGBA),
+    X(EGL_MIN_SWAP_INTERVAL),
+    X(EGL_MAX_SWAP_INTERVAL),
+    X(EGL_LUMINANCE_SIZE),
+    X(EGL_ALPHA_MASK_SIZE),
+    X(EGL_COLOR_BUFFER_TYPE),
+    X(EGL_RENDERABLE_TYPE),
+    X(EGL_CONFORMANT),
+   };
+#undef X
+
+    for (size_t j = 0; j < sizeof(names) / sizeof(names[0]); j++) {
+        EGLint value = -1;
+        EGLint returnVal = eglGetConfigAttrib(dpy, config, names[j].attribute, &value);
+        EGLint error = eglGetError();
+        if (returnVal && error == EGL_SUCCESS) {
+            printf(" %s: ", names[j].name);
+            printf("%d (0x%x)", value, value);
         }
     }
     printf("\n");
 }
 
-#endif
-
 int printEGLConfigurations(EGLDisplay dpy) {
     EGLint numConfig = 0;
     EGLint returnVal = eglGetConfigs(dpy, NULL, 0, &numConfig);
@@ -209,53 +243,16 @@
         return false;
     }
 
-    returnVal = eglGetConfigs(dpy, NULL, 0, &numConfig);
+    returnVal = eglGetConfigs(dpy, configs, numConfig, &numConfig);
     checkEglError("eglGetConfigs", returnVal);
     if (!returnVal) {
         free(configs);
         return false;
     }
 
-#define X(VAL) {VAL, #VAL}
-    struct {EGLint attribute; const char* name;} names[] = {
-    X(EGL_BUFFER_SIZE),
-    X(EGL_RED_SIZE),
-    X(EGL_GREEN_SIZE),
-    X(EGL_BLUE_SIZE),
-    X(EGL_ALPHA_SIZE),
-    X(EGL_CONFIG_CAVEAT),
-    X(EGL_CONFIG_ID),
-    X(EGL_DEPTH_SIZE),
-    X(EGL_LEVEL),
-    X(EGL_MAX_PBUFFER_WIDTH),
-    X(EGL_MAX_PBUFFER_HEIGHT),
-    X(EGL_MAX_PBUFFER_PIXELS),
-    X(EGL_NATIVE_RENDERABLE),
-    X(EGL_NATIVE_VISUAL_ID),
-    X(EGL_NATIVE_VISUAL_TYPE),
-    X(EGL_PRESERVED_RESOURCES),
-    X(EGL_SAMPLE_BUFFERS),
-    X(EGL_SAMPLES),
-    // X(EGL_STENCIL_BITS),
-    X(EGL_SURFACE_TYPE),
-    X(EGL_TRANSPARENT_TYPE),
-    // X(EGL_TRANSPARENT_RED),
-    // X(EGL_TRANSPARENT_GREEN),
-    // X(EGL_TRANSPARENT_BLUE)
-    };
-#undef X
-
     for(int i = 0; i < numConfig; i++) {
         printf("Configuration %d\n", i);
-        EGLConfig config = configs[i];
-        for (int j = 0; j < sizeof(names) / sizeof(names[0]); j++) {
-            EGLint value = -1;
-            returnVal = eglGetConfigAttrib(dpy, config, names[j].attribute, &value); 
-            if (returnVal) {
-                printf(" %s: %d (0x%x)", names[j].name, value, value);
-            }
-        }
-        printf("\n");
+        printEGLConfiguration(dpy, configs[i]);
     }
 
     free(configs);
@@ -268,7 +265,7 @@
 
     EGLint context_attribs[] = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE };
     EGLint s_configAttribs[] = {
-            EGL_SURFACE_TYPE, EGL_PBUFFER_BIT|EGL_WINDOW_BIT,
+            EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
             EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
             EGL_NONE };
     EGLint majorVersion;
@@ -300,6 +297,8 @@
         return 0;
     }
 
+    checkEglError("printEGLConfigurations");
+
     EGLNativeWindowType window = android_createDisplaySurface();

     returnValue = EGLUtils::selectConfigForNativeWindow(dpy, s_configAttribs, window, &myConfig);
     if (returnValue) {
@@ -307,6 +306,11 @@
         return 0;
     }
 
+    checkEglError("EGLUtils::selectConfigForNativeWindow");
+
+    printf("Chose this configuration:\n");
+    printEGLConfiguration(dpy, myConfig);
+
     surface = eglCreateWindowSurface(dpy, myConfig, window, NULL);
     checkEglError("eglCreateWindowSurface");
     if (surface == EGL_NO_SURFACE) {
diff --git a/opengl/tests/gl_basic/Android.mk b/opengl/tests/gl_basic/Android.mk
new file mode 100644
index 0000000..6b6341f
--- /dev/null
+++ b/opengl/tests/gl_basic/Android.mk
@@ -0,0 +1,17 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES:= \
+	gl_basic.cpp
+
+LOCAL_SHARED_LIBRARIES := \
+	libcutils \
+    libEGL \
+    libGLESv1_CM \
+    libui
+
+LOCAL_MODULE:= test-opengl-gl_basic
+
+LOCAL_MODULE_TAGS := optional
+
+include $(BUILD_EXECUTABLE)
diff --git a/opengl/tests/gl_basic/gl_basic.cpp b/opengl/tests/gl_basic/gl_basic.cpp
new file mode 100644
index 0000000..7dc2378
--- /dev/null
+++ b/opengl/tests/gl_basic/gl_basic.cpp
@@ -0,0 +1,357 @@
+// Simple OpenGL ES 1.x application showing how to initialize and draw something.
+
+#include <EGL/egl.h>

+#include <GLES/gl.h>
+#include <GLES/glext.h>
+
+#include <ui/FramebufferNativeWindow.h>
+#include <ui/EGLUtils.h>
+
+#include <stdio.h>

+#include <stdlib.h>
+#include <math.h>
+
+using namespace android;
+

+EGLDisplay eglDisplay;

+EGLSurface eglSurface;

+EGLContext eglContext;

+GLuint texture;

+

+#define FIXED_ONE 0x10000
+#define ITERATIONS 50

+

+int init_gl_surface(void);

+void free_gl_surface(void);

+void init_scene(void);

+void render();

+void create_texture(void);
+int readTimer(void);

+
+static void gluLookAt(float eyeX, float eyeY, float eyeZ,
+        float centerX, float centerY, float centerZ, float upX, float upY,
+        float upZ)
+{
+    // See the OpenGL GLUT documentation for gluLookAt for a description
+    // of the algorithm. We implement it in a straightforward way:
+
+    float fx = centerX - eyeX;
+    float fy = centerY - eyeY;
+    float fz = centerZ - eyeZ;
+
+    // Normalize f
+    float rlf = 1.0f / sqrtf(fx*fx + fy*fy + fz*fz);
+    fx *= rlf;
+    fy *= rlf;
+    fz *= rlf;
+
+    // Normalize up
+    float rlup = 1.0f / sqrtf(upX*upX + upY*upY + upZ*upZ);
+    upX *= rlup;
+    upY *= rlup;
+    upZ *= rlup;
+
+    // compute s = f x up (x means "cross product")
+
+    float sx = fy * upZ - fz * upY;
+    float sy = fz * upX - fx * upZ;
+    float sz = fx * upY - fy * upX;
+
+    // compute u = s x f
+    float ux = sy * fz - sz * fy;
+    float uy = sz * fx - sx * fz;
+    float uz = sx * fy - sy * fx;
+
+    float m[16] ;
+    m[0] = sx;
+    m[1] = ux;
+    m[2] = -fx;
+    m[3] = 0.0f;
+
+    m[4] = sy;
+    m[5] = uy;
+    m[6] = -fy;
+    m[7] = 0.0f;
+
+    m[8] = sz;
+    m[9] = uz;
+    m[10] = -fz;
+    m[11] = 0.0f;
+
+    m[12] = 0.0f;
+    m[13] = 0.0f;
+    m[14] = 0.0f;
+    m[15] = 1.0f;
+
+    glMultMatrixf(m);
+    glTranslatef(-eyeX, -eyeY, -eyeZ);
+}
+
+
+void printEGLConfiguration(EGLDisplay dpy, EGLConfig config) {
+
+#define X(VAL) {VAL, #VAL}
+    struct {EGLint attribute; const char* name;} names[] = {
+    X(EGL_BUFFER_SIZE),
+    X(EGL_ALPHA_SIZE),
+    X(EGL_BLUE_SIZE),
+    X(EGL_GREEN_SIZE),
+    X(EGL_RED_SIZE),
+    X(EGL_DEPTH_SIZE),
+    X(EGL_STENCIL_SIZE),
+    X(EGL_CONFIG_CAVEAT),
+    X(EGL_CONFIG_ID),
+    X(EGL_LEVEL),
+    X(EGL_MAX_PBUFFER_HEIGHT),
+    X(EGL_MAX_PBUFFER_PIXELS),
+    X(EGL_MAX_PBUFFER_WIDTH),
+    X(EGL_NATIVE_RENDERABLE),
+    X(EGL_NATIVE_VISUAL_ID),
+    X(EGL_NATIVE_VISUAL_TYPE),
+    X(EGL_PRESERVED_RESOURCES),
+    X(EGL_SAMPLES),
+    X(EGL_SAMPLE_BUFFERS),
+    X(EGL_SURFACE_TYPE),
+    X(EGL_TRANSPARENT_TYPE),
+    X(EGL_TRANSPARENT_RED_VALUE),
+    X(EGL_TRANSPARENT_GREEN_VALUE),
+    X(EGL_TRANSPARENT_BLUE_VALUE),
+    X(EGL_BIND_TO_TEXTURE_RGB),
+    X(EGL_BIND_TO_TEXTURE_RGBA),
+    X(EGL_MIN_SWAP_INTERVAL),
+    X(EGL_MAX_SWAP_INTERVAL),
+    X(EGL_LUMINANCE_SIZE),
+    X(EGL_ALPHA_MASK_SIZE),
+    X(EGL_COLOR_BUFFER_TYPE),
+    X(EGL_RENDERABLE_TYPE),
+    X(EGL_CONFORMANT),
+   };
+#undef X
+
+    for (size_t j = 0; j < sizeof(names) / sizeof(names[0]); j++) {
+        EGLint value = -1;
+        EGLint returnVal = eglGetConfigAttrib(dpy, config, names[j].attribute, &value);
+        EGLint error = eglGetError();
+        if (returnVal && error == EGL_SUCCESS) {
+            printf(" %s: ", names[j].name);
+            printf("%d (0x%x)", value, value);
+        }
+    }
+    printf("\n");
+}
+
+static void checkEglError(const char* op, EGLBoolean returnVal = EGL_TRUE) {
+    if (returnVal != EGL_TRUE) {
+        fprintf(stderr, "%s() returned %d\n", op, returnVal);
+    }
+
+    for (EGLint error = eglGetError(); error != EGL_SUCCESS; error
+            = eglGetError()) {
+        fprintf(stderr, "after %s() eglError %s (0x%x)\n", op, EGLUtils::strerror(error),
+                error);
+    }
+}
+
+int printEGLConfigurations(EGLDisplay dpy) {
+    EGLint numConfig = 0;
+    EGLint returnVal = eglGetConfigs(dpy, NULL, 0, &numConfig);
+    checkEglError("eglGetConfigs", returnVal);
+    if (!returnVal) {
+        return false;
+    }
+
+    printf("Number of EGL configurations: %d\n", numConfig);
+
+    EGLConfig* configs = (EGLConfig*) malloc(sizeof(EGLConfig) * numConfig);
+    if (! configs) {
+        printf("Could not allocate configs.\n");
+        return false;
+    }
+
+    returnVal = eglGetConfigs(dpy, configs, numConfig, &numConfig);
+    checkEglError("eglGetConfigs", returnVal);
+    if (!returnVal) {
+        free(configs);
+        return false;
+    }
+
+    for(int i = 0; i < numConfig; i++) {
+        printf("Configuration %d\n", i);
+        printEGLConfiguration(dpy, configs[i]);
+    }
+
+    free(configs);
+    return true;
+}
+

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

+{

+    int q;
+    int start, end;

+
+    printf("Initializing EGL...\n");
+

+    if(!init_gl_surface())

+    {

+        printf("GL initialisation failed - exiting\n");

+        return 0;

+    }

+

+    init_scene();

+

+    create_texture();

+

+    printf("Running...\n");
+
+    while(true) {
+        render();
+    }

+

+    free_gl_surface();

+

+    return 0;

+}

+

+int init_gl_surface(void)

+{

+    EGLint numConfigs = 1;

+    EGLConfig myConfig = {0};

+    EGLint attrib[] =

+    {

+            EGL_SURFACE_TYPE, EGL_WINDOW_BIT,

+            EGL_NONE

+    };

+

+    if ( (eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY)) == EGL_NO_DISPLAY )

+    {

+        printf("eglGetDisplay failed\n");

+        return 0;

+    }
+

+    if ( eglInitialize(eglDisplay, NULL, NULL) != EGL_TRUE )

+    {

+        printf("eglInitialize failed\n");

+        return 0;

+    }
+
+    if (! printEGLConfigurations(eglDisplay)) {
+        printf("printEGLConfigurations failed.\n");
+        return 0;
+    }

+    EGLNativeWindowType window = android_createDisplaySurface();

+    EGLUtils::selectConfigForNativeWindow(eglDisplay, attrib, window, &myConfig);

+

+    if ( (eglSurface = eglCreateWindowSurface(eglDisplay, myConfig,
+            window, 0)) == EGL_NO_SURFACE )

+    {

+        printf("eglCreateWindowSurface failed\n");

+        return 0;

+    }

+

+    if ( (eglContext = eglCreateContext(eglDisplay, myConfig, 0, 0)) == EGL_NO_CONTEXT )

+    {

+        printf("eglCreateContext failed\n");

+        return 0;

+    }

+

+    if ( eglMakeCurrent(eglDisplay, eglSurface, eglSurface, eglContext) != EGL_TRUE )

+    {

+        printf("eglMakeCurrent failed\n");

+        return 0;

+    }

+

+    return 1;

+}

+

+void free_gl_surface(void)

+{

+    if (eglDisplay != EGL_NO_DISPLAY)

+    {

+        eglMakeCurrent( EGL_NO_DISPLAY, EGL_NO_SURFACE,

+                EGL_NO_SURFACE, EGL_NO_CONTEXT );

+        eglDestroyContext( eglDisplay, eglContext );

+        eglDestroySurface( eglDisplay, eglSurface );

+        eglTerminate( eglDisplay );

+        eglDisplay = EGL_NO_DISPLAY;

+    }

+}

+

+void init_scene(void)

+{

+    glDisable(GL_DITHER);
+    glEnable(GL_CULL_FACE);
+
+    float ratio = 320.0f / 480.0f;
+    glViewport(0, 0, 320, 480);
+
+    glMatrixMode(GL_PROJECTION);
+    glLoadIdentity();
+    glFrustumf(-ratio, ratio, -1, 1, 1, 10);
+
+    glMatrixMode(GL_MODELVIEW);

+    glLoadIdentity();
+    gluLookAt(
+            0, 0, 3,  // eye
+            0, 0, 0,  // center
+            0, 1, 0); // up
+

+    glEnable(GL_TEXTURE_2D);

+    glEnableClientState(GL_VERTEX_ARRAY);

+    glEnableClientState(GL_TEXTURE_COORD_ARRAY);
+}

+

+void create_texture(void)

+{

+    const unsigned int on = 0xff0000ff;
+    const unsigned int off = 0xffffffff;
+    const unsigned int pixels[] =
+    {
+            on, off, on, off, on, off, on, off,
+            off, on, off, on, off, on, off, on,
+            on, off, on, off, on, off, on, off,
+            off, on, off, on, off, on, off, on,
+            on, off, on, off, on, off, on, off,
+            off, on, off, on, off, on, off, on,
+            on, off, on, off, on, off, on, off,
+            off, on, off, on, off, on, off, on,
+    };

+    glGenTextures(1, &texture);

+    glBindTexture(GL_TEXTURE_2D, texture);

+    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels);

+    glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

+    glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

+    glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

+}

+

+void render()

+{

+    int i, j;
+    int quads = 1;

+

+    const GLfloat vertices[] = {

+            -1,  -1,  0,

+             1,  -1,  0,

+             1,   1,  0,

+            -1,   1,  0

+    };

+

+    const GLfixed texCoords[] = {

+            0,            0,

+            FIXED_ONE,    0,

+            FIXED_ONE,    FIXED_ONE,

+            0,            FIXED_ONE

+    };

+

+    const GLushort indices[] = { 0, 1, 2,  0, 2, 3 };
+

+    glVertexPointer(3, GL_FLOAT, 0, vertices);

+    glTexCoordPointer(2, GL_FIXED, 0, texCoords);
+
+    glClearColor(1.0, 1.0, 1.0, 1.0);
+
+    int nelem = sizeof(indices)/sizeof(indices[0]);
+    glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
+    glDrawElements(GL_TRIANGLES, nelem, GL_UNSIGNED_SHORT, indices);
+    eglSwapBuffers(eglDisplay, eglSurface);

+}

+
diff --git a/opengl/tests/gl_jni/jni/gl_code.cpp b/opengl/tests/gl_jni/jni/gl_code.cpp
index b85a433..33b25ab 100644
--- a/opengl/tests/gl_jni/jni/gl_code.cpp
+++ b/opengl/tests/gl_jni/jni/gl_code.cpp
@@ -2,16 +2,19 @@
 
 #include <nativehelper/jni.h>
 #define LOG_TAG "GLJNI gl_code.cpp"
-#include <utils/Log.h>

+#include <utils/Log.h>
+
 #include <GLES/gl.h>
 
-#include <stdio.h>

+#include <stdio.h>
+
 #include <stdlib.h>
 #include <math.h>
-

-GLuint texture;

-

-#define FIXED_ONE 0x10000

+
+GLuint texture;
+GLfloat background;
+
+#define FIXED_ONE 0x10000
 
 static void printGLString(const char *name, GLenum s) {
     const char *v = (const char *) glGetString(s);
@@ -77,38 +80,38 @@
     glTranslatef(-eyeX, -eyeY, -eyeZ);
 }
 
-void init_scene(int width, int height)

+void init_scene(int width, int height)
 {
     printGLString("Version", GL_VERSION);
     printGLString("Vendor", GL_VENDOR);
     printGLString("Renderer", GL_RENDERER);
-    printGLString("Extensions", GL_EXTENSIONS);

+    printGLString("Extensions", GL_EXTENSIONS);
+
     glDisable(GL_DITHER);
     glEnable(GL_CULL_FACE);
 
-
     float ratio = width / height;
     glViewport(0, 0, width, height);
 
     glMatrixMode(GL_PROJECTION);
     glLoadIdentity();
-    glFrustumf(-ratio, ratio, -1, 1, 1, 10);

+    glFrustumf(-ratio, ratio, -1, 1, 1, 10);
 
+    glMatrixMode(GL_MODELVIEW);
 
-    glMatrixMode(GL_MODELVIEW);

     glLoadIdentity();
     gluLookAt(
             0, 0, 3,  // eye
             0, 0, 0,  // center
             0, 1, 0); // up
-

-    glEnable(GL_TEXTURE_2D);

-    glEnableClientState(GL_VERTEX_ARRAY);

+
+    glEnable(GL_TEXTURE_2D);
+    glEnableClientState(GL_VERTEX_ARRAY);
     glEnableClientState(GL_TEXTURE_COORD_ARRAY);
-}

-

-void create_texture()

-{

+}
+
+void create_texture()
+{
     const unsigned int on = 0xff0000ff;
     const unsigned int off = 0xffffffff;
     const unsigned int pixels[] =
@@ -121,57 +124,60 @@
             off, on, off, on, off, on, off, on,
             on, off, on, off, on, off, on, off,
             off, on, off, on, off, on, off, on,
-    };

-    glGenTextures(1, &texture);

-    glBindTexture(GL_TEXTURE_2D, texture);

-    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels);

-    glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

-    glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

-    glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

+    };
+
+    glGenTextures(1, &texture);
+    glBindTexture(GL_TEXTURE_2D, texture);
+    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
+    glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+    glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+    glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
 }
 
 extern "C" {
     JNIEXPORT void JNICALL Java_com_android_gljni_GLJNILib_init(JNIEnv * env, jobject obj,  jint width, jint height);
     JNIEXPORT void JNICALL Java_com_android_gljni_GLJNILib_step(JNIEnv * env, jobject obj);
+    JNIEXPORT void JNICALL Java_com_android_gljni_GLJNILib_changeBackground(JNIEnv * env, jobject obj);
 };
-

-

-JNIEXPORT void JNICALL Java_com_android_gljni_GLJNILib_init(JNIEnv * env, jobject obj,  jint width, jint height)

-{

-    init_scene(width, height);

-    create_texture();

-}

 
-JNIEXPORT void JNICALL Java_com_android_gljni_GLJNILib_step(JNIEnv * env, jobject obj)

-{

-    const GLfloat vertices[] = {

-            -1,  -1,  0,

-             1,  -1,  0,

-             1,   1,  0,

-            -1,   1,  0

-    };

-

-    const GLfixed texCoords[] = {

-            0,            0,

-            FIXED_ONE,    0,

-            FIXED_ONE,    FIXED_ONE,

-            0,            FIXED_ONE

-    };

-

+JNIEXPORT void JNICALL Java_com_android_gljni_GLJNILib_init(JNIEnv * env, jobject obj,  jint width, jint height)
+{
+    init_scene(width, height);
+    create_texture();
+}
+
+JNIEXPORT void JNICALL Java_com_android_gljni_GLJNILib_step(JNIEnv * env, jobject obj)
+{
+    const GLfloat vertices[] = {
+            -1,  -1,  0,
+             1,  -1,  0,
+             1,   1,  0,
+            -1,   1,  0
+    };
+
+    const GLfixed texCoords[] = {
+            0,            0,
+            FIXED_ONE,    0,
+            FIXED_ONE,    FIXED_ONE,
+            0,            FIXED_ONE
+    };
+
     const GLushort quadIndices[] = { 0, 1, 2,  0, 2, 3 };
-
-    glVertexPointer(3, GL_FLOAT, 0, vertices);

+    glVertexPointer(3, GL_FLOAT, 0, vertices);
     glTexCoordPointer(2, GL_FIXED, 0, texCoords);
 
-
     int nelem = sizeof(quadIndices)/sizeof(quadIndices[0]);
     static float grey;
     grey += 0.01f;
     if (grey > 1.0f) {
         grey = 0.0f;
     }
-    glClearColor(grey, grey, grey, 1.0f);
+    glClearColor(background, grey, grey, 1.0f);
     glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
-    glDrawElements(GL_TRIANGLES, nelem, GL_UNSIGNED_SHORT, quadIndices);

-}

+    glDrawElements(GL_TRIANGLES, nelem, GL_UNSIGNED_SHORT, quadIndices);
+}
 
+JNIEXPORT void JNICALL Java_com_android_gljni_GLJNILib_changeBackground(JNIEnv * env, jobject obj)
+{
+    background = 1.0f - background;
+}
\ No newline at end of file
diff --git a/opengl/tests/gl_jni/src/com/android/gljni/GLJNIActivity.java b/opengl/tests/gl_jni/src/com/android/gljni/GLJNIActivity.java
index df1f957..c6f5313 100644
--- a/opengl/tests/gl_jni/src/com/android/gljni/GLJNIActivity.java
+++ b/opengl/tests/gl_jni/src/com/android/gljni/GLJNIActivity.java
@@ -18,28 +18,27 @@
 
 import android.app.Activity;
 import android.os.Bundle;
-import android.util.Log;
-import android.view.WindowManager;
-
-import java.io.File;
-
 
 public class GLJNIActivity extends Activity {
 
     GLJNIView mView;
 
-    @Override protected void onCreate(Bundle icicle) {
+    @Override
+    protected void onCreate(Bundle icicle) {
         super.onCreate(icicle);
         mView = new GLJNIView(getApplication());
-	setContentView(mView);
+	    mView.setFocusableInTouchMode(true);
+	    setContentView(mView);
     }
 
-    @Override protected void onPause() {
+    @Override
+    protected void onPause() {
         super.onPause();
         mView.onPause();
     }
 
-    @Override protected void onResume() {
+    @Override
+    protected void onResume() {
         super.onResume();
         mView.onResume();
     }
diff --git a/opengl/tests/gl_jni/src/com/android/gljni/GLJNILib.java b/opengl/tests/gl_jni/src/com/android/gljni/GLJNILib.java
index 8662725..f56d2af 100644
--- a/opengl/tests/gl_jni/src/com/android/gljni/GLJNILib.java
+++ b/opengl/tests/gl_jni/src/com/android/gljni/GLJNILib.java
@@ -30,4 +30,5 @@
      */
      public static native void init(int width, int height);
      public static native void step();
+     public static native void changeBackground();
 }
diff --git a/opengl/tests/gl_jni/src/com/android/gljni/GLJNIView.java b/opengl/tests/gl_jni/src/com/android/gljni/GLJNIView.java
index 9ea1059..9a2c8c4 100644
--- a/opengl/tests/gl_jni/src/com/android/gljni/GLJNIView.java
+++ b/opengl/tests/gl_jni/src/com/android/gljni/GLJNIView.java
@@ -80,5 +80,11 @@
             // Do nothing.
         }
     }
+    
+    @Override
+    public boolean onKeyDown(int keyCode, KeyEvent event) {
+        GLJNILib.changeBackground();
+        return true;
+    }
 }
 
diff --git a/opengl/tests/tritex/tritex.cpp b/opengl/tests/tritex/tritex.cpp
index 629b53c..3365ab4 100644
--- a/opengl/tests/tritex/tritex.cpp
+++ b/opengl/tests/tritex/tritex.cpp
@@ -123,7 +123,7 @@
     EGLConfig myConfig = {0};

     EGLint attrib[] =

     {

-            EGL_SURFACE_TYPE, EGL_PBUFFER_BIT|EGL_WINDOW_BIT,
+            EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
             EGL_DEPTH_SIZE,     16,

             EGL_NONE

     };

diff --git a/packages/SettingsProvider/res/drawable-hdpi/ic_launcher_settings.png b/packages/SettingsProvider/res/drawable-hdpi/ic_launcher_settings.png
new file mode 100644
index 0000000..ff34a7f
--- /dev/null
+++ b/packages/SettingsProvider/res/drawable-hdpi/ic_launcher_settings.png
Binary files differ
diff --git a/packages/SettingsProvider/res/drawable-mdpi/ic_launcher_settings.png b/packages/SettingsProvider/res/drawable-mdpi/ic_launcher_settings.png
new file mode 100644
index 0000000..b08ad3b
--- /dev/null
+++ b/packages/SettingsProvider/res/drawable-mdpi/ic_launcher_settings.png
Binary files differ
diff --git a/packages/SettingsProvider/res/drawable/ic_launcher_settings.png b/packages/SettingsProvider/res/drawable/ic_launcher_settings.png
deleted file mode 100755
index 16db056..0000000
--- a/packages/SettingsProvider/res/drawable/ic_launcher_settings.png
+++ /dev/null
Binary files differ
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
index fb5e4e6..2738efbd 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
@@ -50,8 +50,7 @@
  * List of settings that are backed up are stored in the Settings.java file
  */
 public class SettingsBackupAgent extends BackupHelperAgent {
-    // STOPSHIP: set DEBUG to false
-    private static final boolean DEBUG = true;
+    private static final boolean DEBUG = false;
 
     private static final String KEY_SYSTEM = "system";
     private static final String KEY_SECURE = "secure";
diff --git a/packages/SubscribedFeedsProvider/src/com/android/providers/subscribedfeeds/SubscribedFeedsIntentService.java b/packages/SubscribedFeedsProvider/src/com/android/providers/subscribedfeeds/SubscribedFeedsIntentService.java
index b854f86..2e910b7 100644
--- a/packages/SubscribedFeedsProvider/src/com/android/providers/subscribedfeeds/SubscribedFeedsIntentService.java
+++ b/packages/SubscribedFeedsProvider/src/com/android/providers/subscribedfeeds/SubscribedFeedsIntentService.java
@@ -111,7 +111,7 @@
                 + "and " + SubscribedFeeds.Feeds.FEED + "= ?";
         try {
             // TODO(fredq) fix the hardcoded type
-            final Account account = new Account(accountName, "com.google.GAIA");
+            final Account account = new Account(accountName, "com.google");
             c = context.getContentResolver().query(SubscribedFeeds.Feeds.CONTENT_URI,
                     null, where, new String[]{account.name, account.type, feed}, null);
             if (c.getCount() == 0) {
diff --git a/packages/SubscribedFeedsProvider/src/com/android/providers/subscribedfeeds/SubscribedFeedsProvider.java b/packages/SubscribedFeedsProvider/src/com/android/providers/subscribedfeeds/SubscribedFeedsProvider.java
index 2647752..8585082 100644
--- a/packages/SubscribedFeedsProvider/src/com/android/providers/subscribedfeeds/SubscribedFeedsProvider.java
+++ b/packages/SubscribedFeedsProvider/src/com/android/providers/subscribedfeeds/SubscribedFeedsProvider.java
@@ -127,7 +127,7 @@
     protected void onAccountsChanged(Account[] accountsArray) {
         super.onAccountsChanged(accountsArray);
         for (Account account : accountsArray) {
-            if (account.type.equals("com.google.GAIA")) {
+            if (account.type.equals("com.google")) {
                 ContentResolver.setSyncAutomatically(account, "subscribedfeeds", true);
             }
         }
diff --git a/packages/TtsService/AndroidManifest.xml b/packages/TtsService/AndroidManifest.xml
index bd17ba0..46e0ad1 100755
--- a/packages/TtsService/AndroidManifest.xml
+++ b/packages/TtsService/AndroidManifest.xml
@@ -1,7 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="android.tts">
-    <application android:label="TTS Service">
+    <application android:label="TTS Service"
+        android:icon="@drawable/ic_launcher_text_to_speech">
         <service android:enabled="true"
                  android:name=".TtsService"
                  android:label="TTS Service">
diff --git a/packages/TtsService/res/drawable-hdpi/ic_launcher_text_to_speech.png b/packages/TtsService/res/drawable-hdpi/ic_launcher_text_to_speech.png
new file mode 100644
index 0000000..f075e0f
--- /dev/null
+++ b/packages/TtsService/res/drawable-hdpi/ic_launcher_text_to_speech.png
Binary files differ
diff --git a/packages/TtsService/res/drawable-mdpi/ic_launcher_text_to_speech.png b/packages/TtsService/res/drawable-mdpi/ic_launcher_text_to_speech.png
new file mode 100644
index 0000000..cbae7de
--- /dev/null
+++ b/packages/TtsService/res/drawable-mdpi/ic_launcher_text_to_speech.png
Binary files differ
diff --git a/packages/VpnServices/src/com/android/server/vpn/L2tpIpsecPskService.java b/packages/VpnServices/src/com/android/server/vpn/L2tpIpsecPskService.java
index 7910f4a..50e0de1 100644
--- a/packages/VpnServices/src/com/android/server/vpn/L2tpIpsecPskService.java
+++ b/packages/VpnServices/src/com/android/server/vpn/L2tpIpsecPskService.java
@@ -31,24 +31,17 @@
     protected void connect(String serverIp, String username, String password)
             throws IOException {
         L2tpIpsecPskProfile p = getProfile();
+        VpnDaemons daemons = getDaemons();
 
         // IPSEC
-        DaemonProxy ipsec = startDaemon(IPSEC);
-        ipsec.sendCommand(serverIp, L2tpService.L2TP_PORT, p.getPresharedKey());
-        ipsec.closeControlSocket();
+        daemons.startIpsecForL2tp(serverIp, p.getPresharedKey())
+                .closeControlSocket();
 
         sleep(2000); // 2 seconds
 
         // L2TP
-        MtpdHelper.sendCommand(this, L2tpService.L2TP_DAEMON, serverIp,
-                L2tpService.L2TP_PORT,
+        daemons.startL2tp(serverIp,
                 (p.isSecretEnabled() ? p.getSecretString() : null),
                 username, password);
     }
-
-    @Override
-    protected void stopPreviouslyRunDaemons() {
-        stopDaemon(IPSEC);
-        stopDaemon(MtpdHelper.MTPD);
-    }
 }
diff --git a/packages/VpnServices/src/com/android/server/vpn/L2tpIpsecService.java b/packages/VpnServices/src/com/android/server/vpn/L2tpIpsecService.java
index 9909905..663b0e8 100644
--- a/packages/VpnServices/src/com/android/server/vpn/L2tpIpsecService.java
+++ b/packages/VpnServices/src/com/android/server/vpn/L2tpIpsecService.java
@@ -31,9 +31,10 @@
     protected void connect(String serverIp, String username, String password)
             throws IOException {
         L2tpIpsecProfile p = getProfile();
+        VpnDaemons daemons = getDaemons();
+
         // IPSEC
-        DaemonProxy ipsec = startDaemon(IPSEC);
-        ipsec.sendCommand(serverIp, L2tpService.L2TP_PORT,
+        DaemonProxy ipsec = daemons.startIpsecForL2tp(serverIp,
                 Credentials.USER_PRIVATE_KEY + p.getUserCertificate(),
                 Credentials.USER_CERTIFICATE + p.getUserCertificate(),
                 Credentials.CA_CERTIFICATE + p.getCaCertificate());
@@ -42,15 +43,8 @@
         sleep(2000); // 2 seconds
 
         // L2TP
-        MtpdHelper.sendCommand(this, L2tpService.L2TP_DAEMON, serverIp,
-                L2tpService.L2TP_PORT,
+        daemons.startL2tp(serverIp,
                 (p.isSecretEnabled() ? p.getSecretString() : null),
                 username, password);
     }
-
-    @Override
-    protected void stopPreviouslyRunDaemons() {
-        stopDaemon(IPSEC);
-        stopDaemon(MtpdHelper.MTPD);
-    }
 }
diff --git a/packages/VpnServices/src/com/android/server/vpn/L2tpService.java b/packages/VpnServices/src/com/android/server/vpn/L2tpService.java
index d658a366..784a366 100644
--- a/packages/VpnServices/src/com/android/server/vpn/L2tpService.java
+++ b/packages/VpnServices/src/com/android/server/vpn/L2tpService.java
@@ -24,20 +24,12 @@
  * The service that manages the L2TP VPN connection.
  */
 class L2tpService extends VpnService<L2tpProfile> {
-    static final String L2TP_DAEMON = "l2tp";
-    static final String L2TP_PORT = "1701";
-
     @Override
     protected void connect(String serverIp, String username, String password)
             throws IOException {
         L2tpProfile p = getProfile();
-        MtpdHelper.sendCommand(this, L2TP_DAEMON, serverIp, L2TP_PORT,
+        getDaemons().startL2tp(serverIp,
                 (p.isSecretEnabled() ? p.getSecretString() : null),
                 username, password);
     }
-
-    @Override
-    protected void stopPreviouslyRunDaemons() {
-        stopDaemon(MtpdHelper.MTPD);
-    }
 }
diff --git a/packages/VpnServices/src/com/android/server/vpn/MtpdHelper.java b/packages/VpnServices/src/com/android/server/vpn/MtpdHelper.java
deleted file mode 100644
index 9078d9b..0000000
--- a/packages/VpnServices/src/com/android/server/vpn/MtpdHelper.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (C) 2009, 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.
- */
-
-package com.android.server.vpn;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-
-/**
- * A helper class for sending commands to the MTP daemon (mtpd).
- */
-class MtpdHelper {
-    static final String MTPD = "mtpd";
-    private static final String VPN_LINKNAME = "vpn";
-    private static final String PPP_ARGS_SEPARATOR = "";
-
-    static void sendCommand(VpnService<?> vpnService, String protocol,
-            String serverIp, String port, String secret, String username,
-            String password) throws IOException {
-        sendCommand(vpnService, protocol, serverIp, port, secret, username,
-                password, false);
-    }
-
-    static void sendCommand(VpnService<?> vpnService, String protocol,
-            String serverIp, String port, String secret, String username,
-            String password, boolean encryption) throws IOException {
-        ArrayList<String> args = new ArrayList<String>();
-        args.addAll(Arrays.asList(protocol, serverIp, port));
-        if (secret != null) args.add(secret);
-        args.add(PPP_ARGS_SEPARATOR);
-        addPppArguments(args, serverIp, username, password, encryption);
-
-        DaemonProxy mtpd = vpnService.startDaemon(MTPD);
-        mtpd.sendCommand(args.toArray(new String[args.size()]));
-    }
-
-    private static void addPppArguments(ArrayList<String> args, String serverIp,
-            String username, String password, boolean encryption)
-            throws IOException {
-        args.addAll(Arrays.asList(
-                "linkname", VPN_LINKNAME,
-                "name", username,
-                "password", password,
-                "refuse-eap", "nodefaultroute", "usepeerdns",
-                "idle", "1800",
-                "mtu", "1400",
-                "mru", "1400"));
-        if (encryption) {
-            args.add("+mppe");
-        }
-    }
-
-    private MtpdHelper() {
-    }
-}
diff --git a/packages/VpnServices/src/com/android/server/vpn/PptpService.java b/packages/VpnServices/src/com/android/server/vpn/PptpService.java
index d903d1b..de12710 100644
--- a/packages/VpnServices/src/com/android/server/vpn/PptpService.java
+++ b/packages/VpnServices/src/com/android/server/vpn/PptpService.java
@@ -24,19 +24,11 @@
  * The service that manages the PPTP VPN connection.
  */
 class PptpService extends VpnService<PptpProfile> {
-    static final String PPTP_DAEMON = "pptp";
-    static final String PPTP_PORT = "1723";
-
     @Override
     protected void connect(String serverIp, String username, String password)
             throws IOException {
         PptpProfile p = getProfile();
-        MtpdHelper.sendCommand(this, PPTP_DAEMON, serverIp, PPTP_PORT, null,
-                username, password, p.isEncryptionEnabled());
-    }
-
-    @Override
-    protected void stopPreviouslyRunDaemons() {
-        stopDaemon(MtpdHelper.MTPD);
+        getDaemons().startPptp(serverIp, username, password,
+                p.isEncryptionEnabled());
     }
 }
diff --git a/packages/VpnServices/src/com/android/server/vpn/VpnDaemons.java b/packages/VpnServices/src/com/android/server/vpn/VpnDaemons.java
new file mode 100644
index 0000000..499195f
--- /dev/null
+++ b/packages/VpnServices/src/com/android/server/vpn/VpnDaemons.java
@@ -0,0 +1,147 @@
+/*
+ * Copyright (C) 2009, 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.
+ */
+
+package com.android.server.vpn;
+
+import android.util.Log;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * A helper class for managing native VPN daemons.
+ */
+class VpnDaemons implements Serializable {
+    static final long serialVersionUID = 1L;
+    private final String TAG = VpnDaemons.class.getSimpleName();
+
+    private static final String MTPD = "mtpd";
+    private static final String IPSEC = "racoon";
+
+    private static final String L2TP = "l2tp";
+    private static final String L2TP_PORT = "1701";
+
+    private static final String PPTP = "pptp";
+    private static final String PPTP_PORT = "1723";
+
+    private static final String VPN_LINKNAME = "vpn";
+    private static final String PPP_ARGS_SEPARATOR = "";
+
+    private List<DaemonProxy> mDaemonList = new ArrayList<DaemonProxy>();
+
+    public DaemonProxy startL2tp(String serverIp, String secret,
+            String username, String password) throws IOException {
+        return startMtpd(L2TP, serverIp, L2TP_PORT, secret, username, password,
+                false);
+    }
+
+    public DaemonProxy startPptp(String serverIp, String username,
+            String password, boolean encryption) throws IOException {
+        return startMtpd(PPTP, serverIp, PPTP_PORT, null, username, password,
+                encryption);
+    }
+
+    public DaemonProxy startIpsecForL2tp(String serverIp, String pskKey)
+            throws IOException {
+        DaemonProxy ipsec = startDaemon(IPSEC);
+        ipsec.sendCommand(serverIp, L2TP_PORT, pskKey);
+        return ipsec;
+    }
+
+    public DaemonProxy startIpsecForL2tp(String serverIp, String userKeyKey,
+            String userCertKey, String caCertKey) throws IOException {
+        DaemonProxy ipsec = startDaemon(IPSEC);
+        ipsec.sendCommand(serverIp, L2TP_PORT, userKeyKey, userCertKey,
+                caCertKey);
+        return ipsec;
+    }
+
+    public synchronized void stopAll() {
+        new DaemonProxy(MTPD).stop();
+        new DaemonProxy(IPSEC).stop();
+    }
+
+    public synchronized void closeSockets() {
+        for (DaemonProxy s : mDaemonList) s.closeControlSocket();
+    }
+
+    public synchronized boolean anyDaemonStopped() {
+        for (DaemonProxy s : mDaemonList) {
+            if (s.isStopped()) {
+                Log.w(TAG, "    VPN daemon gone: " + s.getName());
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public synchronized int getSocketError() {
+        for (DaemonProxy s : mDaemonList) {
+            int errCode = getResultFromSocket(s);
+            if (errCode != 0) return errCode;
+        }
+        return 0;
+    }
+
+    private synchronized DaemonProxy startDaemon(String daemonName)
+            throws IOException {
+        DaemonProxy daemon = new DaemonProxy(daemonName);
+        mDaemonList.add(daemon);
+        daemon.start();
+        return daemon;
+    }
+
+    private int getResultFromSocket(DaemonProxy s) {
+        try {
+            return s.getResultFromSocket();
+        } catch (IOException e) {
+            return -1;
+        }
+    }
+
+    private DaemonProxy startMtpd(String protocol,
+            String serverIp, String port, String secret, String username,
+            String password, boolean encryption) throws IOException {
+        ArrayList<String> args = new ArrayList<String>();
+        args.addAll(Arrays.asList(protocol, serverIp, port));
+        if (secret != null) args.add(secret);
+        args.add(PPP_ARGS_SEPARATOR);
+        addPppArguments(args, serverIp, username, password, encryption);
+
+        DaemonProxy mtpd = startDaemon(MTPD);
+        mtpd.sendCommand(args.toArray(new String[args.size()]));
+        return mtpd;
+    }
+
+    private static void addPppArguments(ArrayList<String> args, String serverIp,
+            String username, String password, boolean encryption)
+            throws IOException {
+        args.addAll(Arrays.asList(
+                "linkname", VPN_LINKNAME,
+                "name", username,
+                "password", password,
+                "refuse-eap", "nodefaultroute", "usepeerdns",
+                "idle", "1800",
+                "mtu", "1400",
+                "mru", "1400"));
+        if (encryption) {
+            args.add("+mppe");
+        }
+    }
+}
diff --git a/packages/VpnServices/src/com/android/server/vpn/VpnService.java b/packages/VpnServices/src/com/android/server/vpn/VpnService.java
index 53167f6..63b87b1 100644
--- a/packages/VpnServices/src/com/android/server/vpn/VpnService.java
+++ b/packages/VpnServices/src/com/android/server/vpn/VpnService.java
@@ -30,18 +30,15 @@
 import java.io.IOException;
 import java.io.Serializable;
 import java.net.DatagramSocket;
-import java.net.Socket;
 import java.net.InetAddress;
 import java.net.NetworkInterface;
 import java.net.UnknownHostException;
-import java.util.ArrayList;
-import java.util.List;
 
 /**
  * The service base class for managing a type of VPN connection.
  */
 abstract class VpnService<E extends VpnProfile> implements Serializable {
-    protected static final long serialVersionUID = 1L;
+    static final long serialVersionUID = 1L;
     private static final boolean DBG = true;
     private static final int NOTIFICATION_ID = 1;
 
@@ -75,8 +72,8 @@
 
     private long mStartTime; // VPN connection start time
 
-    // for helping managing multiple daemons
-    private DaemonHelper mDaemonHelper = new DaemonHelper();
+    // for helping managing daemons
+    private VpnDaemons mDaemons = new VpnDaemons();
 
     // for helping showing, updating notification
     private transient NotificationHelper mNotification;
@@ -87,21 +84,11 @@
     protected abstract void connect(String serverIp, String username,
             String password) throws IOException;
 
-    protected abstract void stopPreviouslyRunDaemons();
-
     /**
-     * Starts a VPN daemon.
+     * Returns the daemons management class for this service object.
      */
-    protected DaemonProxy startDaemon(String daemonName)
-            throws IOException {
-        return mDaemonHelper.startDaemon(daemonName);
-    }
-
-    /**
-     * Stops a VPN daemon.
-     */
-    protected void stopDaemon(String daemonName) {
-        new DaemonProxy(daemonName).stop();
+    protected VpnDaemons getDaemons() {
+        return mDaemons;
     }
 
     /**
@@ -141,7 +128,7 @@
         try {
             setState(VpnState.CONNECTING);
 
-            stopPreviouslyRunDaemons();
+            mDaemons.stopAll();
             String serverIp = getIp(getProfile().getServerName());
             saveLocalIpAndInterface(serverIp);
             onBeforeConnect();
@@ -160,7 +147,7 @@
             setState(VpnState.DISCONNECTING);
             mNotification.showDisconnect();
 
-            mDaemonHelper.stopAll();
+            mDaemons.stopAll();
         } catch (Throwable e) {
             Log.e(TAG, "onDisconnect()", e);
         } finally {
@@ -206,7 +193,7 @@
                 onConnected();
                 return;
             } else {
-                int err = mDaemonHelper.getSocketError();
+                int err = mDaemons.getSocketError();
                 if (err != 0) {
                     onError(err);
                     return;
@@ -223,7 +210,7 @@
     private synchronized void onConnected() throws IOException {
         if (DBG) Log.d(TAG, "onConnected()");
 
-        mDaemonHelper.closeSockets();
+        mDaemons.closeSockets();
         saveOriginalDns();
         saveAndSetDomainSuffices();
 
@@ -341,15 +328,20 @@
             public void run() {
                 Log.i(TAG, "VPN connectivity monitor running");
                 try {
-                    for (;;) {
+                    for (int i = 10; ; i--) {
+                        long now = System.currentTimeMillis();
+
+                        boolean heavyCheck = i == 0;
                         synchronized (VpnService.this) {
-                            if ((mState != VpnState.CONNECTED)
-                                || !checkConnectivity()) {
-                                break;
+                            if (mState != VpnState.CONNECTED) break;
+                            mNotification.update(now);
+
+                            if (heavyCheck) {
+                                i = 10;
+                                if (checkConnectivity()) checkDns();
                             }
-                            mNotification.update();
-                            checkDns();
-                            VpnService.this.wait(1000); // 1 second
+                            long t = 1000L - System.currentTimeMillis() + now;
+                            if (t > 100L) VpnService.this.wait(t);
                         }
                     }
                 } catch (InterruptedException e) {
@@ -378,7 +370,7 @@
 
     // returns false if vpn connectivity is broken
     private boolean checkConnectivity() {
-        if (mDaemonHelper.anyDaemonStopped() || isLocalIpChanged()) {
+        if (mDaemons.anyDaemonStopped() || isLocalIpChanged()) {
             onError(new IOException("Connectivity lost"));
             return false;
         } else {
@@ -421,60 +413,17 @@
     }
 
     private class DaemonHelper implements Serializable {
-        private List<DaemonProxy> mDaemonList =
-                new ArrayList<DaemonProxy>();
-
-        synchronized DaemonProxy startDaemon(String daemonName)
-                throws IOException {
-            DaemonProxy daemon = new DaemonProxy(daemonName);
-            mDaemonList.add(daemon);
-            daemon.start();
-            return daemon;
-        }
-
-        synchronized void stopAll() {
-            for (DaemonProxy s : mDaemonList) s.stop();
-        }
-
-        synchronized void closeSockets() {
-            for (DaemonProxy s : mDaemonList) s.closeControlSocket();
-        }
-
-        synchronized boolean anyDaemonStopped() {
-            for (DaemonProxy s : mDaemonList) {
-                if (s.isStopped()) {
-                    Log.w(TAG, "    VPN daemon gone: " + s.getName());
-                    return true;
-                }
-            }
-            return false;
-        }
-
-        private int getResultFromSocket(DaemonProxy s) {
-            try {
-                return s.getResultFromSocket();
-            } catch (IOException e) {
-                return -1;
-            }
-        }
-
-        synchronized int getSocketError() {
-            for (DaemonProxy s : mDaemonList) {
-                int errCode = getResultFromSocket(s);
-                if (errCode != 0) return errCode;
-            }
-            return 0;
-        }
     }
 
     // Helper class for showing, updating notification.
     private class NotificationHelper {
-        void update() {
+        void update(long now) {
             String title = getNotificationTitle(true);
             Notification n = new Notification(R.drawable.vpn_connected, title,
                     mStartTime);
             n.setLatestEventInfo(mContext, title,
-                    getNotificationMessage(true), prepareNotificationIntent());
+                    getConnectedNotificationMessage(now),
+                    prepareNotificationIntent());
             n.flags |= Notification.FLAG_NO_CLEAR;
             n.flags |= Notification.FLAG_ONGOING_EVENT;
             enableNotification(n);
@@ -485,7 +434,8 @@
             Notification n = new Notification(R.drawable.vpn_disconnected,
                     title, System.currentTimeMillis());
             n.setLatestEventInfo(mContext, title,
-                    getNotificationMessage(false), prepareNotificationIntent());
+                    getDisconnectedNotificationMessage(),
+                    prepareNotificationIntent());
             n.flags |= Notification.FLAG_AUTO_CANCEL;
             disableNotification();
             enableNotification(n);
@@ -515,8 +465,8 @@
             return String.format(formatString, mProfile.getName());
         }
 
-        private String getFormattedTime(long duration) {
-            long hours = duration / 3600;
+        private String getFormattedTime(int duration) {
+            int hours = duration / 3600;
             StringBuilder sb = new StringBuilder();
             if (hours > 0) sb.append(hours).append(':');
             sb.append(String.format("%02d:%02d", (duration % 3600 / 60),
@@ -524,14 +474,13 @@
             return sb.toString();
         }
 
-        private String getNotificationMessage(boolean connected) {
-            if (connected) {
-                long time = (System.currentTimeMillis() - mStartTime) / 1000;
-                return getFormattedTime(time);
-            } else {
-                return mContext.getString(
-                        R.string.vpn_notification_hint_disconnected);
-            }
+        private String getConnectedNotificationMessage(long now) {
+            return getFormattedTime((int) (now - mStartTime) / 1000);
+        }
+
+        private String getDisconnectedNotificationMessage() {
+            return mContext.getString(
+                    R.string.vpn_notification_hint_disconnected);
         }
     }
 }
diff --git a/services/java/com/android/server/AppWidgetService.java b/services/java/com/android/server/AppWidgetService.java
index 3c46954..f8b8ecc 100644
--- a/services/java/com/android/server/AppWidgetService.java
+++ b/services/java/com/android/server/AppWidgetService.java
@@ -816,7 +816,10 @@
             temp.delete();
         }
 
-        writeStateToFileLocked(temp);
+        if (!writeStateToFileLocked(temp)) {
+            Log.w(TAG, "Failed to persist new settings");
+            return;
+        }
 
         //noinspection ResultOfMethodCallIgnored
         real.delete();
@@ -824,7 +827,7 @@
         temp.renameTo(real);
     }
 
-    void writeStateToFileLocked(File file) {
+    boolean writeStateToFileLocked(File file) {
         FileOutputStream stream = null;
         int N;
 
@@ -877,6 +880,7 @@
 
             out.endDocument();
             stream.close();
+            return true;
         } catch (IOException e) {
             try {
                 if (stream != null) {
@@ -889,6 +893,7 @@
                 //noinspection ResultOfMethodCallIgnored
                 file.delete();
             }
+            return false;
         }
     }
 
diff --git a/services/java/com/android/server/BackupManagerService.java b/services/java/com/android/server/BackupManagerService.java
index 15290c1..82a7c1c 100644
--- a/services/java/com/android/server/BackupManagerService.java
+++ b/services/java/com/android/server/BackupManagerService.java
@@ -79,7 +79,7 @@
 
 class BackupManagerService extends IBackupManager.Stub {
     private static final String TAG = "BackupManagerService";
-    private static final boolean DEBUG = true;
+    private static final boolean DEBUG = false;
 
     // How often we perform a backup pass.  Privileged external callers can
     // trigger an immediate pass.
@@ -106,6 +106,7 @@
     private static final int BACKUP_PACKAGE_EVENT = 2824;
     private static final int BACKUP_SUCCESS_EVENT = 2825;
     private static final int BACKUP_RESET_EVENT = 2826;
+    private static final int BACKUP_INITIALIZE_EVENT = 2827;
 
     private static final int RESTORE_START_EVENT = 2830;
     private static final int RESTORE_TRANSPORT_FAILURE_EVENT = 2831;
@@ -163,8 +164,10 @@
     IBackupAgent mConnectedAgent;
     volatile boolean mConnecting;
     volatile boolean mBackupOrRestoreInProgress = false;
+    volatile long mLastBackupPass;
+    volatile long mNextBackupPass;
 
-    // A similar synchronicity mechanism around clearing apps' data for restore
+    // A similar synchronization mechanism around clearing apps' data for restore
     final Object mClearDataLock = new Object();
     volatile boolean mClearingData;
 
@@ -202,11 +205,9 @@
     File mDataDir;
     File mJournalDir;
     File mJournal;
-    RandomAccessFile mJournalStream;
 
     // Keep a log of all the apps we've ever backed up
     private File mEverStored;
-    private RandomAccessFile mEverStoredStream;
     HashSet<String> mEverStoredApps = new HashSet<String>();
 
     // Persistently track the need to do a full init
@@ -254,7 +255,7 @@
         // Set up the backup-request journaling
         mJournalDir = new File(mBaseStateDir, "pending");
         mJournalDir.mkdirs();   // creates mBaseStateDir along the way
-        makeJournalLocked();    // okay because no other threads are running yet
+        mJournal = null;        // will be created on first use
 
         // Set up the various sorts of package tracking we do
         initPackageTracking();
@@ -366,56 +367,51 @@
         // this log, we sanity-check its contents here and reconstruct it.
         mEverStored = new File(mBaseStateDir, "processed");
         File tempProcessedFile = new File(mBaseStateDir, "processed.new");
-        try {
-            // If there are previous contents, parse them out then start a new
-            // file to continue the recordkeeping.
-            if (mEverStored.exists()) {
-                RandomAccessFile temp = new RandomAccessFile(tempProcessedFile, "rw");
-                mEverStoredStream = new RandomAccessFile(mEverStored, "r");
-
-                // parse its existing contents
-                mEverStoredStream.seek(0);
-                temp.seek(0);
-                try {
-                    while (true) {
-                        PackageInfo info;
-                        String pkg = mEverStoredStream.readUTF();
-                        try {
-                            info = mPackageManager.getPackageInfo(pkg, 0);
-                            mEverStoredApps.add(pkg);
-                            temp.writeUTF(pkg);
-                            if (DEBUG) Log.v(TAG, "   + " + pkg);
-                        } catch (NameNotFoundException e) {
-                            // nope, this package was uninstalled; don't include it
-                            if (DEBUG) Log.v(TAG, "   - " + pkg);
-                        }
-                    }
-                } catch (EOFException e) {
-                    // now we're at EOF
-                }
-
-                // Once we've rewritten the backup history log, atomically replace the
-                // old one with the new one then reopen the file for continuing use.
-                temp.close();
-                mEverStoredStream.close();
-                tempProcessedFile.renameTo(mEverStored);
-            }
-            // This will create the file if it doesn't exist
-            mEverStoredStream = new RandomAccessFile(mEverStored, "rwd");
-            mEverStoredStream.seek(mEverStoredStream.length());
-        } catch (IOException e) {
-            Log.e(TAG, "Unable to open known-stored file!");
-            mEverStoredStream = null;
-        }
 
         // If we were in the middle of removing something from the ever-backed-up
         // file, there might be a transient "processed.new" file still present.
-        // We've reconstructed a coherent state at this point though, so we can
-        // safely discard that file now.
+        // Ignore it -- we'll validate "processed" against the current package set.
         if (tempProcessedFile.exists()) {
             tempProcessedFile.delete();
         }
 
+        // If there are previous contents, parse them out then start a new
+        // file to continue the recordkeeping.
+        if (mEverStored.exists()) {
+            RandomAccessFile temp = null;
+            RandomAccessFile in = null;
+
+            try {
+                temp = new RandomAccessFile(tempProcessedFile, "rws");
+                in = new RandomAccessFile(mEverStored, "r");
+
+                while (true) {
+                    PackageInfo info;
+                    String pkg = in.readUTF();
+                    try {
+                        info = mPackageManager.getPackageInfo(pkg, 0);
+                        mEverStoredApps.add(pkg);
+                        temp.writeUTF(pkg);
+                        if (DEBUG) Log.v(TAG, "   + " + pkg);
+                    } catch (NameNotFoundException e) {
+                        // nope, this package was uninstalled; don't include it
+                        if (DEBUG) Log.v(TAG, "   - " + pkg);
+                    }
+                }
+            } catch (EOFException e) {
+                // Once we've rewritten the backup history log, atomically replace the
+                // old one with the new one then reopen the file for continuing use.
+                if (!tempProcessedFile.renameTo(mEverStored)) {
+                    Log.e(TAG, "Error renaming " + tempProcessedFile + " to " + mEverStored);
+                }
+            } catch (IOException e) {
+                Log.e(TAG, "Error in processed file", e);
+            } finally {
+                try { if (temp != null) temp.close(); } catch (IOException e) {}
+                try { if (in != null) in.close(); } catch (IOException e) {}
+            }
+        }
+
         // Register for broadcasts about package install, etc., so we can
         // update the provider list.
         IntentFilter filter = new IntentFilter();
@@ -425,41 +421,29 @@
         mContext.registerReceiver(mBroadcastReceiver, filter);
     }
 
-    private void makeJournalLocked() {
-        try {
-            mJournal = File.createTempFile("journal", null, mJournalDir);
-            mJournalStream = new RandomAccessFile(mJournal, "rwd");
-        } catch (IOException e) {
-            Log.e(TAG, "Unable to write backup journals");
-            mJournal = null;
-            mJournalStream = null;
-        }
-    }
-
     private void parseLeftoverJournals() {
-        if (mJournal != null) {
-            File[] allJournals = mJournalDir.listFiles();
-            for (File f : allJournals) {
-                if (f.compareTo(mJournal) != 0) {
-                    // This isn't the current journal, so it must be a leftover.  Read
-                    // out the package names mentioned there and schedule them for
-                    // backup.
-                    try {
-                        Log.i(TAG, "Found stale backup journal, scheduling:");
-                        RandomAccessFile in = new RandomAccessFile(f, "r");
-                        while (true) {
-                            String packageName = in.readUTF();
-                            Log.i(TAG, "    + " + packageName);
-                            dataChanged(packageName);
-                        }
-                    } catch (EOFException e) {
-                        // no more data; we're done
-                    } catch (Exception e) {
-                        // can't read it or other error; just skip it
-                    } finally {
-                        // close/delete the file
-                        f.delete();
+        for (File f : mJournalDir.listFiles()) {
+            if (mJournal == null || f.compareTo(mJournal) != 0) {
+                // This isn't the current journal, so it must be a leftover.  Read
+                // out the package names mentioned there and schedule them for
+                // backup.
+                RandomAccessFile in = null;
+                try {
+                    Log.i(TAG, "Found stale backup journal, scheduling:");
+                    in = new RandomAccessFile(f, "r");
+                    while (true) {
+                        String packageName = in.readUTF();
+                        Log.i(TAG, "    + " + packageName);
+                        dataChanged(packageName);
                     }
+                } catch (EOFException e) {
+                    // no more data; we're done
+                } catch (Exception e) {
+                    Log.e(TAG, "Can't read " + f, e);
+                } finally {
+                    // close/delete the file
+                    try { if (in != null) in.close(); } catch (IOException e) {}
+                    f.delete();
                 }
             }
         }
@@ -502,19 +486,8 @@
     void resetBackupState(File stateFileDir) {
         synchronized (mQueueLock) {
             // Wipe the "what we've ever backed up" tracking
-            try {
-                // close the ever-stored journal...
-                if (mEverStoredStream != null) {
-                    mEverStoredStream.close();
-                }
-                // ... so we can delete it and start over
-                mEverStored.delete();
-                mEverStoredStream = new RandomAccessFile(mEverStored, "rwd");
-            } catch (IOException e) {
-                Log.e(TAG, "Unable to open known-stored file!");
-                mEverStoredStream = null;
-            }
             mEverStoredApps.clear();
+            mEverStored.delete();
 
             // Remove all the state files
             for (File sf : stateFileDir.listFiles()) {
@@ -530,11 +503,7 @@
                 int uid = mBackupParticipants.keyAt(i);
                 HashSet<ApplicationInfo> participants = mBackupParticipants.valueAt(i);
                 for (ApplicationInfo app: participants) {
-                    try {
-                        dataChanged(app.packageName);
-                    } catch (RemoteException e) {
-                        // can't happen; we're in the same process
-                    }
+                    dataChanged(app.packageName);
                 }
             }
         }
@@ -634,6 +603,9 @@
             switch (msg.what) {
             case MSG_RUN_BACKUP:
             {
+                mLastBackupPass = System.currentTimeMillis();
+                mNextBackupPass = mLastBackupPass + BACKUP_INTERVAL;
+
                 IBackupTransport transport = getTransport(mCurrentTransport);
                 if (transport == null) {
                     Log.v(TAG, "Backup requested but no transport available");
@@ -646,7 +618,6 @@
 
                 // snapshot the pending-backup set and work on that
                 ArrayList<BackupRequest> queue = new ArrayList<BackupRequest>();
-                File oldJournal = mJournal;
                 synchronized (mQueueLock) {
                     // Do we have any work to do?
                     if (mPendingBackups.size() > 0) {
@@ -657,14 +628,8 @@
                         mPendingBackups.clear();
 
                         // Start a new backup-queue journal file too
-                        if (mJournalStream != null) {
-                            try {
-                                mJournalStream.close();
-                            } catch (IOException e) {
-                                // don't need to do anything
-                            }
-                            makeJournalLocked();
-                        }
+                        File oldJournal = mJournal;
+                        mJournal = null;
 
                         // At this point, we have started a new journal file, and the old
                         // file identity is being passed to the backup processing thread.
@@ -757,11 +722,7 @@
                 if (!mEverStoredApps.contains(pkg.packageName)) {
                     if (DEBUG) Log.i(TAG, "New app " + pkg.packageName
                             + " never backed up; scheduling");
-                    try {
-                        dataChanged(pkg.packageName);
-                    } catch (RemoteException e) {
-                        // can't happen; it's a local method call
-                    }
+                    dataChanged(pkg.packageName);
                 }
             }
         }
@@ -865,58 +826,57 @@
     // Called from the backup thread: record that the given app has been successfully
     // backed up at least once
     void logBackupComplete(String packageName) {
-        if (mEverStoredStream != null && !packageName.equals(PACKAGE_MANAGER_SENTINEL)) {
-            synchronized (mEverStoredApps) {
-                if (mEverStoredApps.add(packageName)) {
-                    try {
-                        mEverStoredStream.writeUTF(packageName);
-                    } catch (IOException e) {
-                        Log.e(TAG, "Unable to log backup of " + packageName + ", ceasing log");
-                        try {
-                            mEverStoredStream.close();
-                        } catch (IOException ioe) {
-                            // we're dropping it; no need to handle an exception on close here
-                        }
-                        mEverStoredStream = null;
-                    }
-                }
+        if (packageName.equals(PACKAGE_MANAGER_SENTINEL)) return;
+
+        synchronized (mEverStoredApps) {
+            if (!mEverStoredApps.add(packageName)) return;
+
+            RandomAccessFile out = null;
+            try {
+                out = new RandomAccessFile(mEverStored, "rws");
+                out.seek(out.length());
+                out.writeUTF(packageName);
+            } catch (IOException e) {
+                Log.e(TAG, "Can't log backup of " + packageName + " to " + mEverStored);
+            } finally {
+                try { if (out != null) out.close(); } catch (IOException e) {}
             }
         }
     }
 
     // Remove our awareness of having ever backed up the given package
     void removeEverBackedUp(String packageName) {
-        if (DEBUG) Log.v(TAG, "Removing backed-up knowledge of " + packageName
-                + ", new set:");
+        if (DEBUG) Log.v(TAG, "Removing backed-up knowledge of " + packageName + ", new set:");
 
-        if (mEverStoredStream != null) {
-            synchronized (mEverStoredApps) {
-                // Rewrite the file and rename to overwrite.  If we reboot in the middle,
-                // we'll recognize on initialization time that the package no longer
-                // exists and fix it up then.
-                File tempKnownFile = new File(mBaseStateDir, "processed.new");
-                try {
-                    mEverStoredStream.close();
-                    RandomAccessFile known = new RandomAccessFile(tempKnownFile, "rw");
-                    mEverStoredApps.remove(packageName);
-                    for (String s : mEverStoredApps) {
-                        known.writeUTF(s);
-                        if (DEBUG) Log.v(TAG, "    " + s);
-                    }
-                    known.close();
-                    tempKnownFile.renameTo(mEverStored);
-                    mEverStoredStream = new RandomAccessFile(mEverStored, "rwd");
-                } catch (IOException e) {
-                    // Bad: we couldn't create the new copy.  For safety's sake we
-                    // abandon the whole process and remove all what's-backed-up
-                    // state entirely, meaning we'll force a backup pass for every
-                    // participant on the next boot or [re]install.
-                    Log.w(TAG, "Error rewriting backed-up set; halting log");
-                    mEverStoredStream = null;
-                    mEverStoredApps.clear();
-                    tempKnownFile.delete();
-                    mEverStored.delete();
+        synchronized (mEverStoredApps) {
+            // Rewrite the file and rename to overwrite.  If we reboot in the middle,
+            // we'll recognize on initialization time that the package no longer
+            // exists and fix it up then.
+            File tempKnownFile = new File(mBaseStateDir, "processed.new");
+            RandomAccessFile known = null;
+            try {
+                known = new RandomAccessFile(tempKnownFile, "rws");
+                mEverStoredApps.remove(packageName);
+                for (String s : mEverStoredApps) {
+                    known.writeUTF(s);
+                    if (DEBUG) Log.v(TAG, "    " + s);
                 }
+                known.close();
+                known = null;
+                if (!tempKnownFile.renameTo(mEverStored)) {
+                    throw new IOException("Can't rename " + tempKnownFile + " to " + mEverStored);
+                }
+            } catch (IOException e) {
+                // Bad: we couldn't create the new copy.  For safety's sake we
+                // abandon the whole process and remove all what's-backed-up
+                // state entirely, meaning we'll force a backup pass for every
+                // participant on the next boot or [re]install.
+                Log.w(TAG, "Error rewriting " + mEverStored, e);
+                mEverStoredApps.clear();
+                tempKnownFile.delete();
+                mEverStored.delete();
+            } finally {
+                try { if (known != null) known.close(); } catch (IOException e) {}
             }
         }
     }
@@ -1012,8 +972,7 @@
     }
 
     class ClearDataObserver extends IPackageDataObserver.Stub {
-        public void onRemoveCompleted(String packageName, boolean succeeded)
-                throws RemoteException {
+        public void onRemoveCompleted(String packageName, boolean succeeded) {
             synchronized(mClearDataLock) {
                 mClearingData = false;
                 mClearDataLock.notifyAll();
@@ -1055,9 +1014,18 @@
             try {
                 EventLog.writeEvent(BACKUP_START_EVENT, mTransport.transportDirName());
 
-                // If we haven't stored anything yet, we need to do an init operation.
-                if (status == BackupConstants.TRANSPORT_OK && mEverStoredApps.size() == 0) {
+                // If we haven't stored package manager metadata yet, we must init the transport.
+                File pmState = new File(mStateDir, PACKAGE_MANAGER_SENTINEL);
+                if (status == BackupConstants.TRANSPORT_OK && pmState.length() <= 0) {
+                    Log.i(TAG, "Initializing (wiping) backup state and transport storage");
+                    resetBackupState(mStateDir);  // Just to make sure.
                     status = mTransport.initializeDevice();
+                    if (status == BackupConstants.TRANSPORT_OK) {
+                        EventLog.writeEvent(BACKUP_INITIALIZE_EVENT);
+                    } else {
+                        EventLog.writeEvent(BACKUP_TRANSPORT_FAILURE_EVENT, "(initialize)");
+                        Log.e(TAG, "Transport error in initializeDevice()");
+                    }
                 }
 
                 // The package manager doesn't have a proper <application> etc, but since
@@ -1086,7 +1054,7 @@
                         int millis = (int) (SystemClock.elapsedRealtime() - startRealtime);
                         EventLog.writeEvent(BACKUP_SUCCESS_EVENT, mQueue.size(), millis);
                     } else {
-                        EventLog.writeEvent(BACKUP_TRANSPORT_FAILURE_EVENT, "");
+                        EventLog.writeEvent(BACKUP_TRANSPORT_FAILURE_EVENT, "(finish)");
                         Log.e(TAG, "Transport error in finishBackup()");
                     }
                 }
@@ -1094,10 +1062,9 @@
                 if (status == BackupConstants.TRANSPORT_NOT_INITIALIZED) {
                     // The backend reports that our dataset has been wiped.  We need to
                     // reset all of our bookkeeping and instead run a new backup pass for
-                    // everything.
+                    // everything.  This must come after mBackupOrRestoreInProgress is cleared.
                     EventLog.writeEvent(BACKUP_RESET_EVENT, mTransport.transportDirName());
                     resetBackupState(mStateDir);
-                    backupNow();
                 }
             } catch (Exception e) {
                 Log.e(TAG, "Error in backup thread", e);
@@ -1110,11 +1077,7 @@
                 if (status != BackupConstants.TRANSPORT_OK) {
                     Log.w(TAG, "Backup pass unsuccessful, restaging");
                     for (BackupRequest req : mQueue) {
-                        try {
-                            dataChanged(req.appInfo.packageName);
-                        } catch (RemoteException e) {
-                            // can't happen; it's a local call
-                        }
+                        dataChanged(req.appInfo.packageName);
                     }
 
                     // We also want to reset the backup schedule based on whatever
@@ -1128,7 +1091,7 @@
                 // this pass's journal any more; or it failed, in which case we just
                 // re-enqueued all of these packages in the current active journal.
                 // Either way, we no longer need this pass's journal.
-                if (!mJournal.delete()) {
+                if (mJournal != null && !mJournal.delete()) {
                     Log.e(TAG, "Unable to remove backup journal file " + mJournal);
                 }
 
@@ -1137,6 +1100,12 @@
                 synchronized (mQueueLock) {
                     mBackupOrRestoreInProgress = false;
                 }
+
+                if (status == BackupConstants.TRANSPORT_NOT_INITIALIZED) {
+                    // This must come after mBackupOrRestoreInProgress is cleared.
+                    backupNow();
+                }
+
                 mWakelock.release();
             }
         }
@@ -1679,13 +1648,13 @@
                 stateFile.delete();
 
                 // Tell the transport to remove all the persistent storage for the app
-                // STOPSHIP TODO - need to handle failures
+                // TODO - need to handle failures
                 mTransport.clearBackupData(mPackage);
             } catch (RemoteException e) {
                 // can't happen; the transport is local
             } finally {
                 try {
-                    // STOPSHIP TODO - need to handle failures
+                    // TODO - need to handle failures
                     mTransport.finishBackup();
                 } catch (RemoteException e) {
                     // can't happen; the transport is local
@@ -1709,7 +1678,6 @@
 
         @Override
         public void run() {
-            int status;
             try {
                 for (String transportName : mQueue) {
                     IBackupTransport transport = getTransport(transportName);
@@ -1718,33 +1686,30 @@
                         continue;
                     }
 
-                    status = BackupConstants.TRANSPORT_OK;
-                    File stateDir = null;
+                    Log.i(TAG, "Initializing (wiping) backup transport storage: " + transportName);
+                    EventLog.writeEvent(BACKUP_START_EVENT, transport.transportDirName());
+                    long startRealtime = SystemClock.elapsedRealtime();
+                    int status = transport.initializeDevice();
 
-                    Log.i(TAG, "Device init on " + transport.transportDirName());
-
-                    stateDir = new File(mBaseStateDir, transport.transportDirName());
-
-                    status = transport.initializeDevice();
-                    if (status != BackupConstants.TRANSPORT_OK) {
-                        Log.e(TAG, "Error from initializeDevice: " + status);
-                    }
                     if (status == BackupConstants.TRANSPORT_OK) {
                         status = transport.finishBackup();
                     }
 
                     // Okay, the wipe really happened.  Clean up our local bookkeeping.
                     if (status == BackupConstants.TRANSPORT_OK) {
-                        resetBackupState(stateDir);
+                        Log.i(TAG, "Device init successful");
+                        int millis = (int) (SystemClock.elapsedRealtime() - startRealtime);
+                        EventLog.writeEvent(BACKUP_INITIALIZE_EVENT);
+                        resetBackupState(new File(mBaseStateDir, transport.transportDirName()));
+                        EventLog.writeEvent(BACKUP_SUCCESS_EVENT, 0, millis);
                         synchronized (mQueueLock) {
                             recordInitPendingLocked(false, transportName);
                         }
-                    }
-
-                    // If this didn't work, requeue this one and try again
-                    // after a suitable interval
-                    if (status != BackupConstants.TRANSPORT_OK) {
-                        Log.i(TAG, "Device init failed");
+                    } else {
+                        // If this didn't work, requeue this one and try again
+                        // after a suitable interval
+                        Log.e(TAG, "Transport error in initializeDevice()");
+                        EventLog.writeEvent(BACKUP_TRANSPORT_FAILURE_EVENT, "(initialize)");
                         synchronized (mQueueLock) {
                             recordInitPendingLocked(true, transportName);
                         }
@@ -1754,11 +1719,7 @@
                                 + transportName + " resched in " + delay);
                         mAlarmManager.set(AlarmManager.RTC_WAKEUP,
                                 System.currentTimeMillis() + delay, mRunInitIntent);
-                    } else {
-                        // success!
-                        Log.i(TAG, "Device init successful");
                     }
-
                 }
             } catch (RemoteException e) {
                 // can't happen; the transports are local
@@ -1777,7 +1738,7 @@
 
     // ----- IBackupManager binder interface -----
 
-    public void dataChanged(String packageName) throws RemoteException {
+    public void dataChanged(String packageName) {
         // Record that we need a backup pass for the caller.  Since multiple callers
         // may share a uid, we need to note all candidates within that uid and schedule
         // a backup pass for each of them.
@@ -1835,14 +1796,17 @@
     }
 
     private void writeToJournalLocked(String str) {
-        if (mJournalStream != null) {
-            try {
-                mJournalStream.writeUTF(str);
-            } catch (IOException e) {
-                Log.e(TAG, "Error writing to backup journal");
-                mJournalStream = null;
-                mJournal = null;
-            }
+        RandomAccessFile out = null;
+        try {
+            if (mJournal == null) mJournal = File.createTempFile("journal", null, mJournalDir);
+            out = new RandomAccessFile(mJournal, "rws");
+            out.seek(out.length());
+            out.writeUTF(str);
+        } catch (IOException e) {
+            Log.e(TAG, "Can't write " + str + " to backup journal", e);
+            mJournal = null;
+        } finally {
+            try { if (out != null) out.close(); } catch (IOException e) {}
         }
     }
 
@@ -1897,7 +1861,7 @@
 
     // Run a backup pass immediately for any applications that have declared
     // that they have pending updates.
-    public void backupNow() throws RemoteException {
+    public void backupNow() {
         mContext.enforceCallingOrSelfPermission(android.Manifest.permission.BACKUP, "backupNow");
 
         if (DEBUG) Log.v(TAG, "Scheduling immediate backup pass");
@@ -1988,6 +1952,7 @@
         long when = System.currentTimeMillis() + delayBeforeFirstBackup;
         mAlarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, when,
                 BACKUP_INTERVAL, mRunBackupIntent);
+        mNextBackupPass = when;
     }
 
     // Report whether the backup mechanism is currently enabled
@@ -2194,28 +2159,51 @@
     public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
         synchronized (mQueueLock) {
             pw.println("Backup Manager is " + (mEnabled ? "enabled" : "disabled")
-                    + " / " + (!mProvisioned ? "not " : "") + "provisioned");
+                    + " / " + (!mProvisioned ? "not " : "") + "provisioned / "
+                    + (!mBackupOrRestoreInProgress ? "not " : "") + "in progress / "
+                    + (this.mPendingInits.size() == 0 ? "not " : "") + "pending init / "
+                    + (!mInitInProgress ? "not " : "") + "initializing");
+            pw.println("Last backup pass: " + mLastBackupPass
+                    + " (now = " + System.currentTimeMillis() + ')');
+            pw.println("  next scheduled: " + mNextBackupPass);
+
             pw.println("Available transports:");
             for (String t : listAllTransports()) {
-                String pad = (t.equals(mCurrentTransport)) ? "  * " : "    ";
-                pw.println(pad + t);
+                pw.println((t.equals(mCurrentTransport) ? "  * " : "    ") + t);
+                try {
+                    File dir = new File(mBaseStateDir, getTransport(t).transportDirName());
+                    for (File f : dir.listFiles()) {
+                        pw.println("       " + f.getName() + " - " + f.length() + " state bytes");
+                    }
+                } catch (RemoteException e) {
+                    Log.e(TAG, "Error in transportDirName()", e);
+                    pw.println("        Error: " + e);
+                }
             }
+
+            pw.println("Pending init: " + mPendingInits.size());
+            for (String s : mPendingInits) {
+                pw.println("    " + s);
+            }
+
             int N = mBackupParticipants.size();
-            pw.println("Participants: " + N);
+            pw.println("Participants:");
             for (int i=0; i<N; i++) {
                 int uid = mBackupParticipants.keyAt(i);
                 pw.print("  uid: ");
                 pw.println(uid);
                 HashSet<ApplicationInfo> participants = mBackupParticipants.valueAt(i);
                 for (ApplicationInfo app: participants) {
-                    pw.println("    " + app.toString());
+                    pw.println("    " + app.packageName);
                 }
             }
+
             pw.println("Ever backed up: " + mEverStoredApps.size());
             for (String pkg : mEverStoredApps) {
                 pw.println("    " + pkg);
             }
-            pw.println("Pending: " + mPendingBackups.size());
+
+            pw.println("Pending backup: " + mPendingBackups.size());
             for (BackupRequest req : mPendingBackups.values()) {
                 pw.println("    " + req);
             }
diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java
index 63845e9..9c64709 100644
--- a/services/java/com/android/server/ConnectivityService.java
+++ b/services/java/com/android/server/ConnectivityService.java
@@ -439,6 +439,13 @@
         return tracker != null && tracker.setRadio(turnOn);
     }
 
+    /**
+     * Used to notice when the calling process dies so we can self-expire
+     *
+     * Also used to know if the process has cleaned up after itself when
+     * our auto-expire timer goes off.  The timer has a link to an object.
+     *
+     */
     private class FeatureUser implements IBinder.DeathRecipient {
         int mNetworkType;
         String mFeature;
@@ -453,6 +460,7 @@
             mBinder = binder;
             mPid = getCallingPid();
             mUid = getCallingUid();
+
             try {
                 mBinder.linkToDeath(this, 0);
             } catch (RemoteException e) {
@@ -467,11 +475,17 @@
         public void binderDied() {
             Log.d(TAG, "ConnectivityService FeatureUser binderDied(" +
                     mNetworkType + ", " + mFeature + ", " + mBinder);
-            stopUsingNetworkFeature(mNetworkType, mFeature, mPid, mUid);
+            stopUsingNetworkFeature(this, false);
         }
 
+        public void expire() {
+            Log.d(TAG, "ConnectivityService FeatureUser expire(" +
+                    mNetworkType + ", " + mFeature + ", " + mBinder);
+            stopUsingNetworkFeature(this, false);
+        }
     }
 
+    // javadoc from interface
     public int startUsingNetworkFeature(int networkType, String feature,
             IBinder binder) {
         if (DBG) {
@@ -483,9 +497,7 @@
             return Phone.APN_REQUEST_FAILED;
         }
 
-        synchronized (mFeatureUsers) {
-            mFeatureUsers.add(new FeatureUser(networkType, feature, binder));
-        }
+        FeatureUser f = new FeatureUser(networkType, feature, binder);
 
         // TODO - move this into the MobileDataStateTracker
         int usedNetworkType = networkType;
@@ -513,10 +525,17 @@
                     return Phone.APN_TYPE_NOT_AVAILABLE;
                 }
 
-                if (!mNetRequestersPids[usedNetworkType].contains(currentPid)) {
-                    // this gets used for per-pid dns when connected
-                    mNetRequestersPids[usedNetworkType].add(currentPid);
+                synchronized(this) {
+                    mFeatureUsers.add(f);
+                    if (!mNetRequestersPids[usedNetworkType].contains(currentPid)) {
+                        // this gets used for per-pid dns when connected
+                        mNetRequestersPids[usedNetworkType].add(currentPid);
+                    }
                 }
+                mHandler.sendMessageDelayed(mHandler.obtainMessage(
+                        NetworkStateTracker.EVENT_RESTORE_DEFAULT_NETWORK,
+                        f), getRestoreDefaultNetworkDelay());
+
 
                 if ((ni.isConnectedOrConnecting() == true) &&
                         !network.isTeardownRequested()) {
@@ -533,22 +552,17 @@
                 // check if the radio in play can make another contact
                 // assume if cannot for now
 
-                // since we have to drop the default on this radio, setup
-                // an automatic event to switch back
-                if(mHandler.hasMessages(NetworkStateTracker.
-                        EVENT_RESTORE_DEFAULT_NETWORK, radio) ||
-                        radio.getNetworkInfo().isConnectedOrConnecting()) {
-                    mHandler.removeMessages(NetworkStateTracker.
-                            EVENT_RESTORE_DEFAULT_NETWORK,
-                            radio);
-                    mHandler.sendMessageDelayed(mHandler.obtainMessage(
-                            NetworkStateTracker.EVENT_RESTORE_DEFAULT_NETWORK,
-                            radio), getRestoreDefaultNetworkDelay());
-                }
                 if (DBG) Log.d(TAG, "reconnecting to special network");
                 network.reconnect();
                 return Phone.APN_REQUEST_STARTED;
             } else {
+                synchronized(this) {
+                    mFeatureUsers.add(f);
+                }
+                mHandler.sendMessageDelayed(mHandler.obtainMessage(
+                        NetworkStateTracker.EVENT_RESTORE_DEFAULT_NETWORK,
+                        f), getRestoreDefaultNetworkDelay());
+
                 return network.startUsingNetworkFeature(feature,
                         getCallingPid(), getCallingUid());
             }
@@ -556,13 +570,43 @@
         return Phone.APN_TYPE_NOT_AVAILABLE;
     }
 
+    // javadoc from interface
     public int stopUsingNetworkFeature(int networkType, String feature) {
-        return stopUsingNetworkFeature(networkType, feature, getCallingPid(),
-                getCallingUid());
+        int pid = getCallingPid();
+        int uid = getCallingUid();
+
+        FeatureUser u = null;
+        boolean found = false;
+
+        synchronized(this) {
+            for (int i = 0; i < mFeatureUsers.size() ; i++) {
+                u = (FeatureUser)mFeatureUsers.get(i);
+                if (uid == u.mUid && pid == u.mPid &&
+                        networkType == u.mNetworkType &&
+                        TextUtils.equals(feature, u.mFeature)) {
+                    found = true;
+                    break;
+                }
+            }
+        }
+        if (found && u != null) {
+            // stop regardless of how many other time this proc had called start
+            return stopUsingNetworkFeature(u, true);
+        } else {
+            // none found!
+            return 1;
+        }
     }
 
-    private int stopUsingNetworkFeature(int networkType, String feature,
-            int pid, int uid) {
+    private int stopUsingNetworkFeature(FeatureUser u, boolean ignoreDups) {
+        int networkType = u.mNetworkType;
+        String feature = u.mFeature;
+        int pid = u.mPid;
+        int uid = u.mUid;
+
+        NetworkStateTracker tracker = null;
+        boolean callTeardown = false;  // used to carry our decision outside of sync block
+
         if (DBG) {
             Log.d(TAG, "stopUsingNetworkFeature for net " + networkType +
                     ": " + feature);
@@ -572,55 +616,65 @@
             return -1;
         }
 
-        synchronized (mFeatureUsers) {
-            for (int i=0; i < mFeatureUsers.size(); i++) {
-                FeatureUser u = (FeatureUser)mFeatureUsers.get(i);
-                if (uid == u.mUid && pid == u.mPid &&
-                        networkType == u.mNetworkType &&
-                        TextUtils.equals(feature, u.mFeature)) {
-                    u.unlinkDeathRecipient();
-                    mFeatureUsers.remove(i);
-                    break;
-                }
-            }
-        }
-
-        // TODO - move to MobileDataStateTracker
-        int usedNetworkType = networkType;
-        if (networkType == ConnectivityManager.TYPE_MOBILE) {
-            if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_MMS)) {
-                usedNetworkType = ConnectivityManager.TYPE_MOBILE_MMS;
-            } else if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_SUPL)) {
-                usedNetworkType = ConnectivityManager.TYPE_MOBILE_SUPL;
-            } else if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_DUN)) {
-                usedNetworkType = ConnectivityManager.TYPE_MOBILE_DUN;
-            } else if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_HIPRI)) {
-                usedNetworkType = ConnectivityManager.TYPE_MOBILE_HIPRI;
-            }
-        }
-        NetworkStateTracker tracker =  mNetTrackers[usedNetworkType];
-        if(usedNetworkType != networkType) {
-            Integer currentPid = new Integer(pid);
-            if (mNetRequestersPids[usedNetworkType].remove(currentPid)) {
-                reassessPidDns(pid, true);
-            }
-            if (mNetRequestersPids[usedNetworkType].size() != 0) {
-                if (DBG) Log.d(TAG, "not tearing down special network - " +
-                        "others still using it");
+        // need to link the mFeatureUsers list with the mNetRequestersPids state in this
+        // sync block
+        synchronized(this) {
+            // check if this process still has an outstanding start request
+            if (!mFeatureUsers.contains(u)) {
                 return 1;
             }
-
-            tracker.teardown();
-            NetworkStateTracker radio = mNetTrackers[networkType];
-            // Check if we want to revert to the default
-            if (mHandler.hasMessages(NetworkStateTracker.
-                    EVENT_RESTORE_DEFAULT_NETWORK, radio)) {
-                mHandler.removeMessages(NetworkStateTracker.
-                        EVENT_RESTORE_DEFAULT_NETWORK, radio);
-                radio.reconnect();
+            u.unlinkDeathRecipient();
+            mFeatureUsers.remove(mFeatureUsers.indexOf(u));
+            // If we care about duplicate requests, check for that here.
+            //
+            // This is done to support the extension of a request - the app
+            // can request we start the network feature again and renew the
+            // auto-shutoff delay.  Normal "stop" calls from the app though
+            // do not pay attention to duplicate requests - in effect the
+            // API does not refcount and a single stop will counter multiple starts.
+            if (ignoreDups == false) {
+                for (int i = 0; i < mFeatureUsers.size() ; i++) {
+                    FeatureUser x = (FeatureUser)mFeatureUsers.get(i);
+                    if (x.mUid == u.mUid && x.mPid == u.mPid &&
+                            x.mNetworkType == u.mNetworkType &&
+                            TextUtils.equals(x.mFeature, u.mFeature)) {
+                        return 1;
+                    }
+                }
             }
+
+            // TODO - move to MobileDataStateTracker
+            int usedNetworkType = networkType;
+            if (networkType == ConnectivityManager.TYPE_MOBILE) {
+                if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_MMS)) {
+                    usedNetworkType = ConnectivityManager.TYPE_MOBILE_MMS;
+                } else if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_SUPL)) {
+                    usedNetworkType = ConnectivityManager.TYPE_MOBILE_SUPL;
+                } else if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_DUN)) {
+                    usedNetworkType = ConnectivityManager.TYPE_MOBILE_DUN;
+                } else if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_HIPRI)) {
+                    usedNetworkType = ConnectivityManager.TYPE_MOBILE_HIPRI;
+                }
+            }
+            tracker =  mNetTrackers[usedNetworkType];
+            if(usedNetworkType != networkType) {
+                Integer currentPid = new Integer(pid);
+                reassessPidDns(pid, true);
+                mNetRequestersPids[usedNetworkType].remove(currentPid);
+                if (mNetRequestersPids[usedNetworkType].size() != 0) {
+                    if (DBG) Log.d(TAG, "not tearing down special network - " +
+                           "others still using it");
+                    return 1;
+                }
+                callTeardown = true;
+            }
+        }
+
+        if (callTeardown) {
+            tracker.teardown();
             return 1;
         } else {
+            // do it the old fashioned way
             return tracker.stopUsingNetworkFeature(feature, pid, uid);
         }
     }
@@ -711,8 +765,11 @@
      */
     private void handleDisconnect(NetworkInfo info) {
 
-        if (DBG) Log.v(TAG, "Handle DISCONNECT for " + info.getTypeName());
         int prevNetType = info.getType();
+        if (DBG) {
+            Log.v(TAG, "Handle DISCONNECT for " + info.getTypeName() +
+                    (mNetAttributes[prevNetType].isDefault() ? ", a default network" : ""));
+        }
 
         mNetTrackers[prevNetType].setTeardownRequested(false);
         /*
@@ -752,7 +809,6 @@
          */
         NetworkStateTracker newNet = null;
         if (mNetAttributes[prevNetType].isDefault()) {
-            if (DBG) Log.d(TAG, "disconnecting a default network");
             if (mActiveDefaultNetwork == prevNetType) {
                 mActiveDefaultNetwork = -1;
             }
@@ -997,10 +1053,9 @@
      * table entries exist.
      */
     private void handleConnectivityChange() {
-        if (DBG) Log.d(TAG, "handleConnectivityChange");
         /*
          * If a non-default network is enabled, add the host routes that
-         * will allow it's DNS servers to be accessed.  Only 
+         * will allow it's DNS servers to be accessed.  Only
          * If both mobile and wifi are enabled, add the host routes that
          * will allow MMS traffic to pass on the mobile network. But
          * remove the default route for the mobile network, so that there
@@ -1093,21 +1148,21 @@
     }
 
     private void handleDnsConfigurationChange() {
-        if (DBG) Log.d(TAG, "handleDnsConfig Change");
         // add default net's dns entries
         for (int x = mPriorityList.length-1; x>= 0; x--) {
             int netType = mPriorityList[x];
             NetworkStateTracker nt = mNetTrackers[netType];
-            if (DBG) Log.d(TAG, " checking " + nt);
             if (nt != null && nt.getNetworkInfo().isConnected() &&
                     !nt.isTeardownRequested()) {
-                if (DBG) Log.d(TAG, "  connected");
                 String[] dnsList = nt.getNameServers();
                 if (mNetAttributes[netType].isDefault()) {
                     int j = 1;
                     for (String dns : dnsList) {
                         if (dns != null && !TextUtils.equals(dns, "0.0.0.0")) {
-                            if (DBG) Log.d(TAG, "  adding "+dns);
+                            if (DBG) {
+                                Log.d(TAG, "adding dns " + dns + " for " +
+                                        nt.getNetworkInfo().getTypeName());
+                            }
                             SystemProperties.set("net.dns" + j++, dns);
                         }
                     }
@@ -1231,17 +1286,8 @@
                     // fill me in
                     break;
                 case NetworkStateTracker.EVENT_RESTORE_DEFAULT_NETWORK:
-                    for (NetworkStateTracker net : mNetTrackers) {
-                        NetworkInfo i = net.getNetworkInfo();
-                        if (i.isConnected() &&
-                                !mNetAttributes[i.getType()].isDefault()) {
-                            if (DBG) {
-                                Log.d(TAG, "tearing down " + i +
-                                        " to restore the default network");
-                            }
-                            teardown(net);
-                        }
-                    }
+                    FeatureUser u = (FeatureUser)msg.obj;
+                    u.expire();
                     break;
             }
         }
diff --git a/services/java/com/android/server/MountService.java b/services/java/com/android/server/MountService.java
index f85d931..204389e 100644
--- a/services/java/com/android/server/MountService.java
+++ b/services/java/com/android/server/MountService.java
@@ -313,7 +313,7 @@
             setMediaStorageNotification(
                     com.android.internal.R.string.ext_media_safe_unmount_notification_title,
                     com.android.internal.R.string.ext_media_safe_unmount_notification_message,
-                    com.android.internal.R.drawable.stat_notify_sim_toolkit,
+                    com.android.internal.R.drawable.stat_notify_sdcard,
                     true, true, null);
             mShowSafeUnmountNotificationWhenUnmounted = false;
         } else {
@@ -333,7 +333,7 @@
         setMediaStorageNotification(
                 com.android.internal.R.string.ext_media_checking_notification_title,
                 com.android.internal.R.string.ext_media_checking_notification_message,
-                com.android.internal.R.drawable.stat_notify_sim_toolkit,
+                com.android.internal.R.drawable.stat_notify_sdcard_prepare,
                 true, false, null);
 
         updateUsbMassStorageNotification(true, false);
diff --git a/services/java/com/android/server/PackageManagerBackupAgent.java b/services/java/com/android/server/PackageManagerBackupAgent.java
index 772ddeb..dbd1826 100644
--- a/services/java/com/android/server/PackageManagerBackupAgent.java
+++ b/services/java/com/android/server/PackageManagerBackupAgent.java
@@ -51,7 +51,7 @@
  */
 public class PackageManagerBackupAgent extends BackupAgent {
     private static final String TAG = "PMBA";
-    private static final boolean DEBUG = true;
+    private static final boolean DEBUG = false;
 
     // key under which we store global metadata (individual app metadata
     // is stored using the package name as a key)
@@ -195,7 +195,6 @@
 
                         byte[] sigs = flattenSignatureArray(info.signatures);
 
-                        // !!! TODO: take out this debugging
                         if (DEBUG) {
                             Log.v(TAG, "+ metadata for " + packName
                                     + " version=" + info.versionCode
@@ -214,7 +213,6 @@
             // mentioned in the saved state file, but appear to no longer be present
             // on the device.  Write a deletion entity for them.
             for (String app : mExisting) {
-                // !!! TODO: take out this msg
                 if (DEBUG) Log.v(TAG, "- removing metadata for deleted pkg " + app);
                 try {
                     data.writeEntityHeader(app, -1);
@@ -266,7 +264,6 @@
                 mStoredSdkVersion = storedSdkVersion;
                 mStoredIncrementalVersion = in.readUTF();
                 mHasMetadata = true;
-                // !!! TODO: remove this debugging output
                 if (DEBUG) {
                     Log.i(TAG, "Restore set version " + storedSystemVersion
                             + " is compatible with OS version " + Build.VERSION.SDK_INT
@@ -277,7 +274,6 @@
                 // it's a file metadata record
                 int versionCode = in.readInt();
                 Signature[] sigs = unflattenSignatureArray(in);
-//              !!! TODO: take out this debugging
                 if (DEBUG) {
                     Log.i(TAG, "   restored metadata for " + key
                             + " dataSize=" + dataSize
@@ -326,7 +322,7 @@
 
         try {
             int num = in.readInt();
-            Log.v(TAG, " ... unflatten read " + num);
+            if (DEBUG) Log.v(TAG, " ... unflatten read " + num);
 
             // Sensical?
             if (num > 20) {
@@ -347,7 +343,7 @@
                 Log.w(TAG, "Empty signature block found");
             }
         } catch (IOException e) {
-            Log.d(TAG, "Unable to unflatten sigs");
+            Log.e(TAG, "Unable to unflatten sigs");
             return null;
         }
 
diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java
index 867f215..5eb78c3 100644
--- a/services/java/com/android/server/PackageManagerService.java
+++ b/services/java/com/android/server/PackageManagerService.java
@@ -178,6 +178,7 @@
     final File mFrameworkDir;
     final File mSystemAppDir;
     final File mAppInstallDir;
+    final File mDalvikCacheDir;
 
     // Directory containing the private parts (e.g. code and non-resource assets) of forward-locked
     // apps.
@@ -438,8 +439,11 @@
             final HashSet<String> libFiles = new HashSet<String>();
             
             mFrameworkDir = new File(Environment.getRootDirectory(), "framework");
+            mDalvikCacheDir = new File(dataDir, "dalvik-cache");
             
             if (mInstaller != null) {
+                boolean didDexOpt = false;
+                
                 /**
                  * Out of paranoia, ensure that everything in the boot class
                  * path has been dexed.
@@ -452,6 +456,7 @@
                             if (dalvik.system.DexFile.isDexOptNeeded(paths[i])) {
                                 libFiles.add(paths[i]);
                                 mInstaller.dexopt(paths[i], Process.SYSTEM_UID, true);
+                                didDexOpt = true;
                             }
                         } catch (FileNotFoundException e) {
                             Log.w(TAG, "Boot class path not found: " + paths[i]);
@@ -474,6 +479,7 @@
                             if (dalvik.system.DexFile.isDexOptNeeded(lib)) {
                                 libFiles.add(lib);
                                 mInstaller.dexopt(lib, Process.SYSTEM_UID, true);
+                                didDexOpt = true;
                             }
                         } catch (FileNotFoundException e) {
                             Log.w(TAG, "Library not found: " + lib);
@@ -493,7 +499,7 @@
                  * run from a non-root shell.
                  */
                 String[] frameworkFiles = mFrameworkDir.list();
-                if (frameworkFiles != null && mInstaller != null) {
+                if (frameworkFiles != null) {
                     for (int i=0; i<frameworkFiles.length; i++) {
                         File libPath = new File(mFrameworkDir, frameworkFiles[i]);
                         String path = libPath.getPath();
@@ -508,6 +514,7 @@
                         try {
                             if (dalvik.system.DexFile.isDexOptNeeded(path)) {
                                 mInstaller.dexopt(path, Process.SYSTEM_UID, true);
+                                didDexOpt = true;
                             }
                         } catch (FileNotFoundException e) {
                             Log.w(TAG, "Jar not found: " + path);
@@ -516,6 +523,25 @@
                         }
                     }
                 }
+                
+                if (didDexOpt) {
+                    // If we had to do a dexopt of one of the previous
+                    // things, then something on the system has changed.
+                    // Consider this significant, and wipe away all other
+                    // existing dexopt files to ensure we don't leave any
+                    // dangling around.
+                    String[] files = mDalvikCacheDir.list();
+                    if (files != null) {
+                        for (int i=0; i<files.length; i++) {
+                            String fn = files[i];
+                            if (fn.startsWith("data@app@")
+                                    || fn.startsWith("data@app-private@")) {
+                                Log.i(TAG, "Pruning dalvik file: " + fn);
+                                (new File(mDalvikCacheDir, fn)).delete();
+                            }
+                        }
+                    }
+                }
             }
             
             mFrameworkInstallObserver = new AppDirObserver(
@@ -641,6 +667,27 @@
         final File permFile = new File(Environment.getRootDirectory(),
                 "etc/permissions/platform.xml");
         readPermissionsFromXml(permFile);
+        
+        StringBuilder sb = new StringBuilder(128);
+        sb.append("Libs:");
+        Iterator<String> it = mSharedLibraries.keySet().iterator();
+        while (it.hasNext()) {
+            sb.append(' ');
+            String name = it.next();
+            sb.append(name);
+            sb.append(':');
+            sb.append(mSharedLibraries.get(name));
+        }
+        Log.i(TAG, sb.toString());
+        
+        sb.setLength(0);
+        sb.append("Features:");
+        it = mAvailableFeatures.keySet().iterator();
+        while (it.hasNext()) {
+            sb.append(' ');
+            sb.append(it.next());
+        }
+        Log.i(TAG, sb.toString());
     }
     
     private void readPermissionsFromXml(File permFile) {        
@@ -730,7 +777,7 @@
                         Log.w(TAG, "<library> without file at "
                                 + parser.getPositionDescription());
                     } else {
-                        Log.i(TAG, "Got library " + lname + " in " + lfile);
+                        //Log.i(TAG, "Got library " + lname + " in " + lfile);
                         mSharedLibraries.put(lname, lfile);
                     }
                     XmlUtils.skipCurrentTag(parser);
@@ -742,7 +789,7 @@
                         Log.w(TAG, "<feature> without name at "
                                 + parser.getPositionDescription());
                     } else {
-                        Log.i(TAG, "Got feature " + fname);
+                        //Log.i(TAG, "Got feature " + fname);
                         FeatureInfo fi = new FeatureInfo();
                         fi.name = fname;
                         mAvailableFeatures.put(fname, fi);
@@ -1974,27 +2021,25 @@
         }
         if ((parseFlags&PackageParser.PARSE_IS_SYSTEM) != 0) {
             // Check for updated system applications here
-            if (updatedPkg != null) {
-                if ((ps != null) && (!ps.codePath.getPath().equals(scanFile.getPath()))) {
-                    if (pkg.mVersionCode <= ps.versionCode) {
-                     // The system package has been updated and the code path does not match
-                        // Ignore entry. Just return
-                        Log.w(TAG, "Package:" + pkg.packageName +
-                                " has been updated. Ignoring the one from path:"+scanFile);
-                        mLastScanError = PackageManager.INSTALL_FAILED_DUPLICATE_PACKAGE;
-                        return null;
-                    } else {
-                        // Delete the older apk pointed to by ps
-                        // At this point, its safely assumed that package installation for
-                        // apps in system partition will go through. If not there won't be a working
-                        // version of the app
-                        synchronized (mPackages) {
-                            // Just remove the loaded entries from package lists.
-                            mPackages.remove(ps.name);
-                        }
-                        deletePackageResourcesLI(ps.name, ps.codePathString, ps.resourcePathString);
-                        mSettings.enableSystemPackageLP(ps.name);
+            if ((ps != null) && (!ps.codePath.equals(scanFile))) {
+                if (pkg.mVersionCode < ps.versionCode) {
+                    // The system package has been updated and the code path does not match
+                    // Ignore entry. Just return
+                    Log.w(TAG, "Package:" + pkg.packageName +
+                            " has been updated. Ignoring the one from path:"+scanFile);
+                    mLastScanError = PackageManager.INSTALL_FAILED_DUPLICATE_PACKAGE;
+                    return null;
+                } else {
+                    // Delete the older apk pointed to by ps
+                    // At this point, its safely assumed that package installation for
+                    // apps in system partition will go through. If not there won't be a working
+                    // version of the app
+                    synchronized (mPackages) {
+                        // Just remove the loaded entries from package lists.
+                        mPackages.remove(ps.name);
                     }
+                    deletePackageResourcesLI(ps.name, ps.codePathString, ps.resourcePathString);
+                    mSettings.enableSystemPackageLP(ps.name);
                 }
             }
         }
@@ -2004,7 +2049,7 @@
             scanMode |= SCAN_FORWARD_LOCKED;
         }
         File resFile = destResourceFile;
-        if ((scanMode & SCAN_FORWARD_LOCKED) != 0) {
+        if (ps != null && ((scanMode & SCAN_FORWARD_LOCKED) != 0)) {
             resFile = getFwdLockedResource(ps.name);
         }
         // Note that we invoke the following method only if we are about to unpack an application
@@ -3814,14 +3859,13 @@
             final ApplicationInfo deletedPackageAppInfo = deletedPackage.applicationInfo;
             final ApplicationInfo installedPackageAppInfo =
                 newPackage.applicationInfo;
-            if (!deletedPackageAppInfo.sourceDir
-                    .equals(installedPackageAppInfo.sourceDir)) {
-                new File(deletedPackageAppInfo.sourceDir).delete();
-            }
-            if (!deletedPackageAppInfo.publicSourceDir
-                    .equals(installedPackageAppInfo.publicSourceDir)) {
-                new File(deletedPackageAppInfo.publicSourceDir).delete();
-            }
+            deletePackageResourcesLI(pkgName,
+                    !deletedPackageAppInfo.sourceDir
+                            .equals(installedPackageAppInfo.sourceDir)
+                            ? deletedPackageAppInfo.sourceDir : null,
+                    !deletedPackageAppInfo.publicSourceDir
+                            .equals(installedPackageAppInfo.publicSourceDir)
+                            ? deletedPackageAppInfo.publicSourceDir : null);
             //update signature on the new package setting
             //this should always succeed, since we checked the
             //signature earlier.
@@ -4504,22 +4548,30 @@
 
     private void deletePackageResourcesLI(String packageName,
             String sourceDir, String publicSourceDir) {
-        File sourceFile = new File(sourceDir);
-        if (!sourceFile.exists()) {
-            Log.w(TAG, "Package source " + sourceDir + " does not exist.");
+        if (sourceDir != null) {
+            File sourceFile = new File(sourceDir);
+            if (!sourceFile.exists()) {
+                Log.w(TAG, "Package source " + sourceDir + " does not exist.");
+            }
+            // Delete application's code and resources
+            sourceFile.delete();
+            if (mInstaller != null) {
+                int retCode = mInstaller.rmdex(sourceFile.toString());
+                if (retCode < 0) {
+                    Log.w(TAG, "Couldn't remove dex file for package: "
+                            + packageName + " at location "
+                            + sourceFile.toString() + ", retcode=" + retCode);
+                    // we don't consider this to be a failure of the core package deletion
+                }
+            }
         }
-        // Delete application's code and resources
-        sourceFile.delete();
-        final File publicSourceFile = new File(publicSourceDir);
-        if (publicSourceFile.exists()) {
-            publicSourceFile.delete();
-        }
-        if (mInstaller != null) {
-            int retCode = mInstaller.rmdex(sourceFile.toString());
-            if (retCode < 0) {
-                Log.w(TAG, "Couldn't remove dex file for package: "
-                        + packageName + " at location " + sourceFile.toString() + ", retcode=" + retCode);
-                // we don't consider this to be a failure of the core package deletion
+        if (publicSourceDir != null && !publicSourceDir.equals(sourceDir)) {
+            final File publicSourceFile = new File(publicSourceDir);
+            if (!publicSourceFile.exists()) {
+                Log.w(TAG, "Package public source " + publicSourceFile + " does not exist.");
+            }
+            if (publicSourceFile.exists()) {
+                publicSourceFile.delete();
             }
         }
     }
@@ -5725,7 +5777,7 @@
     }
 
     static class GrantedPermissions {
-        final int pkgFlags;
+        int pkgFlags;
         
         HashSet<String> grantedPermissions = new HashSet<String>();
         int[] gids;
@@ -6143,10 +6195,10 @@
                         // Let the app continue with previous uid if code path changes.
                         reportSettingsProblem(Log.WARN,
                                 "Package " + name + " codePath changed from " + p.codePath
-                                + " to " + codePath + "; Retaining data and using new code from " +
-                                codePath);
+                                + " to " + codePath + "; Retaining data and using new");
                     }
-                } else if (p.sharedUser != sharedUser) {
+                }
+                if (p.sharedUser != sharedUser) {
                     reportSettingsProblem(Log.WARN,
                             "Package " + name + " shared user changed from "
                             + (p.sharedUser != null ? p.sharedUser.name : "<nothing>")
@@ -6154,6 +6206,13 @@
                             + (sharedUser != null ? sharedUser.name : "<nothing>")
                             + "; replacing with new");
                     p = null;
+                } else {
+                    if ((pkgFlags&ApplicationInfo.FLAG_SYSTEM) != 0) {
+                        // If what we are scanning is a system package, then
+                        // make it so, regardless of whether it was previously
+                        // installed only in the data partition.
+                        p.pkgFlags |= ApplicationInfo.FLAG_SYSTEM;
+                    }
                 }
             }
             if (p == null) {
@@ -6214,14 +6273,14 @@
             // Update code path if needed
             if (!codePath.toString().equalsIgnoreCase(p.codePathString)) {
                 Log.w(TAG, "Code path for pkg : " + p.pkg.packageName +
-                        " changing form " + p.codePathString + " to " + codePath);
+                        " changing from " + p.codePathString + " to " + codePath);
                 p.codePath = codePath;
                 p.codePathString = codePath.toString();
             }
             //Update resource path if needed
             if (!resourcePath.toString().equalsIgnoreCase(p.resourcePathString)) {
                 Log.w(TAG, "Resource path for pkg : " + p.pkg.packageName +
-                        " changing form " + p.resourcePathString + " to " + resourcePath);
+                        " changing from " + p.resourcePathString + " to " + resourcePath);
                 p.resourcePath = resourcePath;
                 p.resourcePathString = resourcePath.toString();
             }
@@ -6470,15 +6529,19 @@
                         |FileUtils.S_IRGRP|FileUtils.S_IWGRP
                         |FileUtils.S_IROTH,
                         -1, -1);
+                return;
 
             } catch(XmlPullParserException e) {
                 Log.w(TAG, "Unable to write package manager settings, current changes will be lost at reboot", e);
-
             } catch(java.io.IOException e) {
                 Log.w(TAG, "Unable to write package manager settings, current changes will be lost at reboot", e);
-
             }
-
+            // Clean up partially written file
+            if (mSettingsFilename.exists()) {
+                if (!mSettingsFilename.delete()) {
+                    Log.i(TAG, "Failed to clean up mangled file: " + mSettingsFilename);
+                }
+            }
             //Debug.stopMethodTracing();
         }
        
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index 65b3e3f..e5c6010 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -119,6 +119,7 @@
 
             mContentResolver = context.getContentResolver();
 
+            // The AccountManager must come before the ContentService
             try {
                 Log.i(TAG, "Account Manager");
                 ServiceManager.addService(Context.ACCOUNT_SERVICE,
diff --git a/services/java/com/android/server/WifiService.java b/services/java/com/android/server/WifiService.java
index cc1b697..a3589c7 100644
--- a/services/java/com/android/server/WifiService.java
+++ b/services/java/com/android/server/WifiService.java
@@ -1324,9 +1324,16 @@
                 if (!shouldWifiStayAwake(stayAwakeConditions, mPluggedType)) {
                     WifiInfo info = mWifiStateTracker.requestConnectionInfo();
                     if (info.getSupplicantState() != SupplicantState.COMPLETED) {
-                        // do not keep Wifi awake when screen is off if Wifi is not associated
-                        mDeviceIdle = true;
-                        updateWifiState();
+                        // we used to go to sleep immediately, but this caused some race conditions
+                        // we don't have time to track down for this release.  Delay instead, but not
+                        // as long as we would if connected (below)
+                        // TODO - fix the race conditions and switch back to the immediate turn-off
+                        long triggerTime = System.currentTimeMillis() + (2*60*1000); // 2 min
+                        Log.d(TAG, "setting ACTION_DEVICE_IDLE timer for 120,000 ms");
+                        mAlarmManager.set(AlarmManager.RTC_WAKEUP, triggerTime, mIdleIntent);
+                        //  // do not keep Wifi awake when screen is off if Wifi is not associated
+                        //  mDeviceIdle = true;
+                        //  updateWifiState();
                     } else {
                         long triggerTime = System.currentTimeMillis() + idleMillis;
                         Log.d(TAG, "setting ACTION_DEVICE_IDLE timer for " + idleMillis + "ms");
diff --git a/services/java/com/android/server/WindowManagerService.java b/services/java/com/android/server/WindowManagerService.java
index 01a4122..ed64766 100644
--- a/services/java/com/android/server/WindowManagerService.java
+++ b/services/java/com/android/server/WindowManagerService.java
@@ -233,8 +233,8 @@
             mPolicy.enableKeyguard(false);
         }
         public void released() {
+            mPolicy.enableKeyguard(true);
             synchronized (mKeyguardDisabled) {
-                mPolicy.enableKeyguard(true);
                 mWaitingUntilKeyguardReenabled = false;
                 mKeyguardDisabled.notifyAll();
             }
@@ -1396,12 +1396,15 @@
                 }
             }
             
-        } else {
+        } else if (mLowerWallpaperTarget != null) {
             // Is it time to stop animating?
-            if (mLowerWallpaperTarget == null
-                    || mLowerWallpaperTarget.mAppToken.animation == null
-                    || mUpperWallpaperTarget == null
-                    || mUpperWallpaperTarget.mAppToken.animation == null) {
+            boolean lowerAnimating = mLowerWallpaperTarget.mAnimation != null
+                    || (mLowerWallpaperTarget.mAppToken != null
+                            && mLowerWallpaperTarget.mAppToken.animation != null);
+            boolean upperAnimating = mUpperWallpaperTarget.mAnimation != null
+                    || (mUpperWallpaperTarget.mAppToken != null
+                            && mUpperWallpaperTarget.mAppToken.animation != null);
+            if (!lowerAnimating || !upperAnimating) {
                 if (DEBUG_WALLPAPER) {
                     Log.v(TAG, "No longer animating wallpaper targets!");
                 }
@@ -7069,6 +7072,11 @@
                     h = mRequestedHeight;
                 }
 
+                // Something is wrong and SurfaceFlinger will not like this,
+                // try to revert to sane values
+                if (w <= 0) w = 1;
+                if (h <= 0) h = 1;
+
                 try {
                     mSurface = new Surface(
                             mSession.mSurfaceSession, mSession.mPid,
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index c6c6d55..3daae29 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -140,7 +140,8 @@
     static final boolean DEBUG_PROVIDER = localLOGV || false;
     static final boolean DEBUG_USER_LEAVING = localLOGV || false;
     static final boolean DEBUG_RESULTS = localLOGV || false;
-    static final boolean DEBUG_BACKUP = localLOGV || true;
+    static final boolean DEBUG_BACKUP = localLOGV || false;
+    static final boolean DEBUG_CONFIGURATION = localLOGV || false;
     static final boolean VALIDATE_TOKENS = false;
     static final boolean SHOW_ACTIVITY_START_TIME = true;
     
@@ -1092,7 +1093,7 @@
                 // so we need to be conservative and assume it isn't.
                 IBinder token = (IBinder)msg.obj;
                 Log.w(TAG, "Activity idle timeout for " + token);
-                activityIdleInternal(token, true);
+                activityIdleInternal(token, true, null);
             } break;
             case DESTROY_TIMEOUT_MSG: {
                 IBinder token = (IBinder)msg.obj;
@@ -1103,7 +1104,7 @@
             } break;
             case IDLE_NOW_MSG: {
                 IBinder token = (IBinder)msg.obj;
-                activityIdle(token);
+                activityIdle(token, null);
             } break;
             case SERVICE_TIMEOUT_MSG: {
                 if (mDidDexOpt) {
@@ -2251,7 +2252,7 @@
             mHandler.sendMessage(msg);
         }
 
-        reportResumedActivity(next);
+        reportResumedActivityLocked(next);
         
         next.thumbnail = null;
         setFocusedActivityLocked(next);
@@ -2524,7 +2525,7 @@
         }
     }
     
-    private void reportResumedActivity(HistoryRecord r) {
+    private void reportResumedActivityLocked(HistoryRecord r) {
         //Log.i(TAG, "**** REPORT RESUME: " + r);
         
         final int identHash = System.identityHashCode(r);
@@ -5295,6 +5296,8 @@
             if (app.instrumentationClass != null) {
                 ensurePackageDexOpt(app.instrumentationClass.getPackageName());
             }
+            if (DEBUG_CONFIGURATION) Log.v(TAG, "Binding proc "
+                    + processName + " with config " + mConfiguration);
             thread.bindApplication(processName, app.instrumentationInfo != null
                     ? app.instrumentationInfo : app.info, providers,
                     app.instrumentationClass, app.instrumentationProfileFile,
@@ -5416,9 +5419,9 @@
         }
     }
 
-    public final void activityIdle(IBinder token) {
+    public final void activityIdle(IBinder token, Configuration config) {
         final long origId = Binder.clearCallingIdentity();
-        activityIdleInternal(token, false);
+        activityIdleInternal(token, false, config);
         Binder.restoreCallingIdentity(origId);
     }
 
@@ -5471,7 +5474,8 @@
         mWindowManager.enableScreenAfterBoot();
     }
 
-    final void activityIdleInternal(IBinder token, boolean fromTimeout) {
+    final void activityIdleInternal(IBinder token, boolean fromTimeout,
+            Configuration config) {
         if (localLOGV) Log.v(TAG, "Activity idle: " + token);
 
         ArrayList<HistoryRecord> stops = null;
@@ -5494,6 +5498,15 @@
             if (index >= 0) {
                 HistoryRecord r = (HistoryRecord)mHistory.get(index);
 
+                // This is a hack to semi-deal with a race condition
+                // in the client where it can be constructed with a
+                // newer configuration from when we asked it to launch.
+                // We'll update with whatever configuration it now says
+                // it used to launch.
+                if (config != null) {
+                    r.configuration = config;
+                }
+                
                 // No longer need to keep the device awake.
                 if (mResumedActivity == r && mLaunchingActivity.isHeld()) {
                     mHandler.removeMessages(LAUNCH_TIMEOUT_MSG);
@@ -8327,6 +8340,7 @@
             // This happens before any activities are started, so we can
             // change mConfiguration in-place.
             mConfiguration.updateFrom(configuration);
+            if (DEBUG_CONFIGURATION) Log.v(TAG, "Initial config: " + mConfiguration);
         }
     }
 
@@ -10337,9 +10351,11 @@
         try {
             if (DEBUG_SERVICE) Log.v(TAG, "Scheduling start service: "
                     + r.name + " " + r.intent);
+            mStringBuilder.setLength(0);
+            r.intent.getIntent().toShortString(mStringBuilder, false, true);
             EventLog.writeEvent(LOG_AM_CREATE_SERVICE,
                     System.identityHashCode(r), r.shortName,
-                    r.intent.getIntent().toString(), r.app.pid);
+                    mStringBuilder.toString(), r.app.pid);
             synchronized (r.stats.getBatteryStats()) {
                 r.stats.startLaunchedLocked();
             }
@@ -11369,8 +11385,7 @@
                 try {
                     proc.thread.scheduleCreateBackupAgent(app, backupMode);
                 } catch (RemoteException e) {
-                    // !!! TODO: notify the backup manager that we crashed, or rely on
-                    // death notices, or...?
+                    // Will time out on the backup manager side
                 }
             } else {
                 if (DEBUG_BACKUP) Log.v(TAG, "Agent proc not running, waiting for attach");
@@ -12714,7 +12729,7 @@
             Configuration newConfig = new Configuration(mConfiguration);
             changes = newConfig.updateFrom(values);
             if (changes != 0) {
-                if (DEBUG_SWITCH) {
+                if (DEBUG_SWITCH || DEBUG_CONFIGURATION) {
                     Log.i(TAG, "Updating configuration to: " + values);
                 }
                 
@@ -12738,6 +12753,8 @@
                     ProcessRecord app = mLRUProcesses.get(i);
                     try {
                         if (app.thread != null) {
+                            if (DEBUG_CONFIGURATION) Log.v(TAG, "Sending to proc "
+                                    + app.processName + " new config " + mConfiguration);
                             app.thread.scheduleConfigurationChanged(mConfiguration);
                         }
                     } catch (Exception e) {
@@ -12807,6 +12824,7 @@
         if (andResume) {
             r.results = null;
             r.newIntents = null;
+            reportResumedActivityLocked(r);
         }
 
         return true;
@@ -12821,19 +12839,21 @@
      */
     private final boolean ensureActivityConfigurationLocked(HistoryRecord r,
             int globalChanges) {
-        if (DEBUG_SWITCH) Log.i(TAG, "Ensuring correct configuration: " + r);
+        if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Log.v(TAG,
+                "Ensuring correct configuration: " + r);
         
         // Short circuit: if the two configurations are the exact same
         // object (the common case), then there is nothing to do.
         Configuration newConfig = mConfiguration;
         if (r.configuration == newConfig) {
-            if (DEBUG_SWITCH) Log.i(TAG, "Configuration unchanged in " + r);
+            if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Log.v(TAG,
+                    "Configuration unchanged in " + r);
             return true;
         }
         
         // We don't worry about activities that are finishing.
         if (r.finishing) {
-            if (DEBUG_SWITCH) Log.i(TAG,
+            if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Log.v(TAG,
                     "Configuration doesn't matter in finishing " + r);
             r.stopFreezingScreenLocked(false);
             return true;
@@ -12847,7 +12867,7 @@
         // If the activity isn't currently running, just leave the new
         // configuration and it will pick that up next time it starts.
         if (r.app == null || r.app.thread == null) {
-            if (DEBUG_SWITCH) Log.i(TAG,
+            if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Log.v(TAG,
                     "Configuration doesn't matter not running " + r);
             r.stopFreezingScreenLocked(false);
             return true;
@@ -12859,22 +12879,26 @@
 
             // Figure out what has changed between the two configurations.
             int changes = oldConfig.diff(newConfig);
-            if (DEBUG_SWITCH) {
-                Log.i(TAG, "Checking to restart " + r.info.name + ": changed=0x"
+            if (DEBUG_SWITCH || DEBUG_CONFIGURATION) {
+                Log.v(TAG, "Checking to restart " + r.info.name + ": changed=0x"
                         + Integer.toHexString(changes) + ", handles=0x"
-                        + Integer.toHexString(r.info.configChanges));
+                        + Integer.toHexString(r.info.configChanges)
+                        + ", newConfig=" + newConfig);
             }
             if ((changes&(~r.info.configChanges)) != 0) {
                 // Aha, the activity isn't handling the change, so DIE DIE DIE.
                 r.configChangeFlags |= changes;
                 r.startFreezingScreenLocked(r.app, globalChanges);
                 if (r.app == null || r.app.thread == null) {
-                    if (DEBUG_SWITCH) Log.i(TAG, "Switch is destroying non-running " + r);
+                    if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Log.v(TAG,
+                            "Switch is destroying non-running " + r);
                     destroyActivityLocked(r, true);
                 } else if (r.state == ActivityState.PAUSING) {
                     // A little annoying: we are waiting for this activity to
                     // finish pausing.  Let's not do anything now, but just
                     // flag that it needs to be restarted when done pausing.
+                    if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Log.v(TAG,
+                            "Switch is skipping already pausing " + r);
                     r.configDestroy = true;
                     return true;
                 } else if (r.state == ActivityState.RESUMED) {
@@ -12882,11 +12906,13 @@
                     // and we need to restart the top, resumed activity.
                     // Instead of doing the normal handshaking, just say
                     // "restart!".
-                    if (DEBUG_SWITCH) Log.i(TAG, "Switch is restarting resumed " + r);
+                    if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Log.v(TAG,
+                            "Switch is restarting resumed " + r);
                     relaunchActivityLocked(r, r.configChangeFlags, true);
                     r.configChangeFlags = 0;
                 } else {
-                    if (DEBUG_SWITCH) Log.i(TAG, "Switch is restarting non-resumed " + r);
+                    if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Log.v(TAG,
+                            "Switch is restarting non-resumed " + r);
                     relaunchActivityLocked(r, r.configChangeFlags, false);
                     r.configChangeFlags = 0;
                 }
@@ -12904,6 +12930,7 @@
         // it last got.
         if (r.app != null && r.app.thread != null) {
             try {
+                if (DEBUG_CONFIGURATION) Log.v(TAG, "Sending new config to " + r);
                 r.app.thread.scheduleActivityConfigurationChanged(r);
             } catch (RemoteException e) {
                 // If process died, whatever.
diff --git a/services/java/com/android/server/am/UsageStatsService.java b/services/java/com/android/server/am/UsageStatsService.java
index 66868a3..373b44e 100644
--- a/services/java/com/android/server/am/UsageStatsService.java
+++ b/services/java/com/android/server/am/UsageStatsService.java
@@ -381,7 +381,10 @@
             mFileLeaf = getCurrentDateStr(FILE_PREFIX);
             // Copy current file to back up
             File backupFile =  new File(mFile.getPath() + ".bak");
-            mFile.renameTo(backupFile);
+            if (!mFile.renameTo(backupFile)) {
+                Log.w(TAG, "Failed to persist new stats");
+                return;
+            }
             try {
                 // Write mStats to file
                 writeStatsFLOCK();
diff --git a/services/java/com/android/server/status/StatusBarPolicy.java b/services/java/com/android/server/status/StatusBarPolicy.java
index 6570bcd..6d54cae 100644
--- a/services/java/com/android/server/status/StatusBarPolicy.java
+++ b/services/java/com/android/server/status/StatusBarPolicy.java
@@ -934,10 +934,10 @@
         else if (evdoDbm >= -105) levelEvdoDbm = 1;
         else levelEvdoDbm = 0;
 
-        if (evdoSnr > 7) levelEvdoSnr = 4;
-        else if (evdoSnr > 5) levelEvdoSnr = 3;
-        else if (evdoSnr > 3) levelEvdoSnr = 2;
-        else if (evdoSnr > 1) levelEvdoSnr = 1;
+        if (evdoSnr >= 7) levelEvdoSnr = 4;
+        else if (evdoSnr >= 5) levelEvdoSnr = 3;
+        else if (evdoSnr >= 3) levelEvdoSnr = 2;
+        else if (evdoSnr >= 1) levelEvdoSnr = 1;
         else levelEvdoSnr = 0;
 
         return (levelEvdoDbm < levelEvdoSnr) ? levelEvdoDbm : levelEvdoSnr;
diff --git a/telephony/java/android/telephony/NeighboringCellInfo.java b/telephony/java/android/telephony/NeighboringCellInfo.java
index d698169..1d69761 100644
--- a/telephony/java/android/telephony/NeighboringCellInfo.java
+++ b/telephony/java/android/telephony/NeighboringCellInfo.java
@@ -75,6 +75,7 @@
      * the radio network type at that moment. Its constructor needs radio network
      * type.
      */
+    @Deprecated
     public NeighboringCellInfo() {
         mRssi = UNKNOWN_RSSI;
         mLac = UNKNOWN_CID;
@@ -91,6 +92,7 @@
      * the radio network type at that moment. Its constructor needs radio network
      * type.
      */
+    @Deprecated
     public NeighboringCellInfo(int rssi, int cid) {
         mRssi = rssi;
         mCid = cid;
@@ -228,6 +230,7 @@
      * the radio network type at that moment. It shouldn't be changed after
      * creation.
      */
+    @Deprecated
     public void setCid(int cid) {
         mCid = cid;
     }
@@ -240,6 +243,7 @@
      * the radio network type at that moment. It shouldn't be changed after
      * creation.
      */
+    @Deprecated
     public void setRssi(int rssi) {
         mRssi = rssi;
     }
diff --git a/telephony/java/android/telephony/PhoneNumberUtils.java b/telephony/java/android/telephony/PhoneNumberUtils.java
index 3265708..1aa1c76 100644
--- a/telephony/java/android/telephony/PhoneNumberUtils.java
+++ b/telephony/java/android/telephony/PhoneNumberUtils.java
@@ -302,10 +302,22 @@
      */
     public static boolean compare(String a, String b) {
         // We've used loose comparation at least Eclair, which may change in the future.
+
         return compare(a, b, false);
     }
 
     /**
+     * Compare phone numbers a and b, and return true if they're identical
+     * enough for caller ID purposes. Checks a resource to determine whether
+     * to use a strict or loose comparison algorithm.
+     */
+    public static boolean compare(Context context, String a, String b) {
+        boolean useStrict = context.getResources().getBoolean(
+               com.android.internal.R.bool.config_use_strict_phone_number_comparation);
+        return compare(a, b, useStrict);
+    }
+
+    /**
      * @hide only for testing.
      */
     public static boolean compare(String a, String b, boolean useStrictComparation) {
diff --git a/telephony/java/com/android/internal/telephony/Connection.java b/telephony/java/com/android/internal/telephony/Connection.java
index a48900a..37e8a99 100644
--- a/telephony/java/com/android/internal/telephony/Connection.java
+++ b/telephony/java/com/android/internal/telephony/Connection.java
@@ -59,6 +59,7 @@
         CDMA_ACCESS_FAILURE,
         CDMA_PREEMPTED,
         CDMA_NOT_EMERGENCY,              /* not an emergency call */
+        CDMA_ACCESS_BLOCKED,            /* Access Blocked by CDMA network */
         ERROR_UNSPECIFIED
     }
 
diff --git a/telephony/java/com/android/internal/telephony/DataConnectionTracker.java b/telephony/java/com/android/internal/telephony/DataConnectionTracker.java
index 1f0e5a5..52c8b1f 100644
--- a/telephony/java/com/android/internal/telephony/DataConnectionTracker.java
+++ b/telephony/java/com/android/internal/telephony/DataConnectionTracker.java
@@ -100,6 +100,7 @@
     public static final int EVENT_CLEAN_UP_CONNECTION = 34;
     protected static final int EVENT_CDMA_OTA_PROVISION = 35;
     protected static final int EVENT_RESTART_RADIO = 36;
+    protected static final int EVENT_SET_MASTER_DATA_ENABLE = 37;
 
     /***** Constants *****/
 
@@ -111,8 +112,11 @@
     protected static final int APN_HIPRI_ID = 4;
     protected static final int APN_NUM_TYPES = 5;
 
-    protected static final int APN_DISABLED = 0;
-    protected static final int APN_ENABLED = 1;
+    protected static final int DISABLED = 0;
+    protected static final int ENABLED = 1;
+
+    // responds to the setDataEnabled call - used independently from the APN requests
+    protected boolean mMasterDataEnabled = true;
 
     protected boolean[] dataEnabled = new boolean[APN_NUM_TYPES];
     protected int enabledCount = 0;
@@ -322,6 +326,11 @@
                 onCleanUpConnection(tearDown, (String)msg.obj);
                 break;
 
+            case EVENT_SET_MASTER_DATA_ENABLE:
+                boolean enabled = (msg.arg1 == ENABLED) ? true : false;
+                onSetDataEnabled(enabled);
+                break;
+
             default:
                 Log.e("DATA", "Unidentified event = " + msg.what);
                 break;
@@ -486,7 +495,7 @@
 
         Message msg = obtainMessage(EVENT_ENABLE_NEW_APN);
         msg.arg1 = id;
-        msg.arg2 = (enable ? APN_ENABLED : APN_DISABLED);
+        msg.arg2 = (enable ? ENABLED : DISABLED);
         sendMessage(msg);
     }
 
@@ -497,7 +506,7 @@
                     ", enabledCount = " + enabledCount +
                     ", isApnTypeActive = " + isApnTypeActive(apnIdToType(apnId)));
         }
-        if (enabled == APN_ENABLED) {
+        if (enabled == ENABLED) {
             if (!dataEnabled[apnId]) {
                 dataEnabled[apnId] = true;
                 enabledCount++;
@@ -545,8 +554,24 @@
      */
     public boolean setDataEnabled(boolean enable) {
         if (DBG) Log.d(LOG_TAG, "setDataEnabled(" + enable + ")");
-        setEnabled(APN_DEFAULT_ID, enable);
+
+        Message msg = obtainMessage(EVENT_SET_MASTER_DATA_ENABLE);
+        msg.arg1 = (enable ? ENABLED : DISABLED);
+        sendMessage(msg);
         return true;
     }
 
+    protected void onSetDataEnabled(boolean enable) {
+        if (mMasterDataEnabled != enable) {
+            mMasterDataEnabled = enable;
+            if (enable) {
+                mRetryMgr.resetRetryCount();
+                onTrySetupData(Phone.REASON_DATA_ENABLED);
+            } else {
+                onCleanUpConnection(true, Phone.REASON_DATA_DISABLED);
+           }
+        }
+    }
+
+
 }
diff --git a/telephony/java/com/android/internal/telephony/RIL.java b/telephony/java/com/android/internal/telephony/RIL.java
index f3b59a8..d802efa 100644
--- a/telephony/java/com/android/internal/telephony/RIL.java
+++ b/telephony/java/com/android/internal/telephony/RIL.java
@@ -2174,7 +2174,7 @@
             case RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG: ret =  responseCdmaBroadcastConfig(p); break;
             case RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG: ret =  responseVoid(p); break;
             case RIL_REQUEST_CDMA_BROADCAST_ACTIVATION: ret =  responseVoid(p); break;
-            case RIL_REQUEST_CDMA_VALIDATE_AKEY: ret =  responseVoid(p); break;
+            case RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY: ret =  responseVoid(p); break;
             case RIL_REQUEST_CDMA_SUBSCRIPTION: ret =  responseStrings(p); break;
             case RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM: ret =  responseInts(p); break;
             case RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM: ret =  responseVoid(p); break;
@@ -3197,7 +3197,7 @@
             case RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG: return "RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG";
             case RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG: return "RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG";
             case RIL_REQUEST_GSM_BROADCAST_ACTIVATION: return "RIL_REQUEST_GSM_BROADCAST_ACTIVATION";
-            case RIL_REQUEST_CDMA_VALIDATE_AKEY: return "RIL_REQUEST_CDMA_VALIDATE_AKEY";
+            case RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY: return "RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY";
             case RIL_REQUEST_CDMA_BROADCAST_ACTIVATION: return "RIL_REQUEST_CDMA_BROADCAST_ACTIVATION";
             case RIL_REQUEST_CDMA_SUBSCRIPTION: return "RIL_REQUEST_CDMA_SUBSCRIPTION";
             case RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM: return "RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM";
diff --git a/telephony/java/com/android/internal/telephony/RILConstants.java b/telephony/java/com/android/internal/telephony/RILConstants.java
index 3e9d8ad..c29adcf 100644
--- a/telephony/java/com/android/internal/telephony/RILConstants.java
+++ b/telephony/java/com/android/internal/telephony/RILConstants.java
@@ -210,7 +210,7 @@
     int RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE = 83;
     int RIL_REQUEST_CDMA_FLASH = 84;
     int RIL_REQUEST_CDMA_BURST_DTMF = 85;
-    int RIL_REQUEST_CDMA_VALIDATE_AKEY = 86;
+    int RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY = 86;
     int RIL_REQUEST_CDMA_SEND_SMS = 87;
     int RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE = 88;
     int RIL_REQUEST_GSM_GET_BROADCAST_CONFIG = 89;
diff --git a/telephony/java/com/android/internal/telephony/cdma/CallFailCause.java b/telephony/java/com/android/internal/telephony/cdma/CallFailCause.java
index fb5f0fa..ad6c23c 100644
--- a/telephony/java/com/android/internal/telephony/cdma/CallFailCause.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CallFailCause.java
@@ -17,9 +17,10 @@
 package com.android.internal.telephony.cdma;
 
 /**
- * Call fail causes from TS 24.008 .
- * These are mostly the cause codes we need to distinguish for the UI.
- * See 22.001 Annex F.4 for mapping of cause codes to local tones.
+ * CDMA Call fail causes covering all the possible failures that are
+ * needed to be distinguished by the UI. CDMA call failure reasons
+ * are derived from the possible call failure scenarios described
+ * in "CDMA IS2000 - Release A (C.S0005-A v6.0)" standard.
  *
  * {@hide}
  *
@@ -51,5 +52,8 @@
     // For non-emergency number dialed while in emergency callback mode.
     static final int CDMA_NOT_EMERGENCY             = 1008;
 
+    // Access Blocked by CDMA Network.
+    static final int CDMA_ACCESS_BLOCKED            = 1009;
+
     static final int ERROR_UNSPECIFIED = 0xffff;
 }
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaCallTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaCallTracker.java
index 9fe2038..1005d20 100644
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaCallTracker.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaCallTracker.java
@@ -1039,8 +1039,8 @@
     private void disableDataCallInEmergencyCall(String dialString) {
         if (PhoneNumberUtils.isEmergencyNumber(dialString)) {
             if (Phone.DEBUG_PHONE) log("disableDataCallInEmergencyCall");
-            phone.disableDataConnectivity();
             mIsInEmergencyCall = true;
+            phone.disableDataConnectivity();
         }
     }
 
@@ -1050,15 +1050,16 @@
      */
     private void checkAndEnableDataCallAfterEmergencyCallDropped() {
         if (mIsInEmergencyCall) {
+            mIsInEmergencyCall = false;
             String inEcm=SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE, "false");
             if (Phone.DEBUG_PHONE) {
                 log("checkAndEnableDataCallAfterEmergencyCallDropped,inEcm=" + inEcm);
             }
             if (inEcm.compareTo("false") == 0) {
                 // Re-initiate data connection
+                // TODO - can this be changed to phone.enableDataConnectivity();
                 phone.mDataConnection.setDataEnabled(true);
             }
-            mIsInEmergencyCall = false;
         }
     }
 
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaConnection.java b/telephony/java/com/android/internal/telephony/cdma/CdmaConnection.java
index bc04e02..f637d33 100755
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaConnection.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaConnection.java
@@ -418,6 +418,8 @@
                 return DisconnectCause.CDMA_PREEMPTED;
             case CallFailCause.CDMA_NOT_EMERGENCY:
                 return DisconnectCause.CDMA_NOT_EMERGENCY;
+            case CallFailCause.CDMA_ACCESS_BLOCKED:
+                return DisconnectCause.CDMA_ACCESS_BLOCKED;
             case CallFailCause.ERROR_UNSPECIFIED:
             case CallFailCause.NORMAL_CLEARING:
             default:
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java
index 93b48a9..c695dd7 100644
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java
@@ -76,6 +76,9 @@
     /** Currently active CdmaDataConnection */
     private CdmaDataConnection mActiveDataConnection;
 
+    /** mimic of GSM's mActiveApn */
+    private boolean mIsApnActive = false;
+
     private boolean mPendingRestartRadio = false;
     private static final int TIME_DELAYED_TO_RESTART_RADIO =
             SystemProperties.getInt("ro.cdma.timetoradiorestart", 20000);
@@ -245,8 +248,7 @@
 
     @Override
     protected boolean isApnTypeActive(String type) {
-        return (isApnTypeAvailable(type) &&
-                (state == State.CONNECTED || state == State.INITING));
+        return (mIsApnActive && isApnTypeAvailable(type));
     }
 
     @Override
@@ -260,10 +262,15 @@
     }
 
     protected String[] getActiveApnTypes() {
-        if (state == State.CONNECTED || state == State.INITING) {
-            return mSupportedApnTypes.clone();
+        String[] result;
+        if (mIsApnActive) {
+            result = mSupportedApnTypes.clone();
+        } else {
+            // TODO - should this return an empty array?  See GSM too.
+            result = new String[1];
+            result[0] = Phone.APN_TYPE_DEFAULT;
         }
-        return new String[0];
+        return result;
     }
 
     protected String getActiveApnString() {
@@ -295,7 +302,7 @@
 
     private boolean isDataAllowed() {
         boolean roaming = phone.getServiceState().getRoaming();
-        return getAnyDataEnabled() && (!roaming || getDataOnRoamingEnabled());
+        return getAnyDataEnabled() && (!roaming || getDataOnRoamingEnabled()) && mMasterDataEnabled;
     }
 
     private boolean trySetupData(String reason) {
@@ -340,7 +347,8 @@
                     " roaming=" + roaming +
                     " dataOnRoamingEnable=" + getDataOnRoamingEnabled() +
                     " desiredPowerState=" + desiredPowerState +
-                    " PendingRestartRadio=" + mPendingRestartRadio);
+                    " PendingRestartRadio=" + mPendingRestartRadio +
+                    " MasterDataEnabled=" + mMasterDataEnabled);
             }
             return false;
         }
@@ -386,6 +394,7 @@
         if (!tearDown) {
             setState(State.IDLE);
             phone.notifyDataConnection(reason);
+            mIsApnActive = false;
         }
     }
 
@@ -409,6 +418,7 @@
         }
 
         mActiveDataConnection = conn;
+        mIsApnActive = true;
 
         Message msg = obtainMessage();
         msg.what = EVENT_DATA_SETUP_COMPLETE;
@@ -742,6 +752,7 @@
         }
 
         phone.notifyDataConnection(reason);
+        mIsApnActive = false;
         if (retryAfterDisconnected(reason)) {
           trySetupData(reason);
       }
diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
index b063e0a..ffd6dd3 100644
--- a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
+++ b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
@@ -351,7 +351,7 @@
      * @return false while no data connection if all above requirements are met.
      */
     public boolean isDataConnectionAsDesired() {
-        boolean roaming = getDataRoaming();
+        boolean roaming = phone.getServiceState().getRoaming();
 
         if (mGsmPhone.mSIMRecords.getRecordsLoaded() &&
                 mGsmPhone.mSST.getCurrentGprsState() == ServiceState.STATE_IN_SERVICE &&
@@ -363,10 +363,6 @@
         return true;
     }
 
-    private boolean getDataRoaming() {
-        return mGsmPhone.mSST.getDataRoaming();
-    }
-
     @Override
     protected boolean isApnTypeActive(String type) {
         // TODO: support simultaneous with List instead
@@ -394,8 +390,9 @@
     }
 
     private boolean isDataAllowed() {
-        boolean roaming = getDataRoaming();
-        return getAnyDataEnabled() && (!roaming || getDataOnRoamingEnabled());
+        boolean roaming = phone.getServiceState().getRoaming();
+        return getAnyDataEnabled() && (!roaming || getDataOnRoamingEnabled()) &&
+                mMasterDataEnabled;
     }
 
     //****** Called from ServiceStateTracker
@@ -441,7 +438,6 @@
         }
 
         int gprsState = mGsmPhone.mSST.getCurrentGprsState();
-        boolean roaming = getDataRoaming();
         boolean desiredPowerState = mGsmPhone.mSST.getDesiredPowerState();
 
         if ((state == State.IDLE || state == State.SCANNING)
@@ -477,10 +473,11 @@
                     " phoneState=" + phone.getState() +
                     " isDataAllowed=" + isDataAllowed() +
                     " dataEnabled=" + getAnyDataEnabled() +
-                    " roaming=" + roaming +
+                    " roaming=" + phone.getServiceState().getRoaming() +
                     " dataOnRoamingEnable=" + getDataOnRoamingEnabled() +
                     " ps restricted=" + mIsPsRestricted +
-                    " desiredPowerState=" + desiredPowerState);
+                    " desiredPowerState=" + desiredPowerState +
+                    " MasterDataEnabled=" + mMasterDataEnabled);
             return false;
         }
     }
@@ -601,32 +598,36 @@
     }
 
     protected String getInterfaceName(String apnType) {
-        if (mActivePdp != null
-                && (apnType == null || mActiveApn.canHandleType(apnType))) {
+        if (mActivePdp != null &&
+                (apnType == null ||
+                (mActiveApn != null && mActiveApn.canHandleType(apnType)))) {
             return mActivePdp.getInterface();
         }
         return null;
     }
 
     protected String getIpAddress(String apnType) {
-        if (mActivePdp != null
-                && (apnType == null || mActiveApn.canHandleType(apnType))) {
+        if (mActivePdp != null &&
+                (apnType == null ||
+                (mActiveApn != null && mActiveApn.canHandleType(apnType)))) {
             return mActivePdp.getIpAddress();
         }
         return null;
     }
 
     public String getGateway(String apnType) {
-        if (mActivePdp != null
-                && (apnType == null || mActiveApn.canHandleType(apnType))) {
+        if (mActivePdp != null &&
+                (apnType == null ||
+                (mActiveApn != null && mActiveApn.canHandleType(apnType)))) {
             return mActivePdp.getGatewayAddress();
         }
         return null;
     }
 
     protected String[] getDnsServers(String apnType) {
-        if (mActivePdp != null
-                && (apnType == null || mActiveApn.canHandleType(apnType))) {
+        if (mActivePdp != null &&
+                (apnType == null ||
+                (mActiveApn != null && mActiveApn.canHandleType(apnType)))) {
             return mActivePdp.getDnsServers();
         }
         return null;
@@ -1040,7 +1041,7 @@
                 if (!mRequestedApnType.equals(Phone.APN_TYPE_DEFAULT)) {
                     // if no more retries on a secondary APN attempt, tell the world and revert.
                     phone.notifyDataConnection(Phone.REASON_APN_FAILED);
-                    onEnableApn(apnTypeToId(mRequestedApnType), APN_DISABLED);
+                    onEnableApn(apnTypeToId(mRequestedApnType), DISABLED);
                     return;
                 }
                 if (mReregisterOnReconnectFailure) {
@@ -1112,38 +1113,18 @@
         return trySetupData(reason);
     }
 
-    /**
-     * Check the data roaming consistency since this can be triggered by
-     * voice roaming flag of ServiceState in setDataOnRoamingEnabled()
-     *
-     * TODO make this triggered by data roaming state only
-     */
     @Override
     protected void onRoamingOff() {
-        if (!getDataRoaming()) { //data roaming is off
-            trySetupData(Phone.REASON_ROAMING_OFF);
-        } else { // Inconsistent! data roaming is on
-            sendMessage(obtainMessage(EVENT_ROAMING_ON));
-        }
+        trySetupData(Phone.REASON_ROAMING_OFF);
     }
 
-    /**
-     * Check the data roaming consistency since this can be triggered by
-     * voice roaming flag of ServiceState in setDataOnRoamingEnabled()
-     *
-     * TODO make this triggered by data roaming state only
-     */
     @Override
     protected void onRoamingOn() {
-        if (getDataRoaming()) { // data roaming is on
-            if (getDataOnRoamingEnabled()) {
-                trySetupData(Phone.REASON_ROAMING_ON);
-            } else {
-                if (DBG) log("Tear down data connection on roaming.");
-                cleanUpConnection(true, Phone.REASON_ROAMING_ON);
-            }
-        } else { // Inconsistent! data roaming is off
-            sendMessage(obtainMessage(EVENT_ROAMING_OFF));
+        if (getDataOnRoamingEnabled()) {
+            trySetupData(Phone.REASON_ROAMING_ON);
+        } else {
+            if (DBG) log("Tear down data connection on roaming.");
+            cleanUpConnection(true, Phone.REASON_ROAMING_ON);
         }
     }
 
@@ -1224,7 +1205,7 @@
                 notifyNoData(cause);
                 if (!mRequestedApnType.equals(Phone.APN_TYPE_DEFAULT)) {
                     phone.notifyDataConnection(Phone.REASON_APN_FAILED);
-                    onEnableApn(apnTypeToId(mRequestedApnType), APN_DISABLED);
+                    onEnableApn(apnTypeToId(mRequestedApnType), DISABLED);
                 }
                 return;
             }
diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java b/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
index 003899b..8140654 100644
--- a/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
+++ b/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
@@ -83,12 +83,17 @@
     private int networkType = 0;
     private int newNetworkType = 0;
 
-    /** GSM roaming status solely based on TS 27.007 7.2 CREG. */
+    /**
+     * GSM roaming status solely based on TS 27.007 7.2 CREG. Only used by
+     * handlePollStateResult to store CREG roaming result.
+     */
     private boolean mGsmRoaming = false;
 
-    /** Data roaming status solely based on TS 27.007 10.1.19 CGREG. */
+    /**
+     * Data roaming status solely based on TS 27.007 10.1.19 CGREG. Only used by
+     * handlePollStateResult to store CGREG roaming result.
+     */
     private boolean mDataRoaming = false;
-    private boolean newDataRoaming = false;
 
     private RegistrantList gprsAttachedRegistrants = new RegistrantList();
     private RegistrantList gprsDetachedRegistrants = new RegistrantList();
@@ -310,10 +315,6 @@
         psRestrictDisabledRegistrants.remove(h);
     }
 
-    boolean getDataRoaming() {
-        return mDataRoaming;
-    }
-
     public void handleMessage (Message msg) {
         AsyncResult ar;
         int[] ints;
@@ -627,7 +628,6 @@
 
                     mGsmRoaming = regCodeIsRoaming(regState);
                     newSS.setState (regCodeToServiceState(regState));
-
                     // LAC and CID are -1 if not avail
                     newCellLoc.setLacAndCid(lac, cid);
                 break;
@@ -650,7 +650,7 @@
                         }
                     }
                     newGPRSState = regCodeToServiceState(regState);
-                    newDataRoaming = regCodeIsRoaming(regState);
+                    mDataRoaming = regCodeIsRoaming(regState);
                     newNetworkType = type;
                     newSS.setRadioTechnology(type);
                 break;
@@ -678,15 +678,22 @@
         pollingContext[0]--;
 
         if (pollingContext[0] == 0) {
-            newSS.setRoaming(isRoamingBetweenOperators(mGsmRoaming, newSS));
-            // when both roaming indicators are true but not roaming between
-            // operators, roaming should set to false.
-            if (newDataRoaming && mGsmRoaming && !newSS.getRoaming()) {
-                newDataRoaming = false;
+            /**
+             *  Since the roaming states of gsm service (from +CREG) and
+             *  data service (from +CGREG) could be different, the new SS
+             *  is set roaming while either one is roaming.
+             *
+             *  There is an exception for the above rule. The new SS is not set
+             *  as roaming while gsm service reports roaming but indeed it is
+             *  not roaming between operators.
+             */
+            boolean roaming = (mGsmRoaming || mDataRoaming);
+            if (mGsmRoaming && !isRoamingBetweenOperators(mGsmRoaming, newSS)) {
+                roaming = false;
             }
+            newSS.setRoaming(roaming);
             pollStateDone();
         }
-
     }
 
     private void setSignalStrengthDefaultValues() {
@@ -711,8 +718,6 @@
                 newCellLoc.setStateInvalid();
                 setSignalStrengthDefaultValues();
                 mGotCountryCode = false;
-                newDataRoaming = false;
-
                 pollStateDone();
             break;
 
@@ -721,8 +726,6 @@
                 newCellLoc.setStateInvalid();
                 setSignalStrengthDefaultValues();
                 mGotCountryCode = false;
-                newDataRoaming = false;
-
                 pollStateDone();
             break;
 
@@ -736,8 +739,6 @@
                 newCellLoc.setStateInvalid();
                 setSignalStrengthDefaultValues();
                 mGotCountryCode = false;
-                newDataRoaming = false;
-                mDataRoaming = false;
 
                 //NOTE: pollStateDone() is not needed in this case
                 break;
@@ -830,9 +831,9 @@
 
         boolean hasChanged = !newSS.equals(ss);
 
-        boolean hasRoamingOn = !mDataRoaming && newDataRoaming;
+        boolean hasRoamingOn = !ss.getRoaming() && newSS.getRoaming();
 
-        boolean hasRoamingOff = mDataRoaming && !newDataRoaming;
+        boolean hasRoamingOff = ss.getRoaming() && !newSS.getRoaming();
 
         boolean hasLocationChanged = !newCellLoc.equals(cellLoc);
 
@@ -849,7 +850,6 @@
 
         gprsState = newGPRSState;
         networkType = newNetworkType;
-        mDataRoaming = newDataRoaming;
 
         newSS.setStateOutOfService(); // clean slate for next time
 
diff --git a/test-runner/android/test/SyncBaseInstrumentation.java b/test-runner/android/test/SyncBaseInstrumentation.java
index a860bb3..e8d72d9 100644
--- a/test-runner/android/test/SyncBaseInstrumentation.java
+++ b/test-runner/android/test/SyncBaseInstrumentation.java
@@ -47,7 +47,7 @@
     protected void syncProvider(Uri uri, String accountName, String authority) throws Exception {
         Bundle extras = new Bundle();
         extras.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true);
-        Account account = new Account(accountName, "com.google.GAIA");
+        Account account = new Account(accountName, "com.google");
 
         ContentResolver.requestSync(account, authority, extras);
         long startTimeInMillis = SystemClock.elapsedRealtime();
diff --git a/tests/AndroidTests/src/com/android/unit_tests/VpnTest.java b/tests/AndroidTests/src/com/android/unit_tests/VpnTest.java
index 67fcd61..cb64293 100755
--- a/tests/AndroidTests/src/com/android/unit_tests/VpnTest.java
+++ b/tests/AndroidTests/src/com/android/unit_tests/VpnTest.java
@@ -130,7 +130,6 @@
 
     private void testVpnType(VpnType type) {
         assertFalse(TextUtils.isEmpty(type.getDisplayName()));
-        assertNotNull(type.getDescription());
         assertNotNull(type.getProfileClass());
     }
 
diff --git a/tests/DumpRenderTree/assets/results/layout_tests_crashed.txt b/tests/DumpRenderTree/assets/results/layout_tests_crashed.txt
index 5a38ed8..e69de29 100644
--- a/tests/DumpRenderTree/assets/results/layout_tests_crashed.txt
+++ b/tests/DumpRenderTree/assets/results/layout_tests_crashed.txt
@@ -1 +0,0 @@
-/sdcard/android/layout_tests/fast/js/regexp-charclass-crash.html
\ No newline at end of file
diff --git a/tests/DumpRenderTree/assets/results/layout_tests_failed.txt b/tests/DumpRenderTree/assets/results/layout_tests_failed.txt
index 651b324..af7658b 100644
--- a/tests/DumpRenderTree/assets/results/layout_tests_failed.txt
+++ b/tests/DumpRenderTree/assets/results/layout_tests_failed.txt
@@ -1,151 +1,135 @@
-/sdcard/android/layout_tests/webarchive/loading/test-loading-archive.html
-/sdcard/android/layout_tests/dom/html/level2/html/HTMLSelectElement19.html
-/sdcard/android/layout_tests/dom/html/level2/html/HTMLFormElement10.html
-/sdcard/android/layout_tests/dom/html/level2/html/HTMLSelectElement16.html
-/sdcard/android/layout_tests/media/video-error-does-not-exist.html
-/sdcard/android/layout_tests/media/audio-constructor.html
-/sdcard/android/layout_tests/media/video-start.html
-/sdcard/android/layout_tests/media/video-loopend.html
-/sdcard/android/layout_tests/media/video-play-empty-events.html
-/sdcard/android/layout_tests/media/constructors.html
-/sdcard/android/layout_tests/media/video-append-source.html
-/sdcard/android/layout_tests/media/unsupported-rtsp.html
-/sdcard/android/layout_tests/media/video-dom-autoplay.html
-/sdcard/android/layout_tests/media/video-currentTime-set2.html
-/sdcard/android/layout_tests/media/video-poster.html
-/sdcard/android/layout_tests/media/video-source-media.html
-/sdcard/android/layout_tests/media/video-muted.html
-/sdcard/android/layout_tests/media/progress-event.html
-/sdcard/android/layout_tests/media/video-source-type.html
-/sdcard/android/layout_tests/media/video-seek-past-end-playing.html
-/sdcard/android/layout_tests/media/video-dom-src.html
-/sdcard/android/layout_tests/media/remove-from-document.html
-/sdcard/android/layout_tests/media/video-end.html
-/sdcard/android/layout_tests/media/video-src-change.html
-/sdcard/android/layout_tests/media/video-seekable.html
-/sdcard/android/layout_tests/media/video-click-dblckick-standalone.html
-/sdcard/android/layout_tests/media/video-src-set.html
-/sdcard/android/layout_tests/media/video-seeking.html
-/sdcard/android/layout_tests/media/video-controls-transformed.html
-/sdcard/android/layout_tests/media/loopend-limits.html
-/sdcard/android/layout_tests/media/video-volume.html
-/sdcard/android/layout_tests/media/video-size.html
-/sdcard/android/layout_tests/media/video-width-height.html
-/sdcard/android/layout_tests/media/video-loopstart.html
-/sdcard/android/layout_tests/media/video-source.html
-/sdcard/android/layout_tests/media/video-currentTime.html
-/sdcard/android/layout_tests/media/video-dom-loopstart.html
-/sdcard/android/layout_tests/media/broken-video.html
-/sdcard/android/layout_tests/media/video-buffered.html
-/sdcard/android/layout_tests/media/video-load-readyState.html
-/sdcard/android/layout_tests/media/video-dom-end.html
-/sdcard/android/layout_tests/media/fallback.html
-/sdcard/android/layout_tests/media/video-load-networkState.html
-/sdcard/android/layout_tests/media/unsupported-tracks.html
-/sdcard/android/layout_tests/media/video-dom-start.html
-/sdcard/android/layout_tests/media/video-seek-past-end-paused.html
-/sdcard/android/layout_tests/media/video-play-pause-events.html
-/sdcard/android/layout_tests/media/video-autoplay.html
-/sdcard/android/layout_tests/media/video-controls.html
-/sdcard/android/layout_tests/media/loopstart-limits.html
-/sdcard/android/layout_tests/media/video-src-source.html
-/sdcard/android/layout_tests/media/video-currentTime-set.html
-/sdcard/android/layout_tests/media/video-source-type-params.html
-/sdcard/android/layout_tests/media/video-no-autoplay.html
-/sdcard/android/layout_tests/media/video-pause-empty-events.html
-/sdcard/android/layout_tests/media/video-play-pause-exception.html
-/sdcard/android/layout_tests/media/video-dom-loopend.html
-/sdcard/android/layout_tests/media/video-loopcount.html
-/sdcard/android/layout_tests/media/video-src-remove.html
-/sdcard/android/layout_tests/media/video-src.html
-/sdcard/android/layout_tests/media/video-error-abort.html
-/sdcard/android/layout_tests/media/video-dom-loopcount.html
-/sdcard/android/layout_tests/media/progress-event-total.html
-/sdcard/android/layout_tests/media/audio-constructor-src.html
-/sdcard/android/layout_tests/plugins/throw-on-dealloc.html
-/sdcard/android/layout_tests/plugins/invoke.html
-/sdcard/android/layout_tests/plugins/plugin-remove-subframe.html
-/sdcard/android/layout_tests/plugins/netscape-identifier-conversion.html
-/sdcard/android/layout_tests/plugins/call-as-function-test.html
-/sdcard/android/layout_tests/plugins/npruntime.html
-/sdcard/android/layout_tests/plugins/netscape-construct.html
-/sdcard/android/layout_tests/plugins/root-object-premature-delete-crash.html
-/sdcard/android/layout_tests/plugins/netscape-get-property-return-value.html
-/sdcard/android/layout_tests/plugins/mouse-events.html
-/sdcard/android/layout_tests/plugins/return-error-from-new-stream-doesnt-invoke-destroy-stream.html
-/sdcard/android/layout_tests/plugins/destroy-stream-twice.html
-/sdcard/android/layout_tests/plugins/jsobjc-simple.html
-/sdcard/android/layout_tests/plugins/embed-attributes-setting.html
-/sdcard/android/layout_tests/plugins/inner-html-display-none.html
-/sdcard/android/layout_tests/plugins/netscape-invoke-default.html
-/sdcard/android/layout_tests/plugins/undefined-property-crash.html
-/sdcard/android/layout_tests/plugins/netscape-plugin-setwindow-size-2.html
-/sdcard/android/layout_tests/plugins/jsobjc-dom-wrappers.html
-/sdcard/android/layout_tests/plugins/plugin-javascript-access.html
-/sdcard/android/layout_tests/plugins/getintidentifier-special-values.html
-/sdcard/android/layout_tests/plugins/geturl-replace-query.html
-/sdcard/android/layout_tests/plugins/netscape-destroy-plugin-script-objects.html
-/sdcard/android/layout_tests/plugins/open-and-close-window-with-plugin.html
-/sdcard/android/layout_tests/plugins/netscape-enumerate.html
-/sdcard/android/layout_tests/plugins/get-url-that-the-resource-load-delegate-will-disallow.html
-/sdcard/android/layout_tests/plugins/netscape-plugin-setwindow-size.html
-/sdcard/android/layout_tests/plugins/embed-inside-object.html
-/sdcard/android/layout_tests/plugins/netscape-throw-exception.html
-/sdcard/android/layout_tests/plugins/get-url-with-blank-target.html
-/sdcard/android/layout_tests/plugins/bindings-test.html
-/sdcard/android/layout_tests/editing/input/textarea-arrow-navigation.html
+/sdcard/android/layout_tests/accessibility/onclick-handlers.html
+/sdcard/android/layout_tests/accessibility/textarea-insertion-point-line-number.html
+/sdcard/android/layout_tests/accessibility/aria-readonly.html
+/sdcard/android/layout_tests/accessibility/radio-button-checkbox-size.html
+/sdcard/android/layout_tests/accessibility/th-as-title-ui.html
+/sdcard/android/layout_tests/accessibility/visible-elements.html
+/sdcard/android/layout_tests/accessibility/iframe-bastardization.html
+/sdcard/android/layout_tests/accessibility/button-press-action.html
+/sdcard/android/layout_tests/accessibility/img-aria-button-alt-tag.html
+/sdcard/android/layout_tests/accessibility/input-image-alt.html
+/sdcard/android/layout_tests/accessibility/radio-button-title-label.html
+/sdcard/android/layout_tests/accessibility/aria-hidden.html
+/sdcard/android/layout_tests/accessibility/secure-textfield-title-ui.html
+/sdcard/android/layout_tests/accessibility/canvas.html
+/sdcard/android/layout_tests/accessibility/textarea-selected-text-range.html
+/sdcard/android/layout_tests/accessibility/language-attribute.html
+/sdcard/android/layout_tests/accessibility/table-nofirstbody.html
+/sdcard/android/layout_tests/accessibility/editable-webarea-context-menu-point.html
+/sdcard/android/layout_tests/accessibility/table-modification-crash.html
+/sdcard/android/layout_tests/accessibility/aria-link-supports-press.html
+/sdcard/android/layout_tests/accessibility/table-notbody.html
+/sdcard/android/layout_tests/accessibility/ignore-spacer-elements.html
+/sdcard/android/layout_tests/accessibility/transformed-element.html
+/sdcard/android/layout_tests/accessibility/aria-disabled.html
+/sdcard/android/layout_tests/accessibility/placeholder.html
+/sdcard/android/layout_tests/accessibility/non-data-table-cell-title-ui-element.html
+/sdcard/android/layout_tests/accessibility/aria-label.html
+/sdcard/android/layout_tests/accessibility/textarea-line-for-index.html
+/sdcard/android/layout_tests/accessibility/nochildren-elements.html
+/sdcard/android/layout_tests/animations/play-state.html
+/sdcard/android/layout_tests/animations/animation-start-event-destroy-renderer.html
+/sdcard/android/layout_tests/animations/import.html
+/sdcard/android/layout_tests/animations/keyframes-to-missing.html
+/sdcard/android/layout_tests/animations/animation-hit-test.html
+/sdcard/android/layout_tests/animations/keyframes-comma-separated.html
+/sdcard/android/layout_tests/animations/animation-hit-test-transform.html
+/sdcard/android/layout_tests/animations/keyframes-rule.html
+/sdcard/android/layout_tests/animations/animation-controller-drt-api.html
+/sdcard/android/layout_tests/animations/keyframes-from-missing.html
+/sdcard/android/layout_tests/animations/animation-end-event-destroy-renderer.html
+/sdcard/android/layout_tests/animations/change-keyframes-name.html
+/sdcard/android/layout_tests/animations/keyframes-out-of-order.html
+/sdcard/android/layout_tests/animations/change-keyframes.html
+/sdcard/android/layout_tests/editing/style/remove-underline-from-stylesheet.html
+/sdcard/android/layout_tests/editing/style/remove-underline-in-bold.html
+/sdcard/android/layout_tests/editing/style/apply-through-end-of-document.html
 /sdcard/android/layout_tests/editing/inserting/typing-tab-designmode.html
+/sdcard/android/layout_tests/editing/inserting/space-after-removeformat.html
+/sdcard/android/layout_tests/editing/inserting/insert-thai-characters-001.html
 /sdcard/android/layout_tests/editing/inserting/5994480-2.html
 /sdcard/android/layout_tests/editing/execCommand/queryCommandState-01.html
-/sdcard/android/layout_tests/editing/execCommand/5543472-3.html
+/sdcard/android/layout_tests/editing/execCommand/4128080-2.html
+/sdcard/android/layout_tests/editing/execCommand/indent-nested-lists-6.html
 /sdcard/android/layout_tests/editing/execCommand/enabling-and-selection.html
-/sdcard/android/layout_tests/editing/execCommand/5658933-2.html
 /sdcard/android/layout_tests/editing/execCommand/insert-line-break-no-scroll.html
+/sdcard/android/layout_tests/editing/execCommand/indent-nested-lists-3.html
 /sdcard/android/layout_tests/editing/execCommand/enabling-and-selection-2.html
 /sdcard/android/layout_tests/editing/execCommand/delete-no-scroll.html
 /sdcard/android/layout_tests/editing/execCommand/forward-delete-no-scroll.html
+/sdcard/android/layout_tests/editing/execCommand/switch-list-type.html
 /sdcard/android/layout_tests/editing/execCommand/19089.html
+/sdcard/android/layout_tests/editing/execCommand/outdent-nested-lists-2.html
 /sdcard/android/layout_tests/editing/execCommand/unlink.html
-/sdcard/android/layout_tests/editing/execCommand/5543472-2.html
+/sdcard/android/layout_tests/editing/execCommand/remove-list-1.html
+/sdcard/android/layout_tests/editing/execCommand/indent-nested-lists-5.html
+/sdcard/android/layout_tests/editing/execCommand/indent-nested-lists-2.html
 /sdcard/android/layout_tests/editing/execCommand/copy-without-selection.html
+/sdcard/android/layout_tests/editing/execCommand/outdent-nested-lists-4.html
+/sdcard/android/layout_tests/editing/execCommand/outdent-nested-lists-1.html
 /sdcard/android/layout_tests/editing/execCommand/findString-diacriticals.html
-/sdcard/android/layout_tests/editing/execCommand/5658933-3.html
+/sdcard/android/layout_tests/editing/execCommand/indent-nested-lists-7.html
 /sdcard/android/layout_tests/editing/execCommand/createLink.html
-/sdcard/android/layout_tests/editing/execCommand/5543472-1.html
+/sdcard/android/layout_tests/editing/execCommand/remove-list-items.html
+/sdcard/android/layout_tests/editing/execCommand/indent-nested-lists-4.html
 /sdcard/android/layout_tests/editing/execCommand/5939887.html
+/sdcard/android/layout_tests/editing/execCommand/insertHTML.html
+/sdcard/android/layout_tests/editing/execCommand/convert-style-elements-to-spans.html
+/sdcard/android/layout_tests/editing/execCommand/indent-nested-lists-1.html
+/sdcard/android/layout_tests/editing/execCommand/outdent-nested-lists-3.html
 /sdcard/android/layout_tests/editing/pasteboard/paste-into-anchor-text.html
+/sdcard/android/layout_tests/editing/pasteboard/19644-1.html
 /sdcard/android/layout_tests/editing/pasteboard/copy-crash.html
 /sdcard/android/layout_tests/editing/pasteboard/5665299.html
+/sdcard/android/layout_tests/editing/pasteboard/file-input-files-access.html
+/sdcard/android/layout_tests/editing/pasteboard/get-data-text-plain-drop.html
+/sdcard/android/layout_tests/editing/pasteboard/get-data-text-plain-paste.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-blockquote-before-blockquote.html
 /sdcard/android/layout_tests/editing/pasteboard/5761530-1.html
 /sdcard/android/layout_tests/editing/pasteboard/copy-in-password-field.html
 /sdcard/android/layout_tests/editing/pasteboard/paste-plaintext-user-select-none.html
 /sdcard/android/layout_tests/editing/pasteboard/drag-image-in-about-blank-frame.html
 /sdcard/android/layout_tests/editing/pasteboard/4744008.html
 /sdcard/android/layout_tests/editing/pasteboard/4922709.html
+/sdcard/android/layout_tests/editing/pasteboard/19644-2.html
 /sdcard/android/layout_tests/editing/pasteboard/paste-text-013.html
 /sdcard/android/layout_tests/editing/pasteboard/5780697-2.html
-/sdcard/android/layout_tests/editing/pasteboard/4840662.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-double-nested-blockquote-before-blockquote.html
+/sdcard/android/layout_tests/editing/pasteboard/copy-paste-float.html
 /sdcard/android/layout_tests/editing/pasteboard/paste-table-002.html
+/sdcard/android/layout_tests/editing/selection/click-outside-editable-div.html
 /sdcard/android/layout_tests/editing/selection/drag-text-delay.html
-/sdcard/android/layout_tests/editing/selection/skip-non-editable-1.html
+/sdcard/android/layout_tests/editing/selection/anchor-focus3.html
+/sdcard/android/layout_tests/editing/selection/home-end.html
+/sdcard/android/layout_tests/editing/selection/user-drag-element-and-user-select-none.html
+/sdcard/android/layout_tests/editing/selection/drag-start-event-client-x-y.html
+/sdcard/android/layout_tests/editing/selection/extend-selection-bidi.html
+/sdcard/android/layout_tests/editing/selection/find-in-text-control.html
+/sdcard/android/layout_tests/editing/selection/5209984.html
+/sdcard/android/layout_tests/editing/selection/toString-1.html
+/sdcard/android/layout_tests/editing/selection/hit-test-anonymous.html
+/sdcard/android/layout_tests/editing/selection/move-begin-end.html
+/sdcard/android/layout_tests/editing/selection/doubleclick-whitespace-img-crash.html
+/sdcard/android/layout_tests/editing/selection/click-after-nested-block.html
 /sdcard/android/layout_tests/editing/selection/move-by-line-003.html
+/sdcard/android/layout_tests/editing/selection/skip-non-editable-1.html
 /sdcard/android/layout_tests/editing/selection/anchor-focus1.html
 /sdcard/android/layout_tests/editing/selection/getRangeAt.html
 /sdcard/android/layout_tests/editing/selection/select-all-textarea.html
 /sdcard/android/layout_tests/editing/selection/doubleclick-whitespace.html
+/sdcard/android/layout_tests/editing/selection/move-paragraph-document-edges.html
 /sdcard/android/layout_tests/editing/selection/after-line-break.html
 /sdcard/android/layout_tests/editing/selection/legal-positions.html
-/sdcard/android/layout_tests/editing/selection/anchor-focus3.html
+/sdcard/android/layout_tests/editing/selection/extend-selection-after-double-click.html
+/sdcard/android/layout_tests/editing/selection/select-line.html
+/sdcard/android/layout_tests/editing/selection/doubleclick-whitespace-crash.html
 /sdcard/android/layout_tests/editing/selection/toString.html
-/sdcard/android/layout_tests/editing/selection/extend-selection-bidi.html
 /sdcard/android/layout_tests/editing/selection/inactive-selection.html
+/sdcard/android/layout_tests/editing/selection/click-in-margins-inside-editable-div.html
 /sdcard/android/layout_tests/editing/selection/removeAllRanges.html
-/sdcard/android/layout_tests/editing/selection/5209984.html
 /sdcard/android/layout_tests/editing/selection/skip-non-editable-2.html
-/sdcard/android/layout_tests/editing/selection/toString-1.html
 /sdcard/android/layout_tests/editing/selection/anchor-focus2.html
-/sdcard/android/layout_tests/editing/selection/move-begin-end.html
-/sdcard/android/layout_tests/editing/selection/move-left-right.html
+/sdcard/android/layout_tests/editing/selection/click-in-padding-with-multiple-line-boxes.html
 /sdcard/android/layout_tests/editing/selection/click-before-and-after-table.html
 /sdcard/android/layout_tests/editing/undo/undo-iframe-location-change.html
 /sdcard/android/layout_tests/editing/deleting/pruning-after-merge-1.html
@@ -154,83 +138,36 @@
 /sdcard/android/layout_tests/editing/deleting/4916235-1.html
 /sdcard/android/layout_tests/editing/deleting/delete-ligature-001.html
 /sdcard/android/layout_tests/editing/deleting/delete-ligature-003.html
-/sdcard/android/layout_tests/editing/deleting/5890684.html
+/sdcard/android/layout_tests/editing/deleting/skip-virama-001.html
 /sdcard/android/layout_tests/editing/deleting/smart-editing-disabled.html
 /sdcard/android/layout_tests/editing/deleting/delete-ligature-002.html
 /sdcard/android/layout_tests/editing/deleting/delete-all-text-in-text-field-assertion.html
-/sdcard/android/layout_tests/accessibility/image-map1.html
-/sdcard/android/layout_tests/accessibility/aria-labelledby-on-input.html
-/sdcard/android/layout_tests/accessibility/content-editable.html
-/sdcard/android/layout_tests/accessibility/frame-with-title.html
-/sdcard/android/layout_tests/accessibility/textarea-insertion-point-line-number.html
-/sdcard/android/layout_tests/accessibility/table-with-rules.html
-/sdcard/android/layout_tests/accessibility/aria-describedby-on-input.html
-/sdcard/android/layout_tests/accessibility/radio-button-checkbox-size.html
-/sdcard/android/layout_tests/accessibility/table-detection.html
-/sdcard/android/layout_tests/accessibility/th-as-title-ui.html
-/sdcard/android/layout_tests/accessibility/table-with-aria-role.html
-/sdcard/android/layout_tests/accessibility/accesskey.html
-/sdcard/android/layout_tests/accessibility/image-map2.html
-/sdcard/android/layout_tests/accessibility/iframe-bastardization.html
-/sdcard/android/layout_tests/accessibility/aria-spinbutton.html
-/sdcard/android/layout_tests/accessibility/button-press-action.html
-/sdcard/android/layout_tests/accessibility/table-cell-spans.html
-/sdcard/android/layout_tests/accessibility/table-cells.html
-/sdcard/android/layout_tests/accessibility/double-title.html
-/sdcard/android/layout_tests/accessibility/lists.html
-/sdcard/android/layout_tests/accessibility/plugin.html
-/sdcard/android/layout_tests/accessibility/table-sections.html
-/sdcard/android/layout_tests/accessibility/textarea-selected-text-range.html
-/sdcard/android/layout_tests/accessibility/input-image-url.html
-/sdcard/android/layout_tests/accessibility/aria-range-value.html
-/sdcard/android/layout_tests/accessibility/table-one-cell.html
-/sdcard/android/layout_tests/accessibility/internal-link-anchors2.html
-/sdcard/android/layout_tests/accessibility/table-nofirstbody.html
-/sdcard/android/layout_tests/accessibility/table-modification-crash.html
-/sdcard/android/layout_tests/accessibility/radio-button-group-members.html
-/sdcard/android/layout_tests/accessibility/aria-link-supports-press.html
-/sdcard/android/layout_tests/accessibility/document-attributes.html
-/sdcard/android/layout_tests/accessibility/table-notbody.html
-/sdcard/android/layout_tests/accessibility/aria-range.html
-/sdcard/android/layout_tests/accessibility/bounds-for-range.html
-/sdcard/android/layout_tests/accessibility/table-attributes.html
-/sdcard/android/layout_tests/accessibility/textarea-line-for-index.html
-/sdcard/android/layout_tests/accessibility/aria-slider.html
-/sdcard/android/layout_tests/accessibility/document-links.html
-/sdcard/android/layout_tests/accessibility/legend.html
-/sdcard/android/layout_tests/accessibility/aria-roles.html
-/sdcard/android/layout_tests/accessibility/nochildren-elements.html
-/sdcard/android/layout_tests/accessibility/internal-link-anchors.html
+/sdcard/android/layout_tests/editing/text-iterator/basic-iteration.html
+/sdcard/android/layout_tests/editing/text-iterator/thai-cursor-movement.html
+/sdcard/android/layout_tests/fast/replaced/table-percent-height-text-controls.html
+/sdcard/android/layout_tests/fast/replaced/image-map-2.html
 /sdcard/android/layout_tests/fast/replaced/image-map-bug16782.html
 /sdcard/android/layout_tests/fast/replaced/table-percent-height.html
 /sdcard/android/layout_tests/fast/replaced/image-map.html
 /sdcard/android/layout_tests/fast/dynamic/paused-event-dispatch.html
+/sdcard/android/layout_tests/fast/text/international/thai-offsetForPosition-inside-character.html
 /sdcard/android/layout_tests/fast/text/plain-text-line-breaks.html
+/sdcard/android/layout_tests/fast/text/offsetForPosition-cluster-at-zero.html
 /sdcard/android/layout_tests/fast/text/zero-width-characters.html
 /sdcard/android/layout_tests/fast/text/reset-drag-on-mouse-down.html
 /sdcard/android/layout_tests/fast/encoding/invalid-xml.html
 /sdcard/android/layout_tests/fast/encoding/char-decoding-mac.html
-/sdcard/android/layout_tests/fast/encoding/frame-default-enc.html
 /sdcard/android/layout_tests/fast/encoding/mailto-always-utf-8.html
+/sdcard/android/layout_tests/fast/encoding/percent-escaping.html
+/sdcard/android/layout_tests/fast/encoding/utf-32-big-endian-nobom.xml
+/sdcard/android/layout_tests/fast/encoding/hanarei-blog32-fc2-com.html
+/sdcard/android/layout_tests/fast/encoding/frame-default-enc.html
 /sdcard/android/layout_tests/fast/encoding/char-decoding.html
 /sdcard/android/layout_tests/fast/encoding/url-host-name-non-ascii.html
 /sdcard/android/layout_tests/fast/encoding/idn-security.html
-/sdcard/android/layout_tests/fast/encoding/percent-escaping.html
-/sdcard/android/layout_tests/fast/encoding/xml-utf-8-default.xml
+/sdcard/android/layout_tests/fast/encoding/utf-32-little-endian-nobom.xml
 /sdcard/android/layout_tests/fast/encoding/char-encoding-mac.html
-/sdcard/android/layout_tests/fast/encoding/yahoo-mail.html
 /sdcard/android/layout_tests/fast/encoding/charset-koi8-u.html
-/sdcard/android/layout_tests/fast/encoding/ahram-org-eg.html
-/sdcard/android/layout_tests/fast/encoding/noscript-in-head.html
-/sdcard/android/layout_tests/fast/workers/worker-location.html
-/sdcard/android/layout_tests/fast/workers/worker-constructor.html
-/sdcard/android/layout_tests/fast/workers/stress-js-execution.html
-/sdcard/android/layout_tests/fast/workers/worker-terminate.html
-/sdcard/android/layout_tests/fast/workers/worker-gc.html
-/sdcard/android/layout_tests/fast/workers/worker-navigator.html
-/sdcard/android/layout_tests/fast/workers/worker-replace-global-constructor.html
-/sdcard/android/layout_tests/fast/workers/worker-replace-self.html
-/sdcard/android/layout_tests/fast/workers/worker-event-listener.html
 /sdcard/android/layout_tests/fast/selectors/lang-inheritance.html
 /sdcard/android/layout_tests/fast/selectors/lang-vs-xml-lang.html
 /sdcard/android/layout_tests/fast/selectors/lang-inheritance2.html
@@ -238,7 +175,6 @@
 /sdcard/android/layout_tests/fast/events/onunload.html
 /sdcard/android/layout_tests/fast/events/mouseup-outside-document.html
 /sdcard/android/layout_tests/fast/events/offsetX-offsetY.html
-/sdcard/android/layout_tests/fast/events/scroll-event-does-not-bubble.html
 /sdcard/android/layout_tests/fast/events/mouseover-mouseout.html
 /sdcard/android/layout_tests/fast/events/option-tab.html
 /sdcard/android/layout_tests/fast/events/popup-blocking-click-in-iframe.html
@@ -251,11 +187,15 @@
 /sdcard/android/layout_tests/fast/events/fire-scroll-event.html
 /sdcard/android/layout_tests/fast/events/attempt-scroll-with-no-scrollbars.html
 /sdcard/android/layout_tests/fast/events/mouseclick-target-and-positioning.html
-/sdcard/android/layout_tests/fast/events/keydown-keypress-focus-change.html
+/sdcard/android/layout_tests/fast/events/anchor-empty-focus.html
 /sdcard/android/layout_tests/fast/events/input-image-scrolled-x-y.html
 /sdcard/android/layout_tests/fast/events/dblclick-addEventListener.html
 /sdcard/android/layout_tests/fast/events/frame-programmatic-focus.html
+/sdcard/android/layout_tests/fast/events/related-target.html
 /sdcard/android/layout_tests/fast/events/context-onmousedown-event.html
+/sdcard/android/layout_tests/fast/events/mouse-drag-from-frame-to-other-frame.html
+/sdcard/android/layout_tests/fast/events/prevent-drag-to-navigate.html
+/sdcard/android/layout_tests/fast/events/stop-load-in-unload-handler-using-window-stop.html
 /sdcard/android/layout_tests/fast/events/content-changed-during-drop.html
 /sdcard/android/layout_tests/fast/events/autoscroll-with-non-scrollable-parent.html
 /sdcard/android/layout_tests/fast/events/window-events-capture.html
@@ -268,23 +208,26 @@
 /sdcard/android/layout_tests/fast/events/access-key-self-destruct.html
 /sdcard/android/layout_tests/fast/events/scrollbar-double-click.html
 /sdcard/android/layout_tests/fast/events/onunload-clears-onbeforeunload.html
+/sdcard/android/layout_tests/fast/events/stop-load-in-unload-handler-using-document-write.html
 /sdcard/android/layout_tests/fast/events/tabindex-focus-chain.html
 /sdcard/android/layout_tests/fast/events/capture-on-target.html
 /sdcard/android/layout_tests/fast/events/window-events-bubble.html
+/sdcard/android/layout_tests/fast/events/event-function-toString.html
+/sdcard/android/layout_tests/fast/events/right-click-focus.html
 /sdcard/android/layout_tests/fast/events/mouseup-from-button2.html
 /sdcard/android/layout_tests/fast/events/frame-click-focus.html
+/sdcard/android/layout_tests/fast/events/crash-on-mutate-during-drop.html
 /sdcard/android/layout_tests/fast/events/mouseout-on-window.html
 /sdcard/android/layout_tests/fast/events/keypress-insert-tab.html
 /sdcard/android/layout_tests/fast/events/mouseout-dead-subframe.html
-/sdcard/android/layout_tests/fast/events/iframe-object-onload.html
 /sdcard/android/layout_tests/fast/events/onunload-not-on-body.html
 /sdcard/android/layout_tests/fast/events/mousemove-after-drag-over-scrollbar.html
 /sdcard/android/layout_tests/fast/events/contextmenu-scrolled-page-with-frame.html
+/sdcard/android/layout_tests/fast/events/drag-to-navigate.html
 /sdcard/android/layout_tests/fast/events/key-events-in-input-button.html
 /sdcard/android/layout_tests/fast/events/arrow-keys-on-body.html
 /sdcard/android/layout_tests/fast/events/ondragenter.html
 /sdcard/android/layout_tests/fast/events/pointer-events.html
-/sdcard/android/layout_tests/fast/events/scroll-to-anchor-in-overflow-hidden.html
 /sdcard/android/layout_tests/fast/events/autoscroll-nonscrollable-iframe-in-scrollable-div.html
 /sdcard/android/layout_tests/fast/events/keypress-focus-change.html
 /sdcard/android/layout_tests/fast/events/key-events-in-input-text.html
@@ -293,118 +236,83 @@
 /sdcard/android/layout_tests/fast/events/click-count.html
 /sdcard/android/layout_tests/fast/events/onchange-searchfield.html
 /sdcard/android/layout_tests/fast/events/special-key-events-in-input-text.html
+/sdcard/android/layout_tests/fast/events/mouse-drag-from-frame.html
 /sdcard/android/layout_tests/fast/events/keydown-keypress-preventDefault.html
-/sdcard/android/layout_tests/fast/events/mouse-click-events.html
 /sdcard/android/layout_tests/fast/events/onsearch-enter.html
+/sdcard/android/layout_tests/fast/events/mouse-click-events.html
 /sdcard/android/layout_tests/fast/events/mouseover-mouseout2.html
 /sdcard/android/layout_tests/fast/events/open-window-from-another-frame.html
-/sdcard/android/layout_tests/fast/events/init-events.html
+/sdcard/android/layout_tests/fast/events/resize-subframe.html
 /sdcard/android/layout_tests/fast/events/onchange-textfield.html
 /sdcard/android/layout_tests/fast/events/onclick-list-marker.html
 /sdcard/android/layout_tests/fast/events/anchor-image-scrolled-x-y.html
-/sdcard/android/layout_tests/fast/html/tab-order.html
-/sdcard/android/layout_tests/fast/regex/test1.html
-/sdcard/android/layout_tests/fast/js/kde/garbage-n.html
+/sdcard/android/layout_tests/fast/images/image-map-zoom.html
 /sdcard/android/layout_tests/fast/js/kde/Number.html
-/sdcard/android/layout_tests/fast/js/kde/string-2-n.html
-/sdcard/android/layout_tests/fast/js/kde/encode_decode_uri.html
-/sdcard/android/layout_tests/fast/js/kde/string-1-n.html
-/sdcard/android/layout_tests/fast/js/exception-sequencing-binops.html
-/sdcard/android/layout_tests/fast/js/recursion-limit-equal.html
-/sdcard/android/layout_tests/fast/js/exception-sequencing-binops2.html
-/sdcard/android/layout_tests/fast/js/math-transforms.html
-/sdcard/android/layout_tests/fast/js/try-catch-crash.html
-/sdcard/android/layout_tests/fast/js/array-iterate-backwards.html
+/sdcard/android/layout_tests/fast/js/instanceof-operator.html
 /sdcard/android/layout_tests/fast/js/navigator-mimeTypes-length.html
 /sdcard/android/layout_tests/fast/js/global-constructors.html
-/sdcard/android/layout_tests/fast/js/uncaught-exception-line-number.html
-/sdcard/android/layout_tests/fast/js/exceptions-thrown-in-callbacks.html
-/sdcard/android/layout_tests/fast/js/toString-and-valueOf-override.html
-/sdcard/android/layout_tests/fast/js/function-toString-parentheses.html
-/sdcard/android/layout_tests/fast/js/large-expressions.html
-/sdcard/android/layout_tests/fast/js/exception-sequencing.html
-/sdcard/android/layout_tests/fast/js/exception-codegen-crash.html
-/sdcard/android/layout_tests/fast/dom/HTMLDocument/activeElement.html
-/sdcard/android/layout_tests/fast/dom/HTMLDocument/document-special-properties.html
-/sdcard/android/layout_tests/fast/dom/HTMLDocument/url-getset.html
+/sdcard/android/layout_tests/fast/js/convert-nan-to-bool.html
 /sdcard/android/layout_tests/fast/dom/HTMLDocument/hasFocus.html
-/sdcard/android/layout_tests/fast/dom/HTMLSelectElement/listbox-select-reset.html
 /sdcard/android/layout_tests/fast/dom/Document/early-document-access.html
-/sdcard/android/layout_tests/fast/dom/Element/offsetLeft-offsetTop-body-quirk.html
 /sdcard/android/layout_tests/fast/dom/DOMException/XPathException.html
+/sdcard/android/layout_tests/fast/dom/HTMLScriptElement/nested-execution.html
+/sdcard/android/layout_tests/fast/dom/HTMLDataGridElement/DataGridColumns-dom.html
+/sdcard/android/layout_tests/fast/dom/HTMLDataGridElement/DataGridColumns-basic.html
+/sdcard/android/layout_tests/fast/dom/HTMLDataGridElement/DataGridColumns-dom-attributes.html
+/sdcard/android/layout_tests/fast/dom/HTMLDataGridElement/DataGridDataSource-basic.html
 /sdcard/android/layout_tests/fast/dom/getElementsByClassName/010.xml
 /sdcard/android/layout_tests/fast/dom/getElementsByClassName/011.xml
-/sdcard/android/layout_tests/fast/dom/Window/window-resize-and-move-arguments.html
-/sdcard/android/layout_tests/fast/dom/Window/timeout-released-on-close.html
-/sdcard/android/layout_tests/fast/dom/Window/window-function-name-getter-precedence.html
 /sdcard/android/layout_tests/fast/dom/Window/window-xy-properties.html
-/sdcard/android/layout_tests/fast/dom/Window/console-functions.html
 /sdcard/android/layout_tests/fast/dom/Window/window-screen-properties.html
-/sdcard/android/layout_tests/fast/dom/Window/window-properties.html
-/sdcard/android/layout_tests/fast/dom/Window/window-onFocus.html
 /sdcard/android/layout_tests/fast/dom/Window/new-window-opener.html
-/sdcard/android/layout_tests/fast/dom/Window/window-open-pending-url.html
-/sdcard/android/layout_tests/fast/dom/Window/setting-properties-on-closed-window.html
 /sdcard/android/layout_tests/fast/dom/Window/dom-access-from-closure-window.html
 /sdcard/android/layout_tests/fast/dom/Window/window-resize.html
 /sdcard/android/layout_tests/fast/dom/Window/closure-access-after-navigation-window.html
-/sdcard/android/layout_tests/fast/dom/Window/window-special-properties.html
-/sdcard/android/layout_tests/fast/dom/Window/dom-access-from-closure-iframe.html
 /sdcard/android/layout_tests/fast/dom/Window/Plug-ins.html
 /sdcard/android/layout_tests/fast/dom/Window/get-set-properties.html
 /sdcard/android/layout_tests/fast/dom/Window/window-scroll-arguments.html
+/sdcard/android/layout_tests/fast/dom/Window/window-lookup-precedence.html
+/sdcard/android/layout_tests/fast/dom/Window/window-resize-and-move-arguments.html
+/sdcard/android/layout_tests/fast/dom/Window/custom-constructors.html
+/sdcard/android/layout_tests/fast/dom/Window/webkitConvertPoint.html
+/sdcard/android/layout_tests/fast/dom/Window/window-properties.html
+/sdcard/android/layout_tests/fast/dom/Window/window-onFocus.html
+/sdcard/android/layout_tests/fast/dom/Window/dom-access-from-closure-iframe.html
 /sdcard/android/layout_tests/fast/dom/Window/window-early-properties.html
 /sdcard/android/layout_tests/fast/dom/StyleSheet/ownerNode-lifetime-2.html
 /sdcard/android/layout_tests/fast/dom/dom-constructors.html
 /sdcard/android/layout_tests/fast/dom/assign-to-window-status.html
-/sdcard/android/layout_tests/fast/dom/gc-8.html
+/sdcard/android/layout_tests/fast/dom/navigator-detached-no-crash.html
 /sdcard/android/layout_tests/fast/dom/object-embed-plugin-scripting.html
 /sdcard/android/layout_tests/fast/dom/node-filter-gc.html
-/sdcard/android/layout_tests/fast/dom/noscript-canvas-in-created-html-document.html
-/sdcard/android/layout_tests/fast/dom/DOMParser-assign-variable.html
-/sdcard/android/layout_tests/fast/dom/timer-clear-interval-in-handler.html
-/sdcard/android/layout_tests/fast/dom/implementation-createHTMLDocument.html
-/sdcard/android/layout_tests/fast/dom/iframe-document.html
-/sdcard/android/layout_tests/fast/dom/document-all-input.html
-/sdcard/android/layout_tests/fast/dom/null-document-location-href-put-crash.html
-/sdcard/android/layout_tests/fast/dom/getelementsbytagnamens-mixed-namespaces.html
-/sdcard/android/layout_tests/fast/dom/object-plugin-hides-properties.html
-/sdcard/android/layout_tests/fast/dom/gc-2.html
-/sdcard/android/layout_tests/fast/dom/computed-style-set-property.html
-/sdcard/android/layout_tests/fast/dom/inner-text-001.html
-/sdcard/android/layout_tests/fast/dom/css-selectorText.html
-/sdcard/android/layout_tests/fast/dom/replace-first-child.html
-/sdcard/android/layout_tests/fast/dom/importNode-null.html
-/sdcard/android/layout_tests/fast/dom/select-selectedIndex-multiple.html
+/sdcard/android/layout_tests/fast/dom/getClientRects.html
+/sdcard/android/layout_tests/fast/dom/prototype-inheritance-2.html
+/sdcard/android/layout_tests/fast/dom/location-new-window-no-crash.html
 /sdcard/android/layout_tests/fast/dom/gc-9.html
-/sdcard/android/layout_tests/fast/dom/NamedNodeMap-setNamedItem-crash.html
 /sdcard/android/layout_tests/fast/dom/wrapper-classes.html
-/sdcard/android/layout_tests/fast/dom/select-selectedIndex.html
 /sdcard/android/layout_tests/fast/dom/document-width-height-force-layout.html
-/sdcard/android/layout_tests/fast/dom/gc-acid3.html
 /sdcard/android/layout_tests/fast/dom/client-width-height.html
+/sdcard/android/layout_tests/fast/dom/constructed-objects-prototypes.html
 /sdcard/android/layout_tests/fast/dom/global-constructors.html
 /sdcard/android/layout_tests/fast/dom/client-width-height-quirks.html
 /sdcard/android/layout_tests/fast/dom/javascript-url-crash-function.html
+/sdcard/android/layout_tests/fast/dom/getBoundingClientRect.html
 /sdcard/android/layout_tests/fast/dom/location-hash.html
-/sdcard/android/layout_tests/fast/dom/constructors-cached.html
-/sdcard/android/layout_tests/fast/dom/non-numeric-values-numeric-parameters.html
 /sdcard/android/layout_tests/fast/dom/documenturi-can-hold-arbitrary-string.html
 /sdcard/android/layout_tests/fast/dom/documenturi-not-affected-by-base-tag.html
 /sdcard/android/layout_tests/fast/dom/open-and-close-by-DOM.html
 /sdcard/android/layout_tests/fast/dom/set-frame-src-while-running-script-in-frame.html
-/sdcard/android/layout_tests/fast/dom/document_write_params.html
-/sdcard/android/layout_tests/fast/dom/namednodemap-namelookup.html
-/sdcard/android/layout_tests/fast/dom/null-document-location-replace-crash.html
-/sdcard/android/layout_tests/fast/dom/htmlcollection-detectability.html
-/sdcard/android/layout_tests/fast/dom/documenturi-assigned-junk-implies-relative-urls-do-not-resolve.html
-/sdcard/android/layout_tests/fast/dom/collection-namedItem-via-item.html
-/sdcard/android/layout_tests/fast/dom/set-inner-text-newlines.html
-/sdcard/android/layout_tests/fast/dom/document-dir-property.html
-/sdcard/android/layout_tests/fast/dom/undetectable-style-filter.html
-/sdcard/android/layout_tests/fast/dom/tabindex-clamp.html
-/sdcard/android/layout_tests/fast/dom/constructors-cached-navigate.html
+/sdcard/android/layout_tests/fast/dom/prototype-inheritance.html
+/sdcard/android/layout_tests/fast/dom/getBoundingClientRect-getClientRects-relative-to-viewport.html
 /sdcard/android/layout_tests/fast/dom/frame-loading-via-document-write.html
+/sdcard/android/layout_tests/fast/xpath/py-dom-xpath/paths.html
+/sdcard/android/layout_tests/fast/xpath/py-dom-xpath/expressions.html
+/sdcard/android/layout_tests/fast/xpath/py-dom-xpath/predicates.html
+/sdcard/android/layout_tests/fast/xpath/py-dom-xpath/abbreviations.html
+/sdcard/android/layout_tests/fast/xpath/py-dom-xpath/axes.html
+/sdcard/android/layout_tests/fast/xpath/py-dom-xpath/functions.html
+/sdcard/android/layout_tests/fast/xpath/py-dom-xpath/nodetests.html
+/sdcard/android/layout_tests/fast/xpath/py-dom-xpath/data.html
 /sdcard/android/layout_tests/fast/xpath/4XPath/Borrowed/od_20000608.html
 /sdcard/android/layout_tests/fast/xpath/4XPath/Borrowed/namespace-nodes.html
 /sdcard/android/layout_tests/fast/xpath/4XPath/Borrowed/rs_20010831.html
@@ -421,25 +329,30 @@
 /sdcard/android/layout_tests/fast/xpath/4XPath/Core/test_nodeset_expr.html
 /sdcard/android/layout_tests/fast/xpath/4XPath/Core/test_numeric_expr.html
 /sdcard/android/layout_tests/fast/xpath/4XPath/Core/test_step.html
+/sdcard/android/layout_tests/fast/xpath/detached-subtree-invalidate-iterator.html
 /sdcard/android/layout_tests/fast/xpath/ancestor-axis.html
 /sdcard/android/layout_tests/fast/xpath/string-value.html
-/sdcard/android/layout_tests/fast/xpath/name-null-namespace.html
 /sdcard/android/layout_tests/fast/xpath/id-simple.html
 /sdcard/android/layout_tests/fast/xpath/id-path.html
-/sdcard/android/layout_tests/fast/xpath/implicit-node-args.html
-/sdcard/android/layout_tests/fast/xpath/text-nodes.html
 /sdcard/android/layout_tests/fast/xpath/invalid-functions.html
 /sdcard/android/layout_tests/fast/xpath/xpath-namespaces.html
-/sdcard/android/layout_tests/fast/xpath/xpath-functional-test.html
+/sdcard/android/layout_tests/fast/xpath/node-name-case-sensitivity.html
+/sdcard/android/layout_tests/fast/xpath/xpath-empty-string.html
+/sdcard/android/layout_tests/fast/xpath/attribute-node-predicate.html
+/sdcard/android/layout_tests/fast/xpath/nodeset-duplicates.html
+/sdcard/android/layout_tests/fast/xpath/name-null-namespace.html
+/sdcard/android/layout_tests/fast/xpath/implicit-node-args.html
+/sdcard/android/layout_tests/fast/xpath/text-nodes.html
 /sdcard/android/layout_tests/fast/xpath/complex-id.html
+/sdcard/android/layout_tests/fast/xpath/xpath-functional-test.html
 /sdcard/android/layout_tests/fast/xpath/attr-namespace.html
-/sdcard/android/layout_tests/fast/xpath/substring-after.html
+/sdcard/android/layout_tests/fast/xpath/position.html
 /sdcard/android/layout_tests/fast/xpath/evaluate-twice.html
+/sdcard/android/layout_tests/fast/xpath/substring-after.html
 /sdcard/android/layout_tests/fast/xpath/empty-string-substring.html
 /sdcard/android/layout_tests/fast/xpath/document-order.html
-/sdcard/android/layout_tests/fast/xpath/nodeset-duplicates.html
-/sdcard/android/layout_tests/fast/xpath/nan-to-boolean.html
 /sdcard/android/layout_tests/fast/xpath/reverse-axes.html
+/sdcard/android/layout_tests/fast/xpath/nan-to-boolean.html
 /sdcard/android/layout_tests/fast/forms/mailto/get-non-ascii-text-plain.html
 /sdcard/android/layout_tests/fast/forms/mailto/advanced-get.html
 /sdcard/android/layout_tests/fast/forms/mailto/get-non-ascii-text-plain-latin-1.html
@@ -459,86 +372,85 @@
 /sdcard/android/layout_tests/fast/forms/mailto/advanced-put.html
 /sdcard/android/layout_tests/fast/forms/listbox-typeahead-scroll.html
 /sdcard/android/layout_tests/fast/forms/select-empty-list.html
-/sdcard/android/layout_tests/fast/forms/select-accesskey.html
 /sdcard/android/layout_tests/fast/forms/focus2.html
-/sdcard/android/layout_tests/fast/forms/password-doubleclick-selection.html
-/sdcard/android/layout_tests/fast/forms/textfield-inside-anchor.html
-/sdcard/android/layout_tests/fast/forms/textarea-trailing-newline.html
 /sdcard/android/layout_tests/fast/forms/legend-access-key.html
-/sdcard/android/layout_tests/fast/forms/input-maxlength.html
-/sdcard/android/layout_tests/fast/forms/selection-functions.html
-/sdcard/android/layout_tests/fast/forms/textfield-to-password-on-focus.html
-/sdcard/android/layout_tests/fast/forms/select-reset.html
 /sdcard/android/layout_tests/fast/forms/focus-selection-textarea.html
-/sdcard/android/layout_tests/fast/forms/enter-clicks-buttons.html
-/sdcard/android/layout_tests/fast/forms/radio_checked_name.html
-/sdcard/android/layout_tests/fast/forms/radio-check-click-and-drag.html
+/sdcard/android/layout_tests/fast/forms/select-popup-pagekeys.html
 /sdcard/android/layout_tests/fast/forms/select-double-onchange.html
 /sdcard/android/layout_tests/fast/forms/button-enter-click.html
-/sdcard/android/layout_tests/fast/forms/search-click-in-placeholder.html
 /sdcard/android/layout_tests/fast/forms/autofocus-opera-003.html
-/sdcard/android/layout_tests/fast/forms/search-hidden-cancel-button.html
-/sdcard/android/layout_tests/fast/forms/dragging-to-file-input.html
-/sdcard/android/layout_tests/fast/forms/textarea-paste-newline.html
-/sdcard/android/layout_tests/fast/forms/drag-into-textarea.html
+/sdcard/android/layout_tests/fast/forms/search-click-in-placeholder.html
 /sdcard/android/layout_tests/fast/forms/onselect-textfield.html
-/sdcard/android/layout_tests/fast/forms/input-implicit-length-limit.html
-/sdcard/android/layout_tests/fast/forms/form-and-frame-interaction-retains-values.html
-/sdcard/android/layout_tests/fast/forms/slider-transformed.html
-/sdcard/android/layout_tests/fast/forms/listbox-select-all.html
 /sdcard/android/layout_tests/fast/forms/textfield-onchange-deletion.html
-/sdcard/android/layout_tests/fast/forms/focus-control-to-page.html
-/sdcard/android/layout_tests/fast/forms/select-type-ahead-non-latin.html
-/sdcard/android/layout_tests/fast/forms/textarea-no-scroll-on-blur.html
-/sdcard/android/layout_tests/fast/forms/focus-selection-input.html
 /sdcard/android/layout_tests/fast/forms/listbox-onchange.html
 /sdcard/android/layout_tests/fast/forms/button-spacebar-click.html
-/sdcard/android/layout_tests/fast/forms/search-event-delay.html
 /sdcard/android/layout_tests/fast/forms/search-cancel-button-mouseup.html
+/sdcard/android/layout_tests/fast/forms/get-file-upload.html
 /sdcard/android/layout_tests/fast/forms/select-enter-key.html
 /sdcard/android/layout_tests/fast/forms/drag-out-of-textarea.html
-/sdcard/android/layout_tests/fast/forms/textarea-hard-linewrap.html
-/sdcard/android/layout_tests/fast/forms/dragging-to-disabled-file-input.html
+/sdcard/android/layout_tests/fast/forms/option-mouseevents.html
 /sdcard/android/layout_tests/fast/forms/input-radio-checked-tab.html
 /sdcard/android/layout_tests/fast/forms/plaintext-mode-1.html
-/sdcard/android/layout_tests/fast/forms/check-box-enter-key.html
 /sdcard/android/layout_tests/fast/forms/input-select-on-click.html
-/sdcard/android/layout_tests/fast/forms/button-state-restore.html
-/sdcard/android/layout_tests/fast/forms/input-appearance-elementFromPoint.html
-/sdcard/android/layout_tests/fast/forms/select-set-inner.html
-/sdcard/android/layout_tests/fast/forms/missing-action.html
-/sdcard/android/layout_tests/fast/forms/access-key.html
 /sdcard/android/layout_tests/fast/forms/textarea-scrolled-endline-caret.html
 /sdcard/android/layout_tests/fast/forms/textarea-scrollbar-height.html
 /sdcard/android/layout_tests/fast/forms/textarea-type-spaces.html
 /sdcard/android/layout_tests/fast/forms/slider-mouse-events.html
-/sdcard/android/layout_tests/fast/forms/textarea-selection-preservation.html
 /sdcard/android/layout_tests/fast/forms/slider-onchange-event.html
-/sdcard/android/layout_tests/fast/forms/add-remove-form-elements-stress-test.html
+/sdcard/android/layout_tests/fast/forms/textarea-input-event.html
+/sdcard/android/layout_tests/fast/forms/search-delete-while-cancel-button-clicked.html
+/sdcard/android/layout_tests/fast/forms/select-accesskey.html
+/sdcard/android/layout_tests/fast/forms/password-doubleclick-selection.html
+/sdcard/android/layout_tests/fast/forms/textfield-inside-anchor.html
+/sdcard/android/layout_tests/fast/forms/slider-delete-while-dragging-thumb.html
+/sdcard/android/layout_tests/fast/forms/textfield-to-password-on-focus.html
+/sdcard/android/layout_tests/fast/forms/textarea-arrow-navigation.html
+/sdcard/android/layout_tests/fast/forms/search-abs-pos-cancel-button.html
+/sdcard/android/layout_tests/fast/forms/enter-clicks-buttons.html
+/sdcard/android/layout_tests/fast/forms/radio_checked_name.html
+/sdcard/android/layout_tests/fast/forms/search-hidden-cancel-button.html
+/sdcard/android/layout_tests/fast/forms/select-script-onchange.html
+/sdcard/android/layout_tests/fast/forms/textarea-paste-newline.html
+/sdcard/android/layout_tests/fast/forms/drag-into-textarea.html
+/sdcard/android/layout_tests/fast/forms/form-and-frame-interaction-retains-values.html
+/sdcard/android/layout_tests/fast/forms/slider-transformed.html
+/sdcard/android/layout_tests/fast/forms/focus-control-to-page.html
+/sdcard/android/layout_tests/fast/forms/select-type-ahead-non-latin.html
+/sdcard/android/layout_tests/fast/forms/focus-selection-input.html
+/sdcard/android/layout_tests/fast/forms/slider-zoomed.html
+/sdcard/android/layout_tests/fast/forms/search-event-delay.html
+/sdcard/android/layout_tests/fast/forms/empty-textarea-toggle-disabled.html
+/sdcard/android/layout_tests/fast/forms/25153.html
+/sdcard/android/layout_tests/fast/forms/select-cache-desynchronization.html
+/sdcard/android/layout_tests/fast/forms/check-box-enter-key.html
+/sdcard/android/layout_tests/fast/forms/button-state-restore.html
+/sdcard/android/layout_tests/fast/forms/access-key.html
+/sdcard/android/layout_tests/fast/forms/textarea-selection-preservation.html
+/sdcard/android/layout_tests/fast/forms/textarea-metrics.html
 /sdcard/android/layout_tests/fast/forms/onchange-enter-submit.html
-/sdcard/android/layout_tests/fast/forms/textarea-appearance-wrap.html
-/sdcard/android/layout_tests/fast/forms/willvalidate-006.html
 /sdcard/android/layout_tests/fast/forms/onselect-textarea.html
-/sdcard/android/layout_tests/fast/forms/textarea-initial-caret-position.html
 /sdcard/android/layout_tests/fast/forms/listbox-selection.html
-/sdcard/android/layout_tests/fast/css/variables/color-hex-test.html
-/sdcard/android/layout_tests/fast/css/dashboard-region-parser.html
+/sdcard/android/layout_tests/fast/css/getComputedStyle/computed-style.html
+/sdcard/android/layout_tests/fast/css/getComputedStyle/computed-style-without-renderer.html
 /sdcard/android/layout_tests/fast/css/text-align.html
 /sdcard/android/layout_tests/fast/css/hover-affects-child.html
-/sdcard/android/layout_tests/fast/css/html-attr-case-sensitivity.html
-/sdcard/android/layout_tests/fast/css/computed-style.html
-/sdcard/android/layout_tests/fast/css/getComputedStyle-transform.html
-/sdcard/android/layout_tests/fast/css/computed-style-without-renderer.html
+/sdcard/android/layout_tests/fast/css/resize-single-axis.html
+/sdcard/android/layout_tests/fast/css/percent-character-as-value.html
+/sdcard/android/layout_tests/fast/css/uri-token-parsing.html
+/sdcard/android/layout_tests/fast/css/mask-missing-image-crash.html
+/sdcard/android/layout_tests/fast/css/parse-timing-function-crash.html
+/sdcard/android/layout_tests/fast/css/background-position-inherit.html
+/sdcard/android/layout_tests/fast/css/readonly-pseudoclass-opera-003.html
+/sdcard/android/layout_tests/fast/css/zoom-body-scroll.html
+/sdcard/android/layout_tests/fast/css/font-family-builtins.html
 /sdcard/android/layout_tests/fast/css/invalid-percentage-property.html
-/sdcard/android/layout_tests/fast/parser/entity-comment-in-iframe.html
-/sdcard/android/layout_tests/fast/parser/external-entities.xml
-/sdcard/android/layout_tests/fast/parser/script-tag-with-trailing-slash.html
-/sdcard/android/layout_tests/fast/parser/comment-in-iframe.html
+/sdcard/android/layout_tests/fast/css/remove-shorthand.html
+/sdcard/android/layout_tests/fast/css/overflow-property.html
 /sdcard/android/layout_tests/fast/parser/external-entities-in-xslt.xml
 /sdcard/android/layout_tests/fast/parser/xml-declaration-missing-ending-mark.html
-/sdcard/android/layout_tests/fast/parser/entity-end-script-tag.html
 /sdcard/android/layout_tests/fast/parser/tabindex-parsing.html
-/sdcard/android/layout_tests/fast/history/subframe-is-visited.html
+/sdcard/android/layout_tests/fast/history/saves-state-after-fragment-nav.html
+/sdcard/android/layout_tests/fast/history/back-forward-is-asynchronous.html
 /sdcard/android/layout_tests/fast/history/window-open.html
 /sdcard/android/layout_tests/fast/history/history_reload.html
 /sdcard/android/layout_tests/fast/history/go-back-to-changed-name.html
@@ -546,15 +458,21 @@
 /sdcard/android/layout_tests/fast/loader/local-iFrame-source-from-local.html
 /sdcard/android/layout_tests/fast/loader/null-request-after-willSendRequest.html
 /sdcard/android/layout_tests/fast/loader/stop-provisional-loads.html
-/sdcard/android/layout_tests/fast/loader/xmlhttprequest-missing-file-exception.html
+/sdcard/android/layout_tests/fast/loader/user-style-sheet-resource-load-callbacks.html
+/sdcard/android/layout_tests/fast/loader/policy-delegate-action-hit-test-zoomed.html
+/sdcard/android/layout_tests/fast/loader/subframe-navigate-during-main-frame-load.html
 /sdcard/android/layout_tests/fast/loader/onunload-form-submit-crash-2.html
+/sdcard/android/layout_tests/fast/loader/javascript-url-hierarchical-execution.html
 /sdcard/android/layout_tests/fast/loader/plain-text-document.html
 /sdcard/android/layout_tests/fast/loader/onunload-form-submit-crash.html
-/sdcard/android/layout_tests/fast/loader/frame-creation-removal.html
+/sdcard/android/layout_tests/fast/loader/subframe-self-close.html
 /sdcard/android/layout_tests/fast/loader/local-image-from-local.html
 /sdcard/android/layout_tests/fast/loader/local-CSS-from-local.html
+/sdcard/android/layout_tests/fast/loader/reload-policy-delegate.html
 /sdcard/android/layout_tests/fast/loader/local-JavaScript-from-local.html
+/sdcard/android/layout_tests/fast/loader/main-document-url-for-non-http-loads.html
 /sdcard/android/layout_tests/fast/loader/data-url-encoding-svg.html
+/sdcard/android/layout_tests/fast/loader/data-url-encoding-html.html
 /sdcard/android/layout_tests/fast/loader/opaque-base-url.html
 /sdcard/android/layout_tests/fast/xsl/sort-locale.xml
 /sdcard/android/layout_tests/fast/xsl/transformToFragment-XML-declaration.html
@@ -576,123 +494,159 @@
 /sdcard/android/layout_tests/fast/xsl/subframe-location.html
 /sdcard/android/layout_tests/fast/xsl/xslt-second-level-import.xml
 /sdcard/android/layout_tests/fast/xsl/dtd-in-source-document.xml
+/sdcard/android/layout_tests/fast/xsl/xslt-fragment-in-empty-doc.html
 /sdcard/android/layout_tests/fast/xsl/mozilla-tests.xml
+/sdcard/android/layout_tests/fast/xmlhttprequest/xmlhttprequest-bad-mimetype.html
+/sdcard/android/layout_tests/fast/xmlhttprequest/xmlhttprequest-gc.html
 /sdcard/android/layout_tests/fast/canvas/canvas-alphaImageData-behavior.html
+/sdcard/android/layout_tests/fast/canvas/canvas-gradient-addStop-error.html
+/sdcard/android/layout_tests/fast/canvas/canvas-pattern-behaviour.html
 /sdcard/android/layout_tests/fast/canvas/canvas-transform-non-invertible.html
 /sdcard/android/layout_tests/fast/canvas/pointInPath.html
 /sdcard/android/layout_tests/fast/canvas/canvas-transform-infinity.html
+/sdcard/android/layout_tests/fast/canvas/translate-text.html
 /sdcard/android/layout_tests/fast/canvas/toDataURL-supportedTypes.html
 /sdcard/android/layout_tests/fast/canvas/canvas-getImageData.html
+/sdcard/android/layout_tests/fast/canvas/canvas-empty-image-pattern.html
 /sdcard/android/layout_tests/fast/canvas/canvas-transform-skewed.html
+/sdcard/android/layout_tests/fast/canvas/canvas-ImageData-behaviour.html
+/sdcard/android/layout_tests/fast/canvas/canvas-putImageData.html
+/sdcard/android/layout_tests/fast/canvas/canvas-pattern-modify.html
 /sdcard/android/layout_tests/fast/canvas/canvas-longlived-context.html
 /sdcard/android/layout_tests/fast/canvas/canvas-save-restore-with-path.html
-/sdcard/android/layout_tests/fast/canvas/set-colors.html
 /sdcard/android/layout_tests/fast/canvas/canvas-transform-nan.html
+/sdcard/android/layout_tests/fast/canvas/canvas-pattern-transform.html
 /sdcard/android/layout_tests/fast/canvas/canvas-transform-identity.html
+/sdcard/android/layout_tests/fast/canvas/set-colors.html
 /sdcard/android/layout_tests/fast/canvas/canvas-transform-multiply.html
 /sdcard/android/layout_tests/fast/frames/viewsource-empty-attribute-value.html
+/sdcard/android/layout_tests/fast/frames/location-put-after-removal.html
 /sdcard/android/layout_tests/fast/frames/frame-deep-nested-resize.html
 /sdcard/android/layout_tests/fast/frames/iframe-window-focus.html
+/sdcard/android/layout_tests/fast/frames/frame-dead-region.html
 /sdcard/android/layout_tests/fast/frames/frameElement-widthheight.html
 /sdcard/android/layout_tests/fast/frames/removal-before-attach-crash.html
+/sdcard/android/layout_tests/fast/frames/frame-unload-crash.html
 /sdcard/android/layout_tests/fast/frames/frame-js-url-clientWidth.html
+/sdcard/android/layout_tests/fast/frames/iframe-js-url-clientWidth.html
 /sdcard/android/layout_tests/fast/frames/frame-length-fractional.html
-/sdcard/android/layout_tests/fast/frames/frame-limit.html
-/sdcard/android/layout_tests/fast/frames/frame-display-none-focus.html
 /sdcard/android/layout_tests/fast/frames/iframe-name-and-id.html
-/sdcard/android/layout_tests/fast/reflections/teardown-crash.html
-/sdcard/android/layout_tests/fast/reflections/reflection-computed-style.html
-/sdcard/android/layout_tests/transforms/2d/transform-2d.html
-/sdcard/android/layout_tests/transforms/2d/compound-2d-transforms.html
-/sdcard/android/layout_tests/transforms/2d/transform-value-types.html
-/sdcard/android/layout_tests/transforms/2d/computed-style-origin.html
-/sdcard/android/layout_tests/transforms/2d/transform-accuracy.html
-/sdcard/android/layout_tests/wml/variable-reference-valid.html
-/sdcard/android/layout_tests/wml/go-task-get-method-external-deck-with-href.html
-/sdcard/android/layout_tests/wml/variable-reference-invalid-character.html
-/sdcard/android/layout_tests/wml/go-task-animation.html
-/sdcard/android/layout_tests/wml/go-task-get-method-external-deck.html
-/sdcard/android/layout_tests/wml/go-task-get-method-same-deck.html
-/sdcard/android/layout_tests/animations/animation-css-rule-types.html
-/sdcard/android/layout_tests/animations/animation-events-create.html
-/sdcard/android/layout_tests/animations/animation-start-event-destroy-renderer.html
-/sdcard/android/layout_tests/animations/combo-transform-translate+scale.html
-/sdcard/android/layout_tests/animations/simultaneous-start-transform.html
-/sdcard/android/layout_tests/animations/lineheight-animation.html
-/sdcard/android/layout_tests/animations/import.html
-/sdcard/android/layout_tests/animations/simultaneous-start-left.html
-/sdcard/android/layout_tests/animations/fill-unset-properties.html
-/sdcard/android/layout_tests/animations/keyframes-to-missing.html
-/sdcard/android/layout_tests/animations/multiple-keyframes.html
-/sdcard/android/layout_tests/animations/matrix-anim.html
-/sdcard/android/layout_tests/animations/keyframes-comma-separated.html
-/sdcard/android/layout_tests/animations/change-one-anim.html
-/sdcard/android/layout_tests/animations/keyframes-rule.html
-/sdcard/android/layout_tests/animations/generic-from-to.html
-/sdcard/android/layout_tests/animations/big-rotation.html
-/sdcard/android/layout_tests/animations/animation-controller-drt-api.html
-/sdcard/android/layout_tests/animations/keyframe-timing-functions.html
-/sdcard/android/layout_tests/animations/keyframes-from-missing.html
-/sdcard/android/layout_tests/animations/transition-and-animation-1.html
-/sdcard/android/layout_tests/animations/computed-style.html
-/sdcard/android/layout_tests/animations/animation-iteration-event-destroy-renderer.html
-/sdcard/android/layout_tests/animations/keyframes.html
-/sdcard/android/layout_tests/animations/multiple-animations.html
-/sdcard/android/layout_tests/animations/animation-end-event-destroy-renderer.html
-/sdcard/android/layout_tests/animations/change-keyframes-name.html
-/sdcard/android/layout_tests/animations/combo-transform-rotate+scale.html
-/sdcard/android/layout_tests/animations/change-keyframes.html
-/sdcard/android/layout_tests/traversal/hixie-node-iterator/010.xml
-/sdcard/android/layout_tests/traversal/hixie-node-iterator/001.xml
-/sdcard/android/layout_tests/traversal/hixie-node-iterator/002.xml
-/sdcard/android/layout_tests/traversal/hixie-node-iterator/003.xml
-/sdcard/android/layout_tests/traversal/hixie-node-iterator/004.xml
-/sdcard/android/layout_tests/traversal/hixie-node-iterator/005.xml
-/sdcard/android/layout_tests/traversal/hixie-node-iterator/006.xml
-/sdcard/android/layout_tests/traversal/hixie-node-iterator/007.xml
-/sdcard/android/layout_tests/traversal/hixie-node-iterator/008.xml
-/sdcard/android/layout_tests/traversal/hixie-node-iterator/009.xml
-/sdcard/android/layout_tests/storage/domstorage/localstorage/index-get-and-set.html
-/sdcard/android/layout_tests/storage/domstorage/localstorage/onstorage-attribute-setattribute.html
-/sdcard/android/layout_tests/storage/domstorage/localstorage/clear.html
-/sdcard/android/layout_tests/storage/domstorage/localstorage/enumerate-storage.html
-/sdcard/android/layout_tests/storage/domstorage/localstorage/simple-usage.html
-/sdcard/android/layout_tests/storage/domstorage/localstorage/simple-events.html
-/sdcard/android/layout_tests/storage/domstorage/localstorage/onstorage-attribute-markup.html
-/sdcard/android/layout_tests/storage/domstorage/localstorage/iframe-events.html
-/sdcard/android/layout_tests/storage/domstorage/localstorage/delete-removal.html
-/sdcard/android/layout_tests/storage/domstorage/localstorage/window-open.html
-/sdcard/android/layout_tests/storage/domstorage/sessionstorage/index-get-and-set.html
-/sdcard/android/layout_tests/storage/domstorage/sessionstorage/onstorage-attribute-setattribute.html
-/sdcard/android/layout_tests/storage/domstorage/sessionstorage/clear.html
-/sdcard/android/layout_tests/storage/domstorage/sessionstorage/enumerate-storage.html
-/sdcard/android/layout_tests/storage/domstorage/sessionstorage/simple-usage.html
-/sdcard/android/layout_tests/storage/domstorage/sessionstorage/simple-events.html
-/sdcard/android/layout_tests/storage/domstorage/sessionstorage/onstorage-attribute-markup.html
-/sdcard/android/layout_tests/storage/domstorage/sessionstorage/iframe-events.html
-/sdcard/android/layout_tests/storage/domstorage/sessionstorage/delete-removal.html
-/sdcard/android/layout_tests/storage/domstorage/sessionstorage/window-open.html
-/sdcard/android/layout_tests/storage/domstorage/window-attributes-exist.html
-/sdcard/android/layout_tests/storage/open-database-empty-version.html
-/sdcard/android/layout_tests/storage/close-during-stress-test.html
-/sdcard/android/layout_tests/storage/execute-sql-args.html
-/sdcard/android/layout_tests/storage/quota-tracking.html
-/sdcard/android/layout_tests/storage/transaction_callback_exception_crash.html
-/sdcard/android/layout_tests/storage/multiple-databases-garbage-collection.html
-/sdcard/android/layout_tests/storage/empty-statement.html
-/sdcard/android/layout_tests/storage/multiple-transactions.html
-/sdcard/android/layout_tests/storage/success-callback.html
-/sdcard/android/layout_tests/storage/sql-data-types.html
+/sdcard/android/layout_tests/fast/loading/subframe-removes-itself.html
+/sdcard/android/layout_tests/media/video-error-does-not-exist.html
+/sdcard/android/layout_tests/media/audio-constructor.html
+/sdcard/android/layout_tests/media/video-append-source.html
+/sdcard/android/layout_tests/media/media-load-event.html
+/sdcard/android/layout_tests/media/unsupported-rtsp.html
+/sdcard/android/layout_tests/media/video-currentTime-set2.html
+/sdcard/android/layout_tests/media/video-muted.html
+/sdcard/android/layout_tests/media/progress-event.html
+/sdcard/android/layout_tests/media/video-source-type.html
+/sdcard/android/layout_tests/media/audio-delete-while-step-button-clicked.html
+/sdcard/android/layout_tests/media/video-played-reset.html
+/sdcard/android/layout_tests/media/video-seek-past-end-playing.html
+/sdcard/android/layout_tests/media/video-dom-src.html
+/sdcard/android/layout_tests/media/remove-from-document.html
+/sdcard/android/layout_tests/media/video-loop.html
+/sdcard/android/layout_tests/media/video-src-change.html
+/sdcard/android/layout_tests/media/video-seekable.html
+/sdcard/android/layout_tests/media/video-played.html
+/sdcard/android/layout_tests/media/video-played-collapse.html
+/sdcard/android/layout_tests/media/video-click-dblckick-standalone.html
+/sdcard/android/layout_tests/media/video-can-play-type.html
+/sdcard/android/layout_tests/media/video-seeking.html
+/sdcard/android/layout_tests/media/video-controls-transformed.html
+/sdcard/android/layout_tests/media/video-controls-zoomed.html
+/sdcard/android/layout_tests/media/video-src-invalid-remove.html
+/sdcard/android/layout_tests/media/video-volume.html
+/sdcard/android/layout_tests/media/controls-right-click-on-timebar.html
+/sdcard/android/layout_tests/media/video-currentTime.html
+/sdcard/android/layout_tests/media/audio-constructor-autobuffer.html
+/sdcard/android/layout_tests/media/broken-video.html
+/sdcard/android/layout_tests/media/video-buffered.html
+/sdcard/android/layout_tests/media/video-load-networkState.html
+/sdcard/android/layout_tests/media/unsupported-tracks.html
+/sdcard/android/layout_tests/media/video-source-add-src.html
+/sdcard/android/layout_tests/media/video-seek-past-end-paused.html
+/sdcard/android/layout_tests/media/video-source-error.html
+/sdcard/android/layout_tests/media/video-controls.html
+/sdcard/android/layout_tests/media/video-canvas-source.html
+/sdcard/android/layout_tests/media/video-currentTime-set.html
+/sdcard/android/layout_tests/media/video-source-type-params.html
+/sdcard/android/layout_tests/media/event-attributes.html
+/sdcard/android/layout_tests/media/audio-data-url.html
+/sdcard/android/layout_tests/media/video-src-plus-source.html
+/sdcard/android/layout_tests/media/video-no-autoplay.html
+/sdcard/android/layout_tests/media/video-document-types.html
+/sdcard/android/layout_tests/media/audio-delete-while-slider-thumb-clicked.html
+/sdcard/android/layout_tests/media/video-error-abort.html
+/sdcard/android/layout_tests/media/video-size-intrinsic-scale.html
+/sdcard/android/layout_tests/media/progress-event-total.html
+/sdcard/android/layout_tests/media/audio-constructor-src.html
+/sdcard/android/layout_tests/media/audio-mpeg-supported.html
+/sdcard/android/layout_tests/plugins/throw-on-dealloc.html
+/sdcard/android/layout_tests/plugins/invoke.html
+/sdcard/android/layout_tests/plugins/plugin-remove-subframe.html
+/sdcard/android/layout_tests/plugins/netscape-identifier-conversion.html
+/sdcard/android/layout_tests/plugins/netscape-invoke-browserfuncs.html
+/sdcard/android/layout_tests/plugins/call-as-function-test.html
+/sdcard/android/layout_tests/plugins/npruntime.html
+/sdcard/android/layout_tests/plugins/netscape-construct.html
+/sdcard/android/layout_tests/plugins/root-object-premature-delete-crash.html
+/sdcard/android/layout_tests/plugins/netscape-get-property-return-value.html
+/sdcard/android/layout_tests/plugins/mouse-events.html
+/sdcard/android/layout_tests/plugins/return-error-from-new-stream-doesnt-invoke-destroy-stream.html
+/sdcard/android/layout_tests/plugins/destroy-stream-twice.html
+/sdcard/android/layout_tests/plugins/jsobjc-simple.html
+/sdcard/android/layout_tests/plugins/embed-attributes-setting.html
+/sdcard/android/layout_tests/plugins/inner-html-display-none.html
+/sdcard/android/layout_tests/plugins/netscape-invoke-default.html
+/sdcard/android/layout_tests/plugins/undefined-property-crash.html
+/sdcard/android/layout_tests/plugins/netscape-plugin-map-data-to-src.html
+/sdcard/android/layout_tests/plugins/netscape-plugin-setwindow-size-2.html
+/sdcard/android/layout_tests/plugins/jsobjc-dom-wrappers.html
+/sdcard/android/layout_tests/plugins/plugin-javascript-access.html
+/sdcard/android/layout_tests/plugins/getintidentifier-special-values.html
+/sdcard/android/layout_tests/plugins/get-empty-url.html
+/sdcard/android/layout_tests/plugins/geturl-replace-query.html
+/sdcard/android/layout_tests/plugins/netscape-destroy-plugin-script-objects.html
+/sdcard/android/layout_tests/plugins/open-and-close-window-with-plugin.html
+/sdcard/android/layout_tests/plugins/netscape-enumerate.html
+/sdcard/android/layout_tests/plugins/get-url-that-the-resource-load-delegate-will-disallow.html
+/sdcard/android/layout_tests/plugins/netscape-plugin-setwindow-size.html
+/sdcard/android/layout_tests/plugins/embed-inside-object.html
+/sdcard/android/layout_tests/plugins/netscape-throw-exception.html
+/sdcard/android/layout_tests/plugins/get-url-with-blank-target.html
+/sdcard/android/layout_tests/plugins/bindings-test.html
+/sdcard/android/layout_tests/scrollbars/scrollbar-miss-mousemove-disabled.html
 /sdcard/android/layout_tests/security/set-form-autocomplete-attribute.html
-/sdcard/android/layout_tests/security/autocomplete-cleared-on-back.html
-/sdcard/android/layout_tests/security/block-test.html
+/sdcard/android/layout_tests/storage/execute-sql-args.html
 /sdcard/android/layout_tests/transitions/transition-shorthand-delay.html
 /sdcard/android/layout_tests/transitions/transition-drt-api-delay.html
+/sdcard/android/layout_tests/transitions/transition-hit-test.html
 /sdcard/android/layout_tests/transitions/opacity-transition-zindex.html
-/sdcard/android/layout_tests/transitions/shorthand-transitions.html
+/sdcard/android/layout_tests/transitions/interrupted-all-transition.html
+/sdcard/android/layout_tests/transitions/mask-transitions.html
+/sdcard/android/layout_tests/transitions/zero-duration-with-non-zero-delay-start.html
 /sdcard/android/layout_tests/transitions/hang-with-bad-transition-list.html
-/sdcard/android/layout_tests/transitions/zero-duration-in-list.html
-/sdcard/android/layout_tests/transitions/shorthand-border-transitions.html
 /sdcard/android/layout_tests/transitions/zero-duration-with-non-zero-delay-end.html
+/sdcard/android/layout_tests/transitions/remove-transition-style.html
+/sdcard/android/layout_tests/transitions/transition-hit-test-transform.html
 /sdcard/android/layout_tests/transitions/repeated-firing-background-color.html
-/sdcard/android/layout_tests/transitions/start-transform-transition.html
+/sdcard/android/layout_tests/webarchive/loading/test-loading-archive.html
+/sdcard/android/layout_tests/wml/onenterforward-event.html
+/sdcard/android/layout_tests/wml/go-task-get-method-external-deck-with-href.html
+/sdcard/android/layout_tests/wml/option-element-onpick.html
+/sdcard/android/layout_tests/wml/enter-first-card-with-events.html
+/sdcard/android/layout_tests/wml/go-task-get-method-external-deck.html
+/sdcard/android/layout_tests/wml/go-task-get-method-same-deck.html
+/sdcard/android/layout_tests/wml/onenterforward-inline-event.html
+/sdcard/android/layout_tests/wml/ontimer-event.html
+/sdcard/android/layout_tests/wml/variable-reference-invalid-character.html
+/sdcard/android/layout_tests/wml/enter-card-with-events.html
+/sdcard/android/layout_tests/wml/ontimer-inline-event.html
+/sdcard/android/layout_tests/wml/select-element-variables.html
+/sdcard/android/layout_tests/wml/variable-reference-valid.html
+/sdcard/android/layout_tests/wml/access-target-deny.html
+/sdcard/android/layout_tests/wml/input-format.html
+/sdcard/android/layout_tests/wml/access-target.html
+/sdcard/android/layout_tests/wml/newcontext-same-deck.html
diff --git a/tests/DumpRenderTree/assets/results/layout_tests_nontext.txt b/tests/DumpRenderTree/assets/results/layout_tests_nontext.txt
index eb5b6e0..121b5a1 100644
--- a/tests/DumpRenderTree/assets/results/layout_tests_nontext.txt
+++ b/tests/DumpRenderTree/assets/results/layout_tests_nontext.txt
@@ -1,2533 +1,149 @@
-/sdcard/android/layout_tests/webarchive/loading/cache-expired-subresource.html
-/sdcard/android/layout_tests/webarchive/test-css-import.html
-/sdcard/android/layout_tests/webarchive/test-img-src.html
-/sdcard/android/layout_tests/webarchive/archive-empty-frame-dom.html
-/sdcard/android/layout_tests/webarchive/test-frameset.html
-/sdcard/android/layout_tests/webarchive/test-body-background.html
-/sdcard/android/layout_tests/webarchive/test-input-src.html
-/sdcard/android/layout_tests/webarchive/archive-empty-frame-source.html
-/sdcard/android/layout_tests/webarchive/doctype.html
-/sdcard/android/layout_tests/webarchive/test-css-url-resources-inline-styles.html
-/sdcard/android/layout_tests/webarchive/test-table-background.html
-/sdcard/android/layout_tests/webarchive/test-object-data.html
-/sdcard/android/layout_tests/webarchive/test-css-url-resources-in-stylesheets.html
-/sdcard/android/layout_tests/webarchive/archive-with-unencoded-url.html
-/sdcard/android/layout_tests/webarchive/test-link-href.html
-/sdcard/android/layout_tests/webarchive/test-duplicate-resources.html
-/sdcard/android/layout_tests/webarchive/test-xml-stylesheet.xml
-/sdcard/android/layout_tests/webarchive/test-td-background.html
-/sdcard/android/layout_tests/webarchive/test-script-src.html
-/sdcard/android/layout_tests/media/video-transformed.html
-/sdcard/android/layout_tests/media/video-display-toggle.html
-/sdcard/android/layout_tests/media/audio-controls-rendering.html
-/sdcard/android/layout_tests/media/video-controls-visible-audio-only.html
-/sdcard/android/layout_tests/media/video-zoom.html
-/sdcard/android/layout_tests/media/video-controls-rendering.html
-/sdcard/android/layout_tests/media/video-aspect-ratio.html
-/sdcard/android/layout_tests/media/video-layer-crash.html
-/sdcard/android/layout_tests/plugins/netscape-dom-access.html
-/sdcard/android/layout_tests/plugins/embed-attributes-style.html
-/sdcard/android/layout_tests/editing/input/emacs-ctrl-o.html
-/sdcard/android/layout_tests/editing/style/style-3681552-fix-001.html
-/sdcard/android/layout_tests/editing/style/create-block-for-style-013.html
-/sdcard/android/layout_tests/editing/style/style-3690704-fix.html
-/sdcard/android/layout_tests/editing/style/create-block-for-style-005.html
-/sdcard/android/layout_tests/editing/style/style-boundary-002.html
-/sdcard/android/layout_tests/editing/style/remove-underline-after-paragraph.html
-/sdcard/android/layout_tests/editing/style/create-block-for-style-009.html
-/sdcard/android/layout_tests/editing/style/5228141.html
-/sdcard/android/layout_tests/editing/style/block-style-004.html
-/sdcard/android/layout_tests/editing/style/apple-style-editable-mix.html
-/sdcard/android/layout_tests/editing/style/unbold-in-bold.html
-/sdcard/android/layout_tests/editing/style/typing-style-001.html
-/sdcard/android/layout_tests/editing/style/remove-underline-from-stylesheet.html
-/sdcard/android/layout_tests/editing/style/relative-font-size-change-004.html
-/sdcard/android/layout_tests/editing/style/create-block-for-style-010.html
-/sdcard/android/layout_tests/editing/style/create-block-for-style-002.html
-/sdcard/android/layout_tests/editing/style/style-3681552-fix-002.html
-/sdcard/android/layout_tests/editing/style/create-block-for-style-006.html
-/sdcard/android/layout_tests/editing/style/style-boundary-003.html
-/sdcard/android/layout_tests/editing/style/block-style-001.html
-/sdcard/android/layout_tests/editing/style/smoosh-styles-001.html
-/sdcard/android/layout_tests/editing/style/font-family-with-space.html
-/sdcard/android/layout_tests/editing/style/5084241.html
-/sdcard/android/layout_tests/editing/style/5065910.html
-/sdcard/android/layout_tests/editing/style/block-style-005.html
-/sdcard/android/layout_tests/editing/style/remove-underline-across-paragraph-in-bold.html
-/sdcard/android/layout_tests/editing/style/5279521.html
-/sdcard/android/layout_tests/editing/style/non-inheritable-styles.html
-/sdcard/android/layout_tests/editing/style/5046875-1.html
-/sdcard/android/layout_tests/editing/style/style-3998892-fix.html
-/sdcard/android/layout_tests/editing/style/remove-underline-in-bold.html
-/sdcard/android/layout_tests/editing/style/typing-style-002.html
-/sdcard/android/layout_tests/editing/style/relative-font-size-change-001.html
-/sdcard/android/layout_tests/editing/style/4916887.html
-/sdcard/android/layout_tests/editing/style/remove-underline-across-paragraph.html
-/sdcard/android/layout_tests/editing/style/create-block-for-style-011.html
-/sdcard/android/layout_tests/editing/style/create-block-for-style-003.html
-/sdcard/android/layout_tests/editing/style/remove-underline.html
-/sdcard/android/layout_tests/editing/style/create-block-for-style-007.html
-/sdcard/android/layout_tests/editing/style/style-boundary-004.html
-/sdcard/android/layout_tests/editing/style/5017613-1.html
-/sdcard/android/layout_tests/editing/style/block-style-002.html
-/sdcard/android/layout_tests/editing/style/smoosh-styles-002.html
-/sdcard/android/layout_tests/editing/style/block-style-006.html
-/sdcard/android/layout_tests/editing/style/fontsize-1.html
-/sdcard/android/layout_tests/editing/style/5046875-2.html
-/sdcard/android/layout_tests/editing/style/typing-style-003.html
-/sdcard/android/layout_tests/editing/style/relative-font-size-change-002.html
-/sdcard/android/layout_tests/editing/style/create-block-for-style-012.html
-/sdcard/android/layout_tests/editing/style/create-block-for-style-004.html
-/sdcard/android/layout_tests/editing/style/designmode.html
-/sdcard/android/layout_tests/editing/style/block-styles-007.html
-/sdcard/android/layout_tests/editing/style/style-boundary-001.html
-/sdcard/android/layout_tests/editing/style/create-block-for-style-008.html
-/sdcard/android/layout_tests/editing/style/style-boundary-005.html
-/sdcard/android/layout_tests/editing/style/underline.html
-/sdcard/android/layout_tests/editing/style/5017613-2.html
-/sdcard/android/layout_tests/editing/style/block-style-003.html
-/sdcard/android/layout_tests/editing/style/smoosh-styles-003.html
-/sdcard/android/layout_tests/editing/style/remove-underline-after-paragraph-in-bold.html
-/sdcard/android/layout_tests/editing/style/highlight.html
-/sdcard/android/layout_tests/editing/style/table-selection.html
-/sdcard/android/layout_tests/editing/style/relative-font-size-change-003.html
-/sdcard/android/layout_tests/editing/style/create-block-for-style-001.html
-/sdcard/android/layout_tests/editing/unsupported-content/table-delete-001.html
-/sdcard/android/layout_tests/editing/unsupported-content/table-type-after.html
-/sdcard/android/layout_tests/editing/unsupported-content/table-delete-002.html
-/sdcard/android/layout_tests/editing/unsupported-content/table-type-before.html
-/sdcard/android/layout_tests/editing/unsupported-content/table-delete-003.html
-/sdcard/android/layout_tests/editing/unsupported-content/list-delete-001.html
-/sdcard/android/layout_tests/editing/unsupported-content/list-type-after.html
-/sdcard/android/layout_tests/editing/unsupported-content/list-type-before.html
-/sdcard/android/layout_tests/editing/unsupported-content/list-delete-003.html
-/sdcard/android/layout_tests/editing/inserting/insert-div-011.html
-/sdcard/android/layout_tests/editing/inserting/4960120-1.html
-/sdcard/android/layout_tests/editing/inserting/insert-div-023.html
-/sdcard/android/layout_tests/editing/inserting/insert-paragraph-04.html
-/sdcard/android/layout_tests/editing/inserting/insert-div-007.html
-/sdcard/android/layout_tests/editing/inserting/5058163-2.html
-/sdcard/android/layout_tests/editing/inserting/insert-div-019.html
-/sdcard/android/layout_tests/editing/inserting/insert-br-at-tabspan-003.html
-/sdcard/android/layout_tests/editing/inserting/5607069-2.html
-/sdcard/android/layout_tests/editing/inserting/insert-br-quoted-003.html
-/sdcard/android/layout_tests/editing/inserting/insert-br-003.html
-/sdcard/android/layout_tests/editing/inserting/4875189-1.html
-/sdcard/android/layout_tests/editing/inserting/typing-003.html
-/sdcard/android/layout_tests/editing/inserting/insert-3907422-fix.html
-/sdcard/android/layout_tests/editing/inserting/insert-div-020.html
-/sdcard/android/layout_tests/editing/inserting/before-after-input-element.html
-/sdcard/android/layout_tests/editing/inserting/insert-div-004.html
-/sdcard/android/layout_tests/editing/inserting/insert-paragraph-01.html
-/sdcard/android/layout_tests/editing/inserting/insert-div-016.html
-/sdcard/android/layout_tests/editing/inserting/4959067.html
-/sdcard/android/layout_tests/editing/inserting/insert-br-008.html
-/sdcard/android/layout_tests/editing/inserting/insert-text-at-tabspan-001.html
-/sdcard/android/layout_tests/editing/inserting/insert-div-001.html
-/sdcard/android/layout_tests/editing/inserting/paragraph-separator-02.html
-/sdcard/android/layout_tests/editing/inserting/insert-div-013.html
-/sdcard/android/layout_tests/editing/inserting/insert-div-025.html
-/sdcard/android/layout_tests/editing/inserting/insert-3654864-fix.html
-/sdcard/android/layout_tests/editing/inserting/insert-div-009.html
-/sdcard/android/layout_tests/editing/inserting/return-key-with-selection-002.html
-/sdcard/android/layout_tests/editing/inserting/editable-html-element.html
-/sdcard/android/layout_tests/editing/inserting/5418891.html
-/sdcard/android/layout_tests/editing/inserting/insert-br-quoted-005.html
-/sdcard/android/layout_tests/editing/inserting/insert-tab-002.html
-/sdcard/android/layout_tests/editing/inserting/insert-br-005.html
-/sdcard/android/layout_tests/editing/inserting/line-break.html
-/sdcard/android/layout_tests/editing/inserting/5549929-3.html
-/sdcard/android/layout_tests/editing/inserting/typing-tab-designmode-forms.html
-/sdcard/android/layout_tests/editing/inserting/insert-div-010.html
-/sdcard/android/layout_tests/editing/inserting/insert-div-022.html
-/sdcard/android/layout_tests/editing/inserting/insert-paragraph-03.html
-/sdcard/android/layout_tests/editing/inserting/insert-div-006.html
-/sdcard/android/layout_tests/editing/inserting/5058163-1.html
-/sdcard/android/layout_tests/editing/inserting/insert-div-018.html
-/sdcard/android/layout_tests/editing/inserting/paragraph-separator-in-table-2.html
-/sdcard/android/layout_tests/editing/inserting/insert-br-at-tabspan-002.html
-/sdcard/android/layout_tests/editing/inserting/insert-br-quoted-002.html
-/sdcard/android/layout_tests/editing/inserting/insert-br-002.html
-/sdcard/android/layout_tests/editing/inserting/typing-002.html
-/sdcard/android/layout_tests/editing/inserting/insert-3800346-fix.html
-/sdcard/android/layout_tests/editing/inserting/insert-text-at-tabspan-003.html
-/sdcard/android/layout_tests/editing/inserting/typing-around-image-001.html
-/sdcard/android/layout_tests/editing/inserting/insert-text-with-newlines.html
-/sdcard/android/layout_tests/editing/inserting/insert-div-003.html
-/sdcard/android/layout_tests/editing/inserting/insert-div-015.html
-/sdcard/android/layout_tests/editing/inserting/insert-at-end-02.html
-/sdcard/android/layout_tests/editing/inserting/insert-div-027.html
-/sdcard/android/layout_tests/editing/inserting/insert-3659587-fix.html
-/sdcard/android/layout_tests/editing/inserting/insert-br-007.html
-/sdcard/android/layout_tests/editing/inserting/insert-tab-004.html
-/sdcard/android/layout_tests/editing/inserting/editable-inline-element.html
-/sdcard/android/layout_tests/editing/inserting/insert-3851164-fix.html
-/sdcard/android/layout_tests/editing/inserting/paragraph-separator-01.html
-/sdcard/android/layout_tests/editing/inserting/5156401-2.html
-/sdcard/android/layout_tests/editing/inserting/4960120-2.html
-/sdcard/android/layout_tests/editing/inserting/insert-div-012.html
-/sdcard/android/layout_tests/editing/inserting/insert-div-024.html
-/sdcard/android/layout_tests/editing/inserting/insert-div-008.html
-/sdcard/android/layout_tests/editing/inserting/insert-paragraph-05.html
-/sdcard/android/layout_tests/editing/inserting/multiple-lines-selected.html
-/sdcard/android/layout_tests/editing/inserting/insert-3778059-fix.html
-/sdcard/android/layout_tests/editing/inserting/return-key-with-selection-001.html
-/sdcard/android/layout_tests/editing/inserting/5607069-3.html
-/sdcard/android/layout_tests/editing/inserting/insert-br-quoted-004.html
-/sdcard/android/layout_tests/editing/inserting/insert-br-004.html
-/sdcard/android/layout_tests/editing/inserting/insert-tab-001.html
-/sdcard/android/layout_tests/editing/inserting/4875189-2.html
-/sdcard/android/layout_tests/editing/inserting/5549929-2.html
-/sdcard/android/layout_tests/editing/inserting/editing-empty-divs.html
-/sdcard/android/layout_tests/editing/inserting/insert-div-021.html
-/sdcard/android/layout_tests/editing/inserting/insert-div-005.html
-/sdcard/android/layout_tests/editing/inserting/insert-paragraph-02.html
-/sdcard/android/layout_tests/editing/inserting/insert-3786362-fix.html
-/sdcard/android/layout_tests/editing/inserting/insert-div-017.html
-/sdcard/android/layout_tests/editing/inserting/paragraph-separator-in-table-1.html
-/sdcard/android/layout_tests/editing/inserting/insert-br-at-tabspan-001.html
-/sdcard/android/layout_tests/editing/inserting/insert-space-in-empty-doc.html
-/sdcard/android/layout_tests/editing/inserting/insert-after-delete-001.html
-/sdcard/android/layout_tests/editing/inserting/insert-br-quoted-001.html
-/sdcard/android/layout_tests/editing/inserting/insert-br-001.html
-/sdcard/android/layout_tests/editing/inserting/typing-001.html
-/sdcard/android/layout_tests/editing/inserting/4278698.html
-/sdcard/android/layout_tests/editing/inserting/insert-br-009.html
-/sdcard/android/layout_tests/editing/inserting/insert-text-at-tabspan-002.html
-/sdcard/android/layout_tests/editing/inserting/5002441.html
-/sdcard/android/layout_tests/editing/inserting/insert-div-002.html
-/sdcard/android/layout_tests/editing/inserting/paragraph-separator-03.html
-/sdcard/android/layout_tests/editing/inserting/12882.html
-/sdcard/android/layout_tests/editing/inserting/insert-3775316-fix.html
-/sdcard/android/layout_tests/editing/inserting/edited-whitespace-1.html
-/sdcard/android/layout_tests/editing/inserting/insert-div-014.html
-/sdcard/android/layout_tests/editing/inserting/insert-at-end-01.html
-/sdcard/android/layout_tests/editing/inserting/redo.html
-/sdcard/android/layout_tests/editing/inserting/insert-div-026.html
-/sdcard/android/layout_tests/editing/inserting/4840662.html
-/sdcard/android/layout_tests/editing/inserting/typing-around-br-001.html
-/sdcard/android/layout_tests/editing/inserting/return-key-with-selection-003.html
-/sdcard/android/layout_tests/editing/inserting/insert-br-quoted-006.html
-/sdcard/android/layout_tests/editing/inserting/insert-tab-003.html
-/sdcard/android/layout_tests/editing/inserting/insert-br-006.html
-/sdcard/android/layout_tests/editing/execCommand/5142012-1.html
-/sdcard/android/layout_tests/editing/execCommand/hilitecolor.html
-/sdcard/android/layout_tests/editing/execCommand/5120591.html
-/sdcard/android/layout_tests/editing/execCommand/format-block-with-braces.html
-/sdcard/android/layout_tests/editing/execCommand/4920742-1.html
-/sdcard/android/layout_tests/editing/execCommand/4924441.html
-/sdcard/android/layout_tests/editing/execCommand/create-list-with-hr.html
-/sdcard/android/layout_tests/editing/execCommand/5207369.html
-/sdcard/android/layout_tests/editing/execCommand/format-block-with-trailing-br.html
-/sdcard/android/layout_tests/editing/execCommand/4916583.html
-/sdcard/android/layout_tests/editing/execCommand/remove-formatting-2.html
-/sdcard/android/layout_tests/editing/execCommand/outdent-selection.html
-/sdcard/android/layout_tests/editing/execCommand/strikethroughSelection.html
-/sdcard/android/layout_tests/editing/execCommand/insert-list-with-id.html
-/sdcard/android/layout_tests/editing/execCommand/5432254-1.html
-/sdcard/android/layout_tests/editing/execCommand/5482023.html
-/sdcard/android/layout_tests/editing/execCommand/5062376.html
-/sdcard/android/layout_tests/editing/execCommand/4786404-1.html
-/sdcard/android/layout_tests/editing/execCommand/remove-formatting.html
-/sdcard/android/layout_tests/editing/execCommand/findString.html
-/sdcard/android/layout_tests/editing/execCommand/5142012-3.html
-/sdcard/android/layout_tests/editing/execCommand/5700414-1.html
-/sdcard/android/layout_tests/editing/execCommand/italicizeByCharacter.html
-/sdcard/android/layout_tests/editing/execCommand/switch-list-type.html
-/sdcard/android/layout_tests/editing/execCommand/create-list-from-range-selection.html
-/sdcard/android/layout_tests/editing/execCommand/5190926.html
-/sdcard/android/layout_tests/editing/execCommand/remove-list-1.html
-/sdcard/android/layout_tests/editing/execCommand/insertHorizontalRule.html
-/sdcard/android/layout_tests/editing/execCommand/paste-1.html
-/sdcard/android/layout_tests/editing/execCommand/nsresponder-outdent.html
-/sdcard/android/layout_tests/editing/execCommand/5080333-2.html
-/sdcard/android/layout_tests/editing/execCommand/5119244.html
-/sdcard/android/layout_tests/editing/execCommand/5049671.html
-/sdcard/android/layout_tests/editing/execCommand/4920488.html
-/sdcard/android/layout_tests/editing/execCommand/5164796.html
-/sdcard/android/layout_tests/editing/execCommand/nsresponder-indent.html
-/sdcard/android/layout_tests/editing/execCommand/indent-list-item.html
-/sdcard/android/layout_tests/editing/execCommand/insert-list-empty-div.html
-/sdcard/android/layout_tests/editing/execCommand/5138441.html
-/sdcard/android/layout_tests/editing/execCommand/4916402.html
-/sdcard/android/layout_tests/editing/execCommand/5481523.html
-/sdcard/android/layout_tests/editing/execCommand/print.html
-/sdcard/android/layout_tests/editing/execCommand/4641880-2.html
-/sdcard/android/layout_tests/editing/execCommand/4580583-2.html
-/sdcard/android/layout_tests/editing/execCommand/remove-list-item-1.html
-/sdcard/android/layout_tests/editing/execCommand/5569741.html
-/sdcard/android/layout_tests/editing/execCommand/findString-2.html
-/sdcard/android/layout_tests/editing/execCommand/modifyForeColorByCharacter.html
-/sdcard/android/layout_tests/editing/execCommand/5142012-2.html
-/sdcard/android/layout_tests/editing/execCommand/find-after-replace.html
-/sdcard/android/layout_tests/editing/execCommand/format-block.html
-/sdcard/android/layout_tests/editing/execCommand/5080333-1.html
-/sdcard/android/layout_tests/editing/execCommand/remove-list-from-range-selection.html
-/sdcard/android/layout_tests/editing/execCommand/remove-list-items.html
-/sdcard/android/layout_tests/editing/execCommand/5432254-2.html
-/sdcard/android/layout_tests/editing/execCommand/5144139-1.html
-/sdcard/android/layout_tests/editing/execCommand/5136770.html
-/sdcard/android/layout_tests/editing/execCommand/4916541.html
-/sdcard/android/layout_tests/editing/execCommand/4786404-2.html
-/sdcard/android/layout_tests/editing/execCommand/insertImage.html
-/sdcard/android/layout_tests/editing/execCommand/insert-list-and-stitch.html
-/sdcard/android/layout_tests/editing/execCommand/5573879.html
-/sdcard/android/layout_tests/editing/execCommand/5210032.html
-/sdcard/android/layout_tests/editing/execCommand/5700414-2.html
-/sdcard/android/layout_tests/editing/execCommand/boldSelection.html
-/sdcard/android/layout_tests/editing/execCommand/insertHTML.html
-/sdcard/android/layout_tests/editing/execCommand/4641880-1.html
-/sdcard/android/layout_tests/editing/execCommand/4747450.html
-/sdcard/android/layout_tests/editing/execCommand/4580583-1.html
-/sdcard/android/layout_tests/editing/execCommand/format-block-from-range-selection.html
-/sdcard/android/layout_tests/editing/execCommand/indent-empty-root.html
-/sdcard/android/layout_tests/editing/execCommand/indent-selection.html
-/sdcard/android/layout_tests/editing/execCommand/selectAll.html
-/sdcard/android/layout_tests/editing/execCommand/paste-2.html
-/sdcard/android/layout_tests/editing/pasteboard/subframe-dragndrop-1.html
-/sdcard/android/layout_tests/editing/pasteboard/innerText-inline-table.html
-/sdcard/android/layout_tests/editing/pasteboard/5156401-1.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-list-001.html
-/sdcard/android/layout_tests/editing/pasteboard/5032095.html
-/sdcard/android/layout_tests/editing/pasteboard/4242293-1.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-line-endings-004.html
-/sdcard/android/layout_tests/editing/pasteboard/5247341.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-4035648-fix.html
-/sdcard/android/layout_tests/editing/pasteboard/4700297.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-text-003.html
-/sdcard/android/layout_tests/editing/pasteboard/drop-link.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-blockquote-into-blockquote-3.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-blockquote-into-blockquote.html
-/sdcard/android/layout_tests/editing/pasteboard/4944770-1.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-text-015.html
-/sdcard/android/layout_tests/editing/pasteboard/5075944.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-match-style-001.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-4039777-fix.html
-/sdcard/android/layout_tests/editing/pasteboard/merge-end-3.html
-/sdcard/android/layout_tests/editing/pasteboard/smart-paste-007.html
-/sdcard/android/layout_tests/editing/pasteboard/5483567.html
-/sdcard/android/layout_tests/editing/pasteboard/7955.html
-/sdcard/android/layout_tests/editing/pasteboard/merge-end-blockquote.html
-/sdcard/android/layout_tests/editing/pasteboard/testcase-9507.html
-/sdcard/android/layout_tests/editing/pasteboard/input-field-1.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-line-endings-001.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-text-at-tabspan-001.html
-/sdcard/android/layout_tests/editing/pasteboard/interchange-newline-2.html
-/sdcard/android/layout_tests/editing/pasteboard/block-wrappers-necessary.html
-/sdcard/android/layout_tests/editing/pasteboard/4861080.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-line-endings-009.html
-/sdcard/android/layout_tests/editing/pasteboard/merge-after-delete.html
-/sdcard/android/layout_tests/editing/pasteboard/5478250.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-text-012.html
-/sdcard/android/layout_tests/editing/pasteboard/prevent-block-nesting-01.html
-/sdcard/android/layout_tests/editing/pasteboard/8145-2.html
-/sdcard/android/layout_tests/editing/pasteboard/merge-end-borders.html
-/sdcard/android/layout_tests/editing/pasteboard/5027857.html
-/sdcard/android/layout_tests/editing/pasteboard/smart-paste-004.html
-/sdcard/android/layout_tests/editing/pasteboard/merge-start-list.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-text-008.html
-/sdcard/android/layout_tests/editing/pasteboard/4806874.html
-/sdcard/android/layout_tests/editing/pasteboard/emacs-ctrl-a-k-y.html
-/sdcard/android/layout_tests/editing/pasteboard/bad-placeholder.html
-/sdcard/android/layout_tests/editing/pasteboard/displaced-placeholder.html
-/sdcard/android/layout_tests/editing/pasteboard/5387578.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-blockquote-1.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-line-endings-010.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-line-endings-006.html
-/sdcard/android/layout_tests/editing/pasteboard/5601583-1.html
-/sdcard/android/layout_tests/editing/pasteboard/4947130.html
-/sdcard/android/layout_tests/editing/pasteboard/pasting-tabs.html
-/sdcard/android/layout_tests/editing/pasteboard/merge-after-delete-2.html
-/sdcard/android/layout_tests/editing/pasteboard/smart-paste-001.html
-/sdcard/android/layout_tests/editing/pasteboard/4076267-2.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-table-001.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-text-005.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-text-017.html
-/sdcard/android/layout_tests/editing/pasteboard/merge-end-5.html
-/sdcard/android/layout_tests/editing/pasteboard/drop-text-without-selection.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-text-at-tabspan-003.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-line-endings-003.html
-/sdcard/android/layout_tests/editing/pasteboard/drag-drop-modifies-page.html
-/sdcard/android/layout_tests/editing/pasteboard/emacs-ctrl-k-y-001.html
-/sdcard/android/layout_tests/editing/pasteboard/5071074.html
-/sdcard/android/layout_tests/editing/pasteboard/interchange-newline-4.html
-/sdcard/android/layout_tests/editing/pasteboard/styled-element-markup.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-4038267-fix.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-text-002.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-blockquote-into-blockquote-2.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-pre-002.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-text-014.html
-/sdcard/android/layout_tests/editing/pasteboard/drag-drop-dead-frame.html
-/sdcard/android/layout_tests/editing/pasteboard/merge-end-2.html
-/sdcard/android/layout_tests/editing/pasteboard/smart-paste-006.html
-/sdcard/android/layout_tests/editing/pasteboard/5368833.html
-/sdcard/android/layout_tests/editing/pasteboard/select-element-1.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-blockquote-3.html
-/sdcard/android/layout_tests/editing/pasteboard/4641033.html
-/sdcard/android/layout_tests/editing/pasteboard/drag-image-to-contenteditable-in-iframe.html
-/sdcard/android/layout_tests/editing/pasteboard/interchange-newline-1.html
-/sdcard/android/layout_tests/editing/pasteboard/copy-paste-bidi.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-line-endings-008.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-text-011.html
-/sdcard/android/layout_tests/editing/pasteboard/8145-1.html
-/sdcard/android/layout_tests/editing/pasteboard/smart-paste-003.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-table-003.html
-/sdcard/android/layout_tests/editing/pasteboard/5075944-3.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-text-007.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-TIFF.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-text-019.html
-/sdcard/android/layout_tests/editing/pasteboard/undoable-fragment-removes.html
-/sdcard/android/layout_tests/editing/pasteboard/nested-blocks-with-text-field.html
-/sdcard/android/layout_tests/editing/pasteboard/4989774.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-unrendered-select.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-line-endings-005.html
-/sdcard/android/layout_tests/editing/pasteboard/emacs-cntl-y-001.html
-/sdcard/android/layout_tests/editing/pasteboard/merge-after-delete-1.html
-/sdcard/android/layout_tests/editing/pasteboard/unrendered-br.html
-/sdcard/android/layout_tests/editing/pasteboard/4631972.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-text-004.html
-/sdcard/android/layout_tests/editing/pasteboard/quirks-mode-br-1.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-blockquote-into-blockquote-4.html
-/sdcard/android/layout_tests/editing/pasteboard/4944770-2.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-table-cells.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-text-016.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-match-style-002.html
-/sdcard/android/layout_tests/editing/pasteboard/merge-end-4.html
-/sdcard/android/layout_tests/editing/pasteboard/drag-selected-image-to-contenteditable.html
-/sdcard/android/layout_tests/editing/pasteboard/smart-paste-008.html
-/sdcard/android/layout_tests/editing/pasteboard/3976872.html
-/sdcard/android/layout_tests/editing/pasteboard/pasting-object.html
-/sdcard/android/layout_tests/editing/pasteboard/merge-end-list.html
-/sdcard/android/layout_tests/editing/pasteboard/copy-standalone-image.html
-/sdcard/android/layout_tests/editing/pasteboard/displaced-generic-placeholder.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-line-endings-002.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-text-at-tabspan-002.html
-/sdcard/android/layout_tests/editing/pasteboard/interchange-newline-3.html
-/sdcard/android/layout_tests/editing/pasteboard/5071074-2.html
-/sdcard/android/layout_tests/editing/pasteboard/display-block-on-spans.html
-/sdcard/android/layout_tests/editing/pasteboard/4242293.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-text-001.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-pre-001.html
-/sdcard/android/layout_tests/editing/pasteboard/merge-start-blockquote.html
-/sdcard/android/layout_tests/editing/pasteboard/merge-end-1.html
-/sdcard/android/layout_tests/editing/pasteboard/8145-3.html
-/sdcard/android/layout_tests/editing/pasteboard/5006779.html
-/sdcard/android/layout_tests/editing/pasteboard/smart-paste-005.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-text-009.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-blockquote-2.html
-/sdcard/android/layout_tests/editing/pasteboard/merge-end-table.html
-/sdcard/android/layout_tests/editing/pasteboard/5065605.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-line-endings-007.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-text-010.html
-/sdcard/android/layout_tests/editing/pasteboard/5028447.html
-/sdcard/android/layout_tests/editing/pasteboard/nested-blocks-with-text-area.html
-/sdcard/android/layout_tests/editing/pasteboard/4076267-3.html
-/sdcard/android/layout_tests/editing/pasteboard/4076267.html
-/sdcard/android/layout_tests/editing/pasteboard/smart-paste-002.html
-/sdcard/android/layout_tests/editing/pasteboard/5075944-2.html
-/sdcard/android/layout_tests/editing/pasteboard/5134759.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-text-006.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-text-018.html
-/sdcard/android/layout_tests/editing/pasteboard/paste-RTFD.html
-/sdcard/android/layout_tests/editing/pasteboard/cut-text-001.html
-/sdcard/android/layout_tests/editing/selection/image-before-linebreak.html
-/sdcard/android/layout_tests/editing/selection/mixed-editability-9.html
-/sdcard/android/layout_tests/editing/selection/move-between-blocks-no-001.html
-/sdcard/android/layout_tests/editing/selection/fake-drag.html
-/sdcard/android/layout_tests/editing/selection/wrapped-line-caret-2.html
-/sdcard/android/layout_tests/editing/selection/5131716-3.html
-/sdcard/android/layout_tests/editing/selection/5081257-2.html
-/sdcard/android/layout_tests/editing/selection/3690703-2.html
-/sdcard/android/layout_tests/editing/selection/unrendered-002.html
-/sdcard/android/layout_tests/editing/selection/extend-by-character-005.html
-/sdcard/android/layout_tests/editing/selection/5354455-1.html
-/sdcard/android/layout_tests/editing/selection/caret-rtl-2.html
-/sdcard/android/layout_tests/editing/selection/paragraph-granularity.html
-/sdcard/android/layout_tests/editing/selection/expanding-selections2.html
-/sdcard/android/layout_tests/editing/selection/clear-selection.html
-/sdcard/android/layout_tests/editing/selection/mixed-editability-6.html
-/sdcard/android/layout_tests/editing/selection/display-table-text.html
-/sdcard/android/layout_tests/editing/selection/13804.html
-/sdcard/android/layout_tests/editing/selection/drag-in-iframe.html
-/sdcard/android/layout_tests/editing/selection/table-caret-2.html
-/sdcard/android/layout_tests/editing/selection/expanding-selections.html
-/sdcard/android/layout_tests/editing/selection/unrendered-space.html
-/sdcard/android/layout_tests/editing/selection/node-removal-1.html
-/sdcard/android/layout_tests/editing/selection/5240265.html
-/sdcard/android/layout_tests/editing/selection/select-all-005.html
-/sdcard/android/layout_tests/editing/selection/extend-by-character-002.html
-/sdcard/android/layout_tests/editing/selection/4932260-2.html
-/sdcard/android/layout_tests/editing/selection/5076323-3.html
-/sdcard/android/layout_tests/editing/selection/select-element-paragraph-boundary.html
-/sdcard/android/layout_tests/editing/selection/line-wrap-1.html
-/sdcard/android/layout_tests/editing/selection/replace-selection-1.html
-/sdcard/android/layout_tests/editing/selection/caret-rtl.html
-/sdcard/android/layout_tests/editing/selection/5109817.html
-/sdcard/android/layout_tests/editing/selection/extend-by-sentence-001.html
-/sdcard/android/layout_tests/editing/selection/3690719.html
-/sdcard/android/layout_tests/editing/selection/5136696.html
-/sdcard/android/layout_tests/editing/selection/editable-non-editable-crash.html
-/sdcard/android/layout_tests/editing/selection/4397952.html
-/sdcard/android/layout_tests/editing/selection/mixed-editability-3.html
-/sdcard/android/layout_tests/editing/selection/caret-and-focus-ring.html
-/sdcard/android/layout_tests/editing/selection/4895428-4.html
-/sdcard/android/layout_tests/editing/selection/replaced-boundaries-3.html
-/sdcard/android/layout_tests/editing/selection/4947387.html
-/sdcard/android/layout_tests/editing/selection/move-by-sentence-linebreak.html
-/sdcard/android/layout_tests/editing/selection/move-by-character-005.html
-/sdcard/android/layout_tests/editing/selection/select-from-textfield-outwards.html
-/sdcard/android/layout_tests/editing/selection/leave-requested-block.html
-/sdcard/android/layout_tests/editing/selection/select-all-002.html
-/sdcard/android/layout_tests/editing/selection/end-of-document.html
-/sdcard/android/layout_tests/editing/selection/selectNode.html
-/sdcard/android/layout_tests/editing/selection/editable-links.html
-/sdcard/android/layout_tests/editing/selection/unrendered-004.html
-/sdcard/android/layout_tests/editing/selection/7152-2.html
-/sdcard/android/layout_tests/editing/selection/5195166-1.html
-/sdcard/android/layout_tests/editing/selection/editable-html-element.html
-/sdcard/android/layout_tests/editing/selection/4895428-1.html
-/sdcard/android/layout_tests/editing/selection/4866671.html
-/sdcard/android/layout_tests/editing/selection/move-by-character-002.html
-/sdcard/android/layout_tests/editing/selection/extend-by-word-002.html
-/sdcard/android/layout_tests/editing/selection/mixed-editability-8.html
-/sdcard/android/layout_tests/editing/selection/wrapped-line-caret-1.html
-/sdcard/android/layout_tests/editing/selection/selection-actions.html
-/sdcard/android/layout_tests/editing/selection/14971.html
-/sdcard/android/layout_tests/editing/selection/5131716-2.html
-/sdcard/android/layout_tests/editing/selection/4402375.html
-/sdcard/android/layout_tests/editing/selection/unrendered-001.html
-/sdcard/android/layout_tests/editing/selection/move-3875641-fix.html
-/sdcard/android/layout_tests/editing/selection/5081257-1.html
-/sdcard/android/layout_tests/editing/selection/extend-by-character-004.html
-/sdcard/android/layout_tests/editing/selection/5099303.html
-/sdcard/android/layout_tests/editing/selection/contenteditable-click-inside.html
-/sdcard/android/layout_tests/editing/selection/move-by-line-002.html
-/sdcard/android/layout_tests/editing/selection/addRange.html
-/sdcard/android/layout_tests/editing/selection/select-missing-image.html
-/sdcard/android/layout_tests/editing/selection/selection-3748164-fix.html
-/sdcard/android/layout_tests/editing/selection/mixed-editability-5.html
-/sdcard/android/layout_tests/editing/selection/4983858.html
-/sdcard/android/layout_tests/editing/selection/move-by-sentence-001.html
-/sdcard/android/layout_tests/editing/selection/table-caret-1.html
-/sdcard/android/layout_tests/editing/selection/5007143.html
-/sdcard/android/layout_tests/editing/selection/fake-doubleclick.html
-/sdcard/android/layout_tests/editing/selection/move-by-word-001.html
-/sdcard/android/layout_tests/editing/selection/select-all-004.html
-/sdcard/android/layout_tests/editing/selection/extend-by-character-001.html
-/sdcard/android/layout_tests/editing/selection/4932260-1.html
-/sdcard/android/layout_tests/editing/selection/5076323-2.html
-/sdcard/android/layout_tests/editing/selection/5234383-2.html
-/sdcard/android/layout_tests/editing/selection/5057506.html
-/sdcard/android/layout_tests/editing/selection/focus_editable_html.html
-/sdcard/android/layout_tests/editing/selection/move-3875618-fix.html
-/sdcard/android/layout_tests/editing/selection/4818145.html
-/sdcard/android/layout_tests/editing/selection/move-backwords-by-word-001.html
-/sdcard/android/layout_tests/editing/selection/inline-table.html
-/sdcard/android/layout_tests/editing/selection/mixed-editability-2.html
-/sdcard/android/layout_tests/editing/selection/4895428-3.html
-/sdcard/android/layout_tests/editing/selection/replaced-boundaries-2.html
-/sdcard/android/layout_tests/editing/selection/move-by-character-004.html
-/sdcard/android/layout_tests/editing/selection/caret-before-select.html
-/sdcard/android/layout_tests/editing/selection/4889598.html
-/sdcard/android/layout_tests/editing/selection/select-all-001.html
-/sdcard/android/layout_tests/editing/selection/5131716-4.html
-/sdcard/android/layout_tests/editing/selection/3690703.html
-/sdcard/android/layout_tests/editing/selection/5333725.html
-/sdcard/android/layout_tests/editing/selection/unrendered-003.html
-/sdcard/android/layout_tests/editing/selection/extend-by-character-006.html
-/sdcard/android/layout_tests/editing/selection/7152-1.html
-/sdcard/android/layout_tests/editing/selection/5213963.html
-/sdcard/android/layout_tests/editing/selection/5354455-2.html
-/sdcard/android/layout_tests/editing/selection/selection-background.html
-/sdcard/android/layout_tests/editing/selection/iframe.html
-/sdcard/android/layout_tests/editing/selection/extend-by-word-001.html
-/sdcard/android/layout_tests/editing/selection/move-by-character-001.html
-/sdcard/android/layout_tests/editing/selection/mixed-editability-7.html
-/sdcard/android/layout_tests/editing/selection/doubleclick-crash.html
-/sdcard/android/layout_tests/editing/selection/table-caret-3.html
-/sdcard/android/layout_tests/editing/selection/5131716-1.html
-/sdcard/android/layout_tests/editing/selection/select-all-iframe.html
-/sdcard/android/layout_tests/editing/selection/node-removal-2.html
-/sdcard/android/layout_tests/editing/selection/drag-select-1.html
-/sdcard/android/layout_tests/editing/selection/select-all-006.html
-/sdcard/android/layout_tests/editing/selection/extend-by-character-003.html
-/sdcard/android/layout_tests/editing/selection/4932260-3.html
-/sdcard/android/layout_tests/editing/selection/4960116.html
-/sdcard/android/layout_tests/editing/selection/after-line-wrap.html
-/sdcard/android/layout_tests/editing/selection/line-wrap-2.html
-/sdcard/android/layout_tests/editing/selection/drag-to-contenteditable-iframe.html
-/sdcard/android/layout_tests/editing/selection/move-by-line-001.html
-/sdcard/android/layout_tests/editing/selection/selectNodeContents.html
-/sdcard/android/layout_tests/editing/selection/move-between-blocks-yes-001.html
-/sdcard/android/layout_tests/editing/selection/6476.html
-/sdcard/android/layout_tests/editing/selection/contains-boundaries.html
-/sdcard/android/layout_tests/editing/selection/click-start-of-line.html
-/sdcard/android/layout_tests/editing/selection/mixed-editability-4.html
-/sdcard/android/layout_tests/editing/selection/focus-body.html
-/sdcard/android/layout_tests/editing/selection/triple-click-in-pre.html
-/sdcard/android/layout_tests/editing/selection/move-past-trailing-space.html
-/sdcard/android/layout_tests/editing/selection/inline-closest-leaf-child.html
-/sdcard/android/layout_tests/editing/selection/5007143-2.html
-/sdcard/android/layout_tests/editing/selection/designmode-no-caret.html
-/sdcard/android/layout_tests/editing/selection/select-all-003.html
-/sdcard/android/layout_tests/editing/selection/5076323-1.html
-/sdcard/android/layout_tests/editing/selection/5234383-1.html
-/sdcard/android/layout_tests/editing/selection/5057506-2.html
-/sdcard/android/layout_tests/editing/selection/5232159.html
-/sdcard/android/layout_tests/editing/selection/4975120.html
-/sdcard/android/layout_tests/editing/selection/4960137.html
-/sdcard/android/layout_tests/editing/selection/unrendered-005.html
-/sdcard/android/layout_tests/editing/selection/5195166-2.html
-/sdcard/android/layout_tests/editing/selection/contenteditable-click-outside.html
-/sdcard/android/layout_tests/editing/selection/previous-line-position.html
-/sdcard/android/layout_tests/editing/selection/mixed-editability-1.html
-/sdcard/android/layout_tests/editing/selection/select-box.html
-/sdcard/android/layout_tests/editing/selection/4895428-2.html
-/sdcard/android/layout_tests/editing/selection/replaced-boundaries-1.html
-/sdcard/android/layout_tests/editing/selection/4776665.html
-/sdcard/android/layout_tests/editing/selection/move-by-character-003.html
-/sdcard/android/layout_tests/editing/selection/word-granularity.html
-/sdcard/android/layout_tests/editing/selection/move-by-character-6.html
-/sdcard/android/layout_tests/editing/undo/undo-misspellings.html
-/sdcard/android/layout_tests/editing/undo/undo-combined-delete.html
-/sdcard/android/layout_tests/editing/undo/undo-delete-boundary.html
-/sdcard/android/layout_tests/editing/undo/undo-forward-delete-boundary.html
-/sdcard/android/layout_tests/editing/undo/4063751.html
-/sdcard/android/layout_tests/editing/undo/redo-typing-001.html
-/sdcard/android/layout_tests/editing/undo/5378473.html
-/sdcard/android/layout_tests/editing/undo/undo-combined-delete-boundary.html
-/sdcard/android/layout_tests/editing/undo/undo-delete.html
-/sdcard/android/layout_tests/editing/undo/undo-forward-delete.html
-/sdcard/android/layout_tests/editing/undo/undo-typing-001.html
-/sdcard/android/layout_tests/editing/deleting/delete-3608462-fix.html
-/sdcard/android/layout_tests/editing/deleting/delete-image-001.html
-/sdcard/android/layout_tests/editing/deleting/delete-3928305-fix.html
-/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-012.html
-/sdcard/android/layout_tests/editing/deleting/5115601.html
-/sdcard/android/layout_tests/editing/deleting/deletionUI-single-instance.html
-/sdcard/android/layout_tests/editing/deleting/delete-block-contents-001.html
-/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-024.html
-/sdcard/android/layout_tests/editing/deleting/delete-after-span-ws-001.html
-/sdcard/android/layout_tests/editing/deleting/delete-line-011.html
-/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-008.html
-/sdcard/android/layout_tests/editing/deleting/delete-listitem-001.html
-/sdcard/android/layout_tests/editing/deleting/5300379.html
-/sdcard/android/layout_tests/editing/deleting/delete-line-007.html
-/sdcard/android/layout_tests/editing/deleting/5433862-2.html
-/sdcard/android/layout_tests/editing/deleting/5026848-1.html
-/sdcard/android/layout_tests/editing/deleting/delete-at-paragraph-boundaries-003.html
-/sdcard/android/layout_tests/editing/deleting/delete-br-012.html
-/sdcard/android/layout_tests/editing/deleting/delete-br-008.html
-/sdcard/android/layout_tests/editing/deleting/5206311-2.html
-/sdcard/android/layout_tests/editing/deleting/delete-at-start-or-end.html
-/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-021.html
-/sdcard/android/layout_tests/editing/deleting/delete-ws-fixup-004.html
-/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-005.html
-/sdcard/android/layout_tests/editing/deleting/delete-select-all-003.html
-/sdcard/android/layout_tests/editing/deleting/smart-delete-002.html
-/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-017.html
-/sdcard/android/layout_tests/editing/deleting/table-cells.html
-/sdcard/android/layout_tests/editing/deleting/5156801-2.html
-/sdcard/android/layout_tests/editing/deleting/delete-leading-ws-001.html
-/sdcard/android/layout_tests/editing/deleting/delete-line-004.html
-/sdcard/android/layout_tests/editing/deleting/delete-3857753-fix.html
-/sdcard/android/layout_tests/editing/deleting/delete-3959464-fix.html
-/sdcard/android/layout_tests/editing/deleting/delete-line-016.html
-/sdcard/android/layout_tests/editing/deleting/delete-trailing-ws-001.html
-/sdcard/android/layout_tests/editing/deleting/delete-br-005.html
-/sdcard/android/layout_tests/editing/deleting/delete-at-paragraph-boundaries-008.html
-/sdcard/android/layout_tests/editing/deleting/delete-tab-004.html
-/sdcard/android/layout_tests/editing/deleting/merge-whitespace-pre.html
-/sdcard/android/layout_tests/editing/deleting/delete-ws-fixup-001.html
-/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-002.html
-/sdcard/android/layout_tests/editing/deleting/delete-line-end-ws-002.html
-/sdcard/android/layout_tests/editing/deleting/merge-unrendered-space.html
-/sdcard/android/layout_tests/editing/deleting/delete-by-word-002.html
-/sdcard/android/layout_tests/editing/deleting/delete-image-003.html
-/sdcard/android/layout_tests/editing/deleting/delete-selection-001.html
-/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-014.html
-/sdcard/android/layout_tests/editing/deleting/merge-different-styles.html
-/sdcard/android/layout_tests/editing/deleting/delete-block-contents-003.html
-/sdcard/android/layout_tests/editing/deleting/delete-line-001.html
-/sdcard/android/layout_tests/editing/deleting/delete-after-span-ws-003.html
-/sdcard/android/layout_tests/editing/deleting/delete-line-013.html
-/sdcard/android/layout_tests/editing/deleting/merge-into-empty-block-1.html
-/sdcard/android/layout_tests/editing/deleting/5156801.html
-/sdcard/android/layout_tests/editing/deleting/delete-3865854-fix.html
-/sdcard/android/layout_tests/editing/deleting/delete-line-009.html
-/sdcard/android/layout_tests/editing/deleting/5026848-3.html
-/sdcard/android/layout_tests/editing/deleting/delete-at-paragraph-boundaries-005.html
-/sdcard/android/layout_tests/editing/deleting/delete-br-002.html
-/sdcard/android/layout_tests/editing/deleting/delete-tab-001.html
-/sdcard/android/layout_tests/editing/deleting/4866671.html
-/sdcard/android/layout_tests/editing/deleting/whitespace-pre-1.html
-/sdcard/android/layout_tests/editing/deleting/delete-block-table.html
-/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-011.html
-/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-023.html
-/sdcard/android/layout_tests/editing/deleting/delete-line-010.html
-/sdcard/android/layout_tests/editing/deleting/5032066.html
-/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-007.html
-/sdcard/android/layout_tests/editing/deleting/smart-delete-004.html
-/sdcard/android/layout_tests/editing/deleting/5144139-2.html
-/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-019.html
-/sdcard/android/layout_tests/editing/deleting/delete-line-006.html
-/sdcard/android/layout_tests/editing/deleting/5126166.html
-/sdcard/android/layout_tests/editing/deleting/delete-to-end-of-paragraph.html
-/sdcard/android/layout_tests/editing/deleting/5408255.html
-/sdcard/android/layout_tests/editing/deleting/5099303.html
-/sdcard/android/layout_tests/editing/deleting/4845371.html
-/sdcard/android/layout_tests/editing/deleting/delete-at-paragraph-boundaries-002.html
-/sdcard/android/layout_tests/editing/deleting/4922367.html
-/sdcard/android/layout_tests/editing/deleting/delete-br-011.html
-/sdcard/android/layout_tests/editing/deleting/delete-br-007.html
-/sdcard/android/layout_tests/editing/deleting/move-nodes-001.html
-/sdcard/android/layout_tests/editing/deleting/merge-no-br.html
-/sdcard/android/layout_tests/editing/deleting/delete-3800834-fix.html
-/sdcard/android/layout_tests/editing/deleting/delete-4038408-fix.html
-/sdcard/android/layout_tests/editing/deleting/5206311-1.html
-/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-020.html
-/sdcard/android/layout_tests/editing/deleting/delete-ws-fixup-003.html
-/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-004.html
-/sdcard/android/layout_tests/editing/deleting/smart-delete-001.html
-/sdcard/android/layout_tests/editing/deleting/delete-to-select-table.html
-/sdcard/android/layout_tests/editing/deleting/delete-select-all-002.html
-/sdcard/android/layout_tests/editing/deleting/delete-contiguous-ws-001.html
-/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-016.html
-/sdcard/android/layout_tests/editing/deleting/delete-line-003.html
-/sdcard/android/layout_tests/editing/deleting/delete-line-015.html
-/sdcard/android/layout_tests/editing/deleting/5390681.html
-/sdcard/android/layout_tests/editing/deleting/delete-at-paragraph-boundaries-011.html
-/sdcard/android/layout_tests/editing/deleting/forward-delete.html
-/sdcard/android/layout_tests/editing/deleting/delete-at-paragraph-boundaries-007.html
-/sdcard/android/layout_tests/editing/deleting/delete-br-004.html
-/sdcard/android/layout_tests/editing/deleting/delete-tab-003.html
-/sdcard/android/layout_tests/editing/deleting/collapse-whitespace-3587601-fix.html
-/sdcard/android/layout_tests/editing/deleting/pruning-after-merge-2.html
-/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-001.html
-/sdcard/android/layout_tests/editing/deleting/delete-line-end-ws-001.html
-/sdcard/android/layout_tests/editing/deleting/delete-by-word-001.html
-/sdcard/android/layout_tests/editing/deleting/delete-image-002.html
-/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-013.html
-/sdcard/android/layout_tests/editing/deleting/delete-block-contents-002.html
-/sdcard/android/layout_tests/editing/deleting/paragraph-in-preserveNewline.html
-/sdcard/android/layout_tests/editing/deleting/delete-after-span-ws-002.html
-/sdcard/android/layout_tests/editing/deleting/5272440.html
-/sdcard/android/layout_tests/editing/deleting/delete-line-012.html
-/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-009.html
-/sdcard/android/layout_tests/editing/deleting/delete-listitem-002.html
-/sdcard/android/layout_tests/editing/deleting/delete-character-001.html
-/sdcard/android/layout_tests/editing/deleting/delete-line-008.html
-/sdcard/android/layout_tests/editing/deleting/5483370.html
-/sdcard/android/layout_tests/editing/deleting/5026848-2.html
-/sdcard/android/layout_tests/editing/deleting/delete-br-001.html
-/sdcard/android/layout_tests/editing/deleting/delete-at-paragraph-boundaries-004.html
-/sdcard/android/layout_tests/editing/deleting/5091898.html
-/sdcard/android/layout_tests/editing/deleting/delete-br-009.html
-/sdcard/android/layout_tests/editing/deleting/transpose-empty.html
-/sdcard/android/layout_tests/editing/deleting/merge-endOfParagraph.html
-/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-010.html
-/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-022.html
-/sdcard/android/layout_tests/editing/deleting/delete-3775172-fix.html
-/sdcard/android/layout_tests/editing/deleting/delete-mixed-editable-content-001.html
-/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-006.html
-/sdcard/android/layout_tests/editing/deleting/smart-delete-003.html
-/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-018.html
-/sdcard/android/layout_tests/editing/deleting/delete-line-005.html
-/sdcard/android/layout_tests/editing/deleting/delete-first-list-item.html
-/sdcard/android/layout_tests/editing/deleting/delete-line-017.html
-/sdcard/android/layout_tests/editing/deleting/delete-at-paragraph-boundaries-001.html
-/sdcard/android/layout_tests/editing/deleting/delete-trailing-ws-002.html
-/sdcard/android/layout_tests/editing/deleting/delete-br-010.html
-/sdcard/android/layout_tests/editing/deleting/delete-and-undo.html
-/sdcard/android/layout_tests/editing/deleting/delete-br-006.html
-/sdcard/android/layout_tests/editing/deleting/delete-at-paragraph-boundaries-009.html
-/sdcard/android/layout_tests/editing/deleting/delete-hr.html
-/sdcard/android/layout_tests/editing/deleting/4875189.html
-/sdcard/android/layout_tests/editing/deleting/delete-4083333-fix.html
-/sdcard/android/layout_tests/editing/deleting/delete-3608445-fix.html
-/sdcard/android/layout_tests/editing/deleting/delete-ws-fixup-002.html
-/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-003.html
-/sdcard/android/layout_tests/editing/deleting/delete-image-004.html
-/sdcard/android/layout_tests/editing/deleting/delete-select-all-001.html
-/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-015.html
-/sdcard/android/layout_tests/editing/deleting/delete-line-002.html
-/sdcard/android/layout_tests/editing/deleting/delete-line-014.html
-/sdcard/android/layout_tests/editing/deleting/merge-into-empty-block-2.html
-/sdcard/android/layout_tests/editing/deleting/delete-at-paragraph-boundaries-010.html
-/sdcard/android/layout_tests/editing/deleting/5390681-2.html
-/sdcard/android/layout_tests/editing/deleting/5369009.html
-/sdcard/android/layout_tests/editing/deleting/delete-br-003.html
-/sdcard/android/layout_tests/editing/deleting/delete-at-paragraph-boundaries-006.html
-/sdcard/android/layout_tests/editing/deleting/delete-tab-002.html
-/sdcard/android/layout_tests/editing/deleting/list-item-1.html
-/sdcard/android/layout_tests/editing/deleting/5168598.html
-/sdcard/android/layout_tests/editing/deleting/delete-3608430-fix.html
-/sdcard/android/layout_tests/editing/spelling/spelling.html
-/sdcard/android/layout_tests/editing/spelling/inline_spelling_markers.html
-/sdcard/android/layout_tests/printing/media-queries-print.html
-/sdcard/android/layout_tests/fast/media/mq-relative-constraints-05.html
-/sdcard/android/layout_tests/fast/media/mq-grid-02.html
-/sdcard/android/layout_tests/fast/media/mq-compound-query-02.html
-/sdcard/android/layout_tests/fast/media/mq-relative-constraints-09.html
-/sdcard/android/layout_tests/fast/media/mq-width-absolute-03.html
-/sdcard/android/layout_tests/fast/media/mq-invalid-media-feature-02.html
-/sdcard/android/layout_tests/fast/media/mq-simple-query-04.html
-/sdcard/android/layout_tests/fast/media/mq-min-pixel-ratio.html
-/sdcard/android/layout_tests/fast/media/implicit-media-all.html
-/sdcard/android/layout_tests/fast/media/media-descriptor-syntax-01.html
-/sdcard/android/layout_tests/fast/media/mq-simple-neg-query-03.html
-/sdcard/android/layout_tests/fast/media/viewport-media-query.html
-/sdcard/android/layout_tests/fast/media/media-descriptor-syntax-05.html
-/sdcard/android/layout_tests/fast/media/mq-invalid-syntax-01.html
-/sdcard/android/layout_tests/fast/media/mq-transition.html
-/sdcard/android/layout_tests/fast/media/mq-transform-04.html
-/sdcard/android/layout_tests/fast/media/mq-invalid-syntax-05.html
-/sdcard/android/layout_tests/fast/media/mq-js-media-except-02.html
-/sdcard/android/layout_tests/fast/media/mq-relative-constraints-02.html
-/sdcard/android/layout_tests/fast/media/mq-js-stylesheet-media-03.html
-/sdcard/android/layout_tests/fast/media/mq-relative-constraints-06.html
-/sdcard/android/layout_tests/fast/media/mq-valueless.html
-/sdcard/android/layout_tests/fast/media/mq-compound-query-03.html
-/sdcard/android/layout_tests/fast/media/mq-simple-query-01.html
-/sdcard/android/layout_tests/fast/media/mq-invalid-media-feature-03.html
-/sdcard/android/layout_tests/fast/media/mq-width-absolute-04.html
-/sdcard/android/layout_tests/fast/media/mq-simple-query-05.html
-/sdcard/android/layout_tests/fast/media/mq-animation.html
-/sdcard/android/layout_tests/fast/media/media-descriptor-syntax-02.html
-/sdcard/android/layout_tests/fast/media/mq-simple-neg-query-04.html
-/sdcard/android/layout_tests/fast/media/media-type-syntax-01.html
-/sdcard/android/layout_tests/fast/media/media-descriptor-syntax-06.html
-/sdcard/android/layout_tests/fast/media/mq-invalid-syntax-02.html
-/sdcard/android/layout_tests/fast/media/mq-transform-01.html
-/sdcard/android/layout_tests/fast/media/monochrome.html
-/sdcard/android/layout_tests/fast/media/mq-pixel-ratio.html
-/sdcard/android/layout_tests/fast/media/mq-js-media-except-03.html
-/sdcard/android/layout_tests/fast/media/mq-relative-constraints-03.html
-/sdcard/android/layout_tests/fast/media/mq-js-stylesheet-media-04.html
-/sdcard/android/layout_tests/fast/media/mq-relative-constraints-07.html
-/sdcard/android/layout_tests/fast/media/mq-compound-query-04.html
-/sdcard/android/layout_tests/fast/media/mq-width-absolute-01.html
-/sdcard/android/layout_tests/fast/media/mq-simple-query-02.html
-/sdcard/android/layout_tests/fast/media/mq-invalid-media-feature-04.html
-/sdcard/android/layout_tests/fast/media/mq-max-pixel-ratio.html
-/sdcard/android/layout_tests/fast/media/mq-simple-neg-query-01.html
-/sdcard/android/layout_tests/fast/media/media-descriptor-syntax-03.html
-/sdcard/android/layout_tests/fast/media/mq-simple-neg-query-05.html
-/sdcard/android/layout_tests/fast/media/media-type-syntax-02.html
-/sdcard/android/layout_tests/fast/media/mq-invalid-syntax-03.html
-/sdcard/android/layout_tests/fast/media/mq-transform-02.html
-/sdcard/android/layout_tests/fast/media/mq-js-stylesheet-media-01.html
-/sdcard/android/layout_tests/fast/media/mq-relative-constraints-04.html
-/sdcard/android/layout_tests/fast/media/mq-grid-01.html
-/sdcard/android/layout_tests/fast/media/mq-compound-query-01.html
-/sdcard/android/layout_tests/fast/media/mq-min-constraint.html
-/sdcard/android/layout_tests/fast/media/mq-relative-constraints-08.html
-/sdcard/android/layout_tests/fast/media/mq-compound-query-05.html
-/sdcard/android/layout_tests/fast/media/mq-width-absolute-02.html
-/sdcard/android/layout_tests/fast/media/mq-invalid-media-feature-01.html
-/sdcard/android/layout_tests/fast/media/mq-simple-query-03.html
-/sdcard/android/layout_tests/fast/media/mq-js-media-forward-syntax.html
-/sdcard/android/layout_tests/fast/media/mq-simple-neg-query-02.html
-/sdcard/android/layout_tests/fast/media/media-descriptor-syntax-04.html
-/sdcard/android/layout_tests/fast/media/mq-transform-03.html
-/sdcard/android/layout_tests/fast/media/mq-invalid-syntax-04.html
-/sdcard/android/layout_tests/fast/media/mq-js-media-except-01.html
-/sdcard/android/layout_tests/fast/media/mq-js-stylesheet-media-02.html
-/sdcard/android/layout_tests/fast/replaced/width100percent-radio.html
-/sdcard/android/layout_tests/fast/replaced/object-align-hspace-vspace.html
-/sdcard/android/layout_tests/fast/replaced/width100percent-menulist.html
-/sdcard/android/layout_tests/fast/replaced/selection-rect.html
-/sdcard/android/layout_tests/fast/replaced/image-sizing.html
-/sdcard/android/layout_tests/fast/replaced/minheight-pxs.html
-/sdcard/android/layout_tests/fast/replaced/maxheight-pxs.html
-/sdcard/android/layout_tests/fast/replaced/inline-box-wrapper-handover.html
-/sdcard/android/layout_tests/fast/replaced/width100percent-searchfield.html
-/sdcard/android/layout_tests/fast/replaced/selection-rect-transform.html
-/sdcard/android/layout_tests/fast/replaced/pdf-as-image.html
-/sdcard/android/layout_tests/fast/replaced/replaced-breaking-mixture.html
-/sdcard/android/layout_tests/fast/replaced/minwidth-pxs.html
-/sdcard/android/layout_tests/fast/replaced/width100percent-textarea.html
-/sdcard/android/layout_tests/fast/replaced/maxwidth-pxs.html
-/sdcard/android/layout_tests/fast/replaced/max-width-percent.html
-/sdcard/android/layout_tests/fast/replaced/absolute-position-percentage-height.html
-/sdcard/android/layout_tests/fast/replaced/002.html
-/sdcard/android/layout_tests/fast/replaced/004.html
-/sdcard/android/layout_tests/fast/replaced/width100percent-checkbox.html
-/sdcard/android/layout_tests/fast/replaced/applet-disabled-positioned.html
-/sdcard/android/layout_tests/fast/replaced/006.html
-/sdcard/android/layout_tests/fast/replaced/008.html
-/sdcard/android/layout_tests/fast/replaced/percent-height-in-anonymous-block-widget.html
-/sdcard/android/layout_tests/fast/replaced/minheight-percent.html
-/sdcard/android/layout_tests/fast/replaced/maxheight-percent.html
-/sdcard/android/layout_tests/fast/replaced/absolute-position-with-auto-width-and-left-and-right.html
-/sdcard/android/layout_tests/fast/replaced/minwidth-percent.html
-/sdcard/android/layout_tests/fast/replaced/maxwidth-percent.html
-/sdcard/android/layout_tests/fast/replaced/applet-rendering-java-disabled.html
-/sdcard/android/layout_tests/fast/replaced/selection-rect-in-table-cell.html
-/sdcard/android/layout_tests/fast/replaced/percent-height-in-anonymous-block.html
-/sdcard/android/layout_tests/fast/replaced/three-selects-break.html
-/sdcard/android/layout_tests/fast/replaced/width100percent-button.html
-/sdcard/android/layout_tests/fast/replaced/image-tag.html
-/sdcard/android/layout_tests/fast/replaced/image-onload.html
-/sdcard/android/layout_tests/fast/replaced/image-resize-width.html
-/sdcard/android/layout_tests/fast/replaced/absolute-image-sizing.html
-/sdcard/android/layout_tests/fast/replaced/replaced-breaking.html
-/sdcard/android/layout_tests/fast/replaced/001.html
-/sdcard/android/layout_tests/fast/replaced/width100percent-image.html
-/sdcard/android/layout_tests/fast/replaced/image-solid-color-with-alpha.html
-/sdcard/android/layout_tests/fast/replaced/003.html
-/sdcard/android/layout_tests/fast/replaced/replaced-child-of-absolute-with-auto-height.html
-/sdcard/android/layout_tests/fast/replaced/005.html
-/sdcard/android/layout_tests/fast/replaced/007.html
-/sdcard/android/layout_tests/fast/replaced/absolute-position-with-auto-height-and-top-and-bottom.html
-/sdcard/android/layout_tests/fast/replaced/width100percent-textfield.html
-/sdcard/android/layout_tests/fast/replaced/absolute-position-percentage-width.html
-/sdcard/android/layout_tests/fast/dynamic/positioned-movement-with-positioned-children.html
-/sdcard/android/layout_tests/fast/dynamic/subtree-table-cell-height.html
-/sdcard/android/layout_tests/fast/dynamic/move-node-with-selection.html
-/sdcard/android/layout_tests/fast/dynamic/create-renderer-for-whitespace-only-text.html
-/sdcard/android/layout_tests/fast/dynamic/outerHTML-doc.html
-/sdcard/android/layout_tests/fast/dynamic/floating-to-positioned-2.html
-/sdcard/android/layout_tests/fast/dynamic/012.html
-/sdcard/android/layout_tests/fast/dynamic/004.html
-/sdcard/android/layout_tests/fast/dynamic/008.html
-/sdcard/android/layout_tests/fast/dynamic/float-no-longer-overhanging.html
-/sdcard/android/layout_tests/fast/dynamic/float-withdrawal-2.html
-/sdcard/android/layout_tests/fast/dynamic/float-in-trailing-whitespace-after-last-line-break.html
-/sdcard/android/layout_tests/fast/dynamic/selection-highlight-adjust.html
-/sdcard/android/layout_tests/fast/dynamic/subtree-no-common-root-static-y.html
-/sdcard/android/layout_tests/fast/dynamic/genContentDestroyChildren.html
-/sdcard/android/layout_tests/fast/dynamic/001.html
-/sdcard/android/layout_tests/fast/dynamic/link-href-change.html
-/sdcard/android/layout_tests/fast/dynamic/013.html
-/sdcard/android/layout_tests/fast/dynamic/005.html
-/sdcard/android/layout_tests/fast/dynamic/009.html
-/sdcard/android/layout_tests/fast/dynamic/float-withdrawal.html
-/sdcard/android/layout_tests/fast/dynamic/anonymous-block-layer-lost.html
-/sdcard/android/layout_tests/fast/dynamic/layer-hit-test-crash.html
-/sdcard/android/layout_tests/fast/dynamic/view-overflow.html
-/sdcard/android/layout_tests/fast/dynamic/010.html
-/sdcard/android/layout_tests/fast/dynamic/002.html
-/sdcard/android/layout_tests/fast/dynamic/014.html
-/sdcard/android/layout_tests/fast/dynamic/006.html
-/sdcard/android/layout_tests/fast/dynamic/flash-replacement-test.html
-/sdcard/android/layout_tests/fast/dynamic/insertAdjacentElement.html
-/sdcard/android/layout_tests/fast/dynamic/insert-before-table-part-in-continuation.html
-/sdcard/android/layout_tests/fast/dynamic/staticY.html
-/sdcard/android/layout_tests/fast/dynamic/anonymous-block-orphaned-lines.html
-/sdcard/android/layout_tests/fast/dynamic/noninlinebadness.html
-/sdcard/android/layout_tests/fast/dynamic/subtree-parent-static-y.html
-/sdcard/android/layout_tests/fast/dynamic/outerHTML-img.html
-/sdcard/android/layout_tests/fast/dynamic/staticY-marking-parents-regression.html
-/sdcard/android/layout_tests/fast/dynamic/floating-to-positioned.html
-/sdcard/android/layout_tests/fast/dynamic/subtree-boundary-percent-height.html
-/sdcard/android/layout_tests/fast/dynamic/011.html
-/sdcard/android/layout_tests/fast/dynamic/containing-block-change.html
-/sdcard/android/layout_tests/fast/dynamic/015.html
-/sdcard/android/layout_tests/fast/dynamic/007.html
-/sdcard/android/layout_tests/fast/text/firstline/001.html
-/sdcard/android/layout_tests/fast/text/firstline/002.html
-/sdcard/android/layout_tests/fast/text/firstline/003.html
-/sdcard/android/layout_tests/fast/text/international/wrap-CJK-001.html
-/sdcard/android/layout_tests/fast/text/international/bidi-listbox-atsui.html
-/sdcard/android/layout_tests/fast/text/international/hindi-spacing.html
-/sdcard/android/layout_tests/fast/text/international/thai-line-breaks.html
-/sdcard/android/layout_tests/fast/text/international/bidi-neutral-run.html
-/sdcard/android/layout_tests/fast/text/international/bidi-L2-run-reordering.html
-/sdcard/android/layout_tests/fast/text/international/bidi-override.html
-/sdcard/android/layout_tests/fast/text/international/bidi-innertext.html
-/sdcard/android/layout_tests/fast/text/international/bidi-european-terminators.html
-/sdcard/android/layout_tests/fast/text/international/bidi-listbox.html
-/sdcard/android/layout_tests/fast/text/international/bidi-LDB-2-formatting-characters.html
-/sdcard/android/layout_tests/fast/text/international/bidi-AN-after-L.html
-/sdcard/android/layout_tests/fast/text/international/bidi-LDB-2-CSS.html
-/sdcard/android/layout_tests/fast/text/international/bidi-control-chars-treated-as-ZWS.html
-/sdcard/android/layout_tests/fast/text/international/rtl-caret.html
-/sdcard/android/layout_tests/fast/text/international/bidi-neutral-directionality-paragraph-start.html
-/sdcard/android/layout_tests/fast/text/international/bidi-AN-after-empty-run.html
-/sdcard/android/layout_tests/fast/text/international/001.html
-/sdcard/android/layout_tests/fast/text/international/002.html
-/sdcard/android/layout_tests/fast/text/international/bidi-ignored-for-first-child-inline.html
-/sdcard/android/layout_tests/fast/text/international/bidi-explicit-embedding.html
-/sdcard/android/layout_tests/fast/text/international/003.html
-/sdcard/android/layout_tests/fast/text/international/rtl-white-space-pre-wrap.html
-/sdcard/android/layout_tests/fast/text/international/bidi-layout-across-linebreak.html
-/sdcard/android/layout_tests/fast/text/international/bidi-CS-after-AN.html
-/sdcard/android/layout_tests/fast/text/international/bidi-menulist.html
-/sdcard/android/layout_tests/fast/text/international/bidi-LDB-2-HTML.html
-/sdcard/android/layout_tests/fast/text/international/complex-character-based-fallback.html
-/sdcard/android/layout_tests/fast/text/whitespace/pre-wrap-overflow-selection.html
-/sdcard/android/layout_tests/fast/text/whitespace/pre-newline-box-test.html
-/sdcard/android/layout_tests/fast/text/whitespace/span-in-word-space-causes-overflow.html
-/sdcard/android/layout_tests/fast/text/whitespace/nowrap-clear-float.html
-/sdcard/android/layout_tests/fast/text/whitespace/pre-wrap-line-test.html
-/sdcard/android/layout_tests/fast/text/whitespace/010.html
-/sdcard/android/layout_tests/fast/text/whitespace/020.html
-/sdcard/android/layout_tests/fast/text/whitespace/002.html
-/sdcard/android/layout_tests/fast/text/whitespace/030.html
-/sdcard/android/layout_tests/fast/text/whitespace/012.html
-/sdcard/android/layout_tests/fast/text/whitespace/022.html
-/sdcard/android/layout_tests/fast/text/whitespace/004.html
-/sdcard/android/layout_tests/fast/text/whitespace/014.html
-/sdcard/android/layout_tests/fast/text/whitespace/024.html
-/sdcard/android/layout_tests/fast/text/whitespace/006.html
-/sdcard/android/layout_tests/fast/text/whitespace/016.html
-/sdcard/android/layout_tests/fast/text/whitespace/008.html
-/sdcard/android/layout_tests/fast/text/whitespace/026.html
-/sdcard/android/layout_tests/fast/text/whitespace/018.html
-/sdcard/android/layout_tests/fast/text/whitespace/028.html
-/sdcard/android/layout_tests/fast/text/whitespace/normal-after-nowrap-breaking.html
-/sdcard/android/layout_tests/fast/text/whitespace/pre-break-word.html
-/sdcard/android/layout_tests/fast/text/whitespace/nbsp-mode-and-linewraps.html
-/sdcard/android/layout_tests/fast/text/whitespace/001.html
-/sdcard/android/layout_tests/fast/text/whitespace/011.html
-/sdcard/android/layout_tests/fast/text/whitespace/tab-character-basics.html
-/sdcard/android/layout_tests/fast/text/whitespace/003.html
-/sdcard/android/layout_tests/fast/text/whitespace/021.html
-/sdcard/android/layout_tests/fast/text/whitespace/013.html
-/sdcard/android/layout_tests/fast/text/whitespace/005.html
-/sdcard/android/layout_tests/fast/text/whitespace/023.html
-/sdcard/android/layout_tests/fast/text/whitespace/015.html
-/sdcard/android/layout_tests/fast/text/whitespace/025.html
-/sdcard/android/layout_tests/fast/text/whitespace/007.html
-/sdcard/android/layout_tests/fast/text/whitespace/017.html
-/sdcard/android/layout_tests/fast/text/whitespace/pre-wrap-spaces-after-newline.html
-/sdcard/android/layout_tests/fast/text/whitespace/027.html
-/sdcard/android/layout_tests/fast/text/whitespace/009.html
-/sdcard/android/layout_tests/fast/text/whitespace/019.html
-/sdcard/android/layout_tests/fast/text/whitespace/pre-wrap-last-char.html
-/sdcard/android/layout_tests/fast/text/whitespace/029.html
-/sdcard/android/layout_tests/fast/text/basic/001.html
-/sdcard/android/layout_tests/fast/text/basic/002.html
-/sdcard/android/layout_tests/fast/text/basic/011.html
-/sdcard/android/layout_tests/fast/text/basic/generic-family-changes.html
-/sdcard/android/layout_tests/fast/text/basic/003.html
-/sdcard/android/layout_tests/fast/text/basic/012.html
-/sdcard/android/layout_tests/fast/text/basic/004.html
-/sdcard/android/layout_tests/fast/text/basic/013.html
-/sdcard/android/layout_tests/fast/text/basic/005.html
-/sdcard/android/layout_tests/fast/text/basic/014.html
-/sdcard/android/layout_tests/fast/text/basic/006.html
-/sdcard/android/layout_tests/fast/text/basic/015.html
-/sdcard/android/layout_tests/fast/text/basic/007.html
-/sdcard/android/layout_tests/fast/text/basic/008.html
-/sdcard/android/layout_tests/fast/text/basic/009.html
-/sdcard/android/layout_tests/fast/text/basic/generic-family-reset.html
-/sdcard/android/layout_tests/fast/text/in-rendered-text-rtl.html
-/sdcard/android/layout_tests/fast/text/selection-painted-separately.html
-/sdcard/android/layout_tests/fast/text/bidi-embedding-pop-and-push-same.html
-/sdcard/android/layout_tests/fast/text/wbr-in-pre-crash.html
-/sdcard/android/layout_tests/fast/text/atsui-spacing-features.html
-/sdcard/android/layout_tests/fast/text/textIteratorNilRenderer.html
-/sdcard/android/layout_tests/fast/text/drawBidiText.html
-/sdcard/android/layout_tests/fast/text/selection-hard-linebreak.html
-/sdcard/android/layout_tests/fast/text/word-break.html
-/sdcard/android/layout_tests/fast/text/font-initial.html
-/sdcard/android/layout_tests/fast/text/break-word.html
-/sdcard/android/layout_tests/fast/text/stroking.html
-/sdcard/android/layout_tests/fast/text/midword-break-hang.html
-/sdcard/android/layout_tests/fast/text/atsui-partial-selection.html
-/sdcard/android/layout_tests/fast/text/embed-at-end-of-pre-wrap-line.html
-/sdcard/android/layout_tests/fast/text/atsui-multiple-renderers.html
-/sdcard/android/layout_tests/fast/text/apply-start-width-after-skipped-text.html
-/sdcard/android/layout_tests/fast/text/capitalize-preserve-nbsp.html
-/sdcard/android/layout_tests/fast/text/updateNewFont.html
-/sdcard/android/layout_tests/fast/text/atsui-rtl-override-selection.html
-/sdcard/android/layout_tests/fast/text/align-center-rtl-spill.html
-/sdcard/android/layout_tests/fast/text/wbr.html
-/sdcard/android/layout_tests/fast/text/cg-vs-atsui.html
-/sdcard/android/layout_tests/fast/text/monospace-width-cache.html
-/sdcard/android/layout_tests/fast/text/soft-hyphen-2.html
-/sdcard/android/layout_tests/fast/text/justified-selection.html
-/sdcard/android/layout_tests/fast/text/atsui-pointtooffset-calls-cg.html
-/sdcard/android/layout_tests/fast/text/atsui-kerning-and-ligatures.html
-/sdcard/android/layout_tests/fast/text/wbr-pre.html
-/sdcard/android/layout_tests/fast/text/capitalize-boundaries.html
-/sdcard/android/layout_tests/fast/text/trailing-white-space.html
-/sdcard/android/layout_tests/fast/text/capitalize-empty-generated-string.html
-/sdcard/android/layout_tests/fast/text/stripNullFromText.html
-/sdcard/android/layout_tests/fast/text/letter-spacing-negative-opacity.html
-/sdcard/android/layout_tests/fast/text/atsui-small-caps-punctuation-size.html
-/sdcard/android/layout_tests/fast/text/word-break-soft-hyphen.html
-/sdcard/android/layout_tests/fast/text/fixed-pitch-control-characters.html
-/sdcard/android/layout_tests/fast/text/cg-fallback-bolding.html
-/sdcard/android/layout_tests/fast/text/line-breaks-after-white-space.html
-/sdcard/android/layout_tests/fast/text/soft-hyphen-3.html
-/sdcard/android/layout_tests/fast/text/wide-zero-width-space.html
-/sdcard/android/layout_tests/fast/text/should-use-atsui.html
-/sdcard/android/layout_tests/fast/text/justified-selection-at-edge.html
-/sdcard/android/layout_tests/fast/text/trailing-white-space-2.html
-/sdcard/android/layout_tests/fast/text/word-break-run-rounding.html
-/sdcard/android/layout_tests/fast/text/softHyphen.html
-/sdcard/android/layout_tests/fast/text/delete-hard-break-character.html
-/sdcard/android/layout_tests/fast/text/line-breaks.html
-/sdcard/android/layout_tests/fast/text/wbr-styled.html
-/sdcard/android/layout_tests/fast/text/large-text-composed-char.html
-/sdcard/android/layout_tests/fast/text/shadow-no-blur.html
-/sdcard/android/layout_tests/fast/text/reset-emptyRun.html
-/sdcard/android/layout_tests/fast/text/word-space.html
-/sdcard/android/layout_tests/fast/text/midword-break-after-breakable-char.html
-/sdcard/android/layout_tests/fast/text/stroking-decorations.html
-/sdcard/android/layout_tests/fast/encoding/utf-16-little-endian.html
-/sdcard/android/layout_tests/fast/encoding/denormalised-voiced-japanese-chars.html
-/sdcard/android/layout_tests/fast/encoding/utf-16-no-bom.xml
-/sdcard/android/layout_tests/fast/encoding/utf-16-big-endian.html
-/sdcard/android/layout_tests/fast/encoding/xmacroman-encoding-test.html
-/sdcard/android/layout_tests/fast/encoding/invalid-UTF-8.html
-/sdcard/android/layout_tests/fast/multicol/float-avoidance.html
-/sdcard/android/layout_tests/fast/multicol/negativeColumnWidth.html
-/sdcard/android/layout_tests/fast/multicol/column-rules.html
-/sdcard/android/layout_tests/fast/multicol/zeroColumnCount.html
-/sdcard/android/layout_tests/fast/multicol/columns-shorthand-parsing.html
-/sdcard/android/layout_tests/fast/multicol/float-multicol.html
-/sdcard/android/layout_tests/fast/doctypes/001.html
-/sdcard/android/layout_tests/fast/doctypes/002.html
-/sdcard/android/layout_tests/fast/doctypes/003.html
-/sdcard/android/layout_tests/fast/doctypes/004.html
-/sdcard/android/layout_tests/fast/css-generated-content/table-row-group-to-inline.html
-/sdcard/android/layout_tests/fast/css-generated-content/spellingToolTip-assert.html
-/sdcard/android/layout_tests/fast/css-generated-content/no-openclose-quote.html
-/sdcard/android/layout_tests/fast/css-generated-content/before-with-first-letter.html
-/sdcard/android/layout_tests/fast/css-generated-content/table-row-group-with-before.html
-/sdcard/android/layout_tests/fast/css-generated-content/010.html
-/sdcard/android/layout_tests/fast/css-generated-content/table-with-before.html
-/sdcard/android/layout_tests/fast/css-generated-content/002.html
-/sdcard/android/layout_tests/fast/css-generated-content/012.html
-/sdcard/android/layout_tests/fast/css-generated-content/004.html
-/sdcard/android/layout_tests/fast/css-generated-content/014.html
-/sdcard/android/layout_tests/fast/css-generated-content/016.html
-/sdcard/android/layout_tests/fast/css-generated-content/008.html
-/sdcard/android/layout_tests/fast/css-generated-content/after-order.html
-/sdcard/android/layout_tests/fast/css-generated-content/table-cell-before-content.html
-/sdcard/android/layout_tests/fast/css-generated-content/visibleContentHiddenParent.html
-/sdcard/android/layout_tests/fast/css-generated-content/inline-display-types.html
-/sdcard/android/layout_tests/fast/css-generated-content/positioned-background-hit-test-crash.html
-/sdcard/android/layout_tests/fast/css-generated-content/001.html
-/sdcard/android/layout_tests/fast/css-generated-content/011.html
-/sdcard/android/layout_tests/fast/css-generated-content/003.html
-/sdcard/android/layout_tests/fast/css-generated-content/013.html
-/sdcard/android/layout_tests/fast/css-generated-content/005.html
-/sdcard/android/layout_tests/fast/css-generated-content/hover-style-change.html
-/sdcard/android/layout_tests/fast/css-generated-content/absolute-position-inside-inline.html
-/sdcard/android/layout_tests/fast/css-generated-content/015.html
-/sdcard/android/layout_tests/fast/css-generated-content/table-row-with-before.html
-/sdcard/android/layout_tests/fast/css-generated-content/007.html
-/sdcard/android/layout_tests/fast/css-generated-content/009.html
-/sdcard/android/layout_tests/fast/css-generated-content/wbr-with-before-content.html
-/sdcard/android/layout_tests/fast/lists/decimal-leading-zero.html
-/sdcard/android/layout_tests/fast/lists/ol-display-types.html
-/sdcard/android/layout_tests/fast/lists/li-style-alpha-huge-value-crash.html
-/sdcard/android/layout_tests/fast/lists/ol-start-dynamic.html
-/sdcard/android/layout_tests/fast/lists/numeric-markers-outside-list.html
-/sdcard/android/layout_tests/fast/lists/marker-image-error.html
-/sdcard/android/layout_tests/fast/lists/marker-before-empty-inline.html
-/sdcard/android/layout_tests/fast/lists/scrolled-marker-paint.html
-/sdcard/android/layout_tests/fast/lists/li-values.html
-/sdcard/android/layout_tests/fast/lists/002.html
-/sdcard/android/layout_tests/fast/lists/dynamic-marker-crash.html
-/sdcard/android/layout_tests/fast/lists/list-item-line-height.html
-/sdcard/android/layout_tests/fast/lists/004.html
-/sdcard/android/layout_tests/fast/lists/drag-into-marker.html
-/sdcard/android/layout_tests/fast/lists/list-style-none-crash.html
-/sdcard/android/layout_tests/fast/lists/alpha-list-wrap.html
-/sdcard/android/layout_tests/fast/lists/006.html
-/sdcard/android/layout_tests/fast/lists/008.html
-/sdcard/android/layout_tests/fast/lists/inlineBoxWrapperNullCheck.html
-/sdcard/android/layout_tests/fast/lists/w3-list-styles.html
-/sdcard/android/layout_tests/fast/lists/item-not-in-list-line-wrapping.html
-/sdcard/android/layout_tests/fast/lists/olstart.html
-/sdcard/android/layout_tests/fast/lists/big-list-marker.html
-/sdcard/android/layout_tests/fast/lists/markers-in-selection.html
-/sdcard/android/layout_tests/fast/lists/list-style-type-dynamic-change.html
-/sdcard/android/layout_tests/fast/lists/001.html
-/sdcard/android/layout_tests/fast/lists/ordered-list-with-no-ol-tag.html
-/sdcard/android/layout_tests/fast/lists/003.html
-/sdcard/android/layout_tests/fast/lists/005.html
-/sdcard/android/layout_tests/fast/lists/li-br.html
-/sdcard/android/layout_tests/fast/lists/007.html
-/sdcard/android/layout_tests/fast/lists/009.html
-/sdcard/android/layout_tests/fast/transforms/transform-overflow.html
-/sdcard/android/layout_tests/fast/transforms/transforms-with-opacity.html
-/sdcard/android/layout_tests/fast/transforms/transformed-caret.html
-/sdcard/android/layout_tests/fast/transforms/matrix-01.html
-/sdcard/android/layout_tests/fast/transforms/transform-positioned-ancestor.html
-/sdcard/android/layout_tests/fast/transforms/matrix-02.html
-/sdcard/android/layout_tests/fast/transforms/skew-with-unitless-zero.html
-/sdcard/android/layout_tests/fast/transforms/overflow-with-transform.html
-/sdcard/android/layout_tests/fast/transforms/transformed-document-element.html
-/sdcard/android/layout_tests/fast/transforms/shadows.html
-/sdcard/android/layout_tests/fast/transforms/transformed-focused-text-input.html
-/sdcard/android/layout_tests/fast/transforms/diamond.html
-/sdcard/android/layout_tests/fast/transforms/identity-matrix.html
-/sdcard/android/layout_tests/fast/innerHTML/001.html
-/sdcard/android/layout_tests/fast/innerHTML/002.html
-/sdcard/android/layout_tests/fast/innerHTML/003.html
-/sdcard/android/layout_tests/fast/innerHTML/006.html
-/sdcard/android/layout_tests/fast/borders/borderRadiusSolid01.html
-/sdcard/android/layout_tests/fast/borders/borderRadiusDouble01.html
-/sdcard/android/layout_tests/fast/borders/block-mask-overlay-image.html
-/sdcard/android/layout_tests/fast/borders/borderRadiusSolid03.html
-/sdcard/android/layout_tests/fast/borders/borderRadiusDouble03.html
-/sdcard/android/layout_tests/fast/borders/border-color-inherit.html
-/sdcard/android/layout_tests/fast/borders/svg-as-border-image-2.html
-/sdcard/android/layout_tests/fast/borders/borderRadiusInvalidColor.html
-/sdcard/android/layout_tests/fast/borders/border-image-scale-transform.html
-/sdcard/android/layout_tests/fast/borders/borderRadiusDotted02.html
-/sdcard/android/layout_tests/fast/borders/border-fit.html
-/sdcard/android/layout_tests/fast/borders/borderRadiusArcs01.html
-/sdcard/android/layout_tests/fast/borders/borderRadiusDashed01.html
-/sdcard/android/layout_tests/fast/borders/borderRadiusDashed03.html
-/sdcard/android/layout_tests/fast/borders/fieldsetBorderRadius.html
-/sdcard/android/layout_tests/fast/borders/borderRadiusAllStylesAllCorners.html
-/sdcard/android/layout_tests/fast/borders/borderRadiusGroove01.html
-/sdcard/android/layout_tests/fast/borders/border-image-omit-right-slice.html
-/sdcard/android/layout_tests/fast/borders/borderRadiusDouble02.html
-/sdcard/android/layout_tests/fast/borders/borderRadiusSolid02.html
-/sdcard/android/layout_tests/fast/borders/outline-offset-min-assert.html
-/sdcard/android/layout_tests/fast/borders/borderRadiusSolid04.html
-/sdcard/android/layout_tests/fast/borders/border-radius-huge-assert.html
-/sdcard/android/layout_tests/fast/borders/borderRadiusInset01.html
-/sdcard/android/layout_tests/fast/borders/borderRadiusDotted01.html
-/sdcard/android/layout_tests/fast/borders/borderRadiusOutset01.html
-/sdcard/android/layout_tests/fast/borders/svg-as-border-image.html
-/sdcard/android/layout_tests/fast/borders/borderRadiusDotted03.html
-/sdcard/android/layout_tests/fast/borders/borderRadiusDashed02.html
-/sdcard/android/layout_tests/fast/borders/borderRadiusRidge01.html
-/sdcard/android/layout_tests/fast/borders/border-image-rotate-transform.html
-/sdcard/android/layout_tests/fast/borders/inline-mask-overlay-image.html
-/sdcard/android/layout_tests/fast/borders/borderRadiusGroove02.html
-/sdcard/android/layout_tests/fast/borders/border-image-01.html
-/sdcard/android/layout_tests/fast/selectors/175a.html
-/sdcard/android/layout_tests/fast/selectors/155c.html
-/sdcard/android/layout_tests/fast/selectors/059.html
-/sdcard/android/layout_tests/fast/selectors/066b.html
-/sdcard/android/layout_tests/fast/selectors/168.html
-/sdcard/android/layout_tests/fast/selectors/177a.html
-/sdcard/android/layout_tests/fast/selectors/087b.html
-/sdcard/android/layout_tests/fast/selectors/020.html
-/sdcard/android/layout_tests/fast/selectors/012.html
-/sdcard/android/layout_tests/fast/selectors/040.html
-/sdcard/android/layout_tests/fast/selectors/004.html
-/sdcard/android/layout_tests/fast/selectors/032.html
-/sdcard/android/layout_tests/fast/selectors/060.html
-/sdcard/android/layout_tests/fast/selectors/016.html
-/sdcard/android/layout_tests/fast/selectors/044.html
-/sdcard/android/layout_tests/fast/selectors/008.html
-/sdcard/android/layout_tests/fast/selectors/072.html
-/sdcard/android/layout_tests/fast/selectors/064.html
-/sdcard/android/layout_tests/fast/selectors/056.html
-/sdcard/android/layout_tests/fast/selectors/018b.html
-/sdcard/android/layout_tests/fast/selectors/090b.html
-/sdcard/android/layout_tests/fast/selectors/045c.html
-/sdcard/android/layout_tests/fast/selectors/170d.html
-/sdcard/android/layout_tests/fast/selectors/157.html
-/sdcard/android/layout_tests/fast/selectors/039b.html
-/sdcard/android/layout_tests/fast/selectors/156b.html
-/sdcard/android/layout_tests/fast/selectors/175b.html
-/sdcard/android/layout_tests/fast/selectors/155d.html
-/sdcard/android/layout_tests/fast/selectors/167a.html
-/sdcard/android/layout_tests/fast/selectors/169.html
-/sdcard/android/layout_tests/fast/selectors/077b.html
-/sdcard/android/layout_tests/fast/selectors/177b.html
-/sdcard/android/layout_tests/fast/selectors/169a.html
-/sdcard/android/layout_tests/fast/selectors/001.html
-/sdcard/android/layout_tests/fast/selectors/021.html
-/sdcard/android/layout_tests/fast/selectors/unqualified-hover-quirks.html
-/sdcard/android/layout_tests/fast/selectors/013.html
-/sdcard/android/layout_tests/fast/selectors/041.html
-/sdcard/android/layout_tests/fast/selectors/021b.html
-/sdcard/android/layout_tests/fast/selectors/005.html
-/sdcard/android/layout_tests/fast/selectors/061.html
-/sdcard/android/layout_tests/fast/selectors/170.html
-/sdcard/android/layout_tests/fast/selectors/017.html
-/sdcard/android/layout_tests/fast/selectors/170a.html
-/sdcard/android/layout_tests/fast/selectors/009.html
-/sdcard/android/layout_tests/fast/selectors/045.html
-/sdcard/android/layout_tests/fast/selectors/154.html
-/sdcard/android/layout_tests/fast/selectors/044b.html
-/sdcard/android/layout_tests/fast/selectors/065.html
-/sdcard/android/layout_tests/fast/selectors/155a.html
-/sdcard/android/layout_tests/fast/selectors/166.html
-/sdcard/android/layout_tests/fast/selectors/158.html
-/sdcard/android/layout_tests/fast/selectors/077.html
-/sdcard/android/layout_tests/fast/selectors/175c.html
-/sdcard/android/layout_tests/fast/selectors/089.html
-/sdcard/android/layout_tests/fast/selectors/088b.html
-/sdcard/android/layout_tests/fast/selectors/nondeterministic-combinators.html
-/sdcard/android/layout_tests/fast/selectors/unqualified-hover-strict.html
-/sdcard/android/layout_tests/fast/selectors/010.html
-/sdcard/android/layout_tests/fast/selectors/002.html
-/sdcard/android/layout_tests/fast/selectors/014.html
-/sdcard/android/layout_tests/fast/selectors/042.html
-/sdcard/android/layout_tests/fast/selectors/006.html
-/sdcard/android/layout_tests/fast/selectors/034.html
-/sdcard/android/layout_tests/fast/selectors/062.html
-/sdcard/android/layout_tests/fast/selectors/007a.html
-/sdcard/android/layout_tests/fast/selectors/054.html
-/sdcard/android/layout_tests/fast/selectors/018.html
-/sdcard/android/layout_tests/fast/selectors/046.html
-/sdcard/android/layout_tests/fast/selectors/170b.html
-/sdcard/android/layout_tests/fast/selectors/072b.html
-/sdcard/android/layout_tests/fast/selectors/044c.html
-/sdcard/android/layout_tests/fast/selectors/038.html
-/sdcard/android/layout_tests/fast/selectors/155.html
-/sdcard/android/layout_tests/fast/selectors/066.html
-/sdcard/android/layout_tests/fast/selectors/058.html
-/sdcard/android/layout_tests/fast/selectors/155b.html
-/sdcard/android/layout_tests/fast/selectors/166a.html
-/sdcard/android/layout_tests/fast/selectors/167.html
-/sdcard/android/layout_tests/fast/selectors/159.html
-/sdcard/android/layout_tests/fast/selectors/168a.html
-/sdcard/android/layout_tests/fast/selectors/078b.html
-/sdcard/android/layout_tests/fast/selectors/011.html
-/sdcard/android/layout_tests/fast/selectors/003.html
-/sdcard/android/layout_tests/fast/selectors/015.html
-/sdcard/android/layout_tests/fast/selectors/043.html
-/sdcard/android/layout_tests/fast/selectors/160.html
-/sdcard/android/layout_tests/fast/selectors/063.html
-/sdcard/android/layout_tests/fast/selectors/043b.html
-/sdcard/android/layout_tests/fast/selectors/007b.html
-/sdcard/android/layout_tests/fast/selectors/027.html
-/sdcard/android/layout_tests/fast/selectors/019.html
-/sdcard/android/layout_tests/fast/selectors/083.html
-/sdcard/android/layout_tests/fast/selectors/045b.html
-/sdcard/android/layout_tests/fast/selectors/170c.html
-/sdcard/android/layout_tests/fast/selectors/044d.html
-/sdcard/android/layout_tests/fast/selectors/039.html
-/sdcard/android/layout_tests/fast/overflow/overflow-focus-ring.html
-/sdcard/android/layout_tests/fast/overflow/overflow-x-y.html
-/sdcard/android/layout_tests/fast/overflow/overflow-text-hit-testing.html
-/sdcard/android/layout_tests/fast/overflow/unreachable-overflow-rtl-bug.html
-/sdcard/android/layout_tests/fast/overflow/overflow-auto-position-absolute.html
-/sdcard/android/layout_tests/fast/overflow/scrollRevealButton.html
-/sdcard/android/layout_tests/fast/overflow/overflow-rtl-inline-scrollbar.html
-/sdcard/android/layout_tests/fast/overflow/002.html
-/sdcard/android/layout_tests/fast/overflow/overflow-rtl.html
-/sdcard/android/layout_tests/fast/overflow/004.html
-/sdcard/android/layout_tests/fast/overflow/006.html
-/sdcard/android/layout_tests/fast/overflow/scrollbar-position-update.html
-/sdcard/android/layout_tests/fast/overflow/008.html
-/sdcard/android/layout_tests/fast/overflow/scroll-nested-positioned-layer-in-overflow.html
-/sdcard/android/layout_tests/fast/overflow/image-selection-highlight.html
-/sdcard/android/layout_tests/fast/overflow/childFocusRingClip.html
-/sdcard/android/layout_tests/fast/overflow/dynamic-hidden.html
-/sdcard/android/layout_tests/fast/overflow/position-relative.html
-/sdcard/android/layout_tests/fast/overflow/clip-rects-fixed-ancestor.html
-/sdcard/android/layout_tests/fast/overflow/overflow_hidden.html
-/sdcard/android/layout_tests/fast/overflow/infiniteRecursionGuard.html
-/sdcard/android/layout_tests/fast/overflow/float-in-relpositioned.html
-/sdcard/android/layout_tests/fast/overflow/table-overflow-float.html
-/sdcard/android/layout_tests/fast/overflow/unreachable-content-test.html
-/sdcard/android/layout_tests/fast/overflow/003.xml
-/sdcard/android/layout_tests/fast/overflow/overflow-auto-table.html
-/sdcard/android/layout_tests/fast/overflow/infiniteRecursion.html
-/sdcard/android/layout_tests/fast/overflow/001.html
-/sdcard/android/layout_tests/fast/overflow/hit-test-overflow-controls.html
-/sdcard/android/layout_tests/fast/overflow/005.html
-/sdcard/android/layout_tests/fast/overflow/007.html
-/sdcard/android/layout_tests/fast/overflow/hidden-scrollbar-resize.html
-/sdcard/android/layout_tests/fast/events/autoscroll.html
-/sdcard/android/layout_tests/fast/events/5056619.html
-/sdcard/android/layout_tests/fast/events/updateLayoutForHitTest.html
-/sdcard/android/layout_tests/fast/events/label-focus.html
-/sdcard/android/layout_tests/fast/events/onloadFrameCrash.html
-/sdcard/android/layout_tests/fast/events/event-listener-on-link.html
-/sdcard/android/layout_tests/fast/events/keydown-1.html
-/sdcard/android/layout_tests/fast/events/onload-re-entry.html
-/sdcard/android/layout_tests/fast/events/standalone-image-drag-to-editable.html
-/sdcard/android/layout_tests/fast/events/focusingUnloadedFrame.html
-/sdcard/android/layout_tests/fast/events/event-sender-mouse-moved.html
-/sdcard/android/layout_tests/fast/events/mouseout-dead-node.html
-/sdcard/android/layout_tests/fast/events/reveal-link-when-focused.html
-/sdcard/android/layout_tests/fast/html/keygen.html
-/sdcard/android/layout_tests/fast/html/link-rel-stylesheet.html
-/sdcard/android/layout_tests/fast/html/listing.html
-/sdcard/android/layout_tests/fast/html/marquee-scroll.html
-/sdcard/android/layout_tests/fast/images/svg-as-tiled-background.html
-/sdcard/android/layout_tests/fast/images/svg-as-background.html
-/sdcard/android/layout_tests/fast/images/svg-as-image.html
-/sdcard/android/layout_tests/fast/images/pdf-as-image-landscape.html
-/sdcard/android/layout_tests/fast/images/pdf-as-tiled-background.html
-/sdcard/android/layout_tests/fast/images/object-image.html
-/sdcard/android/layout_tests/fast/images/pdf-as-background.html
-/sdcard/android/layout_tests/fast/images/svg-as-relative-image.html
-/sdcard/android/layout_tests/fast/images/imagemap-case.html
-/sdcard/android/layout_tests/fast/images/pdf-as-image.html
-/sdcard/android/layout_tests/fast/images/image-map-anchor-children.html
-/sdcard/android/layout_tests/fast/images/embed-image.html
-/sdcard/android/layout_tests/fast/images/animated-svg-as-image.html
-/sdcard/android/layout_tests/fast/images/image-in-map.html
-/sdcard/android/layout_tests/fast/images/animated-gif-with-offsets.html
-/sdcard/android/layout_tests/fast/images/favicon-as-image.html
-/sdcard/android/layout_tests/fast/images/svg-width-100p-as-background.html
-/sdcard/android/layout_tests/fast/inline-block/14498-positionForCoordinates.html
-/sdcard/android/layout_tests/fast/inline-block/001.html
-/sdcard/android/layout_tests/fast/inline-block/002.html
-/sdcard/android/layout_tests/fast/inline-block/003.html
-/sdcard/android/layout_tests/fast/inline-block/004.html
-/sdcard/android/layout_tests/fast/inline-block/005.html
-/sdcard/android/layout_tests/fast/inline-block/contenteditable-baseline.html
-/sdcard/android/layout_tests/fast/inline-block/006.html
-/sdcard/android/layout_tests/fast/inline-block/inline-block-vertical-align.html
-/sdcard/android/layout_tests/fast/inline-block/tricky-baseline.html
-/sdcard/android/layout_tests/fast/inline-block/overflow-clip.html
-/sdcard/android/layout_tests/fast/inspector/matchedrules.html
-/sdcard/android/layout_tests/fast/inspector/style.html
-/sdcard/android/layout_tests/fast/flexbox/001.html
-/sdcard/android/layout_tests/fast/flexbox/010.html
-/sdcard/android/layout_tests/fast/flexbox/020.html
-/sdcard/android/layout_tests/fast/flexbox/002.html
-/sdcard/android/layout_tests/fast/flexbox/011.html
-/sdcard/android/layout_tests/fast/flexbox/021.html
-/sdcard/android/layout_tests/fast/flexbox/003.html
-/sdcard/android/layout_tests/fast/flexbox/012.html
-/sdcard/android/layout_tests/fast/flexbox/022.html
-/sdcard/android/layout_tests/fast/flexbox/004.html
-/sdcard/android/layout_tests/fast/flexbox/013.html
-/sdcard/android/layout_tests/fast/flexbox/023.html
-/sdcard/android/layout_tests/fast/flexbox/005.html
-/sdcard/android/layout_tests/fast/flexbox/014.html
-/sdcard/android/layout_tests/fast/flexbox/015.html
-/sdcard/android/layout_tests/fast/flexbox/006.html
-/sdcard/android/layout_tests/fast/flexbox/024.html
-/sdcard/android/layout_tests/fast/flexbox/016.html
-/sdcard/android/layout_tests/fast/flexbox/007.html
-/sdcard/android/layout_tests/fast/flexbox/025.html
-/sdcard/android/layout_tests/fast/flexbox/008.html
-/sdcard/android/layout_tests/fast/flexbox/017.html
-/sdcard/android/layout_tests/fast/flexbox/026.html
-/sdcard/android/layout_tests/fast/flexbox/009.html
-/sdcard/android/layout_tests/fast/flexbox/018.html
-/sdcard/android/layout_tests/fast/flexbox/019.html
-/sdcard/android/layout_tests/fast/flexbox/flex-hang.html
-/sdcard/android/layout_tests/fast/tokenizer/missing-style-end-tag-1.html
-/sdcard/android/layout_tests/fast/tokenizer/002.html
-/sdcard/android/layout_tests/fast/tokenizer/missing-title-end-tag-2.html
-/sdcard/android/layout_tests/fast/tokenizer/script-after-frameset.html
-/sdcard/android/layout_tests/fast/tokenizer/missing-style-end-tag-2.html
-/sdcard/android/layout_tests/fast/tokenizer/external-script-document-write.html
-/sdcard/android/layout_tests/fast/tokenizer/script_extra_close.html
-/sdcard/android/layout_tests/fast/tokenizer/001.html
-/sdcard/android/layout_tests/fast/tokenizer/003.html
-/sdcard/android/layout_tests/fast/tokenizer/missing-title-end-tag-1.html
-/sdcard/android/layout_tests/fast/tokenizer/external-script-document-write_2.html
-/sdcard/android/layout_tests/fast/box-shadow/border-radius-big.html
-/sdcard/android/layout_tests/fast/box-shadow/basic-shadows.html
-/sdcard/android/layout_tests/fast/js/exception-linenums-in-html-3.html
-/sdcard/android/layout_tests/fast/js/missing-style-end-tag-js.html
-/sdcard/android/layout_tests/fast/body-propagation/background-image/010.html
-/sdcard/android/layout_tests/fast/body-propagation/background-image/001.html
-/sdcard/android/layout_tests/fast/body-propagation/background-image/002.html
-/sdcard/android/layout_tests/fast/body-propagation/background-image/003.html
-/sdcard/android/layout_tests/fast/body-propagation/background-image/004.html
-/sdcard/android/layout_tests/fast/body-propagation/background-image/005.html
-/sdcard/android/layout_tests/fast/body-propagation/background-image/006.html
-/sdcard/android/layout_tests/fast/body-propagation/background-image/007.html
-/sdcard/android/layout_tests/fast/body-propagation/background-image/008.html
-/sdcard/android/layout_tests/fast/body-propagation/background-image/009.html
-/sdcard/android/layout_tests/fast/body-propagation/overflow/001.html
-/sdcard/android/layout_tests/fast/body-propagation/overflow/002.html
-/sdcard/android/layout_tests/fast/body-propagation/overflow/003.html
-/sdcard/android/layout_tests/fast/body-propagation/overflow/004.html
-/sdcard/android/layout_tests/fast/body-propagation/overflow/005.html
-/sdcard/android/layout_tests/fast/body-propagation/overflow/006.html
-/sdcard/android/layout_tests/fast/body-propagation/overflow/007.html
-/sdcard/android/layout_tests/fast/body-propagation/background-color/001.html
-/sdcard/android/layout_tests/fast/body-propagation/background-color/002.html
-/sdcard/android/layout_tests/fast/body-propagation/background-color/003.html
-/sdcard/android/layout_tests/fast/body-propagation/background-color/004.html
-/sdcard/android/layout_tests/fast/body-propagation/background-color/005.html
-/sdcard/android/layout_tests/fast/body-propagation/background-color/006.html
-/sdcard/android/layout_tests/fast/body-propagation/background-color/007.html
-/sdcard/android/layout_tests/fast/body-propagation/background-color/008.html
-/sdcard/android/layout_tests/fast/inline/continuation-outlines-with-layers.html
-/sdcard/android/layout_tests/fast/inline/inline-padding-disables-text-quirk.html
-/sdcard/android/layout_tests/fast/inline/emptyInlinesWithinLists.html
-/sdcard/android/layout_tests/fast/inline/drawStyledEmptyInlines.html
-/sdcard/android/layout_tests/fast/inline/drawStyledEmptyInlinesWithWS.html
-/sdcard/android/layout_tests/fast/inline/positionedLifetime.html
-/sdcard/android/layout_tests/fast/inline/dirtyLinesForInline.html
-/sdcard/android/layout_tests/fast/inline/001.html
-/sdcard/android/layout_tests/fast/inline/002.html
-/sdcard/android/layout_tests/fast/inline/inline-text-quirk-bpm.html
-/sdcard/android/layout_tests/fast/inline/inline-borders-with-bidi-override.html
-/sdcard/android/layout_tests/fast/inline/styledEmptyInlinesWithBRs.html
-/sdcard/android/layout_tests/fast/inline/continuation-outlines.html
-/sdcard/android/layout_tests/fast/inline/outline-continuations.html
-/sdcard/android/layout_tests/fast/inline/br-text-decoration.html
-/sdcard/android/layout_tests/fast/inline/percentage-margins.html
-/sdcard/android/layout_tests/fast/dom/HTMLTableElement/colSpan.html
-/sdcard/android/layout_tests/fast/dom/HTMLTableElement/createCaption.html
-/sdcard/android/layout_tests/fast/dom/HTMLDocument/frameless-location-bugzilla10837.html
-/sdcard/android/layout_tests/fast/dom/Element/null-offset-parent.html
-/sdcard/android/layout_tests/fast/dom/Element/class-attribute-whitespace.html
-/sdcard/android/layout_tests/fast/dom/HTMLLinkElement/pending-stylesheet-count.html
-/sdcard/android/layout_tests/fast/dom/HTMLStyleElement/insert-parser-generated.html
-/sdcard/android/layout_tests/fast/dom/HTMLInputElement/input-image-alt-text.html
-/sdcard/android/layout_tests/fast/dom/Window/open-existing-pop-up-blocking.html
-/sdcard/android/layout_tests/fast/dom/Window/btoa-pnglet.html
-/sdcard/android/layout_tests/fast/dom/HTMLObjectElement/vspace-hspace-as-number.html
-/sdcard/android/layout_tests/fast/dom/HTMLElement/bdo.html
-/sdcard/android/layout_tests/fast/dom/Range/surroundContents-1.html
-/sdcard/android/layout_tests/fast/dom/Range/create-contextual-fragment.html
-/sdcard/android/layout_tests/fast/dom/HTMLHeadElement/textInHead1.html
-/sdcard/android/layout_tests/fast/dom/HTMLHeadElement/textInHead2.html
-/sdcard/android/layout_tests/fast/dom/HTMLHeadElement/textInHead3.html
-/sdcard/android/layout_tests/fast/dom/HTMLHeadElement/textInHead4.html
-/sdcard/android/layout_tests/fast/dom/HTMLHeadElement/textInHead5.html
-/sdcard/android/layout_tests/fast/dom/HTMLHeadElement/head-link-style-href-check.html
-/sdcard/android/layout_tests/fast/dom/HTMLTextAreaElement/reset-textarea.html
-/sdcard/android/layout_tests/fast/dom/HTMLImageElement/image-alt-text.html
-/sdcard/android/layout_tests/fast/dom/dom-parse-serialize.html
-/sdcard/android/layout_tests/fast/dom/focus-contenteditable.html
-/sdcard/android/layout_tests/fast/dom/jsDevicePixelRatio.html
-/sdcard/android/layout_tests/fast/dom/isindex-001.html
-/sdcard/android/layout_tests/fast/dom/css-cached-import-rule.html
-/sdcard/android/layout_tests/fast/dom/dom-parse-serialize-display.html
-/sdcard/android/layout_tests/fast/dom/css-rule-functions.html
-/sdcard/android/layout_tests/fast/dom/createDocumentType.html
-/sdcard/android/layout_tests/fast/dom/clientWidthAfterDocumentIsRemoved.html
-/sdcard/android/layout_tests/fast/dom/css-inline-style-important.html
-/sdcard/android/layout_tests/fast/dom/replaceChild.html
-/sdcard/android/layout_tests/fast/dom/anchor-text.html
-/sdcard/android/layout_tests/fast/dom/importNodeHTML.html
-/sdcard/android/layout_tests/fast/dom/gc-10.html
-/sdcard/android/layout_tests/fast/dom/inner-text.html
-/sdcard/android/layout_tests/fast/dom/isindex-002.html
-/sdcard/android/layout_tests/fast/dom/outerText.html
-/sdcard/android/layout_tests/fast/dom/row-inner-text.html
-/sdcard/android/layout_tests/fast/dom/blur-contenteditable.html
-/sdcard/android/layout_tests/fast/dom/setPrimitiveValue.html
-/sdcard/android/layout_tests/fast/dom/delete-contents.html
-/sdcard/android/layout_tests/fast/dom/children-nodes.html
-/sdcard/android/layout_tests/fast/dom/css-mediarule-deleteRule-update.html
-/sdcard/android/layout_tests/fast/dom/attr_dead_doc.html
-/sdcard/android/layout_tests/fast/dom/clone-contents-0-end-offset.html
-/sdcard/android/layout_tests/fast/dom/comment-not-documentElement.html
-/sdcard/android/layout_tests/fast/dom/clone-node-dynamic-style.html
-/sdcard/android/layout_tests/fast/dom/css-mediarule-insertRule-update.html
-/sdcard/android/layout_tests/fast/dom/css-insert-import-rule.html
-/sdcard/android/layout_tests/fast/dom/stripNullFromTextNodes.html
-/sdcard/android/layout_tests/fast/gradients/generated-gradients.html
-/sdcard/android/layout_tests/fast/gradients/list-item-gradient.html
-/sdcard/android/layout_tests/fast/gradients/border-image-gradient-sides-and-corners.html
-/sdcard/android/layout_tests/fast/gradients/simple-gradients.html
-/sdcard/android/layout_tests/fast/gradients/border-image-gradient.html
-/sdcard/android/layout_tests/fast/invalid/table-inside-stray-table-content.html
-/sdcard/android/layout_tests/fast/invalid/010.html
-/sdcard/android/layout_tests/fast/invalid/002.html
-/sdcard/android/layout_tests/fast/invalid/012.html
-/sdcard/android/layout_tests/fast/invalid/004.html
-/sdcard/android/layout_tests/fast/invalid/014.html
-/sdcard/android/layout_tests/fast/invalid/006.html
-/sdcard/android/layout_tests/fast/invalid/016.html
-/sdcard/android/layout_tests/fast/invalid/008.html
-/sdcard/android/layout_tests/fast/invalid/018.html
-/sdcard/android/layout_tests/fast/invalid/junk-data.xml
-/sdcard/android/layout_tests/fast/invalid/missing-dl-end-tag.html
-/sdcard/android/layout_tests/fast/invalid/td-inside-object.html
-/sdcard/android/layout_tests/fast/invalid/table-residual-style-crash.html
-/sdcard/android/layout_tests/fast/invalid/missing-font-end-tag.html
-/sdcard/android/layout_tests/fast/invalid/missing-dt-end-tag.html
-/sdcard/android/layout_tests/fast/invalid/020.xml
-/sdcard/android/layout_tests/fast/invalid/001.html
-/sdcard/android/layout_tests/fast/invalid/nestedh3s.html
-/sdcard/android/layout_tests/fast/invalid/011.html
-/sdcard/android/layout_tests/fast/invalid/003.html
-/sdcard/android/layout_tests/fast/invalid/021.html
-/sdcard/android/layout_tests/fast/invalid/013.html
-/sdcard/android/layout_tests/fast/invalid/005.html
-/sdcard/android/layout_tests/fast/invalid/015.html
-/sdcard/android/layout_tests/fast/invalid/007.html
-/sdcard/android/layout_tests/fast/invalid/residual-style.html
-/sdcard/android/layout_tests/fast/invalid/017.html
-/sdcard/android/layout_tests/fast/invalid/009.html
-/sdcard/android/layout_tests/fast/invalid/missing-address-end-tag.html
-/sdcard/android/layout_tests/fast/invalid/019.html
-/sdcard/android/layout_tests/fast/forms/input-width.html
-/sdcard/android/layout_tests/fast/forms/select-item-background-clip.html
-/sdcard/android/layout_tests/fast/forms/radio-nested-labels.html
-/sdcard/android/layout_tests/fast/forms/thumbslider-crash.html
-/sdcard/android/layout_tests/fast/forms/input-first-letter.html
-/sdcard/android/layout_tests/fast/forms/input-appearance-preventDefault.html
-/sdcard/android/layout_tests/fast/forms/plaintext-mode-2.html
-/sdcard/android/layout_tests/fast/forms/input-double-click-selection-gap-bug.html
-/sdcard/android/layout_tests/fast/forms/preserveFormDuringResidualStyle.html
-/sdcard/android/layout_tests/fast/forms/search-rtl.html
-/sdcard/android/layout_tests/fast/forms/select-change-popup-to-listbox.html
-/sdcard/android/layout_tests/fast/forms/input-text-maxlength.html
-/sdcard/android/layout_tests/fast/forms/blankbuttons.html
-/sdcard/android/layout_tests/fast/forms/password-placeholder-text-security.html
-/sdcard/android/layout_tests/fast/forms/HTMLOptionElement_label05.html
-/sdcard/android/layout_tests/fast/forms/visual-hebrew-text-field.html
-/sdcard/android/layout_tests/fast/forms/input-text-option-delete.html
-/sdcard/android/layout_tests/fast/forms/textfield-overflow.html
-/sdcard/android/layout_tests/fast/forms/005.html
-/sdcard/android/layout_tests/fast/forms/HTMLOptionElement_label02.html
-/sdcard/android/layout_tests/fast/forms/file-input-disabled.html
-/sdcard/android/layout_tests/fast/forms/input-appearance-visibility.html
-/sdcard/android/layout_tests/fast/forms/select-disabled-appearance.html
-/sdcard/android/layout_tests/fast/forms/input-type-change2.html
-/sdcard/android/layout_tests/fast/forms/select-block-background.html
-/sdcard/android/layout_tests/fast/forms/file-input-direction.html
-/sdcard/android/layout_tests/fast/forms/select-visual-hebrew.html
-/sdcard/android/layout_tests/fast/forms/select-change-listbox-size.html
-/sdcard/android/layout_tests/fast/forms/002.html
-/sdcard/android/layout_tests/fast/forms/textarea-align.html
-/sdcard/android/layout_tests/fast/forms/control-restrict-line-height.html
-/sdcard/android/layout_tests/fast/forms/textAreaLineHeight.html
-/sdcard/android/layout_tests/fast/forms/button-generated-content.html
-/sdcard/android/layout_tests/fast/forms/option-text-clip.html
-/sdcard/android/layout_tests/fast/forms/textfield-drag-into-disabled.html
-/sdcard/android/layout_tests/fast/forms/input-text-paste-maxlength.html
-/sdcard/android/layout_tests/fast/forms/formmove.html
-/sdcard/android/layout_tests/fast/forms/select-display-none-style-resolve.html
-/sdcard/android/layout_tests/fast/forms/input-readonly-autoscroll.html
-/sdcard/android/layout_tests/fast/forms/thumbslider-no-parent-slider.html
-/sdcard/android/layout_tests/fast/forms/textfield-outline.html
-/sdcard/android/layout_tests/fast/forms/button-text-transform.html
-/sdcard/android/layout_tests/fast/forms/listbox-clip.html
-/sdcard/android/layout_tests/fast/forms/textarea-scroll-height.html
-/sdcard/android/layout_tests/fast/forms/button-table-styles.html
-/sdcard/android/layout_tests/fast/forms/textarea-setinnerhtml.html
-/sdcard/android/layout_tests/fast/forms/input-align.html
-/sdcard/android/layout_tests/fast/forms/box-shadow-override.html
-/sdcard/android/layout_tests/fast/forms/button-cannot-be-nested.html
-/sdcard/android/layout_tests/fast/forms/input-type-change.html
-/sdcard/android/layout_tests/fast/forms/searchfield-heights.html
-/sdcard/android/layout_tests/fast/forms/checkbox-radio-onchange.html
-/sdcard/android/layout_tests/fast/forms/input-spaces.html
-/sdcard/android/layout_tests/fast/forms/menulist-option-wrap.html
-/sdcard/android/layout_tests/fast/forms/select-empty-option-height.html
-/sdcard/android/layout_tests/fast/forms/textarea-scrollbar.html
-/sdcard/android/layout_tests/fast/forms/float-before-fieldset.html
-/sdcard/android/layout_tests/fast/forms/radio_checked.html
-/sdcard/android/layout_tests/fast/forms/minWidthPercent.html
-/sdcard/android/layout_tests/fast/forms/input-appearance-focus.html
-/sdcard/android/layout_tests/fast/forms/input-value.html
-/sdcard/android/layout_tests/fast/forms/HTMLOptionElement_label06.html
-/sdcard/android/layout_tests/fast/forms/placeholder-pseudo-style.html
-/sdcard/android/layout_tests/fast/forms/menulist-width-change.html
-/sdcard/android/layout_tests/fast/forms/option-strip-whitespace.html
-/sdcard/android/layout_tests/fast/forms/input-text-drag-down.html
-/sdcard/android/layout_tests/fast/forms/select-selected.html
-/sdcard/android/layout_tests/fast/forms/006.html
-/sdcard/android/layout_tests/fast/forms/control-clip-overflow.html
-/sdcard/android/layout_tests/fast/forms/input-appearance-default-bkcolor.html
-/sdcard/android/layout_tests/fast/forms/HTMLOptionElement_label03.html
-/sdcard/android/layout_tests/fast/forms/003.html
-/sdcard/android/layout_tests/fast/forms/button-default-title.html
-/sdcard/android/layout_tests/fast/forms/hidden-listbox.html
-/sdcard/android/layout_tests/fast/forms/input-no-renderer.html
-/sdcard/android/layout_tests/fast/forms/input-text-click-outside.html
-/sdcard/android/layout_tests/fast/forms/input-baseline.html
-/sdcard/android/layout_tests/fast/forms/targeted-frame-submission.html
-/sdcard/android/layout_tests/fast/forms/input-text-scroll-left-on-blur.html
-/sdcard/android/layout_tests/fast/forms/form-element-geometry.html
-/sdcard/android/layout_tests/fast/forms/input-table.html
-/sdcard/android/layout_tests/fast/forms/textarea-scrolled-type.html
-/sdcard/android/layout_tests/fast/forms/select-change-listbox-to-popup.html
-/sdcard/android/layout_tests/fast/forms/select-align.html
-/sdcard/android/layout_tests/fast/forms/radio_checked_dynamic.html
-/sdcard/android/layout_tests/fast/forms/select-writing-direction-natural.html
-/sdcard/android/layout_tests/fast/forms/search-cancel-button-style-sharing.html
-/sdcard/android/layout_tests/fast/forms/tabbing-input-iframe.html
-/sdcard/android/layout_tests/fast/forms/hidden-input-file.html
-/sdcard/android/layout_tests/fast/forms/menulist-deselect-update.html
-/sdcard/android/layout_tests/fast/forms/button-sizes.html
-/sdcard/android/layout_tests/fast/forms/slider-thumb-stylability.html
-/sdcard/android/layout_tests/fast/forms/input-readonly-dimmed.html
-/sdcard/android/layout_tests/fast/forms/input-appearance-width.html
-/sdcard/android/layout_tests/fast/forms/listbox-scrollbar-incremental-load.html
-/sdcard/android/layout_tests/fast/forms/password-placeholder.html
-/sdcard/android/layout_tests/fast/forms/select-list-box-with-height.html
-/sdcard/android/layout_tests/fast/forms/button-align.html
-/sdcard/android/layout_tests/fast/forms/textarea-rows-cols.html
-/sdcard/android/layout_tests/fast/forms/listbox-deselect-scroll.html
-/sdcard/android/layout_tests/fast/forms/input-appearance-readonly.html
-/sdcard/android/layout_tests/fast/forms/select-initial-position.html
-/sdcard/android/layout_tests/fast/forms/menulist-no-overflow.html
-/sdcard/android/layout_tests/fast/forms/formmove2.html
-/sdcard/android/layout_tests/fast/forms/placeholder-set-attribute.html
-/sdcard/android/layout_tests/fast/forms/radio-attr-order.html
-/sdcard/android/layout_tests/fast/forms/input-disabled-color.html
-/sdcard/android/layout_tests/fast/forms/fieldset-align.html
-/sdcard/android/layout_tests/fast/forms/select-baseline.html
-/sdcard/android/layout_tests/fast/forms/input-text-word-wrap.html
-/sdcard/android/layout_tests/fast/forms/stuff-on-my-optgroup.html
-/sdcard/android/layout_tests/fast/forms/listbox-selection-2.html
-/sdcard/android/layout_tests/fast/forms/input-readonly-empty.html
-/sdcard/android/layout_tests/fast/forms/input-align-image.html
-/sdcard/android/layout_tests/fast/forms/HTMLOptionElement_label07.html
-/sdcard/android/layout_tests/fast/forms/option-index.html
-/sdcard/android/layout_tests/fast/forms/menulist-clip.html
-/sdcard/android/layout_tests/fast/forms/indeterminate.html
-/sdcard/android/layout_tests/fast/forms/search-display-none-cancel-button.html
-/sdcard/android/layout_tests/fast/forms/negativeLineHeight.html
-/sdcard/android/layout_tests/fast/forms/007.html
-/sdcard/android/layout_tests/fast/forms/HTMLOptionElement_label04.html
-/sdcard/android/layout_tests/fast/forms/select-style.html
-/sdcard/android/layout_tests/fast/forms/select-size.html
-/sdcard/android/layout_tests/fast/forms/input-appearance-disabled.html
-/sdcard/android/layout_tests/fast/forms/input-appearance-height.html
-/sdcard/android/layout_tests/fast/forms/004.html
-/sdcard/android/layout_tests/fast/forms/menulist-separator-painting.html
-/sdcard/android/layout_tests/fast/forms/HTMLOptionElement_label01.html
-/sdcard/android/layout_tests/fast/forms/fieldset-with-float.html
-/sdcard/android/layout_tests/fast/forms/search-placeholder-value-changed.html
-/sdcard/android/layout_tests/fast/forms/input-field-text-truncated.html
-/sdcard/android/layout_tests/fast/forms/floating-textfield-relayout.html
-/sdcard/android/layout_tests/fast/forms/button-inner-block-reuse.html
-/sdcard/android/layout_tests/fast/forms/input-type-text-min-width.html
-/sdcard/android/layout_tests/fast/forms/001.html
-/sdcard/android/layout_tests/fast/forms/slider-thumb-shared-style.html
-/sdcard/android/layout_tests/fast/forms/option-script.html
-/sdcard/android/layout_tests/fast/forms/input-paste-undo.html
-/sdcard/android/layout_tests/fast/forms/input-text-click-inside.html
-/sdcard/android/layout_tests/fast/forms/input-appearance-selection.html
-/sdcard/android/layout_tests/fast/forms/button-white-space.html
-/sdcard/android/layout_tests/fast/forms/menulist-narrow-width.html
-/sdcard/android/layout_tests/fast/forms/slider-padding.html
-/sdcard/android/layout_tests/fast/forms/menulist-restrict-line-height.html
-/sdcard/android/layout_tests/fast/forms/textarea-width.html
-/sdcard/android/layout_tests/fast/forms/input-text-double-click.html
-/sdcard/android/layout_tests/fast/forms/button-submit.html
-/sdcard/android/layout_tests/fast/forms/disabled-select-change-index.html
-/sdcard/android/layout_tests/fast/forms/formmove3.html
-/sdcard/android/layout_tests/fast/forms/form-hides-table.html
-/sdcard/android/layout_tests/fast/forms/listbox-width-change.html
-/sdcard/android/layout_tests/fast/forms/input-text-self-emptying-click.html
-/sdcard/android/layout_tests/fast/forms/input-appearance-bkcolor.html
-/sdcard/android/layout_tests/fast/forms/button-positioned.html
-/sdcard/android/layout_tests/fast/forms/search-transformed.html
-/sdcard/android/layout_tests/fast/forms/image-border.html
-/sdcard/android/layout_tests/fast/forms/encoding-test.html
-/sdcard/android/layout_tests/fast/forms/control-clip.html
-/sdcard/android/layout_tests/fast/compact/001.html
-/sdcard/android/layout_tests/fast/compact/002.html
-/sdcard/android/layout_tests/fast/compact/003.html
-/sdcard/android/layout_tests/fast/clip/nestedTransparencyClip.html
-/sdcard/android/layout_tests/fast/clip/outline-overflowClip.html
-/sdcard/android/layout_tests/fast/clip/001.html
-/sdcard/android/layout_tests/fast/clip/010.html
-/sdcard/android/layout_tests/fast/clip/002.html
-/sdcard/android/layout_tests/fast/clip/011.html
-/sdcard/android/layout_tests/fast/clip/003.html
-/sdcard/android/layout_tests/fast/clip/012.html
-/sdcard/android/layout_tests/fast/clip/004.html
-/sdcard/android/layout_tests/fast/clip/013.html
-/sdcard/android/layout_tests/fast/clip/005.html
-/sdcard/android/layout_tests/fast/clip/014.html
-/sdcard/android/layout_tests/fast/clip/006.html
-/sdcard/android/layout_tests/fast/clip/015.html
-/sdcard/android/layout_tests/fast/clip/007.html
-/sdcard/android/layout_tests/fast/clip/016.html
-/sdcard/android/layout_tests/fast/clip/008.html
-/sdcard/android/layout_tests/fast/clip/017.html
-/sdcard/android/layout_tests/fast/clip/009.html
-/sdcard/android/layout_tests/fast/table/border-collapsing/001.html
-/sdcard/android/layout_tests/fast/table/border-collapsing/002.html
-/sdcard/android/layout_tests/fast/table/border-collapsing/003.html
-/sdcard/android/layout_tests/fast/table/border-collapsing/004.html
-/sdcard/android/layout_tests/fast/table/border-collapsing/equal-precedence-resolution.html
-/sdcard/android/layout_tests/fast/table/border-collapsing/rtl-border-collapsing.html
-/sdcard/android/layout_tests/fast/table/border-collapsing/border-collapsing-head-foot.html
-/sdcard/android/layout_tests/fast/table/fixed-nested.html
-/sdcard/android/layout_tests/fast/table/frame-and-rules.html
-/sdcard/android/layout_tests/fast/table/empty-table-percent-height.html
-/sdcard/android/layout_tests/fast/table/100-percent-cell-width.html
-/sdcard/android/layout_tests/fast/table/stale-grid-crash.html
-/sdcard/android/layout_tests/fast/table/div-as-col-span.html
-/sdcard/android/layout_tests/fast/table/nobr.html
-/sdcard/android/layout_tests/fast/table/012.html
-/sdcard/android/layout_tests/fast/table/040.html
-/sdcard/android/layout_tests/fast/table/growCellForImageQuirk.html
-/sdcard/android/layout_tests/fast/table/024.html
-/sdcard/android/layout_tests/fast/table/cell-pref-width-invalidation.html
-/sdcard/android/layout_tests/fast/table/008.html
-/sdcard/android/layout_tests/fast/table/036.html
-/sdcard/android/layout_tests/fast/table/nested-percent-height-table.html
-/sdcard/android/layout_tests/fast/table/rules-attr-dynchange1.html
-/sdcard/android/layout_tests/fast/table/wide-column.html
-/sdcard/android/layout_tests/fast/table/fixed-with-auto-with-colspan.html
-/sdcard/android/layout_tests/fast/table/percent-heights.html
-/sdcard/android/layout_tests/fast/table/021.html
-/sdcard/android/layout_tests/fast/table/colspanMinWidth.html
-/sdcard/android/layout_tests/fast/table/005.html
-/sdcard/android/layout_tests/fast/table/033.html
-/sdcard/android/layout_tests/fast/table/017.html
-/sdcard/android/layout_tests/fast/table/floatingTablePaintBackground.html
-/sdcard/android/layout_tests/fast/table/029.html
-/sdcard/android/layout_tests/fast/table/cell-absolute-child.html
-/sdcard/android/layout_tests/fast/table/click-near-anonymous-table.html
-/sdcard/android/layout_tests/fast/table/auto-with-percent-height.html
-/sdcard/android/layout_tests/fast/table/insert-before-anonymous-ancestors.html
-/sdcard/android/layout_tests/fast/table/append-cells2.html
-/sdcard/android/layout_tests/fast/table/unused-percent-heights.html
-/sdcard/android/layout_tests/fast/table/max-width-integer-overflow.html
-/sdcard/android/layout_tests/fast/table/vertical-align-baseline-readjust.html
-/sdcard/android/layout_tests/fast/table/empty-row-crash.html
-/sdcard/android/layout_tests/fast/table/002.html
-/sdcard/android/layout_tests/fast/table/030.html
-/sdcard/android/layout_tests/fast/table/cell-width-auto.html
-/sdcard/android/layout_tests/fast/table/014.html
-/sdcard/android/layout_tests/fast/table/037.xml
-/sdcard/android/layout_tests/fast/table/large-width.html
-/sdcard/android/layout_tests/fast/table/026.html
-/sdcard/android/layout_tests/fast/table/unbreakable-images-quirk.html
-/sdcard/android/layout_tests/fast/table/038.html
-/sdcard/android/layout_tests/fast/table/dynamic-cellpadding.html
-/sdcard/android/layout_tests/fast/table/generated-caption.html
-/sdcard/android/layout_tests/fast/table/empty-cells.html
-/sdcard/android/layout_tests/fast/table/add-before-anonymous-child.html
-/sdcard/android/layout_tests/fast/table/011.html
-/sdcard/android/layout_tests/fast/table/table-display-types-strict.html
-/sdcard/android/layout_tests/fast/table/023.html
-/sdcard/android/layout_tests/fast/table/007.html
-/sdcard/android/layout_tests/fast/table/cellindex.html
-/sdcard/android/layout_tests/fast/table/035.html
-/sdcard/android/layout_tests/fast/table/colgroup-spanning-groups-rules.html
-/sdcard/android/layout_tests/fast/table/insert-row-before-form.html
-/sdcard/android/layout_tests/fast/table/rowspan-paint-order.html
-/sdcard/android/layout_tests/fast/table/rtl-cell-display-none-assert.html
-/sdcard/android/layout_tests/fast/table/insert-cell-before-form.html
-/sdcard/android/layout_tests/fast/table/replaced-percent-height.html
-/sdcard/android/layout_tests/fast/table/text-field-baseline.html
-/sdcard/android/layout_tests/fast/table/table-display-types.html
-/sdcard/android/layout_tests/fast/table/table-hspace-align-center.html
-/sdcard/android/layout_tests/fast/table/caption-relayout.html
-/sdcard/android/layout_tests/fast/table/020.html
-/sdcard/android/layout_tests/fast/table/fixed-table-non-cell-in-row.html
-/sdcard/android/layout_tests/fast/table/004.html
-/sdcard/android/layout_tests/fast/table/032.html
-/sdcard/android/layout_tests/fast/table/row-height-recalc.html
-/sdcard/android/layout_tests/fast/table/016.html
-/sdcard/android/layout_tests/fast/table/absolute-table-at-bottom.html
-/sdcard/android/layout_tests/fast/table/028.html
-/sdcard/android/layout_tests/fast/table/spanOverlapRepaint.html
-/sdcard/android/layout_tests/fast/table/invisible-cell-background.html
-/sdcard/android/layout_tests/fast/table/vertical-align-baseline.html
-/sdcard/android/layout_tests/fast/table/wide-colspan.html
-/sdcard/android/layout_tests/fast/table/rowindex.html
-/sdcard/android/layout_tests/fast/table/001.html
-/sdcard/android/layout_tests/fast/table/remove-td-display-none.html
-/sdcard/android/layout_tests/fast/table/013.html
-/sdcard/android/layout_tests/fast/table/041.html
-/sdcard/android/layout_tests/fast/table/colgroup-preceded-by-caption.html
-/sdcard/android/layout_tests/fast/table/025.html
-/sdcard/android/layout_tests/fast/table/giantCellspacing.html
-/sdcard/android/layout_tests/fast/table/009.html
-/sdcard/android/layout_tests/fast/table/edge-offsets.html
-/sdcard/android/layout_tests/fast/table/giantRowspan.html
-/sdcard/android/layout_tests/fast/table/010.html
-/sdcard/android/layout_tests/fast/table/inline-form-assert.html
-/sdcard/android/layout_tests/fast/table/overflowHidden.html
-/sdcard/android/layout_tests/fast/table/rules-attr-dynchange2.html
-/sdcard/android/layout_tests/fast/table/height-percent-test.html
-/sdcard/android/layout_tests/fast/table/multiple-percent-height-rows.html
-/sdcard/android/layout_tests/fast/table/giantRowspan2.html
-/sdcard/android/layout_tests/fast/table/tableInsideCaption.html
-/sdcard/android/layout_tests/fast/table/022.html
-/sdcard/android/layout_tests/fast/table/006.html
-/sdcard/android/layout_tests/fast/table/034.html
-/sdcard/android/layout_tests/fast/table/append-cells.html
-/sdcard/android/layout_tests/fast/table/018.html
-/sdcard/android/layout_tests/fast/table/percent-widths-stretch.html
-/sdcard/android/layout_tests/fast/table/prepend-in-anonymous-table.html
-/sdcard/android/layout_tests/fast/table/floating-th.html
-/sdcard/android/layout_tests/fast/table/empty-section-crash.html
-/sdcard/android/layout_tests/fast/table/form-with-table-style.html
-/sdcard/android/layout_tests/fast/table/003.html
-/sdcard/android/layout_tests/fast/table/031.html
-/sdcard/android/layout_tests/fast/table/015.html
-/sdcard/android/layout_tests/fast/table/027.html
-/sdcard/android/layout_tests/fast/table/039.html
-/sdcard/android/layout_tests/fast/css/counters/invalidate-cached-counter-node.html
-/sdcard/android/layout_tests/fast/css/counters/counter-text-security.html
-/sdcard/android/layout_tests/fast/css/counters/counter-text-transform.html
-/sdcard/android/layout_tests/fast/css/variables/multiple-term-test.html
-/sdcard/android/layout_tests/fast/css/variables/colors-test.html
-/sdcard/android/layout_tests/fast/css/variables/font-test.html
-/sdcard/android/layout_tests/fast/css/variables/multiple-blocks-test.html
-/sdcard/android/layout_tests/fast/css/variables/misplaced-variables-test.html
-/sdcard/android/layout_tests/fast/css/variables/invalid-variable-test.html
-/sdcard/android/layout_tests/fast/css/variables/misplaced-import-test.html
-/sdcard/android/layout_tests/fast/css/variables/import-test.html
-/sdcard/android/layout_tests/fast/css/variables/inline-style-test.html
-/sdcard/android/layout_tests/fast/css/variables/declaration-block-test.html
-/sdcard/android/layout_tests/fast/css/variables/margin-test.html
-/sdcard/android/layout_tests/fast/css/variables/set-variable-test.html
-/sdcard/android/layout_tests/fast/css/variables/override-test.html
-/sdcard/android/layout_tests/fast/css/variables/remove-variable-test.html
-/sdcard/android/layout_tests/fast/css/variables/variable-iteration-test.html
-/sdcard/android/layout_tests/fast/css/variables/image-test.html
-/sdcard/android/layout_tests/fast/css/variables/block-cycle-test.html
-/sdcard/android/layout_tests/fast/css/variables/shorthand-test.html
-/sdcard/android/layout_tests/fast/css/variables/print-test.html
-/sdcard/android/layout_tests/fast/css/namespaces/001.xml
-/sdcard/android/layout_tests/fast/css/namespaces/002.xml
-/sdcard/android/layout_tests/fast/css/namespaces/003.xml
-/sdcard/android/layout_tests/fast/css/namespaces/004.xml
-/sdcard/android/layout_tests/fast/css/namespaces/005.xml
-/sdcard/android/layout_tests/fast/css/namespaces/006.xml
-/sdcard/android/layout_tests/fast/css/namespaces/007.xml
-/sdcard/android/layout_tests/fast/css/font-face-in-media-rule.html
-/sdcard/android/layout_tests/fast/css/font-face-default-font.html
-/sdcard/android/layout_tests/fast/css/first-letter-float-after-float.html
-/sdcard/android/layout_tests/fast/css/invalidation-errors-2.html
-/sdcard/android/layout_tests/fast/css/line-height-negative.html
-/sdcard/android/layout_tests/fast/css/only-child-pseudo-class.html
-/sdcard/android/layout_tests/fast/css/008.html
-/sdcard/android/layout_tests/fast/css/first-of-type-pseudo-class.html
-/sdcard/android/layout_tests/fast/css/ZeroOpacityLayers2.html
-/sdcard/android/layout_tests/fast/css/target-fragment-match.html
-/sdcard/android/layout_tests/fast/css/marginComputedStyle.html
-/sdcard/android/layout_tests/fast/css/live-cssrules.html
-/sdcard/android/layout_tests/fast/css/zoom-font-size.html
-/sdcard/android/layout_tests/fast/css/005.html
-/sdcard/android/layout_tests/fast/css/first-letter-hover.html
-/sdcard/android/layout_tests/fast/css/color-quirk.html
-/sdcard/android/layout_tests/fast/css/resize-corner-tracking-transformed.html
-/sdcard/android/layout_tests/fast/css/selector-set-attribute.html
-/sdcard/android/layout_tests/fast/css/attribute-selector-empty-value.html
-/sdcard/android/layout_tests/fast/css/line-height-overflow.html
-/sdcard/android/layout_tests/fast/css/002.html
-/sdcard/android/layout_tests/fast/css/empty-generated-content.html
-/sdcard/android/layout_tests/fast/css/background-image-with-baseurl.html
-/sdcard/android/layout_tests/fast/css/border-radius-outline-offset.html
-/sdcard/android/layout_tests/fast/css/hsla-color.html
-/sdcard/android/layout_tests/fast/css/first-letter-skip-out-of-flow.html
-/sdcard/android/layout_tests/fast/css/font-face-multiple-remote-sources.html
-/sdcard/android/layout_tests/fast/css/hover-subselector.html
-/sdcard/android/layout_tests/fast/css/margin-bottom-form-element-strict.html
-/sdcard/android/layout_tests/fast/css/shadow-multiple.html
-/sdcard/android/layout_tests/fast/css/import_with_baseurl.html
-/sdcard/android/layout_tests/fast/css/list-outline.html
-/sdcard/android/layout_tests/fast/css/apple-prefix.html
-/sdcard/android/layout_tests/fast/css/line-height.html
-/sdcard/android/layout_tests/fast/css/first-letter-visibility.html
-/sdcard/android/layout_tests/fast/css/acid2.html
-/sdcard/android/layout_tests/fast/css/font_property_normal.html
-/sdcard/android/layout_tests/fast/css/css-imports.html
-/sdcard/android/layout_tests/fast/css/last-of-type-pseudo-class.html
-/sdcard/android/layout_tests/fast/css/last-child-pseudo-class.html
-/sdcard/android/layout_tests/fast/css/visibility-hit-test.html
-/sdcard/android/layout_tests/fast/css/absolute-poition-in-rtl-parent.html
-/sdcard/android/layout_tests/fast/css/content-dynamic.html
-/sdcard/android/layout_tests/fast/css/acid2-pixel.html
-/sdcard/android/layout_tests/fast/css/transition-color-unspecified.html
-/sdcard/android/layout_tests/fast/css/table-text-align-strict.html
-/sdcard/android/layout_tests/fast/css/transform-default-parameter.html
-/sdcard/android/layout_tests/fast/css/contentImage.html
-/sdcard/android/layout_tests/fast/css/value-list-out-of-bounds-crash.html
-/sdcard/android/layout_tests/fast/css/color-strict.html
-/sdcard/android/layout_tests/fast/css/ignore-text-zoom.html
-/sdcard/android/layout_tests/fast/css/max-height-none.html
-/sdcard/android/layout_tests/fast/css/invalidation-errors-3.html
-/sdcard/android/layout_tests/fast/css/empty-pseudo-class.html
-/sdcard/android/layout_tests/fast/css/begin-end-contain-selector-empty-value.html
-/sdcard/android/layout_tests/fast/css/find-next-layer.html
-/sdcard/android/layout_tests/fast/css/contentDiv.html
-/sdcard/android/layout_tests/fast/css/invalid-pseudo-classes.html
-/sdcard/android/layout_tests/fast/css/disabled-author-styles.html
-/sdcard/android/layout_tests/fast/css/text-security.html
-/sdcard/android/layout_tests/fast/css/font-weight-1.html
-/sdcard/android/layout_tests/fast/css/margin-bottom-form-element-quirk.html
-/sdcard/android/layout_tests/fast/css/font-shorthand-weight-only.html
-/sdcard/android/layout_tests/fast/css/006.html
-/sdcard/android/layout_tests/fast/css/fieldset-display-row.html
-/sdcard/android/layout_tests/fast/css/border-height.html
-/sdcard/android/layout_tests/fast/css/css2-system-fonts.html
-/sdcard/android/layout_tests/fast/css/imageTileOpacity.html
-/sdcard/android/layout_tests/fast/css/font-face-remote.html
-/sdcard/android/layout_tests/fast/css/003.html
-/sdcard/android/layout_tests/fast/css/error-in-last-decl.html
-/sdcard/android/layout_tests/fast/css/zoom-property-parsing.html
-/sdcard/android/layout_tests/fast/css/style-outside-head.html
-/sdcard/android/layout_tests/fast/css/first-letter-capitalized.html
-/sdcard/android/layout_tests/fast/css/font-face-locally-installed.html
-/sdcard/android/layout_tests/fast/css/word-space-extra.html
-/sdcard/android/layout_tests/fast/css/first-letter-float.html
-/sdcard/android/layout_tests/fast/css/simple-selector-chain-parsing.html
-/sdcard/android/layout_tests/fast/css/xml-stylesheet-pi-not-in-prolog.xml
-/sdcard/android/layout_tests/fast/css/continuationCrash.html
-/sdcard/android/layout_tests/fast/css/vertical-align-lengths.html
-/sdcard/android/layout_tests/fast/css/first-child-pseudo-class.html
-/sdcard/android/layout_tests/fast/css/beforeSelectorOnCodeElement.html
-/sdcard/android/layout_tests/fast/css/getFloatValueForUnit.html
-/sdcard/android/layout_tests/fast/css/first-letter-detach.html
-/sdcard/android/layout_tests/fast/css/line-height-font-order.html
-/sdcard/android/layout_tests/fast/css/font-face-unicode-range.html
-/sdcard/android/layout_tests/fast/css/layerZOrderCrash.html
-/sdcard/android/layout_tests/fast/css/007.html
-/sdcard/android/layout_tests/fast/css/import-rule-regression-11590.html
-/sdcard/android/layout_tests/fast/css/last-child-style-sharing.html
-/sdcard/android/layout_tests/fast/css/css3-modsel-22.html
-/sdcard/android/layout_tests/fast/css/ex-after-font-variant.html
-/sdcard/android/layout_tests/fast/css/quirk-orphaned-units.html
-/sdcard/android/layout_tests/fast/css/outline-auto-location.html
-/sdcard/android/layout_tests/fast/css/margin-top-bottom-dynamic.html
-/sdcard/android/layout_tests/fast/css/font-face-descriptor-multiple-values.html
-/sdcard/android/layout_tests/fast/css/empty-body-test.html
-/sdcard/android/layout_tests/fast/css/link-outside-head.html
-/sdcard/android/layout_tests/fast/css/font-size-negative.html
-/sdcard/android/layout_tests/fast/css/position-negative-top-margin.html
-/sdcard/android/layout_tests/fast/css/ZeroOpacityLayers.html
-/sdcard/android/layout_tests/fast/css/only-of-type-pseudo-class.html
-/sdcard/android/layout_tests/fast/css/004.html
-/sdcard/android/layout_tests/fast/css/rtl-ordering.html
-/sdcard/android/layout_tests/fast/css/affected-by-hover-after-style-change.html
-/sdcard/android/layout_tests/fast/css/resize-corner-tracking.html
-/sdcard/android/layout_tests/fast/css/background-shorthand-invalid-url.html
-/sdcard/android/layout_tests/fast/css/invalidation-errors.html
-/sdcard/android/layout_tests/fast/css/MarqueeLayoutTest.html
-/sdcard/android/layout_tests/fast/css/textCapitalizeEdgeCases.html
-/sdcard/android/layout_tests/fast/css/001.html
-/sdcard/android/layout_tests/fast/css/hsl-color.html
-/sdcard/android/layout_tests/fast/css/font-face-implicit-local-font.html
-/sdcard/android/layout_tests/fast/css/first-letter-recalculation.html
-/sdcard/android/layout_tests/fast/css/inline-properties-important.html
-/sdcard/android/layout_tests/fast/css/dynamic-sibling-selector.html
-/sdcard/android/layout_tests/fast/css/table-text-align-quirk.html
-/sdcard/android/layout_tests/fast/css/outline-auto-empty-rects.html
-/sdcard/android/layout_tests/fast/css/font-face-multiple-faces.html
-/sdcard/android/layout_tests/fast/css/rgb-float.html
-/sdcard/android/layout_tests/fast/css/pendingStylesheetFontSize.html
-/sdcard/android/layout_tests/fast/css/contentDivWithChildren.html
-/sdcard/android/layout_tests/fast/css/universal-hover-quirk.html
-/sdcard/android/layout_tests/fast/css/css3-nth-child.html
-/sdcard/android/layout_tests/fast/css/style-parsed-outside-head.html
-/sdcard/android/layout_tests/fast/css/percentage-non-integer.html
-/sdcard/android/layout_tests/fast/css/negative-nth-child.html
-/sdcard/android/layout_tests/fast/box-sizing/panels-one.html
-/sdcard/android/layout_tests/fast/box-sizing/percentage-height.html
-/sdcard/android/layout_tests/fast/box-sizing/box-sizing.html
-/sdcard/android/layout_tests/fast/box-sizing/panels-two.html
-/sdcard/android/layout_tests/fast/block/basic/minheight.html
-/sdcard/android/layout_tests/fast/block/basic/min-pref-width-nowrap-floats.html
-/sdcard/android/layout_tests/fast/block/basic/fieldset-stretch-to-legend.html
-/sdcard/android/layout_tests/fast/block/basic/white-space-pre-wraps.html
-/sdcard/android/layout_tests/fast/block/basic/adding-near-anonymous-block.html
-/sdcard/android/layout_tests/fast/block/basic/quirk-percent-height-grandchild.html
-/sdcard/android/layout_tests/fast/block/basic/001.html
-/sdcard/android/layout_tests/fast/block/basic/010.html
-/sdcard/android/layout_tests/fast/block/basic/quirk-height.html
-/sdcard/android/layout_tests/fast/block/basic/020.html
-/sdcard/android/layout_tests/fast/block/basic/002.html
-/sdcard/android/layout_tests/fast/block/basic/011.html
-/sdcard/android/layout_tests/fast/block/basic/text-indent-rtl.html
-/sdcard/android/layout_tests/fast/block/basic/021.html
-/sdcard/android/layout_tests/fast/block/basic/003.html
-/sdcard/android/layout_tests/fast/block/basic/012.html
-/sdcard/android/layout_tests/fast/block/basic/013.html
-/sdcard/android/layout_tests/fast/block/basic/004.html
-/sdcard/android/layout_tests/fast/block/basic/014.html
-/sdcard/android/layout_tests/fast/block/basic/005.html
-/sdcard/android/layout_tests/fast/block/basic/015.html
-/sdcard/android/layout_tests/fast/block/basic/006.html
-/sdcard/android/layout_tests/fast/block/basic/016.html
-/sdcard/android/layout_tests/fast/block/basic/007.html
-/sdcard/android/layout_tests/fast/block/basic/008.html
-/sdcard/android/layout_tests/fast/block/basic/009.html
-/sdcard/android/layout_tests/fast/block/basic/018.html
-/sdcard/android/layout_tests/fast/block/basic/019.html
-/sdcard/android/layout_tests/fast/block/positioning/auto/001.html
-/sdcard/android/layout_tests/fast/block/positioning/auto/002.html
-/sdcard/android/layout_tests/fast/block/positioning/auto/003.html
-/sdcard/android/layout_tests/fast/block/positioning/auto/004.html
-/sdcard/android/layout_tests/fast/block/positioning/auto/005.html
-/sdcard/android/layout_tests/fast/block/positioning/auto/006.html
-/sdcard/android/layout_tests/fast/block/positioning/auto/007.html
-/sdcard/android/layout_tests/fast/block/positioning/059.html
-/sdcard/android/layout_tests/fast/block/positioning/absolute-in-inline-short-rtl.html
-/sdcard/android/layout_tests/fast/block/positioning/absolute-in-inline-short-ltr.html
-/sdcard/android/layout_tests/fast/block/positioning/relative-overflow-replaced-float.html
-/sdcard/android/layout_tests/fast/block/positioning/absolute-positioned-overconstrained.html
-/sdcard/android/layout_tests/fast/block/positioning/absolute-in-inline-rtl-2.html
-/sdcard/android/layout_tests/fast/block/positioning/absolute-in-inline-ltr-2.html
-/sdcard/android/layout_tests/fast/block/positioning/020.html
-/sdcard/android/layout_tests/fast/block/positioning/012.html
-/sdcard/android/layout_tests/fast/block/positioning/004.html
-/sdcard/android/layout_tests/fast/block/positioning/040.html
-/sdcard/android/layout_tests/fast/block/positioning/absolute-position-direction-strict.html
-/sdcard/android/layout_tests/fast/block/positioning/032.html
-/sdcard/android/layout_tests/fast/block/positioning/024.html
-/sdcard/android/layout_tests/fast/block/positioning/060.html
-/sdcard/android/layout_tests/fast/block/positioning/052.html
-/sdcard/android/layout_tests/fast/block/positioning/016.html
-/sdcard/android/layout_tests/fast/block/positioning/044.html
-/sdcard/android/layout_tests/fast/block/positioning/008.html
-/sdcard/android/layout_tests/fast/block/positioning/036.html
-/sdcard/android/layout_tests/fast/block/positioning/028.html
-/sdcard/android/layout_tests/fast/block/positioning/056.html
-/sdcard/android/layout_tests/fast/block/positioning/048.html
-/sdcard/android/layout_tests/fast/block/positioning/absolute-position-direction-quirk.html
-/sdcard/android/layout_tests/fast/block/positioning/replaced-inside-fixed-top-bottom.html
-/sdcard/android/layout_tests/fast/block/positioning/pref-width-change.html
-/sdcard/android/layout_tests/fast/block/positioning/absolute-in-inline-ltr-3.html
-/sdcard/android/layout_tests/fast/block/positioning/absolute-in-inline-ltr.html
-/sdcard/android/layout_tests/fast/block/positioning/absolute-in-inline-rtl-3.html
-/sdcard/android/layout_tests/fast/block/positioning/absolute-in-inline-rtl.html
-/sdcard/android/layout_tests/fast/block/positioning/001.html
-/sdcard/android/layout_tests/fast/block/positioning/021.html
-/sdcard/android/layout_tests/fast/block/positioning/013.html
-/sdcard/android/layout_tests/fast/block/positioning/relative-overflow-block.html
-/sdcard/android/layout_tests/fast/block/positioning/005.html
-/sdcard/android/layout_tests/fast/block/positioning/041.html
-/sdcard/android/layout_tests/fast/block/positioning/033.html
-/sdcard/android/layout_tests/fast/block/positioning/025.html
-/sdcard/android/layout_tests/fast/block/positioning/061.html
-/sdcard/android/layout_tests/fast/block/positioning/017.html
-/sdcard/android/layout_tests/fast/block/positioning/053.html
-/sdcard/android/layout_tests/fast/block/positioning/009.html
-/sdcard/android/layout_tests/fast/block/positioning/045.html
-/sdcard/android/layout_tests/fast/block/positioning/037.html
-/sdcard/android/layout_tests/fast/block/positioning/029.html
-/sdcard/android/layout_tests/fast/block/positioning/057.html
-/sdcard/android/layout_tests/fast/block/positioning/049.html
-/sdcard/android/layout_tests/fast/block/positioning/absolute-with-html-border-quirks.html
-/sdcard/android/layout_tests/fast/block/positioning/leftmargin-topmargin.html
-/sdcard/android/layout_tests/fast/block/positioning/absolute-length-of-neg-666666.html
-/sdcard/android/layout_tests/fast/block/positioning/complex-percentage-height.html
-/sdcard/android/layout_tests/fast/block/positioning/auto-height-with-top-and-bottom.html
-/sdcard/android/layout_tests/fast/block/positioning/010.html
-/sdcard/android/layout_tests/fast/block/positioning/002.html
-/sdcard/android/layout_tests/fast/block/positioning/030.html
-/sdcard/android/layout_tests/fast/block/positioning/relayout-on-position-change.html
-/sdcard/android/layout_tests/fast/block/positioning/022.html
-/sdcard/android/layout_tests/fast/block/positioning/padding-percent.html
-/sdcard/android/layout_tests/fast/block/positioning/014.html
-/sdcard/android/layout_tests/fast/block/positioning/050.html
-/sdcard/android/layout_tests/fast/block/positioning/006.html
-/sdcard/android/layout_tests/fast/block/positioning/042.html
-/sdcard/android/layout_tests/fast/block/positioning/034.html
-/sdcard/android/layout_tests/fast/block/positioning/offsetLeft-offsetTop-borders.html
-/sdcard/android/layout_tests/fast/block/positioning/062.html
-/sdcard/android/layout_tests/fast/block/positioning/026.html
-/sdcard/android/layout_tests/fast/block/positioning/054.html
-/sdcard/android/layout_tests/fast/block/positioning/018.html
-/sdcard/android/layout_tests/fast/block/positioning/046.html
-/sdcard/android/layout_tests/fast/block/positioning/abs-inside-inline-rel.html
-/sdcard/android/layout_tests/fast/block/positioning/038.html
-/sdcard/android/layout_tests/fast/block/positioning/absolute-with-html-border-strict.html
-/sdcard/android/layout_tests/fast/block/positioning/058.html
-/sdcard/android/layout_tests/fast/block/positioning/negative-right-pos.html
-/sdcard/android/layout_tests/fast/block/positioning/relative-overconstrained.html
-/sdcard/android/layout_tests/fast/block/positioning/child-of-absolute-with-auto-height.html
-/sdcard/android/layout_tests/fast/block/positioning/relative-overflow-replaced.html
-/sdcard/android/layout_tests/fast/block/positioning/height-change.html
-/sdcard/android/layout_tests/fast/block/positioning/window-height-change.html
-/sdcard/android/layout_tests/fast/block/positioning/011.html
-/sdcard/android/layout_tests/fast/block/positioning/003.html
-/sdcard/android/layout_tests/fast/block/positioning/move-with-auto-width.html
-/sdcard/android/layout_tests/fast/block/positioning/031.html
-/sdcard/android/layout_tests/fast/block/positioning/023.html
-/sdcard/android/layout_tests/fast/block/positioning/051.html
-/sdcard/android/layout_tests/fast/block/positioning/015.html
-/sdcard/android/layout_tests/fast/block/positioning/043.html
-/sdcard/android/layout_tests/fast/block/positioning/007.html
-/sdcard/android/layout_tests/fast/block/positioning/035.html
-/sdcard/android/layout_tests/fast/block/positioning/027.html
-/sdcard/android/layout_tests/fast/block/positioning/055.html
-/sdcard/android/layout_tests/fast/block/positioning/019.html
-/sdcard/android/layout_tests/fast/block/positioning/047.html
-/sdcard/android/layout_tests/fast/block/positioning/039.html
-/sdcard/android/layout_tests/fast/block/positioning/inline-block-relposition.html
-/sdcard/android/layout_tests/fast/block/float/vertical-move-relayout.html
-/sdcard/android/layout_tests/fast/block/float/tableshifting.html
-/sdcard/android/layout_tests/fast/block/float/table-relayout.html
-/sdcard/android/layout_tests/fast/block/float/br-with-clear-2.html
-/sdcard/android/layout_tests/fast/block/float/020.html
-/sdcard/android/layout_tests/fast/block/float/012.html
-/sdcard/android/layout_tests/fast/block/float/004.html
-/sdcard/android/layout_tests/fast/block/float/032.html
-/sdcard/android/layout_tests/fast/block/float/024.html
-/sdcard/android/layout_tests/fast/block/float/016.html
-/sdcard/android/layout_tests/fast/block/float/008.html
-/sdcard/android/layout_tests/fast/block/float/028.html
-/sdcard/android/layout_tests/fast/block/float/shrink-to-fit-width.html
-/sdcard/android/layout_tests/fast/block/float/clamped-right-float.html
-/sdcard/android/layout_tests/fast/block/float/independent-align-positioning.html
-/sdcard/android/layout_tests/fast/block/float/float-on-zero-height-line.html
-/sdcard/android/layout_tests/fast/block/float/nowrap-clear-min-width.html
-/sdcard/android/layout_tests/fast/block/float/overhanging-after-height-decrease-offsets.html
-/sdcard/android/layout_tests/fast/block/float/001.html
-/sdcard/android/layout_tests/fast/block/float/021.html
-/sdcard/android/layout_tests/fast/block/float/013.html
-/sdcard/android/layout_tests/fast/block/float/nopaint-after-layer-destruction2.html
-/sdcard/android/layout_tests/fast/block/float/005.html
-/sdcard/android/layout_tests/fast/block/float/033.html
-/sdcard/android/layout_tests/fast/block/float/025.html
-/sdcard/android/layout_tests/fast/block/float/017.html
-/sdcard/android/layout_tests/fast/block/float/009.html
-/sdcard/android/layout_tests/fast/block/float/float-in-float-hit-testing.html
-/sdcard/android/layout_tests/fast/block/float/029.html
-/sdcard/android/layout_tests/fast/block/float/4145535Crash.html
-/sdcard/android/layout_tests/fast/block/float/editable-text-overlapping-float.html
-/sdcard/android/layout_tests/fast/block/float/nestedAnonymousBlocks.html
-/sdcard/android/layout_tests/fast/block/float/intruding-painted-twice.html
-/sdcard/android/layout_tests/fast/block/float/010.html
-/sdcard/android/layout_tests/fast/block/float/002.html
-/sdcard/android/layout_tests/fast/block/float/dynamic-unfloat-pref-width.html
-/sdcard/android/layout_tests/fast/block/float/marquee-shrink-to-avoid-floats.html
-/sdcard/android/layout_tests/fast/block/float/030.html
-/sdcard/android/layout_tests/fast/block/float/022.html
-/sdcard/android/layout_tests/fast/block/float/014.html
-/sdcard/android/layout_tests/fast/block/float/006.html
-/sdcard/android/layout_tests/fast/block/float/034.html
-/sdcard/android/layout_tests/fast/block/float/relative-painted-twice.html
-/sdcard/android/layout_tests/fast/block/float/026.html
-/sdcard/android/layout_tests/fast/block/float/018.html
-/sdcard/android/layout_tests/fast/block/float/width-update-after-clear.html
-/sdcard/android/layout_tests/fast/block/float/nopaint-after-layer-destruction.html
-/sdcard/android/layout_tests/fast/block/float/float-in-float-painting.html
-/sdcard/android/layout_tests/fast/block/float/overhanging-after-height-decrease.html
-/sdcard/android/layout_tests/fast/block/float/float-avoidance.html
-/sdcard/android/layout_tests/fast/block/float/narrow-after-wide.html
-/sdcard/android/layout_tests/fast/block/float/multiple-float-positioning.html
-/sdcard/android/layout_tests/fast/block/float/br-with-clear.html
-/sdcard/android/layout_tests/fast/block/float/011.html
-/sdcard/android/layout_tests/fast/block/float/negative-margin-clear.html
-/sdcard/android/layout_tests/fast/block/float/003.html
-/sdcard/android/layout_tests/fast/block/float/031.html
-/sdcard/android/layout_tests/fast/block/float/023.html
-/sdcard/android/layout_tests/fast/block/float/015.html
-/sdcard/android/layout_tests/fast/block/float/007.html
-/sdcard/android/layout_tests/fast/block/float/035.html
-/sdcard/android/layout_tests/fast/block/float/027.html
-/sdcard/android/layout_tests/fast/block/float/019.html
-/sdcard/android/layout_tests/fast/block/float/nestedAnonymousBlocks2.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/059.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/empty-clear-blocks.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/010.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/negative-margins.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/002.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/020.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/101.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/030.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/012.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/040.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/022.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/004.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/103.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/032.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/006.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/042.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/016.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/034.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/062.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/044.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/026.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/018.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/028.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/056.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/038.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/058.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/100.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/001.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/011.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/102.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/021.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/003.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/031.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/005.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/041.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/104.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/033.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/015.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/025.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/043.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/035.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/017.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/027.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/045.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/063.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/037.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/019.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/055.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/029.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/039.html
-/sdcard/android/layout_tests/fast/block/margin-collapse/057.html
-/sdcard/android/layout_tests/fast/runin/001.html
-/sdcard/android/layout_tests/fast/runin/002.html
-/sdcard/android/layout_tests/fast/parser/title-error-test.html
-/sdcard/android/layout_tests/fast/parser/comments.html
-/sdcard/android/layout_tests/fast/parser/fonts.html
-/sdcard/android/layout_tests/fast/parser/comment-in-style.html
-/sdcard/android/layout_tests/fast/parser/comment-in-script.html
-/sdcard/android/layout_tests/fast/parser/broken-comments-vs-parsing-mode.html
-/sdcard/android/layout_tests/fast/parser/entity-comment-in-style.html
-/sdcard/android/layout_tests/fast/parser/xhtml-alternate-entities.xml
-/sdcard/android/layout_tests/fast/parser/nofoo-tags-inside-paragraph.html
-/sdcard/android/layout_tests/fast/parser/entity-comment-in-textarea.html
-/sdcard/android/layout_tests/fast/parser/bad-xml-slash.html
-/sdcard/android/layout_tests/fast/parser/001.html
-/sdcard/android/layout_tests/fast/parser/open-comment-in-textarea.html
-/sdcard/android/layout_tests/fast/parser/tabs-in-scripts.html
-/sdcard/android/layout_tests/fast/parser/parseCommentsInTitles.html
-/sdcard/android/layout_tests/fast/parser/remove-block-in-residual-style.html
-/sdcard/android/layout_tests/fast/parser/open-comment-in-style.html
-/sdcard/android/layout_tests/fast/parser/document-write-option.html
-/sdcard/android/layout_tests/fast/parser/style-script-head-test.html
-/sdcard/android/layout_tests/fast/parser/comment-in-textarea.html
-/sdcard/android/layout_tests/fast/layers/zindex-ridonkulous.html
-/sdcard/android/layout_tests/fast/layers/positioned-inside-root-with-margins.html
-/sdcard/android/layout_tests/fast/layers/layer-visibility-sublayer.html
-/sdcard/android/layout_tests/fast/layers/opacity-outline.html
-/sdcard/android/layout_tests/fast/layers/add-layer-with-nested-stacking.html
-/sdcard/android/layout_tests/fast/layers/layer-content-visibility-change.html
-/sdcard/android/layout_tests/fast/layers/zindex-inherit.html
-/sdcard/android/layout_tests/fast/layers/layer-visibility.html
-/sdcard/android/layout_tests/fast/layers/remove-layer-with-nested-stacking.html
-/sdcard/android/layout_tests/fast/layers/opacity-transforms.html
-/sdcard/android/layout_tests/fast/layers/overflow-scroll-auto-switch.html
-/sdcard/android/layout_tests/fast/layers/scroll-rect-to-visible.html
-/sdcard/android/layout_tests/fast/layers/opacity-stacking.html
-/sdcard/android/layout_tests/fast/history/clicked-link-is-visited.html
-/sdcard/android/layout_tests/fast/backgrounds/repeat/mask-negative-offset-repeat.html
-/sdcard/android/layout_tests/fast/backgrounds/repeat/negative-offset-repeat.html
-/sdcard/android/layout_tests/fast/backgrounds/repeat/negative-offset-repeat-transformed.html
-/sdcard/android/layout_tests/fast/backgrounds/repeat/noRepeatCorrectClip.html
-/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize02.html
-/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize11.html
-/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize03.html
-/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize12.html
-/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize04.html
-/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize13.html
-/sdcard/android/layout_tests/fast/backgrounds/size/zero.html
-/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize05.html
-/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize14.html
-/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize06.html
-/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize15.html
-/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize07.html
-/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize16.html
-/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize17.html
-/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize08.html
-/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize09.html
-/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize18.html
-/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize19.html
-/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize10.html
-/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize01.html
-/sdcard/android/layout_tests/fast/backgrounds/svg-as-background-2.html
-/sdcard/android/layout_tests/fast/backgrounds/background-origin-root-element.html
-/sdcard/android/layout_tests/fast/backgrounds/svg-as-background-3.html
-/sdcard/android/layout_tests/fast/backgrounds/svg-as-background-4.html
-/sdcard/android/layout_tests/fast/backgrounds/svg-as-background-5.html
-/sdcard/android/layout_tests/fast/backgrounds/background-position-1.html
-/sdcard/android/layout_tests/fast/backgrounds/svg-as-background-6.html
-/sdcard/android/layout_tests/fast/backgrounds/opacity-on-document-element.html
-/sdcard/android/layout_tests/fast/backgrounds/svg-as-mask.html
-/sdcard/android/layout_tests/fast/backgrounds/solid-color-context-restore.html
-/sdcard/android/layout_tests/fast/backgrounds/mask-composite.html
-/sdcard/android/layout_tests/fast/backgrounds/animated-svg-as-background.html
-/sdcard/android/layout_tests/fast/backgrounds/001.html
-/sdcard/android/layout_tests/fast/backgrounds/animated-gif-as-background.html
-/sdcard/android/layout_tests/fast/backgrounds/background-position-rounding.html
-/sdcard/android/layout_tests/fast/backgrounds/bgCompositeCopy.html
-/sdcard/android/layout_tests/fast/backgrounds/background-inherit-color-bug.html
-/sdcard/android/layout_tests/fast/backgrounds/animated-svg-as-mask.html
-/sdcard/android/layout_tests/fast/backgrounds/svg-as-background-1.html
-/sdcard/android/layout_tests/fast/repaint/reflection-redraw.html
-/sdcard/android/layout_tests/fast/repaint/layer-full-repaint.html
-/sdcard/android/layout_tests/fast/repaint/subtree-root-clip.html
-/sdcard/android/layout_tests/fast/repaint/subtree-root-clip-3.html
-/sdcard/android/layout_tests/fast/repaint/layer-outline-horizontal.html
-/sdcard/android/layout_tests/fast/repaint/layer-hide-when-needs-layout.html
-/sdcard/android/layout_tests/fast/repaint/layer-outline.html
-/sdcard/android/layout_tests/fast/repaint/list-marker-2.html
-/sdcard/android/layout_tests/fast/repaint/table-section-overflow.html
-/sdcard/android/layout_tests/fast/repaint/body-background-image.html
-/sdcard/android/layout_tests/fast/repaint/shadow-multiple-strict-vertical.html
-/sdcard/android/layout_tests/fast/repaint/inline-outline-repaint.html
-/sdcard/android/layout_tests/fast/repaint/line-flow-with-floats-4.html
-/sdcard/android/layout_tests/fast/repaint/change-transform.html
-/sdcard/android/layout_tests/fast/repaint/fixed.html
-/sdcard/android/layout_tests/fast/repaint/line-flow-with-floats-8.html
-/sdcard/android/layout_tests/fast/repaint/erase-overflow.html
-/sdcard/android/layout_tests/fast/repaint/outline-child-repaint.html
-/sdcard/android/layout_tests/fast/repaint/float-overflow.html
-/sdcard/android/layout_tests/fast/repaint/containing-block-position-change.html
-/sdcard/android/layout_tests/fast/repaint/text-selection-rect-in-overflow.html
-/sdcard/android/layout_tests/fast/repaint/flexible-box-overflow-horizontal.html
-/sdcard/android/layout_tests/fast/repaint/table-cell-move.html
-/sdcard/android/layout_tests/fast/repaint/transform-absolute-child.html
-/sdcard/android/layout_tests/fast/repaint/line-flow-with-floats-10.html
-/sdcard/android/layout_tests/fast/repaint/float-move-during-layout.html
-/sdcard/android/layout_tests/fast/repaint/overflow-clip-subtree-layout.html
-/sdcard/android/layout_tests/fast/repaint/invisible-objects.html
-/sdcard/android/layout_tests/fast/repaint/shadow-multiple-strict-horizontal.html
-/sdcard/android/layout_tests/fast/repaint/focus-layers.html
-/sdcard/android/layout_tests/fast/repaint/inline-color-change.html
-/sdcard/android/layout_tests/fast/repaint/table-col-background.html
-/sdcard/android/layout_tests/fast/repaint/selection-after-remove.html
-/sdcard/android/layout_tests/fast/repaint/dynamic-table-vertical-alignment-change.html
-/sdcard/android/layout_tests/fast/repaint/flexible-box-overflow.html
-/sdcard/android/layout_tests/fast/repaint/table-two-pass-layout-overpaint.html
-/sdcard/android/layout_tests/fast/repaint/overflow-into-content.html
-/sdcard/android/layout_tests/fast/repaint/shadow-multiple-vertical.html
-/sdcard/android/layout_tests/fast/repaint/border-repaint-glitch.html
-/sdcard/android/layout_tests/fast/repaint/continuation-after-outline.html
-/sdcard/android/layout_tests/fast/repaint/intermediate-layout-position.html
-/sdcard/android/layout_tests/fast/repaint/table-section-repaint.html
-/sdcard/android/layout_tests/fast/repaint/clipped-relative.html
-/sdcard/android/layout_tests/fast/repaint/line-flow-with-floats-1.html
-/sdcard/android/layout_tests/fast/repaint/backgroundSizeRepaint.html
-/sdcard/android/layout_tests/fast/repaint/box-shadow-dynamic.html
-/sdcard/android/layout_tests/fast/repaint/line-flow-with-floats-5.html
-/sdcard/android/layout_tests/fast/repaint/text-shadow-horizontal.html
-/sdcard/android/layout_tests/fast/repaint/caret-outside-block.html
-/sdcard/android/layout_tests/fast/repaint/renderer-destruction-by-invalidateSelection-crash.html
-/sdcard/android/layout_tests/fast/repaint/line-flow-with-floats-9.html
-/sdcard/android/layout_tests/fast/repaint/transform-repaint-descendants.html
-/sdcard/android/layout_tests/fast/repaint/layout-state-relative.html
-/sdcard/android/layout_tests/fast/repaint/shadow-multiple-horizontal.html
-/sdcard/android/layout_tests/fast/repaint/border-fit-lines.html
-/sdcard/android/layout_tests/fast/repaint/repaint-resized-overflow.html
-/sdcard/android/layout_tests/fast/repaint/bugzilla-3509.html
-/sdcard/android/layout_tests/fast/repaint/inline-block-overflow.html
-/sdcard/android/layout_tests/fast/repaint/button-spurious-layout-hint.html
-/sdcard/android/layout_tests/fast/repaint/bugzilla-6278.html
-/sdcard/android/layout_tests/fast/repaint/box-shadow-v.html
-/sdcard/android/layout_tests/fast/repaint/delete-into-nested-block.html
-/sdcard/android/layout_tests/fast/repaint/float-overflow-right.html
-/sdcard/android/layout_tests/fast/repaint/table-cell-collapsed-border.html
-/sdcard/android/layout_tests/fast/repaint/selection-after-delete.html
-/sdcard/android/layout_tests/fast/repaint/lines-with-layout-delta.html
-/sdcard/android/layout_tests/fast/repaint/layout-state-only-positioned.html
-/sdcard/android/layout_tests/fast/repaint/table-extra-bottom-grow.html
-/sdcard/android/layout_tests/fast/repaint/transform-relative-position.html
-/sdcard/android/layout_tests/fast/repaint/selection-gap-overflow-scroll.html
-/sdcard/android/layout_tests/fast/repaint/subtree-root-skipped.html
-/sdcard/android/layout_tests/fast/repaint/line-overflow.html
-/sdcard/android/layout_tests/fast/repaint/line-flow-with-floats-2.html
-/sdcard/android/layout_tests/fast/repaint/table-row.html
-/sdcard/android/layout_tests/fast/repaint/line-flow-with-floats-6.html
-/sdcard/android/layout_tests/fast/repaint/table-outer-border.html
-/sdcard/android/layout_tests/fast/repaint/overflow-scroll-delete.html
-/sdcard/android/layout_tests/fast/repaint/layer-visibility.html
-/sdcard/android/layout_tests/fast/repaint/border-radius-repaint.html
-/sdcard/android/layout_tests/fast/repaint/table-collapsed-border.html
-/sdcard/android/layout_tests/fast/repaint/transform-translate.html
-/sdcard/android/layout_tests/fast/repaint/bugzilla-7235.html
-/sdcard/android/layout_tests/fast/repaint/4776765.html
-/sdcard/android/layout_tests/fast/repaint/bugzilla-6473.html
-/sdcard/android/layout_tests/fast/repaint/intermediate-layout-position-clip.html
-/sdcard/android/layout_tests/fast/repaint/focus-ring.html
-/sdcard/android/layout_tests/fast/repaint/table-cell-vertical-overflow.html
-/sdcard/android/layout_tests/fast/repaint/create-layer-repaint.html
-/sdcard/android/layout_tests/fast/repaint/subtree-root-clip-2.html
-/sdcard/android/layout_tests/fast/repaint/bugzilla-6388.html
-/sdcard/android/layout_tests/fast/repaint/overflow-outline-repaint.html
-/sdcard/android/layout_tests/fast/repaint/content-into-overflow.html
-/sdcard/android/layout_tests/fast/repaint/static-to-positioned.html
-/sdcard/android/layout_tests/fast/repaint/bugzilla-5699.html
-/sdcard/android/layout_tests/fast/repaint/transform-absolute-in-positioned-container.html
-/sdcard/android/layout_tests/fast/repaint/outline-repaint-glitch.html
-/sdcard/android/layout_tests/fast/repaint/overflow-delete-line.html
-/sdcard/android/layout_tests/fast/repaint/transform-disable-layoutstate.html
-/sdcard/android/layout_tests/fast/repaint/list-marker.html
-/sdcard/android/layout_tests/fast/repaint/line-flow-with-floats-3.html
-/sdcard/android/layout_tests/fast/repaint/line-flow-with-floats-7.html
-/sdcard/android/layout_tests/fast/repaint/outline-inset.html
-/sdcard/android/layout_tests/fast/repaint/box-shadow-h.html
-/sdcard/android/layout_tests/fast/repaint/4774354.html
-/sdcard/android/layout_tests/fast/repaint/clip-with-layout-delta.html
-/sdcard/android/layout_tests/fast/repaint/control-clip.html
-/sdcard/android/layout_tests/fast/repaint/selected-replaced.html
-/sdcard/android/layout_tests/fast/repaint/text-selection-rect-in-overflow-2.html
-/sdcard/android/layout_tests/fast/repaint/make-children-non-inline.html
-/sdcard/android/layout_tests/fast/repaint/text-shadow.html
-/sdcard/android/layout_tests/fast/repaint/outline-shrinking.html
-/sdcard/android/layout_tests/fast/repaint/layer-child-outline.html
-/sdcard/android/layout_tests/fast/loader/start-load-in-unload.html
-/sdcard/android/layout_tests/fast/loader/text-document-wrapping.html
-/sdcard/android/layout_tests/fast/xsl/document-function.xml
-/sdcard/android/layout_tests/fast/xsl/xslt-extra-content-at-end.xml
-/sdcard/android/layout_tests/fast/xsl/xslt-enc.xml
-/sdcard/android/layout_tests/fast/xsl/xslt_unicode.xml
-/sdcard/android/layout_tests/fast/xsl/xslt-import-depth.xml
-/sdcard/android/layout_tests/fast/xsl/xslt-enc16.xml
-/sdcard/android/layout_tests/fast/xsl/xslt-enc16to16.xml
-/sdcard/android/layout_tests/fast/xsl/xslt-missing-namespace-in-xslt.xml
-/sdcard/android/layout_tests/fast/xsl/xslt-enc-cyr.xml
-/sdcard/android/layout_tests/fast/xsl/xslt-relative-path.xml
-/sdcard/android/layout_tests/fast/xsl/xslt-mismatched-tags-in-xslt.xml
-/sdcard/android/layout_tests/fast/xsl/xslt-entity.xml
-/sdcard/android/layout_tests/fast/canvas/fillrect-gradient-zero-stops.html
-/sdcard/android/layout_tests/fast/canvas/canvas-transforms-during-path.html
-/sdcard/android/layout_tests/fast/canvas/drawImage.html
-/sdcard/android/layout_tests/fast/canvas/shadow-offset-7.html
-/sdcard/android/layout_tests/fast/canvas/shadow-offset-4.html
-/sdcard/android/layout_tests/fast/canvas/canvas-text-baseline.html
-/sdcard/android/layout_tests/fast/canvas/canvas-as-image-incremental-repaint.html
-/sdcard/android/layout_tests/fast/canvas/shadow-offset-1.html
-/sdcard/android/layout_tests/fast/canvas/canvas-size-change-after-layout.html
-/sdcard/android/layout_tests/fast/canvas/canvas-resize-reset.html
-/sdcard/android/layout_tests/fast/canvas/canvas-bg.html
-/sdcard/android/layout_tests/fast/canvas/zero-size-fill-rect.html
-/sdcard/android/layout_tests/fast/canvas/shadow-offset-6.html
-/sdcard/android/layout_tests/fast/canvas/patternfill-repeat.html
-/sdcard/android/layout_tests/fast/canvas/image-object-in-canvas.html
-/sdcard/android/layout_tests/fast/canvas/shadow-offset-3.html
-/sdcard/android/layout_tests/fast/canvas/canvas-composite.html
-/sdcard/android/layout_tests/fast/canvas/gradient-add-second-start-end-stop.html
-/sdcard/android/layout_tests/fast/canvas/quadraticCurveTo.xml
-/sdcard/android/layout_tests/fast/canvas/fill-stroke-clip-reset-path.html
-/sdcard/android/layout_tests/fast/canvas/canvas-text-alignment.html
-/sdcard/android/layout_tests/fast/canvas/canvas-incremental-repaint.html
-/sdcard/android/layout_tests/fast/canvas/canvasDrawingIntoSelf.html
-/sdcard/android/layout_tests/fast/canvas/canvas-as-image.html
-/sdcard/android/layout_tests/fast/canvas/canvas-before-css.html
-/sdcard/android/layout_tests/fast/canvas/canvas-incremental-repaint-2.html
-/sdcard/android/layout_tests/fast/canvas/shadow-offset-5.html
-/sdcard/android/layout_tests/fast/canvas/fillrect_gradient.html
-/sdcard/android/layout_tests/fast/canvas/shadow-offset-2.html
-/sdcard/android/layout_tests/fast/frames/contentWindow_Frame.html
-/sdcard/android/layout_tests/fast/frames/onlyCommentInIFrame.html
-/sdcard/android/layout_tests/fast/frames/frame-src-attribute.html
-/sdcard/android/layout_tests/fast/frames/frameElement-frame.html
-/sdcard/android/layout_tests/fast/frames/empty-cols-attribute.html
-/sdcard/android/layout_tests/fast/frames/iframe-scrolling-attribute.html
-/sdcard/android/layout_tests/fast/frames/inline-object-inside-frameset.html
-/sdcard/android/layout_tests/fast/frames/valid.html
-/sdcard/android/layout_tests/fast/frames/no-frame-borders.html
-/sdcard/android/layout_tests/fast/frames/empty-frame-src.html
-/sdcard/android/layout_tests/fast/frames/calculate-round.html
-/sdcard/android/layout_tests/fast/frames/frame-navigation.html
-/sdcard/android/layout_tests/fast/frames/001.html
-/sdcard/android/layout_tests/fast/frames/invalid.html
-/sdcard/android/layout_tests/fast/frames/frameset-style-recalc.html
-/sdcard/android/layout_tests/fast/frames/viewsource-attribute.html
-/sdcard/android/layout_tests/fast/frames/002.html
-/sdcard/android/layout_tests/fast/frames/calculate-relative.html
-/sdcard/android/layout_tests/fast/frames/calculate-order.html
-/sdcard/android/layout_tests/fast/frames/calculate-percentage.html
-/sdcard/android/layout_tests/fast/frames/iframe-text-contents.html
-/sdcard/android/layout_tests/fast/frames/frame-scrolling-attribute.html
-/sdcard/android/layout_tests/fast/frames/contentWindow_iFrame.html
-/sdcard/android/layout_tests/fast/frames/calculate-fixed.html
-/sdcard/android/layout_tests/fast/frames/frame-element-name.html
-/sdcard/android/layout_tests/fast/frames/frame-set-whitespace-attributes.html
-/sdcard/android/layout_tests/fast/frames/iframe-with-frameborder.html
-/sdcard/android/layout_tests/fast/frames/frameElement-iframe.html
-/sdcard/android/layout_tests/fast/reflections/inline-crash.html
-/sdcard/android/layout_tests/fast/reflections/reflection-nesting.html
-/sdcard/android/layout_tests/fast/reflections/reflection-overflow-hidden.html
-/sdcard/android/layout_tests/fast/reflections/table-cell.html
-/sdcard/android/layout_tests/fast/reflections/reflection-masks.html
-/sdcard/android/layout_tests/fast/reflections/reflection-direction.html
-/sdcard/android/layout_tests/transforms/2d/zoom-menulist.html
-/sdcard/android/layout_tests/transforms/2d/transform-origin-borderbox.html
-/sdcard/android/layout_tests/transforms/2d/transform-borderbox.html
-/sdcard/android/layout_tests/transforms/2d/compound-transforms-vs-containers.html
+/sdcard/android/layout_tests/accessibility/image-map1.html
+/sdcard/android/layout_tests/accessibility/aria-labelledby-on-input.html
+/sdcard/android/layout_tests/accessibility/aria-labelledby-stay-within.html
+/sdcard/android/layout_tests/accessibility/table-with-rules.html
+/sdcard/android/layout_tests/accessibility/aria-describedby-on-input.html
+/sdcard/android/layout_tests/accessibility/table-detection.html
+/sdcard/android/layout_tests/accessibility/table-with-aria-role.html
+/sdcard/android/layout_tests/accessibility/image-map2.html
+/sdcard/android/layout_tests/accessibility/table-cell-spans.html
+/sdcard/android/layout_tests/accessibility/table-cells.html
+/sdcard/android/layout_tests/accessibility/lists.html
+/sdcard/android/layout_tests/accessibility/plugin.html
+/sdcard/android/layout_tests/accessibility/table-sections.html
+/sdcard/android/layout_tests/accessibility/table-one-cell.html
+/sdcard/android/layout_tests/accessibility/internal-link-anchors2.html
+/sdcard/android/layout_tests/accessibility/radio-button-group-members.html
+/sdcard/android/layout_tests/accessibility/table-attributes.html
+/sdcard/android/layout_tests/accessibility/input-slider.html
+/sdcard/android/layout_tests/accessibility/aria-tables.html
+/sdcard/android/layout_tests/accessibility/legend.html
+/sdcard/android/layout_tests/accessibility/aria-roles.html
 /sdcard/android/layout_tests/animations/animation-drt-api-multiple-keyframes.html
 /sdcard/android/layout_tests/animations/animation-drt-api.html
-/sdcard/android/layout_tests/scrollbars/scrollbar-orientation.html
-/sdcard/android/layout_tests/scrollbars/scrollbar-buttons.html
-/sdcard/android/layout_tests/scrollbars/basic-scrollbar.html
-/sdcard/android/layout_tests/scrollbars/overflow-scrollbar-combinations.html
-/sdcard/android/layout_tests/scrollbars/disabled-scrollbar.html
-/sdcard/android/layout_tests/scrollbars/listbox-scrollbar-combinations.html
+/sdcard/android/layout_tests/compositing/repaint/content-into-overflow.html
+/sdcard/android/layout_tests/compositing/repaint/overflow-into-content.html
+/sdcard/android/layout_tests/compositing/repaint/become-overlay-composited-layer.html
+/sdcard/android/layout_tests/compositing/repaint/layer-repaint-rects.html
+/sdcard/android/layout_tests/compositing/overflow/ancestor-overflow.html
+/sdcard/android/layout_tests/compositing/overflow/overflow-scroll.html
+/sdcard/android/layout_tests/compositing/overflow/overflow-positioning.html
+/sdcard/android/layout_tests/compositing/overflow/parent-overflow.html
+/sdcard/android/layout_tests/compositing/color-matching/image-color-matching.html
+/sdcard/android/layout_tests/compositing/geometry/root-layer-update.html
+/sdcard/android/layout_tests/compositing/geometry/outline-change.html
+/sdcard/android/layout_tests/compositing/reflections/reflection-on-composited.html
+/sdcard/android/layout_tests/compositing/self-painting-layers.html
+/sdcard/android/layout_tests/compositing/direct-image-compositing.html
+/sdcard/android/layout_tests/compositing/layers-inside-overflow-scroll.html
+/sdcard/android/layout_tests/compositing/generated-content.html
+/sdcard/android/layout_tests/compositing/sibling-positioning.html
+/sdcard/android/layout_tests/css1/color_and_background/background_color.html
+/sdcard/android/layout_tests/css1/color_and_background/color.html
+/sdcard/android/layout_tests/css1/color_and_background/background.html
+/sdcard/android/layout_tests/css1/color_and_background/background_repeat.html
+/sdcard/android/layout_tests/css1/color_and_background/background_image.html
+/sdcard/android/layout_tests/css1/color_and_background/background_position.html
+/sdcard/android/layout_tests/css1/color_and_background/background_attachment.html
+/sdcard/android/layout_tests/css1/pseudo/firstline.html
+/sdcard/android/layout_tests/css1/pseudo/pseudo_elements_in_selectors.html
+/sdcard/android/layout_tests/css1/pseudo/multiple_pseudo_elements.html
+/sdcard/android/layout_tests/css1/pseudo/firstletter.html
+/sdcard/android/layout_tests/css1/pseudo/anchor.html
+/sdcard/android/layout_tests/css1/text_properties/text_align.html
+/sdcard/android/layout_tests/css1/text_properties/line_height.html
+/sdcard/android/layout_tests/css1/text_properties/text_transform.html
+/sdcard/android/layout_tests/css1/text_properties/word_spacing.html
+/sdcard/android/layout_tests/css1/text_properties/letter_spacing.html
+/sdcard/android/layout_tests/css1/text_properties/vertical_align.html
+/sdcard/android/layout_tests/css1/text_properties/text_indent.html
+/sdcard/android/layout_tests/css1/text_properties/text_decoration.html
+/sdcard/android/layout_tests/css1/basic/containment.html
+/sdcard/android/layout_tests/css1/basic/id_as_selector.html
+/sdcard/android/layout_tests/css1/basic/comments.html
+/sdcard/android/layout_tests/css1/basic/class_as_selector.html
+/sdcard/android/layout_tests/css1/basic/contextual_selectors.html
+/sdcard/android/layout_tests/css1/basic/inheritance.html
+/sdcard/android/layout_tests/css1/basic/grouping.html
+/sdcard/android/layout_tests/css1/font_properties/font_weight.html
+/sdcard/android/layout_tests/css1/font_properties/font_size.html
+/sdcard/android/layout_tests/css1/font_properties/font.html
+/sdcard/android/layout_tests/css1/font_properties/font_style.html
+/sdcard/android/layout_tests/css1/font_properties/font_family.html
+/sdcard/android/layout_tests/css1/font_properties/font_variant.html
+/sdcard/android/layout_tests/css1/units/percentage_units.html
+/sdcard/android/layout_tests/css1/units/color_units.html
+/sdcard/android/layout_tests/css1/units/length_units.html
+/sdcard/android/layout_tests/css1/units/urls.html
+/sdcard/android/layout_tests/css1/cascade/important.html
+/sdcard/android/layout_tests/css1/cascade/cascade_order.html
+/sdcard/android/layout_tests/css1/box_properties/border_width.html
+/sdcard/android/layout_tests/css1/box_properties/margin.html
+/sdcard/android/layout_tests/css1/box_properties/width.html
+/sdcard/android/layout_tests/css1/box_properties/padding_left.html
+/sdcard/android/layout_tests/css1/box_properties/margin_left_inline.html
+/sdcard/android/layout_tests/css1/box_properties/clear.html
+/sdcard/android/layout_tests/css1/box_properties/border_left_width.html
+/sdcard/android/layout_tests/css1/box_properties/margin_left.html
+/sdcard/android/layout_tests/css1/box_properties/padding_top.html
+/sdcard/android/layout_tests/css1/box_properties/padding_bottom.html
+/sdcard/android/layout_tests/css1/box_properties/border_style_inline.html
+/sdcard/android/layout_tests/css1/box_properties/border_top_width_inline.html
+/sdcard/android/layout_tests/css1/box_properties/border_top_inline.html
+/sdcard/android/layout_tests/css1/box_properties/border_style.html
+/sdcard/android/layout_tests/css1/box_properties/border_top.html
+/sdcard/android/layout_tests/css1/box_properties/margin_bottom_inline.html
+/sdcard/android/layout_tests/css1/box_properties/border_bottom_width.html
+/sdcard/android/layout_tests/css1/box_properties/margin_bottom.html
+/sdcard/android/layout_tests/css1/box_properties/float_elements_in_series.html
+/sdcard/android/layout_tests/css1/box_properties/float_on_text_elements.html
+/sdcard/android/layout_tests/css1/box_properties/padding.html
+/sdcard/android/layout_tests/css1/box_properties/border_right_width_inline.html
+/sdcard/android/layout_tests/css1/box_properties/border_right_inline.html
+/sdcard/android/layout_tests/css1/box_properties/border_right_width.html
+/sdcard/android/layout_tests/css1/box_properties/margin_right.html
+/sdcard/android/layout_tests/css1/box_properties/border_width_inline.html
+/sdcard/android/layout_tests/css1/box_properties/border_inline.html
+/sdcard/android/layout_tests/css1/box_properties/clear_float.html
+/sdcard/android/layout_tests/css1/box_properties/border.html
+/sdcard/android/layout_tests/css1/box_properties/padding_left_inline.html
+/sdcard/android/layout_tests/css1/box_properties/border_left_width_inline.html
+/sdcard/android/layout_tests/css1/box_properties/border_left_inline.html
+/sdcard/android/layout_tests/css1/box_properties/padding_top_inline.html
+/sdcard/android/layout_tests/css1/box_properties/border_left.html
+/sdcard/android/layout_tests/css1/box_properties/padding_bottom_inline.html
+/sdcard/android/layout_tests/css1/box_properties/margin_top_inline.html
+/sdcard/android/layout_tests/css1/box_properties/border_top_width.html
+/sdcard/android/layout_tests/css1/box_properties/border_bottom_width_inline.html
+/sdcard/android/layout_tests/css1/box_properties/acid_test.html
+/sdcard/android/layout_tests/css1/box_properties/border_bottom_inline.html
+/sdcard/android/layout_tests/css1/box_properties/margin_top.html
+/sdcard/android/layout_tests/css1/box_properties/border_bottom.html
+/sdcard/android/layout_tests/css1/box_properties/padding_right_inline.html
+/sdcard/android/layout_tests/css1/box_properties/float_margin.html
+/sdcard/android/layout_tests/css1/box_properties/padding_right.html
+/sdcard/android/layout_tests/css1/box_properties/padding_inline.html
+/sdcard/android/layout_tests/css1/box_properties/float.html
+/sdcard/android/layout_tests/css1/box_properties/height.html
+/sdcard/android/layout_tests/css1/box_properties/margin_right_inline.html
+/sdcard/android/layout_tests/css1/box_properties/border_color_inline.html
+/sdcard/android/layout_tests/css1/box_properties/border_right.html
+/sdcard/android/layout_tests/css1/box_properties/border_color.html
+/sdcard/android/layout_tests/css1/box_properties/margin_inline.html
+/sdcard/android/layout_tests/css1/conformance/forward_compatible_parsing.html
+/sdcard/android/layout_tests/css1/formatting_model/floating_elements.html
+/sdcard/android/layout_tests/css1/formatting_model/horizontal_formatting.html
+/sdcard/android/layout_tests/css1/formatting_model/vertical_formatting.html
+/sdcard/android/layout_tests/css1/formatting_model/height_of_lines.html
+/sdcard/android/layout_tests/css1/formatting_model/inline_elements.html
+/sdcard/android/layout_tests/css1/formatting_model/canvas.html
+/sdcard/android/layout_tests/css1/formatting_model/replaced_elements.html
+/sdcard/android/layout_tests/css1/classification/list_style_type.html
+/sdcard/android/layout_tests/css1/classification/list_style_image.html
+/sdcard/android/layout_tests/css1/classification/list_style_position.html
+/sdcard/android/layout_tests/css1/classification/display.html
+/sdcard/android/layout_tests/css1/classification/list_style.html
+/sdcard/android/layout_tests/css1/classification/white_space.html
 /sdcard/android/layout_tests/css2.1/t040103-ident-03-c.html
 /sdcard/android/layout_tests/css2.1/t0804-c5509-padn-l-00-b-ag.html
 /sdcard/android/layout_tests/css2.1/t1205-c563-list-type-00-b.html
@@ -3017,112 +633,2631 @@
 /sdcard/android/layout_tests/css2.1/t1202-counters-13-b.html
 /sdcard/android/layout_tests/css2.1/t140201-c533-bgimage-00-a.html
 /sdcard/android/layout_tests/css2.1/t040105-atkeyw-00-b.html
-/sdcard/android/layout_tests/css1/color_and_background/background_color.html
-/sdcard/android/layout_tests/css1/color_and_background/color.html
-/sdcard/android/layout_tests/css1/color_and_background/background.html
-/sdcard/android/layout_tests/css1/color_and_background/background_repeat.html
-/sdcard/android/layout_tests/css1/color_and_background/background_image.html
-/sdcard/android/layout_tests/css1/color_and_background/background_position.html
-/sdcard/android/layout_tests/css1/color_and_background/background_attachment.html
-/sdcard/android/layout_tests/css1/pseudo/firstline.html
-/sdcard/android/layout_tests/css1/pseudo/pseudo_elements_in_selectors.html
-/sdcard/android/layout_tests/css1/pseudo/multiple_pseudo_elements.html
-/sdcard/android/layout_tests/css1/pseudo/firstletter.html
-/sdcard/android/layout_tests/css1/pseudo/anchor.html
-/sdcard/android/layout_tests/css1/text_properties/text_align.html
-/sdcard/android/layout_tests/css1/text_properties/line_height.html
-/sdcard/android/layout_tests/css1/text_properties/text_transform.html
-/sdcard/android/layout_tests/css1/text_properties/word_spacing.html
-/sdcard/android/layout_tests/css1/text_properties/letter_spacing.html
-/sdcard/android/layout_tests/css1/text_properties/vertical_align.html
-/sdcard/android/layout_tests/css1/text_properties/text_indent.html
-/sdcard/android/layout_tests/css1/text_properties/text_decoration.html
-/sdcard/android/layout_tests/css1/basic/containment.html
-/sdcard/android/layout_tests/css1/basic/id_as_selector.html
-/sdcard/android/layout_tests/css1/basic/comments.html
-/sdcard/android/layout_tests/css1/basic/class_as_selector.html
-/sdcard/android/layout_tests/css1/basic/contextual_selectors.html
-/sdcard/android/layout_tests/css1/basic/inheritance.html
-/sdcard/android/layout_tests/css1/basic/grouping.html
-/sdcard/android/layout_tests/css1/font_properties/font_weight.html
-/sdcard/android/layout_tests/css1/font_properties/font_size.html
-/sdcard/android/layout_tests/css1/font_properties/font.html
-/sdcard/android/layout_tests/css1/font_properties/font_style.html
-/sdcard/android/layout_tests/css1/font_properties/font_family.html
-/sdcard/android/layout_tests/css1/font_properties/font_variant.html
-/sdcard/android/layout_tests/css1/units/percentage_units.html
-/sdcard/android/layout_tests/css1/units/color_units.html
-/sdcard/android/layout_tests/css1/units/length_units.html
-/sdcard/android/layout_tests/css1/units/urls.html
-/sdcard/android/layout_tests/css1/cascade/important.html
-/sdcard/android/layout_tests/css1/cascade/cascade_order.html
-/sdcard/android/layout_tests/css1/box_properties/border_width.html
-/sdcard/android/layout_tests/css1/box_properties/margin.html
-/sdcard/android/layout_tests/css1/box_properties/width.html
-/sdcard/android/layout_tests/css1/box_properties/padding_left.html
-/sdcard/android/layout_tests/css1/box_properties/margin_left_inline.html
-/sdcard/android/layout_tests/css1/box_properties/clear.html
-/sdcard/android/layout_tests/css1/box_properties/border_left_width.html
-/sdcard/android/layout_tests/css1/box_properties/margin_left.html
-/sdcard/android/layout_tests/css1/box_properties/padding_top.html
-/sdcard/android/layout_tests/css1/box_properties/padding_bottom.html
-/sdcard/android/layout_tests/css1/box_properties/border_style_inline.html
-/sdcard/android/layout_tests/css1/box_properties/border_top_width_inline.html
-/sdcard/android/layout_tests/css1/box_properties/border_top_inline.html
-/sdcard/android/layout_tests/css1/box_properties/border_style.html
-/sdcard/android/layout_tests/css1/box_properties/border_top.html
-/sdcard/android/layout_tests/css1/box_properties/margin_bottom_inline.html
-/sdcard/android/layout_tests/css1/box_properties/border_bottom_width.html
-/sdcard/android/layout_tests/css1/box_properties/margin_bottom.html
-/sdcard/android/layout_tests/css1/box_properties/float_elements_in_series.html
-/sdcard/android/layout_tests/css1/box_properties/float_on_text_elements.html
-/sdcard/android/layout_tests/css1/box_properties/padding.html
-/sdcard/android/layout_tests/css1/box_properties/border_right_width_inline.html
-/sdcard/android/layout_tests/css1/box_properties/border_right_inline.html
-/sdcard/android/layout_tests/css1/box_properties/border_right_width.html
-/sdcard/android/layout_tests/css1/box_properties/margin_right.html
-/sdcard/android/layout_tests/css1/box_properties/border_width_inline.html
-/sdcard/android/layout_tests/css1/box_properties/border_inline.html
-/sdcard/android/layout_tests/css1/box_properties/clear_float.html
-/sdcard/android/layout_tests/css1/box_properties/border.html
-/sdcard/android/layout_tests/css1/box_properties/padding_left_inline.html
-/sdcard/android/layout_tests/css1/box_properties/border_left_width_inline.html
-/sdcard/android/layout_tests/css1/box_properties/border_left_inline.html
-/sdcard/android/layout_tests/css1/box_properties/padding_top_inline.html
-/sdcard/android/layout_tests/css1/box_properties/border_left.html
-/sdcard/android/layout_tests/css1/box_properties/padding_bottom_inline.html
-/sdcard/android/layout_tests/css1/box_properties/margin_top_inline.html
-/sdcard/android/layout_tests/css1/box_properties/border_top_width.html
-/sdcard/android/layout_tests/css1/box_properties/border_bottom_width_inline.html
-/sdcard/android/layout_tests/css1/box_properties/acid_test.html
-/sdcard/android/layout_tests/css1/box_properties/border_bottom_inline.html
-/sdcard/android/layout_tests/css1/box_properties/margin_top.html
-/sdcard/android/layout_tests/css1/box_properties/border_bottom.html
-/sdcard/android/layout_tests/css1/box_properties/padding_right_inline.html
-/sdcard/android/layout_tests/css1/box_properties/float_margin.html
-/sdcard/android/layout_tests/css1/box_properties/padding_right.html
-/sdcard/android/layout_tests/css1/box_properties/padding_inline.html
-/sdcard/android/layout_tests/css1/box_properties/float.html
-/sdcard/android/layout_tests/css1/box_properties/height.html
-/sdcard/android/layout_tests/css1/box_properties/margin_right_inline.html
-/sdcard/android/layout_tests/css1/box_properties/border_color_inline.html
-/sdcard/android/layout_tests/css1/box_properties/border_right.html
-/sdcard/android/layout_tests/css1/box_properties/border_color.html
-/sdcard/android/layout_tests/css1/box_properties/margin_inline.html
-/sdcard/android/layout_tests/css1/conformance/forward_compatible_parsing.html
-/sdcard/android/layout_tests/css1/formatting_model/floating_elements.html
-/sdcard/android/layout_tests/css1/formatting_model/horizontal_formatting.html
-/sdcard/android/layout_tests/css1/formatting_model/vertical_formatting.html
-/sdcard/android/layout_tests/css1/formatting_model/height_of_lines.html
-/sdcard/android/layout_tests/css1/formatting_model/inline_elements.html
-/sdcard/android/layout_tests/css1/formatting_model/canvas.html
-/sdcard/android/layout_tests/css1/formatting_model/replaced_elements.html
-/sdcard/android/layout_tests/css1/classification/list_style_type.html
-/sdcard/android/layout_tests/css1/classification/list_style_image.html
-/sdcard/android/layout_tests/css1/classification/list_style_position.html
-/sdcard/android/layout_tests/css1/classification/display.html
-/sdcard/android/layout_tests/css1/classification/list_style.html
-/sdcard/android/layout_tests/css1/classification/white_space.html
+/sdcard/android/layout_tests/css3/css3-modsel-33.html
+/sdcard/android/layout_tests/css3/css3-modsel-35.html
+/sdcard/android/layout_tests/css3/css3-modsel-36.html
+/sdcard/android/layout_tests/css3/css3-modsel-37.html
+/sdcard/android/layout_tests/editing/input/emacs-ctrl-o.html
+/sdcard/android/layout_tests/editing/style/style-3681552-fix-001.html
+/sdcard/android/layout_tests/editing/style/create-block-for-style-013.html
+/sdcard/android/layout_tests/editing/style/style-3690704-fix.html
+/sdcard/android/layout_tests/editing/style/create-block-for-style-005.html
+/sdcard/android/layout_tests/editing/style/style-boundary-002.html
+/sdcard/android/layout_tests/editing/style/remove-underline-after-paragraph.html
+/sdcard/android/layout_tests/editing/style/create-block-for-style-009.html
+/sdcard/android/layout_tests/editing/style/5228141.html
+/sdcard/android/layout_tests/editing/style/block-style-004.html
+/sdcard/android/layout_tests/editing/style/apple-style-editable-mix.html
+/sdcard/android/layout_tests/editing/style/unbold-in-bold.html
+/sdcard/android/layout_tests/editing/style/typing-style-001.html
+/sdcard/android/layout_tests/editing/style/relative-font-size-change-004.html
+/sdcard/android/layout_tests/editing/style/create-block-for-style-010.html
+/sdcard/android/layout_tests/editing/style/create-block-for-style-002.html
+/sdcard/android/layout_tests/editing/style/style-3681552-fix-002.html
+/sdcard/android/layout_tests/editing/style/create-block-for-style-006.html
+/sdcard/android/layout_tests/editing/style/style-boundary-003.html
+/sdcard/android/layout_tests/editing/style/block-style-001.html
+/sdcard/android/layout_tests/editing/style/smoosh-styles-001.html
+/sdcard/android/layout_tests/editing/style/font-family-with-space.html
+/sdcard/android/layout_tests/editing/style/5084241.html
+/sdcard/android/layout_tests/editing/style/5065910.html
+/sdcard/android/layout_tests/editing/style/block-style-005.html
+/sdcard/android/layout_tests/editing/style/remove-underline-across-paragraph-in-bold.html
+/sdcard/android/layout_tests/editing/style/5279521.html
+/sdcard/android/layout_tests/editing/style/non-inheritable-styles.html
+/sdcard/android/layout_tests/editing/style/5046875-1.html
+/sdcard/android/layout_tests/editing/style/style-3998892-fix.html
+/sdcard/android/layout_tests/editing/style/typing-style-002.html
+/sdcard/android/layout_tests/editing/style/relative-font-size-change-001.html
+/sdcard/android/layout_tests/editing/style/4916887.html
+/sdcard/android/layout_tests/editing/style/remove-underline-across-paragraph.html
+/sdcard/android/layout_tests/editing/style/create-block-for-style-011.html
+/sdcard/android/layout_tests/editing/style/create-block-for-style-003.html
+/sdcard/android/layout_tests/editing/style/remove-underline.html
+/sdcard/android/layout_tests/editing/style/create-block-for-style-007.html
+/sdcard/android/layout_tests/editing/style/style-boundary-004.html
+/sdcard/android/layout_tests/editing/style/5017613-1.html
+/sdcard/android/layout_tests/editing/style/block-style-002.html
+/sdcard/android/layout_tests/editing/style/block-style-006.html
+/sdcard/android/layout_tests/editing/style/fontsize-1.html
+/sdcard/android/layout_tests/editing/style/5046875-2.html
+/sdcard/android/layout_tests/editing/style/typing-style-003.html
+/sdcard/android/layout_tests/editing/style/relative-font-size-change-002.html
+/sdcard/android/layout_tests/editing/style/create-block-for-style-012.html
+/sdcard/android/layout_tests/editing/style/create-block-for-style-004.html
+/sdcard/android/layout_tests/editing/style/designmode.html
+/sdcard/android/layout_tests/editing/style/block-styles-007.html
+/sdcard/android/layout_tests/editing/style/style-boundary-001.html
+/sdcard/android/layout_tests/editing/style/create-block-for-style-008.html
+/sdcard/android/layout_tests/editing/style/style-boundary-005.html
+/sdcard/android/layout_tests/editing/style/5017613-2.html
+/sdcard/android/layout_tests/editing/style/underline.html
+/sdcard/android/layout_tests/editing/style/block-style-003.html
+/sdcard/android/layout_tests/editing/style/smoosh-styles-003.html
+/sdcard/android/layout_tests/editing/style/remove-underline-after-paragraph-in-bold.html
+/sdcard/android/layout_tests/editing/style/highlight.html
+/sdcard/android/layout_tests/editing/style/relative-font-size-change-003.html
+/sdcard/android/layout_tests/editing/style/table-selection.html
+/sdcard/android/layout_tests/editing/style/create-block-for-style-001.html
+/sdcard/android/layout_tests/editing/unsupported-content/table-delete-001.html
+/sdcard/android/layout_tests/editing/unsupported-content/table-type-after.html
+/sdcard/android/layout_tests/editing/unsupported-content/table-delete-002.html
+/sdcard/android/layout_tests/editing/unsupported-content/table-type-before.html
+/sdcard/android/layout_tests/editing/unsupported-content/table-delete-003.html
+/sdcard/android/layout_tests/editing/unsupported-content/list-delete-001.html
+/sdcard/android/layout_tests/editing/unsupported-content/list-type-after.html
+/sdcard/android/layout_tests/editing/unsupported-content/list-type-before.html
+/sdcard/android/layout_tests/editing/unsupported-content/list-delete-003.html
+/sdcard/android/layout_tests/editing/inserting/insert-div-011.html
+/sdcard/android/layout_tests/editing/inserting/4960120-1.html
+/sdcard/android/layout_tests/editing/inserting/insert-div-023.html
+/sdcard/android/layout_tests/editing/inserting/insert-paragraph-04.html
+/sdcard/android/layout_tests/editing/inserting/insert-div-007.html
+/sdcard/android/layout_tests/editing/inserting/5058163-2.html
+/sdcard/android/layout_tests/editing/inserting/insert-div-019.html
+/sdcard/android/layout_tests/editing/inserting/insert-br-at-tabspan-003.html
+/sdcard/android/layout_tests/editing/inserting/5607069-2.html
+/sdcard/android/layout_tests/editing/inserting/6633727.html
+/sdcard/android/layout_tests/editing/inserting/6703873.html
+/sdcard/android/layout_tests/editing/inserting/insert-br-quoted-003.html
+/sdcard/android/layout_tests/editing/inserting/insert-br-003.html
+/sdcard/android/layout_tests/editing/inserting/4875189-1.html
+/sdcard/android/layout_tests/editing/inserting/typing-003.html
+/sdcard/android/layout_tests/editing/inserting/insert-3907422-fix.html
+/sdcard/android/layout_tests/editing/inserting/insert-div-020.html
+/sdcard/android/layout_tests/editing/inserting/before-after-input-element.html
+/sdcard/android/layout_tests/editing/inserting/insert-div-004.html
+/sdcard/android/layout_tests/editing/inserting/insert-paragraph-01.html
+/sdcard/android/layout_tests/editing/inserting/insert-div-016.html
+/sdcard/android/layout_tests/editing/inserting/5510537.html
+/sdcard/android/layout_tests/editing/inserting/4959067.html
+/sdcard/android/layout_tests/editing/inserting/insert-br-008.html
+/sdcard/android/layout_tests/editing/inserting/insert-text-at-tabspan-001.html
+/sdcard/android/layout_tests/editing/inserting/insert-div-001.html
+/sdcard/android/layout_tests/editing/inserting/paragraph-separator-02.html
+/sdcard/android/layout_tests/editing/inserting/insert-div-013.html
+/sdcard/android/layout_tests/editing/inserting/insert-div-025.html
+/sdcard/android/layout_tests/editing/inserting/insert-3654864-fix.html
+/sdcard/android/layout_tests/editing/inserting/insert-div-009.html
+/sdcard/android/layout_tests/editing/inserting/return-key-with-selection-002.html
+/sdcard/android/layout_tests/editing/inserting/editable-html-element.html
+/sdcard/android/layout_tests/editing/inserting/5418891.html
+/sdcard/android/layout_tests/editing/inserting/insert-br-quoted-005.html
+/sdcard/android/layout_tests/editing/inserting/insert-tab-002.html
+/sdcard/android/layout_tests/editing/inserting/insert-br-005.html
+/sdcard/android/layout_tests/editing/inserting/line-break.html
+/sdcard/android/layout_tests/editing/inserting/5549929-3.html
+/sdcard/android/layout_tests/editing/inserting/typing-tab-designmode-forms.html
+/sdcard/android/layout_tests/editing/inserting/insert-div-010.html
+/sdcard/android/layout_tests/editing/inserting/insert-div-022.html
+/sdcard/android/layout_tests/editing/inserting/insert-paragraph-03.html
+/sdcard/android/layout_tests/editing/inserting/insert-div-006.html
+/sdcard/android/layout_tests/editing/inserting/5058163-1.html
+/sdcard/android/layout_tests/editing/inserting/insert-div-018.html
+/sdcard/android/layout_tests/editing/inserting/paragraph-separator-in-table-2.html
+/sdcard/android/layout_tests/editing/inserting/insert-br-at-tabspan-002.html
+/sdcard/android/layout_tests/editing/inserting/insert-br-quoted-002.html
+/sdcard/android/layout_tests/editing/inserting/insert-br-002.html
+/sdcard/android/layout_tests/editing/inserting/typing-002.html
+/sdcard/android/layout_tests/editing/inserting/insert-3800346-fix.html
+/sdcard/android/layout_tests/editing/inserting/typing-around-image-001.html
+/sdcard/android/layout_tests/editing/inserting/insert-text-at-tabspan-003.html
+/sdcard/android/layout_tests/editing/inserting/insert-text-with-newlines.html
+/sdcard/android/layout_tests/editing/inserting/insert-div-003.html
+/sdcard/android/layout_tests/editing/inserting/insert-div-015.html
+/sdcard/android/layout_tests/editing/inserting/insert-at-end-02.html
+/sdcard/android/layout_tests/editing/inserting/insert-div-027.html
+/sdcard/android/layout_tests/editing/inserting/insert-3659587-fix.html
+/sdcard/android/layout_tests/editing/inserting/insert-br-007.html
+/sdcard/android/layout_tests/editing/inserting/insert-tab-004.html
+/sdcard/android/layout_tests/editing/inserting/editable-inline-element.html
+/sdcard/android/layout_tests/editing/inserting/paragraph-separator-01.html
+/sdcard/android/layout_tests/editing/inserting/insert-3851164-fix.html
+/sdcard/android/layout_tests/editing/inserting/5156401-2.html
+/sdcard/android/layout_tests/editing/inserting/4960120-2.html
+/sdcard/android/layout_tests/editing/inserting/insert-div-012.html
+/sdcard/android/layout_tests/editing/inserting/insert-div-024.html
+/sdcard/android/layout_tests/editing/inserting/multiple-lines-selected.html
+/sdcard/android/layout_tests/editing/inserting/insert-div-008.html
+/sdcard/android/layout_tests/editing/inserting/insert-paragraph-05.html
+/sdcard/android/layout_tests/editing/inserting/insert-3778059-fix.html
+/sdcard/android/layout_tests/editing/inserting/return-key-with-selection-001.html
+/sdcard/android/layout_tests/editing/inserting/5607069-3.html
+/sdcard/android/layout_tests/editing/inserting/insert-br-quoted-004.html
+/sdcard/android/layout_tests/editing/inserting/insert-br-004.html
+/sdcard/android/layout_tests/editing/inserting/insert-tab-001.html
+/sdcard/android/layout_tests/editing/inserting/4875189-2.html
+/sdcard/android/layout_tests/editing/inserting/5549929-2.html
+/sdcard/android/layout_tests/editing/inserting/editing-empty-divs.html
+/sdcard/android/layout_tests/editing/inserting/insert-div-021.html
+/sdcard/android/layout_tests/editing/inserting/insert-div-005.html
+/sdcard/android/layout_tests/editing/inserting/insert-paragraph-02.html
+/sdcard/android/layout_tests/editing/inserting/insert-3786362-fix.html
+/sdcard/android/layout_tests/editing/inserting/insert-div-017.html
+/sdcard/android/layout_tests/editing/inserting/paragraph-separator-in-table-1.html
+/sdcard/android/layout_tests/editing/inserting/insert-br-at-tabspan-001.html
+/sdcard/android/layout_tests/editing/inserting/insert-space-in-empty-doc.html
+/sdcard/android/layout_tests/editing/inserting/insert-after-delete-001.html
+/sdcard/android/layout_tests/editing/inserting/insert-br-quoted-001.html
+/sdcard/android/layout_tests/editing/inserting/insert-br-001.html
+/sdcard/android/layout_tests/editing/inserting/typing-001.html
+/sdcard/android/layout_tests/editing/inserting/insert-br-009.html
+/sdcard/android/layout_tests/editing/inserting/4278698.html
+/sdcard/android/layout_tests/editing/inserting/insert-text-at-tabspan-002.html
+/sdcard/android/layout_tests/editing/inserting/5002441.html
+/sdcard/android/layout_tests/editing/inserting/insert-div-002.html
+/sdcard/android/layout_tests/editing/inserting/paragraph-separator-03.html
+/sdcard/android/layout_tests/editing/inserting/12882.html
+/sdcard/android/layout_tests/editing/inserting/insert-3775316-fix.html
+/sdcard/android/layout_tests/editing/inserting/insert-div-014.html
+/sdcard/android/layout_tests/editing/inserting/edited-whitespace-1.html
+/sdcard/android/layout_tests/editing/inserting/insert-at-end-01.html
+/sdcard/android/layout_tests/editing/inserting/insert-div-026.html
+/sdcard/android/layout_tests/editing/inserting/break-blockquote-after-delete.html
+/sdcard/android/layout_tests/editing/inserting/redo.html
+/sdcard/android/layout_tests/editing/inserting/4840662.html
+/sdcard/android/layout_tests/editing/inserting/typing-around-br-001.html
+/sdcard/android/layout_tests/editing/inserting/return-key-with-selection-003.html
+/sdcard/android/layout_tests/editing/inserting/insert-br-quoted-006.html
+/sdcard/android/layout_tests/editing/inserting/insert-tab-003.html
+/sdcard/android/layout_tests/editing/inserting/insert-br-006.html
+/sdcard/android/layout_tests/editing/execCommand/5142012-1.html
+/sdcard/android/layout_tests/editing/execCommand/hilitecolor.html
+/sdcard/android/layout_tests/editing/execCommand/format-block-with-braces.html
+/sdcard/android/layout_tests/editing/execCommand/outdent-blockquote-test3.html
+/sdcard/android/layout_tests/editing/execCommand/4920742-1.html
+/sdcard/android/layout_tests/editing/execCommand/4924441.html
+/sdcard/android/layout_tests/editing/execCommand/create-list-with-hr.html
+/sdcard/android/layout_tests/editing/execCommand/format-block-with-trailing-br.html
+/sdcard/android/layout_tests/editing/execCommand/remove-formatting-2.html
+/sdcard/android/layout_tests/editing/execCommand/outdent-selection.html
+/sdcard/android/layout_tests/editing/execCommand/strikethroughSelection.html
+/sdcard/android/layout_tests/editing/execCommand/5482023.html
+/sdcard/android/layout_tests/editing/execCommand/4786404-1.html
+/sdcard/android/layout_tests/editing/execCommand/remove-formatting.html
+/sdcard/android/layout_tests/editing/execCommand/findString.html
+/sdcard/android/layout_tests/editing/execCommand/italicizeByCharacter.html
+/sdcard/android/layout_tests/editing/execCommand/create-list-from-range-selection.html
+/sdcard/android/layout_tests/editing/execCommand/5190926.html
+/sdcard/android/layout_tests/editing/execCommand/insertHorizontalRule.html
+/sdcard/android/layout_tests/editing/execCommand/paste-1.html
+/sdcard/android/layout_tests/editing/execCommand/nsresponder-outdent.html
+/sdcard/android/layout_tests/editing/execCommand/toggle-compound-styles.html
+/sdcard/android/layout_tests/editing/execCommand/5080333-2.html
+/sdcard/android/layout_tests/editing/execCommand/outdent-blockquote-test2.html
+/sdcard/android/layout_tests/editing/execCommand/5049671.html
+/sdcard/android/layout_tests/editing/execCommand/4920488.html
+/sdcard/android/layout_tests/editing/execCommand/nsresponder-indent.html
+/sdcard/android/layout_tests/editing/execCommand/indent-list-item.html
+/sdcard/android/layout_tests/editing/execCommand/4916402.html
+/sdcard/android/layout_tests/editing/execCommand/5138441.html
+/sdcard/android/layout_tests/editing/execCommand/insert-list-empty-div.html
+/sdcard/android/layout_tests/editing/execCommand/5481523.html
+/sdcard/android/layout_tests/editing/execCommand/print.html
+/sdcard/android/layout_tests/editing/execCommand/4641880-2.html
+/sdcard/android/layout_tests/editing/execCommand/4580583-2.html
+/sdcard/android/layout_tests/editing/execCommand/remove-list-item-1.html
+/sdcard/android/layout_tests/editing/execCommand/5569741.html
+/sdcard/android/layout_tests/editing/execCommand/findString-2.html
+/sdcard/android/layout_tests/editing/execCommand/modifyForeColorByCharacter.html
+/sdcard/android/layout_tests/editing/execCommand/5142012-2.html
+/sdcard/android/layout_tests/editing/execCommand/find-after-replace.html
+/sdcard/android/layout_tests/editing/execCommand/outdent-blockquote-test4.html
+/sdcard/android/layout_tests/editing/execCommand/format-block.html
+/sdcard/android/layout_tests/editing/execCommand/5080333-1.html
+/sdcard/android/layout_tests/editing/execCommand/remove-list-from-range-selection.html
+/sdcard/android/layout_tests/editing/execCommand/outdent-blockquote-test1.html
+/sdcard/android/layout_tests/editing/execCommand/5136770.html
+/sdcard/android/layout_tests/editing/execCommand/4916541.html
+/sdcard/android/layout_tests/editing/execCommand/4786404-2.html
+/sdcard/android/layout_tests/editing/execCommand/insertImage.html
+/sdcard/android/layout_tests/editing/execCommand/insert-list-and-stitch.html
+/sdcard/android/layout_tests/editing/execCommand/5573879.html
+/sdcard/android/layout_tests/editing/execCommand/4641880-1.html
+/sdcard/android/layout_tests/editing/execCommand/4580583-1.html
+/sdcard/android/layout_tests/editing/execCommand/4747450.html
+/sdcard/android/layout_tests/editing/execCommand/format-block-from-range-selection.html
+/sdcard/android/layout_tests/editing/execCommand/indent-empty-root.html
+/sdcard/android/layout_tests/editing/execCommand/indent-selection.html
+/sdcard/android/layout_tests/editing/execCommand/selectAll.html
+/sdcard/android/layout_tests/editing/execCommand/paste-2.html
+/sdcard/android/layout_tests/editing/pasteboard/subframe-dragndrop-1.html
+/sdcard/android/layout_tests/editing/pasteboard/innerText-inline-table.html
+/sdcard/android/layout_tests/editing/pasteboard/5156401-1.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-list-001.html
+/sdcard/android/layout_tests/editing/pasteboard/4242293-1.html
+/sdcard/android/layout_tests/editing/pasteboard/5032095.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-line-endings-004.html
+/sdcard/android/layout_tests/editing/pasteboard/5247341.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-4035648-fix.html
+/sdcard/android/layout_tests/editing/pasteboard/4700297.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-text-003.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-blockquote-into-blockquote.html
+/sdcard/android/layout_tests/editing/pasteboard/drop-link.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-blockquote-into-blockquote-3.html
+/sdcard/android/layout_tests/editing/pasteboard/4944770-1.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-text-015.html
+/sdcard/android/layout_tests/editing/pasteboard/5075944.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-match-style-001.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-4039777-fix.html
+/sdcard/android/layout_tests/editing/pasteboard/merge-end-3.html
+/sdcard/android/layout_tests/editing/pasteboard/smart-paste-007.html
+/sdcard/android/layout_tests/editing/pasteboard/5483567.html
+/sdcard/android/layout_tests/editing/pasteboard/7955.html
+/sdcard/android/layout_tests/editing/pasteboard/merge-end-blockquote.html
+/sdcard/android/layout_tests/editing/pasteboard/testcase-9507.html
+/sdcard/android/layout_tests/editing/pasteboard/input-field-1.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-line-endings-001.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-text-at-tabspan-001.html
+/sdcard/android/layout_tests/editing/pasteboard/interchange-newline-2.html
+/sdcard/android/layout_tests/editing/pasteboard/block-wrappers-necessary.html
+/sdcard/android/layout_tests/editing/pasteboard/4861080.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-line-endings-009.html
+/sdcard/android/layout_tests/editing/pasteboard/merge-after-delete.html
+/sdcard/android/layout_tests/editing/pasteboard/5478250.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-text-012.html
+/sdcard/android/layout_tests/editing/pasteboard/prevent-block-nesting-01.html
+/sdcard/android/layout_tests/editing/pasteboard/8145-2.html
+/sdcard/android/layout_tests/editing/pasteboard/merge-end-borders.html
+/sdcard/android/layout_tests/editing/pasteboard/5027857.html
+/sdcard/android/layout_tests/editing/pasteboard/smart-paste-004.html
+/sdcard/android/layout_tests/editing/pasteboard/merge-start-list.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-text-008.html
+/sdcard/android/layout_tests/editing/pasteboard/4806874.html
+/sdcard/android/layout_tests/editing/pasteboard/emacs-ctrl-a-k-y.html
+/sdcard/android/layout_tests/editing/pasteboard/bad-placeholder.html
+/sdcard/android/layout_tests/editing/pasteboard/displaced-placeholder.html
+/sdcard/android/layout_tests/editing/pasteboard/5387578.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-blockquote-1.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-line-endings-010.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-line-endings-006.html
+/sdcard/android/layout_tests/editing/pasteboard/5601583-1.html
+/sdcard/android/layout_tests/editing/pasteboard/4947130.html
+/sdcard/android/layout_tests/editing/pasteboard/pasting-tabs.html
+/sdcard/android/layout_tests/editing/pasteboard/merge-after-delete-2.html
+/sdcard/android/layout_tests/editing/pasteboard/smart-paste-001.html
+/sdcard/android/layout_tests/editing/pasteboard/4076267-2.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-table-001.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-text-005.html
+/sdcard/android/layout_tests/editing/pasteboard/5089327.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-text-017.html
+/sdcard/android/layout_tests/editing/pasteboard/merge-end-5.html
+/sdcard/android/layout_tests/editing/pasteboard/drop-text-without-selection.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-text-at-tabspan-003.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-line-endings-003.html
+/sdcard/android/layout_tests/editing/pasteboard/drag-drop-modifies-page.html
+/sdcard/android/layout_tests/editing/pasteboard/emacs-ctrl-k-y-001.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-blockquote-after-blockquote.html
+/sdcard/android/layout_tests/editing/pasteboard/5071074.html
+/sdcard/android/layout_tests/editing/pasteboard/interchange-newline-4.html
+/sdcard/android/layout_tests/editing/pasteboard/styled-element-markup.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-4038267-fix.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-text-002.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-blockquote-into-blockquote-2.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-pre-002.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-text-014.html
+/sdcard/android/layout_tests/editing/pasteboard/drag-drop-dead-frame.html
+/sdcard/android/layout_tests/editing/pasteboard/merge-end-2.html
+/sdcard/android/layout_tests/editing/pasteboard/smart-paste-006.html
+/sdcard/android/layout_tests/editing/pasteboard/5368833.html
+/sdcard/android/layout_tests/editing/pasteboard/select-element-1.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-blockquote-3.html
+/sdcard/android/layout_tests/editing/pasteboard/4641033.html
+/sdcard/android/layout_tests/editing/pasteboard/drag-image-to-contenteditable-in-iframe.html
+/sdcard/android/layout_tests/editing/pasteboard/interchange-newline-1.html
+/sdcard/android/layout_tests/editing/pasteboard/copy-paste-bidi.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-line-endings-008.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-text-011.html
+/sdcard/android/layout_tests/editing/pasteboard/8145-1.html
+/sdcard/android/layout_tests/editing/pasteboard/smart-paste-003.html
+/sdcard/android/layout_tests/editing/pasteboard/5075944-3.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-table-003.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-TIFF.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-text-007.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-text-019.html
+/sdcard/android/layout_tests/editing/pasteboard/undoable-fragment-removes.html
+/sdcard/android/layout_tests/editing/pasteboard/nested-blocks-with-text-field.html
+/sdcard/android/layout_tests/editing/pasteboard/4989774.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-unrendered-select.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-line-endings-005.html
+/sdcard/android/layout_tests/editing/pasteboard/emacs-cntl-y-001.html
+/sdcard/android/layout_tests/editing/pasteboard/merge-after-delete-1.html
+/sdcard/android/layout_tests/editing/pasteboard/unrendered-br.html
+/sdcard/android/layout_tests/editing/pasteboard/4631972.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-text-004.html
+/sdcard/android/layout_tests/editing/pasteboard/quirks-mode-br-1.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-blockquote-into-blockquote-4.html
+/sdcard/android/layout_tests/editing/pasteboard/4944770-2.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-table-cells.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-text-016.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-match-style-002.html
+/sdcard/android/layout_tests/editing/pasteboard/merge-end-4.html
+/sdcard/android/layout_tests/editing/pasteboard/drag-selected-image-to-contenteditable.html
+/sdcard/android/layout_tests/editing/pasteboard/smart-paste-008.html
+/sdcard/android/layout_tests/editing/pasteboard/3976872.html
+/sdcard/android/layout_tests/editing/pasteboard/pasting-object.html
+/sdcard/android/layout_tests/editing/pasteboard/merge-end-list.html
+/sdcard/android/layout_tests/editing/pasteboard/copy-standalone-image.html
+/sdcard/android/layout_tests/editing/pasteboard/displaced-generic-placeholder.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-line-endings-002.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-text-at-tabspan-002.html
+/sdcard/android/layout_tests/editing/pasteboard/interchange-newline-3.html
+/sdcard/android/layout_tests/editing/pasteboard/5071074-2.html
+/sdcard/android/layout_tests/editing/pasteboard/display-block-on-spans.html
+/sdcard/android/layout_tests/editing/pasteboard/4242293.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-text-001.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-pre-001.html
+/sdcard/android/layout_tests/editing/pasteboard/merge-start-blockquote.html
+/sdcard/android/layout_tests/editing/pasteboard/merge-end-1.html
+/sdcard/android/layout_tests/editing/pasteboard/8145-3.html
+/sdcard/android/layout_tests/editing/pasteboard/5006779.html
+/sdcard/android/layout_tests/editing/pasteboard/smart-paste-005.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-text-009.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-blockquote-2.html
+/sdcard/android/layout_tests/editing/pasteboard/merge-end-table.html
+/sdcard/android/layout_tests/editing/pasteboard/5065605.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-line-endings-007.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-text-010.html
+/sdcard/android/layout_tests/editing/pasteboard/5028447.html
+/sdcard/android/layout_tests/editing/pasteboard/nested-blocks-with-text-area.html
+/sdcard/android/layout_tests/editing/pasteboard/4076267-3.html
+/sdcard/android/layout_tests/editing/pasteboard/4076267.html
+/sdcard/android/layout_tests/editing/pasteboard/smart-paste-002.html
+/sdcard/android/layout_tests/editing/pasteboard/5075944-2.html
+/sdcard/android/layout_tests/editing/pasteboard/5134759.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-text-006.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-text-018.html
+/sdcard/android/layout_tests/editing/pasteboard/paste-RTFD.html
+/sdcard/android/layout_tests/editing/pasteboard/cut-text-001.html
+/sdcard/android/layout_tests/editing/selection/mixed-editability-9.html
+/sdcard/android/layout_tests/editing/selection/fake-drag.html
+/sdcard/android/layout_tests/editing/selection/wrapped-line-caret-2.html
+/sdcard/android/layout_tests/editing/selection/unrendered-002.html
+/sdcard/android/layout_tests/editing/selection/3690703-2.html
+/sdcard/android/layout_tests/editing/selection/extend-by-character-005.html
+/sdcard/android/layout_tests/editing/selection/caret-rtl-2.html
+/sdcard/android/layout_tests/editing/selection/paragraph-granularity.html
+/sdcard/android/layout_tests/editing/selection/clear-selection.html
+/sdcard/android/layout_tests/editing/selection/mixed-editability-6.html
+/sdcard/android/layout_tests/editing/selection/drag-in-iframe.html
+/sdcard/android/layout_tests/editing/selection/unrendered-space.html
+/sdcard/android/layout_tests/editing/selection/extend-by-character-002.html
+/sdcard/android/layout_tests/editing/selection/4932260-2.html
+/sdcard/android/layout_tests/editing/selection/select-element-paragraph-boundary.html
+/sdcard/android/layout_tests/editing/selection/extend-by-sentence-001.html
+/sdcard/android/layout_tests/editing/selection/3690719.html
+/sdcard/android/layout_tests/editing/selection/editable-non-editable-crash.html
+/sdcard/android/layout_tests/editing/selection/mixed-editability-3.html
+/sdcard/android/layout_tests/editing/selection/replaced-boundaries-3.html
+/sdcard/android/layout_tests/editing/selection/move-by-sentence-linebreak.html
+/sdcard/android/layout_tests/editing/selection/move-by-character-005.html
+/sdcard/android/layout_tests/editing/selection/end-of-document.html
+/sdcard/android/layout_tests/editing/selection/selectNode.html
+/sdcard/android/layout_tests/editing/selection/editable-links.html
+/sdcard/android/layout_tests/editing/selection/extend-by-word-002.html
+/sdcard/android/layout_tests/editing/selection/move-by-character-002.html
+/sdcard/android/layout_tests/editing/selection/14971.html
+/sdcard/android/layout_tests/editing/selection/5131716-2.html
+/sdcard/android/layout_tests/editing/selection/5081257-1.html
+/sdcard/android/layout_tests/editing/selection/move-3875641-fix.html
+/sdcard/android/layout_tests/editing/selection/5099303.html
+/sdcard/android/layout_tests/editing/selection/move-by-line-002.html
+/sdcard/android/layout_tests/editing/selection/select-missing-image.html
+/sdcard/android/layout_tests/editing/selection/selection-3748164-fix.html
+/sdcard/android/layout_tests/editing/selection/4983858.html
+/sdcard/android/layout_tests/editing/selection/move-by-sentence-001.html
+/sdcard/android/layout_tests/editing/selection/table-caret-1.html
+/sdcard/android/layout_tests/editing/selection/move-by-word-001.html
+/sdcard/android/layout_tests/editing/selection/select-all-004.html
+/sdcard/android/layout_tests/editing/selection/5076323-2.html
+/sdcard/android/layout_tests/editing/selection/move-3875618-fix.html
+/sdcard/android/layout_tests/editing/selection/inline-table.html
+/sdcard/android/layout_tests/editing/selection/4895428-3.html
+/sdcard/android/layout_tests/editing/selection/caret-before-select.html
+/sdcard/android/layout_tests/editing/selection/select-all-001.html
+/sdcard/android/layout_tests/editing/selection/unrendered-003.html
+/sdcard/android/layout_tests/editing/selection/extend-by-character-006.html
+/sdcard/android/layout_tests/editing/selection/7152-1.html
+/sdcard/android/layout_tests/editing/selection/iframe.html
+/sdcard/android/layout_tests/editing/selection/mixed-editability-7.html
+/sdcard/android/layout_tests/editing/selection/select-all-iframe.html
+/sdcard/android/layout_tests/editing/selection/extend-by-character-003.html
+/sdcard/android/layout_tests/editing/selection/4932260-3.html
+/sdcard/android/layout_tests/editing/selection/4960116.html
+/sdcard/android/layout_tests/editing/selection/drag-to-contenteditable-iframe.html
+/sdcard/android/layout_tests/editing/selection/selectNodeContents.html
+/sdcard/android/layout_tests/editing/selection/mixed-editability-4.html
+/sdcard/android/layout_tests/editing/selection/focus-body.html
+/sdcard/android/layout_tests/editing/selection/designmode-no-caret.html
+/sdcard/android/layout_tests/editing/selection/5234383-1.html
+/sdcard/android/layout_tests/editing/selection/5232159.html
+/sdcard/android/layout_tests/editing/selection/4960137.html
+/sdcard/android/layout_tests/editing/selection/previous-line-position.html
+/sdcard/android/layout_tests/editing/selection/mixed-editability-1.html
+/sdcard/android/layout_tests/editing/selection/replaced-boundaries-1.html
+/sdcard/android/layout_tests/editing/selection/move-by-character-003.html
+/sdcard/android/layout_tests/editing/selection/4776665.html
+/sdcard/android/layout_tests/editing/selection/move-by-character-6.html
+/sdcard/android/layout_tests/editing/selection/image-before-linebreak.html
+/sdcard/android/layout_tests/editing/selection/move-between-blocks-no-001.html
+/sdcard/android/layout_tests/editing/selection/5131716-3.html
+/sdcard/android/layout_tests/editing/selection/5081257-2.html
+/sdcard/android/layout_tests/editing/selection/5354455-1.html
+/sdcard/android/layout_tests/editing/selection/expanding-selections2.html
+/sdcard/android/layout_tests/editing/selection/display-table-text.html
+/sdcard/android/layout_tests/editing/selection/13804.html
+/sdcard/android/layout_tests/editing/selection/table-caret-2.html
+/sdcard/android/layout_tests/editing/selection/expanding-selections.html
+/sdcard/android/layout_tests/editing/selection/node-removal-1.html
+/sdcard/android/layout_tests/editing/selection/5240265.html
+/sdcard/android/layout_tests/editing/selection/select-all-005.html
+/sdcard/android/layout_tests/editing/selection/5076323-3.html
+/sdcard/android/layout_tests/editing/selection/line-wrap-1.html
+/sdcard/android/layout_tests/editing/selection/replace-selection-1.html
+/sdcard/android/layout_tests/editing/selection/caret-rtl.html
+/sdcard/android/layout_tests/editing/selection/5109817.html
+/sdcard/android/layout_tests/editing/selection/5136696.html
+/sdcard/android/layout_tests/editing/selection/4397952.html
+/sdcard/android/layout_tests/editing/selection/caret-and-focus-ring.html
+/sdcard/android/layout_tests/editing/selection/4895428-4.html
+/sdcard/android/layout_tests/editing/selection/4947387.html
+/sdcard/android/layout_tests/editing/selection/select-from-textfield-outwards.html
+/sdcard/android/layout_tests/editing/selection/leave-requested-block.html
+/sdcard/android/layout_tests/editing/selection/select-all-002.html
+/sdcard/android/layout_tests/editing/selection/unrendered-004.html
+/sdcard/android/layout_tests/editing/selection/7152-2.html
+/sdcard/android/layout_tests/editing/selection/5195166-1.html
+/sdcard/android/layout_tests/editing/selection/editable-html-element.html
+/sdcard/android/layout_tests/editing/selection/4866671.html
+/sdcard/android/layout_tests/editing/selection/4895428-1.html
+/sdcard/android/layout_tests/editing/selection/mixed-editability-8.html
+/sdcard/android/layout_tests/editing/selection/wrapped-line-caret-1.html
+/sdcard/android/layout_tests/editing/selection/selection-actions.html
+/sdcard/android/layout_tests/editing/selection/4402375.html
+/sdcard/android/layout_tests/editing/selection/unrendered-001.html
+/sdcard/android/layout_tests/editing/selection/extend-by-character-004.html
+/sdcard/android/layout_tests/editing/selection/contenteditable-click-inside.html
+/sdcard/android/layout_tests/editing/selection/addRange.html
+/sdcard/android/layout_tests/editing/selection/mixed-editability-5.html
+/sdcard/android/layout_tests/editing/selection/5007143.html
+/sdcard/android/layout_tests/editing/selection/fake-doubleclick.html
+/sdcard/android/layout_tests/editing/selection/extend-by-character-001.html
+/sdcard/android/layout_tests/editing/selection/4932260-1.html
+/sdcard/android/layout_tests/editing/selection/5234383-2.html
+/sdcard/android/layout_tests/editing/selection/5057506.html
+/sdcard/android/layout_tests/editing/selection/focus_editable_html.html
+/sdcard/android/layout_tests/editing/selection/4818145.html
+/sdcard/android/layout_tests/editing/selection/move-backwords-by-word-001.html
+/sdcard/android/layout_tests/editing/selection/mixed-editability-2.html
+/sdcard/android/layout_tests/editing/selection/replaced-boundaries-2.html
+/sdcard/android/layout_tests/editing/selection/move-by-character-004.html
+/sdcard/android/layout_tests/editing/selection/4889598.html
+/sdcard/android/layout_tests/editing/selection/5131716-4.html
+/sdcard/android/layout_tests/editing/selection/3690703.html
+/sdcard/android/layout_tests/editing/selection/5333725.html
+/sdcard/android/layout_tests/editing/selection/5354455-2.html
+/sdcard/android/layout_tests/editing/selection/selection-background.html
+/sdcard/android/layout_tests/editing/selection/extend-by-word-001.html
+/sdcard/android/layout_tests/editing/selection/move-by-character-001.html
+/sdcard/android/layout_tests/editing/selection/doubleclick-crash.html
+/sdcard/android/layout_tests/editing/selection/table-caret-3.html
+/sdcard/android/layout_tests/editing/selection/5131716-1.html
+/sdcard/android/layout_tests/editing/selection/node-removal-2.html
+/sdcard/android/layout_tests/editing/selection/drag-select-1.html
+/sdcard/android/layout_tests/editing/selection/select-all-006.html
+/sdcard/android/layout_tests/editing/selection/after-line-wrap.html
+/sdcard/android/layout_tests/editing/selection/line-wrap-2.html
+/sdcard/android/layout_tests/editing/selection/move-by-line-001.html
+/sdcard/android/layout_tests/editing/selection/move-between-blocks-yes-001.html
+/sdcard/android/layout_tests/editing/selection/6476.html
+/sdcard/android/layout_tests/editing/selection/contains-boundaries.html
+/sdcard/android/layout_tests/editing/selection/click-start-of-line.html
+/sdcard/android/layout_tests/editing/selection/triple-click-in-pre.html
+/sdcard/android/layout_tests/editing/selection/move-past-trailing-space.html
+/sdcard/android/layout_tests/editing/selection/inline-closest-leaf-child.html
+/sdcard/android/layout_tests/editing/selection/5007143-2.html
+/sdcard/android/layout_tests/editing/selection/select-all-003.html
+/sdcard/android/layout_tests/editing/selection/5076323-1.html
+/sdcard/android/layout_tests/editing/selection/5057506-2.html
+/sdcard/android/layout_tests/editing/selection/4975120.html
+/sdcard/android/layout_tests/editing/selection/unrendered-005.html
+/sdcard/android/layout_tests/editing/selection/5195166-2.html
+/sdcard/android/layout_tests/editing/selection/select-box.html
+/sdcard/android/layout_tests/editing/selection/4895428-2.html
+/sdcard/android/layout_tests/editing/selection/word-granularity.html
+/sdcard/android/layout_tests/editing/undo/undo-misspellings.html
+/sdcard/android/layout_tests/editing/undo/undo-combined-delete.html
+/sdcard/android/layout_tests/editing/undo/undo-delete-boundary.html
+/sdcard/android/layout_tests/editing/undo/undo-forward-delete-boundary.html
+/sdcard/android/layout_tests/editing/undo/4063751.html
+/sdcard/android/layout_tests/editing/undo/redo-typing-001.html
+/sdcard/android/layout_tests/editing/undo/5378473.html
+/sdcard/android/layout_tests/editing/undo/undo-combined-delete-boundary.html
+/sdcard/android/layout_tests/editing/undo/undo-delete.html
+/sdcard/android/layout_tests/editing/undo/undo-forward-delete.html
+/sdcard/android/layout_tests/editing/undo/undo-typing-001.html
+/sdcard/android/layout_tests/editing/deleting/delete-3608462-fix.html
+/sdcard/android/layout_tests/editing/deleting/delete-image-001.html
+/sdcard/android/layout_tests/editing/deleting/delete-3928305-fix.html
+/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-012.html
+/sdcard/android/layout_tests/editing/deleting/5115601.html
+/sdcard/android/layout_tests/editing/deleting/deletionUI-single-instance.html
+/sdcard/android/layout_tests/editing/deleting/delete-block-contents-001.html
+/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-024.html
+/sdcard/android/layout_tests/editing/deleting/delete-after-span-ws-001.html
+/sdcard/android/layout_tests/editing/deleting/delete-line-011.html
+/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-008.html
+/sdcard/android/layout_tests/editing/deleting/delete-listitem-001.html
+/sdcard/android/layout_tests/editing/deleting/5300379.html
+/sdcard/android/layout_tests/editing/deleting/delete-line-007.html
+/sdcard/android/layout_tests/editing/deleting/5433862-2.html
+/sdcard/android/layout_tests/editing/deleting/5026848-1.html
+/sdcard/android/layout_tests/editing/deleting/delete-at-paragraph-boundaries-003.html
+/sdcard/android/layout_tests/editing/deleting/delete-br-012.html
+/sdcard/android/layout_tests/editing/deleting/delete-br-008.html
+/sdcard/android/layout_tests/editing/deleting/5206311-2.html
+/sdcard/android/layout_tests/editing/deleting/delete-at-start-or-end.html
+/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-021.html
+/sdcard/android/layout_tests/editing/deleting/delete-ws-fixup-004.html
+/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-005.html
+/sdcard/android/layout_tests/editing/deleting/delete-select-all-003.html
+/sdcard/android/layout_tests/editing/deleting/smart-delete-002.html
+/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-017.html
+/sdcard/android/layout_tests/editing/deleting/table-cells.html
+/sdcard/android/layout_tests/editing/deleting/5156801-2.html
+/sdcard/android/layout_tests/editing/deleting/delete-leading-ws-001.html
+/sdcard/android/layout_tests/editing/deleting/delete-line-004.html
+/sdcard/android/layout_tests/editing/deleting/delete-3857753-fix.html
+/sdcard/android/layout_tests/editing/deleting/delete-3959464-fix.html
+/sdcard/android/layout_tests/editing/deleting/delete-line-016.html
+/sdcard/android/layout_tests/editing/deleting/delete-trailing-ws-001.html
+/sdcard/android/layout_tests/editing/deleting/delete-br-005.html
+/sdcard/android/layout_tests/editing/deleting/delete-at-paragraph-boundaries-008.html
+/sdcard/android/layout_tests/editing/deleting/delete-tab-004.html
+/sdcard/android/layout_tests/editing/deleting/merge-whitespace-pre.html
+/sdcard/android/layout_tests/editing/deleting/delete-ws-fixup-001.html
+/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-002.html
+/sdcard/android/layout_tests/editing/deleting/delete-line-end-ws-002.html
+/sdcard/android/layout_tests/editing/deleting/merge-unrendered-space.html
+/sdcard/android/layout_tests/editing/deleting/delete-by-word-002.html
+/sdcard/android/layout_tests/editing/deleting/delete-image-003.html
+/sdcard/android/layout_tests/editing/deleting/delete-selection-001.html
+/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-014.html
+/sdcard/android/layout_tests/editing/deleting/merge-different-styles.html
+/sdcard/android/layout_tests/editing/deleting/delete-line-001.html
+/sdcard/android/layout_tests/editing/deleting/delete-block-contents-003.html
+/sdcard/android/layout_tests/editing/deleting/delete-after-span-ws-003.html
+/sdcard/android/layout_tests/editing/deleting/merge-into-empty-block-1.html
+/sdcard/android/layout_tests/editing/deleting/delete-line-013.html
+/sdcard/android/layout_tests/editing/deleting/delete-3865854-fix.html
+/sdcard/android/layout_tests/editing/deleting/delete-line-009.html
+/sdcard/android/layout_tests/editing/deleting/5026848-3.html
+/sdcard/android/layout_tests/editing/deleting/delete-at-paragraph-boundaries-005.html
+/sdcard/android/layout_tests/editing/deleting/delete-br-002.html
+/sdcard/android/layout_tests/editing/deleting/delete-tab-001.html
+/sdcard/android/layout_tests/editing/deleting/whitespace-pre-1.html
+/sdcard/android/layout_tests/editing/deleting/delete-block-table.html
+/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-011.html
+/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-023.html
+/sdcard/android/layout_tests/editing/deleting/delete-line-010.html
+/sdcard/android/layout_tests/editing/deleting/5032066.html
+/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-007.html
+/sdcard/android/layout_tests/editing/deleting/smart-delete-004.html
+/sdcard/android/layout_tests/editing/deleting/5144139-2.html
+/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-019.html
+/sdcard/android/layout_tests/editing/deleting/delete-line-006.html
+/sdcard/android/layout_tests/editing/deleting/5126166.html
+/sdcard/android/layout_tests/editing/deleting/delete-to-end-of-paragraph.html
+/sdcard/android/layout_tests/editing/deleting/5408255.html
+/sdcard/android/layout_tests/editing/deleting/5099303.html
+/sdcard/android/layout_tests/editing/deleting/4845371.html
+/sdcard/android/layout_tests/editing/deleting/delete-at-paragraph-boundaries-002.html
+/sdcard/android/layout_tests/editing/deleting/4922367.html
+/sdcard/android/layout_tests/editing/deleting/delete-br-011.html
+/sdcard/android/layout_tests/editing/deleting/delete-br-007.html
+/sdcard/android/layout_tests/editing/deleting/move-nodes-001.html
+/sdcard/android/layout_tests/editing/deleting/merge-no-br.html
+/sdcard/android/layout_tests/editing/deleting/delete-3800834-fix.html
+/sdcard/android/layout_tests/editing/deleting/delete-4038408-fix.html
+/sdcard/android/layout_tests/editing/deleting/5206311-1.html
+/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-020.html
+/sdcard/android/layout_tests/editing/deleting/delete-ws-fixup-003.html
+/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-004.html
+/sdcard/android/layout_tests/editing/deleting/delete-select-all-002.html
+/sdcard/android/layout_tests/editing/deleting/delete-contiguous-ws-001.html
+/sdcard/android/layout_tests/editing/deleting/delete-to-select-table.html
+/sdcard/android/layout_tests/editing/deleting/smart-delete-001.html
+/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-016.html
+/sdcard/android/layout_tests/editing/deleting/delete-line-003.html
+/sdcard/android/layout_tests/editing/deleting/delete-line-015.html
+/sdcard/android/layout_tests/editing/deleting/delete-at-paragraph-boundaries-011.html
+/sdcard/android/layout_tests/editing/deleting/5390681.html
+/sdcard/android/layout_tests/editing/deleting/delete-br-004.html
+/sdcard/android/layout_tests/editing/deleting/delete-at-paragraph-boundaries-007.html
+/sdcard/android/layout_tests/editing/deleting/forward-delete.html
+/sdcard/android/layout_tests/editing/deleting/delete-tab-003.html
+/sdcard/android/layout_tests/editing/deleting/collapse-whitespace-3587601-fix.html
+/sdcard/android/layout_tests/editing/deleting/pruning-after-merge-2.html
+/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-001.html
+/sdcard/android/layout_tests/editing/deleting/delete-line-end-ws-001.html
+/sdcard/android/layout_tests/editing/deleting/delete-by-word-001.html
+/sdcard/android/layout_tests/editing/deleting/delete-image-002.html
+/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-013.html
+/sdcard/android/layout_tests/editing/deleting/delete-block-contents-002.html
+/sdcard/android/layout_tests/editing/deleting/paragraph-in-preserveNewline.html
+/sdcard/android/layout_tests/editing/deleting/delete-after-span-ws-002.html
+/sdcard/android/layout_tests/editing/deleting/5272440.html
+/sdcard/android/layout_tests/editing/deleting/delete-line-012.html
+/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-009.html
+/sdcard/android/layout_tests/editing/deleting/delete-listitem-002.html
+/sdcard/android/layout_tests/editing/deleting/delete-character-001.html
+/sdcard/android/layout_tests/editing/deleting/delete-line-008.html
+/sdcard/android/layout_tests/editing/deleting/5483370.html
+/sdcard/android/layout_tests/editing/deleting/5026848-2.html
+/sdcard/android/layout_tests/editing/deleting/delete-br-001.html
+/sdcard/android/layout_tests/editing/deleting/delete-at-paragraph-boundaries-004.html
+/sdcard/android/layout_tests/editing/deleting/delete-br-013.html
+/sdcard/android/layout_tests/editing/deleting/5091898.html
+/sdcard/android/layout_tests/editing/deleting/delete-br-009.html
+/sdcard/android/layout_tests/editing/deleting/transpose-empty.html
+/sdcard/android/layout_tests/editing/deleting/merge-endOfParagraph.html
+/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-010.html
+/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-022.html
+/sdcard/android/layout_tests/editing/deleting/delete-3775172-fix.html
+/sdcard/android/layout_tests/editing/deleting/delete-mixed-editable-content-001.html
+/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-006.html
+/sdcard/android/layout_tests/editing/deleting/smart-delete-003.html
+/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-018.html
+/sdcard/android/layout_tests/editing/deleting/delete-line-005.html
+/sdcard/android/layout_tests/editing/deleting/delete-first-list-item.html
+/sdcard/android/layout_tests/editing/deleting/delete-line-017.html
+/sdcard/android/layout_tests/editing/deleting/delete-at-paragraph-boundaries-001.html
+/sdcard/android/layout_tests/editing/deleting/delete-trailing-ws-002.html
+/sdcard/android/layout_tests/editing/deleting/delete-br-010.html
+/sdcard/android/layout_tests/editing/deleting/delete-and-undo.html
+/sdcard/android/layout_tests/editing/deleting/delete-br-006.html
+/sdcard/android/layout_tests/editing/deleting/delete-at-paragraph-boundaries-009.html
+/sdcard/android/layout_tests/editing/deleting/delete-hr.html
+/sdcard/android/layout_tests/editing/deleting/delete-4083333-fix.html
+/sdcard/android/layout_tests/editing/deleting/delete-3608445-fix.html
+/sdcard/android/layout_tests/editing/deleting/delete-ws-fixup-002.html
+/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-003.html
+/sdcard/android/layout_tests/editing/deleting/delete-image-004.html
+/sdcard/android/layout_tests/editing/deleting/delete-select-all-001.html
+/sdcard/android/layout_tests/editing/deleting/delete-block-merge-contents-015.html
+/sdcard/android/layout_tests/editing/deleting/delete-line-002.html
+/sdcard/android/layout_tests/editing/deleting/delete-line-014.html
+/sdcard/android/layout_tests/editing/deleting/merge-into-empty-block-2.html
+/sdcard/android/layout_tests/editing/deleting/delete-at-paragraph-boundaries-010.html
+/sdcard/android/layout_tests/editing/deleting/5390681-2.html
+/sdcard/android/layout_tests/editing/deleting/5369009.html
+/sdcard/android/layout_tests/editing/deleting/delete-br-003.html
+/sdcard/android/layout_tests/editing/deleting/delete-at-paragraph-boundaries-006.html
+/sdcard/android/layout_tests/editing/deleting/delete-tab-002.html
+/sdcard/android/layout_tests/editing/deleting/list-item-1.html
+/sdcard/android/layout_tests/editing/deleting/5168598.html
+/sdcard/android/layout_tests/editing/deleting/delete-3608430-fix.html
+/sdcard/android/layout_tests/editing/deleting/type-delete-after-quote.html
+/sdcard/android/layout_tests/editing/spelling/spelling.html
+/sdcard/android/layout_tests/editing/spelling/spellcheck-attribute.html
+/sdcard/android/layout_tests/editing/spelling/inline_spelling_markers.html
+/sdcard/android/layout_tests/editing/spelling/spelling-linebreak.html
+/sdcard/android/layout_tests/fast/media/mq-relative-constraints-05.html
+/sdcard/android/layout_tests/fast/media/mq-grid-02.html
+/sdcard/android/layout_tests/fast/media/mq-compound-query-02.html
+/sdcard/android/layout_tests/fast/media/mq-relative-constraints-09.html
+/sdcard/android/layout_tests/fast/media/mq-width-absolute-03.html
+/sdcard/android/layout_tests/fast/media/mq-invalid-media-feature-02.html
+/sdcard/android/layout_tests/fast/media/mq-simple-query-04.html
+/sdcard/android/layout_tests/fast/media/mq-min-pixel-ratio.html
+/sdcard/android/layout_tests/fast/media/implicit-media-all.html
+/sdcard/android/layout_tests/fast/media/media-descriptor-syntax-01.html
+/sdcard/android/layout_tests/fast/media/mq-simple-neg-query-03.html
+/sdcard/android/layout_tests/fast/media/viewport-media-query.html
+/sdcard/android/layout_tests/fast/media/media-descriptor-syntax-05.html
+/sdcard/android/layout_tests/fast/media/mq-invalid-syntax-01.html
+/sdcard/android/layout_tests/fast/media/mq-transition.html
+/sdcard/android/layout_tests/fast/media/mq-orientation.html
+/sdcard/android/layout_tests/fast/media/mq-invalid-syntax-05.html
+/sdcard/android/layout_tests/fast/media/mq-transform-04.html
+/sdcard/android/layout_tests/fast/media/mq-js-media-except-02.html
+/sdcard/android/layout_tests/fast/media/mq-relative-constraints-02.html
+/sdcard/android/layout_tests/fast/media/mq-js-stylesheet-media-03.html
+/sdcard/android/layout_tests/fast/media/mq-relative-constraints-06.html
+/sdcard/android/layout_tests/fast/media/mq-valueless.html
+/sdcard/android/layout_tests/fast/media/mq-compound-query-03.html
+/sdcard/android/layout_tests/fast/media/mq-simple-query-01.html
+/sdcard/android/layout_tests/fast/media/mq-invalid-media-feature-03.html
+/sdcard/android/layout_tests/fast/media/mq-width-absolute-04.html
+/sdcard/android/layout_tests/fast/media/mq-simple-query-05.html
+/sdcard/android/layout_tests/fast/media/mq-animation.html
+/sdcard/android/layout_tests/fast/media/media-descriptor-syntax-02.html
+/sdcard/android/layout_tests/fast/media/mq-simple-neg-query-04.html
+/sdcard/android/layout_tests/fast/media/media-type-syntax-01.html
+/sdcard/android/layout_tests/fast/media/media-descriptor-syntax-06.html
+/sdcard/android/layout_tests/fast/media/mq-invalid-syntax-02.html
+/sdcard/android/layout_tests/fast/media/mq-transform-01.html
+/sdcard/android/layout_tests/fast/media/monochrome.html
+/sdcard/android/layout_tests/fast/media/mq-pixel-ratio.html
+/sdcard/android/layout_tests/fast/media/mq-js-media-except-03.html
+/sdcard/android/layout_tests/fast/media/mq-relative-constraints-03.html
+/sdcard/android/layout_tests/fast/media/mq-js-stylesheet-media-04.html
+/sdcard/android/layout_tests/fast/media/mq-relative-constraints-07.html
+/sdcard/android/layout_tests/fast/media/mq-compound-query-04.html
+/sdcard/android/layout_tests/fast/media/mq-width-absolute-01.html
+/sdcard/android/layout_tests/fast/media/mq-simple-query-02.html
+/sdcard/android/layout_tests/fast/media/mq-invalid-media-feature-04.html
+/sdcard/android/layout_tests/fast/media/mq-max-pixel-ratio.html
+/sdcard/android/layout_tests/fast/media/mq-simple-neg-query-01.html
+/sdcard/android/layout_tests/fast/media/media-descriptor-syntax-03.html
+/sdcard/android/layout_tests/fast/media/mq-simple-neg-query-05.html
+/sdcard/android/layout_tests/fast/media/media-type-syntax-02.html
+/sdcard/android/layout_tests/fast/media/mq-transform-02.html
+/sdcard/android/layout_tests/fast/media/mq-invalid-syntax-03.html
+/sdcard/android/layout_tests/fast/media/mq-js-stylesheet-media-01.html
+/sdcard/android/layout_tests/fast/media/mq-relative-constraints-04.html
+/sdcard/android/layout_tests/fast/media/mq-grid-01.html
+/sdcard/android/layout_tests/fast/media/mq-compound-query-01.html
+/sdcard/android/layout_tests/fast/media/mq-min-constraint.html
+/sdcard/android/layout_tests/fast/media/mq-relative-constraints-08.html
+/sdcard/android/layout_tests/fast/media/mq-compound-query-05.html
+/sdcard/android/layout_tests/fast/media/mq-width-absolute-02.html
+/sdcard/android/layout_tests/fast/media/mq-invalid-media-feature-01.html
+/sdcard/android/layout_tests/fast/media/mq-simple-query-03.html
+/sdcard/android/layout_tests/fast/media/mq-js-media-forward-syntax.html
+/sdcard/android/layout_tests/fast/media/mq-simple-neg-query-02.html
+/sdcard/android/layout_tests/fast/media/media-descriptor-syntax-04.html
+/sdcard/android/layout_tests/fast/media/mq-aspect-ratio.html
+/sdcard/android/layout_tests/fast/media/mq-invalid-syntax-04.html
+/sdcard/android/layout_tests/fast/media/mq-transform-03.html
+/sdcard/android/layout_tests/fast/media/mq-js-media-except-01.html
+/sdcard/android/layout_tests/fast/media/mq-js-stylesheet-media-02.html
+/sdcard/android/layout_tests/fast/replaced/embed-display-none.html
+/sdcard/android/layout_tests/fast/replaced/width100percent-radio.html
+/sdcard/android/layout_tests/fast/replaced/selection-rect.html
+/sdcard/android/layout_tests/fast/replaced/applet-display-none.html
+/sdcard/android/layout_tests/fast/replaced/inline-box-wrapper-handover.html
+/sdcard/android/layout_tests/fast/replaced/maxheight-pxs.html
+/sdcard/android/layout_tests/fast/replaced/width100percent-searchfield.html
+/sdcard/android/layout_tests/fast/replaced/selection-rect-transform.html
+/sdcard/android/layout_tests/fast/replaced/minwidth-pxs.html
+/sdcard/android/layout_tests/fast/replaced/width100percent-textarea.html
+/sdcard/android/layout_tests/fast/replaced/maxwidth-pxs.html
+/sdcard/android/layout_tests/fast/replaced/absolute-position-percentage-height.html
+/sdcard/android/layout_tests/fast/replaced/004.html
+/sdcard/android/layout_tests/fast/replaced/applet-disabled-positioned.html
+/sdcard/android/layout_tests/fast/replaced/width100percent-checkbox.html
+/sdcard/android/layout_tests/fast/replaced/008.html
+/sdcard/android/layout_tests/fast/replaced/percent-height-in-anonymous-block-widget.html
+/sdcard/android/layout_tests/fast/replaced/maxheight-percent.html
+/sdcard/android/layout_tests/fast/replaced/minwidth-percent.html
+/sdcard/android/layout_tests/fast/replaced/maxwidth-percent.html
+/sdcard/android/layout_tests/fast/replaced/applet-rendering-java-disabled.html
+/sdcard/android/layout_tests/fast/replaced/width100percent-button.html
+/sdcard/android/layout_tests/fast/replaced/image-resize-width.html
+/sdcard/android/layout_tests/fast/replaced/absolute-image-sizing.html
+/sdcard/android/layout_tests/fast/replaced/001.html
+/sdcard/android/layout_tests/fast/replaced/005.html
+/sdcard/android/layout_tests/fast/replaced/object-display-none.html
+/sdcard/android/layout_tests/fast/replaced/absolute-position-percentage-width.html
+/sdcard/android/layout_tests/fast/replaced/object-align-hspace-vspace.html
+/sdcard/android/layout_tests/fast/replaced/width100percent-menulist.html
+/sdcard/android/layout_tests/fast/replaced/percent-height-in-anonymous-block-in-table.html
+/sdcard/android/layout_tests/fast/replaced/image-sizing.html
+/sdcard/android/layout_tests/fast/replaced/minheight-pxs.html
+/sdcard/android/layout_tests/fast/replaced/pdf-as-image.html
+/sdcard/android/layout_tests/fast/replaced/replaced-breaking-mixture.html
+/sdcard/android/layout_tests/fast/replaced/max-width-percent.html
+/sdcard/android/layout_tests/fast/replaced/002.html
+/sdcard/android/layout_tests/fast/replaced/006.html
+/sdcard/android/layout_tests/fast/replaced/minheight-percent.html
+/sdcard/android/layout_tests/fast/replaced/absolute-position-with-auto-width-and-left-and-right.html
+/sdcard/android/layout_tests/fast/replaced/selection-rect-in-table-cell.html
+/sdcard/android/layout_tests/fast/replaced/border-radius-clip.html
+/sdcard/android/layout_tests/fast/replaced/percent-height-in-anonymous-block.html
+/sdcard/android/layout_tests/fast/replaced/three-selects-break.html
+/sdcard/android/layout_tests/fast/replaced/image-tag.html
+/sdcard/android/layout_tests/fast/replaced/image-onload.html
+/sdcard/android/layout_tests/fast/replaced/replaced-breaking.html
+/sdcard/android/layout_tests/fast/replaced/width100percent-image.html
+/sdcard/android/layout_tests/fast/replaced/image-solid-color-with-alpha.html
+/sdcard/android/layout_tests/fast/replaced/003.html
+/sdcard/android/layout_tests/fast/replaced/replaced-child-of-absolute-with-auto-height.html
+/sdcard/android/layout_tests/fast/replaced/007.html
+/sdcard/android/layout_tests/fast/replaced/absolute-position-with-auto-height-and-top-and-bottom.html
+/sdcard/android/layout_tests/fast/replaced/width100percent-textfield.html
+/sdcard/android/layout_tests/fast/dynamic/positioned-movement-with-positioned-children.html
+/sdcard/android/layout_tests/fast/dynamic/subtree-table-cell-height.html
+/sdcard/android/layout_tests/fast/dynamic/move-node-with-selection.html
+/sdcard/android/layout_tests/fast/dynamic/create-renderer-for-whitespace-only-text.html
+/sdcard/android/layout_tests/fast/dynamic/outerHTML-doc.html
+/sdcard/android/layout_tests/fast/dynamic/window-scrollbars-test.html
+/sdcard/android/layout_tests/fast/dynamic/floating-to-positioned-2.html
+/sdcard/android/layout_tests/fast/dynamic/anchor-lock.html
+/sdcard/android/layout_tests/fast/dynamic/012.html
+/sdcard/android/layout_tests/fast/dynamic/004.html
+/sdcard/android/layout_tests/fast/dynamic/008.html
+/sdcard/android/layout_tests/fast/dynamic/float-no-longer-overhanging.html
+/sdcard/android/layout_tests/fast/dynamic/float-withdrawal-2.html
+/sdcard/android/layout_tests/fast/dynamic/float-in-trailing-whitespace-after-last-line-break.html
+/sdcard/android/layout_tests/fast/dynamic/selection-highlight-adjust.html
+/sdcard/android/layout_tests/fast/dynamic/subtree-no-common-root-static-y.html
+/sdcard/android/layout_tests/fast/dynamic/genContentDestroyChildren.html
+/sdcard/android/layout_tests/fast/dynamic/001.html
+/sdcard/android/layout_tests/fast/dynamic/link-href-change.html
+/sdcard/android/layout_tests/fast/dynamic/013.html
+/sdcard/android/layout_tests/fast/dynamic/005.html
+/sdcard/android/layout_tests/fast/dynamic/009.html
+/sdcard/android/layout_tests/fast/dynamic/float-withdrawal.html
+/sdcard/android/layout_tests/fast/dynamic/anonymous-block-layer-lost.html
+/sdcard/android/layout_tests/fast/dynamic/layer-hit-test-crash.html
+/sdcard/android/layout_tests/fast/dynamic/view-overflow.html
+/sdcard/android/layout_tests/fast/dynamic/window-resize-scrollbars-test.html
+/sdcard/android/layout_tests/fast/dynamic/010.html
+/sdcard/android/layout_tests/fast/dynamic/002.html
+/sdcard/android/layout_tests/fast/dynamic/014.html
+/sdcard/android/layout_tests/fast/dynamic/006.html
+/sdcard/android/layout_tests/fast/dynamic/flash-replacement-test.html
+/sdcard/android/layout_tests/fast/dynamic/insertAdjacentElement.html
+/sdcard/android/layout_tests/fast/dynamic/insert-before-table-part-in-continuation.html
+/sdcard/android/layout_tests/fast/dynamic/staticY.html
+/sdcard/android/layout_tests/fast/dynamic/anonymous-block-orphaned-lines.html
+/sdcard/android/layout_tests/fast/dynamic/noninlinebadness.html
+/sdcard/android/layout_tests/fast/dynamic/subtree-parent-static-y.html
+/sdcard/android/layout_tests/fast/dynamic/outerHTML-img.html
+/sdcard/android/layout_tests/fast/dynamic/staticY-marking-parents-regression.html
+/sdcard/android/layout_tests/fast/dynamic/floating-to-positioned.html
+/sdcard/android/layout_tests/fast/dynamic/subtree-boundary-percent-height.html
+/sdcard/android/layout_tests/fast/dynamic/011.html
+/sdcard/android/layout_tests/fast/dynamic/containing-block-change.html
+/sdcard/android/layout_tests/fast/dynamic/015.html
+/sdcard/android/layout_tests/fast/dynamic/007.html
+/sdcard/android/layout_tests/fast/text/firstline/001.html
+/sdcard/android/layout_tests/fast/text/firstline/002.html
+/sdcard/android/layout_tests/fast/text/firstline/003.html
+/sdcard/android/layout_tests/fast/text/international/hindi-spacing.html
+/sdcard/android/layout_tests/fast/text/international/bidi-L2-run-reordering.html
+/sdcard/android/layout_tests/fast/text/international/bidi-override.html
+/sdcard/android/layout_tests/fast/text/international/hindi-whitespace.html
+/sdcard/android/layout_tests/fast/text/international/bidi-european-terminators.html
+/sdcard/android/layout_tests/fast/text/international/bidi-LDB-2-formatting-characters.html
+/sdcard/android/layout_tests/fast/text/international/bidi-AN-after-L.html
+/sdcard/android/layout_tests/fast/text/international/bidi-LDB-2-CSS.html
+/sdcard/android/layout_tests/fast/text/international/bidi-control-chars-treated-as-ZWS.html
+/sdcard/android/layout_tests/fast/text/international/bidi-neutral-directionality-paragraph-start.html
+/sdcard/android/layout_tests/fast/text/international/bidi-linebreak-001.html
+/sdcard/android/layout_tests/fast/text/international/bidi-linebreak-003.html
+/sdcard/android/layout_tests/fast/text/international/002.html
+/sdcard/android/layout_tests/fast/text/international/bidi-explicit-embedding.html
+/sdcard/android/layout_tests/fast/text/international/rtl-white-space-pre-wrap.html
+/sdcard/android/layout_tests/fast/text/international/bidi-CS-after-AN.html
+/sdcard/android/layout_tests/fast/text/international/complex-character-based-fallback.html
+/sdcard/android/layout_tests/fast/text/international/wrap-CJK-001.html
+/sdcard/android/layout_tests/fast/text/international/bidi-listbox-atsui.html
+/sdcard/android/layout_tests/fast/text/international/thai-line-breaks.html
+/sdcard/android/layout_tests/fast/text/international/bidi-neutral-run.html
+/sdcard/android/layout_tests/fast/text/international/bidi-innertext.html
+/sdcard/android/layout_tests/fast/text/international/bidi-listbox.html
+/sdcard/android/layout_tests/fast/text/international/khmer-selection.html
+/sdcard/android/layout_tests/fast/text/international/thai-baht-space.html
+/sdcard/android/layout_tests/fast/text/international/rtl-caret.html
+/sdcard/android/layout_tests/fast/text/international/bidi-AN-after-empty-run.html
+/sdcard/android/layout_tests/fast/text/international/001.html
+/sdcard/android/layout_tests/fast/text/international/bidi-linebreak-002.html
+/sdcard/android/layout_tests/fast/text/international/danda-space.html
+/sdcard/android/layout_tests/fast/text/international/003.html
+/sdcard/android/layout_tests/fast/text/international/bidi-ignored-for-first-child-inline.html
+/sdcard/android/layout_tests/fast/text/international/bidi-layout-across-linebreak.html
+/sdcard/android/layout_tests/fast/text/international/bidi-menulist.html
+/sdcard/android/layout_tests/fast/text/international/bidi-LDB-2-HTML.html
+/sdcard/android/layout_tests/fast/text/whitespace/pre-wrap-overflow-selection.html
+/sdcard/android/layout_tests/fast/text/whitespace/pre-newline-box-test.html
+/sdcard/android/layout_tests/fast/text/whitespace/span-in-word-space-causes-overflow.html
+/sdcard/android/layout_tests/fast/text/whitespace/nowrap-clear-float.html
+/sdcard/android/layout_tests/fast/text/whitespace/pre-wrap-line-test.html
+/sdcard/android/layout_tests/fast/text/whitespace/010.html
+/sdcard/android/layout_tests/fast/text/whitespace/020.html
+/sdcard/android/layout_tests/fast/text/whitespace/002.html
+/sdcard/android/layout_tests/fast/text/whitespace/030.html
+/sdcard/android/layout_tests/fast/text/whitespace/012.html
+/sdcard/android/layout_tests/fast/text/whitespace/022.html
+/sdcard/android/layout_tests/fast/text/whitespace/004.html
+/sdcard/android/layout_tests/fast/text/whitespace/014.html
+/sdcard/android/layout_tests/fast/text/whitespace/024.html
+/sdcard/android/layout_tests/fast/text/whitespace/006.html
+/sdcard/android/layout_tests/fast/text/whitespace/016.html
+/sdcard/android/layout_tests/fast/text/whitespace/008.html
+/sdcard/android/layout_tests/fast/text/whitespace/026.html
+/sdcard/android/layout_tests/fast/text/whitespace/018.html
+/sdcard/android/layout_tests/fast/text/whitespace/028.html
+/sdcard/android/layout_tests/fast/text/whitespace/normal-after-nowrap-breaking.html
+/sdcard/android/layout_tests/fast/text/whitespace/pre-break-word.html
+/sdcard/android/layout_tests/fast/text/whitespace/nbsp-mode-and-linewraps.html
+/sdcard/android/layout_tests/fast/text/whitespace/001.html
+/sdcard/android/layout_tests/fast/text/whitespace/011.html
+/sdcard/android/layout_tests/fast/text/whitespace/tab-character-basics.html
+/sdcard/android/layout_tests/fast/text/whitespace/003.html
+/sdcard/android/layout_tests/fast/text/whitespace/021.html
+/sdcard/android/layout_tests/fast/text/whitespace/013.html
+/sdcard/android/layout_tests/fast/text/whitespace/023.html
+/sdcard/android/layout_tests/fast/text/whitespace/005.html
+/sdcard/android/layout_tests/fast/text/whitespace/015.html
+/sdcard/android/layout_tests/fast/text/whitespace/025.html
+/sdcard/android/layout_tests/fast/text/whitespace/007.html
+/sdcard/android/layout_tests/fast/text/whitespace/017.html
+/sdcard/android/layout_tests/fast/text/whitespace/pre-wrap-spaces-after-newline.html
+/sdcard/android/layout_tests/fast/text/whitespace/027.html
+/sdcard/android/layout_tests/fast/text/whitespace/009.html
+/sdcard/android/layout_tests/fast/text/whitespace/019.html
+/sdcard/android/layout_tests/fast/text/whitespace/pre-wrap-last-char.html
+/sdcard/android/layout_tests/fast/text/whitespace/029.html
+/sdcard/android/layout_tests/fast/text/basic/001.html
+/sdcard/android/layout_tests/fast/text/basic/002.html
+/sdcard/android/layout_tests/fast/text/basic/011.html
+/sdcard/android/layout_tests/fast/text/basic/generic-family-changes.html
+/sdcard/android/layout_tests/fast/text/basic/003.html
+/sdcard/android/layout_tests/fast/text/basic/012.html
+/sdcard/android/layout_tests/fast/text/basic/004.html
+/sdcard/android/layout_tests/fast/text/basic/013.html
+/sdcard/android/layout_tests/fast/text/basic/005.html
+/sdcard/android/layout_tests/fast/text/basic/014.html
+/sdcard/android/layout_tests/fast/text/basic/006.html
+/sdcard/android/layout_tests/fast/text/basic/015.html
+/sdcard/android/layout_tests/fast/text/basic/007.html
+/sdcard/android/layout_tests/fast/text/basic/008.html
+/sdcard/android/layout_tests/fast/text/basic/009.html
+/sdcard/android/layout_tests/fast/text/basic/generic-family-reset.html
+/sdcard/android/layout_tests/fast/text/in-rendered-text-rtl.html
+/sdcard/android/layout_tests/fast/text/selection-painted-separately.html
+/sdcard/android/layout_tests/fast/text/bidi-embedding-pop-and-push-same.html
+/sdcard/android/layout_tests/fast/text/wbr-in-pre-crash.html
+/sdcard/android/layout_tests/fast/text/atsui-spacing-features.html
+/sdcard/android/layout_tests/fast/text/textIteratorNilRenderer.html
+/sdcard/android/layout_tests/fast/text/drawBidiText.html
+/sdcard/android/layout_tests/fast/text/selection-hard-linebreak.html
+/sdcard/android/layout_tests/fast/text/word-break.html
+/sdcard/android/layout_tests/fast/text/break-word.html
+/sdcard/android/layout_tests/fast/text/font-initial.html
+/sdcard/android/layout_tests/fast/text/complex-text-opacity.html
+/sdcard/android/layout_tests/fast/text/stroking.html
+/sdcard/android/layout_tests/fast/text/midword-break-hang.html
+/sdcard/android/layout_tests/fast/text/atsui-partial-selection.html
+/sdcard/android/layout_tests/fast/text/embed-at-end-of-pre-wrap-line.html
+/sdcard/android/layout_tests/fast/text/atsui-multiple-renderers.html
+/sdcard/android/layout_tests/fast/text/shadow-translucent-fill.html
+/sdcard/android/layout_tests/fast/text/apply-start-width-after-skipped-text.html
+/sdcard/android/layout_tests/fast/text/capitalize-preserve-nbsp.html
+/sdcard/android/layout_tests/fast/text/updateNewFont.html
+/sdcard/android/layout_tests/fast/text/atsui-rtl-override-selection.html
+/sdcard/android/layout_tests/fast/text/align-center-rtl-spill.html
+/sdcard/android/layout_tests/fast/text/wbr.html
+/sdcard/android/layout_tests/fast/text/cg-vs-atsui.html
+/sdcard/android/layout_tests/fast/text/monospace-width-cache.html
+/sdcard/android/layout_tests/fast/text/soft-hyphen-2.html
+/sdcard/android/layout_tests/fast/text/atsui-pointtooffset-calls-cg.html
+/sdcard/android/layout_tests/fast/text/justified-selection.html
+/sdcard/android/layout_tests/fast/text/atsui-kerning-and-ligatures.html
+/sdcard/android/layout_tests/fast/text/wbr-pre.html
+/sdcard/android/layout_tests/fast/text/capitalize-boundaries.html
+/sdcard/android/layout_tests/fast/text/trailing-white-space.html
+/sdcard/android/layout_tests/fast/text/capitalize-empty-generated-string.html
+/sdcard/android/layout_tests/fast/text/stripNullFromText.html
+/sdcard/android/layout_tests/fast/text/letter-spacing-negative-opacity.html
+/sdcard/android/layout_tests/fast/text/atsui-small-caps-punctuation-size.html
+/sdcard/android/layout_tests/fast/text/word-break-soft-hyphen.html
+/sdcard/android/layout_tests/fast/text/fixed-pitch-control-characters.html
+/sdcard/android/layout_tests/fast/text/cg-fallback-bolding.html
+/sdcard/android/layout_tests/fast/text/line-breaks-after-white-space.html
+/sdcard/android/layout_tests/fast/text/text-letter-spacing.html
+/sdcard/android/layout_tests/fast/text/soft-hyphen-3.html
+/sdcard/android/layout_tests/fast/text/should-use-atsui.html
+/sdcard/android/layout_tests/fast/text/wide-zero-width-space.html
+/sdcard/android/layout_tests/fast/text/justified-selection-at-edge.html
+/sdcard/android/layout_tests/fast/text/trailing-white-space-2.html
+/sdcard/android/layout_tests/fast/text/word-break-run-rounding.html
+/sdcard/android/layout_tests/fast/text/softHyphen.html
+/sdcard/android/layout_tests/fast/text/delete-hard-break-character.html
+/sdcard/android/layout_tests/fast/text/line-breaks.html
+/sdcard/android/layout_tests/fast/text/wbr-styled.html
+/sdcard/android/layout_tests/fast/text/large-text-composed-char.html
+/sdcard/android/layout_tests/fast/text/shadow-no-blur.html
+/sdcard/android/layout_tests/fast/text/reset-emptyRun.html
+/sdcard/android/layout_tests/fast/text/word-space.html
+/sdcard/android/layout_tests/fast/text/midword-break-after-breakable-char.html
+/sdcard/android/layout_tests/fast/text/stroking-decorations.html
+/sdcard/android/layout_tests/fast/encoding/utf-16-little-endian.html
+/sdcard/android/layout_tests/fast/encoding/denormalised-voiced-japanese-chars.html
+/sdcard/android/layout_tests/fast/encoding/utf-16-no-bom.xml
+/sdcard/android/layout_tests/fast/encoding/utf-16-big-endian.html
+/sdcard/android/layout_tests/fast/encoding/xmacroman-encoding-test.html
+/sdcard/android/layout_tests/fast/encoding/invalid-UTF-8.html
+/sdcard/android/layout_tests/fast/multicol/float-avoidance.html
+/sdcard/android/layout_tests/fast/multicol/negativeColumnWidth.html
+/sdcard/android/layout_tests/fast/multicol/column-rules.html
+/sdcard/android/layout_tests/fast/multicol/column-rules-stacking.html
+/sdcard/android/layout_tests/fast/multicol/zeroColumnCount.html
+/sdcard/android/layout_tests/fast/multicol/columns-shorthand-parsing.html
+/sdcard/android/layout_tests/fast/multicol/float-multicol.html
+/sdcard/android/layout_tests/fast/doctypes/001.html
+/sdcard/android/layout_tests/fast/doctypes/002.html
+/sdcard/android/layout_tests/fast/doctypes/003.html
+/sdcard/android/layout_tests/fast/doctypes/004.html
+/sdcard/android/layout_tests/fast/css-generated-content/table-row-group-to-inline.html
+/sdcard/android/layout_tests/fast/css-generated-content/spellingToolTip-assert.html
+/sdcard/android/layout_tests/fast/css-generated-content/no-openclose-quote.html
+/sdcard/android/layout_tests/fast/css-generated-content/before-with-first-letter.html
+/sdcard/android/layout_tests/fast/css-generated-content/table-row-group-with-before.html
+/sdcard/android/layout_tests/fast/css-generated-content/010.html
+/sdcard/android/layout_tests/fast/css-generated-content/table-with-before.html
+/sdcard/android/layout_tests/fast/css-generated-content/002.html
+/sdcard/android/layout_tests/fast/css-generated-content/012.html
+/sdcard/android/layout_tests/fast/css-generated-content/004.html
+/sdcard/android/layout_tests/fast/css-generated-content/014.html
+/sdcard/android/layout_tests/fast/css-generated-content/016.html
+/sdcard/android/layout_tests/fast/css-generated-content/008.html
+/sdcard/android/layout_tests/fast/css-generated-content/after-order.html
+/sdcard/android/layout_tests/fast/css-generated-content/table-cell-before-content.html
+/sdcard/android/layout_tests/fast/css-generated-content/visibleContentHiddenParent.html
+/sdcard/android/layout_tests/fast/css-generated-content/inline-display-types.html
+/sdcard/android/layout_tests/fast/css-generated-content/positioned-background-hit-test-crash.html
+/sdcard/android/layout_tests/fast/css-generated-content/001.html
+/sdcard/android/layout_tests/fast/css-generated-content/011.html
+/sdcard/android/layout_tests/fast/css-generated-content/003.html
+/sdcard/android/layout_tests/fast/css-generated-content/beforeAfter-interdocument.html
+/sdcard/android/layout_tests/fast/css-generated-content/013.html
+/sdcard/android/layout_tests/fast/css-generated-content/005.html
+/sdcard/android/layout_tests/fast/css-generated-content/hover-style-change.html
+/sdcard/android/layout_tests/fast/css-generated-content/table-row-with-before.html
+/sdcard/android/layout_tests/fast/css-generated-content/absolute-position-inside-inline.html
+/sdcard/android/layout_tests/fast/css-generated-content/015.html
+/sdcard/android/layout_tests/fast/css-generated-content/hit-test-generated-content.html
+/sdcard/android/layout_tests/fast/css-generated-content/007.html
+/sdcard/android/layout_tests/fast/css-generated-content/009.html
+/sdcard/android/layout_tests/fast/css-generated-content/wbr-with-before-content.html
+/sdcard/android/layout_tests/fast/lists/decimal-leading-zero.html
+/sdcard/android/layout_tests/fast/lists/ol-display-types.html
+/sdcard/android/layout_tests/fast/lists/li-style-alpha-huge-value-crash.html
+/sdcard/android/layout_tests/fast/lists/ol-start-dynamic.html
+/sdcard/android/layout_tests/fast/lists/numeric-markers-outside-list.html
+/sdcard/android/layout_tests/fast/lists/marker-image-error.html
+/sdcard/android/layout_tests/fast/lists/marker-before-empty-inline.html
+/sdcard/android/layout_tests/fast/lists/list-marker-with-line-height.html
+/sdcard/android/layout_tests/fast/lists/scrolled-marker-paint.html
+/sdcard/android/layout_tests/fast/lists/li-values.html
+/sdcard/android/layout_tests/fast/lists/002.html
+/sdcard/android/layout_tests/fast/lists/dynamic-marker-crash.html
+/sdcard/android/layout_tests/fast/lists/list-item-line-height.html
+/sdcard/android/layout_tests/fast/lists/004.html
+/sdcard/android/layout_tests/fast/lists/drag-into-marker.html
+/sdcard/android/layout_tests/fast/lists/list-style-none-crash.html
+/sdcard/android/layout_tests/fast/lists/alpha-list-wrap.html
+/sdcard/android/layout_tests/fast/lists/006.html
+/sdcard/android/layout_tests/fast/lists/ol-start-parsing.html
+/sdcard/android/layout_tests/fast/lists/008.html
+/sdcard/android/layout_tests/fast/lists/inlineBoxWrapperNullCheck.html
+/sdcard/android/layout_tests/fast/lists/w3-list-styles.html
+/sdcard/android/layout_tests/fast/lists/item-not-in-list-line-wrapping.html
+/sdcard/android/layout_tests/fast/lists/olstart.html
+/sdcard/android/layout_tests/fast/lists/big-list-marker.html
+/sdcard/android/layout_tests/fast/lists/markers-in-selection.html
+/sdcard/android/layout_tests/fast/lists/list-style-type-dynamic-change.html
+/sdcard/android/layout_tests/fast/lists/001.html
+/sdcard/android/layout_tests/fast/lists/ordered-list-with-no-ol-tag.html
+/sdcard/android/layout_tests/fast/lists/003.html
+/sdcard/android/layout_tests/fast/lists/005.html
+/sdcard/android/layout_tests/fast/lists/li-br.html
+/sdcard/android/layout_tests/fast/lists/007.html
+/sdcard/android/layout_tests/fast/lists/009.html
+/sdcard/android/layout_tests/fast/transforms/transform-overflow.html
+/sdcard/android/layout_tests/fast/transforms/transforms-with-opacity.html
+/sdcard/android/layout_tests/fast/transforms/transformed-caret.html
+/sdcard/android/layout_tests/fast/transforms/bounding-rect-zoom.html
+/sdcard/android/layout_tests/fast/transforms/matrix-01.html
+/sdcard/android/layout_tests/fast/transforms/matrix-02.html
+/sdcard/android/layout_tests/fast/transforms/overflow-with-transform.html
+/sdcard/android/layout_tests/fast/transforms/transformed-document-element.html
+/sdcard/android/layout_tests/fast/transforms/transforms-with-zoom.html
+/sdcard/android/layout_tests/fast/transforms/transformed-focused-text-input.html
+/sdcard/android/layout_tests/fast/transforms/identity-matrix.html
+/sdcard/android/layout_tests/fast/transforms/transform-on-inline.html
+/sdcard/android/layout_tests/fast/transforms/transform-positioned-ancestor.html
+/sdcard/android/layout_tests/fast/transforms/skew-with-unitless-zero.html
+/sdcard/android/layout_tests/fast/transforms/transform-table-row.html
+/sdcard/android/layout_tests/fast/transforms/shadows.html
+/sdcard/android/layout_tests/fast/transforms/diamond.html
+/sdcard/android/layout_tests/fast/borders/borderRadiusSolid01.html
+/sdcard/android/layout_tests/fast/borders/borderRadiusDouble01.html
+/sdcard/android/layout_tests/fast/borders/block-mask-overlay-image.html
+/sdcard/android/layout_tests/fast/borders/borderRadiusDouble03.html
+/sdcard/android/layout_tests/fast/borders/borderRadiusSolid03.html
+/sdcard/android/layout_tests/fast/borders/border-color-inherit.html
+/sdcard/android/layout_tests/fast/borders/svg-as-border-image-2.html
+/sdcard/android/layout_tests/fast/borders/borderRadiusInvalidColor.html
+/sdcard/android/layout_tests/fast/borders/borderRadiusDotted02.html
+/sdcard/android/layout_tests/fast/borders/border-image-scale-transform.html
+/sdcard/android/layout_tests/fast/borders/border-fit.html
+/sdcard/android/layout_tests/fast/borders/borderRadiusArcs01.html
+/sdcard/android/layout_tests/fast/borders/borderRadiusDashed01.html
+/sdcard/android/layout_tests/fast/borders/borderRadiusDashed03.html
+/sdcard/android/layout_tests/fast/borders/fieldsetBorderRadius.html
+/sdcard/android/layout_tests/fast/borders/borderRadiusAllStylesAllCorners.html
+/sdcard/android/layout_tests/fast/borders/border-radius-split-inline.html
+/sdcard/android/layout_tests/fast/borders/border-radius-constraints.html
+/sdcard/android/layout_tests/fast/borders/borderRadiusGroove01.html
+/sdcard/android/layout_tests/fast/borders/border-image-omit-right-slice.html
+/sdcard/android/layout_tests/fast/borders/borderRadiusDouble02.html
+/sdcard/android/layout_tests/fast/borders/borderRadiusSolid02.html
+/sdcard/android/layout_tests/fast/borders/outline-offset-min-assert.html
+/sdcard/android/layout_tests/fast/borders/borderRadiusSolid04.html
+/sdcard/android/layout_tests/fast/borders/border-radius-huge-assert.html
+/sdcard/android/layout_tests/fast/borders/borderRadiusInset01.html
+/sdcard/android/layout_tests/fast/borders/borderRadiusDotted01.html
+/sdcard/android/layout_tests/fast/borders/borderRadiusOutset01.html
+/sdcard/android/layout_tests/fast/borders/svg-as-border-image.html
+/sdcard/android/layout_tests/fast/borders/borderRadiusDotted03.html
+/sdcard/android/layout_tests/fast/borders/border-image-border-radius.html
+/sdcard/android/layout_tests/fast/borders/borderRadiusDashed02.html
+/sdcard/android/layout_tests/fast/borders/borderRadiusRidge01.html
+/sdcard/android/layout_tests/fast/borders/border-image-rotate-transform.html
+/sdcard/android/layout_tests/fast/borders/inline-mask-overlay-image.html
+/sdcard/android/layout_tests/fast/borders/borderRadiusGroove02.html
+/sdcard/android/layout_tests/fast/borders/border-image-01.html
+/sdcard/android/layout_tests/fast/innerHTML/001.html
+/sdcard/android/layout_tests/fast/innerHTML/002.html
+/sdcard/android/layout_tests/fast/innerHTML/003.html
+/sdcard/android/layout_tests/fast/innerHTML/006.html
+/sdcard/android/layout_tests/fast/selectors/175a.html
+/sdcard/android/layout_tests/fast/selectors/155c.html
+/sdcard/android/layout_tests/fast/selectors/059.html
+/sdcard/android/layout_tests/fast/selectors/066b.html
+/sdcard/android/layout_tests/fast/selectors/168.html
+/sdcard/android/layout_tests/fast/selectors/177a.html
+/sdcard/android/layout_tests/fast/selectors/087b.html
+/sdcard/android/layout_tests/fast/selectors/020.html
+/sdcard/android/layout_tests/fast/selectors/012.html
+/sdcard/android/layout_tests/fast/selectors/040.html
+/sdcard/android/layout_tests/fast/selectors/004.html
+/sdcard/android/layout_tests/fast/selectors/032.html
+/sdcard/android/layout_tests/fast/selectors/060.html
+/sdcard/android/layout_tests/fast/selectors/016.html
+/sdcard/android/layout_tests/fast/selectors/044.html
+/sdcard/android/layout_tests/fast/selectors/008.html
+/sdcard/android/layout_tests/fast/selectors/072.html
+/sdcard/android/layout_tests/fast/selectors/064.html
+/sdcard/android/layout_tests/fast/selectors/056.html
+/sdcard/android/layout_tests/fast/selectors/018b.html
+/sdcard/android/layout_tests/fast/selectors/090b.html
+/sdcard/android/layout_tests/fast/selectors/045c.html
+/sdcard/android/layout_tests/fast/selectors/170d.html
+/sdcard/android/layout_tests/fast/selectors/157.html
+/sdcard/android/layout_tests/fast/selectors/039b.html
+/sdcard/android/layout_tests/fast/selectors/156b.html
+/sdcard/android/layout_tests/fast/selectors/175b.html
+/sdcard/android/layout_tests/fast/selectors/155d.html
+/sdcard/android/layout_tests/fast/selectors/167a.html
+/sdcard/android/layout_tests/fast/selectors/169.html
+/sdcard/android/layout_tests/fast/selectors/077b.html
+/sdcard/android/layout_tests/fast/selectors/177b.html
+/sdcard/android/layout_tests/fast/selectors/169a.html
+/sdcard/android/layout_tests/fast/selectors/001.html
+/sdcard/android/layout_tests/fast/selectors/021.html
+/sdcard/android/layout_tests/fast/selectors/unqualified-hover-quirks.html
+/sdcard/android/layout_tests/fast/selectors/013.html
+/sdcard/android/layout_tests/fast/selectors/041.html
+/sdcard/android/layout_tests/fast/selectors/021b.html
+/sdcard/android/layout_tests/fast/selectors/005.html
+/sdcard/android/layout_tests/fast/selectors/061.html
+/sdcard/android/layout_tests/fast/selectors/170.html
+/sdcard/android/layout_tests/fast/selectors/017.html
+/sdcard/android/layout_tests/fast/selectors/170a.html
+/sdcard/android/layout_tests/fast/selectors/009.html
+/sdcard/android/layout_tests/fast/selectors/045.html
+/sdcard/android/layout_tests/fast/selectors/154.html
+/sdcard/android/layout_tests/fast/selectors/044b.html
+/sdcard/android/layout_tests/fast/selectors/065.html
+/sdcard/android/layout_tests/fast/selectors/155a.html
+/sdcard/android/layout_tests/fast/selectors/166.html
+/sdcard/android/layout_tests/fast/selectors/158.html
+/sdcard/android/layout_tests/fast/selectors/077.html
+/sdcard/android/layout_tests/fast/selectors/175c.html
+/sdcard/android/layout_tests/fast/selectors/089.html
+/sdcard/android/layout_tests/fast/selectors/088b.html
+/sdcard/android/layout_tests/fast/selectors/nondeterministic-combinators.html
+/sdcard/android/layout_tests/fast/selectors/unqualified-hover-strict.html
+/sdcard/android/layout_tests/fast/selectors/010.html
+/sdcard/android/layout_tests/fast/selectors/002.html
+/sdcard/android/layout_tests/fast/selectors/014.html
+/sdcard/android/layout_tests/fast/selectors/042.html
+/sdcard/android/layout_tests/fast/selectors/006.html
+/sdcard/android/layout_tests/fast/selectors/034.html
+/sdcard/android/layout_tests/fast/selectors/062.html
+/sdcard/android/layout_tests/fast/selectors/007a.html
+/sdcard/android/layout_tests/fast/selectors/054.html
+/sdcard/android/layout_tests/fast/selectors/018.html
+/sdcard/android/layout_tests/fast/selectors/046.html
+/sdcard/android/layout_tests/fast/selectors/170b.html
+/sdcard/android/layout_tests/fast/selectors/072b.html
+/sdcard/android/layout_tests/fast/selectors/044c.html
+/sdcard/android/layout_tests/fast/selectors/038.html
+/sdcard/android/layout_tests/fast/selectors/155.html
+/sdcard/android/layout_tests/fast/selectors/066.html
+/sdcard/android/layout_tests/fast/selectors/058.html
+/sdcard/android/layout_tests/fast/selectors/155b.html
+/sdcard/android/layout_tests/fast/selectors/166a.html
+/sdcard/android/layout_tests/fast/selectors/167.html
+/sdcard/android/layout_tests/fast/selectors/159.html
+/sdcard/android/layout_tests/fast/selectors/168a.html
+/sdcard/android/layout_tests/fast/selectors/078b.html
+/sdcard/android/layout_tests/fast/selectors/011.html
+/sdcard/android/layout_tests/fast/selectors/003.html
+/sdcard/android/layout_tests/fast/selectors/015.html
+/sdcard/android/layout_tests/fast/selectors/043.html
+/sdcard/android/layout_tests/fast/selectors/160.html
+/sdcard/android/layout_tests/fast/selectors/063.html
+/sdcard/android/layout_tests/fast/selectors/043b.html
+/sdcard/android/layout_tests/fast/selectors/007b.html
+/sdcard/android/layout_tests/fast/selectors/027.html
+/sdcard/android/layout_tests/fast/selectors/019.html
+/sdcard/android/layout_tests/fast/selectors/083.html
+/sdcard/android/layout_tests/fast/selectors/045b.html
+/sdcard/android/layout_tests/fast/selectors/170c.html
+/sdcard/android/layout_tests/fast/selectors/044d.html
+/sdcard/android/layout_tests/fast/selectors/039.html
+/sdcard/android/layout_tests/fast/overflow/overflow-focus-ring.html
+/sdcard/android/layout_tests/fast/overflow/overflow-x-y.html
+/sdcard/android/layout_tests/fast/overflow/overflow-text-hit-testing.html
+/sdcard/android/layout_tests/fast/overflow/unreachable-overflow-rtl-bug.html
+/sdcard/android/layout_tests/fast/overflow/overflow-auto-position-absolute.html
+/sdcard/android/layout_tests/fast/overflow/scrollRevealButton.html
+/sdcard/android/layout_tests/fast/overflow/overflow-rtl-inline-scrollbar.html
+/sdcard/android/layout_tests/fast/overflow/002.html
+/sdcard/android/layout_tests/fast/overflow/overflow-rtl.html
+/sdcard/android/layout_tests/fast/overflow/004.html
+/sdcard/android/layout_tests/fast/overflow/overflow-stacking.html
+/sdcard/android/layout_tests/fast/overflow/006.html
+/sdcard/android/layout_tests/fast/overflow/border-radius-clipping.html
+/sdcard/android/layout_tests/fast/overflow/scrollbar-position-update.html
+/sdcard/android/layout_tests/fast/overflow/008.html
+/sdcard/android/layout_tests/fast/overflow/overflow-float-stacking.html
+/sdcard/android/layout_tests/fast/overflow/scroll-nested-positioned-layer-in-overflow.html
+/sdcard/android/layout_tests/fast/overflow/image-selection-highlight.html
+/sdcard/android/layout_tests/fast/overflow/childFocusRingClip.html
+/sdcard/android/layout_tests/fast/overflow/position-relative.html
+/sdcard/android/layout_tests/fast/overflow/dynamic-hidden.html
+/sdcard/android/layout_tests/fast/overflow/overflow_hidden.html
+/sdcard/android/layout_tests/fast/overflow/clip-rects-fixed-ancestor.html
+/sdcard/android/layout_tests/fast/overflow/infiniteRecursionGuard.html
+/sdcard/android/layout_tests/fast/overflow/float-in-relpositioned.html
+/sdcard/android/layout_tests/fast/overflow/table-overflow-float.html
+/sdcard/android/layout_tests/fast/overflow/003.xml
+/sdcard/android/layout_tests/fast/overflow/overflow-auto-table.html
+/sdcard/android/layout_tests/fast/overflow/unreachable-content-test.html
+/sdcard/android/layout_tests/fast/overflow/infiniteRecursion.html
+/sdcard/android/layout_tests/fast/overflow/001.html
+/sdcard/android/layout_tests/fast/overflow/hit-test-overflow-controls.html
+/sdcard/android/layout_tests/fast/overflow/005.html
+/sdcard/android/layout_tests/fast/overflow/007.html
+/sdcard/android/layout_tests/fast/overflow/overflow-with-local-background-attachment.html
+/sdcard/android/layout_tests/fast/overflow/hidden-scrollbar-resize.html
+/sdcard/android/layout_tests/fast/events/context-no-deselect.html
+/sdcard/android/layout_tests/fast/events/autoscroll.html
+/sdcard/android/layout_tests/fast/events/5056619.html
+/sdcard/android/layout_tests/fast/events/updateLayoutForHitTest.html
+/sdcard/android/layout_tests/fast/events/label-focus.html
+/sdcard/android/layout_tests/fast/events/keydown-1.html
+/sdcard/android/layout_tests/fast/events/onloadFrameCrash.html
+/sdcard/android/layout_tests/fast/events/event-listener-on-link.html
+/sdcard/android/layout_tests/fast/events/onload-re-entry.html
+/sdcard/android/layout_tests/fast/events/standalone-image-drag-to-editable.html
+/sdcard/android/layout_tests/fast/events/focusingUnloadedFrame.html
+/sdcard/android/layout_tests/fast/events/event-sender-mouse-moved.html
+/sdcard/android/layout_tests/fast/events/reveal-link-when-focused.html
+/sdcard/android/layout_tests/fast/events/mouseout-dead-node.html
+/sdcard/android/layout_tests/fast/html/keygen.html
+/sdcard/android/layout_tests/fast/html/marquee-scroll.html
+/sdcard/android/layout_tests/fast/html/link-rel-stylesheet.html
+/sdcard/android/layout_tests/fast/html/listing.html
+/sdcard/android/layout_tests/fast/images/svg-as-background.html
+/sdcard/android/layout_tests/fast/images/pdf-as-image-landscape.html
+/sdcard/android/layout_tests/fast/images/pdf-as-tiled-background.html
+/sdcard/android/layout_tests/fast/images/pdf-as-image.html
+/sdcard/android/layout_tests/fast/images/image-map-anchor-children.html
+/sdcard/android/layout_tests/fast/images/animated-gif-with-offsets.html
+/sdcard/android/layout_tests/fast/images/favicon-as-image.html
+/sdcard/android/layout_tests/fast/images/svg-width-100p-as-background.html
+/sdcard/android/layout_tests/fast/images/svg-as-tiled-background.html
+/sdcard/android/layout_tests/fast/images/svg-as-image.html
+/sdcard/android/layout_tests/fast/images/object-image.html
+/sdcard/android/layout_tests/fast/images/pdf-as-background.html
+/sdcard/android/layout_tests/fast/images/imagemap-case.html
+/sdcard/android/layout_tests/fast/images/svg-as-relative-image.html
+/sdcard/android/layout_tests/fast/images/embed-image.html
+/sdcard/android/layout_tests/fast/images/animated-svg-as-image.html
+/sdcard/android/layout_tests/fast/images/image-in-map.html
+/sdcard/android/layout_tests/fast/images/icon-decoding.html
+/sdcard/android/layout_tests/fast/inline-block/14498-positionForCoordinates.html
+/sdcard/android/layout_tests/fast/inline-block/001.html
+/sdcard/android/layout_tests/fast/inline-block/002.html
+/sdcard/android/layout_tests/fast/inline-block/003.html
+/sdcard/android/layout_tests/fast/inline-block/004.html
+/sdcard/android/layout_tests/fast/inline-block/005.html
+/sdcard/android/layout_tests/fast/inline-block/contenteditable-baseline.html
+/sdcard/android/layout_tests/fast/inline-block/006.html
+/sdcard/android/layout_tests/fast/inline-block/inline-block-vertical-align.html
+/sdcard/android/layout_tests/fast/inline-block/tricky-baseline.html
+/sdcard/android/layout_tests/fast/inline-block/overflow-clip.html
+/sdcard/android/layout_tests/fast/inspector/matchedrules.html
+/sdcard/android/layout_tests/fast/inspector/style.html
+/sdcard/android/layout_tests/fast/flexbox/010.html
+/sdcard/android/layout_tests/fast/flexbox/020.html
+/sdcard/android/layout_tests/fast/flexbox/002.html
+/sdcard/android/layout_tests/fast/flexbox/012.html
+/sdcard/android/layout_tests/fast/flexbox/022.html
+/sdcard/android/layout_tests/fast/flexbox/004.html
+/sdcard/android/layout_tests/fast/flexbox/014.html
+/sdcard/android/layout_tests/fast/flexbox/024.html
+/sdcard/android/layout_tests/fast/flexbox/006.html
+/sdcard/android/layout_tests/fast/flexbox/016.html
+/sdcard/android/layout_tests/fast/flexbox/026.html
+/sdcard/android/layout_tests/fast/flexbox/008.html
+/sdcard/android/layout_tests/fast/flexbox/018.html
+/sdcard/android/layout_tests/fast/flexbox/001.html
+/sdcard/android/layout_tests/fast/flexbox/011.html
+/sdcard/android/layout_tests/fast/flexbox/003.html
+/sdcard/android/layout_tests/fast/flexbox/021.html
+/sdcard/android/layout_tests/fast/flexbox/013.html
+/sdcard/android/layout_tests/fast/flexbox/005.html
+/sdcard/android/layout_tests/fast/flexbox/023.html
+/sdcard/android/layout_tests/fast/flexbox/015.html
+/sdcard/android/layout_tests/fast/flexbox/007.html
+/sdcard/android/layout_tests/fast/flexbox/025.html
+/sdcard/android/layout_tests/fast/flexbox/017.html
+/sdcard/android/layout_tests/fast/flexbox/009.html
+/sdcard/android/layout_tests/fast/flexbox/019.html
+/sdcard/android/layout_tests/fast/flexbox/flex-hang.html
+/sdcard/android/layout_tests/fast/tokenizer/missing-style-end-tag-1.html
+/sdcard/android/layout_tests/fast/tokenizer/002.html
+/sdcard/android/layout_tests/fast/tokenizer/missing-title-end-tag-2.html
+/sdcard/android/layout_tests/fast/tokenizer/script-after-frameset.html
+/sdcard/android/layout_tests/fast/tokenizer/missing-style-end-tag-2.html
+/sdcard/android/layout_tests/fast/tokenizer/external-script-document-write.html
+/sdcard/android/layout_tests/fast/tokenizer/script_extra_close.html
+/sdcard/android/layout_tests/fast/tokenizer/001.html
+/sdcard/android/layout_tests/fast/tokenizer/003.html
+/sdcard/android/layout_tests/fast/tokenizer/missing-title-end-tag-1.html
+/sdcard/android/layout_tests/fast/tokenizer/external-script-document-write_2.html
+/sdcard/android/layout_tests/fast/box-shadow/transform-fringing.html
+/sdcard/android/layout_tests/fast/box-shadow/spread.html
+/sdcard/android/layout_tests/fast/box-shadow/border-radius-big.html
+/sdcard/android/layout_tests/fast/box-shadow/inset.html
+/sdcard/android/layout_tests/fast/box-shadow/basic-shadows.html
+/sdcard/android/layout_tests/fast/js/exception-linenums-in-html-3.html
+/sdcard/android/layout_tests/fast/js/missing-style-end-tag-js.html
+/sdcard/android/layout_tests/fast/inline/continuation-outlines-with-layers.html
+/sdcard/android/layout_tests/fast/inline/inline-padding-disables-text-quirk.html
+/sdcard/android/layout_tests/fast/inline/emptyInlinesWithinLists.html
+/sdcard/android/layout_tests/fast/inline/drawStyledEmptyInlines.html
+/sdcard/android/layout_tests/fast/inline/long-wrapped-line.html
+/sdcard/android/layout_tests/fast/inline/inline-continuation-borders.html
+/sdcard/android/layout_tests/fast/inline/vertical-align-text-bottom.html
+/sdcard/android/layout_tests/fast/inline/25277-2.html
+/sdcard/android/layout_tests/fast/inline/25277.html
+/sdcard/android/layout_tests/fast/inline/drawStyledEmptyInlinesWithWS.html
+/sdcard/android/layout_tests/fast/inline/positionedLifetime.html
+/sdcard/android/layout_tests/fast/inline/dirtyLinesForInline.html
+/sdcard/android/layout_tests/fast/inline/001.html
+/sdcard/android/layout_tests/fast/inline/002.html
+/sdcard/android/layout_tests/fast/inline/inline-text-quirk-bpm.html
+/sdcard/android/layout_tests/fast/inline/inline-borders-with-bidi-override.html
+/sdcard/android/layout_tests/fast/inline/styledEmptyInlinesWithBRs.html
+/sdcard/android/layout_tests/fast/inline/continuation-outlines.html
+/sdcard/android/layout_tests/fast/inline/br-text-decoration.html
+/sdcard/android/layout_tests/fast/inline/outline-continuations.html
+/sdcard/android/layout_tests/fast/inline/percentage-margins.html
+/sdcard/android/layout_tests/fast/body-propagation/background-image/010.html
+/sdcard/android/layout_tests/fast/body-propagation/background-image/001.html
+/sdcard/android/layout_tests/fast/body-propagation/background-image/002.html
+/sdcard/android/layout_tests/fast/body-propagation/background-image/003.html
+/sdcard/android/layout_tests/fast/body-propagation/background-image/004.html
+/sdcard/android/layout_tests/fast/body-propagation/background-image/005.html
+/sdcard/android/layout_tests/fast/body-propagation/background-image/006.html
+/sdcard/android/layout_tests/fast/body-propagation/background-image/007.html
+/sdcard/android/layout_tests/fast/body-propagation/background-image/008.html
+/sdcard/android/layout_tests/fast/body-propagation/background-image/009.html
+/sdcard/android/layout_tests/fast/body-propagation/overflow/001.html
+/sdcard/android/layout_tests/fast/body-propagation/overflow/002.html
+/sdcard/android/layout_tests/fast/body-propagation/overflow/003.html
+/sdcard/android/layout_tests/fast/body-propagation/overflow/004.html
+/sdcard/android/layout_tests/fast/body-propagation/overflow/005.html
+/sdcard/android/layout_tests/fast/body-propagation/overflow/006.html
+/sdcard/android/layout_tests/fast/body-propagation/overflow/007.html
+/sdcard/android/layout_tests/fast/body-propagation/background-color/001.html
+/sdcard/android/layout_tests/fast/body-propagation/background-color/002.html
+/sdcard/android/layout_tests/fast/body-propagation/background-color/003.html
+/sdcard/android/layout_tests/fast/body-propagation/background-color/004.html
+/sdcard/android/layout_tests/fast/body-propagation/background-color/005.html
+/sdcard/android/layout_tests/fast/body-propagation/background-color/006.html
+/sdcard/android/layout_tests/fast/body-propagation/background-color/007.html
+/sdcard/android/layout_tests/fast/body-propagation/background-color/008.html
+/sdcard/android/layout_tests/fast/dom/HTMLTableElement/colSpan.html
+/sdcard/android/layout_tests/fast/dom/HTMLTableElement/createCaption.html
+/sdcard/android/layout_tests/fast/dom/HTMLDocument/frameless-location-bugzilla10837.html
+/sdcard/android/layout_tests/fast/dom/Element/null-offset-parent.html
+/sdcard/android/layout_tests/fast/dom/Element/class-attribute-whitespace.html
+/sdcard/android/layout_tests/fast/dom/HTMLLinkElement/pending-stylesheet-count.html
+/sdcard/android/layout_tests/fast/dom/HTMLStyleElement/insert-parser-generated.html
+/sdcard/android/layout_tests/fast/dom/HTMLTableColElement/resize-table-using-col-width.html
+/sdcard/android/layout_tests/fast/dom/HTMLInputElement/input-image-alt-text.html
+/sdcard/android/layout_tests/fast/dom/Window/open-existing-pop-up-blocking.html
+/sdcard/android/layout_tests/fast/dom/Window/btoa-pnglet.html
+/sdcard/android/layout_tests/fast/dom/HTMLObjectElement/vspace-hspace-as-number.html
+/sdcard/android/layout_tests/fast/dom/HTMLElement/bdo.html
+/sdcard/android/layout_tests/fast/dom/Range/surroundContents-1.html
+/sdcard/android/layout_tests/fast/dom/Range/create-contextual-fragment.html
+/sdcard/android/layout_tests/fast/dom/HTMLHeadElement/textInHead1.html
+/sdcard/android/layout_tests/fast/dom/HTMLHeadElement/textInHead2.html
+/sdcard/android/layout_tests/fast/dom/HTMLHeadElement/textInHead3.html
+/sdcard/android/layout_tests/fast/dom/HTMLHeadElement/textInHead4.html
+/sdcard/android/layout_tests/fast/dom/HTMLHeadElement/textInHead5.html
+/sdcard/android/layout_tests/fast/dom/HTMLHeadElement/head-link-style-href-check.html
+/sdcard/android/layout_tests/fast/dom/HTMLTextAreaElement/reset-textarea.html
+/sdcard/android/layout_tests/fast/dom/HTMLImageElement/image-alt-text.html
+/sdcard/android/layout_tests/fast/dom/dom-parse-serialize.html
+/sdcard/android/layout_tests/fast/dom/focus-contenteditable.html
+/sdcard/android/layout_tests/fast/dom/jsDevicePixelRatio.html
+/sdcard/android/layout_tests/fast/dom/isindex-001.html
+/sdcard/android/layout_tests/fast/dom/css-cached-import-rule.html
+/sdcard/android/layout_tests/fast/dom/dom-parse-serialize-display.html
+/sdcard/android/layout_tests/fast/dom/css-rule-functions.html
+/sdcard/android/layout_tests/fast/dom/createDocumentType.html
+/sdcard/android/layout_tests/fast/dom/clientWidthAfterDocumentIsRemoved.html
+/sdcard/android/layout_tests/fast/dom/css-inline-style-important.html
+/sdcard/android/layout_tests/fast/dom/replaceChild.html
+/sdcard/android/layout_tests/fast/dom/anchor-text.html
+/sdcard/android/layout_tests/fast/dom/importNodeHTML.html
+/sdcard/android/layout_tests/fast/dom/gc-10.html
+/sdcard/android/layout_tests/fast/dom/inner-text.html
+/sdcard/android/layout_tests/fast/dom/isindex-002.html
+/sdcard/android/layout_tests/fast/dom/outerText.html
+/sdcard/android/layout_tests/fast/dom/row-inner-text.html
+/sdcard/android/layout_tests/fast/dom/blur-contenteditable.html
+/sdcard/android/layout_tests/fast/dom/setPrimitiveValue.html
+/sdcard/android/layout_tests/fast/dom/delete-contents.html
+/sdcard/android/layout_tests/fast/dom/children-nodes.html
+/sdcard/android/layout_tests/fast/dom/css-mediarule-deleteRule-update.html
+/sdcard/android/layout_tests/fast/dom/attr_dead_doc.html
+/sdcard/android/layout_tests/fast/dom/clone-contents-0-end-offset.html
+/sdcard/android/layout_tests/fast/dom/comment-not-documentElement.html
+/sdcard/android/layout_tests/fast/dom/clone-node-dynamic-style.html
+/sdcard/android/layout_tests/fast/dom/css-mediarule-insertRule-update.html
+/sdcard/android/layout_tests/fast/dom/css-insert-import-rule.html
+/sdcard/android/layout_tests/fast/dom/stripNullFromTextNodes.html
+/sdcard/android/layout_tests/fast/gradients/crash-on-zero-radius.html
+/sdcard/android/layout_tests/fast/gradients/generated-gradients.html
+/sdcard/android/layout_tests/fast/gradients/background-clipped.html
+/sdcard/android/layout_tests/fast/gradients/list-item-gradient.html
+/sdcard/android/layout_tests/fast/gradients/border-image-gradient-sides-and-corners.html
+/sdcard/android/layout_tests/fast/gradients/simple-gradients.html
+/sdcard/android/layout_tests/fast/gradients/border-image-gradient.html
+/sdcard/android/layout_tests/fast/invalid/table-inside-stray-table-content.html
+/sdcard/android/layout_tests/fast/invalid/010.html
+/sdcard/android/layout_tests/fast/invalid/002.html
+/sdcard/android/layout_tests/fast/invalid/012.html
+/sdcard/android/layout_tests/fast/invalid/004.html
+/sdcard/android/layout_tests/fast/invalid/014.html
+/sdcard/android/layout_tests/fast/invalid/006.html
+/sdcard/android/layout_tests/fast/invalid/016.html
+/sdcard/android/layout_tests/fast/invalid/008.html
+/sdcard/android/layout_tests/fast/invalid/018.html
+/sdcard/android/layout_tests/fast/invalid/junk-data.xml
+/sdcard/android/layout_tests/fast/invalid/missing-dl-end-tag.html
+/sdcard/android/layout_tests/fast/invalid/td-inside-object.html
+/sdcard/android/layout_tests/fast/invalid/table-residual-style-crash.html
+/sdcard/android/layout_tests/fast/invalid/missing-font-end-tag.html
+/sdcard/android/layout_tests/fast/invalid/missing-dt-end-tag.html
+/sdcard/android/layout_tests/fast/invalid/020.xml
+/sdcard/android/layout_tests/fast/invalid/001.html
+/sdcard/android/layout_tests/fast/invalid/nestedh3s.html
+/sdcard/android/layout_tests/fast/invalid/011.html
+/sdcard/android/layout_tests/fast/invalid/003.html
+/sdcard/android/layout_tests/fast/invalid/021.html
+/sdcard/android/layout_tests/fast/invalid/013.html
+/sdcard/android/layout_tests/fast/invalid/005.html
+/sdcard/android/layout_tests/fast/invalid/015.html
+/sdcard/android/layout_tests/fast/invalid/007.html
+/sdcard/android/layout_tests/fast/invalid/residual-style.html
+/sdcard/android/layout_tests/fast/invalid/017.html
+/sdcard/android/layout_tests/fast/invalid/009.html
+/sdcard/android/layout_tests/fast/invalid/missing-address-end-tag.html
+/sdcard/android/layout_tests/fast/invalid/019.html
+/sdcard/android/layout_tests/fast/forms/input-width.html
+/sdcard/android/layout_tests/fast/forms/select-item-background-clip.html
+/sdcard/android/layout_tests/fast/forms/radio-nested-labels.html
+/sdcard/android/layout_tests/fast/forms/input-appearance-preventDefault.html
+/sdcard/android/layout_tests/fast/forms/input-double-click-selection-gap-bug.html
+/sdcard/android/layout_tests/fast/forms/preserveFormDuringResidualStyle.html
+/sdcard/android/layout_tests/fast/forms/input-text-option-delete.html
+/sdcard/android/layout_tests/fast/forms/textfield-overflow.html
+/sdcard/android/layout_tests/fast/forms/search-zoomed.html
+/sdcard/android/layout_tests/fast/forms/HTMLOptionElement_label02.html
+/sdcard/android/layout_tests/fast/forms/input-appearance-visibility.html
+/sdcard/android/layout_tests/fast/forms/search-vertical-alignment.html
+/sdcard/android/layout_tests/fast/forms/file-input-direction.html
+/sdcard/android/layout_tests/fast/forms/select-change-listbox-size.html
+/sdcard/android/layout_tests/fast/forms/002.html
+/sdcard/android/layout_tests/fast/forms/textarea-align.html
+/sdcard/android/layout_tests/fast/forms/control-restrict-line-height.html
+/sdcard/android/layout_tests/fast/forms/basic-textareas.html
+/sdcard/android/layout_tests/fast/forms/button-generated-content.html
+/sdcard/android/layout_tests/fast/forms/input-text-paste-maxlength.html
+/sdcard/android/layout_tests/fast/forms/select-display-none-style-resolve.html
+/sdcard/android/layout_tests/fast/forms/input-readonly-autoscroll.html
+/sdcard/android/layout_tests/fast/forms/thumbslider-no-parent-slider.html
+/sdcard/android/layout_tests/fast/forms/listbox-clip.html
+/sdcard/android/layout_tests/fast/forms/textarea-setinnerhtml.html
+/sdcard/android/layout_tests/fast/forms/input-align.html
+/sdcard/android/layout_tests/fast/forms/button-cannot-be-nested.html
+/sdcard/android/layout_tests/fast/forms/input-type-change.html
+/sdcard/android/layout_tests/fast/forms/menulist-option-wrap.html
+/sdcard/android/layout_tests/fast/forms/select-empty-option-height.html
+/sdcard/android/layout_tests/fast/forms/float-before-fieldset.html
+/sdcard/android/layout_tests/fast/forms/radio_checked.html
+/sdcard/android/layout_tests/fast/forms/input-appearance-focus.html
+/sdcard/android/layout_tests/fast/forms/input-value.html
+/sdcard/android/layout_tests/fast/forms/select-selected.html
+/sdcard/android/layout_tests/fast/forms/control-clip-overflow.html
+/sdcard/android/layout_tests/fast/forms/input-appearance-default-bkcolor.html
+/sdcard/android/layout_tests/fast/forms/HTMLOptionElement_label03.html
+/sdcard/android/layout_tests/fast/forms/button-default-title.html
+/sdcard/android/layout_tests/fast/forms/hidden-listbox.html
+/sdcard/android/layout_tests/fast/forms/input-baseline.html
+/sdcard/android/layout_tests/fast/forms/targeted-frame-submission.html
+/sdcard/android/layout_tests/fast/forms/003.html
+/sdcard/android/layout_tests/fast/forms/text-control-intrinsic-widths.html
+/sdcard/android/layout_tests/fast/forms/select-change-listbox-to-popup.html
+/sdcard/android/layout_tests/fast/forms/radio_checked_dynamic.html
+/sdcard/android/layout_tests/fast/forms/text-style-color.html
+/sdcard/android/layout_tests/fast/forms/button-sizes.html
+/sdcard/android/layout_tests/fast/forms/listbox-scrollbar-incremental-load.html
+/sdcard/android/layout_tests/fast/forms/password-placeholder.html
+/sdcard/android/layout_tests/fast/forms/button-style-color.html
+/sdcard/android/layout_tests/fast/forms/caret-rtl.html
+/sdcard/android/layout_tests/fast/forms/listbox-deselect-scroll.html
+/sdcard/android/layout_tests/fast/forms/select-initial-position.html
+/sdcard/android/layout_tests/fast/forms/placeholder-set-attribute.html
+/sdcard/android/layout_tests/fast/forms/radio-attr-order.html
+/sdcard/android/layout_tests/fast/forms/input-disabled-color.html
+/sdcard/android/layout_tests/fast/forms/fieldset-align.html
+/sdcard/android/layout_tests/fast/forms/select-baseline.html
+/sdcard/android/layout_tests/fast/forms/stuff-on-my-optgroup.html
+/sdcard/android/layout_tests/fast/forms/input-align-image.html
+/sdcard/android/layout_tests/fast/forms/option-index.html
+/sdcard/android/layout_tests/fast/forms/menulist-clip.html
+/sdcard/android/layout_tests/fast/forms/search-display-none-cancel-button.html
+/sdcard/android/layout_tests/fast/forms/HTMLOptionElement_label04.html
+/sdcard/android/layout_tests/fast/forms/input-appearance-disabled.html
+/sdcard/android/layout_tests/fast/forms/input-appearance-height.html
+/sdcard/android/layout_tests/fast/forms/004.html
+/sdcard/android/layout_tests/fast/forms/search-placeholder-value-changed.html
+/sdcard/android/layout_tests/fast/forms/input-field-text-truncated.html
+/sdcard/android/layout_tests/fast/forms/input-type-text-min-width.html
+/sdcard/android/layout_tests/fast/forms/slider-thumb-shared-style.html
+/sdcard/android/layout_tests/fast/forms/option-script.html
+/sdcard/android/layout_tests/fast/forms/input-paste-undo.html
+/sdcard/android/layout_tests/fast/forms/button-white-space.html
+/sdcard/android/layout_tests/fast/forms/slider-padding.html
+/sdcard/android/layout_tests/fast/forms/button-submit.html
+/sdcard/android/layout_tests/fast/forms/input-text-double-click.html
+/sdcard/android/layout_tests/fast/forms/form-hides-table.html
+/sdcard/android/layout_tests/fast/forms/listbox-width-change.html
+/sdcard/android/layout_tests/fast/forms/button-positioned.html
+/sdcard/android/layout_tests/fast/forms/control-clip.html
+/sdcard/android/layout_tests/fast/forms/listbox-hit-test-zoomed.html
+/sdcard/android/layout_tests/fast/forms/thumbslider-crash.html
+/sdcard/android/layout_tests/fast/forms/input-first-letter.html
+/sdcard/android/layout_tests/fast/forms/search-rtl.html
+/sdcard/android/layout_tests/fast/forms/isindex-placeholder.html
+/sdcard/android/layout_tests/fast/forms/plaintext-mode-2.html
+/sdcard/android/layout_tests/fast/forms/select-change-popup-to-listbox.html
+/sdcard/android/layout_tests/fast/forms/blankbuttons.html
+/sdcard/android/layout_tests/fast/forms/input-text-maxlength.html
+/sdcard/android/layout_tests/fast/forms/password-placeholder-text-security.html
+/sdcard/android/layout_tests/fast/forms/HTMLOptionElement_label05.html
+/sdcard/android/layout_tests/fast/forms/visual-hebrew-text-field.html
+/sdcard/android/layout_tests/fast/forms/005.html
+/sdcard/android/layout_tests/fast/forms/search-styled.html
+/sdcard/android/layout_tests/fast/forms/file-input-disabled.html
+/sdcard/android/layout_tests/fast/forms/select-disabled-appearance.html
+/sdcard/android/layout_tests/fast/forms/input-type-change2.html
+/sdcard/android/layout_tests/fast/forms/select-block-background.html
+/sdcard/android/layout_tests/fast/forms/select-dirty-parent-pref-widths.html
+/sdcard/android/layout_tests/fast/forms/range-thumb-height-percentage.html
+/sdcard/android/layout_tests/fast/forms/select-visual-hebrew.html
+/sdcard/android/layout_tests/fast/forms/textAreaLineHeight.html
+/sdcard/android/layout_tests/fast/forms/option-text-clip.html
+/sdcard/android/layout_tests/fast/forms/formmove.html
+/sdcard/android/layout_tests/fast/forms/textfield-outline.html
+/sdcard/android/layout_tests/fast/forms/button-text-transform.html
+/sdcard/android/layout_tests/fast/forms/textarea-scroll-height.html
+/sdcard/android/layout_tests/fast/forms/button-table-styles.html
+/sdcard/android/layout_tests/fast/forms/box-shadow-override.html
+/sdcard/android/layout_tests/fast/forms/checkbox-radio-onchange.html
+/sdcard/android/layout_tests/fast/forms/searchfield-heights.html
+/sdcard/android/layout_tests/fast/forms/input-spaces.html
+/sdcard/android/layout_tests/fast/forms/textarea-scrollbar.html
+/sdcard/android/layout_tests/fast/forms/minWidthPercent.html
+/sdcard/android/layout_tests/fast/forms/HTMLOptionElement_label06.html
+/sdcard/android/layout_tests/fast/forms/placeholder-pseudo-style.html
+/sdcard/android/layout_tests/fast/forms/menulist-width-change.html
+/sdcard/android/layout_tests/fast/forms/input-text-drag-down.html
+/sdcard/android/layout_tests/fast/forms/option-strip-whitespace.html
+/sdcard/android/layout_tests/fast/forms/006.html
+/sdcard/android/layout_tests/fast/forms/input-no-renderer.html
+/sdcard/android/layout_tests/fast/forms/input-text-click-outside.html
+/sdcard/android/layout_tests/fast/forms/input-text-scroll-left-on-blur.html
+/sdcard/android/layout_tests/fast/forms/form-element-geometry.html
+/sdcard/android/layout_tests/fast/forms/input-table.html
+/sdcard/android/layout_tests/fast/forms/textarea-scrolled-type.html
+/sdcard/android/layout_tests/fast/forms/select-align.html
+/sdcard/android/layout_tests/fast/forms/select-writing-direction-natural.html
+/sdcard/android/layout_tests/fast/forms/search-cancel-button-style-sharing.html
+/sdcard/android/layout_tests/fast/forms/tabbing-input-iframe.html
+/sdcard/android/layout_tests/fast/forms/hidden-input-file.html
+/sdcard/android/layout_tests/fast/forms/menulist-deselect-update.html
+/sdcard/android/layout_tests/fast/forms/slider-thumb-stylability.html
+/sdcard/android/layout_tests/fast/forms/input-readonly-dimmed.html
+/sdcard/android/layout_tests/fast/forms/input-appearance-width.html
+/sdcard/android/layout_tests/fast/forms/select-list-box-with-height.html
+/sdcard/android/layout_tests/fast/forms/textarea-rows-cols.html
+/sdcard/android/layout_tests/fast/forms/button-align.html
+/sdcard/android/layout_tests/fast/forms/input-appearance-readonly.html
+/sdcard/android/layout_tests/fast/forms/form-added-to-table.html
+/sdcard/android/layout_tests/fast/forms/menulist-no-overflow.html
+/sdcard/android/layout_tests/fast/forms/formmove2.html
+/sdcard/android/layout_tests/fast/forms/input-text-word-wrap.html
+/sdcard/android/layout_tests/fast/forms/listbox-selection-2.html
+/sdcard/android/layout_tests/fast/forms/input-readonly-empty.html
+/sdcard/android/layout_tests/fast/forms/HTMLOptionElement_label07.html
+/sdcard/android/layout_tests/fast/forms/007.html
+/sdcard/android/layout_tests/fast/forms/indeterminate.html
+/sdcard/android/layout_tests/fast/forms/negativeLineHeight.html
+/sdcard/android/layout_tests/fast/forms/select-style.html
+/sdcard/android/layout_tests/fast/forms/select-size.html
+/sdcard/android/layout_tests/fast/forms/menulist-separator-painting.html
+/sdcard/android/layout_tests/fast/forms/HTMLOptionElement_label01.html
+/sdcard/android/layout_tests/fast/forms/fieldset-with-float.html
+/sdcard/android/layout_tests/fast/forms/floating-textfield-relayout.html
+/sdcard/android/layout_tests/fast/forms/button-inner-block-reuse.html
+/sdcard/android/layout_tests/fast/forms/001.html
+/sdcard/android/layout_tests/fast/forms/input-text-click-inside.html
+/sdcard/android/layout_tests/fast/forms/input-appearance-selection.html
+/sdcard/android/layout_tests/fast/forms/menulist-narrow-width.html
+/sdcard/android/layout_tests/fast/forms/linebox-overflow-in-textarea-padding.html
+/sdcard/android/layout_tests/fast/forms/menulist-restrict-line-height.html
+/sdcard/android/layout_tests/fast/forms/textarea-width.html
+/sdcard/android/layout_tests/fast/forms/disabled-select-change-index.html
+/sdcard/android/layout_tests/fast/forms/formmove3.html
+/sdcard/android/layout_tests/fast/forms/placeholder-set-value.html
+/sdcard/android/layout_tests/fast/forms/input-text-self-emptying-click.html
+/sdcard/android/layout_tests/fast/forms/input-appearance-bkcolor.html
+/sdcard/android/layout_tests/fast/forms/search-transformed.html
+/sdcard/android/layout_tests/fast/forms/image-border.html
+/sdcard/android/layout_tests/fast/forms/encoding-test.html
+/sdcard/android/layout_tests/fast/forms/form-in-malformed-markup.html
+/sdcard/android/layout_tests/fast/forms/menulist-style-color.html
+/sdcard/android/layout_tests/fast/compact/001.html
+/sdcard/android/layout_tests/fast/compact/002.html
+/sdcard/android/layout_tests/fast/compact/003.html
+/sdcard/android/layout_tests/fast/clip/nestedTransparencyClip.html
+/sdcard/android/layout_tests/fast/clip/overflow-border-radius-clip.html
+/sdcard/android/layout_tests/fast/clip/outline-overflowClip.html
+/sdcard/android/layout_tests/fast/clip/001.html
+/sdcard/android/layout_tests/fast/clip/010.html
+/sdcard/android/layout_tests/fast/clip/002.html
+/sdcard/android/layout_tests/fast/clip/011.html
+/sdcard/android/layout_tests/fast/clip/003.html
+/sdcard/android/layout_tests/fast/clip/012.html
+/sdcard/android/layout_tests/fast/clip/004.html
+/sdcard/android/layout_tests/fast/clip/013.html
+/sdcard/android/layout_tests/fast/clip/005.html
+/sdcard/android/layout_tests/fast/clip/014.html
+/sdcard/android/layout_tests/fast/clip/006.html
+/sdcard/android/layout_tests/fast/clip/015.html
+/sdcard/android/layout_tests/fast/clip/016.html
+/sdcard/android/layout_tests/fast/clip/007.html
+/sdcard/android/layout_tests/fast/clip/008.html
+/sdcard/android/layout_tests/fast/clip/017.html
+/sdcard/android/layout_tests/fast/clip/009.html
+/sdcard/android/layout_tests/fast/table/border-collapsing/001.html
+/sdcard/android/layout_tests/fast/table/border-collapsing/002.html
+/sdcard/android/layout_tests/fast/table/border-collapsing/003.html
+/sdcard/android/layout_tests/fast/table/border-collapsing/004.html
+/sdcard/android/layout_tests/fast/table/border-collapsing/equal-precedence-resolution.html
+/sdcard/android/layout_tests/fast/table/border-collapsing/rtl-border-collapsing.html
+/sdcard/android/layout_tests/fast/table/border-collapsing/border-collapsing-head-foot.html
+/sdcard/android/layout_tests/fast/table/fixed-nested.html
+/sdcard/android/layout_tests/fast/table/frame-and-rules.html
+/sdcard/android/layout_tests/fast/table/empty-table-percent-height.html
+/sdcard/android/layout_tests/fast/table/100-percent-cell-width.html
+/sdcard/android/layout_tests/fast/table/stale-grid-crash.html
+/sdcard/android/layout_tests/fast/table/div-as-col-span.html
+/sdcard/android/layout_tests/fast/table/nobr.html
+/sdcard/android/layout_tests/fast/table/012.html
+/sdcard/android/layout_tests/fast/table/040.html
+/sdcard/android/layout_tests/fast/table/growCellForImageQuirk.html
+/sdcard/android/layout_tests/fast/table/024.html
+/sdcard/android/layout_tests/fast/table/cell-pref-width-invalidation.html
+/sdcard/android/layout_tests/fast/table/fixed-granular-cols.html
+/sdcard/android/layout_tests/fast/table/008.html
+/sdcard/android/layout_tests/fast/table/036.html
+/sdcard/android/layout_tests/fast/table/nested-percent-height-table.html
+/sdcard/android/layout_tests/fast/table/rules-attr-dynchange1.html
+/sdcard/android/layout_tests/fast/table/wide-column.html
+/sdcard/android/layout_tests/fast/table/fixed-with-auto-with-colspan.html
+/sdcard/android/layout_tests/fast/table/percent-heights.html
+/sdcard/android/layout_tests/fast/table/021.html
+/sdcard/android/layout_tests/fast/table/colspanMinWidth.html
+/sdcard/android/layout_tests/fast/table/005.html
+/sdcard/android/layout_tests/fast/table/033.html
+/sdcard/android/layout_tests/fast/table/floatingTablePaintBackground.html
+/sdcard/android/layout_tests/fast/table/017.html
+/sdcard/android/layout_tests/fast/table/029.html
+/sdcard/android/layout_tests/fast/table/cell-absolute-child.html
+/sdcard/android/layout_tests/fast/table/click-near-anonymous-table.html
+/sdcard/android/layout_tests/fast/table/auto-with-percent-height.html
+/sdcard/android/layout_tests/fast/table/insert-before-anonymous-ancestors.html
+/sdcard/android/layout_tests/fast/table/append-cells2.html
+/sdcard/android/layout_tests/fast/table/unused-percent-heights.html
+/sdcard/android/layout_tests/fast/table/max-width-integer-overflow.html
+/sdcard/android/layout_tests/fast/table/vertical-align-baseline-readjust.html
+/sdcard/android/layout_tests/fast/table/empty-row-crash.html
+/sdcard/android/layout_tests/fast/table/002.html
+/sdcard/android/layout_tests/fast/table/030.html
+/sdcard/android/layout_tests/fast/table/cell-width-auto.html
+/sdcard/android/layout_tests/fast/table/014.html
+/sdcard/android/layout_tests/fast/table/037.xml
+/sdcard/android/layout_tests/fast/table/large-width.html
+/sdcard/android/layout_tests/fast/table/026.html
+/sdcard/android/layout_tests/fast/table/unbreakable-images-quirk.html
+/sdcard/android/layout_tests/fast/table/038.html
+/sdcard/android/layout_tests/fast/table/dynamic-cellpadding.html
+/sdcard/android/layout_tests/fast/table/generated-caption.html
+/sdcard/android/layout_tests/fast/table/empty-cells.html
+/sdcard/android/layout_tests/fast/table/add-before-anonymous-child.html
+/sdcard/android/layout_tests/fast/table/011.html
+/sdcard/android/layout_tests/fast/table/table-display-types-strict.html
+/sdcard/android/layout_tests/fast/table/023.html
+/sdcard/android/layout_tests/fast/table/007.html
+/sdcard/android/layout_tests/fast/table/cellindex.html
+/sdcard/android/layout_tests/fast/table/035.html
+/sdcard/android/layout_tests/fast/table/colgroup-spanning-groups-rules.html
+/sdcard/android/layout_tests/fast/table/insert-row-before-form.html
+/sdcard/android/layout_tests/fast/table/rowspan-paint-order.html
+/sdcard/android/layout_tests/fast/table/rtl-cell-display-none-assert.html
+/sdcard/android/layout_tests/fast/table/insert-cell-before-form.html
+/sdcard/android/layout_tests/fast/table/replaced-percent-height.html
+/sdcard/android/layout_tests/fast/table/text-field-baseline.html
+/sdcard/android/layout_tests/fast/table/table-display-types.html
+/sdcard/android/layout_tests/fast/table/table-hspace-align-center.html
+/sdcard/android/layout_tests/fast/table/caption-relayout.html
+/sdcard/android/layout_tests/fast/table/020.html
+/sdcard/android/layout_tests/fast/table/fixed-table-non-cell-in-row.html
+/sdcard/android/layout_tests/fast/table/004.html
+/sdcard/android/layout_tests/fast/table/032.html
+/sdcard/android/layout_tests/fast/table/row-height-recalc.html
+/sdcard/android/layout_tests/fast/table/016.html
+/sdcard/android/layout_tests/fast/table/absolute-table-at-bottom.html
+/sdcard/android/layout_tests/fast/table/028.html
+/sdcard/android/layout_tests/fast/table/spanOverlapRepaint.html
+/sdcard/android/layout_tests/fast/table/invisible-cell-background.html
+/sdcard/android/layout_tests/fast/table/vertical-align-baseline.html
+/sdcard/android/layout_tests/fast/table/cell-coalescing.html
+/sdcard/android/layout_tests/fast/table/wide-colspan.html
+/sdcard/android/layout_tests/fast/table/rowindex.html
+/sdcard/android/layout_tests/fast/table/001.html
+/sdcard/android/layout_tests/fast/table/remove-td-display-none.html
+/sdcard/android/layout_tests/fast/table/013.html
+/sdcard/android/layout_tests/fast/table/041.html
+/sdcard/android/layout_tests/fast/table/colgroup-preceded-by-caption.html
+/sdcard/android/layout_tests/fast/table/025.html
+/sdcard/android/layout_tests/fast/table/giantCellspacing.html
+/sdcard/android/layout_tests/fast/table/009.html
+/sdcard/android/layout_tests/fast/table/edge-offsets.html
+/sdcard/android/layout_tests/fast/table/giantRowspan.html
+/sdcard/android/layout_tests/fast/table/inline-form-assert.html
+/sdcard/android/layout_tests/fast/table/overflowHidden.html
+/sdcard/android/layout_tests/fast/table/rules-attr-dynchange2.html
+/sdcard/android/layout_tests/fast/table/height-percent-test.html
+/sdcard/android/layout_tests/fast/table/multiple-percent-height-rows.html
+/sdcard/android/layout_tests/fast/table/giantRowspan2.html
+/sdcard/android/layout_tests/fast/table/010.html
+/sdcard/android/layout_tests/fast/table/tableInsideCaption.html
+/sdcard/android/layout_tests/fast/table/022.html
+/sdcard/android/layout_tests/fast/table/006.html
+/sdcard/android/layout_tests/fast/table/034.html
+/sdcard/android/layout_tests/fast/table/append-cells.html
+/sdcard/android/layout_tests/fast/table/018.html
+/sdcard/android/layout_tests/fast/table/percent-widths-stretch.html
+/sdcard/android/layout_tests/fast/table/prepend-in-anonymous-table.html
+/sdcard/android/layout_tests/fast/table/floating-th.html
+/sdcard/android/layout_tests/fast/table/empty-section-crash.html
+/sdcard/android/layout_tests/fast/table/form-with-table-style.html
+/sdcard/android/layout_tests/fast/table/003.html
+/sdcard/android/layout_tests/fast/table/031.html
+/sdcard/android/layout_tests/fast/table/015.html
+/sdcard/android/layout_tests/fast/table/027.html
+/sdcard/android/layout_tests/fast/table/039.html
+/sdcard/android/layout_tests/fast/css/counters/invalidate-cached-counter-node.html
+/sdcard/android/layout_tests/fast/css/counters/counter-text-security.html
+/sdcard/android/layout_tests/fast/css/counters/counter-text-transform.html
+/sdcard/android/layout_tests/fast/css/variables/multiple-term-test.html
+/sdcard/android/layout_tests/fast/css/variables/colors-test.html
+/sdcard/android/layout_tests/fast/css/variables/font-test.html
+/sdcard/android/layout_tests/fast/css/variables/multiple-blocks-test.html
+/sdcard/android/layout_tests/fast/css/variables/misplaced-variables-test.html
+/sdcard/android/layout_tests/fast/css/variables/invalid-variable-test.html
+/sdcard/android/layout_tests/fast/css/variables/misplaced-import-test.html
+/sdcard/android/layout_tests/fast/css/variables/import-test.html
+/sdcard/android/layout_tests/fast/css/variables/inline-style-test.html
+/sdcard/android/layout_tests/fast/css/variables/declaration-block-test.html
+/sdcard/android/layout_tests/fast/css/variables/margin-test.html
+/sdcard/android/layout_tests/fast/css/variables/set-variable-test.html
+/sdcard/android/layout_tests/fast/css/variables/override-test.html
+/sdcard/android/layout_tests/fast/css/variables/remove-variable-test.html
+/sdcard/android/layout_tests/fast/css/variables/variable-iteration-test.html
+/sdcard/android/layout_tests/fast/css/variables/image-test.html
+/sdcard/android/layout_tests/fast/css/variables/block-cycle-test.html
+/sdcard/android/layout_tests/fast/css/variables/shorthand-test.html
+/sdcard/android/layout_tests/fast/css/variables/print-test.html
+/sdcard/android/layout_tests/fast/css/namespaces/001.xml
+/sdcard/android/layout_tests/fast/css/namespaces/002.xml
+/sdcard/android/layout_tests/fast/css/namespaces/003.xml
+/sdcard/android/layout_tests/fast/css/namespaces/004.xml
+/sdcard/android/layout_tests/fast/css/namespaces/005.xml
+/sdcard/android/layout_tests/fast/css/namespaces/006.xml
+/sdcard/android/layout_tests/fast/css/namespaces/007.xml
+/sdcard/android/layout_tests/fast/css/font-face-in-media-rule.html
+/sdcard/android/layout_tests/fast/css/font-face-default-font.html
+/sdcard/android/layout_tests/fast/css/first-letter-float-after-float.html
+/sdcard/android/layout_tests/fast/css/invalidation-errors-2.html
+/sdcard/android/layout_tests/fast/css/line-height-negative.html
+/sdcard/android/layout_tests/fast/css/only-child-pseudo-class.html
+/sdcard/android/layout_tests/fast/css/008.html
+/sdcard/android/layout_tests/fast/css/first-of-type-pseudo-class.html
+/sdcard/android/layout_tests/fast/css/ZeroOpacityLayers2.html
+/sdcard/android/layout_tests/fast/css/target-fragment-match.html
+/sdcard/android/layout_tests/fast/css/attribute-selector-dynamic.xml
+/sdcard/android/layout_tests/fast/css/zoom-font-size.html
+/sdcard/android/layout_tests/fast/css/live-cssrules.html
+/sdcard/android/layout_tests/fast/css/005.html
+/sdcard/android/layout_tests/fast/css/first-letter-hover.html
+/sdcard/android/layout_tests/fast/css/clip-zooming.html
+/sdcard/android/layout_tests/fast/css/color-quirk.html
+/sdcard/android/layout_tests/fast/css/resize-corner-tracking-transformed.html
+/sdcard/android/layout_tests/fast/css/selector-set-attribute.html
+/sdcard/android/layout_tests/fast/css/attribute-selector-empty-value.html
+/sdcard/android/layout_tests/fast/css/line-height-overflow.html
+/sdcard/android/layout_tests/fast/css/002.html
+/sdcard/android/layout_tests/fast/css/empty-generated-content.html
+/sdcard/android/layout_tests/fast/css/border-radius-outline-offset.html
+/sdcard/android/layout_tests/fast/css/background-image-with-baseurl.html
+/sdcard/android/layout_tests/fast/css/hsla-color.html
+/sdcard/android/layout_tests/fast/css/first-letter-skip-out-of-flow.html
+/sdcard/android/layout_tests/fast/css/font-face-multiple-remote-sources.html
+/sdcard/android/layout_tests/fast/css/pseudo-cache-stale.html
+/sdcard/android/layout_tests/fast/css/hover-subselector.html
+/sdcard/android/layout_tests/fast/css/margin-bottom-form-element-strict.html
+/sdcard/android/layout_tests/fast/css/shadow-multiple.html
+/sdcard/android/layout_tests/fast/css/import_with_baseurl.html
+/sdcard/android/layout_tests/fast/css/list-outline.html
+/sdcard/android/layout_tests/fast/css/apple-prefix.html
+/sdcard/android/layout_tests/fast/css/line-height.html
+/sdcard/android/layout_tests/fast/css/first-letter-visibility.html
+/sdcard/android/layout_tests/fast/css/acid2.html
+/sdcard/android/layout_tests/fast/css/font_property_normal.html
+/sdcard/android/layout_tests/fast/css/css-imports.html
+/sdcard/android/layout_tests/fast/css/last-of-type-pseudo-class.html
+/sdcard/android/layout_tests/fast/css/last-child-pseudo-class.html
+/sdcard/android/layout_tests/fast/css/visibility-hit-test.html
+/sdcard/android/layout_tests/fast/css/absolute-poition-in-rtl-parent.html
+/sdcard/android/layout_tests/fast/css/content-dynamic.html
+/sdcard/android/layout_tests/fast/css/acid2-pixel.html
+/sdcard/android/layout_tests/fast/css/transition-color-unspecified.html
+/sdcard/android/layout_tests/fast/css/table-text-align-strict.html
+/sdcard/android/layout_tests/fast/css/transform-default-parameter.html
+/sdcard/android/layout_tests/fast/css/text-overflow-ellipsis-bidi.html
+/sdcard/android/layout_tests/fast/css/contentImage.html
+/sdcard/android/layout_tests/fast/css/value-list-out-of-bounds-crash.html
+/sdcard/android/layout_tests/fast/css/color-strict.html
+/sdcard/android/layout_tests/fast/css/ignore-text-zoom.html
+/sdcard/android/layout_tests/fast/css/max-height-none.html
+/sdcard/android/layout_tests/fast/css/invalidation-errors-3.html
+/sdcard/android/layout_tests/fast/css/empty-pseudo-class.html
+/sdcard/android/layout_tests/fast/css/begin-end-contain-selector-empty-value.html
+/sdcard/android/layout_tests/fast/css/find-next-layer.html
+/sdcard/android/layout_tests/fast/css/text-overflow-ellipsis.html
+/sdcard/android/layout_tests/fast/css/contentDiv.html
+/sdcard/android/layout_tests/fast/css/invalid-pseudo-classes.html
+/sdcard/android/layout_tests/fast/css/disabled-author-styles.html
+/sdcard/android/layout_tests/fast/css/text-security.html
+/sdcard/android/layout_tests/fast/css/font-weight-1.html
+/sdcard/android/layout_tests/fast/css/nested-floating-relative-position-percentages.html
+/sdcard/android/layout_tests/fast/css/margin-bottom-form-element-quirk.html
+/sdcard/android/layout_tests/fast/css/font-shorthand-weight-only.html
+/sdcard/android/layout_tests/fast/css/006.html
+/sdcard/android/layout_tests/fast/css/fieldset-display-row.html
+/sdcard/android/layout_tests/fast/css/border-height.html
+/sdcard/android/layout_tests/fast/css/css2-system-fonts.html
+/sdcard/android/layout_tests/fast/css/imageTileOpacity.html
+/sdcard/android/layout_tests/fast/css/font-face-remote.html
+/sdcard/android/layout_tests/fast/css/003.html
+/sdcard/android/layout_tests/fast/css/error-in-last-decl.html
+/sdcard/android/layout_tests/fast/css/zoom-property-parsing.html
+/sdcard/android/layout_tests/fast/css/style-outside-head.html
+/sdcard/android/layout_tests/fast/css/positioned-overflow-scroll.html
+/sdcard/android/layout_tests/fast/css/first-letter-capitalized.html
+/sdcard/android/layout_tests/fast/css/font-face-locally-installed.html
+/sdcard/android/layout_tests/fast/css/word-space-extra.html
+/sdcard/android/layout_tests/fast/css/first-letter-float.html
+/sdcard/android/layout_tests/fast/css/simple-selector-chain-parsing.html
+/sdcard/android/layout_tests/fast/css/xml-stylesheet-pi-not-in-prolog.xml
+/sdcard/android/layout_tests/fast/css/continuationCrash.html
+/sdcard/android/layout_tests/fast/css/vertical-align-lengths.html
+/sdcard/android/layout_tests/fast/css/first-child-pseudo-class.html
+/sdcard/android/layout_tests/fast/css/percent-top-value-with-relative-position.html
+/sdcard/android/layout_tests/fast/css/beforeSelectorOnCodeElement.html
+/sdcard/android/layout_tests/fast/css/getFloatValueForUnit.html
+/sdcard/android/layout_tests/fast/css/first-letter-detach.html
+/sdcard/android/layout_tests/fast/css/line-height-font-order.html
+/sdcard/android/layout_tests/fast/css/text-overflow-ellipsis-strict.html
+/sdcard/android/layout_tests/fast/css/font-face-unicode-range.html
+/sdcard/android/layout_tests/fast/css/layerZOrderCrash.html
+/sdcard/android/layout_tests/fast/css/compare-content-style.html
+/sdcard/android/layout_tests/fast/css/import-rule-regression-11590.html
+/sdcard/android/layout_tests/fast/css/last-child-style-sharing.html
+/sdcard/android/layout_tests/fast/css/css3-modsel-22.html
+/sdcard/android/layout_tests/fast/css/ex-after-font-variant.html
+/sdcard/android/layout_tests/fast/css/quirk-orphaned-units.html
+/sdcard/android/layout_tests/fast/css/outline-auto-location.html
+/sdcard/android/layout_tests/fast/css/margin-top-bottom-dynamic.html
+/sdcard/android/layout_tests/fast/css/font-face-descriptor-multiple-values.html
+/sdcard/android/layout_tests/fast/css/empty-body-test.html
+/sdcard/android/layout_tests/fast/css/007.html
+/sdcard/android/layout_tests/fast/css/link-outside-head.html
+/sdcard/android/layout_tests/fast/css/font-size-negative.html
+/sdcard/android/layout_tests/fast/css/rem-units-on-root.html
+/sdcard/android/layout_tests/fast/css/position-negative-top-margin.html
+/sdcard/android/layout_tests/fast/css/ZeroOpacityLayers.html
+/sdcard/android/layout_tests/fast/css/only-of-type-pseudo-class.html
+/sdcard/android/layout_tests/fast/css/004.html
+/sdcard/android/layout_tests/fast/css/rtl-ordering.html
+/sdcard/android/layout_tests/fast/css/affected-by-hover-after-style-change.html
+/sdcard/android/layout_tests/fast/css/resize-corner-tracking.html
+/sdcard/android/layout_tests/fast/css/invalidation-errors.html
+/sdcard/android/layout_tests/fast/css/background-shorthand-invalid-url.html
+/sdcard/android/layout_tests/fast/css/MarqueeLayoutTest.html
+/sdcard/android/layout_tests/fast/css/textCapitalizeEdgeCases.html
+/sdcard/android/layout_tests/fast/css/001.html
+/sdcard/android/layout_tests/fast/css/hsl-color.html
+/sdcard/android/layout_tests/fast/css/font-face-implicit-local-font.html
+/sdcard/android/layout_tests/fast/css/first-letter-recalculation.html
+/sdcard/android/layout_tests/fast/css/rem-dynamic-scaling.html
+/sdcard/android/layout_tests/fast/css/inline-properties-important.html
+/sdcard/android/layout_tests/fast/css/dynamic-sibling-selector.html
+/sdcard/android/layout_tests/fast/css/table-text-align-quirk.html
+/sdcard/android/layout_tests/fast/css/nth-child-dynamic.html
+/sdcard/android/layout_tests/fast/css/outline-auto-empty-rects.html
+/sdcard/android/layout_tests/fast/css/font-face-multiple-faces.html
+/sdcard/android/layout_tests/fast/css/rgb-float.html
+/sdcard/android/layout_tests/fast/css/pendingStylesheetFontSize.html
+/sdcard/android/layout_tests/fast/css/contentDivWithChildren.html
+/sdcard/android/layout_tests/fast/css/universal-hover-quirk.html
+/sdcard/android/layout_tests/fast/css/css3-nth-child.html
+/sdcard/android/layout_tests/fast/css/style-parsed-outside-head.html
+/sdcard/android/layout_tests/fast/css/percentage-non-integer.html
+/sdcard/android/layout_tests/fast/css/nested-layers-with-hover.html
+/sdcard/android/layout_tests/fast/css/negative-nth-child.html
+/sdcard/android/layout_tests/fast/box-sizing/panels-one.html
+/sdcard/android/layout_tests/fast/box-sizing/percentage-height.html
+/sdcard/android/layout_tests/fast/box-sizing/box-sizing.html
+/sdcard/android/layout_tests/fast/box-sizing/panels-two.html
+/sdcard/android/layout_tests/fast/block/basic/minheight.html
+/sdcard/android/layout_tests/fast/block/basic/min-pref-width-nowrap-floats.html
+/sdcard/android/layout_tests/fast/block/basic/fieldset-stretch-to-legend.html
+/sdcard/android/layout_tests/fast/block/basic/white-space-pre-wraps.html
+/sdcard/android/layout_tests/fast/block/basic/adding-near-anonymous-block.html
+/sdcard/android/layout_tests/fast/block/basic/quirk-percent-height-grandchild.html
+/sdcard/android/layout_tests/fast/block/basic/001.html
+/sdcard/android/layout_tests/fast/block/basic/010.html
+/sdcard/android/layout_tests/fast/block/basic/quirk-height.html
+/sdcard/android/layout_tests/fast/block/basic/020.html
+/sdcard/android/layout_tests/fast/block/basic/002.html
+/sdcard/android/layout_tests/fast/block/basic/011.html
+/sdcard/android/layout_tests/fast/block/basic/text-indent-rtl.html
+/sdcard/android/layout_tests/fast/block/basic/021.html
+/sdcard/android/layout_tests/fast/block/basic/003.html
+/sdcard/android/layout_tests/fast/block/basic/012.html
+/sdcard/android/layout_tests/fast/block/basic/013.html
+/sdcard/android/layout_tests/fast/block/basic/004.html
+/sdcard/android/layout_tests/fast/block/basic/014.html
+/sdcard/android/layout_tests/fast/block/basic/005.html
+/sdcard/android/layout_tests/fast/block/basic/015.html
+/sdcard/android/layout_tests/fast/block/basic/006.html
+/sdcard/android/layout_tests/fast/block/basic/016.html
+/sdcard/android/layout_tests/fast/block/basic/007.html
+/sdcard/android/layout_tests/fast/block/basic/008.html
+/sdcard/android/layout_tests/fast/block/basic/009.html
+/sdcard/android/layout_tests/fast/block/basic/018.html
+/sdcard/android/layout_tests/fast/block/basic/019.html
+/sdcard/android/layout_tests/fast/block/positioning/auto/001.html
+/sdcard/android/layout_tests/fast/block/positioning/auto/002.html
+/sdcard/android/layout_tests/fast/block/positioning/auto/003.html
+/sdcard/android/layout_tests/fast/block/positioning/auto/004.html
+/sdcard/android/layout_tests/fast/block/positioning/auto/005.html
+/sdcard/android/layout_tests/fast/block/positioning/auto/006.html
+/sdcard/android/layout_tests/fast/block/positioning/auto/007.html
+/sdcard/android/layout_tests/fast/block/positioning/059.html
+/sdcard/android/layout_tests/fast/block/positioning/negative-rel-position.html
+/sdcard/android/layout_tests/fast/block/positioning/absolute-in-inline-short-rtl.html
+/sdcard/android/layout_tests/fast/block/positioning/absolute-in-inline-short-ltr.html
+/sdcard/android/layout_tests/fast/block/positioning/fixed-positioning-scrollbar-bug.html
+/sdcard/android/layout_tests/fast/block/positioning/relative-overflow-replaced-float.html
+/sdcard/android/layout_tests/fast/block/positioning/absolute-positioned-overconstrained.html
+/sdcard/android/layout_tests/fast/block/positioning/absolute-in-inline-rtl-2.html
+/sdcard/android/layout_tests/fast/block/positioning/absolute-in-inline-ltr-2.html
+/sdcard/android/layout_tests/fast/block/positioning/020.html
+/sdcard/android/layout_tests/fast/block/positioning/012.html
+/sdcard/android/layout_tests/fast/block/positioning/004.html
+/sdcard/android/layout_tests/fast/block/positioning/040.html
+/sdcard/android/layout_tests/fast/block/positioning/absolute-position-direction-strict.html
+/sdcard/android/layout_tests/fast/block/positioning/032.html
+/sdcard/android/layout_tests/fast/block/positioning/060.html
+/sdcard/android/layout_tests/fast/block/positioning/024.html
+/sdcard/android/layout_tests/fast/block/positioning/052.html
+/sdcard/android/layout_tests/fast/block/positioning/016.html
+/sdcard/android/layout_tests/fast/block/positioning/044.html
+/sdcard/android/layout_tests/fast/block/positioning/008.html
+/sdcard/android/layout_tests/fast/block/positioning/036.html
+/sdcard/android/layout_tests/fast/block/positioning/028.html
+/sdcard/android/layout_tests/fast/block/positioning/056.html
+/sdcard/android/layout_tests/fast/block/positioning/048.html
+/sdcard/android/layout_tests/fast/block/positioning/absolute-position-direction-quirk.html
+/sdcard/android/layout_tests/fast/block/positioning/replaced-inside-fixed-top-bottom.html
+/sdcard/android/layout_tests/fast/block/positioning/pref-width-change.html
+/sdcard/android/layout_tests/fast/block/positioning/absolute-in-inline-ltr-3.html
+/sdcard/android/layout_tests/fast/block/positioning/absolute-in-inline-ltr.html
+/sdcard/android/layout_tests/fast/block/positioning/absolute-in-inline-rtl-3.html
+/sdcard/android/layout_tests/fast/block/positioning/absolute-in-inline-rtl.html
+/sdcard/android/layout_tests/fast/block/positioning/001.html
+/sdcard/android/layout_tests/fast/block/positioning/021.html
+/sdcard/android/layout_tests/fast/block/positioning/013.html
+/sdcard/android/layout_tests/fast/block/positioning/relative-overflow-block.html
+/sdcard/android/layout_tests/fast/block/positioning/005.html
+/sdcard/android/layout_tests/fast/block/positioning/041.html
+/sdcard/android/layout_tests/fast/block/positioning/033.html
+/sdcard/android/layout_tests/fast/block/positioning/025.html
+/sdcard/android/layout_tests/fast/block/positioning/061.html
+/sdcard/android/layout_tests/fast/block/positioning/017.html
+/sdcard/android/layout_tests/fast/block/positioning/053.html
+/sdcard/android/layout_tests/fast/block/positioning/009.html
+/sdcard/android/layout_tests/fast/block/positioning/045.html
+/sdcard/android/layout_tests/fast/block/positioning/037.html
+/sdcard/android/layout_tests/fast/block/positioning/029.html
+/sdcard/android/layout_tests/fast/block/positioning/057.html
+/sdcard/android/layout_tests/fast/block/positioning/049.html
+/sdcard/android/layout_tests/fast/block/positioning/absolute-with-html-border-quirks.html
+/sdcard/android/layout_tests/fast/block/positioning/leftmargin-topmargin.html
+/sdcard/android/layout_tests/fast/block/positioning/absolute-length-of-neg-666666.html
+/sdcard/android/layout_tests/fast/block/positioning/complex-percentage-height.html
+/sdcard/android/layout_tests/fast/block/positioning/auto-height-with-top-and-bottom.html
+/sdcard/android/layout_tests/fast/block/positioning/010.html
+/sdcard/android/layout_tests/fast/block/positioning/002.html
+/sdcard/android/layout_tests/fast/block/positioning/030.html
+/sdcard/android/layout_tests/fast/block/positioning/relayout-on-position-change.html
+/sdcard/android/layout_tests/fast/block/positioning/022.html
+/sdcard/android/layout_tests/fast/block/positioning/padding-percent.html
+/sdcard/android/layout_tests/fast/block/positioning/014.html
+/sdcard/android/layout_tests/fast/block/positioning/050.html
+/sdcard/android/layout_tests/fast/block/positioning/042.html
+/sdcard/android/layout_tests/fast/block/positioning/006.html
+/sdcard/android/layout_tests/fast/block/positioning/034.html
+/sdcard/android/layout_tests/fast/block/positioning/offsetLeft-offsetTop-borders.html
+/sdcard/android/layout_tests/fast/block/positioning/062.html
+/sdcard/android/layout_tests/fast/block/positioning/026.html
+/sdcard/android/layout_tests/fast/block/positioning/054.html
+/sdcard/android/layout_tests/fast/block/positioning/018.html
+/sdcard/android/layout_tests/fast/block/positioning/046.html
+/sdcard/android/layout_tests/fast/block/positioning/abs-inside-inline-rel.html
+/sdcard/android/layout_tests/fast/block/positioning/038.html
+/sdcard/android/layout_tests/fast/block/positioning/absolute-with-html-border-strict.html
+/sdcard/android/layout_tests/fast/block/positioning/058.html
+/sdcard/android/layout_tests/fast/block/positioning/negative-right-pos.html
+/sdcard/android/layout_tests/fast/block/positioning/relative-overconstrained.html
+/sdcard/android/layout_tests/fast/block/positioning/child-of-absolute-with-auto-height.html
+/sdcard/android/layout_tests/fast/block/positioning/relative-overflow-replaced.html
+/sdcard/android/layout_tests/fast/block/positioning/height-change.html
+/sdcard/android/layout_tests/fast/block/positioning/window-height-change.html
+/sdcard/android/layout_tests/fast/block/positioning/011.html
+/sdcard/android/layout_tests/fast/block/positioning/003.html
+/sdcard/android/layout_tests/fast/block/positioning/move-with-auto-width.html
+/sdcard/android/layout_tests/fast/block/positioning/031.html
+/sdcard/android/layout_tests/fast/block/positioning/023.html
+/sdcard/android/layout_tests/fast/block/positioning/051.html
+/sdcard/android/layout_tests/fast/block/positioning/015.html
+/sdcard/android/layout_tests/fast/block/positioning/043.html
+/sdcard/android/layout_tests/fast/block/positioning/007.html
+/sdcard/android/layout_tests/fast/block/positioning/035.html
+/sdcard/android/layout_tests/fast/block/positioning/027.html
+/sdcard/android/layout_tests/fast/block/positioning/055.html
+/sdcard/android/layout_tests/fast/block/positioning/019.html
+/sdcard/android/layout_tests/fast/block/positioning/047.html
+/sdcard/android/layout_tests/fast/block/positioning/039.html
+/sdcard/android/layout_tests/fast/block/positioning/inline-block-relposition.html
+/sdcard/android/layout_tests/fast/block/float/vertical-move-relayout.html
+/sdcard/android/layout_tests/fast/block/float/overlapping-floats-with-overflow-hidden.html
+/sdcard/android/layout_tests/fast/block/float/tableshifting.html
+/sdcard/android/layout_tests/fast/block/float/table-relayout.html
+/sdcard/android/layout_tests/fast/block/float/nested-clearance.html
+/sdcard/android/layout_tests/fast/block/float/br-with-clear-2.html
+/sdcard/android/layout_tests/fast/block/float/020.html
+/sdcard/android/layout_tests/fast/block/float/012.html
+/sdcard/android/layout_tests/fast/block/float/004.html
+/sdcard/android/layout_tests/fast/block/float/032.html
+/sdcard/android/layout_tests/fast/block/float/024.html
+/sdcard/android/layout_tests/fast/block/float/016.html
+/sdcard/android/layout_tests/fast/block/float/008.html
+/sdcard/android/layout_tests/fast/block/float/028.html
+/sdcard/android/layout_tests/fast/block/float/shrink-to-fit-width.html
+/sdcard/android/layout_tests/fast/block/float/clamped-right-float.html
+/sdcard/android/layout_tests/fast/block/float/independent-align-positioning.html
+/sdcard/android/layout_tests/fast/block/float/float-on-zero-height-line.html
+/sdcard/android/layout_tests/fast/block/float/nowrap-clear-min-width.html
+/sdcard/android/layout_tests/fast/block/float/overhanging-after-height-decrease-offsets.html
+/sdcard/android/layout_tests/fast/block/float/001.html
+/sdcard/android/layout_tests/fast/block/float/021.html
+/sdcard/android/layout_tests/fast/block/float/013.html
+/sdcard/android/layout_tests/fast/block/float/nopaint-after-layer-destruction2.html
+/sdcard/android/layout_tests/fast/block/float/005.html
+/sdcard/android/layout_tests/fast/block/float/033.html
+/sdcard/android/layout_tests/fast/block/float/025.html
+/sdcard/android/layout_tests/fast/block/float/017.html
+/sdcard/android/layout_tests/fast/block/float/009.html
+/sdcard/android/layout_tests/fast/block/float/float-in-float-hit-testing.html
+/sdcard/android/layout_tests/fast/block/float/029.html
+/sdcard/android/layout_tests/fast/block/float/4145535Crash.html
+/sdcard/android/layout_tests/fast/block/float/editable-text-overlapping-float.html
+/sdcard/android/layout_tests/fast/block/float/nestedAnonymousBlocks.html
+/sdcard/android/layout_tests/fast/block/float/intruding-painted-twice.html
+/sdcard/android/layout_tests/fast/block/float/010.html
+/sdcard/android/layout_tests/fast/block/float/002.html
+/sdcard/android/layout_tests/fast/block/float/dynamic-unfloat-pref-width.html
+/sdcard/android/layout_tests/fast/block/float/marquee-shrink-to-avoid-floats.html
+/sdcard/android/layout_tests/fast/block/float/030.html
+/sdcard/android/layout_tests/fast/block/float/022.html
+/sdcard/android/layout_tests/fast/block/float/014.html
+/sdcard/android/layout_tests/fast/block/float/006.html
+/sdcard/android/layout_tests/fast/block/float/relative-painted-twice.html
+/sdcard/android/layout_tests/fast/block/float/034.html
+/sdcard/android/layout_tests/fast/block/float/026.html
+/sdcard/android/layout_tests/fast/block/float/018.html
+/sdcard/android/layout_tests/fast/block/float/width-update-after-clear.html
+/sdcard/android/layout_tests/fast/block/float/nopaint-after-layer-destruction.html
+/sdcard/android/layout_tests/fast/block/float/float-in-float-painting.html
+/sdcard/android/layout_tests/fast/block/float/overhanging-after-height-decrease.html
+/sdcard/android/layout_tests/fast/block/float/float-avoidance.html
+/sdcard/android/layout_tests/fast/block/float/narrow-after-wide.html
+/sdcard/android/layout_tests/fast/block/float/multiple-float-positioning.html
+/sdcard/android/layout_tests/fast/block/float/br-with-clear.html
+/sdcard/android/layout_tests/fast/block/float/011.html
+/sdcard/android/layout_tests/fast/block/float/negative-margin-clear.html
+/sdcard/android/layout_tests/fast/block/float/003.html
+/sdcard/android/layout_tests/fast/block/float/031.html
+/sdcard/android/layout_tests/fast/block/float/023.html
+/sdcard/android/layout_tests/fast/block/float/015.html
+/sdcard/android/layout_tests/fast/block/float/007.html
+/sdcard/android/layout_tests/fast/block/float/035.html
+/sdcard/android/layout_tests/fast/block/float/027.html
+/sdcard/android/layout_tests/fast/block/float/019.html
+/sdcard/android/layout_tests/fast/block/float/nestedAnonymousBlocks2.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/059.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/empty-clear-blocks.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/010.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/negative-margins.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/002.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/020.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/101.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/030.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/012.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/040.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/022.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/004.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/103.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/032.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/006.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/042.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/016.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/034.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/062.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/044.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/026.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/018.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/028.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/056.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/038.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/058.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/100.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/001.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/011.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/102.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/021.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/003.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/031.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/005.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/041.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/104.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/033.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/015.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/025.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/043.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/035.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/017.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/027.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/045.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/063.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/037.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/019.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/055.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/029.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/039.html
+/sdcard/android/layout_tests/fast/block/margin-collapse/057.html
+/sdcard/android/layout_tests/fast/runin/generated.html
+/sdcard/android/layout_tests/fast/runin/001.html
+/sdcard/android/layout_tests/fast/runin/002.html
+/sdcard/android/layout_tests/fast/parser/comments.html
+/sdcard/android/layout_tests/fast/parser/title-error-test.html
+/sdcard/android/layout_tests/fast/parser/entity-comment-in-textarea.html
+/sdcard/android/layout_tests/fast/parser/parseCommentsInTitles.html
+/sdcard/android/layout_tests/fast/parser/open-comment-in-style.html
+/sdcard/android/layout_tests/fast/parser/document-write-option.html
+/sdcard/android/layout_tests/fast/parser/comment-in-textarea.html
+/sdcard/android/layout_tests/fast/parser/fonts.html
+/sdcard/android/layout_tests/fast/parser/comment-in-style.html
+/sdcard/android/layout_tests/fast/parser/comment-in-script.html
+/sdcard/android/layout_tests/fast/parser/broken-comments-vs-parsing-mode.html
+/sdcard/android/layout_tests/fast/parser/entity-comment-in-style.html
+/sdcard/android/layout_tests/fast/parser/xhtml-alternate-entities.xml
+/sdcard/android/layout_tests/fast/parser/nofoo-tags-inside-paragraph.html
+/sdcard/android/layout_tests/fast/parser/bad-xml-slash.html
+/sdcard/android/layout_tests/fast/parser/001.html
+/sdcard/android/layout_tests/fast/parser/open-comment-in-textarea.html
+/sdcard/android/layout_tests/fast/parser/tabs-in-scripts.html
+/sdcard/android/layout_tests/fast/parser/remove-block-in-residual-style.html
+/sdcard/android/layout_tests/fast/parser/style-script-head-test.html
+/sdcard/android/layout_tests/fast/layers/zindex-ridonkulous.html
+/sdcard/android/layout_tests/fast/layers/self-painting-outline.html
+/sdcard/android/layout_tests/fast/layers/positioned-inside-root-with-margins.html
+/sdcard/android/layout_tests/fast/layers/video-layer.html
+/sdcard/android/layout_tests/fast/layers/inline-dirty-z-order-lists.html
+/sdcard/android/layout_tests/fast/layers/layer-visibility-sublayer.html
+/sdcard/android/layout_tests/fast/layers/opacity-outline.html
+/sdcard/android/layout_tests/fast/layers/add-layer-with-nested-stacking.html
+/sdcard/android/layout_tests/fast/layers/layer-content-visibility-change.html
+/sdcard/android/layout_tests/fast/layers/normal-flow-hit-test.html
+/sdcard/android/layout_tests/fast/layers/remove-layer-with-nested-stacking.html
+/sdcard/android/layout_tests/fast/layers/layer-visibility.html
+/sdcard/android/layout_tests/fast/layers/zindex-inherit.html
+/sdcard/android/layout_tests/fast/layers/overflow-scroll-auto-switch.html
+/sdcard/android/layout_tests/fast/layers/opacity-transforms.html
+/sdcard/android/layout_tests/fast/layers/scroll-rect-to-visible.html
+/sdcard/android/layout_tests/fast/layers/opacity-stacking.html
+/sdcard/android/layout_tests/fast/layers/remove-only-this-layer-update.html
+/sdcard/android/layout_tests/fast/history/clicked-link-is-visited.html
+/sdcard/android/layout_tests/fast/backgrounds/repeat/mask-negative-offset-repeat.html
+/sdcard/android/layout_tests/fast/backgrounds/repeat/negative-offset-repeat.html
+/sdcard/android/layout_tests/fast/backgrounds/repeat/negative-offset-repeat-transformed.html
+/sdcard/android/layout_tests/fast/backgrounds/repeat/noRepeatCorrectClip.html
+/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize20.html
+/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize02.html
+/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize11.html
+/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize21.html
+/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize03.html
+/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize12.html
+/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize22.html
+/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize04.html
+/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize13.html
+/sdcard/android/layout_tests/fast/backgrounds/size/zero.html
+/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize05.html
+/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize14.html
+/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize06.html
+/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize15.html
+/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize07.html
+/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize16.html
+/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize08.html
+/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize17.html
+/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize09.html
+/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize18.html
+/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize19.html
+/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize10.html
+/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize01.html
+/sdcard/android/layout_tests/fast/backgrounds/svg-as-background-2.html
+/sdcard/android/layout_tests/fast/backgrounds/background-origin-root-element.html
+/sdcard/android/layout_tests/fast/backgrounds/svg-as-background-3.html
+/sdcard/android/layout_tests/fast/backgrounds/svg-as-background-4.html
+/sdcard/android/layout_tests/fast/backgrounds/svg-as-background-5.html
+/sdcard/android/layout_tests/fast/backgrounds/background-position-1.html
+/sdcard/android/layout_tests/fast/backgrounds/svg-as-background-6.html
+/sdcard/android/layout_tests/fast/backgrounds/opacity-on-document-element.html
+/sdcard/android/layout_tests/fast/backgrounds/background-clip-text.html
+/sdcard/android/layout_tests/fast/backgrounds/svg-as-mask.html
+/sdcard/android/layout_tests/fast/backgrounds/solid-color-context-restore.html
+/sdcard/android/layout_tests/fast/backgrounds/mask-composite.html
+/sdcard/android/layout_tests/fast/backgrounds/animated-svg-as-background.html
+/sdcard/android/layout_tests/fast/backgrounds/body-generated-image-propagated-to-root.html
+/sdcard/android/layout_tests/fast/backgrounds/001.html
+/sdcard/android/layout_tests/fast/backgrounds/animated-gif-as-background.html
+/sdcard/android/layout_tests/fast/backgrounds/background-position-rounding.html
+/sdcard/android/layout_tests/fast/backgrounds/bgCompositeCopy.html
+/sdcard/android/layout_tests/fast/backgrounds/background-inherit-color-bug.html
+/sdcard/android/layout_tests/fast/backgrounds/animated-svg-as-mask.html
+/sdcard/android/layout_tests/fast/backgrounds/svg-as-background-1.html
+/sdcard/android/layout_tests/fast/repaint/reflection-redraw.html
+/sdcard/android/layout_tests/fast/repaint/layer-full-repaint.html
+/sdcard/android/layout_tests/fast/repaint/subtree-root-clip.html
+/sdcard/android/layout_tests/fast/repaint/subtree-root-clip-3.html
+/sdcard/android/layout_tests/fast/repaint/layer-outline-horizontal.html
+/sdcard/android/layout_tests/fast/repaint/transform-layout-repaint.html
+/sdcard/android/layout_tests/fast/repaint/float-new-in-block.html
+/sdcard/android/layout_tests/fast/repaint/list-marker-2.html
+/sdcard/android/layout_tests/fast/repaint/layer-hide-when-needs-layout.html
+/sdcard/android/layout_tests/fast/repaint/layer-outline.html
+/sdcard/android/layout_tests/fast/repaint/table-section-overflow.html
+/sdcard/android/layout_tests/fast/repaint/body-background-image.html
+/sdcard/android/layout_tests/fast/repaint/shadow-multiple-strict-vertical.html
+/sdcard/android/layout_tests/fast/repaint/inline-outline-repaint.html
+/sdcard/android/layout_tests/fast/repaint/line-flow-with-floats-4.html
+/sdcard/android/layout_tests/fast/repaint/change-transform.html
+/sdcard/android/layout_tests/fast/repaint/fixed.html
+/sdcard/android/layout_tests/fast/repaint/line-flow-with-floats-8.html
+/sdcard/android/layout_tests/fast/repaint/erase-overflow.html
+/sdcard/android/layout_tests/fast/repaint/outline-child-repaint.html
+/sdcard/android/layout_tests/fast/repaint/float-overflow.html
+/sdcard/android/layout_tests/fast/repaint/containing-block-position-change.html
+/sdcard/android/layout_tests/fast/repaint/text-selection-rect-in-overflow.html
+/sdcard/android/layout_tests/fast/repaint/flexible-box-overflow-horizontal.html
+/sdcard/android/layout_tests/fast/repaint/table-cell-move.html
+/sdcard/android/layout_tests/fast/repaint/transform-absolute-child.html
+/sdcard/android/layout_tests/fast/repaint/line-flow-with-floats-10.html
+/sdcard/android/layout_tests/fast/repaint/opacity-change-on-overflow-float.html
+/sdcard/android/layout_tests/fast/repaint/float-move-during-layout.html
+/sdcard/android/layout_tests/fast/repaint/overflow-clip-subtree-layout.html
+/sdcard/android/layout_tests/fast/repaint/invisible-objects.html
+/sdcard/android/layout_tests/fast/repaint/shadow-multiple-strict-horizontal.html
+/sdcard/android/layout_tests/fast/repaint/focus-layers.html
+/sdcard/android/layout_tests/fast/repaint/inline-color-change.html
+/sdcard/android/layout_tests/fast/repaint/table-col-background.html
+/sdcard/android/layout_tests/fast/repaint/selection-after-remove.html
+/sdcard/android/layout_tests/fast/repaint/dynamic-table-vertical-alignment-change.html
+/sdcard/android/layout_tests/fast/repaint/flexible-box-overflow.html
+/sdcard/android/layout_tests/fast/repaint/table-two-pass-layout-overpaint.html
+/sdcard/android/layout_tests/fast/repaint/overflow-into-content.html
+/sdcard/android/layout_tests/fast/repaint/shadow-multiple-vertical.html
+/sdcard/android/layout_tests/fast/repaint/border-repaint-glitch.html
+/sdcard/android/layout_tests/fast/repaint/continuation-after-outline.html
+/sdcard/android/layout_tests/fast/repaint/intermediate-layout-position.html
+/sdcard/android/layout_tests/fast/repaint/table-section-repaint.html
+/sdcard/android/layout_tests/fast/repaint/clipped-relative.html
+/sdcard/android/layout_tests/fast/repaint/line-flow-with-floats-1.html
+/sdcard/android/layout_tests/fast/repaint/backgroundSizeRepaint.html
+/sdcard/android/layout_tests/fast/repaint/box-shadow-dynamic.html
+/sdcard/android/layout_tests/fast/repaint/line-flow-with-floats-5.html
+/sdcard/android/layout_tests/fast/repaint/text-shadow-horizontal.html
+/sdcard/android/layout_tests/fast/repaint/caret-outside-block.html
+/sdcard/android/layout_tests/fast/repaint/renderer-destruction-by-invalidateSelection-crash.html
+/sdcard/android/layout_tests/fast/repaint/line-flow-with-floats-9.html
+/sdcard/android/layout_tests/fast/repaint/float-in-new-block-with-layout-delta.html
+/sdcard/android/layout_tests/fast/repaint/transform-repaint-descendants.html
+/sdcard/android/layout_tests/fast/repaint/layout-state-relative.html
+/sdcard/android/layout_tests/fast/repaint/shadow-multiple-horizontal.html
+/sdcard/android/layout_tests/fast/repaint/border-fit-lines.html
+/sdcard/android/layout_tests/fast/repaint/repaint-resized-overflow.html
+/sdcard/android/layout_tests/fast/repaint/bugzilla-3509.html
+/sdcard/android/layout_tests/fast/repaint/inline-block-overflow.html
+/sdcard/android/layout_tests/fast/repaint/search-field-cancel.html
+/sdcard/android/layout_tests/fast/repaint/background-generated.html
+/sdcard/android/layout_tests/fast/repaint/bugzilla-6278.html
+/sdcard/android/layout_tests/fast/repaint/button-spurious-layout-hint.html
+/sdcard/android/layout_tests/fast/repaint/box-shadow-v.html
+/sdcard/android/layout_tests/fast/repaint/float-overflow-right.html
+/sdcard/android/layout_tests/fast/repaint/delete-into-nested-block.html
+/sdcard/android/layout_tests/fast/repaint/table-cell-collapsed-border.html
+/sdcard/android/layout_tests/fast/repaint/selection-after-delete.html
+/sdcard/android/layout_tests/fast/repaint/layout-state-only-positioned.html
+/sdcard/android/layout_tests/fast/repaint/lines-with-layout-delta.html
+/sdcard/android/layout_tests/fast/repaint/table-extra-bottom-grow.html
+/sdcard/android/layout_tests/fast/repaint/transform-relative-position.html
+/sdcard/android/layout_tests/fast/repaint/selection-gap-overflow-scroll.html
+/sdcard/android/layout_tests/fast/repaint/subtree-root-skipped.html
+/sdcard/android/layout_tests/fast/repaint/line-overflow.html
+/sdcard/android/layout_tests/fast/repaint/background-misaligned.html
+/sdcard/android/layout_tests/fast/repaint/line-flow-with-floats-2.html
+/sdcard/android/layout_tests/fast/repaint/text-append-dirty-lines.html
+/sdcard/android/layout_tests/fast/repaint/table-row.html
+/sdcard/android/layout_tests/fast/repaint/line-flow-with-floats-6.html
+/sdcard/android/layout_tests/fast/repaint/table-outer-border.html
+/sdcard/android/layout_tests/fast/repaint/transform-replaced-shadows.html
+/sdcard/android/layout_tests/fast/repaint/overflow-scroll-delete.html
+/sdcard/android/layout_tests/fast/repaint/layer-visibility.html
+/sdcard/android/layout_tests/fast/repaint/border-radius-repaint.html
+/sdcard/android/layout_tests/fast/repaint/table-collapsed-border.html
+/sdcard/android/layout_tests/fast/repaint/transform-translate.html
+/sdcard/android/layout_tests/fast/repaint/bugzilla-7235.html
+/sdcard/android/layout_tests/fast/repaint/reflection-repaint-test.html
+/sdcard/android/layout_tests/fast/repaint/4776765.html
+/sdcard/android/layout_tests/fast/repaint/selection-clear.html
+/sdcard/android/layout_tests/fast/repaint/bugzilla-6473.html
+/sdcard/android/layout_tests/fast/repaint/intermediate-layout-position-clip.html
+/sdcard/android/layout_tests/fast/repaint/focus-ring.html
+/sdcard/android/layout_tests/fast/repaint/table-cell-vertical-overflow.html
+/sdcard/android/layout_tests/fast/repaint/create-layer-repaint.html
+/sdcard/android/layout_tests/fast/repaint/subtree-root-clip-2.html
+/sdcard/android/layout_tests/fast/repaint/bugzilla-6388.html
+/sdcard/android/layout_tests/fast/repaint/overflow-outline-repaint.html
+/sdcard/android/layout_tests/fast/repaint/content-into-overflow.html
+/sdcard/android/layout_tests/fast/repaint/static-to-positioned.html
+/sdcard/android/layout_tests/fast/repaint/bugzilla-5699.html
+/sdcard/android/layout_tests/fast/repaint/transform-absolute-in-positioned-container.html
+/sdcard/android/layout_tests/fast/repaint/outline-repaint-glitch.html
+/sdcard/android/layout_tests/fast/repaint/overflow-delete-line.html
+/sdcard/android/layout_tests/fast/repaint/transform-disable-layoutstate.html
+/sdcard/android/layout_tests/fast/repaint/list-marker.html
+/sdcard/android/layout_tests/fast/repaint/line-flow-with-floats-3.html
+/sdcard/android/layout_tests/fast/repaint/line-flow-with-floats-7.html
+/sdcard/android/layout_tests/fast/repaint/outline-inset.html
+/sdcard/android/layout_tests/fast/repaint/box-shadow-h.html
+/sdcard/android/layout_tests/fast/repaint/4774354.html
+/sdcard/android/layout_tests/fast/repaint/clip-with-layout-delta.html
+/sdcard/android/layout_tests/fast/repaint/control-clip.html
+/sdcard/android/layout_tests/fast/repaint/selected-replaced.html
+/sdcard/android/layout_tests/fast/repaint/text-selection-rect-in-overflow-2.html
+/sdcard/android/layout_tests/fast/repaint/make-children-non-inline.html
+/sdcard/android/layout_tests/fast/repaint/text-shadow.html
+/sdcard/android/layout_tests/fast/repaint/outline-shrinking.html
+/sdcard/android/layout_tests/fast/repaint/layer-child-outline.html
+/sdcard/android/layout_tests/fast/loader/start-load-in-unload.html
+/sdcard/android/layout_tests/fast/loader/text-document-wrapping.html
+/sdcard/android/layout_tests/fast/xsl/document-function.xml
+/sdcard/android/layout_tests/fast/xsl/xslt-extra-content-at-end.xml
+/sdcard/android/layout_tests/fast/xsl/xslt-enc.xml
+/sdcard/android/layout_tests/fast/xsl/xslt_unicode.xml
+/sdcard/android/layout_tests/fast/xsl/xslt-import-depth.xml
+/sdcard/android/layout_tests/fast/xsl/xslt-enc16.xml
+/sdcard/android/layout_tests/fast/xsl/xslt-enc16to16.xml
+/sdcard/android/layout_tests/fast/xsl/xslt-missing-namespace-in-xslt.xml
+/sdcard/android/layout_tests/fast/xsl/xslt-enc-cyr.xml
+/sdcard/android/layout_tests/fast/xsl/xslt-relative-path.xml
+/sdcard/android/layout_tests/fast/xsl/xslt-mismatched-tags-in-xslt.xml
+/sdcard/android/layout_tests/fast/xsl/xslt-entity.xml
+/sdcard/android/layout_tests/fast/canvas/fillrect-gradient-zero-stops.html
+/sdcard/android/layout_tests/fast/canvas/canvas-transforms-during-path.html
+/sdcard/android/layout_tests/fast/canvas/drawImage.html
+/sdcard/android/layout_tests/fast/canvas/shadow-offset-7.html
+/sdcard/android/layout_tests/fast/canvas/image-pattern-rotate.html
+/sdcard/android/layout_tests/fast/canvas/shadow-offset-4.html
+/sdcard/android/layout_tests/fast/canvas/drawImage-with-globalAlpha.html
+/sdcard/android/layout_tests/fast/canvas/canvas-text-baseline.html
+/sdcard/android/layout_tests/fast/canvas/canvas-as-image-incremental-repaint.html
+/sdcard/android/layout_tests/fast/canvas/shadow-offset-1.html
+/sdcard/android/layout_tests/fast/canvas/canvas-size-change-after-layout.html
+/sdcard/android/layout_tests/fast/canvas/canvas-resize-reset.html
+/sdcard/android/layout_tests/fast/canvas/canvas-bg.html
+/sdcard/android/layout_tests/fast/canvas/zero-size-fill-rect.html
+/sdcard/android/layout_tests/fast/canvas/shadow-offset-6.html
+/sdcard/android/layout_tests/fast/canvas/patternfill-repeat.html
+/sdcard/android/layout_tests/fast/canvas/image-object-in-canvas.html
+/sdcard/android/layout_tests/fast/canvas/shadow-offset-3.html
+/sdcard/android/layout_tests/fast/canvas/canvas-composite.html
+/sdcard/android/layout_tests/fast/canvas/quadraticCurveTo.xml
+/sdcard/android/layout_tests/fast/canvas/gradient-add-second-start-end-stop.html
+/sdcard/android/layout_tests/fast/canvas/fill-stroke-clip-reset-path.html
+/sdcard/android/layout_tests/fast/canvas/canvas-text-alignment.html
+/sdcard/android/layout_tests/fast/canvas/canvas-incremental-repaint.html
+/sdcard/android/layout_tests/fast/canvas/canvas-bg-zoom.html
+/sdcard/android/layout_tests/fast/canvas/canvasDrawingIntoSelf.html
+/sdcard/android/layout_tests/fast/canvas/canvas-as-image.html
+/sdcard/android/layout_tests/fast/canvas/canvas-before-css.html
+/sdcard/android/layout_tests/fast/canvas/canvas-incremental-repaint-2.html
+/sdcard/android/layout_tests/fast/canvas/shadow-offset-5.html
+/sdcard/android/layout_tests/fast/canvas/fillrect_gradient.html
+/sdcard/android/layout_tests/fast/canvas/shadow-offset-2.html
+/sdcard/android/layout_tests/fast/frames/contentWindow_Frame.html
+/sdcard/android/layout_tests/fast/frames/onlyCommentInIFrame.html
+/sdcard/android/layout_tests/fast/frames/content-opacity-2.html
+/sdcard/android/layout_tests/fast/frames/frame-src-attribute.html
+/sdcard/android/layout_tests/fast/frames/frameElement-frame.html
+/sdcard/android/layout_tests/fast/frames/empty-cols-attribute.html
+/sdcard/android/layout_tests/fast/frames/iframe-scrolling-attribute.html
+/sdcard/android/layout_tests/fast/frames/inline-object-inside-frameset.html
+/sdcard/android/layout_tests/fast/frames/valid.html
+/sdcard/android/layout_tests/fast/frames/no-frame-borders.html
+/sdcard/android/layout_tests/fast/frames/empty-frame-src.html
+/sdcard/android/layout_tests/fast/frames/calculate-round.html
+/sdcard/android/layout_tests/fast/frames/frame-navigation.html
+/sdcard/android/layout_tests/fast/frames/001.html
+/sdcard/android/layout_tests/fast/frames/viewsource-on-image-file.html
+/sdcard/android/layout_tests/fast/frames/invalid.html
+/sdcard/android/layout_tests/fast/frames/frameset-style-recalc.html
+/sdcard/android/layout_tests/fast/frames/viewsource-attribute.html
+/sdcard/android/layout_tests/fast/frames/002.html
+/sdcard/android/layout_tests/fast/frames/calculate-relative.html
+/sdcard/android/layout_tests/fast/frames/calculate-order.html
+/sdcard/android/layout_tests/fast/frames/calculate-percentage.html
+/sdcard/android/layout_tests/fast/frames/content-opacity-1.html
+/sdcard/android/layout_tests/fast/frames/iframe-text-contents.html
+/sdcard/android/layout_tests/fast/frames/frame-scrolling-attribute.html
+/sdcard/android/layout_tests/fast/frames/contentWindow_iFrame.html
+/sdcard/android/layout_tests/fast/frames/calculate-fixed.html
+/sdcard/android/layout_tests/fast/frames/frame-element-name.html
+/sdcard/android/layout_tests/fast/frames/frame-set-whitespace-attributes.html
+/sdcard/android/layout_tests/fast/frames/iframe-with-frameborder.html
+/sdcard/android/layout_tests/fast/frames/frameElement-iframe.html
+/sdcard/android/layout_tests/fast/reflections/inline-crash.html
+/sdcard/android/layout_tests/fast/reflections/reflection-masks-opacity.html
+/sdcard/android/layout_tests/fast/reflections/reflection-nesting.html
+/sdcard/android/layout_tests/fast/reflections/reflection-overflow-hidden.html
+/sdcard/android/layout_tests/fast/reflections/table-cell.html
+/sdcard/android/layout_tests/fast/reflections/reflection-masks.html
+/sdcard/android/layout_tests/fast/reflections/reflection-direction.html
+/sdcard/android/layout_tests/fonts/cursive.html
+/sdcard/android/layout_tests/fonts/default.html
+/sdcard/android/layout_tests/fonts/monospace.html
+/sdcard/android/layout_tests/fonts/fantasy.html
+/sdcard/android/layout_tests/fonts/serif.html
+/sdcard/android/layout_tests/fonts/sans-serif.html
+/sdcard/android/layout_tests/media/video-display-toggle.html
+/sdcard/android/layout_tests/media/video-transformed.html
+/sdcard/android/layout_tests/media/video-empty-source.html
+/sdcard/android/layout_tests/media/controls-strict.html
+/sdcard/android/layout_tests/media/audio-controls-rendering.html
+/sdcard/android/layout_tests/media/video-controls-visible-audio-only.html
+/sdcard/android/layout_tests/media/audio-no-installed-engines.html
+/sdcard/android/layout_tests/media/video-zoom.html
+/sdcard/android/layout_tests/media/video-zoom-controls.html
+/sdcard/android/layout_tests/media/video-controls-rendering.html
+/sdcard/android/layout_tests/media/controls-styling.html
+/sdcard/android/layout_tests/media/video-aspect-ratio.html
+/sdcard/android/layout_tests/media/controls-after-reload.html
+/sdcard/android/layout_tests/media/video-layer-crash.html
+/sdcard/android/layout_tests/plugins/netscape-dom-access.html
+/sdcard/android/layout_tests/plugins/embed-attributes-style.html
+/sdcard/android/layout_tests/printing/media-queries-print.html
+/sdcard/android/layout_tests/scrollbars/scrollbar-orientation.html
+/sdcard/android/layout_tests/scrollbars/scrollbar-buttons.html
+/sdcard/android/layout_tests/scrollbars/basic-scrollbar.html
+/sdcard/android/layout_tests/scrollbars/overflow-scrollbar-combinations.html
+/sdcard/android/layout_tests/scrollbars/disabled-scrollbar.html
+/sdcard/android/layout_tests/scrollbars/listbox-scrollbar-combinations.html
+/sdcard/android/layout_tests/security/block-test-no-port.html
+/sdcard/android/layout_tests/security/block-test.html
 /sdcard/android/layout_tests/tables/mozilla_expected_failures/dom/insertTbodyRebuild1.html
 /sdcard/android/layout_tests/tables/mozilla_expected_failures/dom/appendCellsRebuild1.html
 /sdcard/android/layout_tests/tables/mozilla_expected_failures/dom/appendColGroup1.html
@@ -4073,8 +4208,45 @@
 /sdcard/android/layout_tests/tables/mozilla/marvin/tables_bgcolor_purple.html
 /sdcard/android/layout_tests/tables/mozilla/marvin/tr_valign_bottom.html
 /sdcard/android/layout_tests/tables/mozilla/marvin/x_th_id.xml
-/sdcard/android/layout_tests/css3/css3-modsel-33.html
-/sdcard/android/layout_tests/css3/css3-modsel-35.html
-/sdcard/android/layout_tests/css3/css3-modsel-36.html
-/sdcard/android/layout_tests/css3/css3-modsel-37.html
+/sdcard/android/layout_tests/transforms/2d/transform-borderbox.html
+/sdcard/android/layout_tests/transforms/2d/zoom-menulist.html
+/sdcard/android/layout_tests/transforms/2d/transform-origin-borderbox.html
+/sdcard/android/layout_tests/transforms/2d/compound-transforms-vs-containers.html
+/sdcard/android/layout_tests/transforms/3d/hit-testing/backface-hit-test.html
+/sdcard/android/layout_tests/transforms/3d/hit-testing/backface-no-transform-hit-test.html
+/sdcard/android/layout_tests/transforms/3d/hit-testing/rotated-hit-test.html
+/sdcard/android/layout_tests/transforms/3d/point-mapping/3d-point-mapping-origins.html
+/sdcard/android/layout_tests/transforms/3d/point-mapping/3d-point-mapping-deep.html
+/sdcard/android/layout_tests/transforms/3d/point-mapping/3d-point-mapping-coplanar.html
+/sdcard/android/layout_tests/transforms/3d/point-mapping/3d-point-mapping-preserve-3d.html
+/sdcard/android/layout_tests/transforms/3d/point-mapping/3d-point-mapping-2.html
+/sdcard/android/layout_tests/transforms/3d/point-mapping/3d-point-mapping-3.html
+/sdcard/android/layout_tests/transforms/3d/point-mapping/3d-point-mapping.html
+/sdcard/android/layout_tests/transforms/3d/point-mapping/3d-point-mapping-overlapping.html
+/sdcard/android/layout_tests/transforms/3d/general/perspective-units.html
+/sdcard/android/layout_tests/transforms/3d/general/perspective-non-layer.html
+/sdcard/android/layout_tests/transforms/no_transform_hit_testing.html
 /sdcard/android/layout_tests/transitions/transition-drt-api.html
+/sdcard/android/layout_tests/webarchive/loading/cache-expired-subresource.html
+/sdcard/android/layout_tests/webarchive/test-css-import.html
+/sdcard/android/layout_tests/webarchive/test-img-src.html
+/sdcard/android/layout_tests/webarchive/test-link-rel-icon.html
+/sdcard/android/layout_tests/webarchive/adopt-attribute-styled-body-webarchive.html
+/sdcard/android/layout_tests/webarchive/archive-empty-frame-dom.html
+/sdcard/android/layout_tests/webarchive/test-frameset.html
+/sdcard/android/layout_tests/webarchive/test-body-background.html
+/sdcard/android/layout_tests/webarchive/test-input-src.html
+/sdcard/android/layout_tests/webarchive/archive-empty-frame-source.html
+/sdcard/android/layout_tests/webarchive/doctype.html
+/sdcard/android/layout_tests/webarchive/test-css-url-resources-inline-styles.html
+/sdcard/android/layout_tests/webarchive/test-table-background.html
+/sdcard/android/layout_tests/webarchive/adopt-inline-styled-node-webarchive.html
+/sdcard/android/layout_tests/webarchive/test-object-data.html
+/sdcard/android/layout_tests/webarchive/test-css-url-resources-in-stylesheets.html
+/sdcard/android/layout_tests/webarchive/archive-with-unencoded-url.html
+/sdcard/android/layout_tests/webarchive/test-link-href.html
+/sdcard/android/layout_tests/webarchive/test-duplicate-resources.html
+/sdcard/android/layout_tests/webarchive/test-xml-stylesheet.xml
+/sdcard/android/layout_tests/webarchive/test-td-background.html
+/sdcard/android/layout_tests/webarchive/test-script-src.html
+/sdcard/android/layout_tests/webarchive/adopt-attribute-styled-node-webarchive.html
diff --git a/tests/DumpRenderTree/assets/results/layout_tests_passed.txt b/tests/DumpRenderTree/assets/results/layout_tests_passed.txt
index 37a4bbe..b40a21e 100644
--- a/tests/DumpRenderTree/assets/results/layout_tests_passed.txt
+++ b/tests/DumpRenderTree/assets/results/layout_tests_passed.txt
@@ -1,3 +1,31 @@
+/sdcard/android/layout_tests/accessibility/non-native-image-crash.html
+/sdcard/android/layout_tests/animations/animation-css-rule-types.html
+/sdcard/android/layout_tests/animations/animation-events-create.html
+/sdcard/android/layout_tests/animations/combo-transform-translate+scale.html
+/sdcard/android/layout_tests/animations/transform-origin-vs-functions.html
+/sdcard/android/layout_tests/animations/simultaneous-start-transform.html
+/sdcard/android/layout_tests/animations/lineheight-animation.html
+/sdcard/android/layout_tests/animations/simultaneous-start-left.html
+/sdcard/android/layout_tests/animations/fill-unset-properties.html
+/sdcard/android/layout_tests/animations/multiple-keyframes.html
+/sdcard/android/layout_tests/animations/change-one-anim.html
+/sdcard/android/layout_tests/animations/matrix-anim.html
+/sdcard/android/layout_tests/animations/generic-from-to.html
+/sdcard/android/layout_tests/animations/big-rotation.html
+/sdcard/android/layout_tests/animations/keyframe-timing-functions.html
+/sdcard/android/layout_tests/animations/transition-and-animation-1.html
+/sdcard/android/layout_tests/animations/computed-style.html
+/sdcard/android/layout_tests/animations/animation-iteration-event-destroy-renderer.html
+/sdcard/android/layout_tests/animations/keyframes.html
+/sdcard/android/layout_tests/animations/multiple-animations.html
+/sdcard/android/layout_tests/animations/transition-and-animation-2.html
+/sdcard/android/layout_tests/animations/import-crash.html
+/sdcard/android/layout_tests/animations/empty-keyframes.html
+/sdcard/android/layout_tests/animations/width-using-ems.html
+/sdcard/android/layout_tests/animations/combo-transform-rotate+scale.html
+/sdcard/android/layout_tests/css1/units/zero-duration-without-units.html
+/sdcard/android/layout_tests/css2.1/atrule_longest_match.html
+/sdcard/android/layout_tests/css3/khtml-background-size-0x0-bmp.html
 /sdcard/android/layout_tests/dom/html/level1/core/hc_attrlastchild.html
 /sdcard/android/layout_tests/dom/html/level1/core/hc_elementnormalize.html
 /sdcard/android/layout_tests/dom/html/level1/core/hc_noderemovechildnode.html
@@ -550,6 +578,7 @@
 /sdcard/android/layout_tests/dom/html/level2/html/HTMLInputElement11.html
 /sdcard/android/layout_tests/dom/html/level2/html/HTMLTextAreaElement01.html
 /sdcard/android/layout_tests/dom/html/level2/html/HTMLTableRowElement05.html
+/sdcard/android/layout_tests/dom/html/level2/html/HTMLSelectElement19.html
 /sdcard/android/layout_tests/dom/html/level2/html/HTMLCollection09.html
 /sdcard/android/layout_tests/dom/html/level2/html/HTMLTableCellElement06.html
 /sdcard/android/layout_tests/dom/html/level2/html/HTMLFrameElement05.html
@@ -687,6 +716,7 @@
 /sdcard/android/layout_tests/dom/html/level2/html/HTMLOptionElement08.html
 /sdcard/android/layout_tests/dom/html/level2/html/HTMLElement24.html
 /sdcard/android/layout_tests/dom/html/level2/html/HTMLBodyElement04.html
+/sdcard/android/layout_tests/dom/html/level2/html/HTMLFormElement10.html
 /sdcard/android/layout_tests/dom/html/level2/html/HTMLObjectElement12.html
 /sdcard/android/layout_tests/dom/html/level2/html/HTMLDocument26.html
 /sdcard/android/layout_tests/dom/html/level2/html/HTMLTableSectionElement14.html
@@ -812,6 +842,7 @@
 /sdcard/android/layout_tests/dom/html/level2/html/HTMLElement64.html
 /sdcard/android/layout_tests/dom/html/level2/html/table19.html
 /sdcard/android/layout_tests/dom/html/level2/html/HTMLTableRowElement02.html
+/sdcard/android/layout_tests/dom/html/level2/html/HTMLSelectElement16.html
 /sdcard/android/layout_tests/dom/html/level2/html/HTMLCollection06.html
 /sdcard/android/layout_tests/dom/html/level2/html/HTMLImageElement07.html
 /sdcard/android/layout_tests/dom/html/level2/html/HTMLTableCellElement03.html
@@ -955,16 +986,21 @@
 /sdcard/android/layout_tests/dom/html/level2/core/hc_entitiesremovenameditemns1.html
 /sdcard/android/layout_tests/dom/html/level2/core/hc_nodedocumentfragmentnormalize1.html
 /sdcard/android/layout_tests/dom/html/level2/core/createDocument08.html
-/sdcard/android/layout_tests/plugins/createScriptableObject-before-start.html
-/sdcard/android/layout_tests/plugins/get-empty-url.html
-/sdcard/android/layout_tests/plugins/return-error-from-new-stream-callback-in-full-frame-plugin.html
 /sdcard/android/layout_tests/editing/style/temporary-span-crash.html
 /sdcard/android/layout_tests/editing/style/4230923.html
+/sdcard/android/layout_tests/editing/style/textdecoration-outside-of-unsplittable-element.html
+/sdcard/android/layout_tests/editing/style/textdecoration-outside-of-rooteditable.html
+/sdcard/android/layout_tests/editing/style/highlight-insert-paragraph.html
+/sdcard/android/layout_tests/editing/inserting/6609479-1.html
+/sdcard/android/layout_tests/editing/inserting/6609479.html
 /sdcard/android/layout_tests/editing/inserting/5549929-1.html
+/sdcard/android/layout_tests/editing/inserting/font-size-clears-from-typing-style.html
 /sdcard/android/layout_tests/editing/inserting/6104369.html
+/sdcard/android/layout_tests/editing/inserting/return-with-object-element.html
 /sdcard/android/layout_tests/editing/inserting/5803706-2.html
 /sdcard/android/layout_tests/editing/inserting/5685601-2.html
 /sdcard/android/layout_tests/editing/inserting/5607069-1.html
+/sdcard/android/layout_tests/editing/inserting/insert-br-quoted-007.html
 /sdcard/android/layout_tests/editing/inserting/5803706-1.html
 /sdcard/android/layout_tests/editing/inserting/5685601-1.html
 /sdcard/android/layout_tests/editing/inserting/5994480.html
@@ -972,33 +1008,69 @@
 /sdcard/android/layout_tests/editing/inserting/insert-before-link-1.html
 /sdcard/android/layout_tests/editing/inserting/5378847.html
 /sdcard/android/layout_tests/editing/inserting/5685601-3.html
+/sdcard/android/layout_tests/editing/inserting/6703873-2.html
+/sdcard/android/layout_tests/editing/execCommand/toggle-style-2.html
 /sdcard/android/layout_tests/editing/execCommand/19403.html
+/sdcard/android/layout_tests/editing/execCommand/indent-nested-div.html
+/sdcard/android/layout_tests/editing/execCommand/25256.html
 /sdcard/android/layout_tests/editing/execCommand/default-parameters.html
+/sdcard/android/layout_tests/editing/execCommand/5120591.html
 /sdcard/android/layout_tests/editing/execCommand/19455.html
 /sdcard/android/layout_tests/editing/execCommand/19087.html
+/sdcard/android/layout_tests/editing/execCommand/5543472-3.html
+/sdcard/android/layout_tests/editing/execCommand/5207369.html
 /sdcard/android/layout_tests/editing/execCommand/empty-span-removal.html
+/sdcard/android/layout_tests/editing/execCommand/4916583.html
+/sdcard/android/layout_tests/editing/execCommand/5658933-2.html
 /sdcard/android/layout_tests/editing/execCommand/5469868.html
+/sdcard/android/layout_tests/editing/execCommand/insert-list-with-id.html
+/sdcard/android/layout_tests/editing/execCommand/indent-div-inside-list.html
 /sdcard/android/layout_tests/editing/execCommand/5575101-1.html
+/sdcard/android/layout_tests/editing/execCommand/5432254-1.html
+/sdcard/android/layout_tests/editing/execCommand/indent-nested-blockquotes.html
+/sdcard/android/layout_tests/editing/execCommand/5062376.html
+/sdcard/android/layout_tests/editing/execCommand/indent-second-paragraph-in-blockquote.html
 /sdcard/android/layout_tests/editing/execCommand/findString-3.html
+/sdcard/android/layout_tests/editing/execCommand/toggle-text-decorations.html
+/sdcard/android/layout_tests/editing/execCommand/5142012-3.html
+/sdcard/android/layout_tests/editing/execCommand/indent-empty-table-cell.html
+/sdcard/android/layout_tests/editing/execCommand/5700414-1.html
 /sdcard/android/layout_tests/editing/execCommand/16049.html
 /sdcard/android/layout_tests/editing/execCommand/19653-1.html
 /sdcard/android/layout_tests/editing/execCommand/arguments-combinations.html
+/sdcard/android/layout_tests/editing/execCommand/5685604-1.html
+/sdcard/android/layout_tests/editing/execCommand/4128080-1.html
 /sdcard/android/layout_tests/editing/execCommand/5575101-3.html
+/sdcard/android/layout_tests/editing/execCommand/5119244.html
+/sdcard/android/layout_tests/editing/execCommand/5543472-2.html
+/sdcard/android/layout_tests/editing/execCommand/inline-style-after-indentoutdent.html
 /sdcard/android/layout_tests/editing/execCommand/5770834-1.html
 /sdcard/android/layout_tests/editing/execCommand/5483526.html
 /sdcard/android/layout_tests/editing/execCommand/5658933-1.html
+/sdcard/android/layout_tests/editing/execCommand/5164796.html
 /sdcard/android/layout_tests/editing/execCommand/6355786.html
 /sdcard/android/layout_tests/editing/execCommand/5604313.html
 /sdcard/android/layout_tests/editing/execCommand/19653-3.html
-/sdcard/android/layout_tests/editing/execCommand/5763082.html
+/sdcard/android/layout_tests/editing/execCommand/outdent-regular-blockquote.html
 /sdcard/android/layout_tests/editing/execCommand/6444148.html
+/sdcard/android/layout_tests/editing/execCommand/5763082.html
 /sdcard/android/layout_tests/editing/execCommand/4976800.html
 /sdcard/android/layout_tests/editing/execCommand/4928635.html
+/sdcard/android/layout_tests/editing/execCommand/list-wrapping-image-crash.html
 /sdcard/android/layout_tests/editing/execCommand/4920742-2.html
 /sdcard/android/layout_tests/editing/execCommand/4917055.html
+/sdcard/android/layout_tests/editing/execCommand/5658933-3.html
 /sdcard/android/layout_tests/editing/execCommand/5575101-2.html
+/sdcard/android/layout_tests/editing/execCommand/5432254-2.html
+/sdcard/android/layout_tests/editing/execCommand/5144139-1.html
+/sdcard/android/layout_tests/editing/execCommand/5543472-1.html
+/sdcard/android/layout_tests/editing/execCommand/25320.html
+/sdcard/android/layout_tests/editing/execCommand/5210032.html
 /sdcard/android/layout_tests/editing/execCommand/12244.html
+/sdcard/android/layout_tests/editing/execCommand/15381.html
+/sdcard/android/layout_tests/editing/execCommand/5700414-2.html
 /sdcard/android/layout_tests/editing/execCommand/19653-2.html
+/sdcard/android/layout_tests/editing/execCommand/boldSelection.html
 /sdcard/android/layout_tests/editing/execCommand/4916235.html
 /sdcard/android/layout_tests/editing/execCommand/5458246.html
 /sdcard/android/layout_tests/editing/execCommand/toggle-styles.html
@@ -1006,47 +1078,67 @@
 /sdcard/android/layout_tests/editing/pasteboard/6018653.html
 /sdcard/android/layout_tests/editing/pasteboard/4930986-1.html
 /sdcard/android/layout_tests/editing/pasteboard/5780697-1.html
+/sdcard/android/layout_tests/editing/pasteboard/copy-crash-with-extraneous-attribute.html
 /sdcard/android/layout_tests/editing/pasteboard/4930986-3.html
 /sdcard/android/layout_tests/editing/pasteboard/5245519.html
+/sdcard/android/layout_tests/editing/pasteboard/copy-display-none.html
 /sdcard/android/layout_tests/editing/pasteboard/5521237.html
 /sdcard/android/layout_tests/editing/pasteboard/newlines-around-floating-or-positioned.html
 /sdcard/android/layout_tests/editing/pasteboard/5078739.html
 /sdcard/android/layout_tests/editing/pasteboard/createMarkup-assert.xml
 /sdcard/android/layout_tests/editing/pasteboard/4930986-2.html
+/sdcard/android/layout_tests/editing/pasteboard/4840662.html
 /sdcard/android/layout_tests/editing/pasteboard/5480736.html
-/sdcard/android/layout_tests/editing/selection/5497643.html
 /sdcard/android/layout_tests/editing/selection/5825350-1.html
-/sdcard/android/layout_tests/editing/selection/setBaseAndExtent-revert-selection.html
 /sdcard/android/layout_tests/editing/selection/selection-invalid-offset.html
+/sdcard/android/layout_tests/editing/selection/move-by-line-005.html
 /sdcard/android/layout_tests/editing/selection/rangeCount.html
-/sdcard/android/layout_tests/editing/selection/5714333.html
-/sdcard/android/layout_tests/editing/selection/select-line.html
-/sdcard/android/layout_tests/editing/selection/doubleclick-whitespace-crash.html
 /sdcard/android/layout_tests/editing/selection/containsNode.html
-/sdcard/android/layout_tests/editing/selection/select-all-user-select-none.html
 /sdcard/android/layout_tests/editing/selection/selectAllChildren.html
-/sdcard/android/layout_tests/editing/selection/find-in-text-control.html
-/sdcard/android/layout_tests/editing/selection/extend.html
-/sdcard/android/layout_tests/editing/selection/5241148.html
 /sdcard/android/layout_tests/editing/selection/cleared-by-relayout.html
+/sdcard/android/layout_tests/editing/selection/extend-selection.html
 /sdcard/android/layout_tests/editing/selection/5825350-2.html
 /sdcard/android/layout_tests/editing/selection/5794920-1.html
-/sdcard/android/layout_tests/editing/selection/5779984-1.html
 /sdcard/android/layout_tests/editing/selection/deleteFromDocument.html
+/sdcard/android/layout_tests/editing/selection/5497643.html
+/sdcard/android/layout_tests/editing/selection/setBaseAndExtent-revert-selection.html
+/sdcard/android/layout_tests/editing/selection/crash-on-drag-with-mutation-events.html
+/sdcard/android/layout_tests/editing/selection/5714333.html
+/sdcard/android/layout_tests/editing/selection/select-all-user-select-none.html
+/sdcard/android/layout_tests/editing/selection/thai-word-at-document-end.html
+/sdcard/android/layout_tests/editing/selection/extend.html
+/sdcard/android/layout_tests/editing/selection/5241148.html
+/sdcard/android/layout_tests/editing/selection/5213963.html
+/sdcard/android/layout_tests/editing/selection/move-by-line-004.html
+/sdcard/android/layout_tests/editing/selection/extend-by-line-anonymous-content-crash.html
+/sdcard/android/layout_tests/editing/selection/5779984-1.html
 /sdcard/android/layout_tests/editing/undo/4059423-1.html
 /sdcard/android/layout_tests/editing/undo/4059423-2.html
 /sdcard/android/layout_tests/editing/undo/5658727.html
 /sdcard/android/layout_tests/editing/undo/5738768.html
+/sdcard/android/layout_tests/editing/deleting/25322-2.html
 /sdcard/android/layout_tests/editing/deleting/2610675-2.html
 /sdcard/android/layout_tests/editing/deleting/5847330-2.html
+/sdcard/android/layout_tests/editing/deleting/5156801.html
+/sdcard/android/layout_tests/editing/deleting/4866671.html
+/sdcard/android/layout_tests/editing/deleting/type-delete-after-quote-2.html
+/sdcard/android/layout_tests/editing/deleting/25322-1.html
+/sdcard/android/layout_tests/editing/deleting/merge-at-end-of-document.html
 /sdcard/android/layout_tests/editing/deleting/6026335.html
 /sdcard/android/layout_tests/editing/deleting/2610675-1.html
 /sdcard/android/layout_tests/editing/deleting/5847330-1.html
 /sdcard/android/layout_tests/editing/deleting/5433862-1.html
 /sdcard/android/layout_tests/editing/deleting/5495723.html
 /sdcard/android/layout_tests/editing/deleting/5290534.html
+/sdcard/android/layout_tests/editing/deleting/removeNodeCommand-assert.html
+/sdcard/android/layout_tests/editing/deleting/25322-3.html
 /sdcard/android/layout_tests/editing/deleting/2610675-3.html
+/sdcard/android/layout_tests/editing/deleting/5890684.html
+/sdcard/android/layout_tests/editing/deleting/in-visibly-empty-root.html
+/sdcard/android/layout_tests/editing/deleting/4875189.html
+/sdcard/android/layout_tests/fast/media/matchmedium-query-api.html
 /sdcard/android/layout_tests/fast/replaced/object-param-no-name.html
+/sdcard/android/layout_tests/fast/ruby/parse-rp.html
 /sdcard/android/layout_tests/fast/dynamic/subtree-common-root.html
 /sdcard/android/layout_tests/fast/dynamic/hovered-detach.html
 /sdcard/android/layout_tests/fast/dynamic/insertAdjacentHTML.html
@@ -1060,11 +1152,16 @@
 /sdcard/android/layout_tests/fast/dynamic/float-remove-above-line.html
 /sdcard/android/layout_tests/fast/dynamic/recursive-layout.html
 /sdcard/android/layout_tests/fast/dynamic/inline-to-block-crash.html
+/sdcard/android/layout_tests/fast/text/whitespace/nowrap-line-break-after-white-space.html
 /sdcard/android/layout_tests/fast/text/find-backwards.html
 /sdcard/android/layout_tests/fast/text/large-text-composed-char-dos.html
+/sdcard/android/layout_tests/fast/text/find-quotes.html
 /sdcard/android/layout_tests/fast/text/find-case-folding.html
 /sdcard/android/layout_tests/fast/text/text-shadow-extreme-value.html
+/sdcard/android/layout_tests/fast/text/find-hidden-text.html
 /sdcard/android/layout_tests/fast/text/line-breaks-after-ideographic-comma-or-full-stop.html
+/sdcard/android/layout_tests/fast/text/find-spaces.html
+/sdcard/android/layout_tests/fast/text/text-large-negative-letter-spacing-with-opacity.html
 /sdcard/android/layout_tests/fast/encoding/gbk/chinese.html
 /sdcard/android/layout_tests/fast/encoding/gbk/x-euc-cn.html
 /sdcard/android/layout_tests/fast/encoding/gbk/gb_2312-80.html
@@ -1084,43 +1181,45 @@
 /sdcard/android/layout_tests/fast/encoding/hebrew/8859-8-i.html
 /sdcard/android/layout_tests/fast/encoding/hebrew/logical.html
 /sdcard/android/layout_tests/fast/encoding/hebrew/iso-ir-138.html
-/sdcard/android/layout_tests/fast/encoding/charset-invalid.html
-/sdcard/android/layout_tests/fast/encoding/hanarei-blog32-fc2-com.html
-/sdcard/android/layout_tests/fast/encoding/pseudo-tags-in-attributes.html
-/sdcard/android/layout_tests/fast/encoding/decoder-allow-null-chars.html
-/sdcard/android/layout_tests/fast/encoding/charset-utf16.html
-/sdcard/android/layout_tests/fast/encoding/css-charset-dom.html
 /sdcard/android/layout_tests/fast/encoding/pseudo-xml-4.html
-/sdcard/android/layout_tests/fast/encoding/char-encoding.html
-/sdcard/android/layout_tests/fast/encoding/css-link-charset.html
-/sdcard/android/layout_tests/fast/encoding/latin1-winlatin.html
 /sdcard/android/layout_tests/fast/encoding/no-charset-on-dynamic-script-load.html
-/sdcard/android/layout_tests/fast/encoding/high-bit-latin1.html
 /sdcard/android/layout_tests/fast/encoding/utf-32-little-endian-bom.html
 /sdcard/android/layout_tests/fast/encoding/bandai-co-jp-releases.html
 /sdcard/android/layout_tests/fast/encoding/utf-32-big-endian-bom.html
+/sdcard/android/layout_tests/fast/encoding/css-charset-evil.html
+/sdcard/android/layout_tests/fast/encoding/css-charset.html
+/sdcard/android/layout_tests/fast/encoding/xml-charset-utf16.html
+/sdcard/android/layout_tests/fast/encoding/pseudo-xml-3.html
+/sdcard/android/layout_tests/fast/encoding/tag-in-title.html
+/sdcard/android/layout_tests/fast/encoding/noscript-in-head.html
+/sdcard/android/layout_tests/fast/encoding/css-cached-bom.html
+/sdcard/android/layout_tests/fast/encoding/preload-encoding.html
+/sdcard/android/layout_tests/fast/encoding/charset-invalid.html
+/sdcard/android/layout_tests/fast/encoding/pseudo-tags-in-attributes.html
+/sdcard/android/layout_tests/fast/encoding/decoder-allow-null-chars.html
+/sdcard/android/layout_tests/fast/encoding/css-charset-dom.html
+/sdcard/android/layout_tests/fast/encoding/charset-utf16.html
+/sdcard/android/layout_tests/fast/encoding/char-encoding.html
+/sdcard/android/layout_tests/fast/encoding/css-link-charset.html
+/sdcard/android/layout_tests/fast/encoding/latin1-winlatin.html
+/sdcard/android/layout_tests/fast/encoding/high-bit-latin1.html
 /sdcard/android/layout_tests/fast/encoding/bom-in-content.html
 /sdcard/android/layout_tests/fast/encoding/bom-in-content-utf16.html
 /sdcard/android/layout_tests/fast/encoding/namespace-tolerance.html
-/sdcard/android/layout_tests/fast/encoding/css-charset-evil.html
-/sdcard/android/layout_tests/fast/encoding/css-charset.html
 /sdcard/android/layout_tests/fast/encoding/misplaced-xml-declaration.html
+/sdcard/android/layout_tests/fast/encoding/euckr-name.html
 /sdcard/android/layout_tests/fast/encoding/charset-xuser-defined.html
-/sdcard/android/layout_tests/fast/encoding/xml-charset-utf16.html
 /sdcard/android/layout_tests/fast/encoding/pseudo-xml-2.html
 /sdcard/android/layout_tests/fast/encoding/floraexpress-ru.html
 /sdcard/android/layout_tests/fast/encoding/charset-cp1251.html
-/sdcard/android/layout_tests/fast/encoding/utf-32-little-endian-nobom.xml
 /sdcard/android/layout_tests/fast/encoding/charset-unicode.html
 /sdcard/android/layout_tests/fast/encoding/meta-charset.html
-/sdcard/android/layout_tests/fast/encoding/utf-32-big-endian-nobom.xml
-/sdcard/android/layout_tests/fast/encoding/pseudo-xml-3.html
+/sdcard/android/layout_tests/fast/encoding/xml-utf-8-default.xml
 /sdcard/android/layout_tests/fast/encoding/pseudo-xml.html
-/sdcard/android/layout_tests/fast/encoding/tag-in-title.html
+/sdcard/android/layout_tests/fast/encoding/yahoo-mail.html
+/sdcard/android/layout_tests/fast/encoding/ahram-org-eg.html
 /sdcard/android/layout_tests/fast/encoding/script-in-head.html
-/sdcard/android/layout_tests/fast/encoding/css-cached-bom.html
 /sdcard/android/layout_tests/fast/encoding/mispositioned-meta.html
-/sdcard/android/layout_tests/fast/encoding/preload-encoding.html
 /sdcard/android/layout_tests/fast/multicol/gap-non-negative.html
 /sdcard/android/layout_tests/fast/multicol/content-height-zero-crash.html
 /sdcard/android/layout_tests/fast/doctypes/doctype-at-end.html
@@ -1135,6 +1234,7 @@
 /sdcard/android/layout_tests/fast/transforms/container-transform-crash.html
 /sdcard/android/layout_tests/fast/leaks/001.html
 /sdcard/android/layout_tests/fast/leaks/002.html
+/sdcard/android/layout_tests/fast/borders/border-radius-parsing.html
 /sdcard/android/layout_tests/fast/innerHTML/innerHTML-custom-tag.html
 /sdcard/android/layout_tests/fast/innerHTML/additional-inline-style.html
 /sdcard/android/layout_tests/fast/innerHTML/005.html
@@ -1142,61 +1242,84 @@
 /sdcard/android/layout_tests/fast/innerHTML/innerHTML-case.html
 /sdcard/android/layout_tests/fast/overflow/onscroll-layer-self-destruct.html
 /sdcard/android/layout_tests/fast/overflow/generated-content-crash.html
+/sdcard/android/layout_tests/fast/overflow/overflow-y-scroll.html
 /sdcard/android/layout_tests/fast/events/dispatch-to-handle-event.html
+/sdcard/android/layout_tests/fast/events/scroll-during-zoom-change.html
+/sdcard/android/layout_tests/fast/events/scroll-event-does-not-bubble.html
 /sdcard/android/layout_tests/fast/events/onload-after-document-close-with-subresource.html
+/sdcard/android/layout_tests/fast/events/message-channel-gc-4.html
+/sdcard/android/layout_tests/fast/events/message-channel-listener-circular-ownership.html
+/sdcard/android/layout_tests/fast/events/message-port-constructor-for-deleted-document.html
 /sdcard/android/layout_tests/fast/events/dispatchEvent-crash.html
 /sdcard/android/layout_tests/fast/events/programmatic-check-no-change-event.html
+/sdcard/android/layout_tests/fast/events/message-port-inactive-document.html
 /sdcard/android/layout_tests/fast/events/onunload-body-property.html
+/sdcard/android/layout_tests/fast/events/event-trace.html
 /sdcard/android/layout_tests/fast/events/init-event-after-dispatch.html
 /sdcard/android/layout_tests/fast/events/delayed-style-mutation-event-crash.html
-/sdcard/android/layout_tests/fast/events/anchor-empty-focus.html
+/sdcard/android/layout_tests/fast/events/keydown-keypress-focus-change.html
 /sdcard/android/layout_tests/fast/events/no-blur-on-page-leave.html
 /sdcard/android/layout_tests/fast/events/onload-name-collision.html
 /sdcard/android/layout_tests/fast/events/div-focus.html
-/sdcard/android/layout_tests/fast/events/related-target.html
 /sdcard/android/layout_tests/fast/events/overflow-events.html
 /sdcard/android/layout_tests/fast/events/create-document-crash-on-attach-event.html
 /sdcard/android/layout_tests/fast/events/no-blur-on-enter-button.html
 /sdcard/android/layout_tests/fast/events/keypress-removed-node.html
 /sdcard/android/layout_tests/fast/events/shadow-boundary-crossing.html
 /sdcard/android/layout_tests/fast/events/submit-reset-nested-bubble.html
+/sdcard/android/layout_tests/fast/events/message-port-deleted-frame.html
 /sdcard/android/layout_tests/fast/events/nested-event-remove-node-crash.html
 /sdcard/android/layout_tests/fast/events/onsubmit-bubbling.html
 /sdcard/android/layout_tests/fast/events/onload-fires-twice.html
+/sdcard/android/layout_tests/fast/events/message-port-no-wrapper.html
 /sdcard/android/layout_tests/fast/events/mousedown_in_scrollbar.html
+/sdcard/android/layout_tests/fast/events/onload-single-line-comment.html
+/sdcard/android/layout_tests/fast/events/message-channel-gc-2.html
 /sdcard/android/layout_tests/fast/events/window-load-capture.html
+/sdcard/android/layout_tests/fast/events/message-port-deleted-document.html
 /sdcard/android/layout_tests/fast/events/event-instanceof.html
+/sdcard/android/layout_tests/fast/events/message-channel-gc.html
 /sdcard/android/layout_tests/fast/events/event-creation.html
+/sdcard/android/layout_tests/fast/events/event-listener-sharing.html
 /sdcard/android/layout_tests/fast/events/caller-access-from-event-listener.html
 /sdcard/android/layout_tests/fast/events/stopPropagation-submit.html
 /sdcard/android/layout_tests/fast/events/remove-event-listener.html
 /sdcard/android/layout_tests/fast/events/mouseup-outside-button.html
+/sdcard/android/layout_tests/fast/events/iframe-object-onload.html
 /sdcard/android/layout_tests/fast/events/no-window-load.html
 /sdcard/android/layout_tests/fast/events/event-listener-html-non-html-confusion.html
 /sdcard/android/layout_tests/fast/events/onerror-bubbling.html
 /sdcard/android/layout_tests/fast/events/keydown-remove-frame.html
+/sdcard/android/layout_tests/fast/events/message-channel-gc-3.html
+/sdcard/android/layout_tests/fast/events/scroll-to-anchor-in-overflow-hidden.html
 /sdcard/android/layout_tests/fast/events/event-targets.html
 /sdcard/android/layout_tests/fast/events/space-scroll-event.html
 /sdcard/android/layout_tests/fast/events/onload-after-document-close-no-subresource.html
 /sdcard/android/layout_tests/fast/events/nested-window-event.html
 /sdcard/android/layout_tests/fast/events/selectstart-during-autoscroll.html
 /sdcard/android/layout_tests/fast/events/stopPropagation-checkbox.html
+/sdcard/android/layout_tests/fast/events/message-port-clone.html
 /sdcard/android/layout_tests/fast/events/tab-crash-with-image-map.html
 /sdcard/android/layout_tests/fast/events/simulated-key-state.html
 /sdcard/android/layout_tests/fast/events/init-event-null-view.html
-/sdcard/android/layout_tests/fast/events/resize-subframe.html
+/sdcard/android/layout_tests/fast/events/init-events.html
 /sdcard/android/layout_tests/fast/events/onunload-window-property.html
+/sdcard/android/layout_tests/fast/events/message-port.html
+/sdcard/android/layout_tests/fast/html/tab-order.html
+/sdcard/android/layout_tests/fast/html/xhtml-serialize.html
 /sdcard/android/layout_tests/fast/html/empty-fragment-id-goto-top.html
 /sdcard/android/layout_tests/fast/html/script-allowed-types-languages.html
-/sdcard/android/layout_tests/fast/html/xhtml-serialize.html
+/sdcard/android/layout_tests/fast/html/text-field-input-types.html
+/sdcard/android/layout_tests/fast/html/draggable.html
 /sdcard/android/layout_tests/fast/html/body-offset-properties.html
-/sdcard/android/layout_tests/fast/images/animated-background-image-crash.html
-/sdcard/android/layout_tests/fast/images/border.html
-/sdcard/android/layout_tests/fast/images/load-img-with-empty-src.html
 /sdcard/android/layout_tests/fast/images/image-empty-data.html
-/sdcard/android/layout_tests/fast/images/text-content-crash-2.html
 /sdcard/android/layout_tests/fast/images/text-content-crash.html
+/sdcard/android/layout_tests/fast/images/border.html
+/sdcard/android/layout_tests/fast/images/animated-background-image-crash.html
+/sdcard/android/layout_tests/fast/images/load-img-with-empty-src.html
+/sdcard/android/layout_tests/fast/images/text-content-crash-2.html
 /sdcard/android/layout_tests/fast/inspector/cssURLQuotes.html
+/sdcard/android/layout_tests/fast/flexbox/repaint-scrollbar.html
 /sdcard/android/layout_tests/fast/flexbox/inline-children-crash.html
 /sdcard/android/layout_tests/fast/tokenizer/nested-cached-scripts.html
 /sdcard/android/layout_tests/fast/tokenizer/image-empty-crash.html
@@ -1215,13 +1338,14 @@
 /sdcard/android/layout_tests/fast/tokenizer/badscript.html
 /sdcard/android/layout_tests/fast/regex/quantified-assertions.html
 /sdcard/android/layout_tests/fast/regex/non-pattern-characters.html
-/sdcard/android/layout_tests/fast/regex/slow.html
 /sdcard/android/layout_tests/fast/regex/malformed-escapes.html
 /sdcard/android/layout_tests/fast/regex/early-acid3-86.html
 /sdcard/android/layout_tests/fast/regex/alternative-length-miscalculation.html
 /sdcard/android/layout_tests/fast/regex/test4.html
 /sdcard/android/layout_tests/fast/regex/non-capturing-backtracking.html
+/sdcard/android/layout_tests/fast/box-shadow/box-shadow-overflow-scroll.html
 /sdcard/android/layout_tests/fast/js/kde/Boolean.html
+/sdcard/android/layout_tests/fast/js/kde/garbage-n.html
 /sdcard/android/layout_tests/fast/js/kde/function.html
 /sdcard/android/layout_tests/fast/js/kde/function_length.html
 /sdcard/android/layout_tests/fast/js/kde/const.html
@@ -1257,8 +1381,10 @@
 /sdcard/android/layout_tests/fast/js/kde/j-comment-4.html
 /sdcard/android/layout_tests/fast/js/kde/iteration.html
 /sdcard/android/layout_tests/fast/js/kde/comment-1.html
+/sdcard/android/layout_tests/fast/js/kde/string-2-n.html
 /sdcard/android/layout_tests/fast/js/kde/Prototype.html
 /sdcard/android/layout_tests/fast/js/kde/completion.html
+/sdcard/android/layout_tests/fast/js/kde/encode_decode_uri.html
 /sdcard/android/layout_tests/fast/js/kde/exceptions.html
 /sdcard/android/layout_tests/fast/js/kde/md5-2.html
 /sdcard/android/layout_tests/fast/js/kde/Error.html
@@ -1266,6 +1392,7 @@
 /sdcard/android/layout_tests/fast/js/kde/object_prototype.html
 /sdcard/android/layout_tests/fast/js/kde/empty.html
 /sdcard/android/layout_tests/fast/js/kde/inbuilt_function_proto.html
+/sdcard/android/layout_tests/fast/js/kde/string-1-n.html
 /sdcard/android/layout_tests/fast/js/kde/func-decl.html
 /sdcard/android/layout_tests/fast/js/kde/comment-2.html
 /sdcard/android/layout_tests/fast/js/kde/inbuilt_function_tostring.html
@@ -1284,15 +1411,20 @@
 /sdcard/android/layout_tests/fast/js/pic/cached-deleted-properties.html
 /sdcard/android/layout_tests/fast/js/pic/dictionary-prototype.html
 /sdcard/android/layout_tests/fast/js/bitwise-and-on-undefined.html
+/sdcard/android/layout_tests/fast/js/exception-sequencing-binops.html
 /sdcard/android/layout_tests/fast/js/exception-thrown-from-eval-inside-closure.html
+/sdcard/android/layout_tests/fast/js/recursion-limit-equal.html
 /sdcard/android/layout_tests/fast/js/string_replace.html
 /sdcard/android/layout_tests/fast/js/ignored-result-ref-crash.html
 /sdcard/android/layout_tests/fast/js/function-toString-object-literals.html
 /sdcard/android/layout_tests/fast/js/numeric-conversion.html
 /sdcard/android/layout_tests/fast/js/select-options-remove.html
 /sdcard/android/layout_tests/fast/js/array-tostring-ignore-separator.html
+/sdcard/android/layout_tests/fast/js/exception-sequencing-binops2.html
+/sdcard/android/layout_tests/fast/js/function-declaration.html
 /sdcard/android/layout_tests/fast/js/number-toExponential.html
 /sdcard/android/layout_tests/fast/js/direct-entry-to-function-code.html
+/sdcard/android/layout_tests/fast/js/number-parsing-crash.html
 /sdcard/android/layout_tests/fast/js/vardecl-preserve-vardecl.html
 /sdcard/android/layout_tests/fast/js/unexpected-constant-crash.html
 /sdcard/android/layout_tests/fast/js/var-shadows-arg-gc-crash.html
@@ -1316,9 +1448,12 @@
 /sdcard/android/layout_tests/fast/js/function-name.html
 /sdcard/android/layout_tests/fast/js/logical-or-jless.html
 /sdcard/android/layout_tests/fast/js/regexp-non-character.html
+/sdcard/android/layout_tests/fast/js/JSON-parse.html
 /sdcard/android/layout_tests/fast/js/assign.html
 /sdcard/android/layout_tests/fast/js/for-in-avoid-duplicates.html
+/sdcard/android/layout_tests/fast/js/math-transforms.html
 /sdcard/android/layout_tests/fast/js/sort-stability.html
+/sdcard/android/layout_tests/fast/js/try-catch-crash.html
 /sdcard/android/layout_tests/fast/js/duplicate-param-gc-crash.html
 /sdcard/android/layout_tests/fast/js/regexp-stack-overflow.html
 /sdcard/android/layout_tests/fast/js/function-argument-evaluation-before-exception.html
@@ -1327,6 +1462,7 @@
 /sdcard/android/layout_tests/fast/js/do-while-semicolon.html
 /sdcard/android/layout_tests/fast/js/regexp-divequal.html
 /sdcard/android/layout_tests/fast/js/named-function-expression.html
+/sdcard/android/layout_tests/fast/js/array-iterate-backwards.html
 /sdcard/android/layout_tests/fast/js/constructor-attributes.html
 /sdcard/android/layout_tests/fast/js/array-some.html
 /sdcard/android/layout_tests/fast/js/missing-title-end-tag-js.html
@@ -1341,8 +1477,10 @@
 /sdcard/android/layout_tests/fast/js/debugger.html
 /sdcard/android/layout_tests/fast/js/rehash-assign.html
 /sdcard/android/layout_tests/fast/js/object-prototype-constructor.html
+/sdcard/android/layout_tests/fast/js/function-call-aliased.html
 /sdcard/android/layout_tests/fast/js/string-replace-exception-crash.html
 /sdcard/android/layout_tests/fast/js/date-big-setmonth.html
+/sdcard/android/layout_tests/fast/js/array-enumerators-functions.html
 /sdcard/android/layout_tests/fast/js/exception-linenums-in-html-2.html
 /sdcard/android/layout_tests/fast/js/select-options-add.html
 /sdcard/android/layout_tests/fast/js/toString-dontEnum.html
@@ -1352,36 +1490,46 @@
 /sdcard/android/layout_tests/fast/js/string-substr.html
 /sdcard/android/layout_tests/fast/js/for-in-var-scope.html
 /sdcard/android/layout_tests/fast/js/exec-state-marking.html
-/sdcard/android/layout_tests/fast/js/string-sort.html
 /sdcard/android/layout_tests/fast/js/primitive-method-this.html
+/sdcard/android/layout_tests/fast/js/string-sort.html
+/sdcard/android/layout_tests/fast/js/for-in-cached.html
 /sdcard/android/layout_tests/fast/js/delete-getters-setters.html
 /sdcard/android/layout_tests/fast/js/const-without-initializer.html
+/sdcard/android/layout_tests/fast/js/function-apply-aliased.html
 /sdcard/android/layout_tests/fast/js/sparse-array.html
 /sdcard/android/layout_tests/fast/js/same-origin-subframe-about-blank.html
 /sdcard/android/layout_tests/fast/js/nested-function-scope.html
+/sdcard/android/layout_tests/fast/js/function-constructor-single-line-comment.html
+/sdcard/android/layout_tests/fast/js/JSON-stringify.html
+/sdcard/android/layout_tests/fast/js/uncaught-exception-line-number.html
+/sdcard/android/layout_tests/fast/js/const.html
 /sdcard/android/layout_tests/fast/js/reparsing-semicolon-insertion.html
 /sdcard/android/layout_tests/fast/js/regexp-non-capturing-groups.html
 /sdcard/android/layout_tests/fast/js/has-own-property.html
 /sdcard/android/layout_tests/fast/js/window-location-href-file-urls.html
-/sdcard/android/layout_tests/fast/js/convert-nan-to-bool.html
 /sdcard/android/layout_tests/fast/js/regexp-extended-characters-more.html
-/sdcard/android/layout_tests/fast/js/arguments.html
 /sdcard/android/layout_tests/fast/js/prefix-syntax.html
+/sdcard/android/layout_tests/fast/js/exceptions-thrown-in-callbacks.html
 /sdcard/android/layout_tests/fast/js/exception-with-handler-inside-eval-with-dynamic-scope.html
 /sdcard/android/layout_tests/fast/js/for-in-exeception.html
 /sdcard/android/layout_tests/fast/js/array-lastIndexOf.html
 /sdcard/android/layout_tests/fast/js/modify-non-references.html
+/sdcard/android/layout_tests/fast/js/exception-for-nonobject.html
 /sdcard/android/layout_tests/fast/js/regexp-find-first-asserted.html
 /sdcard/android/layout_tests/fast/js/sort-randomly.html
 /sdcard/android/layout_tests/fast/js/array-indexing.html
+/sdcard/android/layout_tests/fast/js/registerCachingAcrossBranchTargets.html
 /sdcard/android/layout_tests/fast/js/regexp-caching.html
 /sdcard/android/layout_tests/fast/js/typeof-syntax.html
 /sdcard/android/layout_tests/fast/js/regexp-character-match-out-of-order.html
+/sdcard/android/layout_tests/fast/js/date-toisostring.html
 /sdcard/android/layout_tests/fast/js/function-call-register-allocation.html
+/sdcard/android/layout_tests/fast/js/arguments.html
 /sdcard/android/layout_tests/fast/js/constant-folding.html
 /sdcard/android/layout_tests/fast/js/activation-object-function-lifetime.html
 /sdcard/android/layout_tests/fast/js/array-filter.html
 /sdcard/android/layout_tests/fast/js/implicit-global-to-global-reentry.html
+/sdcard/android/layout_tests/fast/js/array-reduceRight.html
 /sdcard/android/layout_tests/fast/js/array-foreach.html
 /sdcard/android/layout_tests/fast/js/regexp-many-brackets.html
 /sdcard/android/layout_tests/fast/js/activation-proto.html
@@ -1389,21 +1537,25 @@
 /sdcard/android/layout_tests/fast/js/regexp-unicode-overflow.html
 /sdcard/android/layout_tests/fast/js/postfix-syntax.html
 /sdcard/android/layout_tests/fast/js/global-recursion-on-full-stack.html
-/sdcard/android/layout_tests/fast/js/number-cell-reuse.html
 /sdcard/android/layout_tests/fast/js/closure-inside-extra-arg-call.html
+/sdcard/android/layout_tests/fast/js/number-cell-reuse.html
 /sdcard/android/layout_tests/fast/js/removing-Cf-characters.html
 /sdcard/android/layout_tests/fast/js/pretty-print.html
-/sdcard/android/layout_tests/fast/js/const.html
 /sdcard/android/layout_tests/fast/js/isPrototypeOf.html
+/sdcard/android/layout_tests/fast/js/prototypes.html
 /sdcard/android/layout_tests/fast/js/math.html
 /sdcard/android/layout_tests/fast/js/string-from-char-code.html
+/sdcard/android/layout_tests/fast/js/sort-no-jit-code-crash.html
 /sdcard/android/layout_tests/fast/js/eval-overriding.html
 /sdcard/android/layout_tests/fast/js/regexp-char-insensitive.html
 /sdcard/android/layout_tests/fast/js/array-float-delete.html
 /sdcard/android/layout_tests/fast/js/array-index-immediate-types.html
 /sdcard/android/layout_tests/fast/js/integer-extremes.html
+/sdcard/android/layout_tests/fast/js/console-non-string-values.html
 /sdcard/android/layout_tests/fast/js/regexp-non-bmp.html
+/sdcard/android/layout_tests/fast/js/regexp-range-bound-ffff.html
 /sdcard/android/layout_tests/fast/js/delete-then-put.html
+/sdcard/android/layout_tests/fast/js/nested-object-gc.html
 /sdcard/android/layout_tests/fast/js/string-replace-2.html
 /sdcard/android/layout_tests/fast/js/cached-eval-gc.html
 /sdcard/android/layout_tests/fast/js/property-getters-and-setters.html
@@ -1414,11 +1566,14 @@
 /sdcard/android/layout_tests/fast/js/codegen-loops-logical-nodes.html
 /sdcard/android/layout_tests/fast/js/string-capitalization.html
 /sdcard/android/layout_tests/fast/js/caller-property.html
+/sdcard/android/layout_tests/fast/js/regexp-overflow-too-big.html
+/sdcard/android/layout_tests/fast/js/repeat-cached-vm-reentry.html
 /sdcard/android/layout_tests/fast/js/date-DST-time-cusps.html
 /sdcard/android/layout_tests/fast/js/regexp-unicode-handling.html
 /sdcard/android/layout_tests/fast/js/unmatching-argument-count.html
-/sdcard/android/layout_tests/fast/js/delete-multiple-global-blocks.html
 /sdcard/android/layout_tests/fast/js/text-field-resize.html
+/sdcard/android/layout_tests/fast/js/delete-multiple-global-blocks.html
+/sdcard/android/layout_tests/fast/js/eval-throw-return.html
 /sdcard/android/layout_tests/fast/js/duplicate-param-crash.html
 /sdcard/android/layout_tests/fast/js/switch-behaviour.html
 /sdcard/android/layout_tests/fast/js/delete-syntax.html
@@ -1430,22 +1585,26 @@
 /sdcard/android/layout_tests/fast/js/parse-backslash-before-newline.html
 /sdcard/android/layout_tests/fast/js/delete-function-parameter.html
 /sdcard/android/layout_tests/fast/js/exception-expression-offset.html
+/sdcard/android/layout_tests/fast/js/JSON-stringify-replacer.html
 /sdcard/android/layout_tests/fast/js/invalid-syntax-for-function.html
+/sdcard/android/layout_tests/fast/js/toString-and-valueOf-override.html
 /sdcard/android/layout_tests/fast/js/cyclic-prototypes.html
 /sdcard/android/layout_tests/fast/js/equality.html
 /sdcard/android/layout_tests/fast/js/order-of-operations.html
 /sdcard/android/layout_tests/fast/js/regexp-no-extensions.html
 /sdcard/android/layout_tests/fast/js/stack-unwinding.html
-/sdcard/android/layout_tests/fast/js/reserved-words.html
 /sdcard/android/layout_tests/fast/js/toString-try-else.html
+/sdcard/android/layout_tests/fast/js/reserved-words.html
 /sdcard/android/layout_tests/fast/js/function-dot-arguments-and-caller.html
 /sdcard/android/layout_tests/fast/js/do-while-expression-value.html
 /sdcard/android/layout_tests/fast/js/bom-in-file-retains-correct-offset.html
 /sdcard/android/layout_tests/fast/js/string-split-ignore-case.html
 /sdcard/android/layout_tests/fast/js/date-constructor.html
+/sdcard/android/layout_tests/fast/js/global-function-resolve.html
 /sdcard/android/layout_tests/fast/js/date-big-setdate.html
 /sdcard/android/layout_tests/fast/js/array-every.html
 /sdcard/android/layout_tests/fast/js/array-functions-non-arrays.html
+/sdcard/android/layout_tests/fast/js/function-toString-parentheses.html
 /sdcard/android/layout_tests/fast/js/while-expression-value.html
 /sdcard/android/layout_tests/fast/js/string-replace-3.html
 /sdcard/android/layout_tests/fast/js/avl-crash.html
@@ -1453,9 +1612,11 @@
 /sdcard/android/layout_tests/fast/js/null-char-in-string.html
 /sdcard/android/layout_tests/fast/js/codegen-temporaries-multiple-global-blocks.html
 /sdcard/android/layout_tests/fast/js/char-at.html
+/sdcard/android/layout_tests/fast/js/function-constructor-newline-after-brace.html
 /sdcard/android/layout_tests/fast/js/propertyIsEnumerable.html
 /sdcard/android/layout_tests/fast/js/exception-thrown-from-equal.html
 /sdcard/android/layout_tests/fast/js/constructor.html
+/sdcard/android/layout_tests/fast/js/regexp-backreferences.html
 /sdcard/android/layout_tests/fast/js/regexp-overflow.html
 /sdcard/android/layout_tests/fast/js/var-declarations.html
 /sdcard/android/layout_tests/fast/js/continue-break-multiple-labels.html
@@ -1463,8 +1624,8 @@
 /sdcard/android/layout_tests/fast/js/regexp-test-null-string.html
 /sdcard/android/layout_tests/fast/js/date-parse-comments-test.html
 /sdcard/android/layout_tests/fast/js/select-options-remove-gc.html
-/sdcard/android/layout_tests/fast/js/array-tostring-and-join.html
 /sdcard/android/layout_tests/fast/js/implicit-call-with-global-reentry.html
+/sdcard/android/layout_tests/fast/js/array-tostring-and-join.html
 /sdcard/android/layout_tests/fast/js/function-names.html
 /sdcard/android/layout_tests/fast/js/primitive-property-access-edge-cases.html
 /sdcard/android/layout_tests/fast/js/date-preserve-milliseconds.html
@@ -1474,16 +1635,22 @@
 /sdcard/android/layout_tests/fast/js/static-scope-object.html
 /sdcard/android/layout_tests/fast/js/var-shadows-arg-crash.html
 /sdcard/android/layout_tests/fast/js/function-apply.html
+/sdcard/android/layout_tests/fast/js/array-reduce.html
 /sdcard/android/layout_tests/fast/js/function-prototype.html
 /sdcard/android/layout_tests/fast/js/tostring-exception-in-property-access.html
 /sdcard/android/layout_tests/fast/js/function-declaration-statement.html
+/sdcard/android/layout_tests/fast/js/large-expressions.html
 /sdcard/android/layout_tests/fast/js/date-negative-setmonth.html
 /sdcard/android/layout_tests/fast/js/reentrant-call-unwind.html
+/sdcard/android/layout_tests/fast/js/dictionary-no-cache.html
 /sdcard/android/layout_tests/fast/js/regexp-lastindex.html
 /sdcard/android/layout_tests/fast/js/finally-codegen-failure.html
+/sdcard/android/layout_tests/fast/js/instance-of-immediates.html
 /sdcard/android/layout_tests/fast/js/read-modify-eval.html
 /sdcard/android/layout_tests/fast/js/exception-thrown-from-function-with-lazy-activation.html
 /sdcard/android/layout_tests/fast/js/cyclic-ref-toString.html
+/sdcard/android/layout_tests/fast/js/function-toString-semicolon-insertion.html
+/sdcard/android/layout_tests/fast/js/exception-sequencing.html
 /sdcard/android/layout_tests/fast/js/date-big-constructor.html
 /sdcard/android/layout_tests/fast/js/gmail-re-re.html
 /sdcard/android/layout_tests/fast/js/deep-recursion-test.html
@@ -1501,48 +1668,54 @@
 /sdcard/android/layout_tests/fast/js/eval-cross-window.html
 /sdcard/android/layout_tests/fast/js/function-decompilation-operators.html
 /sdcard/android/layout_tests/fast/js/sort-non-numbers.html
+/sdcard/android/layout_tests/fast/js/excessive-comma-usage.html
+/sdcard/android/layout_tests/fast/js/method-check.html
 /sdcard/android/layout_tests/fast/js/function-declarations.html
-/sdcard/android/layout_tests/fast/js/non-object-proto.html
 /sdcard/android/layout_tests/fast/js/regexp-extended-characters-match.html
+/sdcard/android/layout_tests/fast/js/non-object-proto.html
 /sdcard/android/layout_tests/fast/js/toString-number-dot-expr.html
 /sdcard/android/layout_tests/fast/js/date-parse-test.html
 /sdcard/android/layout_tests/fast/js/exception-try-finally-scope-error.html
 /sdcard/android/layout_tests/fast/js/function-dot-arguments.html
 /sdcard/android/layout_tests/fast/js/toString-prefix-postfix-preserve-parens.html
 /sdcard/android/layout_tests/fast/js/regexp-ranges-and-escaped-hyphens.html
-/sdcard/android/layout_tests/fast/js/exception-linenums.html
-/sdcard/android/layout_tests/fast/js/array-holes.html
 /sdcard/android/layout_tests/fast/js/construct-global-object.html
+/sdcard/android/layout_tests/fast/js/array-holes.html
+/sdcard/android/layout_tests/fast/js/exception-linenums.html
 /sdcard/android/layout_tests/fast/js/codegen-temporaries.html
 /sdcard/android/layout_tests/fast/js/array-join-bug-11524.html
 /sdcard/android/layout_tests/fast/js/with-scope-gc.html
-/sdcard/android/layout_tests/fast/js/array-map.html
 /sdcard/android/layout_tests/fast/js/string-index-overflow.html
 /sdcard/android/layout_tests/fast/js/eval-cache-crash.html
-/sdcard/android/layout_tests/fast/js/typeof-constant-string.html
+/sdcard/android/layout_tests/fast/js/array-map.html
+/sdcard/android/layout_tests/fast/js/exception-codegen-crash.html
 /sdcard/android/layout_tests/fast/js/comparefn-sort-stability.html
+/sdcard/android/layout_tests/fast/js/typeof-constant-string.html
 /sdcard/android/layout_tests/fast/js/navigator-plugins-crash.html
 /sdcard/android/layout_tests/fast/js/vardecl-preserve-parameters.html
 /sdcard/android/layout_tests/fast/inline/clean-after-removing-temp-boxes.html
+/sdcard/android/layout_tests/fast/inline/continuation-positioned-reparenting.html
 /sdcard/android/layout_tests/fast/dom/HTMLTableElement/early-acid3-65-excerpt.html
 /sdcard/android/layout_tests/fast/dom/HTMLTableElement/early-acid3-66-excerpt.html
 /sdcard/android/layout_tests/fast/dom/HTMLTableElement/cellpadding-attribute.html
 /sdcard/android/layout_tests/fast/dom/HTMLTableElement/insert-row.html
 /sdcard/android/layout_tests/fast/dom/HTMLTableElement/tBodies.html
 /sdcard/android/layout_tests/fast/dom/HTMLTableElement/rows.html
-/sdcard/android/layout_tests/fast/dom/HTMLDocument/write-multiple-calls.html
+/sdcard/android/layout_tests/fast/dom/HTMLDocument/activeElement.html
+/sdcard/android/layout_tests/fast/dom/HTMLDocument/hasFocus-frameless-crash.html
 /sdcard/android/layout_tests/fast/dom/HTMLDocument/writeln-call.html
 /sdcard/android/layout_tests/fast/dom/HTMLDocument/document-plugins.html
 /sdcard/android/layout_tests/fast/dom/HTMLDocument/title-get.html
 /sdcard/android/layout_tests/fast/dom/HTMLDocument/object-by-name-unknown-child-element.html
-/sdcard/android/layout_tests/fast/dom/HTMLDocument/write-call.html
 /sdcard/android/layout_tests/fast/dom/HTMLDocument/object-by-name-or-id.html
+/sdcard/android/layout_tests/fast/dom/HTMLDocument/title-set.html
+/sdcard/android/layout_tests/fast/dom/HTMLDocument/write-multiple-calls.html
+/sdcard/android/layout_tests/fast/dom/HTMLDocument/document-special-properties.html
+/sdcard/android/layout_tests/fast/dom/HTMLDocument/url-getset.html
+/sdcard/android/layout_tests/fast/dom/HTMLDocument/write-call.html
 /sdcard/android/layout_tests/fast/dom/HTMLDocument/document-open-return-value.html
 /sdcard/android/layout_tests/fast/dom/HTMLDocument/writeln-multiple-calls.html
-/sdcard/android/layout_tests/fast/dom/HTMLDocument/title-set.html
 /sdcard/android/layout_tests/fast/dom/HTMLLabelElement/form/test1.html
-/sdcard/android/layout_tests/fast/dom/HTMLSelectElement/options-collection-set-string-length.html
-/sdcard/android/layout_tests/fast/dom/HTMLSelectElement/options-collection-detached.html
 /sdcard/android/layout_tests/fast/dom/Document/replace-child.html
 /sdcard/android/layout_tests/fast/dom/Document/title-property-creates-title-element.html
 /sdcard/android/layout_tests/fast/dom/Document/createElementNS-namespace-err.html
@@ -1552,22 +1725,35 @@
 /sdcard/android/layout_tests/fast/dom/Document/replaceChild-null-oldChild.html
 /sdcard/android/layout_tests/fast/dom/Document/createAttributeNS-namespace-err.html
 /sdcard/android/layout_tests/fast/dom/Document/open-with-pending-load.html
+/sdcard/android/layout_tests/fast/dom/Document/document-write-doctype.html
 /sdcard/android/layout_tests/fast/dom/Document/doc-open-while-parsing.html
+/sdcard/android/layout_tests/fast/dom/HTMLSelectElement/named-options.html
+/sdcard/android/layout_tests/fast/dom/HTMLSelectElement/length-not-overridden.html
+/sdcard/android/layout_tests/fast/dom/HTMLSelectElement/options-collection-set-string-length.html
+/sdcard/android/layout_tests/fast/dom/HTMLSelectElement/listbox-select-reset.html
+/sdcard/android/layout_tests/fast/dom/HTMLSelectElement/options-collection-detached.html
+/sdcard/android/layout_tests/fast/dom/HTMLSelectElement/remove-element-from-within-focus-handler-crash.html
+/sdcard/android/layout_tests/fast/dom/Selection/getRangeAt.html
 /sdcard/android/layout_tests/fast/dom/HTMLMetaElement/meta-attributes.html
+/sdcard/android/layout_tests/fast/dom/Element/fixed-position-offset-parent.html
 /sdcard/android/layout_tests/fast/dom/Element/getAttribute-check-case-sensitivity.html
 /sdcard/android/layout_tests/fast/dom/Element/attr-param-typechecking.html
 /sdcard/android/layout_tests/fast/dom/Element/attribute-uppercase.html
 /sdcard/android/layout_tests/fast/dom/Element/element-traversal.html
 /sdcard/android/layout_tests/fast/dom/Element/onclick-case.html
+/sdcard/android/layout_tests/fast/dom/Element/offsetLeft-offsetTop-body-quirk.html
 /sdcard/android/layout_tests/fast/dom/Element/contains-method.html
+/sdcard/android/layout_tests/fast/dom/Element/scrollWidth.html
 /sdcard/android/layout_tests/fast/dom/Element/setAttribute-with-colon.html
 /sdcard/android/layout_tests/fast/dom/Element/setAttribute-case-insensitivity.html
 /sdcard/android/layout_tests/fast/dom/Element/dimension-properties-unrendered.html
+/sdcard/android/layout_tests/fast/dom/Element/offsetLeft-offsetTop-html.html
 /sdcard/android/layout_tests/fast/dom/Element/offsetTop-table-cell.html
 /sdcard/android/layout_tests/fast/dom/DOMException/EventException.html
 /sdcard/android/layout_tests/fast/dom/DOMException/prototype-object.html
 /sdcard/android/layout_tests/fast/dom/DOMException/RangeException.html
 /sdcard/android/layout_tests/fast/dom/HTMLButtonElement/value/getset.html
+/sdcard/android/layout_tests/fast/dom/HTMLScriptElement/script-for-attribute-unexpected-execution.html
 /sdcard/android/layout_tests/fast/dom/HTMLScriptElement/script-reexecution.html
 /sdcard/android/layout_tests/fast/dom/HTMLScriptElement/script-set-src.html
 /sdcard/android/layout_tests/fast/dom/HTMLScriptElement/script-load-events.html
@@ -1583,10 +1769,12 @@
 /sdcard/android/layout_tests/fast/dom/NodeList/invalidate-node-lists-when-parsing.html
 /sdcard/android/layout_tests/fast/dom/NodeList/item-by-id-with-no-document.html
 /sdcard/android/layout_tests/fast/dom/NodeList/nodelist-item-with-name.html
+/sdcard/android/layout_tests/fast/dom/DOMImplementation/createDocument-namespace-err.html
 /sdcard/android/layout_tests/fast/dom/DOMImplementation/createDocumentType-err.html
 /sdcard/android/layout_tests/fast/dom/CSSStyleDeclaration/transition-property-names.html
 /sdcard/android/layout_tests/fast/dom/CSSStyleDeclaration/css-properties-case-sensitive.html
 /sdcard/android/layout_tests/fast/dom/CSSStyleDeclaration/empty-string-property.html
+/sdcard/android/layout_tests/fast/dom/Node/normalize.html
 /sdcard/android/layout_tests/fast/dom/Node/initial-values.html
 /sdcard/android/layout_tests/fast/dom/Node/DOMNodeRemovedEvent.html
 /sdcard/android/layout_tests/fast/dom/SelectorAPI/viewless-document.html
@@ -1597,6 +1785,7 @@
 /sdcard/android/layout_tests/fast/dom/SelectorAPI/id-fastpath.html
 /sdcard/android/layout_tests/fast/dom/SelectorAPI/dumpNodeList.html
 /sdcard/android/layout_tests/fast/dom/SelectorAPI/caseTag.html
+/sdcard/android/layout_tests/fast/dom/SelectorAPI/undefined-null-stringify.html
 /sdcard/android/layout_tests/fast/dom/SelectorAPI/detached-element.html
 /sdcard/android/layout_tests/fast/dom/SelectorAPI/caseID.html
 /sdcard/android/layout_tests/fast/dom/SelectorAPI/bug-17313.html
@@ -1604,6 +1793,13 @@
 /sdcard/android/layout_tests/fast/dom/SelectorAPI/id-fastpath-strict.html
 /sdcard/android/layout_tests/fast/dom/SelectorAPI/dumpNodeList-almost-strict.html
 /sdcard/android/layout_tests/fast/dom/HTMLTableSectionElement/rows.html
+/sdcard/android/layout_tests/fast/dom/HTMLInputElement/checked-pseudo-selector.html
+/sdcard/android/layout_tests/fast/dom/HTMLInputElement/input-text-reset.html
+/sdcard/android/layout_tests/fast/dom/HTMLInputElement/size-as-number.html
+/sdcard/android/layout_tests/fast/dom/HTMLInputElement/duplicate-element-names.html
+/sdcard/android/layout_tests/fast/dom/HTMLInputElement/input-hidden-value.html
+/sdcard/android/layout_tests/fast/dom/HTMLInputElement/input-checked-reset.html
+/sdcard/android/layout_tests/fast/dom/HTMLInputElement/size-attribute.html
 /sdcard/android/layout_tests/fast/dom/getElementsByClassName/array/001.html
 /sdcard/android/layout_tests/fast/dom/getElementsByClassName/array/002.html
 /sdcard/android/layout_tests/fast/dom/getElementsByClassName/array/003.html
@@ -1622,45 +1818,70 @@
 /sdcard/android/layout_tests/fast/dom/getElementsByClassName/015.html
 /sdcard/android/layout_tests/fast/dom/getElementsByClassName/007.html
 /sdcard/android/layout_tests/fast/dom/getElementsByClassName/009.html
-/sdcard/android/layout_tests/fast/dom/HTMLInputElement/checked-pseudo-selector.html
-/sdcard/android/layout_tests/fast/dom/HTMLInputElement/input-text-reset.html
-/sdcard/android/layout_tests/fast/dom/HTMLInputElement/size-as-number.html
-/sdcard/android/layout_tests/fast/dom/HTMLInputElement/duplicate-element-names.html
-/sdcard/android/layout_tests/fast/dom/HTMLInputElement/input-hidden-value.html
-/sdcard/android/layout_tests/fast/dom/HTMLInputElement/input-checked-reset.html
-/sdcard/android/layout_tests/fast/dom/HTMLInputElement/size-attribute.html
 /sdcard/android/layout_tests/fast/dom/TreeWalker/TreeWalker-currentNode.html
 /sdcard/android/layout_tests/fast/dom/HTMLDivElement/align/getset.html
 /sdcard/android/layout_tests/fast/dom/Text/replaceWholeText.html
+/sdcard/android/layout_tests/fast/dom/HTMLFormElement/adopt-assertion.html
+/sdcard/android/layout_tests/fast/dom/HTMLFormElement/document-deactivation-callback-crash.html
 /sdcard/android/layout_tests/fast/dom/HTMLFormElement/htmlformelement-indexed-getter.html
 /sdcard/android/layout_tests/fast/dom/HTMLFormElement/elements-not-in-document.html
+/sdcard/android/layout_tests/fast/dom/Window/Location/window-override-window-using-defineGetter.html
+/sdcard/android/layout_tests/fast/dom/Window/Location/window-override-location-using-defineGetter.html
+/sdcard/android/layout_tests/fast/dom/Window/Location/location-override-valueOf-using-with.html
+/sdcard/android/layout_tests/fast/dom/Window/Location/location-override-valueOf-on-proto-using-defineGetter.html
+/sdcard/android/layout_tests/fast/dom/Window/Location/window-shadow-location-using-string.html
+/sdcard/android/layout_tests/fast/dom/Window/Location/location-override-valueOf-on-proto-using-with.html
+/sdcard/android/layout_tests/fast/dom/Window/Location/location-override-toString.html
+/sdcard/android/layout_tests/fast/dom/Window/Location/location-override-valueOf-on-proto.html
+/sdcard/android/layout_tests/fast/dom/Window/Location/window-shadow-window-using-js-object-with-location-field.html
+/sdcard/android/layout_tests/fast/dom/Window/Location/window-shadow-location-using-js-object-with-toString.html
+/sdcard/android/layout_tests/fast/dom/Window/Location/location-override-toString-using-defineGetter.html
+/sdcard/android/layout_tests/fast/dom/Window/Location/location-override-valueOf.html
+/sdcard/android/layout_tests/fast/dom/Window/Location/location-override-toString-using-with.html
+/sdcard/android/layout_tests/fast/dom/Window/Location/location-override-toString-on-proto-using-defineGetter.html
+/sdcard/android/layout_tests/fast/dom/Window/Location/location-override-toString-on-proto-using-with.html
+/sdcard/android/layout_tests/fast/dom/Window/Location/location-override-toString-on-proto.html
+/sdcard/android/layout_tests/fast/dom/Window/Location/location-override-valueOf-using-defineGetter.html
 /sdcard/android/layout_tests/fast/dom/Window/window-closed-crash.html
-/sdcard/android/layout_tests/fast/dom/Window/setTimeout-no-arguments.html
+/sdcard/android/layout_tests/fast/dom/Window/window-function-name-getter-precedence.html
 /sdcard/android/layout_tests/fast/dom/Window/window-open-self.html
+/sdcard/android/layout_tests/fast/dom/Window/console-functions.html
+/sdcard/android/layout_tests/fast/dom/Window/window-postmessage-args.html
+/sdcard/android/layout_tests/fast/dom/Window/attr-constructor.html
+/sdcard/android/layout_tests/fast/dom/Window/window-remove-event-listener.html
+/sdcard/android/layout_tests/fast/dom/Window/window-frames-self-referential.html
+/sdcard/android/layout_tests/fast/dom/Window/redirect-with-timer.html
+/sdcard/android/layout_tests/fast/dom/Window/setting-properties-on-closed-window.html
+/sdcard/android/layout_tests/fast/dom/Window/window-open-parent.html
+/sdcard/android/layout_tests/fast/dom/Window/window-access-after-navigation.html
+/sdcard/android/layout_tests/fast/dom/Window/window-appendages-cleared.html
+/sdcard/android/layout_tests/fast/dom/Window/window-special-properties.html
+/sdcard/android/layout_tests/fast/dom/Window/window-custom-prototype.html
+/sdcard/android/layout_tests/fast/dom/Window/window-collection-length-no-crash.html
+/sdcard/android/layout_tests/fast/dom/Window/setTimeout-no-arguments.html
 /sdcard/android/layout_tests/fast/dom/Window/getMatchedCSSRules-null-crash.html
 /sdcard/android/layout_tests/fast/dom/Window/window-open-self-from-other-frame.html
 /sdcard/android/layout_tests/fast/dom/Window/window-custom-prototype-crash.html
+/sdcard/android/layout_tests/fast/dom/Window/setTimeout-string-argument.html
 /sdcard/android/layout_tests/fast/dom/Window/window-object-cross-frame-calls.html
 /sdcard/android/layout_tests/fast/dom/Window/window-location-replace-functions.html
-/sdcard/android/layout_tests/fast/dom/Window/attr-constructor.html
-/sdcard/android/layout_tests/fast/dom/Window/window-remove-event-listener.html
+/sdcard/android/layout_tests/fast/dom/Window/dispatchEvent.html
 /sdcard/android/layout_tests/fast/dom/Window/window-function-frame-getter-precedence.html
 /sdcard/android/layout_tests/fast/dom/Window/atob-btoa.html
 /sdcard/android/layout_tests/fast/dom/Window/clear-timeout.html
+/sdcard/android/layout_tests/fast/dom/Window/window-early-properties-xhr.html
 /sdcard/android/layout_tests/fast/dom/Window/window-property-clearing.html
 /sdcard/android/layout_tests/fast/dom/Window/element-constructors-on-window.html
 /sdcard/android/layout_tests/fast/dom/Window/orphaned-frame-access.html
-/sdcard/android/layout_tests/fast/dom/Window/redirect-with-timer.html
+/sdcard/android/layout_tests/fast/dom/Window/window-open-pending-url.html
 /sdcard/android/layout_tests/fast/dom/Window/window-resize-and-move-sub-frame.html
-/sdcard/android/layout_tests/fast/dom/Window/window-open-parent.html
 /sdcard/android/layout_tests/fast/dom/Window/console-trace.html
 /sdcard/android/layout_tests/fast/dom/Window/alert-undefined.html
 /sdcard/android/layout_tests/fast/dom/Window/window-open-top.html
-/sdcard/android/layout_tests/fast/dom/Window/window-appendages-cleared.html
 /sdcard/android/layout_tests/fast/dom/Window/global-opener-function.html
 /sdcard/android/layout_tests/fast/dom/Window/window-property-shadowing.html
 /sdcard/android/layout_tests/fast/dom/Window/remove-timeout-crash.html
-/sdcard/android/layout_tests/fast/dom/Window/window-custom-prototype.html
+/sdcard/android/layout_tests/fast/dom/Window/customized-property-survives-gc.html
 /sdcard/android/layout_tests/fast/dom/Window/timeout-callback-scope.html
 /sdcard/android/layout_tests/fast/dom/Window/window-property-shadowing-name.html
 /sdcard/android/layout_tests/fast/dom/Window/window-open-parent-no-parent.html
@@ -1670,20 +1891,23 @@
 /sdcard/android/layout_tests/fast/dom/HTMLFontElement/size-attribute.html
 /sdcard/android/layout_tests/fast/dom/HTMLObjectElement/form/test1.html
 /sdcard/android/layout_tests/fast/dom/HTMLObjectElement/object-as-frame.html
+/sdcard/android/layout_tests/fast/dom/HTMLElement/innerHTML-selection-crash.html
 /sdcard/android/layout_tests/fast/dom/HTMLElement/set-inner-outer-optimization.html
 /sdcard/android/layout_tests/fast/dom/Range/compareBoundaryPoints-1.html
 /sdcard/android/layout_tests/fast/dom/Range/range-compareNode.html
 /sdcard/android/layout_tests/fast/dom/Range/range-comparePoint.html
 /sdcard/android/layout_tests/fast/dom/Range/acid3-surround-contents.html
 /sdcard/android/layout_tests/fast/dom/Range/mutation.html
+/sdcard/android/layout_tests/fast/dom/Range/deleted-range-endpoints.html
 /sdcard/android/layout_tests/fast/dom/Range/13000.html
 /sdcard/android/layout_tests/fast/dom/Range/range-processing-instructions.html
 /sdcard/android/layout_tests/fast/dom/Range/range-insertNode-separate-endContainer.html
 /sdcard/android/layout_tests/fast/dom/Range/range-intersectsNode.html
 /sdcard/android/layout_tests/fast/dom/Range/range-isPointInRange.html
-/sdcard/android/layout_tests/fast/dom/Range/range-clone-empty.html
 /sdcard/android/layout_tests/fast/dom/Range/compareBoundaryPoints-2.html
+/sdcard/android/layout_tests/fast/dom/Range/range-clone-empty.html
 /sdcard/android/layout_tests/fast/dom/Range/range-modifycontents.html
+/sdcard/android/layout_tests/fast/dom/Range/bug-19527.html
 /sdcard/android/layout_tests/fast/dom/Range/range-insertNode-splittext.html
 /sdcard/android/layout_tests/fast/dom/Range/surroundContents-check-boundary-points.html
 /sdcard/android/layout_tests/fast/dom/Range/range-exceptions.html
@@ -1695,16 +1919,19 @@
 /sdcard/android/layout_tests/fast/dom/HTMLImageElement/image-loading-gc.html
 /sdcard/android/layout_tests/fast/dom/HTMLImageElement/image-longdesc-absolute-url.html
 /sdcard/android/layout_tests/fast/dom/HTMLImageElement/constructor-mutation-event-dispatch.html
+/sdcard/android/layout_tests/fast/dom/HTMLImageElement/image-load-cross-document.html
 /sdcard/android/layout_tests/fast/dom/HTMLImageElement/image-without-renderer-width.html
 /sdcard/android/layout_tests/fast/dom/HTMLImageElement/image-natural-width-height.html
 /sdcard/android/layout_tests/fast/dom/StyleSheet/ownerNode-lifetime.html
 /sdcard/android/layout_tests/fast/dom/EntityReference/readonly-exceptions.html
 /sdcard/android/layout_tests/fast/dom/script-element-remove-self.html
 /sdcard/android/layout_tests/fast/dom/remove-named-attribute-crash.html
+/sdcard/android/layout_tests/fast/dom/style-sheet-candidate-remove-unrendered-document.html
 /sdcard/android/layout_tests/fast/dom/node-item.html
 /sdcard/android/layout_tests/fast/dom/clone-node-style.html
 /sdcard/android/layout_tests/fast/dom/script-element-without-frame-crash.html
 /sdcard/android/layout_tests/fast/dom/script-element-gc.html
+/sdcard/android/layout_tests/fast/dom/empty-hash-and-search.html
 /sdcard/android/layout_tests/fast/dom/duplicate-ids.html
 /sdcard/android/layout_tests/fast/dom/prototypes.html
 /sdcard/android/layout_tests/fast/dom/clone-node-form-elements.html
@@ -1716,7 +1943,23 @@
 /sdcard/android/layout_tests/fast/dom/image-object.html
 /sdcard/android/layout_tests/fast/dom/gc-5.html
 /sdcard/android/layout_tests/fast/dom/cssTarget-crash.html
-/sdcard/android/layout_tests/fast/dom/xmlhttprequest-invalid-values.html
+/sdcard/android/layout_tests/fast/dom/noscript-canvas-in-created-html-document.html
+/sdcard/android/layout_tests/fast/dom/DOMParser-assign-variable.html
+/sdcard/android/layout_tests/fast/dom/offset-parent-positioned-and-inline.html
+/sdcard/android/layout_tests/fast/dom/timer-clear-interval-in-handler.html
+/sdcard/android/layout_tests/fast/dom/implementation-createHTMLDocument.html
+/sdcard/android/layout_tests/fast/dom/iframe-document.html
+/sdcard/android/layout_tests/fast/dom/document-all-input.html
+/sdcard/android/layout_tests/fast/dom/null-document-location-href-put-crash.html
+/sdcard/android/layout_tests/fast/dom/getelementsbytagnamens-mixed-namespaces.html
+/sdcard/android/layout_tests/fast/dom/object-plugin-hides-properties.html
+/sdcard/android/layout_tests/fast/dom/gc-2.html
+/sdcard/android/layout_tests/fast/dom/computed-style-set-property.html
+/sdcard/android/layout_tests/fast/dom/inner-text-001.html
+/sdcard/android/layout_tests/fast/dom/css-selectorText.html
+/sdcard/android/layout_tests/fast/dom/replace-first-child.html
+/sdcard/android/layout_tests/fast/dom/select-selectedIndex-multiple.html
+/sdcard/android/layout_tests/fast/dom/importNode-null.html
 /sdcard/android/layout_tests/fast/dom/space-to-text.html
 /sdcard/android/layout_tests/fast/dom/css-set-property-exception.html
 /sdcard/android/layout_tests/fast/dom/java-applet-calls.html
@@ -1729,17 +1972,18 @@
 /sdcard/android/layout_tests/fast/dom/serialize-cdata.html
 /sdcard/android/layout_tests/fast/dom/createDocument.html
 /sdcard/android/layout_tests/fast/dom/getelementbyname-invalidation.html
+/sdcard/android/layout_tests/fast/dom/setAttributeNS-empty-namespace.html
 /sdcard/android/layout_tests/fast/dom/capturing-event-listeners.html
 /sdcard/android/layout_tests/fast/dom/title-text-property.html
 /sdcard/android/layout_tests/fast/dom/null-page-show-modal-dialog-crash.html
 /sdcard/android/layout_tests/fast/dom/incompatible-operations.html
-/sdcard/android/layout_tests/fast/dom/xmlhttprequest-html-response-encoding.html
 /sdcard/android/layout_tests/fast/dom/inner-text-rtl.html
 /sdcard/android/layout_tests/fast/dom/createDocument-empty.html
 /sdcard/android/layout_tests/fast/dom/documenturi-assigned-junk-implies-baseuri-null.html
 /sdcard/android/layout_tests/fast/dom/option-properties.html
 /sdcard/android/layout_tests/fast/dom/background-shorthand-csstext.html
 /sdcard/android/layout_tests/fast/dom/Range-insertNode-crash.html
+/sdcard/android/layout_tests/fast/dom/NamedNodeMap-setNamedItem-crash.html
 /sdcard/android/layout_tests/fast/dom/early-frame-url.html
 /sdcard/android/layout_tests/fast/dom/everything-to-string.html
 /sdcard/android/layout_tests/fast/dom/attribute-empty-value-no-children.html
@@ -1755,19 +1999,24 @@
 /sdcard/android/layout_tests/fast/dom/defaultView.html
 /sdcard/android/layout_tests/fast/dom/collection-null-like-arguments.html
 /sdcard/android/layout_tests/fast/dom/gc-3.html
+/sdcard/android/layout_tests/fast/dom/event-attribute-availability.html
+/sdcard/android/layout_tests/fast/dom/select-selectedIndex.html
 /sdcard/android/layout_tests/fast/dom/compatMode-Strict.html
 /sdcard/android/layout_tests/fast/dom/attribute-downcast-right.html
 /sdcard/android/layout_tests/fast/dom/document-all-select.html
+/sdcard/android/layout_tests/fast/dom/wrapper-context.html
 /sdcard/android/layout_tests/fast/dom/anchor-backslash.html
 /sdcard/android/layout_tests/fast/dom/css-mediarule-functions.html
+/sdcard/android/layout_tests/fast/dom/gc-acid3.html
 /sdcard/android/layout_tests/fast/dom/duplicate-ids-document-order.html
 /sdcard/android/layout_tests/fast/dom/exception-no-frame-inline-script-crash.html
 /sdcard/android/layout_tests/fast/dom/XMLSerializer-doctype2.html
 /sdcard/android/layout_tests/fast/dom/dir-no-body.html
 /sdcard/android/layout_tests/fast/dom/null-document-window-open-crash.html
 /sdcard/android/layout_tests/fast/dom/css-RGBValue.html
-/sdcard/android/layout_tests/fast/dom/innerHTML-nbsp.html
 /sdcard/android/layout_tests/fast/dom/documentElement-null.html
+/sdcard/android/layout_tests/fast/dom/innerHTML-nbsp.html
+/sdcard/android/layout_tests/fast/dom/createElementNS-empty-namespace.html
 /sdcard/android/layout_tests/fast/dom/class-all-whitespace.html
 /sdcard/android/layout_tests/fast/dom/wrapper-identity.html
 /sdcard/android/layout_tests/fast/dom/null-document-location-assign-crash.html
@@ -1782,8 +2031,8 @@
 /sdcard/android/layout_tests/fast/dom/documenturi-affects-relative-paths.html
 /sdcard/android/layout_tests/fast/dom/javascript-backslash.html
 /sdcard/android/layout_tests/fast/dom/setAttribute-using-initial-input-value.html
-/sdcard/android/layout_tests/fast/dom/generic-form-element-assert.html
 /sdcard/android/layout_tests/fast/dom/css-shortHands.html
+/sdcard/android/layout_tests/fast/dom/generic-form-element-assert.html
 /sdcard/android/layout_tests/fast/dom/dom-instanceof.html
 /sdcard/android/layout_tests/fast/dom/array-special-accessors-should-ignore-items.html
 /sdcard/android/layout_tests/fast/dom/element-attribute-js-null.html
@@ -1793,22 +2042,25 @@
 /sdcard/android/layout_tests/fast/dom/setter-type-enforcement.html
 /sdcard/android/layout_tests/fast/dom/XMLSerializer.html
 /sdcard/android/layout_tests/fast/dom/navigator-vendorSub.html
-/sdcard/android/layout_tests/fast/dom/gc-7.html
 /sdcard/android/layout_tests/fast/dom/outerText-no-element.html
 /sdcard/android/layout_tests/fast/dom/replace-child-siblings.html
+/sdcard/android/layout_tests/fast/dom/xmlhttprequest-constructor-in-detached-document.html
 /sdcard/android/layout_tests/fast/dom/constants.html
 /sdcard/android/layout_tests/fast/dom/inner-text-with-no-renderer.html
+/sdcard/android/layout_tests/fast/dom/gc-7.html
 /sdcard/android/layout_tests/fast/dom/onerror-img.html
 /sdcard/android/layout_tests/fast/dom/document-attribute-js-null.html
 /sdcard/android/layout_tests/fast/dom/css-element-attribute-js-null.html
 /sdcard/android/layout_tests/fast/dom/gc-11.html
 /sdcard/android/layout_tests/fast/dom/mutation-event-remove-inserted-node.html
+/sdcard/android/layout_tests/fast/dom/constructors-cached.html
 /sdcard/android/layout_tests/fast/dom/null-chardata-crash.html
 /sdcard/android/layout_tests/fast/dom/compatMode-AlmostStrict.html
 /sdcard/android/layout_tests/fast/dom/createElement-with-column.html
 /sdcard/android/layout_tests/fast/dom/exception-no-frame-timeout-crash.html
 /sdcard/android/layout_tests/fast/dom/title-text-property-2.html
 /sdcard/android/layout_tests/fast/dom/no-elements.html
+/sdcard/android/layout_tests/fast/dom/non-numeric-values-numeric-parameters.html
 /sdcard/android/layout_tests/fast/dom/gc-4.html
 /sdcard/android/layout_tests/fast/dom/inner-width-height.html
 /sdcard/android/layout_tests/fast/dom/XMLSerializer-doctype.html
@@ -1816,127 +2068,200 @@
 /sdcard/android/layout_tests/fast/dom/undetectable-document-all.html
 /sdcard/android/layout_tests/fast/dom/prototype-chain.html
 /sdcard/android/layout_tests/fast/dom/gc-1.html
+/sdcard/android/layout_tests/fast/dom/script-add.html
 /sdcard/android/layout_tests/fast/dom/select-selectedIndex-bug-12942.html
+/sdcard/android/layout_tests/fast/dom/text-control-crash-on-select.html
 /sdcard/android/layout_tests/fast/dom/frame-contentWindow-crash.html
+/sdcard/android/layout_tests/fast/dom/document_write_params.html
+/sdcard/android/layout_tests/fast/dom/namednodemap-namelookup.html
+/sdcard/android/layout_tests/fast/dom/null-document-location-replace-crash.html
+/sdcard/android/layout_tests/fast/dom/htmlcollection-detectability.html
+/sdcard/android/layout_tests/fast/dom/documenturi-assigned-junk-implies-relative-urls-do-not-resolve.html
+/sdcard/android/layout_tests/fast/dom/collection-namedItem-via-item.html
+/sdcard/android/layout_tests/fast/dom/set-inner-text-newlines.html
+/sdcard/android/layout_tests/fast/dom/document-dir-property.html
+/sdcard/android/layout_tests/fast/dom/undetectable-style-filter.html
 /sdcard/android/layout_tests/fast/dom/domListEnumeration.html
 /sdcard/android/layout_tests/fast/dom/destroy-selected-radio-button-crash.html
-/sdcard/android/layout_tests/fast/dom/script-add.html
+/sdcard/android/layout_tests/fast/dom/tabindex-clamp.html
 /sdcard/android/layout_tests/fast/dom/iframe-contentWindow-crash.html
 /sdcard/android/layout_tests/fast/dom/comment-dom-node.html
+/sdcard/android/layout_tests/fast/dom/constructors-cached-navigate.html
 /sdcard/android/layout_tests/fast/dom/features.html
 /sdcard/android/layout_tests/fast/dom/canvasContext2d-element-attribute-js-null.html
 /sdcard/android/layout_tests/fast/dom/remove-style-element.html
 /sdcard/android/layout_tests/fast/dom/attribute-namespaces-get-set.html
 /sdcard/android/layout_tests/fast/dom/innerHTML-escaping-attribute.html
-/sdcard/android/layout_tests/fast/dom/null-document-xmlhttprequest-open.html
 /sdcard/android/layout_tests/fast/dom/null-document-location-put-crash.html
 /sdcard/android/layout_tests/fast/dom/ImageDocument-image-deletion.html
 /sdcard/android/layout_tests/fast/dom/document-scripts.html
+/sdcard/android/layout_tests/fast/dom/cloneNode.html
+/sdcard/android/layout_tests/fast/dom/onload-open.html
 /sdcard/android/layout_tests/fast/gradients/crash-on-remove.html
-/sdcard/android/layout_tests/fast/xpath/xpath-empty-string.html
 /sdcard/android/layout_tests/fast/invalid/test-case-tr-th-td-should-not-close-dl-list.html
 /sdcard/android/layout_tests/fast/invalid/nestedh3s-rapidweaver.html
-/sdcard/android/layout_tests/fast/forms/element-by-name.html
 /sdcard/android/layout_tests/fast/forms/HTMLOptionElement_selected.html
-/sdcard/android/layout_tests/fast/forms/willvalidate-003.html
-/sdcard/android/layout_tests/fast/forms/radio-button-no-change-event.html
+/sdcard/android/layout_tests/fast/forms/option-value-and-label.html
 /sdcard/android/layout_tests/fast/forms/menulist-selection-reset.html
+/sdcard/android/layout_tests/fast/forms/ValidityState-customError-001.html
 /sdcard/android/layout_tests/fast/forms/textfield-focus-out.html
 /sdcard/android/layout_tests/fast/forms/willvalidate-000.html
 /sdcard/android/layout_tests/fast/forms/form-data-encoding-normalization-overrun.html
+/sdcard/android/layout_tests/fast/forms/textarea-trailing-newline.html
+/sdcard/android/layout_tests/fast/forms/ValidityState-patternMismatch-002.html
+/sdcard/android/layout_tests/fast/forms/selection-functions.html
+/sdcard/android/layout_tests/fast/forms/select-no-name.html
+/sdcard/android/layout_tests/fast/forms/multiple-selected-options-innerHTML.html
 /sdcard/android/layout_tests/fast/forms/input-named-action-overrides-action-attribute.html
 /sdcard/android/layout_tests/fast/forms/empty-get.html
 /sdcard/android/layout_tests/fast/forms/display-none-in-onchange-keyboard.html
-/sdcard/android/layout_tests/fast/forms/range-default-value.html
-/sdcard/android/layout_tests/fast/forms/paste-into-textarea.html
 /sdcard/android/layout_tests/fast/forms/4628409.html
-/sdcard/android/layout_tests/fast/forms/radio-no-theme-padding.html
-/sdcard/android/layout_tests/fast/forms/autofocus-opera-006.html
+/sdcard/android/layout_tests/fast/forms/numeric-input-name.html
 /sdcard/android/layout_tests/fast/forms/activate-and-disabled-elements.html
-/sdcard/android/layout_tests/fast/forms/form-get-multipart2.html
 /sdcard/android/layout_tests/fast/forms/tabs-with-modifiers.html
+/sdcard/android/layout_tests/fast/forms/form-get-multipart2.html
+/sdcard/android/layout_tests/fast/forms/ValidityState-002.html
 /sdcard/android/layout_tests/fast/forms/menulist-no-renderer-onmousedown.html
-/sdcard/android/layout_tests/fast/forms/saved-state-adoptNode-crash.html
 /sdcard/android/layout_tests/fast/forms/select-replace-option.html
 /sdcard/android/layout_tests/fast/forms/textarea-setvalue-submit.html
-/sdcard/android/layout_tests/fast/forms/11423.html
-/sdcard/android/layout_tests/fast/forms/cursor-position.html
 /sdcard/android/layout_tests/fast/forms/willvalidate-007.html
-/sdcard/android/layout_tests/fast/forms/input-changing-value.html
 /sdcard/android/layout_tests/fast/forms/double-focus.html
+/sdcard/android/layout_tests/fast/forms/ValidityState-valueMissing-004.html
 /sdcard/android/layout_tests/fast/forms/form-data-encoding-2.html
+/sdcard/android/layout_tests/fast/forms/inline-ignored-on-legend.html
 /sdcard/android/layout_tests/fast/forms/focus.html
-/sdcard/android/layout_tests/fast/forms/willvalidate-004.html
-/sdcard/android/layout_tests/fast/forms/button-in-forms-collection.html
 /sdcard/android/layout_tests/fast/forms/input-text-enter.html
-/sdcard/android/layout_tests/fast/forms/input-delete.html
-/sdcard/android/layout_tests/fast/forms/placeholder-non-textfield.html
+/sdcard/android/layout_tests/fast/forms/input-implicit-length-limit.html
 /sdcard/android/layout_tests/fast/forms/element-order.html
+/sdcard/android/layout_tests/fast/forms/ValidityState-customError-002.html
 /sdcard/android/layout_tests/fast/forms/form-post-urlencoded.html
 /sdcard/android/layout_tests/fast/forms/willvalidate-001.html
-/sdcard/android/layout_tests/fast/forms/option-constructor-selected.html
+/sdcard/android/layout_tests/fast/forms/ValidityState-patternMismatch-003.html
 /sdcard/android/layout_tests/fast/forms/8250.html
-/sdcard/android/layout_tests/fast/forms/input-zero-height-focus.html
 /sdcard/android/layout_tests/fast/forms/var-name-conflict-in-form-event-handler.html
+/sdcard/android/layout_tests/fast/forms/listbox-select-all.html
 /sdcard/android/layout_tests/fast/forms/range-reset.html
-/sdcard/android/layout_tests/fast/forms/textarea-linewrap-dynamic.html
 /sdcard/android/layout_tests/fast/forms/select-remove-option.html
 /sdcard/android/layout_tests/fast/forms/onselect-selectall.html
-/sdcard/android/layout_tests/fast/forms/select-width-font-change.html
-/sdcard/android/layout_tests/fast/forms/text-field-setvalue-crash.html
+/sdcard/android/layout_tests/fast/forms/input-select-webkit-user-select-none.html
 /sdcard/android/layout_tests/fast/forms/paste-multiline-text-input.html
-/sdcard/android/layout_tests/fast/forms/form-get-multipart.html
+/sdcard/android/layout_tests/fast/forms/textarea-no-scroll-on-blur.html
+/sdcard/android/layout_tests/fast/forms/select-reset-multiple-selections-4-single-selection.html
 /sdcard/android/layout_tests/fast/forms/tab-in-input.html
 /sdcard/android/layout_tests/fast/forms/button-click-DOM.html
-/sdcard/android/layout_tests/fast/forms/domstring-replace-crash.html
 /sdcard/android/layout_tests/fast/forms/submit-nil-value-field-assert.html
-/sdcard/android/layout_tests/fast/forms/autofocus-opera-007.html
+/sdcard/android/layout_tests/fast/forms/domstring-replace-crash.html
+/sdcard/android/layout_tests/fast/forms/select-max-length.html
 /sdcard/android/layout_tests/fast/forms/form-get-multipart3.html
 /sdcard/android/layout_tests/fast/forms/select-out-of-bounds-index.html
-/sdcard/android/layout_tests/fast/forms/select-type-ahead-list-box-no-selection.html
 /sdcard/android/layout_tests/fast/forms/selected-index-assert.html
-/sdcard/android/layout_tests/fast/forms/remove-radio-button-assert.html
-/sdcard/android/layout_tests/fast/forms/textarea-crlf.html
+/sdcard/android/layout_tests/fast/forms/legend-display-none.html
 /sdcard/android/layout_tests/fast/forms/form-collection-lookup.html
 /sdcard/android/layout_tests/fast/forms/autofocus-opera-004.html
 /sdcard/android/layout_tests/fast/forms/select-list-box-mouse-focus.html
-/sdcard/android/layout_tests/fast/forms/text-set-value-crash.html
 /sdcard/android/layout_tests/fast/forms/willvalidate-008.html
-/sdcard/android/layout_tests/fast/forms/autofocus-opera-001.html
-/sdcard/android/layout_tests/fast/forms/select-namedItem.html
-/sdcard/android/layout_tests/fast/forms/willvalidate-005.html
+/sdcard/android/layout_tests/fast/forms/ValidityState-valueMissing-005.html
+/sdcard/android/layout_tests/fast/forms/required-attribute-001.html
 /sdcard/android/layout_tests/fast/forms/select-index-setter.html
 /sdcard/android/layout_tests/fast/forms/option-change-single-selected.html
 /sdcard/android/layout_tests/fast/forms/listbox-scroll-after-options-removed.html
+/sdcard/android/layout_tests/fast/forms/ValidityState-customError-003.html
 /sdcard/android/layout_tests/fast/forms/input-selection-hidden.html
-/sdcard/android/layout_tests/fast/forms/input-type-change-in-onfocus-keyboard.html
 /sdcard/android/layout_tests/fast/forms/willvalidate-002.html
-/sdcard/android/layout_tests/fast/forms/option-in-optgroup-removal.html
-/sdcard/android/layout_tests/fast/forms/form-data-encoding.html
-/sdcard/android/layout_tests/fast/forms/textarea-default-value-leading-newline.html
-/sdcard/android/layout_tests/fast/forms/autofocus-opera-008.html
+/sdcard/android/layout_tests/fast/forms/ValidityState-patternMismatch-004.html
+/sdcard/android/layout_tests/fast/forms/select-set-inner.html
+/sdcard/android/layout_tests/fast/forms/input-appearance-elementFromPoint.html
+/sdcard/android/layout_tests/fast/forms/missing-action.html
 /sdcard/android/layout_tests/fast/forms/listbox-typeahead-empty.html
 /sdcard/android/layout_tests/fast/forms/submit-to-url-fragment.html
+/sdcard/android/layout_tests/fast/forms/autofocus-opera-005.html
+/sdcard/android/layout_tests/fast/forms/willvalidate-009.html
+/sdcard/android/layout_tests/fast/forms/ValidityState-valueMissing-006.html
+/sdcard/android/layout_tests/fast/forms/old-names.html
+/sdcard/android/layout_tests/fast/forms/required-attribute-002.html
+/sdcard/android/layout_tests/fast/forms/add-and-remove-option.html
+/sdcard/android/layout_tests/fast/forms/focus-style-pending.html
+/sdcard/android/layout_tests/fast/forms/textarea-initial-caret-position.html
+/sdcard/android/layout_tests/fast/forms/input-type-change-in-onfocus-mouse.html
+/sdcard/android/layout_tests/fast/forms/mutation-event-recalc.html
+/sdcard/android/layout_tests/fast/forms/slow-click.html
+/sdcard/android/layout_tests/fast/forms/ValidityState-customError-004.html
+/sdcard/android/layout_tests/fast/forms/autofocus-attribute.html
+/sdcard/android/layout_tests/fast/forms/element-by-name.html
+/sdcard/android/layout_tests/fast/forms/willvalidate-003.html
+/sdcard/android/layout_tests/fast/forms/radio-button-no-change-event.html
+/sdcard/android/layout_tests/fast/forms/ValidityState-patternMismatch-005.html
+/sdcard/android/layout_tests/fast/forms/input-maxlength.html
+/sdcard/android/layout_tests/fast/forms/select-reset.html
+/sdcard/android/layout_tests/fast/forms/input-hit-test-border.html
+/sdcard/android/layout_tests/fast/forms/pattern-attribute-001.html
+/sdcard/android/layout_tests/fast/forms/range-default-value.html
+/sdcard/android/layout_tests/fast/forms/shadow-tree-exposure.html
+/sdcard/android/layout_tests/fast/forms/paste-into-textarea.html
+/sdcard/android/layout_tests/fast/forms/radio-no-theme-padding.html
+/sdcard/android/layout_tests/fast/forms/textfield-drag-into-disabled.html
+/sdcard/android/layout_tests/fast/forms/autofocus-opera-006.html
+/sdcard/android/layout_tests/fast/forms/saved-state-adoptNode-crash.html
+/sdcard/android/layout_tests/fast/forms/ValidityState-valueMissing-007.html
+/sdcard/android/layout_tests/fast/forms/radio-check-click-and-drag.html
+/sdcard/android/layout_tests/fast/forms/11423.html
+/sdcard/android/layout_tests/fast/forms/cursor-position.html
+/sdcard/android/layout_tests/fast/forms/input-changing-value.html
+/sdcard/android/layout_tests/fast/forms/willvalidate-004.html
+/sdcard/android/layout_tests/fast/forms/ValidityState-valueMissing-001.html
+/sdcard/android/layout_tests/fast/forms/ValidityState-patternMismatch-006.html
+/sdcard/android/layout_tests/fast/forms/button-in-forms-collection.html
+/sdcard/android/layout_tests/fast/forms/input-delete.html
+/sdcard/android/layout_tests/fast/forms/placeholder-non-textfield.html
+/sdcard/android/layout_tests/fast/forms/option-constructor-selected.html
+/sdcard/android/layout_tests/fast/forms/input-multiple.html
+/sdcard/android/layout_tests/fast/forms/input-zero-height-focus.html
+/sdcard/android/layout_tests/fast/forms/pattern-attribute-002.html
+/sdcard/android/layout_tests/fast/forms/textarea-linewrap-dynamic.html
+/sdcard/android/layout_tests/fast/forms/placeholder-dom-property.html
+/sdcard/android/layout_tests/fast/forms/select-width-font-change.html
+/sdcard/android/layout_tests/fast/forms/text-field-setvalue-crash.html
+/sdcard/android/layout_tests/fast/forms/form-get-multipart.html
+/sdcard/android/layout_tests/fast/forms/autofocus-opera-007.html
+/sdcard/android/layout_tests/fast/forms/select-type-ahead-list-box-no-selection.html
+/sdcard/android/layout_tests/fast/forms/ValidityState-valueMissing-008.html
+/sdcard/android/layout_tests/fast/forms/textarea-crlf.html
+/sdcard/android/layout_tests/fast/forms/remove-radio-button-assert.html
+/sdcard/android/layout_tests/fast/forms/text-set-value-crash.html
+/sdcard/android/layout_tests/fast/forms/autofocus-opera-001.html
+/sdcard/android/layout_tests/fast/forms/select-namedItem.html
+/sdcard/android/layout_tests/fast/forms/willvalidate-005.html
+/sdcard/android/layout_tests/fast/forms/ValidityState-valueMissing-002.html
+/sdcard/android/layout_tests/fast/forms/ValidityState-patternMismatch-007.html
+/sdcard/android/layout_tests/fast/forms/add-remove-option-modification-event.html
+/sdcard/android/layout_tests/fast/forms/input-type-change-in-onfocus-keyboard.html
+/sdcard/android/layout_tests/fast/forms/option-in-optgroup-removal.html
+/sdcard/android/layout_tests/fast/forms/form-data-encoding.html
+/sdcard/android/layout_tests/fast/forms/pattern-attribute-003.html
+/sdcard/android/layout_tests/fast/forms/ValidityState-patternMismatch-001.html
+/sdcard/android/layout_tests/fast/forms/textarea-default-value-leading-newline.html
+/sdcard/android/layout_tests/fast/forms/autofocus-opera-008.html
+/sdcard/android/layout_tests/fast/forms/add-remove-form-elements-stress-test.html
+/sdcard/android/layout_tests/fast/forms/ValidityState-valueMissing-009.html
 /sdcard/android/layout_tests/fast/forms/textarea-setvalue-without-renderer.html
 /sdcard/android/layout_tests/fast/forms/hidden-input-not-enabled.html
-/sdcard/android/layout_tests/fast/forms/autofocus-opera-005.html
 /sdcard/android/layout_tests/fast/forms/input-appearance-maxlength.html
+/sdcard/android/layout_tests/fast/forms/ValidityState-001.html
 /sdcard/android/layout_tests/fast/forms/submit-with-base.html
-/sdcard/android/layout_tests/fast/forms/willvalidate-009.html
 /sdcard/android/layout_tests/fast/forms/input-setvalue-selection.html
 /sdcard/android/layout_tests/fast/forms/autofocus-opera-002.html
-/sdcard/android/layout_tests/fast/forms/old-names.html
-/sdcard/android/layout_tests/fast/forms/focus-style-pending.html
+/sdcard/android/layout_tests/fast/forms/textarea-appearance-wrap.html
+/sdcard/android/layout_tests/fast/forms/add-selected-option.html
+/sdcard/android/layout_tests/fast/forms/willvalidate-006.html
+/sdcard/android/layout_tests/fast/forms/ValidityState-valueMissing-003.html
 /sdcard/android/layout_tests/fast/forms/textarea-hard-linewrap-empty.html
-/sdcard/android/layout_tests/fast/forms/input-type-change-in-onfocus-mouse.html
 /sdcard/android/layout_tests/fast/forms/document-write.html
-/sdcard/android/layout_tests/fast/forms/slow-click.html
-/sdcard/android/layout_tests/fast/forms/autofocus-attribute.html
 /sdcard/android/layout_tests/fast/table/incomplete-table-in-fragment-hang.html
 /sdcard/android/layout_tests/fast/table/section-in-table-before-misnested-text-crash-css.html
 /sdcard/android/layout_tests/fast/table/large-rowspan-crash.html
 /sdcard/android/layout_tests/fast/table/colgroup-relative.html
 /sdcard/android/layout_tests/fast/table/border-changes.html
+/sdcard/android/layout_tests/fast/table/table-row-compositing-repaint-crash.html
 /sdcard/android/layout_tests/fast/table/cell-in-row-before-misnested-text-crash-css.html
 /sdcard/android/layout_tests/fast/table/incomplete-table-in-fragment-2.html
 /sdcard/android/layout_tests/fast/table/rowindex-comment-nodes.html
@@ -1950,7 +2275,22 @@
 /sdcard/android/layout_tests/fast/css/counters/counter-function-input-2.html
 /sdcard/android/layout_tests/fast/css/counters/counter-function-input.html
 /sdcard/android/layout_tests/fast/css/counters/counter-number-input.html
+/sdcard/android/layout_tests/fast/css/variables/color-hex-test.html
 /sdcard/android/layout_tests/fast/css/variables/invalid-identifier.html
+/sdcard/android/layout_tests/fast/css/getComputedStyle/computed-style-negative-top.html
+/sdcard/android/layout_tests/fast/css/getComputedStyle/getComputedStyle-borderRadius.html
+/sdcard/android/layout_tests/fast/css/getComputedStyle/getComputedStyle-background-size.html
+/sdcard/android/layout_tests/fast/css/getComputedStyle/getComputedStyle-border-image.html
+/sdcard/android/layout_tests/fast/css/getComputedStyle/getComputedStyle-border-spacing.html
+/sdcard/android/layout_tests/fast/css/getComputedStyle/computed-style-font-family.html
+/sdcard/android/layout_tests/fast/css/getComputedStyle/getComputedStyle-zIndex-auto.html
+/sdcard/android/layout_tests/fast/css/getComputedStyle/getComputedStyle-transform.html
+/sdcard/android/layout_tests/fast/css/getComputedStyle/computed-style-display-none.html
+/sdcard/android/layout_tests/fast/css/getComputedStyle/getComputedStyle-background-position.html
+/sdcard/android/layout_tests/fast/css/getComputedStyle/getComputedStyle-text-overflow.html
+/sdcard/android/layout_tests/fast/css/getComputedStyle/getComputedStyle-border-box.html
+/sdcard/android/layout_tests/fast/css/getComputedStyle/getComputedStyle-relayout.html
+/sdcard/android/layout_tests/fast/css/getComputedStyle/getComputedStyle-text-decoration.html
 /sdcard/android/layout_tests/fast/css/media-rule-dyn.html
 /sdcard/android/layout_tests/fast/css/transform-function-lowercase-assert.html
 /sdcard/android/layout_tests/fast/css/word-break-user-modify-allowed-values.html
@@ -1958,19 +2298,22 @@
 /sdcard/android/layout_tests/fast/css/outline-invert-assertion.html
 /sdcard/android/layout_tests/fast/css/insertRule-font-face.html
 /sdcard/android/layout_tests/fast/css/readonly-pseudoclass-opera-004.html
+/sdcard/android/layout_tests/fast/css/zoom-in-length-round-trip.html
 /sdcard/android/layout_tests/fast/css/transform-inline-style-remove.html
 /sdcard/android/layout_tests/fast/css/padding-no-renderer.html
 /sdcard/android/layout_tests/fast/css/transition_shorthand_parsing.html
 /sdcard/android/layout_tests/fast/css/css-selector-text.html
 /sdcard/android/layout_tests/fast/css/dashboard-regions-attr-crash.html
 /sdcard/android/layout_tests/fast/css/readonly-pseudoclass-opera-001.html
+/sdcard/android/layout_tests/fast/css/pseudo-required-optional-006.html
 /sdcard/android/layout_tests/fast/css/font-property-priority.html
-/sdcard/android/layout_tests/fast/css/computed-style-negative-top.html
+/sdcard/android/layout_tests/fast/css/number-parsing-crash.html
 /sdcard/android/layout_tests/fast/css/device-aspect-ratio.html
 /sdcard/android/layout_tests/fast/css/pseudostyle-anonymous-text.html
 /sdcard/android/layout_tests/fast/css/css-properties-case-insensitive.html
-/sdcard/android/layout_tests/fast/css/getComputedStyle-border-image.html
-/sdcard/android/layout_tests/fast/css/getComputedStyle-border-spacing.html
+/sdcard/android/layout_tests/fast/css/sheet-collection-link.html
+/sdcard/android/layout_tests/fast/css/pseudo-required-optional-003.html
+/sdcard/android/layout_tests/fast/css/resize-value-compared.html
 /sdcard/android/layout_tests/fast/css/font-face-descriptor-multiple-values-parsing.html
 /sdcard/android/layout_tests/fast/css/hexColor-isDigit-assert.html
 /sdcard/android/layout_tests/fast/css/transform-inline-style.html
@@ -1978,120 +2321,144 @@
 /sdcard/android/layout_tests/fast/css/outline-hidden-illegal-value.html
 /sdcard/android/layout_tests/fast/css/emptyStyleTag.html
 /sdcard/android/layout_tests/fast/css/stale-style-selector-crash-1.html
-/sdcard/android/layout_tests/fast/css/getComputedStyle-background-size.html
 /sdcard/android/layout_tests/fast/css/display-none-inline-style-change-crash.html
 /sdcard/android/layout_tests/fast/css/getPropertyValue-clip.html
 /sdcard/android/layout_tests/fast/css/border-image-crash.html
-/sdcard/android/layout_tests/fast/css/getComputedStyle-border-box.html
 /sdcard/android/layout_tests/fast/css/readonly-pseudoclass-opera-005.html
 /sdcard/android/layout_tests/fast/css/insertRule-media.html
+/sdcard/android/layout_tests/fast/css/html-attr-case-sensitivity.html
 /sdcard/android/layout_tests/fast/css/font-face-multiple-families.html
 /sdcard/android/layout_tests/fast/css/getPropertyValue-border.html
 /sdcard/android/layout_tests/fast/css/readonly-pseudoclass-opera-002.html
 /sdcard/android/layout_tests/fast/css/invalid-rule-value.html
 /sdcard/android/layout_tests/fast/css/max-device-aspect-ratio.html
 /sdcard/android/layout_tests/fast/css/background-currentcolor.html
+/sdcard/android/layout_tests/fast/css/pseudo-required-optional-004.html
 /sdcard/android/layout_tests/fast/css/orphaned_units_crash.html
-/sdcard/android/layout_tests/fast/css/getComputedStyle-relayout.html
 /sdcard/android/layout_tests/fast/css/invalid-cursor-property-crash.html
-/sdcard/android/layout_tests/fast/css/getComputedStyle-borderRadius.html
 /sdcard/android/layout_tests/fast/css/sheet-title.html
+/sdcard/android/layout_tests/fast/css/large-list-of-rules-crash.html
+/sdcard/android/layout_tests/fast/css/pseudo-required-optional-001.html
 /sdcard/android/layout_tests/fast/css/background-position-serialize.html
-/sdcard/android/layout_tests/fast/css/getComputedStyle-background-position.html
 /sdcard/android/layout_tests/fast/css/stale-style-selector-crash-2.html
 /sdcard/android/layout_tests/fast/css/webkit-marquee-speed-unit-in-quirksmode.html
 /sdcard/android/layout_tests/fast/css/CSSPrimitiveValue-exceptions.html
 /sdcard/android/layout_tests/fast/css/empty-script.html
-/sdcard/android/layout_tests/fast/css/mask-missing-image-crash.html
-/sdcard/android/layout_tests/fast/css/parse-timing-function-crash.html
-/sdcard/android/layout_tests/fast/css/background-position-inherit.html
-/sdcard/android/layout_tests/fast/css/readonly-pseudoclass-opera-003.html
-/sdcard/android/layout_tests/fast/css/overflow-property.html
-/sdcard/android/layout_tests/fast/css/remove-shorthand.html
-/sdcard/android/layout_tests/fast/css/getComputedStyle-zIndex-auto.html
+/sdcard/android/layout_tests/fast/css/pseudo-required-optional-005.html
 /sdcard/android/layout_tests/fast/css/min-device-aspect-ratio.html
-/sdcard/android/layout_tests/fast/css/case-transform.html
 /sdcard/android/layout_tests/fast/css/nested-rule-parent-sheet.html
+/sdcard/android/layout_tests/fast/css/case-transform.html
+/sdcard/android/layout_tests/fast/css/number-parsing-crash-2.html
+/sdcard/android/layout_tests/fast/css/matrix-as-function-crash.html
+/sdcard/android/layout_tests/fast/css/pseudo-required-optional-002.html
+/sdcard/android/layout_tests/fast/css/attr-parsing.html
 /sdcard/android/layout_tests/fast/css/font-family-initial.html
-/sdcard/android/layout_tests/fast/css/computed-style-display-none.html
 /sdcard/android/layout_tests/fast/css/small-caps-crash.html
 /sdcard/android/layout_tests/fast/css/max-height-and-max-width.html
 /sdcard/android/layout_tests/fast/css/legacy-opacity-styles.html
 /sdcard/android/layout_tests/fast/css/transition-timing-function.html
+/sdcard/android/layout_tests/fast/block/positioning/absolute-in-inline-rtl-4.html
+/sdcard/android/layout_tests/fast/block/float/selection-gap-clip-out-tiger-crash.html
+/sdcard/android/layout_tests/fast/block/float/crash-on-absolute-positioning.html
+/sdcard/android/layout_tests/fast/block/float/crash-replaced-display-block.html
+/sdcard/android/layout_tests/fast/parser/implicit-head-in-fragment-crash.html
+/sdcard/android/layout_tests/fast/parser/smart-quotes-in-tag.html
+/sdcard/android/layout_tests/fast/parser/entity-comment-in-iframe.html
 /sdcard/android/layout_tests/fast/parser/remove-node-stack.html
 /sdcard/android/layout_tests/fast/parser/remove-current-node-parent.html
 /sdcard/android/layout_tests/fast/parser/entity-end-iframe-tag.html
 /sdcard/android/layout_tests/fast/parser/nsup-entity.html
-/sdcard/android/layout_tests/fast/parser/parse-wbr.html
+/sdcard/android/layout_tests/fast/parser/block-nesting-cap.html
 /sdcard/android/layout_tests/fast/parser/residual-style-close-across-n-blocks.html
-/sdcard/android/layout_tests/fast/parser/open-comment-in-script-tricky.html
 /sdcard/android/layout_tests/fast/parser/tag-with-exclamation-point.html
 /sdcard/android/layout_tests/fast/parser/p-in-scope-strict.html
-/sdcard/android/layout_tests/fast/parser/hex-entities-length.html
 /sdcard/android/layout_tests/fast/parser/entity-end-style-tag.html
 /sdcard/android/layout_tests/fast/parser/entity-end-xmp-tag.html
-/sdcard/android/layout_tests/fast/parser/html-whitespace.html
+/sdcard/android/layout_tests/fast/parser/external-entities.xml
 /sdcard/android/layout_tests/fast/parser/head-comment.html
 /sdcard/android/layout_tests/fast/parser/test-unicode-characters-in-attribute-name.html
 /sdcard/android/layout_tests/fast/parser/entity-end-textarea-tag.html
-/sdcard/android/layout_tests/fast/parser/script-after-frameset-assert.html
-/sdcard/android/layout_tests/fast/parser/duplicate-html-body-element-IDs.html
+/sdcard/android/layout_tests/fast/parser/script-tag-with-trailing-slash.html
+/sdcard/android/layout_tests/fast/parser/empty-text-resource.html
 /sdcard/android/layout_tests/fast/parser/comment-in-title.html
 /sdcard/android/layout_tests/fast/parser/residual-style-close-across-removed-block.html
 /sdcard/android/layout_tests/fast/parser/entity-comment-in-title.html
-/sdcard/android/layout_tests/fast/parser/assertion-empty-attribute.html
 /sdcard/android/layout_tests/fast/parser/entity-end-title-tag.html
-/sdcard/android/layout_tests/fast/parser/comment-in-script-tricky.html
+/sdcard/android/layout_tests/fast/parser/head-content-after-head-removal.html
 /sdcard/android/layout_tests/fast/parser/pre-first-line-break.html
-/sdcard/android/layout_tests/fast/parser/rewrite-form.html
 /sdcard/android/layout_tests/fast/parser/number-sign-in-map-name.html
-/sdcard/android/layout_tests/fast/parser/entity-comment-in-script-tricky.html
 /sdcard/android/layout_tests/fast/parser/input-textarea-inside-select-element.html
+/sdcard/android/layout_tests/fast/parser/entity-end-script-tag.html
+/sdcard/android/layout_tests/fast/parser/area-in-div.html
+/sdcard/android/layout_tests/fast/parser/entity-surrogate-pairs.html
+/sdcard/android/layout_tests/fast/parser/eightdigithexentity.html
+/sdcard/android/layout_tests/fast/parser/parse-wbr.html
+/sdcard/android/layout_tests/fast/parser/open-comment-in-script-tricky.html
+/sdcard/android/layout_tests/fast/parser/head-element-for-yahoo-player.html
+/sdcard/android/layout_tests/fast/parser/hex-entities-length.html
+/sdcard/android/layout_tests/fast/parser/html-whitespace.html
+/sdcard/android/layout_tests/fast/parser/script-after-frameset-assert.html
+/sdcard/android/layout_tests/fast/parser/comment-in-iframe.html
+/sdcard/android/layout_tests/fast/parser/duplicate-html-body-element-IDs.html
+/sdcard/android/layout_tests/fast/parser/assertion-empty-attribute.html
+/sdcard/android/layout_tests/fast/parser/comment-in-script-tricky.html
+/sdcard/android/layout_tests/fast/parser/rewrite-form.html
+/sdcard/android/layout_tests/fast/parser/entity-comment-in-script-tricky.html
+/sdcard/android/layout_tests/fast/parser/head-parsing-19517.html
 /sdcard/android/layout_tests/fast/parser/entities-in-html.html
 /sdcard/android/layout_tests/fast/parser/remove-parser-current-node.html
-/sdcard/android/layout_tests/fast/parser/area-in-div.html
 /sdcard/android/layout_tests/fast/parser/rewrite-map.html
-/sdcard/android/layout_tests/fast/parser/entity-surrogate-pairs.html
 /sdcard/android/layout_tests/fast/parser/strict-img-in-map.html
 /sdcard/android/layout_tests/fast/parser/p-in-scope.html
 /sdcard/android/layout_tests/fast/layers/removed-by-scroll-handler.html
 /sdcard/android/layout_tests/fast/layers/generated-layer-scrollbar-crash.html
+/sdcard/android/layout_tests/fast/layers/zindex-hit-test.html
 /sdcard/android/layout_tests/fast/layers/resize-layer-deletion-crash.html
+/sdcard/android/layout_tests/fast/history/subframe-is-visited.html
 /sdcard/android/layout_tests/fast/loader/early-load-cancel.html
 /sdcard/android/layout_tests/fast/loader/iframe-recursive-synchronous-load.html
-/sdcard/android/layout_tests/fast/loader/xmlhttprequest-bad-mimetype.html
+/sdcard/android/layout_tests/fast/loader/location-port.html
 /sdcard/android/layout_tests/fast/loader/local-css-allowed-in-strict-mode.html
-/sdcard/android/layout_tests/fast/loader/user-style-sheet-resource-load-callbacks.html
 /sdcard/android/layout_tests/fast/loader/url-strip-cr-lf-tab.html
+/sdcard/android/layout_tests/fast/loader/hashchange-event.html
 /sdcard/android/layout_tests/fast/loader/unloadable-script.html
 /sdcard/android/layout_tests/fast/loader/url-parse-1.html
 /sdcard/android/layout_tests/fast/loader/redirect-with-open-subframe-2.html
 /sdcard/android/layout_tests/fast/loader/simultaneous-reloads-assert.html
 /sdcard/android/layout_tests/fast/loader/invalid-charset-on-script-crashes-loader.html
 /sdcard/android/layout_tests/fast/loader/javascript-url-encoding.html
+/sdcard/android/layout_tests/fast/loader/empty-embed-src-attribute.html
 /sdcard/android/layout_tests/fast/loader/charset-parse.html
 /sdcard/android/layout_tests/fast/loader/meta-refresh-vs-open.html
+/sdcard/android/layout_tests/fast/loader/submit-form-while-parsing-2.html
 /sdcard/android/layout_tests/fast/loader/url-data-replace-backslash.html
 /sdcard/android/layout_tests/fast/loader/redirect-with-open-subframe.html
 /sdcard/android/layout_tests/fast/loader/empty-ref-versus-no-ref.html
-/sdcard/android/layout_tests/fast/loader/window-clearing.html
 /sdcard/android/layout_tests/fast/loader/javascript-url-encoding-2.html
+/sdcard/android/layout_tests/fast/loader/window-clearing.html
+/sdcard/android/layout_tests/fast/loader/frame-creation-removal.html
 /sdcard/android/layout_tests/fast/loader/external-script-URL-location.html
+/sdcard/android/layout_tests/fast/loader/link-no-URL.html
 /sdcard/android/layout_tests/fast/loader/loadInProgress.html
 /sdcard/android/layout_tests/fast/loader/inherit-charset-to-empty-frame.html
 /sdcard/android/layout_tests/fast/loader/font-face-empty.html
-/sdcard/android/layout_tests/fast/loader/data-url-encoding-html.html
+/sdcard/android/layout_tests/fast/loader/goto-anchor-infinite-layout.html
 /sdcard/android/layout_tests/fast/loader/file-URL-with-port-number.html
-/sdcard/android/layout_tests/fast/loader/link-no-URL.html
-/sdcard/android/layout_tests/fast/xsl/xslt-fragment-in-empty-doc.html
+/sdcard/android/layout_tests/fast/xmlhttprequest/xmlhttprequest-default-attributes.html
+/sdcard/android/layout_tests/fast/xmlhttprequest/xmlhttprequest-missing-file-exception.html
+/sdcard/android/layout_tests/fast/xmlhttprequest/xmlhttprequest-invalid-values.html
+/sdcard/android/layout_tests/fast/xmlhttprequest/xmlhttprequest-html-response-encoding.html
+/sdcard/android/layout_tests/fast/xmlhttprequest/null-document-xmlhttprequest-open.html
+/sdcard/android/layout_tests/fast/xmlhttprequest/xmlhttprequest-nonexistent-file.html
+/sdcard/android/layout_tests/fast/xmlhttprequest/xmlhttprequest-open-after-iframe-onload-remove-self.html
 /sdcard/android/layout_tests/fast/canvas/pattern-with-transform.html
 /sdcard/android/layout_tests/fast/canvas/gradient-addColorStop-with-invalid-color.html
 /sdcard/android/layout_tests/fast/canvas/canvas-gradient-without-path.html
-/sdcard/android/layout_tests/fast/canvas/canvas-pattern-behaviour.html
 /sdcard/android/layout_tests/fast/canvas/radialGradient-infinite-values.html
 /sdcard/android/layout_tests/fast/canvas/drawImage-with-negative-source-destination.html
 /sdcard/android/layout_tests/fast/canvas/drawImage-with-invalid-args.html
 /sdcard/android/layout_tests/fast/canvas/canvas-stroke-empty-fill.html
+/sdcard/android/layout_tests/fast/canvas/canvas-lineWidth.html
 /sdcard/android/layout_tests/fast/canvas/access-zero-sized-canvas.html
 /sdcard/android/layout_tests/fast/canvas/script-inside-canvas-fallback.html
 /sdcard/android/layout_tests/fast/canvas/unclosed-canvas-2.html
@@ -2099,8 +2466,7 @@
 /sdcard/android/layout_tests/fast/canvas/gradient-with-clip.html
 /sdcard/android/layout_tests/fast/canvas/canvas-hides-fallback.html
 /sdcard/android/layout_tests/fast/canvas/arc-crash.html
-/sdcard/android/layout_tests/fast/canvas/canvas-ImageData-behaviour.html
-/sdcard/android/layout_tests/fast/canvas/canvas-putImageData.html
+/sdcard/android/layout_tests/fast/canvas/canvas-modify-emptyPath.html
 /sdcard/android/layout_tests/fast/canvas/unclosed-canvas-4.html
 /sdcard/android/layout_tests/fast/canvas/canvas-invalid-fillstyle.html
 /sdcard/android/layout_tests/fast/canvas/unclosed-canvas-1.html
@@ -2111,12 +2477,13 @@
 /sdcard/android/layout_tests/fast/canvas/canvas-set-properties-with-non-invertible-ctm.html
 /sdcard/android/layout_tests/fast/canvas/canvas-invalid-strokestyle.html
 /sdcard/android/layout_tests/fast/canvas/canvas-strokeRect.html
-/sdcard/android/layout_tests/fast/canvas/canvas-pattern-transform.html
+/sdcard/android/layout_tests/fast/canvas/canvas-composite-alpha.html
 /sdcard/android/layout_tests/fast/canvas/canvas-transparency-and-composite.html
 /sdcard/android/layout_tests/fast/canvas/unclosed-canvas-3.html
 /sdcard/android/layout_tests/fast/canvas/linearGradient-infinite-values.html
 /sdcard/android/layout_tests/fast/canvas/canvas-setTransform.html
 /sdcard/android/layout_tests/fast/frames/frame-set-same-location.html
+/sdcard/android/layout_tests/fast/frames/viewsource-unfinished-tags.html
 /sdcard/android/layout_tests/fast/frames/set-unloaded-frame-location.html
 /sdcard/android/layout_tests/fast/frames/negative-remaining-length-crash.html
 /sdcard/android/layout_tests/fast/frames/frame-name-reset.html
@@ -2124,7 +2491,6 @@
 /sdcard/android/layout_tests/fast/frames/crash-removed-iframe.html
 /sdcard/android/layout_tests/fast/frames/empty-frame-document.html
 /sdcard/android/layout_tests/fast/frames/viewsource-plain-text-tags.html
-/sdcard/android/layout_tests/fast/frames/location-put-after-removal.html
 /sdcard/android/layout_tests/fast/frames/repaint-display-none-crash.html
 /sdcard/android/layout_tests/fast/frames/remove-frame-with-scrollbars-crash.html
 /sdcard/android/layout_tests/fast/frames/cross-site-this.html
@@ -2132,20 +2498,148 @@
 /sdcard/android/layout_tests/fast/frames/iframe-set-inner-html.html
 /sdcard/android/layout_tests/fast/frames/iframe-remove-after-id-change.html
 /sdcard/android/layout_tests/fast/frames/iframe-target.html
+/sdcard/android/layout_tests/fast/frames/viewsource-link-on-href-value.html
 /sdcard/android/layout_tests/fast/frames/hover-timer-crash.html
+/sdcard/android/layout_tests/fast/frames/iframe-no-src-set-location.html
 /sdcard/android/layout_tests/fast/frames/iframe-set-same-src.html
 /sdcard/android/layout_tests/fast/frames/iframe-double-attach.html
 /sdcard/android/layout_tests/fast/frames/iframe-set-same-location.html
-/sdcard/android/layout_tests/fast/frames/iframe-js-url-clientWidth.html
 /sdcard/android/layout_tests/fast/frames/location-change.html
 /sdcard/android/layout_tests/fast/frames/frame-base-url.html
 /sdcard/android/layout_tests/fast/frames/iframe-display-none.html
-/sdcard/android/layout_tests/animations/transition-and-animation-2.html
-/sdcard/android/layout_tests/animations/import-crash.html
-/sdcard/android/layout_tests/animations/empty-keyframes.html
-/sdcard/android/layout_tests/animations/width-using-ems.html
-/sdcard/android/layout_tests/animations/keyframes-out-of-order.html
-/sdcard/android/layout_tests/geolocation/geolocation-not-implemented.html
+/sdcard/android/layout_tests/fast/frames/javascript-url-as-framesrc-crash.html
+/sdcard/android/layout_tests/fast/frames/frame-limit.html
+/sdcard/android/layout_tests/fast/frames/frame-display-none-focus.html
+/sdcard/android/layout_tests/fast/reflections/teardown-crash.html
+/sdcard/android/layout_tests/fast/reflections/reflection-computed-style.html
+/sdcard/android/layout_tests/fast/reflections/reflection-overflow-scroll.html
+/sdcard/android/layout_tests/media/video-play-empty-events.html
+/sdcard/android/layout_tests/media/constructors.html
+/sdcard/android/layout_tests/media/video-dom-autoplay.html
+/sdcard/android/layout_tests/media/video-poster.html
+/sdcard/android/layout_tests/media/video-source-media.html
+/sdcard/android/layout_tests/media/video-controls-with-mutation-event-handler.html
+/sdcard/android/layout_tests/media/video-src-set.html
+/sdcard/android/layout_tests/media/video-display-none-crash.html
+/sdcard/android/layout_tests/media/video-size.html
+/sdcard/android/layout_tests/media/video-width-height.html
+/sdcard/android/layout_tests/media/video-source.html
+/sdcard/android/layout_tests/media/video-load-readyState.html
+/sdcard/android/layout_tests/media/fallback.html
+/sdcard/android/layout_tests/media/remove-from-document-no-load.html
+/sdcard/android/layout_tests/media/before-load-member-access.html
+/sdcard/android/layout_tests/media/video-play-pause-events.html
+/sdcard/android/layout_tests/media/media-startTime.html
+/sdcard/android/layout_tests/media/video-autoplay.html
+/sdcard/android/layout_tests/media/video-timeupdate-during-playback.html
+/sdcard/android/layout_tests/media/media-constants.html
+/sdcard/android/layout_tests/media/video-src-source.html
+/sdcard/android/layout_tests/media/controls-css-overload.html
+/sdcard/android/layout_tests/media/video-pause-empty-events.html
+/sdcard/android/layout_tests/media/video-play-pause-exception.html
+/sdcard/android/layout_tests/media/video-dom-autobuffer.html
+/sdcard/android/layout_tests/media/video-seek-no-src-exception.html
+/sdcard/android/layout_tests/media/video-src-remove.html
+/sdcard/android/layout_tests/media/video-src.html
+/sdcard/android/layout_tests/plugins/createScriptableObject-before-start.html
+/sdcard/android/layout_tests/plugins/return-error-from-new-stream-callback-in-full-frame-plugin.html
+/sdcard/android/layout_tests/scrollbars/scrollbar-crash-on-refresh.html
+/sdcard/android/layout_tests/scrollbars/scrollbar-miss-mousemove.html
+/sdcard/android/layout_tests/security/autocomplete-cleared-on-back.html
+/sdcard/android/layout_tests/storage/domstorage/localstorage/complex-keys.html
+/sdcard/android/layout_tests/storage/domstorage/localstorage/clear.html
+/sdcard/android/layout_tests/storage/domstorage/localstorage/enumerate-storage.html
+/sdcard/android/layout_tests/storage/domstorage/localstorage/remove-item.html
+/sdcard/android/layout_tests/storage/domstorage/localstorage/string-conversion.html
+/sdcard/android/layout_tests/storage/domstorage/localstorage/simple-events.html
+/sdcard/android/layout_tests/storage/domstorage/localstorage/delete-removal.html
+/sdcard/android/layout_tests/storage/domstorage/localstorage/window-open.html
+/sdcard/android/layout_tests/storage/domstorage/localstorage/index-get-and-set.html
+/sdcard/android/layout_tests/storage/domstorage/localstorage/onstorage-attribute-setattribute.html
+/sdcard/android/layout_tests/storage/domstorage/localstorage/onstorage-attribute-setwindow.html
+/sdcard/android/layout_tests/storage/domstorage/localstorage/simple-usage.html
+/sdcard/android/layout_tests/storage/domstorage/localstorage/onstorage-attribute-markup.html
+/sdcard/android/layout_tests/storage/domstorage/localstorage/enumerate-with-length-and-key.html
+/sdcard/android/layout_tests/storage/domstorage/localstorage/complex-values.html
+/sdcard/android/layout_tests/storage/domstorage/sessionstorage/index-get-and-set.html
+/sdcard/android/layout_tests/storage/domstorage/sessionstorage/onstorage-attribute-setattribute.html
+/sdcard/android/layout_tests/storage/domstorage/sessionstorage/onstorage-attribute-setwindow.html
+/sdcard/android/layout_tests/storage/domstorage/sessionstorage/clear.html
+/sdcard/android/layout_tests/storage/domstorage/sessionstorage/enumerate-storage.html
+/sdcard/android/layout_tests/storage/domstorage/sessionstorage/string-conversion.html
+/sdcard/android/layout_tests/storage/domstorage/sessionstorage/simple-usage.html
+/sdcard/android/layout_tests/storage/domstorage/sessionstorage/simple-events.html
+/sdcard/android/layout_tests/storage/domstorage/sessionstorage/onstorage-attribute-markup.html
+/sdcard/android/layout_tests/storage/domstorage/sessionstorage/enumerate-with-length-and-key.html
+/sdcard/android/layout_tests/storage/domstorage/sessionstorage/delete-removal.html
+/sdcard/android/layout_tests/storage/domstorage/sessionstorage/window-open.html
+/sdcard/android/layout_tests/storage/domstorage/window-attributes-exist.html
+/sdcard/android/layout_tests/storage/hash-change-with-xhr.html
+/sdcard/android/layout_tests/storage/open-database-empty-version.html
+/sdcard/android/layout_tests/storage/quota-tracking.html
+/sdcard/android/layout_tests/storage/close-during-stress-test.html
+/sdcard/android/layout_tests/storage/database-lock-after-reload.html
+/sdcard/android/layout_tests/storage/multiple-databases-garbage-collection.html
+/sdcard/android/layout_tests/storage/empty-statement.html
+/sdcard/android/layout_tests/storage/multiple-transactions.html
+/sdcard/android/layout_tests/storage/success-callback.html
+/sdcard/android/layout_tests/storage/transaction-error-callback.html
+/sdcard/android/layout_tests/storage/sql-data-types.html
+/sdcard/android/layout_tests/storage/transaction-callback-exception-crash.html
+/sdcard/android/layout_tests/transforms/2d/transform-2d.html
+/sdcard/android/layout_tests/transforms/2d/compound-2d-transforms.html
+/sdcard/android/layout_tests/transforms/2d/computed-style-origin.html
+/sdcard/android/layout_tests/transforms/2d/transform-accuracy.html
+/sdcard/android/layout_tests/transforms/2d/transform-value-types.html
+/sdcard/android/layout_tests/transforms/3d/hit-testing/hit-preserves-3d.html
+/sdcard/android/layout_tests/transitions/cancel-transition.html
+/sdcard/android/layout_tests/transitions/transition-end-event-all-properties.html
+/sdcard/android/layout_tests/transitions/transition-end-event-window.html
+/sdcard/android/layout_tests/transitions/transition-end-event-multiple-03.html
+/sdcard/android/layout_tests/transitions/text-indent-transition.html
+/sdcard/android/layout_tests/transitions/transition-end-event-set-none.html
+/sdcard/android/layout_tests/transitions/zero-duration-without-units.html
+/sdcard/android/layout_tests/transitions/min-max-width-height-transitions.html
+/sdcard/android/layout_tests/transitions/shorthand-transitions.html
+/sdcard/android/layout_tests/transitions/zero-duration-in-list.html
+/sdcard/android/layout_tests/transitions/shorthand-border-transitions.html
+/sdcard/android/layout_tests/transitions/inherit-other-props.html
+/sdcard/android/layout_tests/transitions/transition-end-event-multiple-04.html
+/sdcard/android/layout_tests/transitions/background-transitions.html
+/sdcard/android/layout_tests/transitions/transition-duration-cleared-in-transitionend-crash.html
+/sdcard/android/layout_tests/transitions/interrupt-zero-duration.html
+/sdcard/android/layout_tests/transitions/retargetted-transition.html
+/sdcard/android/layout_tests/transitions/transition-end-event-left.html
+/sdcard/android/layout_tests/transitions/override-transition-crash.html
+/sdcard/android/layout_tests/transitions/transition-end-event-multiple-01.html
+/sdcard/android/layout_tests/transitions/matched-transform-functions.html
+/sdcard/android/layout_tests/transitions/transform-op-list-match.html
+/sdcard/android/layout_tests/transitions/transition-end-event-container.html
+/sdcard/android/layout_tests/transitions/interrupt-transform-transition.html
+/sdcard/android/layout_tests/transitions/transition-end-event-nested.html
+/sdcard/android/layout_tests/transitions/change-values-during-transition.html
+/sdcard/android/layout_tests/transitions/transition-end-event-attributes.html
+/sdcard/android/layout_tests/transitions/inherit.html
+/sdcard/android/layout_tests/transitions/transition-end-event-create.html
+/sdcard/android/layout_tests/transitions/shadow.html
+/sdcard/android/layout_tests/transitions/transition-end-event-multiple-02.html
+/sdcard/android/layout_tests/transitions/transition-end-event-transform.html
+/sdcard/android/layout_tests/transitions/start-transform-transition.html
+/sdcard/android/layout_tests/transitions/transition-timing-function.html
+/sdcard/android/layout_tests/transitions/transform-op-list-no-match.html
+/sdcard/android/layout_tests/transitions/bad-transition-shorthand-crash.html
+/sdcard/android/layout_tests/transitions/transition-end-event-destroy-renderer.html
+/sdcard/android/layout_tests/transitions/extra-transition.html
+/sdcard/android/layout_tests/traversal/hixie-node-iterator/010.xml
+/sdcard/android/layout_tests/traversal/hixie-node-iterator/001.xml
+/sdcard/android/layout_tests/traversal/hixie-node-iterator/002.xml
+/sdcard/android/layout_tests/traversal/hixie-node-iterator/003.xml
+/sdcard/android/layout_tests/traversal/hixie-node-iterator/004.xml
+/sdcard/android/layout_tests/traversal/hixie-node-iterator/005.xml
+/sdcard/android/layout_tests/traversal/hixie-node-iterator/006.xml
+/sdcard/android/layout_tests/traversal/hixie-node-iterator/007.xml
+/sdcard/android/layout_tests/traversal/hixie-node-iterator/008.xml
+/sdcard/android/layout_tests/traversal/hixie-node-iterator/009.xml
 /sdcard/android/layout_tests/traversal/node-iterator-003.html
 /sdcard/android/layout_tests/traversal/node-iterator-005.html
 /sdcard/android/layout_tests/traversal/node-iterator-007.html
@@ -2167,36 +2661,3 @@
 /sdcard/android/layout_tests/traversal/acid3-test-2.html
 /sdcard/android/layout_tests/traversal/tree-walker-filter-1.html
 /sdcard/android/layout_tests/traversal/node-iterator-001.html
-/sdcard/android/layout_tests/css2.1/atrule_longest_match.html
-/sdcard/android/layout_tests/css1/units/zero-duration-without-units.html
-/sdcard/android/layout_tests/css3/khtml-background-size-0x0-bmp.html
-/sdcard/android/layout_tests/transitions/transition-end-event-all-properties.html
-/sdcard/android/layout_tests/transitions/transition-end-event-window.html
-/sdcard/android/layout_tests/transitions/transition-end-event-multiple-03.html
-/sdcard/android/layout_tests/transitions/interrupted-all-transition.html
-/sdcard/android/layout_tests/transitions/transition-end-event-set-none.html
-/sdcard/android/layout_tests/transitions/zero-duration-without-units.html
-/sdcard/android/layout_tests/transitions/zero-duration-with-non-zero-delay-start.html
-/sdcard/android/layout_tests/transitions/inherit-other-props.html
-/sdcard/android/layout_tests/transitions/transition-end-event-multiple-04.html
-/sdcard/android/layout_tests/transitions/transition-duration-cleared-in-transitionend-crash.html
-/sdcard/android/layout_tests/transitions/interrupt-zero-duration.html
-/sdcard/android/layout_tests/transitions/retargetted-transition.html
-/sdcard/android/layout_tests/transitions/override-transition-crash.html
-/sdcard/android/layout_tests/transitions/transition-end-event-left.html
-/sdcard/android/layout_tests/transitions/matched-transform-functions.html
-/sdcard/android/layout_tests/transitions/transition-end-event-multiple-01.html
-/sdcard/android/layout_tests/transitions/transform-op-list-match.html
-/sdcard/android/layout_tests/transitions/interrupt-transform-transition.html
-/sdcard/android/layout_tests/transitions/transition-end-event-container.html
-/sdcard/android/layout_tests/transitions/transition-end-event-nested.html
-/sdcard/android/layout_tests/transitions/change-values-during-transition.html
-/sdcard/android/layout_tests/transitions/transition-end-event-attributes.html
-/sdcard/android/layout_tests/transitions/inherit.html
-/sdcard/android/layout_tests/transitions/transition-end-event-create.html
-/sdcard/android/layout_tests/transitions/transition-end-event-multiple-02.html
-/sdcard/android/layout_tests/transitions/shadow.html
-/sdcard/android/layout_tests/transitions/transition-end-event-transform.html
-/sdcard/android/layout_tests/transitions/transition-timing-function.html
-/sdcard/android/layout_tests/transitions/transform-op-list-no-match.html
-/sdcard/android/layout_tests/transitions/transition-end-event-destroy-renderer.html
diff --git a/vpn/java/android/net/vpn/VpnType.java b/vpn/java/android/net/vpn/VpnType.java
index c7df943..356f8b1 100644
--- a/vpn/java/android/net/vpn/VpnType.java
+++ b/vpn/java/android/net/vpn/VpnType.java
@@ -16,26 +16,28 @@
 
 package android.net.vpn;
 
+import com.android.internal.R;
+
 /**
  * Enumeration of all supported VPN types.
  * {@hide}
  */
 public enum VpnType {
-    PPTP("PPTP", "", PptpProfile.class),
-    L2TP("L2TP", "", L2tpProfile.class),
-    L2TP_IPSEC_PSK("L2TP/IPSec PSK", "Pre-shared key based L2TP/IPSec VPN",
+    PPTP("PPTP", R.string.pptp_vpn_description, PptpProfile.class),
+    L2TP("L2TP", R.string.l2tp_vpn_description, L2tpProfile.class),
+    L2TP_IPSEC_PSK("L2TP/IPSec PSK", R.string.l2tp_ipsec_psk_vpn_description,
             L2tpIpsecPskProfile.class),
-    L2TP_IPSEC("L2TP/IPSec CRT", "Certificate based L2TP/IPSec VPN",
+    L2TP_IPSEC("L2TP/IPSec CRT", R.string.l2tp_ipsec_crt_vpn_description,
             L2tpIpsecProfile.class);
 
     private String mDisplayName;
-    private String mDescription;
+    private int mDescriptionId;
     private Class<? extends VpnProfile> mClass;
 
-    VpnType(String displayName, String description,
+    VpnType(String displayName, int descriptionId,
             Class<? extends VpnProfile> klass) {
         mDisplayName = displayName;
-        mDescription = description;
+        mDescriptionId = descriptionId;
         mClass = klass;
     }
 
@@ -43,8 +45,8 @@
         return mDisplayName;
     }
 
-    public String getDescription() {
-        return mDescription;
+    public int getDescriptionId() {
+        return mDescriptionId;
     }
 
     public Class<? extends VpnProfile> getProfileClass() {
diff --git a/wifi/java/android/net/wifi/WifiStateTracker.java b/wifi/java/android/net/wifi/WifiStateTracker.java
index 5638480..2c0d0f1 100644
--- a/wifi/java/android/net/wifi/WifiStateTracker.java
+++ b/wifi/java/android/net/wifi/WifiStateTracker.java
@@ -1237,9 +1237,9 @@
         /*
          * Reset connection depends on both the interface and the IP assigned,
          * so it should be done before any chance of the IP being lost.
-         */  
+         */
         NetworkUtils.resetConnections(mInterfaceName);
-        
+
         // Stop DHCP
         if (mDhcpTarget != null) {
             mDhcpTarget.setCancelCallback(true);
@@ -1248,11 +1248,10 @@
         if (!NetworkUtils.stopDhcp(mInterfaceName)) {
             Log.e(TAG, "Could not stop DHCP");
         }
-        
+
         NetworkUtils.disableInterface(mInterfaceName);
-        if (reenable) {
-            NetworkUtils.enableInterface(mInterfaceName);
-        }
+        // we no longer net to start the interface (driver does this for us)
+        // and it led to problems - removed.
     }
 
     /**