Merge m-c to inbound on a CLOSED TREE
authorWes Kocher <wkocher@mozilla.com>
Thu, 05 Jun 2014 19:14:19 -0700
changeset 187003 f3d257065b3371878d0cf1b79e9800ebfc029925
parent 186913 257a99604e3009420bb4f7811586a145b0531d1f (current diff)
parent 187002 4a552fb1ca38e5eabb53d59db9f8568f7f67676b (diff)
child 187004 b85f5ec213926ad06398d2c59cf199f8373e16f1
push id44477
push userkwierso@gmail.com
push dateFri, 06 Jun 2014 02:14:32 +0000
treeherdermozilla-inbound@f3d257065b33 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
milestone32.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Merge m-c to inbound on a CLOSED TREE
mobile/android/base/resources/drawable-hdpi/close_edit_mode.png
mobile/android/base/resources/drawable-mdpi/close_edit_mode.png
mobile/android/base/resources/drawable-xhdpi/close_edit_mode.png
--- a/b2g/config/emulator-ics/sources.xml
+++ b/b2g/config/emulator-ics/sources.xml
@@ -14,23 +14,23 @@
   <!--original fetch url was git://github.com/apitrace/-->
   <remote fetch="https://git.mozilla.org/external/apitrace" name="apitrace"/>
   <default remote="caf" revision="refs/tags/android-4.0.4_r2.1" sync-j="4"/>
   <!-- Gonk specific things and forks -->
   <project name="platform_build" path="build" remote="b2g" revision="2a165bebfa19b11b697837409f9550dd2917c46c">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
-  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="908f94fda04462001ece86e6b6c15ad8b05f7526"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="857129928b6e56a809cee9d5445effb8fa9f1c2c"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="531cf670e485649c69746e46d567929fcd54cbc5"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="8e4420c0c5c8e8c8e58a000278a7129403769f96"/>
   <project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="9100fa82fc355f5201e23e400fc6b40e875304ed"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ce95d372e6d285725b96490afdaaf489ad8f9ca9"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="994fa9a1f7ce0e63c880a48d571c3ab3e01884a3"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="89812422efe8df364ddf364b4740030496181277"/>
   <!-- Stock Android things -->
   <project name="platform/abi/cpp" path="abi/cpp" revision="dd924f92906085b831bf1cbbc7484d3c043d613c"/>
   <project name="platform/bionic" path="bionic" revision="c72b8f6359de7ed17c11ddc9dfdde3f615d188a9"/>
   <project name="platform/bootable/recovery" path="bootable/recovery" revision="425f8b5fadf5889834c5acd27d23c9e0b2129c28"/>
   <project name="device/common" path="device/common" revision="42b808b7e93d0619286ae8e59110b176b7732389"/>
   <project name="device/sample" path="device/sample" revision="237bd668d0f114d801a8d6455ef5e02cc3577587"/>
   <project name="platform_external_apriori" path="external/apriori" remote="b2g" revision="11816ad0406744f963537b23d68ed9c2afb412bd"/>
   <project name="platform/external/bluetooth/bluez" path="external/bluetooth/bluez" revision="52a1a862a8bac319652b8f82d9541ba40bfa45ce"/>
--- a/b2g/config/emulator-jb/sources.xml
+++ b/b2g/config/emulator-jb/sources.xml
@@ -12,20 +12,20 @@
   <!--original fetch url was https://git.mozilla.org/releases-->
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <!-- B2G specific things. -->
   <project name="platform_build" path="build" remote="b2g" revision="6e2a3b589d1e8cc1d9df25f5e630ce30a0aa39f3">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="908f94fda04462001ece86e6b6c15ad8b05f7526"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="857129928b6e56a809cee9d5445effb8fa9f1c2c"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="531cf670e485649c69746e46d567929fcd54cbc5"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ce95d372e6d285725b96490afdaaf489ad8f9ca9"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="994fa9a1f7ce0e63c880a48d571c3ab3e01884a3"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="89812422efe8df364ddf364b4740030496181277"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
   <!-- Stock Android things -->
   <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.1" path="prebuilts/clang/linux-x86/3.1" revision="5c45f43419d5582949284eee9cef0c43d866e03b"/>
   <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.2" path="prebuilts/clang/linux-x86/3.2" revision="3748b4168e7bd8d46457d4b6786003bc6a5223ce"/>
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="9025e50b9d29b3cabbbb21e1dd94d0d13121a17e"/>
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="b89fda71fcd0fa0cf969310e75be3ea33e048b44"/>
   <project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" revision="2e7d5348f35575870b3c7e567a9a9f6d66f8d6c5"/>
--- a/b2g/config/emulator-kk/sources.xml
+++ b/b2g/config/emulator-kk/sources.xml
@@ -10,25 +10,25 @@
   <!--original fetch url was git://codeaurora.org/-->
   <remote fetch="https://git.mozilla.org/external/caf" name="caf"/>
   <!--original fetch url was https://git.mozilla.org/releases-->
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <!-- B2G specific things. -->
   <project name="platform_build" path="build" remote="b2g" revision="276ce45e78b09c4a4ee643646f691d22804754c1">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="908f94fda04462001ece86e6b6c15ad8b05f7526"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="857129928b6e56a809cee9d5445effb8fa9f1c2c"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="531cf670e485649c69746e46d567929fcd54cbc5"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ce95d372e6d285725b96490afdaaf489ad8f9ca9"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="994fa9a1f7ce0e63c880a48d571c3ab3e01884a3"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="89812422efe8df364ddf364b4740030496181277"/>
   <!-- Stock Android things -->
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="f92a936f2aa97526d4593386754bdbf02db07a12"/>
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="6e47ff2790f5656b5b074407829ceecf3e6188c4"/>
   <project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" revision="1950e4760fa14688b83cdbb5acaa1af9f82ef434"/>
   <project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7" revision="ac6eb97a37035c09fb5ede0852f0881e9aadf9ad"/>
   <project groups="linux,x86" name="platform/prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7" path="prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7" revision="737f591c5f95477148d26602c7be56cbea0cdeb9"/>
   <project groups="linux,x86" name="platform/prebuilts/python/linux-x86/2.7.5" path="prebuilts/python/linux-x86/2.7.5" revision="51da9b1981be481b92a59a826d4d78dc73d0989a"/>
   <project name="device/common" path="device/common" revision="798a3664597e6041985feab9aef42e98d458bc3d"/>
--- a/b2g/config/emulator/sources.xml
+++ b/b2g/config/emulator/sources.xml
@@ -14,23 +14,23 @@
   <!--original fetch url was git://github.com/apitrace/-->
   <remote fetch="https://git.mozilla.org/external/apitrace" name="apitrace"/>
   <default remote="caf" revision="refs/tags/android-4.0.4_r2.1" sync-j="4"/>
   <!-- Gonk specific things and forks -->
   <project name="platform_build" path="build" remote="b2g" revision="2a165bebfa19b11b697837409f9550dd2917c46c">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
-  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="908f94fda04462001ece86e6b6c15ad8b05f7526"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="857129928b6e56a809cee9d5445effb8fa9f1c2c"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="531cf670e485649c69746e46d567929fcd54cbc5"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="8e4420c0c5c8e8c8e58a000278a7129403769f96"/>
   <project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="9100fa82fc355f5201e23e400fc6b40e875304ed"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ce95d372e6d285725b96490afdaaf489ad8f9ca9"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="994fa9a1f7ce0e63c880a48d571c3ab3e01884a3"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="89812422efe8df364ddf364b4740030496181277"/>
   <!-- Stock Android things -->
   <project name="platform/abi/cpp" path="abi/cpp" revision="dd924f92906085b831bf1cbbc7484d3c043d613c"/>
   <project name="platform/bionic" path="bionic" revision="c72b8f6359de7ed17c11ddc9dfdde3f615d188a9"/>
   <project name="platform/bootable/recovery" path="bootable/recovery" revision="425f8b5fadf5889834c5acd27d23c9e0b2129c28"/>
   <project name="device/common" path="device/common" revision="42b808b7e93d0619286ae8e59110b176b7732389"/>
   <project name="device/sample" path="device/sample" revision="237bd668d0f114d801a8d6455ef5e02cc3577587"/>
   <project name="platform_external_apriori" path="external/apriori" remote="b2g" revision="11816ad0406744f963537b23d68ed9c2afb412bd"/>
   <project name="platform/external/bluetooth/bluez" path="external/bluetooth/bluez" revision="52a1a862a8bac319652b8f82d9541ba40bfa45ce"/>
--- a/b2g/config/flame/sources.xml
+++ b/b2g/config/flame/sources.xml
@@ -12,20 +12,20 @@
   <!--original fetch url was https://git.mozilla.org/releases-->
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <!-- B2G specific things. -->
   <project name="platform_build" path="build" remote="b2g" revision="6e2a3b589d1e8cc1d9df25f5e630ce30a0aa39f3">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="908f94fda04462001ece86e6b6c15ad8b05f7526"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="857129928b6e56a809cee9d5445effb8fa9f1c2c"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="531cf670e485649c69746e46d567929fcd54cbc5"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ce95d372e6d285725b96490afdaaf489ad8f9ca9"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="994fa9a1f7ce0e63c880a48d571c3ab3e01884a3"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="89812422efe8df364ddf364b4740030496181277"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
   <!-- Stock Android things -->
   <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.1" path="prebuilts/clang/linux-x86/3.1" revision="e95b4ce22c825da44d14299e1190ea39a5260bde"/>
   <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.2" path="prebuilts/clang/linux-x86/3.2" revision="471afab478649078ad7c75ec6b252481a59e19b8"/>
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="95bb5b66b3ec5769c3de8d3f25d681787418e7d2"/>
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="ebdad82e61c16772f6cd47e9f11936bf6ebe9aa0"/>
   <project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" revision="8b880805d454664b3eed11d0f053cdeafa1ff06e"/>
--- a/b2g/config/gaia.json
+++ b/b2g/config/gaia.json
@@ -1,9 +1,9 @@
 {
     "git": {
         "git_revision": "", 
         "remote": "", 
         "branch": ""
     }, 
-    "revision": "c3d40600c0090c5ca6ca4427f3a870ff443a109d", 
+    "revision": "e32dee285e41ff8be7779ab4adb3db81a5b36570", 
     "repo_path": "/integration/gaia-central"
 }
--- a/b2g/config/hamachi/sources.xml
+++ b/b2g/config/hamachi/sources.xml
@@ -12,22 +12,22 @@
   <!--original fetch url was git://github.com/apitrace/-->
   <remote fetch="https://git.mozilla.org/external/apitrace" name="apitrace"/>
   <default remote="caf" revision="b2g/ics_strawberry" sync-j="4"/>
   <!-- Gonk specific things and forks -->
   <project name="platform_build" path="build" remote="b2g" revision="2a165bebfa19b11b697837409f9550dd2917c46c">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
-  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="908f94fda04462001ece86e6b6c15ad8b05f7526"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="857129928b6e56a809cee9d5445effb8fa9f1c2c"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="531cf670e485649c69746e46d567929fcd54cbc5"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ce95d372e6d285725b96490afdaaf489ad8f9ca9"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="994fa9a1f7ce0e63c880a48d571c3ab3e01884a3"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="89812422efe8df364ddf364b4740030496181277"/>
   <!-- Stock Android things -->
   <project name="platform/abi/cpp" path="abi/cpp" revision="6426040f1be4a844082c9769171ce7f5341a5528"/>
   <project name="platform/bionic" path="bionic" revision="d2eb6c7b6e1bc7643c17df2d9d9bcb1704d0b9ab"/>
   <project name="platform/bootable/recovery" path="bootable/recovery" revision="746bc48f34f5060f90801925dcdd964030c1ab6d"/>
   <project name="platform/development" path="development" revision="2460485184bc8535440bb63876d4e63ec1b4770c"/>
   <project name="device/common" path="device/common" revision="0dcc1e03659db33b77392529466f9eb685cdd3c7"/>
   <project name="device/sample" path="device/sample" revision="68b1cb978a20806176123b959cb05d4fa8adaea4"/>
   <project name="platform_external_apriori" path="external/apriori" remote="b2g" revision="11816ad0406744f963537b23d68ed9c2afb412bd"/>
--- a/b2g/config/helix/sources.xml
+++ b/b2g/config/helix/sources.xml
@@ -10,17 +10,17 @@
   <!--original fetch url was https://git.mozilla.org/releases-->
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <default remote="caf" revision="b2g/ics_strawberry" sync-j="4"/>
   <!-- Gonk specific things and forks -->
   <project name="platform_build" path="build" remote="b2g" revision="2a165bebfa19b11b697837409f9550dd2917c46c">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
-  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="908f94fda04462001ece86e6b6c15ad8b05f7526"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="857129928b6e56a809cee9d5445effb8fa9f1c2c"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="531cf670e485649c69746e46d567929fcd54cbc5"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ce95d372e6d285725b96490afdaaf489ad8f9ca9"/>
   <project name="gonk-patches" path="patches" remote="b2g" revision="223a2421006e8f5da33f516f6891c87cae86b0f6"/>
   <!-- Stock Android things -->
   <project name="platform/abi/cpp" path="abi/cpp" revision="6426040f1be4a844082c9769171ce7f5341a5528"/>
   <project name="platform/bionic" path="bionic" revision="d2eb6c7b6e1bc7643c17df2d9d9bcb1704d0b9ab"/>
--- a/b2g/config/nexus-4/sources.xml
+++ b/b2g/config/nexus-4/sources.xml
@@ -12,20 +12,20 @@
   <!--original fetch url was https://git.mozilla.org/releases-->
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <!-- B2G specific things. -->
   <project name="platform_build" path="build" remote="b2g" revision="6e2a3b589d1e8cc1d9df25f5e630ce30a0aa39f3">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="908f94fda04462001ece86e6b6c15ad8b05f7526"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="857129928b6e56a809cee9d5445effb8fa9f1c2c"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="531cf670e485649c69746e46d567929fcd54cbc5"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ce95d372e6d285725b96490afdaaf489ad8f9ca9"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="994fa9a1f7ce0e63c880a48d571c3ab3e01884a3"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="89812422efe8df364ddf364b4740030496181277"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
   <!-- Stock Android things -->
   <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.1" path="prebuilts/clang/linux-x86/3.1" revision="5c45f43419d5582949284eee9cef0c43d866e03b"/>
   <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.2" path="prebuilts/clang/linux-x86/3.2" revision="3748b4168e7bd8d46457d4b6786003bc6a5223ce"/>
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="9025e50b9d29b3cabbbb21e1dd94d0d13121a17e"/>
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="b89fda71fcd0fa0cf969310e75be3ea33e048b44"/>
   <project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" revision="2e7d5348f35575870b3c7e567a9a9f6d66f8d6c5"/>
--- a/b2g/config/wasabi/sources.xml
+++ b/b2g/config/wasabi/sources.xml
@@ -12,22 +12,22 @@
   <!--original fetch url was git://github.com/apitrace/-->
   <remote fetch="https://git.mozilla.org/external/apitrace" name="apitrace"/>
   <default remote="caf" revision="ics_chocolate_rb4.2" sync-j="4"/>
   <!-- Gonk specific things and forks -->
   <project name="platform_build" path="build" remote="b2g" revision="2a165bebfa19b11b697837409f9550dd2917c46c">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
-  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="908f94fda04462001ece86e6b6c15ad8b05f7526"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="857129928b6e56a809cee9d5445effb8fa9f1c2c"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="531cf670e485649c69746e46d567929fcd54cbc5"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ce95d372e6d285725b96490afdaaf489ad8f9ca9"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="994fa9a1f7ce0e63c880a48d571c3ab3e01884a3"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="89812422efe8df364ddf364b4740030496181277"/>
   <project name="gonk-patches" path="patches" remote="b2g" revision="223a2421006e8f5da33f516f6891c87cae86b0f6"/>
   <!-- Stock Android things -->
   <project name="platform/abi/cpp" path="abi/cpp" revision="6426040f1be4a844082c9769171ce7f5341a5528"/>
   <project name="platform/bionic" path="bionic" revision="cd5dfce80bc3f0139a56b58aca633202ccaee7f8"/>
   <project name="platform/bootable/recovery" path="bootable/recovery" revision="e0a9ac010df3afaa47ba107192c05ac8b5516435"/>
   <project name="platform/development" path="development" revision="a384622f5fcb1d2bebb9102591ff7ae91fe8ed2d"/>
   <project name="device/common" path="device/common" revision="7c65ea240157763b8ded6154a17d3c033167afb7"/>
   <project name="device/sample" path="device/sample" revision="c328f3d4409db801628861baa8d279fb8855892f"/>
--- a/browser/components/customizableui/test/browser_962069_drag_to_overflow_chevron.js
+++ b/browser/components/customizableui/test/browser_962069_drag_to_overflow_chevron.js
@@ -16,22 +16,26 @@ add_task(function*() {
   window.resizeTo(400, window.outerHeight);
   yield waitForCondition(() => navbar.hasAttribute("overflowing"));
   ok(navbar.hasAttribute("overflowing"), "Should have an overflowing toolbar.");
 
   let widgetOverflowPanel = document.getElementById("widget-overflow");
   let panelShownPromise = promisePanelElementShown(window, widgetOverflowPanel);
   let identityBox = document.getElementById("identity-box");
   let overflowChevron = document.getElementById("nav-bar-overflow-button");
+
+  // Listen for hiding immediately so we don't miss the event because of the
+  // async-ness of the 'shown' yield...
+  let panelHiddenPromise = promisePanelElementHidden(window, widgetOverflowPanel);
+
   ChromeUtils.synthesizeDrop(identityBox, overflowChevron, [], null);
   yield panelShownPromise;
 
   info("Overflow panel is shown.");
 
-  let panelHiddenPromise = promisePanelElementHidden(window, widgetOverflowPanel);
   widgetOverflowPanel.hidePopup();
   yield panelHiddenPromise;
 });
 
 add_task(function*() {
   window.resizeTo(originalWindowWidth, window.outerHeight);
   let navbar = document.getElementById(CustomizableUI.AREA_NAVBAR);
   yield waitForCondition(() => !navbar.hasAttribute("overflowing"));
--- a/browser/components/translation/Translation.jsm
+++ b/browser/components/translation/Translation.jsm
@@ -15,16 +15,17 @@ const TRANSLATION_PREF_SHOWUI = "browser
 
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/Promise.jsm");
 Cu.import("resource://gre/modules/Metrics.jsm", this);
 Cu.import("resource://gre/modules/Task.jsm", this);
 
 const DAILY_COUNTER_FIELD = {type: Metrics.Storage.FIELD_DAILY_COUNTER};
 const DAILY_LAST_TEXT_FIELD = {type: Metrics.Storage.FIELD_DAILY_LAST_TEXT};
+const DAILY_LAST_NUMERIC_FIELD = {type: Metrics.Storage.FIELD_DAILY_LAST_NUMERIC};
 
 
 this.Translation = {
   supportedSourceLanguages: ["en", "zh", "ja", "es", "de", "fr", "ru", "ar", "ko", "pt"],
   supportedTargetLanguages: ["en", "pl", "tr", "vi"],
 
   _defaultTargetLanguage: "",
   get defaultTargetLanguage() {
@@ -295,16 +296,18 @@ TranslationMeasurement1.prototype = Obje
   fields: {
     translationOpportunityCount: DAILY_COUNTER_FIELD,
     pageTranslatedCount: DAILY_COUNTER_FIELD,
     charactersTranslatedCount: DAILY_COUNTER_FIELD,
     translationOpportunityCountsByLanguage: DAILY_LAST_TEXT_FIELD,
     pageTranslatedCountsByLanguage: DAILY_LAST_TEXT_FIELD,
     detectedLanguageChangedBefore: DAILY_COUNTER_FIELD,
     detectedLanguageChangedAfter: DAILY_COUNTER_FIELD,
+    detectLanguageEnabled: DAILY_LAST_NUMERIC_FIELD,
+    showTranslationUI: DAILY_LAST_NUMERIC_FIELD,
   },
 
   shouldIncludeField: function (field) {
     if (!Services.prefs.getBoolPref("toolkit.telemetry.enabled")) {
       // This measurement should only be included when telemetry is
       // enabled, so we will not include any fields.
       return false;
     }
@@ -319,17 +322,17 @@ TranslationMeasurement1.prototype = Obje
       if (data.hasDay(date)) {
         data = JSON.parse(data.getDay(date));
       } else {
         data = {};
       }
 
       return data;
     });
-},
+  },
 
   _wrapJSONSerializer: function (serializer) {
     let _parseInPlace = function(o, k) {
       if (k in o) {
         o[k] = JSON.parse(o[k]);
       }
     };
 
@@ -409,16 +412,29 @@ TranslationProvider.prototype = Object.f
       if (beforeFirstTranslation) {
           yield m.incrementDailyCounter("detectedLanguageChangedBefore");
         } else {
           yield m.incrementDailyCounter("detectedLanguageChangedAfter");
         }
     }.bind(this));
   },
 
+  collectDailyData: function () {
+    let m = this.getMeasurement(TranslationMeasurement1.prototype.name,
+                                TranslationMeasurement1.prototype.version);
+
+    return this._enqueueTelemetryStorageTask(function* recordTask() {
+      let detectLanguageEnabled = Services.prefs.getBoolPref("browser.translation.detectLanguage");
+      yield m.setDailyLastNumeric("detectLanguageEnabled", detectLanguageEnabled ? 1 : 0);
+
+      let showTranslationUI = Services.prefs.getBoolPref("browser.translation.ui.show");
+      yield m.setDailyLastNumeric("showTranslationUI", showTranslationUI ? 1 : 0);
+    }.bind(this));
+  },
+
   _enqueueTelemetryStorageTask: function (task) {
     if (!Services.prefs.getBoolPref("toolkit.telemetry.enabled")) {
       // This measurement should only be included when telemetry is
       // enabled, so don't record any data.
       return Promise.resolve(null);
     }
 
     return this.enqueueStorageOperation(() => {
--- a/browser/components/translation/test/unit/test_healthreport.js
+++ b/browser/components/translation/test/unit/test_healthreport.js
@@ -165,16 +165,54 @@ add_task(function* test_record_translati
   Assert.equal(day.get("detectedLanguageChangedBefore"), 1);
   Assert.ok(day.has("detectedLanguageChangedAfter"));
   Assert.equal(day.get("detectedLanguageChangedAfter"), 2);
 
   yield provider.shutdown();
   yield storage.close();
 });
 
+add_task(function* test_collect_daily() {
+  let storage = yield Metrics.Storage("translation");
+  let provider = new TranslationProvider();
+  yield provider.init(storage);
+  let now = new Date();
+
+  // Set the prefs we test here to `false` initially.
+  const kPrefDetectLanguage = "browser.translation.detectLanguage";
+  const kPrefShowUI = "browser.translation.ui.show";
+  Services.prefs.setBoolPref(kPrefDetectLanguage, false);
+  Services.prefs.setBoolPref(kPrefShowUI, false);
+
+  // Initially nothing should be configured.
+  yield provider.collectDailyData();
+
+  let m = provider.getMeasurement("translation", 1);
+  let values = yield m.getValues();
+  Assert.equal(values.days.size, 1);
+  Assert.ok(values.days.hasDay(now));
+  let day = values.days.getDay(now);
+  Assert.ok(day.has("detectLanguageEnabled"));
+  Assert.ok(day.has("showTranslationUI"));
+
+  // Changes to the repective prefs should be picked up.
+  Services.prefs.setBoolPref(kPrefDetectLanguage, true);
+  Services.prefs.setBoolPref(kPrefShowUI, true);
+
+  yield provider.collectDailyData();
+
+  values = yield m.getValues();
+  day = values.days.getDay(now);
+  Assert.equal(day.get("detectLanguageEnabled"), 1);
+  Assert.equal(day.get("showTranslationUI"), 1);
+
+  yield provider.shutdown();
+  yield storage.close();
+});
+
 // Test the payload after recording with telemetry enabled.
 add_task(function* test_healthreporter_json() {
   Services.prefs.setBoolPref("toolkit.telemetry.enabled", true);
 
   let reporter = yield getHealthReporter("healthreporter_json");
   yield reporter.init();
   try {
     let now = new Date();
@@ -222,17 +260,17 @@ add_task(function* test_healthreporter_j
     Assert.ok("detectedLanguageChangedAfter" in translations);
     Assert.equal(translations["detectedLanguageChangedAfter"], 1);
   } finally {
     reporter._shutdown();
   }
 });
 
 // Test the payload after recording with telemetry disabled.
-add_task(function* test_healthreporter_json() {
+add_task(function* test_healthreporter_json2() {
   Services.prefs.setBoolPref("toolkit.telemetry.enabled", false);
 
   let reporter = yield getHealthReporter("healthreporter_json");
   yield reporter.init();
   try {
     let now = new Date();
     let provider = new TranslationProvider();
     yield reporter._providerManager.registerProvider(provider);
--- a/browser/devtools/markupview/markup-view.js
+++ b/browser/devtools/markupview/markup-view.js
@@ -80,16 +80,19 @@ function MarkupView(aInspector, aFrame, 
   this.undo = new UndoStack();
   this.undo.installController(aControllerWindow);
 
   this._containers = new Map();
 
   this._boundMutationObserver = this._mutationObserver.bind(this);
   this.walker.on("mutations", this._boundMutationObserver);
 
+  this._boundOnDisplayChange = this._onDisplayChange.bind(this);
+  this.walker.on("display-change", this._boundOnDisplayChange);
+
   this._boundOnNewSelection = this._onNewSelection.bind(this);
   this._inspector.selection.on("new-node-front", this._boundOnNewSelection);
   this._onNewSelection();
 
   this._boundKeyDown = this._onKeyDown.bind(this);
   this._frame.contentWindow.addEventListener("keydown", this._boundKeyDown, false);
 
   this._boundFocus = this._onFocus.bind(this);
@@ -610,16 +613,29 @@ MarkupView.prototype = {
           }
         });
 
       }
     });
   },
 
   /**
+   * React to display-change events from the walker
+   * @param {Array} nodes An array of nodeFronts
+   */
+  _onDisplayChange: function(nodes) {
+    for (let node of nodes) {
+      let container = this._containers.get(node);
+      if (container) {
+        container.isDisplayed = node.isDisplayed;
+      }
+    }
+  },
+
+  /**
    * Given a list of mutations returned by the mutation observer, flash the
    * corresponding containers to attract attention.
    */
   _flashMutatedNodes: function(aMutations) {
     let addedOrEditedContainers = new Set();
     let removedContainers = new Set();
 
     for (let {type, target, added, removed} of aMutations) {
@@ -1105,16 +1121,19 @@ MarkupView.prototype = {
     this._boundKeyDown = null;
 
     this._inspector.selection.off("new-node-front", this._boundOnNewSelection);
     this._boundOnNewSelection = null;
 
     this.walker.off("mutations", this._boundMutationObserver)
     this._boundMutationObserver = null;
 
+    this.walker.off("display-change", this._boundOnDisplayChange);
+    this._boundOnDisplayChange = null;
+
     this._elt.removeEventListener("mousemove", this._onMouseMove, false);
     this._elt.removeEventListener("mouseleave", this._onMouseLeave, false);
     this._elt = null;
 
     for (let [key, container] of this._containers) {
       container.destroy();
     }
     this._containers = null;
@@ -1263,16 +1282,19 @@ function MarkupContainer(aMarkupView, aN
   // Appending the editor element and attaching event listeners
   this.tagLine.appendChild(this.editor.elt);
 
   this._onMouseDown = this._onMouseDown.bind(this);
   this.elt.addEventListener("mousedown", this._onMouseDown, false);
 
   // Prepare the image preview tooltip data if any
   this._prepareImagePreview();
+
+  // Marking the node as shown or hidden
+  this.isDisplayed = this.node.isDisplayed;
 }
 
 MarkupContainer.prototype = {
   toString: function() {
     return "[MarkupContainer for " + this.node + "]";
   },
 
   isPreviewable: function() {
@@ -1337,16 +1359,26 @@ MarkupContainer.prototype = {
 
     return this.tooltipData.data.then(({data, size}) => {
       tooltip.setImageContent(data, size);
     }, () => {
       tooltip.setBrokenImageContent();
     });
   },
 
+  /**
+   * Show the element has displayed or not
+   */
+  set isDisplayed(isDisplayed) {
+    this.elt.classList.remove("not-displayed");
+    if (!isDisplayed) {
+      this.elt.classList.add("not-displayed");
+    }
+  },
+
   copyImageDataUri: function() {
     // We need to send again a request to gettooltipData even if one was sent for
     // the tooltip, because we want the full-size image
     this.node.getImageData().then(data => {
       data.data.string().then(str => {
         clipboardHelper.copyString(str, this.markup.doc);
       });
     });
--- a/browser/devtools/markupview/test/browser.ini
+++ b/browser/devtools/markupview/test/browser.ini
@@ -1,16 +1,17 @@
 [DEFAULT]
 skip-if = e10s # Bug ?????? - devtools tests disabled with e10s
 subsuite = devtools
 support-files =
   doc_markup_edit.html
   doc_markup_flashing.html
   doc_markup_mutation.html
   doc_markup_navigation.html
+  doc_markup_not_displayed.html
   doc_markup_pagesize_01.html
   doc_markup_pagesize_02.html
   doc_markup_search.html
   doc_markup_toggle.html
   doc_markup_tooltip.png
   head.js
   helper_attributes_test_runner.js
   helper_outerhtml_test_runner.js
@@ -21,16 +22,18 @@ support-files =
 [browser_markupview_highlight_hover_02.js]
 [browser_markupview_html_edit_01.js]
 [browser_markupview_html_edit_02.js]
 [browser_markupview_html_edit_03.js]
 [browser_markupview_image_tooltip.js]
 [browser_markupview_mutation_01.js]
 [browser_markupview_mutation_02.js]
 [browser_markupview_navigation.js]
+[browser_markupview_node_not_displayed_01.js]
+[browser_markupview_node_not_displayed_02.js]
 [browser_markupview_pagesize_01.js]
 [browser_markupview_pagesize_02.js]
 [browser_markupview_search_01.js]
 [browser_markupview_tag_edit_01.js]
 [browser_markupview_tag_edit_02.js]
 [browser_markupview_tag_edit_03.js]
 [browser_markupview_tag_edit_04.js]
 [browser_markupview_tag_edit_05.js]
new file mode 100644
--- /dev/null
+++ b/browser/devtools/markupview/test/browser_markupview_node_not_displayed_01.js
@@ -0,0 +1,33 @@
+/* vim: set ts=2 et sw=2 tw=80: */
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+// Tests that nodes that are not displayed appear differently in the markup-view
+// when these nodes are imported in the view.
+
+// Note that nodes inside a display:none parent are obviously not displayed too
+// but the markup-view uses css inheritance to mark those as hidden instead of
+// having to visit each and every child of a hidden node. So there's no sense
+// testing children nodes.
+
+const TEST_URL = TEST_URL_ROOT + "doc_markup_not_displayed.html";
+const TEST_DATA = [
+  {selector: "#normal-div", isDisplayed: true},
+  {selector: "head", isDisplayed: false},
+  {selector: "#display-none", isDisplayed: false},
+  {selector: "#hidden-true", isDisplayed: false},
+  {selector: "#visibility-hidden", isDisplayed: true}
+];
+
+let test = asyncTest(function*() {
+  let {inspector} = yield addTab(TEST_URL).then(openInspector);
+
+  for (let {selector, isDisplayed} of TEST_DATA) {
+    info("Getting node " + selector);
+    let container = getContainerForRawNode(selector, inspector);
+    is(!container.elt.classList.contains("not-displayed"), isDisplayed,
+      "The container for " + selector + " is marked as displayed " + isDisplayed);
+  }
+});
new file mode 100644
--- /dev/null
+++ b/browser/devtools/markupview/test/browser_markupview_node_not_displayed_02.js
@@ -0,0 +1,132 @@
+/* vim: set ts=2 et sw=2 tw=80: */
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+// Tests that nodes are marked as displayed and not-displayed dynamically, when
+// their display changes
+
+const TEST_URL = TEST_URL_ROOT + "doc_markup_not_displayed.html";
+const TEST_DATA = [
+  {
+    desc: "Hiding a node by creating a new stylesheet",
+    selector: "#normal-div",
+    before: true,
+    changeStyle: (doc, node) => {
+      let div = doc.createElement("div");
+      div.id = "new-style";
+      div.innerHTML = "<style>#normal-div {display:none;}</style>";
+      doc.body.appendChild(div);
+    },
+    after: false
+  },
+  {
+    desc: "Showing a node by deleting an existing stylesheet",
+    selector: "#normal-div",
+    before: false,
+    changeStyle: (doc, node) => {
+      doc.getElementById("new-style").remove();
+    },
+    after: true
+  },
+  {
+    desc: "Hiding a node by changing its style property",
+    selector: "#display-none",
+    before: false,
+    changeStyle: (doc, node) => {
+      node.style.display = "block";
+    },
+    after: true
+  },
+  {
+    desc: "Showing a node by removing its hidden attribute",
+    selector: "#hidden-true",
+    before: false,
+    changeStyle: (doc, node) => {
+      node.removeAttribute("hidden");
+    },
+    after: true
+  },
+  {
+    desc: "Hiding a node by adding a hidden attribute",
+    selector: "#hidden-true",
+    before: true,
+    changeStyle: (doc, node) => {
+      node.setAttribute("hidden", "true");
+    },
+    after: false
+  },
+  {
+    desc: "Showing a node by changin a stylesheet's rule",
+    selector: "#hidden-via-stylesheet",
+    before: false,
+    changeStyle: (doc, node) => {
+      doc.styleSheets[0].cssRules[0].style.setProperty("display", "inline");
+    },
+    after: true
+  },
+  {
+    desc: "Hiding a node by adding a new rule to a stylesheet",
+    selector: "#hidden-via-stylesheet",
+    before: true,
+    changeStyle: (doc, node) => {
+      doc.styleSheets[0].insertRule(
+        "#hidden-via-stylesheet {display: none;}", 1);
+    },
+    after: false
+  },
+  {
+    desc: "Hiding a node by adding a class that matches an existing rule",
+    selector: "#normal-div",
+    before: true,
+    changeStyle: (doc, node) => {
+      doc.styleSheets[0].insertRule(
+        ".a-new-class {display: none;}", 2);
+      node.classList.add("a-new-class");
+    },
+    after: false
+  }
+];
+
+let test = asyncTest(function*() {
+  let {inspector} = yield addTab(TEST_URL).then(openInspector);
+
+  for (let data of TEST_DATA) {
+    info("Running test case: " + data.desc);
+    yield runTestData(inspector, data);
+  }
+});
+
+function runTestData(inspector, {selector, before, changeStyle, after}) {
+  let def = promise.defer();
+
+  info("Getting the " + selector + " test node");
+  let container = getContainerForRawNode(selector, inspector);
+  is(!container.elt.classList.contains("not-displayed"), before,
+    "The container is marked as " + (before ? "shown" : "hidden"));
+
+  info("Listening for the display-change event");
+  inspector.markup.walker.once("display-change", nodes => {
+    info("Verifying that the list of changed nodes include our container");
+
+    ok(nodes.length, "The display-change event was received with a nodes");
+    let foundContainer = false;
+    for (let node of nodes) {
+      if (inspector.markup.getContainer(node) === container) {
+        foundContainer = true;
+        break;
+      }
+    }
+    ok(foundContainer, "Container is part of the list of changed nodes");
+
+    is(!container.elt.classList.contains("not-displayed"), after,
+      "The container is marked as " + (after ? "shown" : "hidden"));
+    def.resolve();
+  });
+
+  info("Making style changes");
+  changeStyle(content.document, getNode(selector));
+
+  return def.promise;
+}
new file mode 100644
--- /dev/null
+++ b/browser/devtools/markupview/test/doc_markup_not_displayed.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <style>
+    #hidden-via-stylesheet {
+      display: none;
+    }
+  </style>
+</head>
+<body>
+  <div id="normal-div"></div>
+  <div id="display-none" style="display:none;"></div>
+  <div id="hidden-true" hidden="true"></div>
+  <div id="visibility-hidden" style="visibility:hidden;"></div>
+  <div id="hidden-via-stylesheet"></div>
+</body>
+</html>
\ No newline at end of file
--- a/browser/devtools/styleinspector/rule-view.js
+++ b/browser/devtools/styleinspector/rule-view.js
@@ -1464,34 +1464,36 @@ CssRuleView.prototype = {
         };
       }
     }).then(null, console.error);
   },
 
   /**
    * Update the rules for the currently highlighted element.
    */
-  nodeChanged: function() {
+  refreshPanel: function() {
     // Ignore refreshes during editing or when no element is selected.
     if (this.isEditing || !this._elementStyle) {
       return;
     }
 
-    this._clearRules();
-
     // Repopulate the element style.
-    this._populate();
+    this._populate(true);
   },
 
-  _populate: function() {
+  _populate: function(clearRules = false) {
     let elementStyle = this._elementStyle;
     return this._elementStyle.populate().then(() => {
       if (this._elementStyle != elementStyle) {
         return;
       }
+
+      if (clearRules) {
+        this._clearRules();
+      }
       this._createEditors();
 
       // Notify anyone that cares that we refreshed.
       var evt = this.doc.createEvent("Events");
       evt.initEvent("CssRuleViewRefreshed", true, false);
       this.element.dispatchEvent(evt);
       return undefined;
     }).then(null, promiseWarn);
--- a/browser/devtools/styleinspector/style-inspector.js
+++ b/browser/devtools/styleinspector/style-inspector.js
@@ -104,17 +104,17 @@ RuleViewTool.prototype = {
 
     if (!aEvent || aEvent == "new-node-front") {
       let done = this.inspector.updating("rule-view");
       this.view.highlight(this.inspector.selection.nodeFront).then(done, done);
     }
   },
 
   refresh: function RVT_refresh() {
-    this.view.nodeChanged();
+    this.view.refreshPanel();
   },
 
   destroy: function RVT_destroy() {
     this.inspector.off("layout-change", this.refresh);
     this.inspector.selection.off("pseudoclass", this.refresh);
     this.inspector.selection.off("new-node-front", this._onSelect);
 
     this.view.element.removeEventListener("CssRuleViewCSSLinkClicked",
--- a/browser/themes/shared/devtools/markup-view.css
+++ b/browser/themes/shared/devtools/markup-view.css
@@ -25,16 +25,22 @@
 .theme-selected ~ .editor .theme-fg-color3,
 .theme-selected ~ .editor .theme-fg-color4,
 .theme-selected ~ .editor .theme-fg-color5,
 .theme-selected ~ .editor .theme-fg-color6,
 .theme-selected ~ .editor .theme-fg-color7 {
   color: #f5f7fa; /* Light foreground text */
 }
 
+/* In case a node isn't displayed in the page, we fade the syntax highlighting */
+.not-displayed .open,
+.not-displayed .close {
+  opacity: .7;
+}
+
 .tag-line {
   padding-left: 2px;
 }
 
 /* Preview */
 
 #previewbar {
   position: fixed;
--- a/configure.in
+++ b/configure.in
@@ -3465,17 +3465,17 @@ dnl ====================================
 dnl = If NSPR was not detected in the system,
 dnl = use the one in the source tree (mozilla/nsprpub)
 dnl ========================================================
 MOZ_ARG_WITH_BOOL(system-nspr,
 [  --with-system-nspr      Use system installed NSPR],
     _USE_SYSTEM_NSPR=1 )
 
 if test -n "$_USE_SYSTEM_NSPR"; then
-    AM_PATH_NSPR(4.10.3, [MOZ_NATIVE_NSPR=1], [AC_MSG_ERROR([your don't have NSPR installed or your version is too old])])
+    AM_PATH_NSPR(4.10.6, [MOZ_NATIVE_NSPR=1], [AC_MSG_ERROR([your don't have NSPR installed or your version is too old])])
 fi
 
 if test -n "$MOZ_NATIVE_NSPR"; then
     _SAVE_CFLAGS=$CFLAGS
     CFLAGS="$CFLAGS $NSPR_CFLAGS"
     AC_TRY_COMPILE([#include "prtypes.h"],
                 [#ifndef PR_STATIC_ASSERT
                  #error PR_STATIC_ASSERT not defined or requires including prtypes.h
--- a/content/media/DecoderTraits.cpp
+++ b/content/media/DecoderTraits.cpp
@@ -208,16 +208,17 @@ IsGStreamerSupportedType(const nsACStrin
 
 #ifdef MOZ_OMX_DECODER
 static const char* const gOmxTypes[] = {
   "audio/mpeg",
   "audio/mp4",
   "audio/amr",
   "video/mp4",
   "video/3gpp",
+  "video/3gpp2",
   "video/quicktime",
 #ifdef MOZ_OMX_WEBM_DECODER
   "video/webm",
   "audio/webm",
 #endif
   nullptr
 };
 
--- a/content/media/test/manifest.js
+++ b/content/media/test/manifest.js
@@ -13,16 +13,28 @@ var gSmallTests = [
   { name:"320x240.ogv", type:"video/ogg", width:320, height:240, duration:0.266 },
   { name:"seek.webm", type:"video/webm", width:320, height:240, duration:3.966 },
   { name:"vp9.webm", type:"video/webm", width:320, height:240, duration:4 },
   { name:"detodos.opus", type:"audio/ogg; codecs=opus", duration:2.9135 },
   { name:"gizmo.mp4", type:"video/mp4", duration:5.56 },
   { name:"bogus.duh", type:"bogus/duh" }
 ];
 
+if (SpecialPowers.Services.appinfo.name != "B2G") {
+  // We only run mochitests on b2g desktop and b2g emulator. The 3gp codecs
+  // aren't present on desktop, and the emulator codecs (which are different
+  // from the real device codecs) don't pass all of our tests, so we need
+  // to disable them.
+
+  gSmallTests = gSmallTests.concat([
+    { name:"sample.3gp", type:"video/3gpp", duration:4.933 },
+    { name:"sample.3g2", type:"video/3gpp2", duration:4.933 }
+  ]);
+}
+
 // Used by test_bug654550.html, for videoStats preference
 var gVideoTests = [
   { name:"320x240.ogv", type:"video/ogg", width:320, height:240, duration:0.266 },
   { name:"seek.webm", type:"video/webm", width:320, height:240, duration:3.966 },
   { name:"bogus.duh", type:"bogus/duh" }
 ];
 
 // Used by test_progress to ensure we get the correct progress information
--- a/content/media/test/mochitest.ini
+++ b/content/media/test/mochitest.ini
@@ -198,16 +198,18 @@ support-files =
   r11025_u8_c1_trunc.wav
   r11025_u8_c1_trunc.wav^headers^
   r16000_u8_c1_list.wav
   r16000_u8_c1_list.wav^headers^
   reactivate_helper.html
   redirect.sjs
   referer.sjs
   region.vtt
+  sample.3gp
+  sample.3g2
   seek.ogv
   seek.ogv^headers^
   seek.webm
   seek.webm^headers^
   seek.yuv
   seek1.js
   seek10.js
   seek11.js
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..769cb01dbd33ce7218e90c1915c24bc9ceef6787
GIT binary patch
literal 28561
zc%0n4cT`i~wkVtsAfYB8NR<Q$QUyd*z(4}1G^IBI>4+k|2E-&ZDWV`!tTY=PEGR0F
z04fU7RP0Is0YQ||B%vhVih9oZz5DKc<9+|Wj4|D7&%MfAv(L3RLLd<7!!ZdF+k<p{
zAy5c}dku}y(}h6z?}mnl$3Y;FkkGgz0pJRuW=d*v0RrK1gFuAxxc#A!fBgQJoB#cu
z0Qo=uU|?QkOqB02(DsZu_Ipj}f7blhY+&90y2Ss#b+Lf~G11^E9~crH^Pdra=lwHb
zMrgoMU(mpW2K?8(qrr5S36fpEdmA1J2#NaF#L?lgVgFpnBqAat5aS520hj}UU_y+A
zZ&*M`Aa?*%IrM1QVbDNDhyGdNU(^Ns!OI6k1s?v#euQJALNI^ZQ_(SgA>g_<Iwm^c
zAANR2`-VpS<NnW&2ZG{W(0|w<76AJA0?MEO%?A+D(J{Z-@vlKZ^f2y1dSG(@zj)Z+
zXMBIJf&h5`wuSy)xgY_?B>o)}@MkUvE;`0P{4Wml<zEDQIRJrdSOMGx?9>GF7=XU!
z8z2yOAbOwu5Xccl2;}H3u*A0igF5j1o$`NChySwm|Mvbj9~uGt8To&q4zQ~KSsnhE
z!hfd@aYq9J|GDlTb#MXL@c&I6VCH|-K_c#tI{cI7{|l9X!T+j6&3{peOTd`p{s+Er
zxsV6309T9uvB!V?Npm>h-@Sp+0l#$ywhJg0uQo;uVtAfw7F^&1G(j5?;GZT@I)T>z
zS3NM0G{TCiCMK@}%@5@Y@4qUZ6#&&g_~?J(dHz1r0+9I+g%tdY=l#d^pGx{KJmMdC
zfq&qI|A80z2Ojkgyx2eR691tEiu;F>L;lbWRRC8x07d}n0c`#YegG~3cn07&fQtaS
z0Wbl)0ps?7D+9m+XoEdLf#O3W0C1UR3g9*XU<gn^7jzT=1pqJ*=vDxG0aybF0$>lo
z|L?P-05SnQ2k;O;4*>33Eda6s6aq*GESv*Z7qIqc0860F-RCR-DuBy>Y31${tO>~n
z(D3(q5&#f31k3}e0B{FDEdW3t<O6_Z0BZo!0QCL2hXP(eB|+QgAI<>q6!8rh50HhZ
z31B^FOa6pFWWd<XN<bC%K_FWJpSF8JAiIH)nSybaa0tW|sF$ZV1mXqu;0F{gpaTL4
z26KnHbLD+FDlqUr*CS1#0lr+LM#TR$M(#b<9~VT2pqHR|Omw_7gr6&A?5+co0A~bk
zd}k03ycBoe*qy)o89@hd8~)%B5G?0k{XBQX`=Ge}Aph>yXt(3<*njkM`w#B_m448$
zpiv&<y&@wPQt^Heykx{C23Bdh_#3(G;}ZY)-X%YJm)9|C6gF3!O{6}^bjweuX_A+Z
zes|b85Bo;+%OrZf{ei-CM($0i($>zZ2y9V1dW6Gz5@NEH)-@Xu39&nl!s1l$5uAy7
zZ=oy59~pY@@-%%KvA9k37!H%^*`#!S%M<mhCf*8-Set(KQ8Mf0g^udYR+~|}G-owB
zwn&YgK&rK38}sIVO%~l`kgf;ZJ@g(5CXi#ilfCmJ^JDnq!=Y=T_eZzgTidtu^R0Ws
znNNRX{X^FhxLD9>PWmHRE|i%QN<Dq=&zQ0QSDRc5y=RY1E9HP+?<V(#N@FtT&u^If
z$UzQ<=HAepBAEqs4mGQsxayAaXjKJv&jZ(^@fxnoI&Y2)a_~~lL`2Eg-Y@6=j$Y*s
zc2r50SZ<xY@bSws7srs4SAel2hzJA$X9ek)<8-lIor|-qx;jTWQb!XaPu!{^RjXbf
zpbop#%r85KS5x_8NcB>=L&eojh`rrIPZG?}{mR8G*`A_|UJve>WH)qECfn-F>kV8p
z##U;{ZEXq(&dy6X^l&CS`@CJ-cmFC0yIyamr*R{7xVoojtu_g_a(2GKFJ+~6-_@b3
z7CwQ0w>rzE)@eKR?^bu5s}~|L<qdX9z|#KqU~_vo<0%(PTW5c7k<v)74G5MKf<FFd
z4;O35Z%%g5%oGIh`NhsIqC-`bH02X^#hU!|B0*V^_twpZ{UnERg~9oUGMQsd#_hwC
z4~MTms};zcyESy>Gb4b%`RX*`D|I{@@8PsNtU4ef{+|MIb*21XAw5I^w%$lY2)ENQ
z+HeY|KmoR<Lqz^Ep<_0|DU=rqJUk9`vp)~mVk#X3Q|I7ZwN|R@9IE+&6DxuI&Uu=}
zVY#-|9V(fxB6GgjCdPeqIn%b}%9^$2u=|g{y7%!p_Ryp>LH(d(FU`5%zIg3ByN08+
z=2BhBsqc|a80Ji~Yo&*OleUhvA+Uo=XEx8%AILwA6V_9zt0!QK1W9q!`41KFc_q^1
z2T|j#`F7YM6E>0bqvv1}CUcx{^~9+A1qhaDN(w_WQ@oz7sK#6<xPS5+sSJxtt2shu
zDl}u%bpv#|@n1x(050Uq8h%0SRG^j66)(4N#2b||Y!TaQt&}+>^Rd`-vR^FB7w<{K
z7D1^ooXN1CMVB{oM12*`87mH8al1(V!wZC?qA{*Dzj{$Uj13fQ(YexJrOX{$CLIp#
zI24qJd%sf$TV(3R9%c=EENhnR70SJ|_xUjzcimNXLRO4VWcAIPHK)Fggj28?YNb<T
z*6AdI%>g|=*eOrLWjeM_%BlhV1LkwKdH8~eaS1E$1qPdoDqZnr4Y_XS^*>q?>Q-%G
zi@~BMMBDH`wyO1g%}Km<)ihdK4udT-)zsmzpwSga4g5A)PYOVe(XluwuSGobfrkS1
zTDpCQ=`S5T1&i9{wcyQy%6a{;c<|NkR#SUm9@Zwd*m{`ta@DRoaNwwf{N>a{u-^&v
z{P4oi!W~U|&wa&}oVQFJtdca7glEExr+03q8M|=$3e{2AqGO_Ucox(Xart@dcRibZ
zrp+iUYBw6}t(SPIa=RY?{q&X2FbWoDYUE314kd*uMiXi_Y`62n{C2Ev{(ls{Sq7#h
z1T9@n&O>da(KM0Jm3KJ!FFFH-Or;T~p)>|+3urhXVbJC^3xp2?&8PuddJSl)jtDxH
zMt+Kfaa4<Hfv#@T1d4qYD*<8PXTcCF6wqj8g%lLO03rE^Nq?$ewFoUe37flyP2Ger
zfmoCaI6LpTrKvcT*yKN`GEIVqRq~w8(%py6;6cFC^ij?%PlPFfU}ua*W+V%B8xfWZ
zpsODQcZAl|QvYMP2gCoE6^H4NvTew!O}V&Oz$z`0^LpPNYxeQfA+j9~EfoSA<5X+C
zyT;rWoXfH*Gp<BRedYAjuaM{Vt~BK0doSA=zP%v!D{ilYUPU<P{?)-v*Tu{{%L3>*
zyTgh<O4$FfA3yjGo_6eh_0i$~cuDu;kiSd2!$t~|nN@bhPHN~Bl#aaPxN_%!nU=zg
zSV0N}nM^l^@1lfA&%bk$Z?e>Wz)B!gmE8xtyN86bPXKO`=?wIb6eMs6D)}%PVVCvd
z3CX<?4@FxLK4t0jtH}rnOp*)%4J#{CP}^-Jas122D9fftIWIj{ZgSWbH$Ik3-ngZN
zy7b4Oxs-Wi{9($7Kb*3D*&0qs2C^eCP`W@arby`eyEP!H!WbYlJ0fxkth)&^02(xX
zSVlXn8{8{u0kT3Ac%Zki)(EpX1{_e^Ehys*qmlbLS*~BuCQI#G4@R72*ErDAun=Ma
zl%6Dkb`XTF+){M=&gPR|otA9>lpQ_)L?^Znhe^{B7ANRPKt5Cwg|As?A(TdjsTFpd
z>NdlseeD}qOP@J-9t>p`2Ce_p+k6LR`+Fz9Bb?{CKRh0>5`yLtkzW99=3qPPZa6p#
z!$5(ViOAW<jlh5QB-1fyaVVYq8J<je4fIoN5g|y^Yk`^2@$dN{1<J`IOh!wyG%76}
zDs08SX~2x*%;|6)iT;tj^^~V9*jYC!nU4PmJZ}<;H(3({iNL|v%4AVI5R-1y<78FE
z+@6e%LyK+8Jw2_gS@v<xB0FT6Bin#5btuaiWn|20TBnb9577eoXo>3lPpk~9@2s|d
zJR;7ohuYKR3mc;+kEmL(BGw%mXes!sEA;~E(~nMYh%#B@X0<8QwKZX$;s3<6L#12^
zvbS_d^Yf}h%M?(M?cF`6+MpxCRtUQmYbGP9IxCQ^mEASnZgFVbuwmx7myaf}&K4jj
zQ6v;bBmgeuSn?|fKp5!REDQs^P@INIWq=qC_%X)s04;$$6Bd-TqO4GXQtV1`V`uqn
zQo%1px(<04?}YaWKp~i1ik_7d>TzxrTB_IC>4XbSwcfTo!VJO?6$iF0C+?gENvT8%
z1imwxFV*PH-V^J}4sPVEVchV$IL!D*Eux|22OR$yWxZ;+(qv1}p2>)JKnMt*6l^X<
zAI6)^G(l{(YW7qX;4y8;?HXH(ZBTcr_GX{uK>!)}Fi<G2{vn}I3wSZ0b|<i#Z~VME
zL<F3mcY>0Hfe=}41<KX$ZUkSC^6Go?38?rp9Ip`I$49Vr)K)P13~*)WuW1+xmIv7(
zUWOEJL!}iO&k+ldP>w!az=xt-sqF;cldL5rKxP(TtG_YHMr&(Bwm=>9K!lDUA{U0h
zG)2(r6m%D@EOmsTD%5KIt;nk)%g@b>iq0aJz^12&`L%nNZx*PR=%WhKbbO3)yvhU`
zQ9?W=-C`4;VCi%@UAn|RX0HQ{A^pw74oah?8Sx1=`q-rgQ$k?03Vu5rzgRnRPvp06
z38xPPj4(C%$qNh}p})D=GPY;~@hEv7_WG4qSL*4OgGY}9mtmD$h~aqV0Z*e#YN!c|
zhsg_M5Nvi|DyK4`B+>Cl`&kkmJD=V_VfXCv8ZZ5^oh%~Z#Z<q3hBkaF4~vo_`3<w4
zaoDm7g{Z;=DolZnRZ<~Ekta|6+I6ca`KYXcm});5D+Pg&>G|vHlWw0PtvUo>ZOa4w
z41GCY`PmP*Injq-3N{J!L$G=(8j8asDeFdFPZ76bqwmSNW3WnW^&OnaXO%WbUuBD3
zm`U?28Ni~pNJEF21EgL_PyR<I<Mb=PaA|>TLen!tHdLX>r|-0xkhM@)I{VOGG`sKD
zjMC^J;;48C{UimeB;{mEoxmj?urb(sTzLPP{A3?M3x0BVH9hor+eMGV;aXaD7a>>&
zdqW>Q<1$e@yu$LXPOZdQ6VOj;bJ_63kstj%0ds<_+5OTIAlWhHgp$9O9C>t6<wU9`
z4RYl&1skE_HH8Mb)|Br21?$`9i&I67*m6@+ICWC@ZSW?4YKi<U5phWZR!@p_%$xa*
z^l=e&QEl3Va&;Pl#rd-V&c{1WW5czKkw+sxV^CNnH4>?mY3DF9uUhqJTLWSq1b?Oe
zFY9O~Gzpp$dEt&7b78!Of-T$Sc>ulO#xCyAxIb?whwHvX=i1E?AsX<BY)PPnOs?et
z=iCB3IJjN5rr>~or=)QMG7-sYr{gEZfhUyH;?*(HhR`X>S?Vd!Xb@n>yQxC0`JdTQ
z?mh}ICW?pv@dlsHHRRpERY-7ygeV9;rk={hASf)Z0UJ9~fJ(yFAokKf@|LSwl_Ow&
z4N1}{nvS%DsRLDgaK6b2wPs|eJOF$Od_=@PjuNrjagey=WLM`lkJN5AXDCm|$nc^>
zolugw3>a{N2rC7t0prRfM9gtXJEL(q$cL7tS~&y`-Am>C(@)qdas9+PMVEiiSyfmH
z!URU|q@`igbnMix&M{Tt-CgvwLvq^M3RXC084h!HO%p`W2f#DjMnczY!S=Z<Sp*!)
zBO*jh=sug!$qc|cu;F0{4K#d!R{?%OBn{<DH(M!7J7itR%~+s|NKy?ilp|Sf&)U;4
zs3|Iyl7<$9M9pcoNGQ!Q*UbxgWD;-Bjn=C>8LhA6?lY22OEHNch^Lh^^OcL$I~b`P
z4ROxh_!Hj_$(8w;nedXJ<-(TYDG-9T_8^1bl*6kXKuMHh7uU>OiglC0|K0NMK<A*%
zb@=N!7UDD<h8KbpzNVN3MM$XAnMs0TE9DHu;y0&GW!ytLzcKnr<p@C<r9o&<16u?x
zeT%6yj+c)c4k=(~s~A}zyUM&u@X+qJN?_C&AYA$paJ+CGj1)VSMzba8E5O-0#@xKk
z{+lAv62#09X$hY)UX5wt0mY7mWP~Dwm<MIA1L>2y3txT@Sj%=6tyjxCt|!qp<Z58U
zi%LO2c~NRH2&LKF$|7S%el-~$_=FM5_6mL-XUU=5r>AmxPTS#DP-)?!JX|a##Upjm
z5l-ttMkL~RKD_1i&$pD#7xM@W`_N@c{SPM`cmK^yrD1rceKN&Ex#e7NADprZg1YdW
zrUDNvPZWsvwE}D<Ld2;SBq{HJ)ZY=97!82FoCF-Yk$8Cm5wN6;Xw9!MKtu?d+>K?N
ztc0}-Qpklc(e~T9)Ni=d6*>_)0;1sw$V<>-f!0S}2vS=cVFn0ac-%;+1`5;Tf`Tv@
z(#HunOMd$irYdwVLxh3jh55V_zR{Q5Ae9<V>*prKU|BY&2MqX(z;Kgi=s3v<RZ-?+
z|3UaOD+Yb$Q~}6ta-qV=R0KVO2TI2ef$W*!I7%lXgiIkoYCa77LKfNuHM9nDlro(&
zl?fb{Ra@q=9<fX$h^F#KRmi{VUGu*w?-GP2^Po<|xXR(y3ROx<ot2RIu-xIg7u9vu
zZTV*Ce)=sCu^s|`0QKMp!Eg$!=*n9SD1C?H<pm})2M}iTjI9W7UX-x7DLn0h9Itln
zP@+_2;J%Ryc+KI1ehc;QgS5K!IO(1WFh&FsVX~(T*c45V%l*HW6k|bQpeJa+qtJGO
z2`^S+axn#1uyn%+^Q`qq#9}O9?Kse|B)~=kJ2mHS9G`6F>ei*wr8Z9e>Ozs*P+>M5
zBrKdX7|7qoxv3{61){iS#qVIuWTJ+4R#|$&wqMdu0=XOp4Pg+a;U>Ho$Poobk#L!{
z6P{PuPq#_3yrUoL4FpgMCJM1c=XQaBzd#dN=T-K~vzUK~6yRhocS9Br5teLt&RQ-7
z_w@9%UvjB))Ab(CG4HTrN(dH6M#+ksN*4)VYeA08{=0H_cKn;?e-BE@)km$5jR?0q
z1l&%fGMgX0a;|X=aK^&$!Fy&irs$O*zeEKhwO6io*^oQ(<mEBBZ6MEHja))_|H|#5
z7gTsG#d*w}z3}ri?|J<A(oD-WtA_g<zl`WMH(=s?)F`(=A}S7)nrDuom_#z>GDXp3
zv|-)7?4&1jY+QXys%S>)h-PAb<vRZsIEDQQbdC7q+lBz+V(oMkfeeg+j2||FWbcS6
z<)irsq}l3v=lq&N`)rCp{E$@c#Z3arZ<9X#Dgo2;!a&yBi|~=T`UHJ?gq%?+YjP7{
z9&pbl_5<T$q@aX4P(VRJO(>IPB3eV=nF28ZPbs-ej)XL9HAB_BbIC!pb$;BGP*fH>
z$N4%3lo~#iTR6Ccmdb5WUMXJTm|t2V_{5KIDDy6R%*{xPkwZjFw1Ba;izn{$;+sKo
z;=t(+lq9H2*0_~OQk5sDSI`U02X-rz6XJeNd%t8Cx*Jy~n@idxSfINrEN*`2=|I3K
z2}C$&$jerWNc22J*E{s%Q`V1roaLtJQ`hIKG<bOTifU-zndWfz7yie5T)Zj&66ZS|
z(;hREEynzivzkfDCk|#tr~@+@1Pml0p*&0+d<7WEN1(|a#(#_6v#Q7}WybN)L3)8P
z;|yNgW8g3n%5>v;T?Q)QPfZ8mS{EMSivV&579-jLlGxSTP+%a!L+fs)2#g%V#}VR_
zFQ_BTH1lb0wnk^!kr@W#{+||ruT}yf`L`%@U}?AMX(*arlBaSmZ7{aAidBu{<DB8D
zgavqB%XR)K#@gbhD2#yroT?Rn2=&V*limY6Cee2c5`r|SSA0Sw>+&HtQy-R@81O!<
z>6Sz~_t(G#v%Le2gx266efD8H6OZs|@pK9(FQ0YFCrZW$zDzZ%ueMXFiZEjq-SEqt
zOnN?CqkX%$=GJxXe|u=xWB)3AZ^2qrlXWOWB;#*kCJX`!$U|m;I=%ul#sF^((sV>m
zb)yLPNXr`bWukI%ipXJZmQvr;0vH;_FmXcN9Ln0owuj&8>`#%s^=Y|`36gs9Qru|8
zY+{Xeuz4ztbOzKkfXj<z3^W6X$K^Mdh2cOam6N$H6s-52Te(@Gf%?pGjll)g;>pcn
zOcB0FI>Sy3jB+<ZSBi64tOaRTmqOC?Fh^s{K(OTC+Y5@N29lu+9}zT!s9TC`6TbST
z!YUgF8@ujE>8%Mss_!4h1+*w8VeGdMF*S`R3~LjH;&?8-K$13VzNbhqWO>sHeLDL^
zTZ~*&H0#E;QJftldbZhxta(>yBpvOrk5D~f>{<KZVASo|@n2qdUpn%5KfdlqU`ofs
zQ!I*V<xB($&FH=xTv((JWx}>Do>kXjk5+#Tgyl<pdh|s480&2(MeS!zt&jCjsQcZD
zWrLqk>s0tV!?B~6Ooc;Wdm2{M9lh6KVkW}hKSX}vGm+v@uDu`mEhH+ojLi<BvYJms
zDXC-|YFa)s)TCqIh>?6b^O>KtmgY*j<W@esbk4(;sj*|I%*>b#r~S{%;3`atR3X@0
zPz-P;9<p?wXk_i@1R0Nhg<w%^ko3;%k6D16-%TwuYyGA+fW?Kpu`XpYhvV~e^CZte
z4?xWb*t+ZN6ZrXOCG_jD=lve?E8cO2fP~&_iagWfb&OQ7yo+C=vf_9dNc{0p9M<dY
zh3{+k_kK~h1P`NO>AOimrL1P>;Stz_&d{<-sdcbM1)ycYO;==jy(V@`hMJNdpjnKR
zgr9d~>I^_j-(t7#_2{Q#aVlQx#!MDFN&nu3xxM0I_W~oZC_z#nm5G@`pK-j@w7yX%
z_Z13@Qo#pOC%l-Hz)!>O>t|@zF`#go@LKVnxoUS$f2oS9aboX?mJc>}!i#0h8uZY9
zaU(71$Tl*)hk~^^9IQ<}EV$&_XI{FmFw3iX2&@ao1OD-9)!Tmz#u!KQt9~fM+U#bB
zqnVkZL{r|%ni!W0<;5thjaumn`CVPibgx7lMLi;4w2Fp3BSAVwp8qyiJRw6pWt>y*
z)(!fpge!ToXGofRmXsenF)lveK*ydr-F=(W;d)2w>4DYSwz~SE`#ykX{84X~#EF9)
ztb;M9ep=r9X7~GqFaD38`|dwCU;e%0{1ymJ))?|cktYRFR4V}$GS99L@8T3$;T)H|
zO2pvRLw%o|;2hNeU=K18a7cvNCMoW54{!21j6f@&Z!!^ZzogP?!Yfm*c1R3rHY-2~
zuoMQlwi2-O({?yG6T{HK04wVR{_Bx8JcZNp+ZQ0X7N-Vm6Gu`eHX{Wf@+hu@6PM&c
ztby=ydkQ+@15$a0X(@9PEIXW_O_%jjhD3lA%g-$zuT3e-ZiBzR3oksdqDc1={)8?r
zPAnEJEUp%7Wf7KosdZ{kx1YwLT6u4ej;tvRPQ|x<{^fkk;*NSuCLfuzzT~}fJ&NUC
zbAsbCe)$&g<`ck2XQ+Sx_gNc;DTC1MQad@*!Z<W^F?dge7P-5+^f>*n)edSlp0hPX
zmVCa|{l@4){_Df8@}JJhU0GQV!?d3lB%)zv3=?#Xc+YEgaxbjJ|BH@Sb#96TY`QCE
zkCOowUCAtVN))6pS+3uM1NaRjVWTvp^$L7n2AT8u-kagI?_-udsO&RrzKjuH>c39y
z4yOKgtAg)v@C6V}_5ohTVSxyOL3-<k;}rrpG$pYShXUE-Tfk5(VBdhS_|Sl(2D+DG
zD}ky;*QD4-5;>#Wq8f_VH&@=sG4`x3u5mgvF~s?j<vd4I8-?tet`V;_n7w96x|W|S
zv=HUihnUw+y1o3C`J5g$sM+fMcKzAiSJ_>^ijmd#oJH4)^fZ?XzOMIWrcl|IQHqi<
za|#jUeB%R2&{3-f#1}LN&dX2kYXvN3F^B7$`EWiKEimi$yJVqudwsqaxsNk<?@rm3
zZ=0-es%vb@`BOBCk-g9g%{Cyj-Zu9q7uQhrWjcfCjo}MaO+iscUh2QAK=)jrz)bu2
zFDs9-TgfhqZ-MAQ@(Kmvl^>%3e7iIV(10mi*AAjE<U>OZ$i30CY2tLsAtQ-_-Nz$@
zjvocNHMNX^+6X#*0YUu;ju$xsNrD!@B!3?+1s4*0@V{E%kL`@>9FmzPu64Q2sR2il
zl!>}Puete19uYZ9(+7d<ym9(;Vb*4gb7g6$j1Hr-)XzsiAC3gKA|WDBCcL0?)Dj6{
zC3Gr-)|(YLx~nN|7U~Fs(NWN?_|KU-xr-jiW5JJXm1UTr)$OoZ5)upa>x*L6g)_Hm
zZvxAh1br`aPhOe81j>c25j>u-3WrD2O)xa&p!XfN7fw+CDk>1Mueyz2O~(Y`3mXw!
zjF*aE<HHF<%9&?bLaR@VSL)o5E7gUPMESPyFgajM{1w1LR~8lE>w`>!c<@<`C(}5u
z?)p8(mx>Sg#;#nFUOqHi+;6F&M;9dOY@Bc4Cn%uyl-bpw1va~qM@Q(z<2{8o8a(@N
zZ0-UY*$24IBGXOIcTx8_E_Ua}Ofl_TSxiM<nq!CA4GX7;*0<7v=07$Y(qGKxq_TNR
zYvPBRe2w&C`#D!u9Ebm%ig{cD8qcVJLXHi@dHZD6=m~zBK$JP0xpaN?8=RtfBTTFq
z;`5XHmZ4@*lxdm0o<nT0m~&g0F0^xGdG2x&O-nj@0H*NhCB;up%gxZ?!*1!aCr4oz
z35EoJVJ_+Q<yx=D(Io^KK=MWI=^@C=xO`aUFbVv;x^!V)bZR?oi!s875rIgP^r89M
zoqMRPQESRtau;;_K30xE?J4x1MV{&!knpoBsw6|t9(sJZrQ!V(&zgH_Sl5x^u22z(
zJ+la##W#YWj*YBTdwNw*uK(%`9?}8&$;^Y&Xc@CS(q`H)Hl;#)2s4M`D{hx`==F9f
zonLZlZmX_)>hH2kBR|}?v2*Ra1x;|ja9Ryym7bc^0M8x^Dj%JF=efIL$8C3hNb^_c
z%RBBLpxhjr|DMFjT`o1Xzzb817HnP(GX;~V+WV4`HmdryYvfPyGw!ns;hvHmuNFCz
zB+>oHI2;6yw8}^w4)0W0U&GA3A^+vS=S@nfhpr?<Rmt2GUv2WTAd2nt7-X%DzmH8Y
zw!fVWY;_I;>-bYbqU3-u>cQ4NfGQB4bPW__K8oCW4dlz5t>Tg}X#NsG9uZ7uMJ>Ue
z^^9}MvMXf-E9#6t4D+Ddlb=F;m6rTxtH+C+OW8aPV6GcLEa&+NDJTw!KP{a=9=G{Z
zcEGqN7ehP{cxrr#U4A9%)Hms%;k_PMEp!#E`!#|Yc`y!{biK~dkEV)A9Qe+0{v}!L
zF;23@i>}OGGB{^CAh9Nz<>w~n0)M43jZAJX;*T|R2&)U5w%WRUMj#?CWGyoHllRj8
zqJ|Bp!bj8Qn)5TRQ782`3$Bzt^=|bHK6X-2c%)2%l}aa1avJ&WZ7kK!UHv4(;jr#A
z^eN|KCprB<jTxyh7~m!K_lf--NU0ztvCg4^J$cg$u&BC`d+<QVk7@Bjh-fC@5ENlX
zVW32+SP?knS~)LBf1#j{5VxphB}B++X>l`H;6xZmz|sP)4`3yhITQ<+S~UeXNOo<H
zk_$f2l2-OSWrn0&ER`iCnPtWZsJ@0ScFOJ=@~*X2z%pSJy;f&!EeQRj*P)S3?&Ydf
zHbc^WEG=k4fU{$D%X`JMSd2z`yRen(oZJ(3lOjVhLSo}}3z-%FR^#ZKIShTF$iY3I
zgOf|0C51AagI?-L%&{20+w6qI{W~@-oEbpqtwzU+>h9X`t&7zs0GEDzaqP0-)vfgl
zwb`XR7_vbeJe74Pi#j=}|LTg0QSoG>k&zE^DOF!bfn%7b&iYLKQ$cu9DW!rXFS1ET
zEL?<*>}QJwcn&6^pKP{MaCT0St+TuK@PGo#V#@YGUCj7$opR~g>9?{85vuRC&`cRs
zmV24s13^zuBQI~=-Am~W9OzyO-56yG$rHYAqv1Thmli^*A8ptYL?(1Kt^W9R>#^_N
z=aReDa>5~$9Nj%3X?!>dp|YdYcFopY3z27~ixO2Lu<cGY)m=4J>ZdI(nswJTxGI_V
zDL`#`_nMdp7$Yq8RJFfvAKM%6e;h&QUE_f`t`;6CG;cy1nmxSx`r~WoYZqhM)>ie;
z_mudr-DDP<rJN7HkkeyecEN@en@ro6)N^u3O7*bL`g+prN^|YU@E|04lC%)3=yi#+
zgM>cy*-|mAe!)95MWK{)Wlfq>lI$B)E5Z6E3*Sw6hbEeo-!WW3d|^D5yZ@#5_?NhF
z&MFos!A+zK*NurG292_+i*4~BK^7xL56?r}j$Ll<_<D)*Ftn%<TV#q4pt6#@v`aRH
zV)$-CbS6O3Y>Gd|VXpnk(^-&)R1vJ+!OF0>e(tID=7ecX^C`Oz)-;WCbZn7ycP(|s
z!|jm!Y4x9-#WoMp8Q3$XBqEu`NTmGm%cQFExXo{;U>&4Le$;ul`4uxx&+9!NJi93a
zSesaOQfYMai7R}cE0;aa>At&W$4#!MhMC_z@s(bd(Qyp}^$ig085NNDGOb)*ncY5h
zRB_k!3U~yzh@TyYW_S?e4CK@5&4oYd-)CS^y9^b9H{)mvqP>Tf;Tx<-1n!#(Uk=mi
zgfZQ^`Ex@I<n}EL)<&HaJG=ntS$#j+5I4J3@cOt8Nc2g8oXN<9y@^d@<2x2)QNB9Z
zB44&IXYB29jVaG<Ka?6hOR9XZbYFJF@Q)O)*><Ov9|vXf)Xqm>HB3oi_^$_koiR;t
zefvzQCty_vTh2z$k!QS#XSR`-zG|I4y!ZsnCqY_6&-Ac+cx{(E`(HM{jP}7639|jY
z=ON55z0926D!1Hn(K4)t1O_$y-8!LFzk4D|$k<o<P9FBnNp>t}rkaQy-^aeZMXWaU
zHUnF<i>ybTssF|?=uM#1$OaZC(SE-PkfhkA+rDly6~N@zN{jG7xbMdlx+z2ifBWxL
z{P$-gx(pu-w?Z}*cP@%Yiojm&E4{SGmZjTd)zii+G})$mN%^TIwLSfEOOmp^)_qBJ
zhMYG0tNUItTMnTsyJ>pu5II2X#+jj%3ywQ96es}<u*!(A^<}h_t(1Vmu`dBaoFBst
zwrK=44!iPEubQh#UgG8uqsS!j!Wxv_W*J_*sy_GF@t3*nN%8{4@rjEtRMKqkM&{iS
z@=%J)bf;?kT4egy*<H)pby`g}7dTMY?-V^n^>J5=>joM7HASF?Peq(I$oTn|dXoow
zuO7nT4Uc_Sg4(_BY>cM4>xdxGSG1}Q-P|uvr|^6_eeUvDj#EU(x$9)s)eE#eo*_Hn
zYnRs6CXG*7ydd}Q6I4hSVw#knU0x{K)fSh0_wTWu{Vw2x-Z4>+BXHaozhjU&`gR|N
z4)?nUD?mK=(1xC{jffM5l|vMB)dPbP+@M$5EpJxB>ad%VyOZ6|+}PFfAi<Qwknk#t
zt5-jC<VL@Cy8CAtq+}8~`bGRwrUBJYHy;P&;cV(EL5!7w;j6yKsK0Wisja)<#7<>Y
z4b_Ya(0%*FYj5kIz>=zSt~na6mN(9wFw@@t>;2Y;TjAnjo@3Y`;|?b$|Az{&a~tFn
z`m^?3FktbzD4V%O4n)%iHdJgrDfrDz=49~X0i67e296w|(dP~ONsqAm!lg***$*3W
z@+H6SXoR4?D;EY$UCo$ukY`9nLXS(HX(%F2uU4oG3p;MHkuMQQyeiOcUFNo|KZZI9
z4-2BX@8bh}nM8OO(-Mk4YvMD6jUedDLWXOD%map5X=53i*5cP@-BdUwCj~hd4$T@y
zaEyaz4Flp&2H8Tp7VeP$yx1@UaS^2Ku&WFra@hoOVkx+?Si6fx3qcZFtdj-5r1G40
zTkT#$Js1dkIWq9$>V2x;>%6t*-V*DK<a1r;8@iKflgdxcF<DNphrB<B*N&?`%x`}?
znsDsA0h{O41Z#ik{nl!^XG(WAAO89&W8uwr@gRpLm{UEcP<4n$TfJp?eUlGii|oPy
zSbyf-m_y7%yw1TB>)2F3Sx}d7lw_RtnCG5fHveEFbXCPzCw05+L4(|lE~dE`*#~ZG
zM+BFdXFX(~K3q7PquG9C=W4^lRS{ES#Lo_wG`L}4D=+lq$AIA-zOiY6qIQD<^}^8L
zjFk$Do}Z#u`fzzao~>;<xRi3tXsgHmmPtOsv4URVGxFBj$A&Q%WoCl*ZINoEFdi*1
zOd&VJyc&L3yq38_bcp{J6UgZ|!QdByh$dq*oW8;ImNf|k9(MIlndoRsDLqI{L9G!H
z{v8b509qjlc|@|4_WWA8=>ubguYhZfw>Dxkp>X!v)%hjIZ@HZD;a`a1BGJO!Q$xre
zD&!V%b$ZCjR*}Om)q4q(@pM{w%J5Cb_~z#`=gu`z2jxR9Ms0~V>4N62DK%cDxsvT{
z1Ga9ybuh8EWQA(cQF8(nB6(j#Mrc3B>C3cioY={$qSq{22_cj1&ts10>8-ZdKmO1W
zz^LqMjeSt012aCBgikRRIK8&PD{%MIFrno-y-lry-ti6%d>Nvxh76PV_8|^^-w}U~
zZbA7F?Q6RaJmXYatAgc-)Fj#GTdvLIzV=sVHmdKAZsVzXXRuYT{J{<#`r-XHqMDk}
zHE#))^5Bu6(~oR!vHM;QhKBH?hbK1j(eS^jtc5&rw`X)?DGUYH@HNz4^Rh;5)=NIh
zTU&WX3d4ByC}-iC8t!A?mDPUV{&rMuyL7)v|KBePJs_nUcu=Ow#k`P{%Dv)g$(m%9
zty*XeS7jdixry@_-i>=bs~?}mSQX#S@@MVTHj*eFh9->jQrph8X^W>dd5fLuKoxmn
zi|w`?;*5L0#ZUNCY4+s0$4!;;mLClCoeKE(hb9ishMw9|7{rrs2OpTDAtz!^UhEgG
zcr_?85<1XVs-hd_=wV|@@!4VUOQyM~jYm=JhP2*O8L=Hv2YLBQ7rgskb++AXW4Q>8
zUY5VRy~6+X)(VV*@S~(ao!6^vF;5k<lOHFl3%|TcADDRa(Cmh`alct-20NIk)}G0m
z5c`TgemXOvUifUfGrTj1w<%uUo1;7vZXU?<@B@Fl_dfnZ70~S*_?B(AGkw^#dI@i!
zbUZdIU+~3w{uI`XZY_~-<j5T@;l9{}hJMqI8wvs%3JW1(mnO?-ob#l}wKaY6-?t}0
zpvFKaS&9p_m9<!-)j5yDHMEzhi!RNtzR5Fm<iv*rJY-Vm=hr;tcpywm@ko6|Usc%$
z<{cIVs3GXt<yrOao<f#gk+KHmhPe5Y?&qRLC;P}coVS$Qk;NTFyn6|AI(*dwo3F-5
zr@en$CVP41iEM<t^hNB!+ips=7ubasBLPFZ+ayWHEE8X!yH^pFeKl`yk?H-~mHlLb
z=9P0E{Rt6E?7ka5rYe!=cf5<@`E>032TRlUhi5!Fz1|nHCdI?|@tg~z*k0b<^6i5e
z!MEuZK@)8da=s<&eb&*V@&)Y9SJpyW0X!=`Q6k-$?fp|Kd(AWWbJ;v48^!xhd%vPt
zLY%$}P#pZjkL_{e+x=C-UFKm4zZTEas(py=ftBo;PVJrkuUuY-3)-Km&TuB3n>8w(
zyy~;?VB1)knvOafcP(^7a_7$ksv^6~ark2Ew%lDE0+R<C_bX0HZ+tcBwRHdQC#=zs
zQjY^Nck42*j5wmx#28FaK|B)Tx^Qu4UPaBAT4@OdaVRf{M<`HSoiJA7N#mX%fhxrm
z1p+)>0h;=LkO4}Q@peJvFNcwDfx(RgG&Aw{Sv!2K905jpBf8gW+J!OPLjY9UGbZ<q
zoCddSvG{%34_mh*ti0x)0`Bxw7SNF^llQ`Ap&4u2OF8GOH{RXXR0?J2U6Yi(c9t-+
zZ`!6v(<*X0@N(PjI#w#0u1X!g54X4du;@={6*H1s_p=E{PF=r=Iwc|kar{h}x$40q
zRv{*yeBH{#2A4XpIous<l<GL)?SI?J^p^(|b4&Nc(Tn9<AIqH;`*ENN>Y*gT-)nU8
zB23`b2FsY)-WH*o={n`FkT!=;2~YkgO{UrQ&vN=Uq0)9r+sbmbCGoYty`Yn1F67gM
z==r&uX0iEe<U@H^^$ZPHH#dJaPoLFT-(|yq-T{G|pINV7@k^B?eAyUom~tgU4z>7!
z)p--?{rBw%IT`J7+xz{j^=iUwVrWyAQtbBAS~aQtxyJnTGu5I))%zR13>Yyq>&&0a
zR_qvBFYaC|bX}Oj7drdT>MxLc!{44ecVr+!XoJfA9H)gy)ZTZGm+K~$EW<`%0XMyL
z4HyhljhzE0d4$7K9@k&7eK%y*Sb1{45kt}|Ryxk|#94<%UAPJ*$6+qWa34?U4b#(C
zgwDu+>^bJxpu3-^XlAKOrm0fGN~!9;i@WJo<_As5^TtV-rxL@iW^kSq%A$Mh*tNY*
zVV93BxIBBc1@&aQ{n0s$TC|1Xpw^qQ@Y${IXd@qwp>P>1t*0*;5!*M}=}&Et>V2K<
zq+2SL7r5h`v5`+OPYEB5!kO->#=UKMQ`jce#60gOGbnze(R-6O>qe1$0H5rStFKKW
z^CDwj#+Y6tj?g0V6cBeXr*)+3(<PR$P^-qS<QFInv3mynYa>iXLhHlFR>8+agcW!$
zPOe<8&ygQ#m_iA93i23VzpAx<qoQweN@Y_l=VFOy#rcr9vdsSZkCu9VyT{DyR}0Sf
zpHBU;Z|Y0uy~=Bc$sv=uJDQKL>eKzA@i)j%EjfFle+_1p$T)VjJzuSB{;b@{c*~i^
zI!loJIm|o~Gwb0@tBCp88#WBAGn*7j{bBVi{G}boJJaN22u}po0n`!XiHiv&fzB4a
zY`EOhaTHe1o)k08c*HvWj{IEzair>n4h*))9&bbaX&Y-;;nRwfa`Zk{N5?v=c&*@>
z-x79Gazg#JBvPN_2e3?gt7huVg@X-t!_N+PknZ-`+F{T5Qje17(KsXbo|9fVZza{_
zXxJAMUhL9Pz66`cqG}_XIw9T`c~~W1Dv>;2nsDgy0~K%o7$NixP)Eoly(?u+5f?Uo
zxNvRWZ=-m58P<kP3iqCIm<|2bDD>0QtbAaS0qT;Nchq^S6R#xG*7x2JK9_Wn0`?md
zP|A45zH*5bWlrqQ)i4A!?;<%2ufmQ`1gy;L>AN>mzIA}RxA>CznFR0QE#c`x6L!a6
z<zbmBcoXWp2&ekNYDq(XrH6h<1lHM<9aQ@3*{`|{wpzKRy;k2%bg(wA)U?u{nQNuq
zDosioq{IxK+5wtLG1MQiYd^$T8N0rv9%M6h04-j0Dzkw}K6cHJtWh97Wd!CUkW7bJ
zB2gr5rng^2|79B@3hR6l)OCwOWN)Z?#_q<CQwP2_Vwr-aS4)|$$1gpyth!EpAb(Q<
zg)LIyez`Txx@x#D?T}jvzd(52@0TX0cuGCmmN`zx-*W0~4>WB!z4gJZ^Y4DRil6Bb
zDM)#+`;6w~QbPQ$9Y<PyF(vFO+BR8dgOOHcU3OHw_WN+LxFeD`RzCUNtN8MG%SnEz
z=Y5uGkj%8fbIe`e-#`!JcZOvaibH4}3n!u7Q|(5dk7hyLt?b5b{y6P{*k8Ok^5KrB
zdU%y9qxM-D=Ra6DDW=Wp8||V`M??tDo$!CI$>;IBH-z_5YVOrG*I(i>lxE~=P>r@>
z#LcBhQ|c7HsqaUQU#)e#)#cb2ua2+xK7H5khPI1H4(~#Ytm+6%67Dtfxw;J)&~x}5
zwQtVVm`SC++lV|TltH689I;evNKIdAE8p1r!{@NJ0ehpYRYnTMFL+b-MH@u3PQrl1
zk(ZlKEpDd0*d9rfXjbGcF>0}U;H$cBnnh-7ejDQ$@tKvRWynM~Usj5|_iLl+7*hD~
z*GFBX;Ixg=q)gr0^F6!lasA{K_NVn%YZJ*yu@ljOHnFvfkB~A8txNtTQ%HodVB+4D
zhZiz(Rw_2fkG{R>mM0yQpgGlvFLRGNnl@z%&6j)OvM=b@jcY9vZ418Q^0NvND?9#t
zjeW2<wbbJ|Ny%zy=ezlWQmu1@YU*ky?sW*us$sy{qcWFszJ7C)p7h~xYk^0h(`vHG
z4VHbed@AbMb(d#b_^wwNLoaXsaz9M-HJ|+*bitO5lFIbQQ*X=5G9@k>j&d$-cfWpC
z@ND~7SpTI*u%;sQxaAyplWOI3Z+Udh98N9f6Lg=}uiNSRpK5d3$1<887P9N_ueHt{
zKIO=FcnG}{UtNu#tz+5Y_>SN6_H3!=zQwoJN@c=_b_%;_<d@#>IvrY~71b=C1goni
zlX^J3N0&Y?U(lBpbZK~3CZlM*ekjJ>otQp#`j**=qNi2kZGMTmaGbo+SA*R0iyx%V
zU8xkPaXp^=ksVJTQ}KE>9(nL>8s+P@n`39*LT*rqs!;z=x6J8N+an4Oehte%=ONHH
zJpFZfrf|RK+X=C<WTgz8<M`(^n3DEgfe5XoTU{Z_ens9(K{-PwH4awqdboA_M7_t{
z+n;kVrs2|?#XwHtV*K~$jqMG7r?j=3j62MX<2QC2;veUoNxlq|mqE0ijucZY9Xo(%
z;B&Si-4g2%4oU03V!5R&+57diYB@y@f&Hw==I+Ot5kUvjHtsli`g2;4_1_5UewDYh
zs_&M>HTjR2{sLjY&?PueK3kYGnD|OnM(4q1aoCke+p-^oU-$D#M4<zpYg$FFTZlrc
zuCwc`PU=y<ZR>3KDi1lA)*BYVm-PPjcB-47@b{ib!Cl{IUQs9B^o@5C)G%c)?g>_o
zhMc~3)WG1zGn#`hL4)eaSjjRQ+#(PmGHK!<yh}r=PT1zMkI$&!hPL1n6Dlv;4^1dv
zv3}=7eDmC-%SVk~sbgk`aK#(e$4JVG^6Beza-5U6RW3&{X|T);w&b)@HyBkpzdClB
zFO@U2*I~bCB5WUdEU#JSy3^Uo)4d0YXR?K~XHBWcE_S%<+)7_?%*uNHRL4nxKfKgc
zGI71dH_`vbf!RIrdF<E+7Mf?)Mn34t4$_|S6`;~il3Y`EEtwu3jrnSRcdA)jN@d&O
zZQGo&9H!x&+XcH<&+L{s{|rZ|qNQJFh@PqS+$)#k<X5uzOMZ6>Ps8-3(CyQGPmd8_
zS3RHKSt=wf^KCVxPFp`A9pZ%^zj(v#@rBAh8@De9ubLTuH+$cc9Isk`$MNC4tGi!V
zo_w+9lIIa5Wbu7#$9Cfrj(d)ZU6Sz@B6Q}kqV8m6Sqac?LB2F5eP*7~S+|<K()3aG
z&q07kLpr+h+g3~Dy?&~A=L@YKxguqQb*T*{k4I&FzJ1Vzm5R|%W!`ukpSY(dZcUK0
z*RfO}?_>q)?%<H8Ic%)UIOK&?7b(X?D5vI7rcK;6s2{IDFYZ~9m$JjuS4JFPoft|8
z`fTS0b0&2f>ydcr;KpY8^E!eqP#sGrL~u{WT$8CGSu4|*<1FLYoRxcCGO^Wv!{VVA
z`*y2JZ9PkH{LmNt11pye%A8@RI@h6?rH(J9QcUULb_N~38ya!2{Ptsv+Km3!Z)>_w
z#f91_TVEG^y25(2&=%~=Xe~cDL|N!Ge5N%oX@C1Wng`}qE^%<km0HsKf#PkauaB@e
z{dKYYGk!tv&6xZ~J;^I!3g@oOqBfpF%1?#nHGbYHDm(jN_GZ}=JC6mL=WeTg8u~Lv
zQu=%B+)`$~=gXw%*RQ_bo^eUqn*({1xezSBG4avC*L`6#%g3TNT=@3$=S=?dM?Xz&
z$}0O>?N3u{*kW1sn4ff?^*%ag-^Tmy5mHtsTGDwZ$n7%G&KHoR9dF#r9)EhV@xsDk
z`a*B=rPnH(QqK~l({3av`KQKZ&S3&wt&&Do@=_-&|GeDre8g8;b>ICpa{Q<{U2=I;
zXwCR(JN4V0q=55o(M+_athlma?9Uyy%Oh52^&GU830{}kff0{dp3}Zw&Uv0fzx7da
z=z!zrgH2oOPAN|FL`WQBGEC4}8{>P0Hx(ZU>GV+>ft-6b^uQBF;;E19%-A+*BWig3
z@KYO6lIYYir~IErsCLR7g}4--{4R*Yz^#=lD}{`(?c!7K4y`*Iqhl89A4YuXlGc$+
znH_qyMS9P7iOYR24&U9nWjczI>Fc8}Z;+t7vZT7rEdSh^JPA$dfF=wi{2KF2L^z$)
z)zy#wabwS}m}%dvkCSl4fyYzry>^wK?nC<fY?S271JbV#Tnb7H%0B^@j!t)1st?~3
z<<zFU<a+vNB~R}M^V26H6(n)}O-1Gpf4b!RZFg>nr8YiSZ`stnS@g^W&ZR4ky9FOR
z?6`2EkHmBB`md#{6DPi9ow7f(Z=38{zd?D~;b`UpUSQO6g>bw{Y{7W`7&7#0VN^wQ
z+~Ey->crQ6Z0yg}wJ(3Q^!GJWS2{ZGwZ&0X*=@zn7fIK=2NQN|P>Nqj{?Nz!O1m5`
zk`pPIxL}T^(d36aZ!~Vna`)7iPCV&2_;cF@@mmwu{cfGYO7Ai_jQ?(H@Y0|9-Tts(
zN2<ojO>W`#1+sINjwp?tb2LisK>|a-t<U?JLgApKDMH5GCM!xw>GIRb)U#<#lF%``
zXE_>jN<={mj2Prl9Tr;p3wfeW?PA`V-onZ4?0cd{SEf?*<Od6W^>z<NXu!~hJMv+@
z9QHQDI~njM@sT^zM`dm#ckZ~I8A}RFR!Tv<o%kZU#c&ZJEwzcMpVJXTXifV3nEnIL
z+@Y@}3c0-^neyUrOl-jh5p(@Gfx55=M0>cU=&Ze;bB3Yrq6@#o(0pR_zP{XMqwH&;
z&PRz0=rd{F9>+_U-`OfO`3CGMeq<2#*vt{n=at@4R}vEEzT+O|c}C7^&Hj*}!(j&p
z)V0>kcV%1NjxD40w{&lIIf#8eAEHX!wym@|WzpN?i+ju5ow)w*^7eUw3&o*o?i)_j
zp$$VuCRTq8Uitkx>lGimDvdUZUm{_G5;k>a;5Xd6{Wvtc|5NWXo>v{7U8$#qrMImw
zn`B$5VugiI9LnGLO98)sT<n`|4MJ`2$u@1Zf*PJiiAw}>=ew&xZGBq&S{qAvp>sq<
z_bT^qd=9xScuv7RwE6q})*6ww?GoNl4uq+s??1Kw^6r+Qc3n|xU5QfXvN)WpPV3H{
zqBxtlcb@`~7cj1`;M!I;7Pe!x1k)ol_fDSeGocRW9qDsFR^I6Bzwx~6Thta)T3|X~
za@3;!I}a<{M-yL&Z#&QR8?dpaTKj|sjzvU7>@XIwaoOn>5kTACvj4f6L{>n7v|kY8
z&M3<Bb$W}$BmTM(GonSGsL-gsZg?{7(GYVWWjl39;db!p(x)qL`(@aDAuVH}i&?Pm
z0uhe2n|(C5|GHK1Nn^_%w`to)+gb#LIr|cngXZojPTyu4T1lyf8obgjnh@V&qlF6^
zVQm)KT$_GOcR1qw$a2k9)RoDr+lyy)N01I@HyONXdwJXg?rBcNI-_>%E1hR^4k8Ob
zkkgno4!U`uWWdKz7gBzZD-V|DE0EPDVj!U8vSx5tLhhoIV@IZ1u(XZ`c32zxU}f@T
z@(C{~8z+IrCdl*(D05s${=;<AO8w=lC*HQR%|-u|f4-dgtks=2Cd?d5Y92j~F2ia#
zl1S*UqU*~L4f&643OamZ1K4sEV^uQq7SUV5@~m2gArZ|(=aw`_$t=pc!Ig|Ey{2+2
z_2xz_Q35^X%}PI^5%$z=qqrgR{0#_}$lhVWVeUWSK^4CLSTIaF6pVcVA?>Bk3MH1R
z%05Z^^ax)9$8gIR73#0qxq>m>iN%C-vQ_sf+*eSc-b_2kO`OAZGSk!ifkU8dQURsj
zq-bJ7g@M}j^bc|yUx0EgmhFq55j}xdoY@hvcSbmH8;#p93C|Mz&^NSs@zE>$ERk_g
znnkjYc{2ppo$p=po=P^2w`-$w*G<ARZ@Y!n5>6Ysx_W%?^T8IGvOzh?b0joC<fom^
zT)TG$C^1j6qldp)7`fDnt?u5{ZY-{V!8+TMLh%cZA#8P<_5ero-6KpuGr*B&)_#W2
zf{r=Ilz)nhvcs11v%~Q#6;U$w&DI#BK69c!9ZNK2`wue<h>87Cs!88f<_enVfBt&_
zXb!sf-+vrGdhctJvgqSjVxEP9)R~v}of33d+tr-e7oVQ*WxuqTJsM(%gHux16kv<n
zrVpQ5RN&#ir3t&}Dp3tjW`DKh#Sjsa&NbcHjh;y8db1g1^w&gYdX6(zqCkNM89_w8
zux@ih!g#qKXkA~IQ$awkDNv4lXM8l(muD<m9TvY^YTLZ+NI|CD_0M|z@Aw6Ll4_;(
zL!^DnH;dh(;NVO;1ErEmBS#^jJQtG0lj->Ta7r?-gbxFym>Z|oL3c=Q*A!J@!;O8c
zooZH-+pNZ49=!7)uu%BWoB!tj0XXJ2Kty0o=$Hp^3R^+}wj?IvmWPDGEO5N=kStBn
zf+O%0nd6}d8Uuw+$#O}B+KKRP`*Fl-Q;_nf;QQ9^FO(hKzEc5}N;4TnLgD9sf5C@7
z2k6Vb;t;@)pfFHcDS5^&fE7n@@TIB`Tb&fQgdR9zB`$j(lP@UtMep4%c>06c!$~Bg
z(6rMr&omY#2n-bW@GlW;&>{_x@(sr;tn}meALH=A8|_3+wU#lw=fDz)O0|fxaz1ru
z8T0GotJ&5E`y%d0J9X^K*MXW*80b%+i_3WlLi=dN6F(#KLNd0y<xN7*qcZ!f+l+=V
zKgwM@1s-0o{f*{64D|55Yjw$QM23=O<#!B{8akZ&`56}t!KyPz7>y90OjiS}e$FeK
zL#ng;3QO}d8Qte1?zpJ1fuqMpw(v>1$6SFYbCeBVTZ*qwZ{EQO6pncPc+kZ{&Vu-C
zn?u?6mySoiJ(=*(ZaNa9H~1ajYJOm#10%zys6mKyt)P$Ud^w!PyJPRQ`*;0T`C(22
zot|}6(_2>U)|V;=J0pqP;tYgdi$Dlr$(_a>J#h8B8?JBO$tWH(ad^7A_wXW2Tp7-D
z=?Kf6&ob63JYTQy*r-JVbRN$#=UEUD`2U(X?|3%9xbIuBh1Lp*of<V7d$zHu*4{g@
z)ruV*_NHj5ttd5$Ha4Y_*c7#@)QVEOEv0Hz9({WM?&taUyk6%z<2vW_IpcfY&gHMR
zk*t&@CtYNH9Hi)ZuYFREZ{<kWlb}Rd(#O{|SNnsdESlpV${)o%8IJC&CL^?RMXg6}
zp*Vd9pCvK^NQNHiMDC4K*JzmEBXKrI$E$FNn27R-p1O3^Nqt;jzs!|p)tu5MVfI>@
z9Q_#os@bL{%$OIQ=3}9@{~u!Ga;&)r?k<0SAQXBg&G&A8h_Y7V@-M%z<B5gImyTzB
zG@z&Gd8yicYQy-1M45O;YO7L0OBuGP0`3mY#eeZ*N7JevMX}*tPvmx_IXXI4e!LhN
z_0wL;@feh>Dyfyz(c)vfy(^4z)7JQTMAxZk*%>XUb+IVBOMi3#D<^pHMAHVl>P1EN
zkT#RU0S~;4t|i0DQ<c&NzNLMf2{-=1>oq7vDWmo7v$ltjnf-G|%j35!6s6n7KjvE0
zD;|SIXviI4>3#>QeREZG%HuTx*4<YKdsh^fjER<2cqTbK6MS>o5+W{DeM@_HfZol%
zk{q3RVOUGez6U4kwBqI`>2SIUyeIKYqGLe5tFy)zpy?upD$US5{*&s%dEFDW+2qCw
ze6TrV&4Fk8Y-3wf2fSRW6&crOY-L|eV>yi0nQ`&2g!FAGub4}ijHgg)poP>S8vU=X
zHw&W!%4?5x9&-D0;IA-@QoMSl<@2h<6m3eOC!JtPL%sr<54@c5Fqgjwl)W)n;pM~v
z3SZ4^iEDaAsej*Sw6zJZiQ(=xd$rkK#SCPR;pb>GdPpyiS8$IjgE4+2uOWTh`h&hQ
zoF1e+E3AgAKydRAVGjpMdjP6-IFl@p&z@r+gZPJ6>FfD(+Ke=6k@87b*{K$)KF$fl
zM6<?zl3y(-F=nyb?9vqzf@i&<J&k2wy}G}Jw79W{7-WOS7>(Dp#_rXp-r~4Y^7L9F
zK;OtB^$wq~?>z>cZJ&=fMSt9nJw_ly-`ylbO|<NUHo2@LvOe{)ak_w(8?~K;VV$RA
zW_po(MhrRRER+#{qAVYQx9$x7yueKYNVD0aQz5jSrNeG<!ze*8P8j!A1G%T-PE-oZ
z9}kX>E&v{yf_<KP{D*rv3PG^YSL+U!i#=?id|amuj>Ox7V*$v$-;2Nkfcx+*@@DO%
zWOtU6b;(!obT1d3>L`m_u8CYY3k>a12C0fEtsy`iI=x`uuT>l7m>kd@B2Ws_;1V%W
zmPiq}VNM#WPYDblCuNN3Q)RB<S5fi)2s@p9@jMoswQFPBqqCiB!X?{eB57LVX-28h
zz@jPR3LJAIy1$e7zT~F$4Q+Ro$|!hoUIy!w(zh?8@ieh+T-0ffw$dPf`8}TqsXn?D
zElUA0_h{iyL26om3~znxJ~yrJl!4$PdA>hVRjQG9H)=UMJ%pSycU*u0ANOnbV!q{@
zPRnPLqo)Bn9F{Ga{r^Ax=23%zx03)P-k>I*Ufz7Dq<SxD57D!FoyH}xN0k1L<*JW4
znDo7AKq<;zf@=kRowd}H@@W&0jCw^hj<vqKQ<H@eYA7Z)?Eye`#+l}{n|Zd<fIUqS
z_Qq~8U|md~IioOaIId59QUwM!d`=S_*(9Gwxu)tcK#m?Wj&h}S0jKia8Fz|@YZ1kQ
z*^~jXF+3njQnjW6j&;(QH+I_}i$7l9l~pjCt}>IL3s?#&9O(BgX8E8&TI*)Mw(O-p
ztUy#M@yq7F02BPR_dc#p-?F=E;c&A>Bq7h#pvLrJqh26l{=_(fMp#VbV;mo)u<kfa
zbURx8Mb}l^VG(ZmSB1BV`@r^KpLOm3uUllvrIA*?gAxe7#uPc)S-nO?4-2n>ip}^p
z0mR@PkqW)2xK%`n6R2O-vMIwzJZZl7CQAc94~CJBm|ub}{<9~D@QFk_o_{1KyG7>Z
z7A*)4<6S(drJZAVsG+~o@GK}p1*h{7A6=U7FK!c1vQ@%IK=hYQ<abwe7dp?Xa@}jW
zNUQZ6iN*_ua^Ojeo)l_zgn{E^XmQAg41<H(=k$<QR7u2-C5Wu>(dj%t-6TBmr@wnV
zt19?i_m;e{)UAU+)#zI{Tcv~(UT+r!J^zn+bner7P_MeFr%PMWD=B1~B#AkRe}+=i
z8@_d?#?3|hNI$+w=h6_@p}O2JuO<-PO;vyFN|SfuS+xXzlaP#e_vb7vJ2p?2b{UQK
zo0(^8Ct5sL>!Dw?Y7rh(7hmY8mea}#3y6lZUz2p3UjI!RhwCnQ9ATN~RYVm_EO()2
z`P_bLWj+68sE^b!<!Ki=y*2GGT~me!GyT|GHi8-pkn3tqEp7>nGQIU;&v-nHzkKMw
zaU%IPy(;?UM$3!gle_d>G4vWj+27)D`#fi{OJd#RUJ3aP(mB#WK8!gXrKeiG+Hq?>
zuC!lLO5VSb`ngY1(EFz0>(|0Zg_iHc80Ckh<2-gj3LA+t^ZVd}Z~+Zdzg}OT<M@;8
zFDKp=D+4ApSA%Zfsj~pjj#-a2W)g8zhp!p*sl`Xc9-m_rOwH)2)8SWD0_Ln9>`8Gw
z8$Xl<Y91tgY-S0|{__m-;k#PwgK(&K;F&aCuue=>#evdeO;y1Rx!NW*#yKXn$JtvR
zuz^yqkRfa0*_}s!J|rl%+}r$=5au_{#<t~dmK{=M0;$rPu#JEwiv5-e{B>*XD0}G?
zF{gD!Atu(AwdQv(kJOSJy&t@Br%W`b(srMg=+km9n|O4%eDn>3mH%hN&Hso`aXiG0
zaOQ}y1&EV3f>6Pdrz<hR%%$m{Jujr-Z-~#rkEZrYO{l(h-6!GpC6R$r^f5%{%|*ZK
z=?og=*p^F%i2U+zYlBR!rbi9?TQm58a)qttx<L|mQ=*sTSW|!(f#+f}Hmtc0Kt7p}
zuWDG@#8Eql%XqOU6^rQ^Cz)#r)9o`WMe4pzw)!QS6|V<+SBeiz@910n8JYz`r7!N>
zIIkR*essqAk+pQ;`BE$1ChyTNp5o%h<){6uQ8nx)&Qx8`?lvqO7IQJGei+DU|8l>K
z5GZSxIUnh1w5xUI&}|BL4hy}RE8u&0ai=ixAR60n;Ttiz0d>1y+27TE0RIRv3}_9h
zhgs*<*f;!!y4EfVHJ%JN_jMdiHeZ94WqUDXKP!+v9}8$4oe%3v4D-4>FGPd+Eb8{z
zqi;(od<IOBweveey(0@huu1*z?!W{LD7J0)GO!iXa$dl0+?sqSs<yyKp;rE5p5@|!
zb$!esj;c@*K5Cbd7P?jmbRlehA!k)gf7jc+Y-vzT;%-YtmC!3DAVd#HVB-cfV*++4
zVXPl?$jSLj9mjUff{`u8IJ;0EYLtmDfv`<K!Ub}`jtD;lXCbghC{%IjFLvqp?!D=%
zKiHC8tJv=|+7bt*4T1N_?sx0t{wZUv3jIc~a$jK={YEK$)~Sp5Fmr9q<C~zp;(=k9
zWZZd~UgmB6Meg$ZPS2;pgH}Z5e{J}JiWJ{<CPe&$dBqmn_69?5RUja_%V(S$X%YGT
zWjIZ#Xs5Bl(_5+CJ)r@TZ+^HN%qrOVI3uPFLJ2ERrbb+8{izYC2SweCwrqi-F?lq0
z&yM8pcc$U|*D<%9dHs4Rbepsn8tto01n3!RC7m6xJBSX*s*D1pSz9pep&J`lJAyy?
zaq1a*jXA=PZVvB;Zy$<Vl{<|Ia@{`n#e8CC;MwPyQ?{)ywC|4ybghqPW-h1`F_fb7
zaT+_2v2i~h+Ap39Z|+aNn@8mA4|0udal5u4&_9-YaS$jROO9ErW6H$}=ATJ4_+R6b
z_m6+_@Y`6Cvdh0?GBark9$W7oQ1C>;8OPL{JmJz#kHAAX-a{dE1s{6gPTE)&b%=Ng
z>ZXThC;|3gWcW`8)<92cGO5W9Oj-8J7f2iFCMwy;Qw?~+)cno?qh*xy1Y=sZTm?23
z`rD%rtF<5fD(vI>YJF-7H}t)Qqymu^LYxs}j^$DKJvRI7w^m{cy0O)GRdILA`<VCJ
zN4E<O?@T=QTR^TygcVG04z=0b8&qo9m-SJYIu;1byTT=X;jhG3%uL@!Z+O<}C)ppa
z?_c%)0)uqh1#A_+P#$gu_Gg2wIi}!W1?8=ixGY@~7e{==LW>k|U%xNBpKkZRCO3EG
zW6@aZkBEQBvsfPD?4r_J^m-4Hkw%uE4~JPCX(A&Qv?*L?2b~XgLYP%eIB{RNz;x^r
z%GCOFphIpy;_v&j3TIZW1-Y}E#b4|r{h9E*cCz?>c7qj*6e<?xT!iDfn!61ZbM)T!
z=XVt2o*1jxx`ghYM%AnMg<;a6$FD6|Qs7E$vCtUnI5nS6iC;mrvN-FRFJU%}o{ezL
z9+GBXZUjVL_N-Y;{jSU5c^Jsb{b)?jT~g@^=6SvBEn`dR$o0PU@Cgypn=sEqao2cl
z9mX<4B^2iCNcp5`&Nn+>odV7l!E~jr-*<wx7K^+%fB)mRkr&%aRcMhLC8d5iYDyRj
z2kel!d><jop}6E_-1TOH0DLP<<8_j@Q82G#S`GMuhboi3@R}J}t{R=8s__NemWv3j
zs)r(~<90Os!rPfb>@GPKnwt57_h*JpMuGC4HKgs{L3C{`1eJbJ24f3CWVUGH(qO7&
z$xO+_Q9o(fV~m26`+34sXJ@H<!{il)eA2$T(ucj(JX#d%7i|N8ie)r<@z-GQvT|Vi
z)Dtf3y&uXUrXRN!|H0v6cxFc<3Qx)-zqGE)2dtds5_&EeZ`CUbTM{E*uc;r#7$pJ%
z?<U&iLD@+fct&dtaYpHSk*bPK-U=_zjDcJy&6y~FP<UQ$^b7CEeR&2VapXLb5;I4(
zg)wm_5X$rJB|7i`1mT?Gpm9zS$uMn#rh%&ax)F~OGq_WL?%~!Tu((<`tw?}eFl0je
zMIVrj%TfC|wABB?hj<Wp_m&iWOb_FHUC>Vy6fGF;Uc5W~=sayixiW`-C$bU-EqxKL
zhW$SE(6Ba)IO`Cmoh*ZaqLCM#*xe@%UDq~@^7VZI>~rH#QDcX1#ozqx(&;qQtxfga
zul_(lONH)TU)~sBx=7Bu*`4sGMpBLhnw|0Yy{6uybL!K?6^=)5NS<P#*%sl>#1mY=
zqE$)$qaL^;69eY*d*NOY8zF~!@56u&UulvuaYld7lsqGL^&W|vbX7|)vo^UcVW8&R
z;Xd$F^r<1ebYk8;SJJsq6x2NU!prgJ(}#AkwW1oy-$(ro2~hKRtWWV?qt(rVdn*O(
z)aIx=i2r*=1wX!jFH9r-{?!aRR|YKZZ<vAe@;T<%FRS{?(9G;Y4jBq+KzR|cyqnk&
zaHd;@{yH$3^yIP(4p~*=X%o6mv{I6mB*@bzdHioE!_VatqlZ0yyvt3z;AD{^Rj3~F
z!WH`yhnAZ$O8LF0)fBd00yQUb_=-JN{3EdmZC?U?5&>i(F54SqQG5^?{tZRp!v^b<
zs3NNV4OKy5H+oNVsOxA+z~v%jusvw$1^i*e_cX5u!U{cEGF+fX`{U5kV60cfy2>xE
zHL4%WRBdm#by3h#OKiaM&qt^2c||K}9&Q`;r>K8)II?27E~dIC_4wjn^|9+?{3?N`
zG$rpYe0M2V4vL(E0P@-yC=tI9hW-16!u+K#`Y`J^q94;ljKL}4=bMY?0FLsB4~o^B
z<)}eLdG17ub}KOo24UdfI!{cZwj=SvbswpUv2b4_f#SD{pO8tJxNdk(?`Mw|-m34;
z__`GI(_eV}Yq!z%zVOVF<_vF{ka9i#^*`QQG>=>xBqi$?pYv^76%1O3sJIt^D3l?M
zIHt8^BJJH5htM7x-Ia|oOaSmz^Ezdu6N!|T*5L*~nqbl!7Is9U62?j`TE?yo@6$OQ
z&mrUM@8Y<BJhg-5Xw4ky%9Zq}&4qZ(kBu(!Rux<XZQU*Edh+8R?v0d3uF3eilk}ZL
zw6|hRX7M`Lsuz%&;wt?{w@F4Nu}C?p<kPBcRSk9NZij3j7C*2{Sx3@UIPULJ&Wt^#
z6#yJyAiNDo;h`?Eb|E6M@j1<kd+LkpwAvmuZp?x%A2zs!rGFwz<z*n(^Hh=nVtn-?
znT#t}u>S%n|3cj;y&z&1W9o7Y`Hm7#@f6|;T~8vk8fbQ&MYkCgmEU289Qzt4FfqAF
zQy9PWV<Hm}!>TRD@*H60k7>sSJF@^5!~1b_H<|zFyo`jsvAxe{cwCnH8VHd?^RGAx
zWxrlJbl_9a;2<jRhx?vUsoaan3&DVSnTbTX2Aa%nfv78=2z2>q6S9c^c|Mj&QY_ah
zf?JTa8YC#O724(5lo=irFY$}N1aU(qXkG)g@1KmL%zt70r#f_P=mg5-=<m?orgVXi
zrWPn;Isu~HK=P*4D?avwFHX_8MdCpRV#@kS7<K?0JyoNKvqS@hBEQ6FJWWPljTk$h
z1~f7yXG`|yskF-%gvq(?>8(<0AzR3-<5tx@=TpwNCi4~L-m|e9yunjUET*`-(H+$I
z%GN6$9gX}iQ!U?0kUn<^oBP_olvG)O+U7~Dw--R@iS{gr3oV907SfPcMc!2C7>;SX
zO(ea&#wTpW3OVPpvtgVf;bA-gE_^+}t)}df&7sma!(%lad=V@767b1r#S2hu=e<0~
zs>xCg;%cWLU8(z~!hmU(s*Y|Lv&%|3ID;tntHP6XAampfOU&VaFMj_o4{gN4Dho0^
z)|&;n3!#<;k3B-6;#ZJy8}Uwdn9CJBtP{o=?u~ZGnZgdK$bKYZdKh3v?Ys&`TrD~m
z{wwh)_j6Hiphew4BLA-`KjT8;xlddI?-63fn4Rz^Ch?fg4R}qRcj|1Wr)Md6YlxxK
z$^T330O5No4IqMug^DVL`xUQ$-;aV-F-*;SsX7*-{tC|){ABe(2X&Tx14An5C|wD3
zg!^6q&t~_dO0LJo+)t{b`XVlc$Ml}S^4gB#Zt`1hP5!RBqk7a|p}hy6yGIO^9&*{m
z9aMSZF2&b7{2}%jGy7$NWX3X%G-@&6QfS%X&dbNWsOAaA9L-i9b*L8(nhnHW3T^7n
zHVmcv%dDP}e1ZvTB`<p$d)%UHDYy{%$sqJ;!A&M;De?jVKTVX*{xSE2{)&j!!KFxB
zv4lG>pG02sXdQ2Fsi+&yrY8B@HuOb6$^&Y4?&vn54dw1DyioJYyu=g2eC)-Qu#}gH
z0zK&{sFga_i5MT=Af$BWXbG-yH!&taOO3;wi$|1-ic}X4pV~+5&9+~Ps@tWpxOKmL
zs?AvAub37vLlJpd7pyB!gZZ=6{S&9;OnPg(71X~NwA8aFp(OD!(MhkZ-t%A9Pu@ZO
zoe!U<*5q`<Qyv#i7&QWFZVbQoNJ>FA^R0p>%ddJv5ABk_hKpPdj1h$5+_F4$B?Ijp
zFUt*H!auiRxUtaNe{*Ny0I2cy(g=jYkq)3l=j_IV&azuOblfs9=u_j%G{NN6wU_9{
zs<V>S@$yS^H4R68QzX&2L1BS)O}WOvDTMf6qSzkGcVVwN)6MTtq8_d~e;jROef86i
zO@)mIbpS44f1ieSEMJEU@5UCVs@b~I@IjWn@vUFp0=i<d2Ym9EWB7cwmpHI7l7q8W
za0x-I6km`H#Uzp8rp?QjN8s8tW#sGw%n7P8s~_BckR8W5ZWwSU0}U8vT*}3J7sQyf
zqzfq4Kkd-8$LRpSNgNh0|405Rv=WP$!4Kgy0m@>%Ob#*R=+HKr0z4hSw60i0?>g!2
zKZY~plb;_%y`z4c6x$SVH>WCJ8&tl+_?JjR8xIr|5e5Rj1>Iz$a6A`v(TrZ+55tFn
zZ1*4;%^V^ULfg!ax#1{%$#aHrz{)=7A8*LRojFqJ1mz8b)v`ck@om<}V#6V_A}Zf!
zJuH9x$L1=q6^!`2Nc-?M%0t1!X98{1LWb48$*9#i-U)z<iW7jEjPk@kpdv;+fjwVA
z^}Oq<Jw&QEbWx9pG4rvJ3L^fB(@`;0R~z+-bYP`~Xu{no#pY=DW9!d$R54GR*n@H+
zi!Xva-5G7VM=bMMPT$(sHFb#f$DhnT$S<bVSg&f@S<Jgx{uOB`LI@-~fE!5bnysjL
z#7h6qn-FD^;(Xh9_^yjN%At%p(zMA_$vmp8B=iZ1_nLs>aGYmM_|ssBBl&)RlMm<l
zcY8p%_VPJ^ZuqPWRg;*5?zAT!%Xy?eyuP(VNBMm_9LO#rAOa)Do@@0KvZUyyJJ+&P
zEDxYDDSmu@RD6m%PA8dbV=>7Y%>38sWH9>!(I4dfdpO3+)ZSzCHw^k#oIUg#fBAbX
z>$=N>igX)D@$L8LrV8lDacpBZAO%1EqgWN#Vs{CvbcbAc7f1*@C2toMC7({3qHAu#
zeK{p#<M>71+;sBhyrgvUD3Ft)IO|2|+VU}NWep#vL~cbgsr{SnAzB`V1NiwIURd}7
z#?7trIP$9H<fnSF^z-nDGqeO4A236`%C=|K8tpd{&K5a-Tj8hAEoe?mB-^k^WlQ|8
z09eOGz;_y;W60vWb)S~mrf2PZ@;Mr#^PwScW`@Rg*&h5yfMWJp6~$b6@8&zi-Whr>
z++{NQHlJ#CUdI`osVOI`XTCUXoN*0SU7x$|AvPg-pNoa*02{?a__Ps+s@wvtf02VI
zT6b8bjrrJ9n(cm`qQLvJ6Db?{*y|%pkLix;DePEm0`v89cU;7!Cf=L_q*HFp%sJ9A
zZ~LgsxbhO#1z%hhswiCBoymD`w3X(t-?e7PM)R^g?k+DvvM3BoB+Bet>H2@E&YB~Q
z(Q{dxg~3kdV|8w9zrUGt)@uEkG9c|w9em#Ht8qix%NJt9N^4wW_TEFwX>{~|{(~af
zUc2i05@6KiQgqEa)+ssS0>~PtK9y04+pJD#%78Tac}%|aY?>V{Pa3{MA>s8vUoQIE
zpc&5=ZqJviJpG&_oIIaTPv*t*P{Olw&Z2&V$nq75JbsDKnkKM2ZJE^*P`O@1BX#p0
zytdXdaWwU+1-^#|KaAk}4oG_1&3i~$tlSD3VOwR!j-`v*?*xpwN$n_+)yFdEkPFKr
zEk_MgnhNCoD^Nex`~6{GLLu%e1cDHwWPB^zL=Cg0Lr9vS#CI~go}U?a)pe0!-K9DI
z4^~tilPiGF1clDLF`~z&I*`ZY5KOIgt-!w>HTfOL(xx(c8*T3he_2>hopqDX#}&OA
zSAHv3d((9|vCD_Bg83kaK{-o-2yQMAcf$3exN8PGCe(cKlS?cq2~>f8ycc9OE4O{A
zHAJKv8aX-<jdsOs;^2H_i-MwBCGo<g0Z5*f>kc8o2LS?$R@IhG9UQ>IqZF=f8j~3y
z+TRgl-dp|q@&|CMs|ayZ=C}$&O`1Ii+1t1VZi6dDZ3@L360Y7#0pBu50^!Y%#wt}?
zmg<+f#Fhm^HGS8fCCxwaMXnZ$#{{i%EciSd=A0<T{@oQhTe+n)&Ih;k>{6sLtted@
z8s#}IAyfAENlv)XmE{vU??0DDY8-)_;n1$0(5QfXg3@_%JC^*t;YUKBo^BcTJtLM&
zCA}WcRQ+qNYJ8{l7!&YW?r-Y;%m%{@sA%v7lJE`q^9kY_1<rqELf6CyTB;65FwLp*
z&G$_-QsF({C$M9nR-i*wOb7-Bdp<7^m+jP`o~H^GjsK27d;rpVP?1}FlI)m2`f$0E
z3tn1@vI<M?S6jTo{L9dKD=7n-%^vPdLWMG8;}EUZcYo+z$$)}pBfDgI8GzjYe}L;!
zw)b<fmP>;a3Wt_*jscPv1ai7rK0gL&>|M4)_BP_G%IG*6<gNk~d}%nqbXmsXZC+4f
z%nIp`V2XFH{PKN&cW7{AB*$s;h~~~LO@yKrgm9V0!mdUFg0o)qS(#AsChXUcUM?Im
z%r;3ll<}S?JsR-kINz=M%RWWE=2NBb7P{t(3%gOq{(?rF3983!p@ySUj+%^dXneuF
z<|%`OK_{!jk*W|}LWbmnqhFq%<7vNM_5t!#H4-!wH`Lla599X<hWt^55-l&ZO6bo>
zBg+;W8+guZ)OAUqrQYF41bqW<WH?9Lwyzy)Z+Hn*blZ%8<2Xryt&*T@pT-?($P)e|
z{?tWQ$du~rr_hk7Dp=5t-=*B;k9!DF=c+J}q%e`A=m{qy+@#uyq=)G5vHBTR*z@9Q
zA%jD=Fue4`Xldm=i^9635|OuVggI#^c5rwCzW=ML=6jm#5oa1sYq%x8<I~+`&K(c+
z@*yJv|7tLCgBu7Uj?r(NL)_31531N`6*VT)<{5<t);=MTZVW~%pdi|v*Tn7*i5C5|
z1JKg(xMtDGhRDV;N=}Nv;`JHPf-tLB#g7L~mFQHD*(#r~8R-{vHhjy8I@fX!8yIVL
z)(^F9&bH8szge4JSh!`i61V>H)(43NPq4FT0Tq3GWyr99+W*3HHbT_lLiI73u~^zp
zJ2j@UjccB<N}t76<bY_S^fWEhG3-xC0B`wEeK3c&5b;uEsR|<Lt!=_+zH91h>YSmP
zxo#4P`1}v_gzL}es<T~N4hkMrjh1=i>Mzwqx$&Z<aec{M(n?c^imDQO(CR-w>R#uz
z^ujUUE8;(3P4%;iR0bv%$uh=6dzx5Y+gR;8fWbj`_L#W$NJpGGTykh(RUfmg9LR{D
zTr5mVpxeGF^GQM^F1TDj^(a6#@4eOgY34Rvvf^HUC4V52<&D!j5LyltoIULM$GUt+
z*ZT*)7f!q&OTx2eJnpLaidvHCD@w=rGl@}8#}Ij9;z6d{h(iT~2k2duOmV1CkHrB`
z@;=Pr)3{Y!k(-Hn5zUI*OU>EvpxRpRB;40I@rVPs-nhc42DD~#vDEDS7i7ts|AB}X
zkQCR)znGDV#tj@#QGqDb1_uq};PR$OTh}MC1FPV%Yj-D&@GYMQ=dDLwYx9@+ve`C_
z{L_T%EYOD1oP(WrG)||Hnezqj_F^Z@3b&n?aTfa+1RI(6r?H-8!d$dv<m>x<rE(KS
zO~xaW@XI!I4_w#A55;+=I4czjeF51NEuW$lVplTVE!aTXv@=ob1oE9xBF<WgD`9W}
z0tE8{DZAHaHpL_I=c8mkEtb4h*f$$p^_D608PT?QB$hvaJ66HU;JP)9t!SbkL#GlQ
z5F$RZ_~XIU!iLfZ<r%BZuT3eip3~^oD=CdNfmS!p{$rxBr-1Me`{~kG@3KZhA+#IO
z$dA#-0BKk5L<RBG7ORg)nE?JJmg1M*{adti3%UU@RI?Jq$d}D;&I&A!X1nt#<?i|Q
z@%9fmcUXF+UGtHc&I1BBhylWPXSZ!^K1^ZTN`kjXTbl)Cdqp4xEC<hxl-ekLir!N2
z-w*mQQ7V^Nm1L}mufgNzVz8utX*nbEpiY3mK4zs3I4hNxD%Ccxm+JQ*Sp2g^$gh}w
zTirE8n-ZLrs3_?VlAYW0C$XNQPtShgWy)+po4^{lY$>Q8E4Xymb8Rg%hYB!2|KVn+
z)O>r?=%S%m&y(z6M)tdnTnd0no7Bq2n&!_<P|v2fGhf1mrbibOh(-Apx5sL46mffd
zB{Bb7x&0-but#tAvl2N8?YbFmKxP1(-+m^y$iAVj!shFO!)R~&gZ2?|={k8yxQM$G
zXmcvWw;BBMhIL1($Gjxd7`2Lz2=*k7&_M-geB-|uYvePe0<c7;8d&prjlxW1?U`D9
zJpC2!(Ar0yHPuOHQxy>ZG_cgRPEM87LBzzVSe`wGf7@3!&pypzD72nfk`TCXf!R@{
z(MC}44f~fdWCg<*<YWc=`;<B4$I>X@4p{Yzq=MgGRkc;@xN#?BF!_h~S9b}|g`wTY
zr1`0~I$rwOz<2G^?EELi2XRj8V3ZiR9p5eG`5~Y7AT;WIM@{tf$kK0YWtV0^`wy?k
W70mD$d(boNyUE2ZQQLw=?EeAu+W*f0
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..4a3d8ea66f8a260c33a5647199f10e0be83bbedc
GIT binary patch
literal 28561
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%0Dx!)dmb=ii
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
W3TAkWJ?I(s-Q?nysBOU__WuBWKL3gU
--- a/dom/camera/DOMCameraControl.cpp
+++ b/dom/camera/DOMCameraControl.cpp
@@ -419,126 +419,49 @@ nsDOMCameraControl::GetFocusAreas(nsTArr
 }
 void
 nsDOMCameraControl::SetFocusAreas(const Optional<Sequence<CameraRegion> >& aFocusAreas, ErrorResult& aRv)
 {
   aRv = Set(CAMERA_PARAM_FOCUSAREAS, aFocusAreas,
             mCurrentConfiguration->mMaxFocusAreas);
 }
 
-static nsresult
-GetSize(JSContext* aCx, JS::Value* aValue, const ICameraControl::Size& aSize)
-{
-  JS::Rooted<JSObject*> o(aCx, JS_NewObject(aCx, nullptr, JS::NullPtr(), JS::NullPtr()));
-  if (!o) {
-    return NS_ERROR_OUT_OF_MEMORY;
-  }
-
-  JS::Rooted<JS::Value> v(aCx);
-
-  v = INT_TO_JSVAL(aSize.width);
-  if (!JS_SetProperty(aCx, o, "width", v)) {
-    return NS_ERROR_FAILURE;
-  }
-  v = INT_TO_JSVAL(aSize.height);
-  if (!JS_SetProperty(aCx, o, "height", v)) {
-    return NS_ERROR_FAILURE;
-  }
-
-  *aValue = JS::ObjectValue(*o);
-  return NS_OK;
-}
-
-/* attribute any pictureSize, deprecated */
-JS::Value
-nsDOMCameraControl::GetPictureSize(JSContext* cx, ErrorResult& aRv)
-{
-  JS::Rooted<JS::Value> value(cx);
-
-  ICameraControl::Size size;
-  aRv = mCameraControl->Get(CAMERA_PARAM_PICTURE_SIZE, size);
-  if (aRv.Failed()) {
-    return value;
-  }
-
-  aRv = GetSize(cx, value.address(), size);
-  return value;
-}
-void
-nsDOMCameraControl::SetPictureSize(JSContext* aCx, JS::Handle<JS::Value> aSize, ErrorResult& aRv)
-{
-  CameraSize size;
-  if (!size.Init(aCx, aSize)) {
-    aRv = NS_ERROR_FAILURE;
-    return;
-  }
-
-  ICameraControl::Size s = { size.mWidth, size.mHeight };
-  aRv = mCameraControl->Set(CAMERA_PARAM_PICTURE_SIZE, s);
-}
-
 void
 nsDOMCameraControl::GetPictureSize(CameraSize& aSize, ErrorResult& aRv)
 {
   ICameraControl::Size size;
   aRv = mCameraControl->Get(CAMERA_PARAM_PICTURE_SIZE, size);
   if (aRv.Failed()) {
     return;
   }
 
   aSize.mWidth = size.width;
   aSize.mHeight = size.height;
 }
+
 void
 nsDOMCameraControl::SetPictureSize(const CameraSize& aSize, ErrorResult& aRv)
 {
   ICameraControl::Size s = { aSize.mWidth, aSize.mHeight };
   aRv = mCameraControl->Set(CAMERA_PARAM_PICTURE_SIZE, s);
 }
 
-/* attribute any thumbnailSize, deprecated */
-JS::Value
-nsDOMCameraControl::GetThumbnailSize(JSContext* aCx, ErrorResult& aRv)
-{
-  JS::Rooted<JS::Value> value(aCx);
-
-  ICameraControl::Size size;
-  aRv = mCameraControl->Get(CAMERA_PARAM_THUMBNAILSIZE, size);
-  if (aRv.Failed()) {
-    return value;
-  }
-
-  aRv = GetSize(aCx, value.address(), size);
-  return value;
-}
-void
-nsDOMCameraControl::SetThumbnailSize(JSContext* aCx, JS::Handle<JS::Value> aSize, ErrorResult& aRv)
-{
-  CameraSize size;
-  if (!size.Init(aCx, aSize)) {
-    aRv = NS_ERROR_FAILURE;
-    return;
-  }
-
-  ICameraControl::Size s = { size.mWidth, size.mHeight };
-  aRv = mCameraControl->Set(CAMERA_PARAM_THUMBNAILSIZE, s);
-}
-
 void
 nsDOMCameraControl::GetThumbnailSize(CameraSize& aSize, ErrorResult& aRv)
 {
   ICameraControl::Size size;
   aRv = mCameraControl->Get(CAMERA_PARAM_THUMBNAILSIZE, size);
   if (aRv.Failed()) {
     return;
   }
 
   aSize.mWidth = size.width;
   aSize.mHeight = size.height;
 }
+
 void
 nsDOMCameraControl::SetThumbnailSize(const CameraSize& aSize, ErrorResult& aRv)
 {
   ICameraControl::Size s = { aSize.mWidth, aSize.mHeight };
   aRv = mCameraControl->Set(CAMERA_PARAM_THUMBNAILSIZE, s);
 }
 
 double
--- a/dom/camera/DOMCameraControl.h
+++ b/dom/camera/DOMCameraControl.h
@@ -67,20 +67,16 @@ public:
   void GetSceneMode(nsString& aMode, ErrorResult& aRv);
   void SetSceneMode(const nsAString& aMode, ErrorResult& aRv);
   void GetFlashMode(nsString& aMode, ErrorResult& aRv);
   void SetFlashMode(const nsAString& aMode, ErrorResult& aRv);
   void GetFocusMode(nsString& aMode, ErrorResult& aRv);
   void SetFocusMode(const nsAString& aMode, ErrorResult& aRv);
   double GetZoom(ErrorResult& aRv);
   void SetZoom(double aZoom, ErrorResult& aRv);
-  JS::Value GetPictureSize(JSContext* aCx, ErrorResult& aRv);
-  void SetPictureSize(JSContext* aCx, JS::Handle<JS::Value> aSize, ErrorResult& aRv);
-  JS::Value GetThumbnailSize(JSContext* aCx, ErrorResult& aRv);
-  void SetThumbnailSize(JSContext* aCx, JS::Handle<JS::Value> aSize, ErrorResult& aRv);
   double GetFocalLength(ErrorResult& aRv);
   double GetFocusDistanceNear(ErrorResult& aRv);
   double GetFocusDistanceOptimum(ErrorResult& aRv);
   double GetFocusDistanceFar(ErrorResult& aRv);
   void SetExposureCompensation(const dom::Optional<double>& aCompensation, ErrorResult& aRv);
   double GetExposureCompensation(ErrorResult& aRv);
   int32_t SensorAngle();
   already_AddRefed<dom::CameraCapabilities> Capabilities();
--- a/dom/webidl/CameraControl.webidl
+++ b/dom/webidl/CameraControl.webidl
@@ -247,40 +247,32 @@ interface CameraControl : MediaStream
      the recording process encountered an error, or because one of the
      recording limits (see CameraStartRecordingOptions) was reached. */
   attribute CameraRecorderStateChange? onRecorderStateChange;
 
   /* the function to call when the viewfinder stops or starts,
      useful for synchronizing other UI elements. */
   attribute CameraPreviewStateChange? onPreviewStateChange;
 
-  /* the attribute is deprecated in favour of get/setPictureSize.
-
-     the size of the picture to be returned by a call to takePicture();
+  /* the size of the picture to be returned by a call to takePicture();
      an object with 'height' and 'width' properties that corresponds to
      one of the options returned by capabilities.pictureSizes. */
   [Throws]
-  attribute any              pictureSize;
-  [Throws]
   CameraSize getPictureSize();
   [Throws]
   void setPictureSize(optional CameraSize size);
 
-  /* the attribute is deprecated in favour of get/setThumbnailSize.
-
-     the size of the thumbnail to be included in the picture returned
+  /* the size of the thumbnail to be included in the picture returned
      by a call to takePicture(), assuming the chosen fileFormat supports
      one; an object with 'height' and 'width' properties that corresponds
      to one of the options returned by capabilities.pictureSizes.
 
      this setting should be considered a hint: the implementation will
      respect it when possible, and override it if necessary. */
   [Throws]
-  attribute any              thumbnailSize;
-  [Throws]
   CameraSize getThumbnailSize();
   [Throws]
   void setThumbnailSize(optional CameraSize size);
 
   /* the angle, in degrees, that the image sensor is mounted relative
      to the display; e.g. if 'sensorAngle' is 270 degrees (or -90 degrees),
      then the preview stream needs to be rotated +90 degrees to have the
      same orientation as the real world. */
--- a/dom/webidl/MozWifiManager.webidl
+++ b/dom/webidl/MozWifiManager.webidl
@@ -50,16 +50,17 @@ dictionary NetworkProperties {
   DOMString password;
   DOMString auth_alg;
   DOMString phase1;
   DOMString phase2;
   DOMString eap;
   DOMString pin;
   boolean dontConnect;
   DOMString serverCertificate;
+  DOMString subjectMatch;
 };
 
 [Constructor(optional NetworkProperties properties),
  JSImplementation="@mozilla.org/mozwifinetwork;1",
  Func="Navigator::HasWifiManagerSupport"]
 interface MozWifiNetwork {
   readonly attribute DOMString ssid;
   [Constant, Cached] readonly attribute sequence<DOMString>? security;
@@ -85,16 +86,17 @@ interface MozWifiNetwork {
            attribute DOMString? password;
            attribute DOMString? auth_alg;
            attribute DOMString? phase1;
            attribute DOMString? phase2;
            attribute DOMString? eap;
            attribute DOMString? pin;
            attribute boolean? dontConnect;
            attribute DOMString? serverCertificate;
+           attribute DOMString? subjectMatch;
 };
 
 [JSImplementation="@mozilla.org/mozwificonnection;1",
  ChromeOnly]
 interface MozWifiConnection {
   readonly attribute ConnectionStatus status;
   readonly attribute MozWifiNetwork? network;
 };
--- a/dom/wifi/WifiWorker.js
+++ b/dom/wifi/WifiWorker.js
@@ -1148,17 +1148,17 @@ var WifiManager = (function() {
   manager.disconnect = wifiCommand.disconnect;
   manager.reconnect = wifiCommand.reconnect;
   manager.reassociate = wifiCommand.reassociate;
 
   var networkConfigurationFields = [
     "ssid", "bssid", "psk", "wep_key0", "wep_key1", "wep_key2", "wep_key3",
     "wep_tx_keyidx", "priority", "key_mgmt", "scan_ssid", "disabled",
     "identity", "password", "auth_alg", "phase1", "phase2", "eap", "pin",
-    "pcsc", "ca_cert"
+    "pcsc", "ca_cert", "subject_match"
   ];
 
   manager.getNetworkConfiguration = function(config, callback) {
     var netId = config.netId;
     var done = 0;
     for (var n = 0; n < networkConfigurationFields.length; ++n) {
       let fieldName = networkConfigurationFields[n];
       wifiCommand.getNetworkVariable(netId, fieldName, function(value) {
@@ -1855,16 +1855,19 @@ function WifiWorker() {
     if (net.netId)
       pub.known = true;
     if (net.scan_ssid === 1)
       pub.hidden = true;
     if ("ca_cert" in net && net.ca_cert &&
         net.ca_cert.indexOf("keystore://WIFI_SERVERCERT_" === 0)) {
       pub.serverCertificate = net.ca_cert.substr(27);
     }
+    if(net.subject_match) {
+      pub.subjectMatch = net.subject_match;
+    }
     return pub;
   };
 
   netFromDOM = function(net, configured) {
     // Takes a network from the DOM and makes it suitable for insertion into
     // self.configuredNetworks (that is calling addNetwork will do the right
     // thing).
     // NB: Modifies net in place: safe since we don't share objects between
@@ -1939,16 +1942,19 @@ function WifiWorker() {
           net.phase2 = quote("auth=" + net.phase2);
         } else {  // TLS, TTLS
           net.phase2 = quote("autheap=" + net.phase2);
         }
       }
 
       if (hasValidProperty("serverCertificate"))
         net.ca_cert = quote("keystore://WIFI_SERVERCERT_" + net.serverCertificate);
+
+      if (hasValidProperty("subjectMatch"))
+        net.subject_match = quote(net.subjectMatch);
     }
 
     return net;
   };
 
   WifiManager.onsupplicantconnection = function() {
     debug("Connected to supplicant");
     WifiManager.enabled = true;
new file mode 100644
--- /dev/null
+++ b/layout/base/tests/marionette/manifest.ini
@@ -0,0 +1,15 @@
+[DEFAULT]
+; true if the test requires an emulator, otherwise false
+qemu = false
+
+; true if the test is compatible with the browser, otherwise false
+browser = true
+
+; true if the test is compatible with b2g, otherwise false
+b2g = true
+
+; true if the test should be skipped
+skip = false
+
+[test_touchcaret.py]
+b2g = false ; Bug 1020261
new file mode 100644
--- /dev/null
+++ b/layout/base/tests/marionette/test_touchcaret.py
@@ -0,0 +1,339 @@
+# -*- coding: utf-8 -*-
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+import string
+
+from by import By
+from marionette import Actions
+from marionette_test import MarionetteTestCase
+
+
+class TouchCaretTest(MarionetteTestCase):
+    _input_selector = (By.ID, 'input')
+    _textarea_selector = (By.ID, 'textarea')
+    _contenteditable_selector = (By.ID, 'contenteditable')
+
+    def setUp(self):
+        # Code to execute before a tests are run.
+        MarionetteTestCase.setUp(self)
+        self.actions = Actions(self.marionette)
+
+    def openTestHtml(self, enabled=True):
+        '''Open html for testing and locate elements, and enable/disable touch
+        caret.'''
+        self.marionette.execute_script(
+            'SpecialPowers.setBoolPref("touchcaret.enabled", %s);' %
+            ('true' if enabled else 'false'))
+
+        test_html = self.marionette.absolute_url('test_touchcaret.html')
+        self.marionette.navigate(test_html)
+
+        self._input = self.marionette.find_element(*self._input_selector)
+        self._textarea = self.marionette.find_element(*self._textarea_selector)
+        self._contenteditable = self.marionette.find_element(*self._contenteditable_selector)
+
+    def is_input_or_textarea(self, element):
+        '''Return True if element is either <input> or <textarea>'''
+        return element.tag_name in ('input', 'textarea')
+
+    def get_js_selection_cmd(self, element):
+        '''Return a command snippet to get selection object.
+
+        If the element is <input> or <textarea>, return the selection object
+        associated with it. Otherwise, return the current selection object.
+
+        Note: "element" must be provided as the first argument to
+        execute_script().
+
+        '''
+        if self.is_input_or_textarea(element):
+            # We must unwrap sel so that DOMRect could be returned to Python
+            # side.
+            return '''var sel = SpecialPowers.wrap(arguments[0]).editor.selection;
+                   sel = SpecialPowers.unwrap(sel);'''
+        else:
+            return '''var sel = window.getSelection();'''
+
+    def caret_rect(self, element):
+        '''Return the caret's DOMRect object.
+
+        If the element is either <input> or <textarea>, return the caret's
+        DOMRect within the element. Otherwise, return the DOMRect of the
+        current selected caret.
+
+        '''
+        cmd = self.get_js_selection_cmd(element) +\
+            '''return sel.getRangeAt(0).getClientRects()[0];'''
+        return self.marionette.execute_script(cmd, script_args=[element])
+
+    def caret_location(self, element):
+        '''Return caret's center location by the number of characters offset
+        within the given element.
+
+        Return (x, y) coordinates of the caret's center by the number of
+        characters offset relative to the top left-hand corner of the given
+        element.
+
+        '''
+        rect = self.caret_rect(element)
+        x = rect['left'] + rect['width'] / 2.0 - element.location['x']
+        y = rect['top'] + rect['height'] / 2.0 - element.location['y']
+        return x, y
+
+    def touch_caret_location(self, element):
+        '''Return touch caret's location (based on current caret location).
+
+        Return (x, y) coordinates of the touch caret's tip relative to the top
+        left-hand corner of the given element.
+
+        '''
+        rect = self.caret_rect(element)
+        x = rect['left'] - element.location['x']
+
+        # Touch caret's tip is below the bottom of the caret. Add 5px to y
+        # should be sufficient to locate it.
+        y = rect['bottom'] + 5 - element.location['y']
+
+        return x, y
+
+    def move_caret_by_offset(self, element, offset, backward=False):
+        '''Move caret in the element by offset.'''
+        cmd = self.get_js_selection_cmd(element) +\
+            '''sel.modify("move", arguments[1], "character");'''
+        direction = 'backward' if backward else 'forward'
+
+        for i in range(offset):
+            self.marionette.execute_script(
+                cmd, script_args=[element, direction])
+
+    def move_caret_to_front(self, element):
+        if self.is_input_or_textarea(element):
+            cmd = '''arguments[0].setSelectionRange(0, 0);'''
+        else:
+            cmd = '''var sel = window.getSelection();
+                  sel.collapse(arguments[0].firstChild, 0);'''
+
+        self.marionette.execute_script(cmd, script_args=[element])
+
+    def move_caret_to_end(self, element):
+        if self.is_input_or_textarea(element):
+            cmd = '''var len = arguments[0].value.length;
+                  arguments[0].setSelectionRange(len, len);'''
+        else:
+            cmd = '''var sel = window.getSelection();
+                  sel.collapse(arguments[0].lastChild, arguments[0].lastChild.length);'''
+
+        self.marionette.execute_script(cmd, script_args=[element])
+
+    def get_content(self, element):
+        '''Return the content of the element.'''
+        if self.is_input_or_textarea(element):
+            return element.get_attribute('value')
+        else:
+            return element.text
+
+    def _test_move_caret_to_the_right_by_one_character(self, el, assertFunc):
+        content_to_add = '!'
+        target_content = self.get_content(el)
+        target_content = target_content[:1] + content_to_add + target_content[1:]
+
+        # Get touch caret (x, y) at position 1 and 2.
+        self.move_caret_to_front(el)
+        caret0_x, caret0_y = self.caret_location(el)
+        touch_caret0_x, touch_caret0_y = self.touch_caret_location(el)
+        self.move_caret_by_offset(el, 1)
+        touch_caret1_x, touch_caret1_y = self.touch_caret_location(el)
+
+        # Tap the front of the input to make touch caret appear.
+        el.tap(caret0_x, caret0_y)
+
+        # Move touch caret
+        self.actions.flick(el, touch_caret0_x, touch_caret0_y,
+                           touch_caret1_x, touch_caret1_y).perform()
+
+        el.send_keys(content_to_add)
+        assertFunc(target_content, self.get_content(el))
+
+    def _test_move_caret_to_end_by_dragging_touch_caret_to_bottom_right_corner(self, el, assertFunc):
+        content_to_add = '!'
+        target_content = self.get_content(el) + content_to_add
+
+        # Tap the front of the input to make touch caret appear.
+        self.move_caret_to_front(el)
+        el.tap(*self.caret_location(el))
+
+        # Move touch caret to the bottom-right corner of the element.
+        src_x, src_y = self.touch_caret_location(el)
+        dest_x, dest_y = el.size['width'], el.size['height']
+        self.actions.flick(el, src_x, src_y, dest_x, dest_y).perform()
+
+        el.send_keys(content_to_add)
+        assertFunc(target_content, self.get_content(el))
+
+    def _test_move_caret_to_front_by_dragging_touch_caret_to_top_left_corner(self, el, assertFunc):
+        content_to_add = '!'
+        target_content = content_to_add + self.get_content(el)
+
+        # Tap to make touch caret appear. Note: it's strange that when the caret
+        # is at the end, the rect of the caret in <textarea> cannot be obtained.
+        # A bug perhaps.
+        self.move_caret_to_end(el)
+        self.move_caret_by_offset(el, 1, backward=True)
+        el.tap(*self.caret_location(el))
+
+        # Move touch caret to the top-left corner of the input box.
+        src_x, src_y = self.touch_caret_location(el)
+        dest_x, dest_y = 0, 0
+        self.actions.flick(el, src_x, src_y, dest_x, dest_y).perform()
+
+        el.send_keys(content_to_add)
+        assertFunc(target_content, self.get_content(el))
+
+    def _test_touch_caret_timeout_by_dragging_it_to_top_left_corner_after_timout(self, el, assertFunc):
+        content_to_add = '!'
+        non_target_content = content_to_add + self.get_content(el)
+
+        # Get touch caret timeout in millisecond, and convert it to second.
+        timeout = self.marionette.execute_script(
+            'return SpecialPowers.getIntPref("touchcaret.expiration.time");')
+        timeout /= 1000.0
+
+        # Tap to make touch caret appear. Note: it's strange that when the caret
+        # is at the end, the rect of the caret in <textarea> cannot be obtained.
+        # A bug perhaps.
+        self.move_caret_to_end(el)
+        self.move_caret_by_offset(el, 1, backward=True)
+        el.tap(*self.caret_location(el))
+
+        # Wait until touch caret disappears, then pretend to move it to the
+        # top-left corner of the input box.
+        src_x, src_y = self.touch_caret_location(el)
+        dest_x, dest_y = 0, 0
+        self.actions.wait(timeout).flick(el, src_x, src_y, dest_x, dest_y).perform()
+
+        el.send_keys(content_to_add)
+        assertFunc(non_target_content, self.get_content(el))
+
+    def _test_scroll_by_dragging_touch_caret_to_bottom_right_corner(self, el, assertFunc):
+        content_to_add = '!'
+        target_content = string.ascii_letters + content_to_add
+
+        # Insert a long string to test horizontal scrolling.
+        el.clear()
+        el.send_keys(string.ascii_letters)
+
+        # Tap to make touch caret appear.
+        el.tap()
+
+        # Move touch caret to 100px right to the bottom-right corner of the input
+        # box so that it could scroll faster.
+        src_x, src_y = self.touch_caret_location(el)
+        dest_x, dest_y = el.size['width'] + 100, el.size['height']
+        self.actions.flick(el, src_x, src_y, dest_x, dest_y).perform()
+
+        el.send_keys(content_to_add)
+        assertFunc(target_content, self.get_content(el))
+
+    ########################################################################
+    # <input> test cases with touch caret enabled
+    ########################################################################
+    def test_input_move_caret_to_the_right_by_one_character(self):
+        self.openTestHtml(enabled=True)
+        self._test_move_caret_to_the_right_by_one_character(self._input, self.assertEqual)
+
+    def test_input_move_caret_to_end_by_dragging_touch_caret_to_bottom_right_corner(self):
+        self.openTestHtml(enabled=True)
+        self._test_move_caret_to_end_by_dragging_touch_caret_to_bottom_right_corner(self._input, self.assertEqual)
+
+    def test_input_move_caret_to_front_by_dragging_touch_caret_to_top_left_corner(self):
+        self.openTestHtml(enabled=True)
+        self._test_move_caret_to_front_by_dragging_touch_caret_to_top_left_corner(self._input, self.assertEqual)
+
+    def test_input_touch_caret_timeout(self):
+        self.openTestHtml(enabled=True)
+        self._test_touch_caret_timeout_by_dragging_it_to_top_left_corner_after_timout(self._input, self.assertNotEqual)
+
+    def test_input_scroll_by_dragging_touch_caret_to_bottom_right_corner(self):
+        self.openTestHtml(enabled=True)
+        self._test_scroll_by_dragging_touch_caret_to_bottom_right_corner(self._input, self.assertEqual)
+
+    ########################################################################
+    # <input> test cases with touch caret disabled
+    ########################################################################
+    def test_input_move_caret_to_the_right_by_one_character_disabled(self):
+        self.openTestHtml(enabled=False)
+        self._test_move_caret_to_the_right_by_one_character(self._input, self.assertNotEqual)
+
+    def test_input_move_caret_to_front_by_dragging_touch_caret_to_top_left_corner_disabled(self):
+        self.openTestHtml(enabled=False)
+        self._test_move_caret_to_front_by_dragging_touch_caret_to_top_left_corner(self._input, self.assertNotEqual)
+
+    ########################################################################
+    # <textarea> test cases with touch caret enabled
+    ########################################################################
+    def test_textarea_move_caret_to_the_right_by_one_character(self):
+        self.openTestHtml(enabled=True)
+        self._test_move_caret_to_the_right_by_one_character(self._textarea, self.assertEqual)
+
+    def test_textarea_move_caret_to_end_by_dragging_touch_caret_to_bottom_right_corner(self):
+        self.openTestHtml(enabled=True)
+        self._test_move_caret_to_end_by_dragging_touch_caret_to_bottom_right_corner(self._textarea, self.assertEqual)
+
+    def test_textarea_move_caret_to_front_by_dragging_touch_caret_to_top_left_corner(self):
+        self.openTestHtml(enabled=True)
+        self._test_move_caret_to_front_by_dragging_touch_caret_to_top_left_corner(self._textarea, self.assertEqual)
+
+    def test_textarea_touch_caret_timeout(self):
+        self.openTestHtml(enabled=True)
+        self._test_touch_caret_timeout_by_dragging_it_to_top_left_corner_after_timout(self._textarea, self.assertNotEqual)
+
+    def test_textarea_scroll_by_dragging_touch_caret_to_bottom_right_corner(self):
+        self.openTestHtml(enabled=True)
+        self._test_scroll_by_dragging_touch_caret_to_bottom_right_corner(self._textarea, self.assertEqual)
+
+    ########################################################################
+    # <textarea> test cases with touch caret disabled
+    ########################################################################
+    def test_textarea_move_caret_to_the_right_by_one_character_disabled(self):
+        self.openTestHtml(enabled=False)
+        self._test_move_caret_to_the_right_by_one_character(self._textarea, self.assertNotEqual)
+
+    def test_textarea_move_caret_to_front_by_dragging_touch_caret_to_top_left_corner_disabled(self):
+        self.openTestHtml(enabled=False)
+        self._test_move_caret_to_front_by_dragging_touch_caret_to_top_left_corner(self._textarea, self.assertNotEqual)
+
+    ########################################################################
+    # <div> contenteditable test cases with touch caret enabled
+    ########################################################################
+    def test_contenteditable_move_caret_to_the_right_by_one_character(self):
+        self.openTestHtml(enabled=True)
+        self._test_move_caret_to_the_right_by_one_character(self._contenteditable, self.assertEqual)
+
+    def test_contenteditable_move_caret_to_end_by_dragging_touch_caret_to_bottom_right_corner(self):
+        self.openTestHtml(enabled=True)
+        self._test_move_caret_to_end_by_dragging_touch_caret_to_bottom_right_corner(self._contenteditable, self.assertEqual)
+
+    def test_contenteditable_move_caret_to_front_by_dragging_touch_caret_to_top_left_corner(self):
+        self.openTestHtml(enabled=True)
+        self._test_move_caret_to_front_by_dragging_touch_caret_to_top_left_corner(self._contenteditable, self.assertEqual)
+
+    def test_contenteditable_touch_caret_timeout(self):
+        self.openTestHtml(enabled=True)
+        self._test_touch_caret_timeout_by_dragging_it_to_top_left_corner_after_timout(self._contenteditable, self.assertNotEqual)
+
+    def test_contenteditable_scroll_by_dragging_touch_caret_to_bottom_right_corner(self):
+        self.openTestHtml(enabled=True)
+        self._test_scroll_by_dragging_touch_caret_to_bottom_right_corner(self._contenteditable, self.assertEqual)
+
+    ########################################################################
+    # <div> contenteditable test cases with touch caret disabled
+    ########################################################################
+    def test_contenteditable_move_caret_to_the_right_by_one_character_disabled(self):
+        self.openTestHtml(enabled=False)
+        self._test_move_caret_to_the_right_by_one_character(self._contenteditable, self.assertNotEqual)
+
+    def test_contenteditable_move_caret_to_front_by_dragging_touch_caret_to_top_left_corner_disabled(self):
+        self.openTestHtml(enabled=False)
+        self._test_move_caret_to_front_by_dragging_touch_caret_to_top_left_corner(self._contenteditable, self.assertNotEqual)
--- a/mobile/android/base/home/TopSitesThumbnailView.java
+++ b/mobile/android/base/home/TopSitesThumbnailView.java
@@ -21,17 +21,17 @@ import android.widget.ImageView;
  */
 public class TopSitesThumbnailView extends ImageView {
     private static final String LOGTAG = "GeckoTopSitesThumbnailView";
 
     // 27.34% opacity filter for the dominant color.
     private static final int COLOR_FILTER = 0x46FFFFFF;
 
     // Default filter color for "Add a bookmark" views.
-    private static final int DEFAULT_COLOR = 0x46ECF0F3;
+    private static final int DEFAULT_COLOR = 0xFFECF0F3;
 
     // Stroke width for the border.
     private final float mStrokeWidth = getResources().getDisplayMetrics().density * 2;
 
     // Paint for drawing the border.
     private static Paint sBorderPaint;
 
     // Initializing the static border paint.
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..14765da7ef5dacd273d90cdec2b9b5a82b150fa0
GIT binary patch
literal 480
zc%17D@N?(olHy`uVBq!ia0vp^Y9P$P0wkGC6jgx~OS+@4BLl<6e(pbstU$g(vPY0F
z149*1VM7Z8!!Mvv!wUw6QUeBtR|yOZRx=nF#0%!^3bX+kk>u^}!tlSn|IB_M@3*Im
zV~EG`r_*eOS`>KPHp?{$<=SpDzHzg{p)&f#yEOuWcT1KfsnmJOJ#>E}`0W?Z1v@dH
z&-rD+ad(!6%=r-#;Uds7Z)Rg(NzhsDg~<ua+yy_MaZyT~x>!f0ghgqh<os?+Hl+;$
z8U9D3n79Qb3!-M;eYU|s?sRU@<7bj0I!lVOHkQU!ohf^NV&8$Jf115Lv6b7l_(kT-
zz3M5P`f>Ywp|D(EbGgl{Q<sYEUOsu_Dv{tDzCP0<L~pJwYrWcd=Zom<b4zAfC%$|3
zwSHzBcfu{HHs9=RbA8NrJrqnSvzR4!`<i&y%h2>H&e?YS*WSdubxU-8T)*0&HpuqK
zy@fY~tDMhSiU5N_wZt`|BqgyV)hf9t6-Y4{85o-A8kp%C7>5{|Ss9pF85-&um|Gbb
iG-to{LD7(#pOTqYiCe=bv(OJf4Gf;HelF{r5}E)X`L7ZH
rename from mobile/android/base/resources/drawable-hdpi/close_edit_mode.png
rename to mobile/android/base/resources/drawable-hdpi/close_edit_mode_light.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..fd57fe4604d2c4ac45563ab21fa59b07eb31f238
GIT binary patch
literal 1186
zc$@*E1YP@yP)<h;3K|Lk000e1NJLTq003qH003PG1^@s6S7H+k000DONkl<Zc-rmV
zZD>_>0LSq&r(4?6<?ty*#Ik~#$kIR)TV`gIp}hzevBJVyHmnt!5*2$BMbVHl3~~e&
z;d%tgR+{*t%xYL@ENUn&)^Kgk*=A{O_uu#Qq8EeRd(Ziw|GnpSe_!~#9S44Ib{?;1
zjESr9xEeQMEpEXIT#oVZ{?FoeKo_G1t@s0Dbq2e!8Iv`PI|X<Qrx3JLs7IlOiPjW+
z4%>F4NW(;<2wx(qUez$sXhf7HP_AL@l;JF*ZkvX&vjHwTs$uLj!9_zF#?Cu%l7_L<
z3>Wok7(36xMXegf&aH4!wT7`%gl<Gx8wxdyy*fnI0It!Qe>4iQAGQtSc3s4b)-?PK
zo1WHXe>WCj0AcDuv4(NyL4;|SZj`w-2Vr_m!?<-B!t}O=ajOPl>cJ!p<HmZ+doypL
zNW<7E#4J>z0S6I9zhEn_$FzJIW)hll68#~aMy5N5{s`>HqBsuovQgc*C~m`a8|8Oh
z+=dx2%5Qnxh8Z#{hQlZgqhU0RhS4w@Chvwx80EKI=P?>a!)O={qhU0RhRNzM=Zw;M
zjD|^nm@`HN8D=^*<0G`A4`(rg9vnbD%4~;eH_C4vyd<V#C;mn{4dNl2VLmp>uLa&1
zu0SWk)D(7@I)p8Oqj(>$V<$eqG2~*k@J6``U9jolFvHBl2!eDT+b}oD-@O)}AlKT1
zJFp0w&<EQFF)P?Gz<Wry!&n&L13&K?<<}HunAzw+vU>3(Ccq2eQk}&9TR)0}4FgQX
z19%hr@GV-g163%27t$L>`K=B%jC=PP<<}UuVU`-@_hH<InQN5a;kXSm)hNGXaT})8
zD8J6Q4Kv>;zaw!QX0=g%du)c8iM7~(ji^F}<#$}3Gb;4I%ZpRIn%9TtQ5xc_<XuMj
z-3Tw}D1QccllZm(f4dgB)CHVC7e)|O9T*pMm_rEC2%bU#yd-W0gXc_JM!oVk12171
zw%s4}B4!1`whxQpjZ%Vo{DoYp1Kt=`p%-EM6a_(t*#g@-u@^1)0)xo4UP<HX#X$t^
zJ4^|DqfGZp{_Bx6zhm$yP9jyqco7rB-dg_3D8Kda(li0<upNhR9R2te2hfNGwol0%
zG0Jac+@32tVN@(1`0F!D50z^e4WnTKmcU-rVHxJ36vdc{N^He98YXkK2mF}M3jC;H
z-1a-B!wcvVv}qW}_aZ`CsA1f-2A+j>4HM5Z>(Ah_8}fCSDtH#!;Ii_39p(kg4{Be~
zFm5^?@|VX8&;p}j+*KR)ryDhl+lFu@yfi%nqhT`B*BA#cg;hvsn9Nq4?vpzjCbNB?
z&TAVQCOgeYa!hM9O!kIZn&g=7)-c%{W?7PBs?;#q8)i<5Oa13HOqSk7Okq1R*^+!8
zW;o3&&6Dv%KHpmY37P6N?h5$s<}PHS`EeWO9*n?M!)QYT%HV~t1Uv8>T+|%bACD`?
zCNx-j0vl0{J5hlWcoCY7mADr*mdE=zD&b|)KVJWj4MTd{SO5S307*qoM6N<$f~lG!
Ax&QzG
index b20454542a596644d3004dcc5db0b940abc0135e..fbc3b4a37f998126280d20aeb472fe758d61f095
GIT binary patch
literal 1369
zc$@)Q1*ZCmP)<h;3K|Lk000e1NJLTq003hE003GD1^@s6tWN0g000FbNkl<Zc-rlq
zeP~r>9LMigEnli7*|4HH8Z&wsHHz9KZ6WkRO`+1r)KqGJXfI<Rvq1(SZrPixvX%=H
z+=3XbER-l|(F<tng+)q5TZZX$x_n{E+}gMAAN%9<<2-lU+2uUH=icW7pMQ4lVVCo{
zJ1@_9&Rqh4SBV+F0ep=AJBvO*t7we{m(kgDa;C<}q1Ch-dg!Muv^bMu6w+UzmqA*c
z2{H2N-*AJfbdRwU?r??{rE844;2y1U#_)d?qaQ!=(=A3G{TI<VM3>Vm=(KTq37t)M
zAUd__7UOZt`|Yd=1lf~rF+M;vnp5~5$`OrWIz3%tWYa!G<E4~d=|^W#y2Q8@(b;2Z
zS1H+&E-^M>VysKSd$^t+L3DcPxvs~^p$9Q>I%s`_LBMsig$`iiEOI?Y4bq2w^gLH%
z+(`S8UcBgHjH~GZq$kxb#aKxDklr-Wi?qf#e<VUXGKa(TS(=~f7?0BW5#OMVV{|M1
zik?PhvyZmY#&NhYu+66gV>H8K4H;uIJhnJ1cT@FnlVQ4pzDbY4O^(VKwQ!FU^zOg`
z@KQ%lAi89XC*T$Xw3H@<ljttE#g8(^Qn<x3nlLzxcEKIKlra`SBhiPmOX(2Y;A0u%
z4!FSqnrjFkeHCu7O~$whZm=L(0O3^H4gGAEF^Zs{_6S1^k3c_lGDe;Q*ArzC@4x>9
z-8>^>OoDFOXd<HbK{u;p42l8hrF4{AyE8_aGxZDfvLq}<FLct8WJBkUEI&gllFkg#
z%lxnye>ix7*A{r)DOzZF-DJfdw%fyE{GfCYEyu8d@1&BQNy2S{PD;XJv_l`S8;=9#
zv!pqOb;_WV!mt?Ip^rHcp7m%o1ys5#o*ouso5Fj{*@g}KVc?<2Uiv5PqXYCTz09y)
z9rTeSVyL{^_byEsyn$Y9xX8;7ER)^_U7QZSKh2+-hiM|ko<omA4?U(BYoUuPGvINy
z-%K%9K@W|o3?M95H0|^|Q;a3hK?BW7WdOsm;{@!p%M@ci>{Cw@F?kE^(=-4o{(P<S
zTuc$<O!*@k&KPBk64+x6O<3|8dJuMKFvTdebkk@xO<1;w?nnHrH^s<D{5(bzN}Oq7
ziq8g9jB61yN+Q@Ch1g_@akGyRdyKbDG3NRhvBzjO#kkkUh&{%3Q;dgvjM!s*Zi=zO
z$A~?~x271YeT>*+bQ*`yeT>*+bem$V_c3CRao7~&6(1w^7^h4z-clYTJIcgo<uPE2
z(X2Q|0o_X<9LGAB(+*mxJjR7#F+NfnV;21@Fv{CR7mnhS^k`t6rxeG?3yblY!Wh@l
zLr4uZN@Em+#rQ^9j1t<5)bhN-7{y^RIu*qzrT-wD_XDr{UM!nA^7DIOW+Tl~6r(IG
zMwgNpbLmN#SsOT08WhX!A6YhI3=^uel*E`97NZC8(<t0BhB-|u15YdsC;3vxAtdKh
z`TH$B;ZzY8<0KqFoZjvh_tUQmEIST2SR4|=8CDt|p4=+t)DFN6DrJld;0`Z~{ruCk
zjZP6?D(nhXE<Fb>*(+j%xdsB4o&zs{Ta=G79`!rip-#pqhFg4{<XT|`+@e9oD1&=c
z8UEYZF}OvOj4==HF(kfaCy#c*Jz8Xp3b@H2eSt2e-EfmnWQ@h|*y0NrqY@rl?3OXA
z;IYNeGDa;tw%9LY)WKtmUK!&xcx=%xW4r^8HDrwU;IT<=FvfCP@3rPsjKuIN(8usG
bye9txn2_eg=)<2I00000NkvXXu0mjfHb;W>
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..d43991dd7a060f19271e0af7d6699ad2d66390e8
GIT binary patch
literal 1929
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
P00000NkvXXu0mjf?8$P)
index 795644794500ac735d1fad19e515ff3d59879929..2d0b9cb505503e1845341222135769c7396ed9e5
GIT binary patch
literal 2086
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
QZ2$lO07*qoM6N<$f{R@tq5uE@
index 5703bfbe90a0f244e9caee6928a33eaa41bfa804..de1df25fc945e8e01a3e06f80a79471f73ff3f70
GIT binary patch
literal 151
zc%17D@N?(olHy`uVBq!ia0vp^HXzK%3?vzhybXb*WQl7;NpOBzNqJ&XDuZK6ep0G}
zXKrG8YEWuoN@d~6RFDp~0G|+7AbsKTwYT26hkz``k|4ie28U-i(tsQ(PZ!4!jq}L~
p2iTstvn~E-FCnAQWmwe2%Es{DS}W^$V?-RtLQhvemvv4FO#t<IDn9@K
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..b0eea2e7704d40178a1c399a9128b2023b83e5a1
GIT binary patch
literal 437
zc%17D@N?(olHy`uVBq!ia0vp^QXtI10wkH8TU>z@OS+@4BLl<6e(pbstU$g(vPY0F
z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a><Y92N-!mPySp&_Z|^^|AIQ7l
z>Eak-ar*3JYraDU0xs+>FHe~t*r_5btM1wOL?g9tveI^ijbAi+oQ}+5x||XdvHSJM
zH$Rl$O10Z025aZM-Eq?5=XuxcCr^764izq5>X?&ZxoF|jw!;%_bUQr^mN=+fe5C7X
z;v!_5zC|*<O33hgf~V4j$uBlXX)adMeSdrJ9@CQOw@laeT8k+)I;1T8y(s9zHUonV
zB718>r5PknX}SOHpMQI`MMszN`dxQ!rGGixY`gYr<m7j|vP{a{W4~Njvh&Hwhq=$!
ztJ%JbUHR*s^>JZ|2KPz64Ng%&zp0kEMwFx^mZVxG7o`Fz1|tJQ6I}x{T?69~Lo+J_
sGb=+wT?2C~1B2%5w>~Hua`RI%(<*Um_+%FP0jPn&)78&qol`;+0DtD79smFU
rename from mobile/android/base/resources/drawable-mdpi/close_edit_mode.png
rename to mobile/android/base/resources/drawable-mdpi/close_edit_mode_light.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..60ac5531ae19ba9ac65cf64ee185e1fa7c84e683
GIT binary patch
literal 781
zc$@(Z1M>WdP)<h;3K|Lk000e1NJLTq002Y)002G+1^@s6lB&HG0008iNkl<Zc-rmS
zT}V@59LMozl3_WgNRUJ?5DqE`y;&+=1=2+q5d;wg5`@%6kT)W2cu^N23Q|`^L^r(<
z7GaS>%NogwNF|A0Bn_P1HEILVWx3Y(dYpEib2d*t=Q%(4T%K+Gb~rre|2!g>%Q;~K
zcA*&!*a{!STC<uT?!!^U@Duq-;x-y}D5M6XkjWoJ++0XGUcqV(xwViE*vT8W7BUJu
z$)d`Qh0MWjw!5*AsUq$WzZ(m=1v?pb>ocScR<n#oH?KnmVI?QrzA)Q}*O18_U6$@U
zune;t)T0n!8fFRUQb-*#FiV%)3-RMHK0zi+I0gS&FJvF0n6O|TE3lJan8T#S?|g_o
zP89MUswCz>Axh<)SBO`LSBO`LSBO`LSBO`LSBOT1EJBrhfcS@IT*eq?@C9$tkDYFP
zmsv!O!PM>^3MGT%vV~le+&YM306pkO6j?Z(M+iWm8ZRsixLaikX-1)pV{d_LQ*b&z
z@El24$s~L-1EPq*Tr`2RSZ8u=Csay{?8Gd9ChSKLLegfalwK!>%t@${5of0E>SV%+
zLOw#3OgVAJECp5aRJM>1BDjR}Xh$uCi3X^YKAA$U7T8M(qs;VJg!5T|orKI6X66~j
zrZut#89)UD>JhbiHpQ%vE09SF*U^PA;`krgmiPP1a6#fVVg_4e3V8`tvS9KIypJV=
zox&Tam3_HOK$RpQOjII-HnbvObsq8^s^qg11ERDyF<ae2X7L1r7{NEy3dx`p8A5%5
z#oLfhL*_B~B$oI$bt$A1Lc(rc3OOlzj8m6F`XD5<=u*g6R7f1s8`q!^sk@{c&ve_$
z%%TaxKv>tk-Nz6H=5;M34Uwlx_uYSyXFXPQEo2tLKuo1Vexp=rhcM8Hv?_(fQEaAh
z45EM_9u)Zp+;yUmI&`AjqBA&xAcO_gIDpgW#yRwwxQGr^LX^T^54(3tlZ}!V00000
LNkvXXu0mjfb)`;%
index 029fbfd19a16a4d4e395864fc5805cfe9cebd803..6733fa579c8e70cd1185477cfd407dd51c2fc410
GIT binary patch
literal 945
zc$@*T15W&jP)<h;3K|Lk000e1NJLTq002S&002A)1^@s6(tK=L000AcNkl<Zc-rlo
zOGp(_9EZnBiHywbWtosYD2%8qBCwzcB*fGpdqD)QY7z8U*rtMvtSD$vLA0q<N~JQg
zqO3$~(Tkq+F3^Z5D%47`hrfP{S^Sv}&8TzE42&OqAm<KeIN!a_%$?y{0D7g751=zd
z9L=VCXc?{W$#Q$n9NItZA?DLY=%<k`3~Pv)v>oQ?pqXI|aR=skOk=_nBC`wc;sp=K
zgBscfZ!8E?hy!q^l}_oxoawX`?i>hHh?j7usvGl`!JXG(36TnK)OTa<T6kl87(#4<
zclOd0n&@H*ErEBo1RWxtzC-YQq)9=A=u68G9!}G~rb8stYJ`t!n%t8RBWaq8=`@!f
zqRj{|-{=vVN2hpL*GL(n64B+H3~>~}(LsMBI7(%R{RoB{I+PBlXAuksWr*!CPd$xu
zoQ1B!JiBCwjRBnZhf~X8B7G0D6v+^UFv~I-z+oQDvQ~yz3Uky^%f-tu$0`{j3+9;P
zA;b*Y2{Yu#5OZLL>rh{%j#i9cf*Iz?5a}>Ou4A#oXcPTJ$B1#0pVDbEL<;oNMEf`v
zd;C8)Zer+b=x3}9F$ntE<5=h<`bWIpNvAuuDTaQML<p*%nT|znqxb0*+uO9*vCUNI
zC)OFF8T$Av{w=!d2k7I6>V8BM^ifHzZh8Xx_@D~$7<zb0NA)1Y2>J+mc%ce$6aMo+
ze5dG%N%SuK=e8=uMGZR{LM@+6(C}u}szRKCe>BhpYWeIydJX<@MirvM$0Kn(wKO?^
zeuqDtSA^i8KQwC!pyO0urwY*!y%6ey<-G`oc%lmNEP^2#RUsN97~+d6L~{f~w5vk=
zG!$YYjd9yXa|lTv86pnEK!`=OjaJdwG{fO6T24FYVnZPkWQf5ALgdj7c;_cAFc4yt
z43Vli#0vV$aW`ru-7Us;(&h3wsQve9%^}9i5R>5_Ei_SBsCdZx*52<1F}B_wdk*4=
zw$?Fc3;biM43Pn|+_Cq&M2zLzV>e)yOc`P>%<{_KZ!CRCZ_$3@!p<aFGDJ4a(kbp*
z4HVy2htfYVOTG+I0P}38mct?lf_V112Il$UxNsUrTS0<+8omy}@P<yHY4jO_VY3WT
zgy8sP8x&h*h#iP7B{IZ5M3+M{#9>62V=_b;qD!R=QA)o?)RVnGfbIPy@W1{ABuqjK
THd3L@00000NkvXXu0mjfR1vd!
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..202a5b59d415ac8c53e73ec7c14b57cce6046e85
GIT binary patch
literal 1347
zc$@)41-$x+P)<h;3K|Lk000e1NJLTq004{t000~a1^@s6v!+*l000FFNkl<Zc-rln
zZ-`V?7{<r8UD?%?*^F9@p(b4<F_N*OO^M(x6n<C;CXteqXz)|8gj@x)BB+4~A;P)@
zlJu8_>O=Ht%05U%G!_I=m?IVav*Ie$x>?cme0T;PUOM;e$PBx2&kH|>dCoiMoVo9F
z&pr3f6x!`}ATV!oe*gl(FoB#K=5jE_SJel>O<<Giqy+BFdvWt<m@#k~v=J$|lKP|I
z9QEfV|61@J^?$%n-V2;J!)yl{+o>NE?PbXyH~A~`Uf{eLW-U0+;?IFK)Sqw|rW6d*
z6Dpty8vn;V%yr;Fz7{-&xhxo_Cqz7cvCA+QgPXx97~%)+0ToFe09&X}f~C|g7lB*A
zz2I)J&ao-2co=5xN^Wj<aZHC{nCmyp0Ke-Fa38os#>yfh#k?El0dSTHhrubJ@gj@<
ziP66W<JuVu`z5gPE+|RfA>fM*4g*}MVaC9d+(g^>fhH;#il7c`G(lCC?}k0Nj<zaD
zLCm%p>2t=Mpk>ek4bCG0sU6=!y=nT5Ois+4vYAJj<6&F`$0t$8Fgt-S{&eVv&81^j
z+RlLA<$ViWx`2i`<{9rBu8svE(SuH6ewQfgY;?3m(qAeCVS%BkX=o0TO7S{TGvn3d
zSl3BvbEzZv%5m7{GEA{!n62`mzrf=x);^$dge%A+qP;JZcu(}#cxk%?d?fnQ%(aYw
z&rQDrJvPi1-fDjgwsAu}MXeK8=^3sE(oOe<F`6xQLo{6_ie}|X33Z(>HR@uTGPPLe
zVe;ATz9iiyA3i3H>qY-i^i86FM(rA)p=ZesU3KIvR-Tod-`HQFmxdvm!4ji=udA9C
zyN`xZQz$KS{22e4n@HcfYE(7Pt|-P3iR8@NFq<8QDLM2F)-c@MYK$0zX{<4mm@@76
zQ}2gi2EkUYqOb7GowbG$QaNztJ{v|&Q1cmvIa>6lt|E$#YYnkbhM5K$1(UCFgS4#%
zze?L%)cawWb>IXrk!j|dX-{dgYF`Yah4LFl`|{^97K>qa1C7Cq6=uEMejgS67jQ)%
z4fCn!r@?dJAuuO;iMdJ{#4JoIx%FU}3pdOp&=`~a+eQByET_H~NXU<cegixv+Uu@-
zG2q&aJ=R%|VHCSzEcVGTwJuDM*!@pNZn{_uvkaUOeVgPzCHe={ZZx;*FG#-6FxG5u
zJMz^46AmNMFy@lvr@{P)=!&CMyEIJ0x#{&6btYreTU}Ip81k^_Ke4C>z<K%gc#@Z^
zuYkrOP&bTc7-qK_Yl8Zaxx~a^6%C?sgx@<c`m}v;=ee6Hx=g^fro%8T?VD7jjT!@O
zwr`n3*=~Y8o9RVkm_hJH+k}{9kE{Z|m;);^40AR3!(8e{+4d&T*hl?U$5^xSEapeB
zObU>KglA|(W@JTi-A&o2t%(|jkupExYpUiT8VPf2pyeoNQ|CcqYR&l=!aiWMCr^RP
za6<M-!l*-EE&2g7&=PPL?{>bRp<V(Lk~0hv57Um^Ve=sF9q=_c4z8!Z0z3mwf)g^w
z5pWRvEG9b&HiG>$;H`Sb>*IJ^=&ZXbDNu#QP3>yLJ|y(%F=5bvscR0Vs13(lid`6{
zsN?CSjtRMAIaq46Ri2;wBQ2=wZi-a(v&6NBiKN}YkiI-~(7c%V^WCPYb-qvdPwxU?
z4daCo{y-HB6ATjwh6(hZ3e8gM;(1R!7$y+@1Rlr-{{m-MARqu#k+c8+002ovPDHLk
FV1lxwgjWCn
index f210937303a7ba60cc543629938a117ec6c17323..b465addc7e8e6e2dc4e13bf305ac129087c2378b
GIT binary patch
literal 1378
zc$@)Z1)chdP)<h;3K|Lk000e1NJLTq004df001Hg1^@s6nQv_b000FkNkl<Zc-rmT
zZA_JQ9LDkgQKSqMLTrW)EoOo`w-}mpb4+Hd*47&91x=fdO<Xy{<!WU{o38L7v)R-n
zpPHphCQJuy0xw!>O%Mxg5wsYg*ld<!3kZQj-xs{N_uub#pL26)-e;U^`@CV-{$pHl
zpL3scFhfH_F=Nn}{{e()9M<6*e2dpGUg;)a88)K|7ekyq4SCpsbJ!Id-ak&kPKD6B
zfPSmjqntSpZLm`r8{Qw5Lrad;?NoXR!nqkr_k3)4e|Q60Hdx*7m0pr?ZmQC)j}7k+
ztDz;|>Yn#7d_d`5i4E@$lkq$3bl?H2TMH@ErL$wh``-dIImT%~hR~~mlv&ETeX-%A
z!%U=EUyEe;uGsKVE&7Mg#CjY+00v1Yz)_sVX>7$D;lOyjfKpTs_m7|ei7*~4!TYF0
zJ-$OZim?F3MGDqNV1;#F5*A?<N>G9Fdpvvqi?JDHs6!JPP=QUD<2L+bIE<@sW+@7B
z8&djFf`H?Gw+&kUz*8_GWZ?orr52g$V{&Bau+Hm{2D(SXr(hF)MW_UE42jb4sThD2
z4h}CLV2yQ#mTqLgDAu4K;pQJaJ4S|2#x8WjYtA7~y3{veqzQWLm%<405QNwCVd)qc
zejg%9p)`CY+;SJ~9)8<ypbt_Sl{YH>l**1bMK+>d>9k|A<Gkr84dIZ>)uq9Q!%xF)
zmn+{-Xu+V;sgZ_1u9W{m5t4^{6Y+!69mFS&Clr&=rkrUk2O#A*0@k}^WlDDkj0eRo
z&s`S#^fA83`aX{#*Sd@^RQ~9$Ny8r!ioMD=yj8g(JR@{Vg>JX-jJZeX4IouG^AY8@
z`WEgF`;I|>PO=5Yr^CnLN1VZ<F1;Gq>5_)uuN4IwJao4~inEjN_K={s0x8SG7(EH?
zka7tVd^|jcufFb%!cH*K;a?f$;rA$=BQT1Skn$Ex2qz$=2XkS3JG?F)Q;<IF3)s2i
zx8ZA)&Ndjuhmf)t#>FaVDT0ZT;U{4wzC>%7x4>O~8@@^DY=TjgK+5MZirM%ZQfd*1
zlHu3lCagr?@GVN`RT#xPkW#MnC!h{eZea#Y6b%0nMw-rO`HR;duk~|}sC_*vVWMF8
z{4id{Y{O;c+z!7DU+Z>TrPvE8yM=Bp29^Fvn5Y<DfBmEmPa@9xK72p?$4ci@7{zHw
zS#R~Gpi}8yM~V-JZxvs)lk+bg68c{W-DbZH|DyU*tv<wWkg_n$UyvZ4h8gAIPmRLx
z9pVd4axM#9?X!PB`)hdpmAgJ9dwA!q9pfCmmqGN~zEK}uf9ZR^a&Bjs!!LuB1`oqu
z_t)_5uhk#4ZnNTDo)f%o{j);1(rZP+|1|tTNXhYVZZG1j-h7ug&t_WPROQ@3Jm|OK
z)6nH|IeQy#x_oZE*?OJ65n6shZ5U>ZVEA_-r5aBNAG5Ag`a6;3xPryG{Cpabi%b;Y
zDzv=kui=3_48Uu;gpXoHnwAm%#pghXdW*UpZdqi#;T36u*yyj}ffeXQxVecX!a0#<
z%Ls=LpblET7CyCm2U?09-G_0_%g;s`{(1im56ngdg3vO6!<Z_b5qUDa4sQ)q@A8<O
zBwQtKDE*68cP^R{DwmLkL(&z;Is7bSTONlIO!d&6j%<MmLps)BH;$tWdr*Kh7#G<Q
z$dc|Pgx<Um|5p7R_Mr-u*oT)eQRpY45TBtM<=Cm*a^8p4ID_lB>-Y;livq`!!|~XT
ke(aBZu72!ExBs92KkmY%CV#ViI{*Lx07*qoM6N<$f>w5z)c^nh
index 0ef98f83618965f093a6c71827ce85a65bbd62a9..4bf658f8f621313460f8ac883b6e1028d6c604fe
GIT binary patch
literal 136
zc%17D@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dE{+=$5Ar-gYUf#&bpupqm_<g>g
zK#Y1*>kZ9_6$M9M+dZ7Mq@!ZjQ-$ffqJ5SgW?+N?_6_p&x(6=Xa4JB-gX0H&|7Ff8
X4Y0QV*!bEDXf%VTtDnm{r-UW|pG7PF
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a6297a75e1a3050cdaf47de0d4c902f35525d0d1
GIT binary patch
literal 574
zc%17D@N?(olHy`uVBq!ia0vp^#vshW0wgD__^}X3v7|ftIx;Y9?C1WI$O_~uBzpw;
zGB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZkpafHrx4R3&|Mvbf`xzJ*
zBRyRlLn02po#ETpY{27YTg;Hr*Kmcm{1k5$hlQy61Dh4A99}J}+T7r1A|O=v#P_xA
zp=aHHoi+&myw!gD{1>MCy&0cvAC^Cx)GexfDB5EVi;|MtnkVa)JU%wHt8G%sd>&3!
zUeWNdlp?J-hwZT$A}<@nMR&#@yL2Ji`=n|dhvSZbOMD-BujwbZUH!wol;abRhfVdw
z5~WLlN!M<u2tPMlS2Fu?8lzy(y%|Sz`zm{xd;a`ul<Fy+XIN!1uRm2S^U1N!wO`|=
zz3!P4s+YF+Z7jF(t+Oig1dq=+Vr+Hd$n1%`Umevczpb>msppZwWQE1nrr(8Uut*jP
z3H!Spo#8q^v@l9-@7=0}JylA<lNC?AwUL~f6LLf2jmgsQZcjx5EH8`rWh{N)d+K`d
zQt^NnIa7X_OkEeevi+McOQ6wgHKwIM-7=$sXW9Pl(Mdah(e8+}&Q9s|U*aER%jeh6
z{lJ}Yx$#^dFvwL)Tq8<S5=&C8l8aJ-6oZk0p^2`6nXZ9xh@qL4fti(|p{{|sm4QKX
h_FEqm4Y~O#nQ4`{HGDD){Q%U!;OXk;vd$@?2>=yD;1vJ>
rename from mobile/android/base/resources/drawable-xhdpi/close_edit_mode.png
rename to mobile/android/base/resources/drawable-xhdpi/close_edit_mode_light.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..813ed14fb454c58d344191cd8f6aa434de763824
GIT binary patch
literal 1711
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
FV1fmw0$Bh6
index 25dcfec47dbf0d8c7ca6c2763e0f5f63f52d3ead..f8d201f052552b0135001634a33f026cbc519193
GIT binary patch
literal 1844
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
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..f28a62f53a7f896b9434df91d5fd62f4624468e8
GIT binary patch
literal 2643
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
B%yj?&
index 3b66dd61ff371df1bf2da59b193b7526ab045461..3fabf236a680465186c9a9ce9cf4c83e734d8fee
GIT binary patch
literal 2751
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
FV1k}bR(1dY
index 0fab5b669160c83b16a775ac6a2d9a31a58af32e..811f9658db3dd9b3a6bd89195314ad98d3f90bde
GIT binary patch
literal 156
zc%17D@N?(olHy`uVBq!ia0vp^0U*rC3?#SQPk0BUBuiW)N`mv#O3D+9QW+dm@{>{(
zJaZG%Q-e|yQz{EjrrH1%u?6^qxB}@5m#@9`&OHQVF_r}R1v5B2yO9Ru$a}gthG?8m
xPEcUmU@wt+X}acrd9Jz%r)79gHYPn{X4s=zyq%%Dd?!#TgQu&X%Q~loCIAmmFLM9@
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..ef989768432535edad0d10a7a64bf37133cc6c59
GIT binary patch
literal 2642
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
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..f518916e814a9e3c9ec9441036c8cb89fc529775
GIT binary patch
literal 2915
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
I27fx?zjaDoZ2$lO
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..acb641a950b5e4a64bcc61ed658da2601e617bc8
GIT binary patch
literal 4012
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
NfR%-<c?B9D`#*a~VVwW~
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..7143b9361fab6bd8ab7c55b8a10989945f14512f
GIT binary patch
literal 4308
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
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/resources/drawable/close_edit_mode_selector.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+   - License, v. 2.0. If a copy of the MPL was not distributed with this
+   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android"
+          xmlns:gecko="http://schemas.android.com/apk/res-auto">
+
+    <item gecko:state_dark="true"
+          android:drawable="@drawable/close_edit_mode_dark"/>
+
+    <item android:drawable="@drawable/close_edit_mode_light"/>
+
+</selector>
--- a/mobile/android/base/resources/layout-large-v11/browser_toolbar.xml
+++ b/mobile/android/base/resources/layout-large-v11/browser_toolbar.xml
@@ -104,18 +104,19 @@
                android:layout_width="fill_parent"
                android:layout_height="2dp"
                android:layout_alignParentBottom="true"
                android:background="@color/url_bar_shadow"
                android:contentDescription="@null"/>
 
     <!-- We draw after the menu items so when they are hidden, the cancel button,
          which is thus drawn on top, may be pressed. -->
-    <ImageView android:id="@+id/edit_cancel"
-               style="@style/UrlBar.ImageButton.Icon"
-               android:layout_alignParentRight="true"
-               android:src="@drawable/close_edit_mode"
-               android:paddingLeft="2dp"
-               android:paddingRight="2dp"
-               android:contentDescription="@string/edit_mode_cancel"
-               android:visibility="gone"/>
+    <org.mozilla.gecko.widget.ThemedImageView
+            android:id="@+id/edit_cancel"
+            style="@style/UrlBar.ImageButton.Icon"
+            android:layout_alignParentRight="true"
+            android:src="@drawable/close_edit_mode_selector"
+            android:paddingLeft="2dp"
+            android:paddingRight="2dp"
+            android:contentDescription="@string/edit_mode_cancel"
+            android:visibility="gone"/>
 
 </merge>
--- a/mobile/android/base/resources/layout/browser_toolbar.xml
+++ b/mobile/android/base/resources/layout/browser_toolbar.xml
@@ -92,24 +92,25 @@
                         android:layout_height="24dip"
                         android:layout_marginLeft="40dip"
                         android:layout_marginRight="8dip"
                         android:layout_marginTop="12dip"
                         android:layout_alignRight="@id/tabs"/>
 
     <!-- Note that the edit components are invisible so that the views
          depending on their location can properly layout. -->
-    <ImageView android:id="@+id/edit_cancel"
-               style="@style/UrlBar.ImageButton.Icon"
-               android:layout_alignParentRight="true"
-               android:src="@drawable/close_edit_mode"
-               android:paddingLeft="2dp"
-               android:paddingRight="2dp"
-               android:contentDescription="@string/edit_mode_cancel"
-               android:visibility="invisible"/>
+    <org.mozilla.gecko.widget.ThemedImageView
+            android:id="@+id/edit_cancel"
+            style="@style/UrlBar.ImageButton.Icon"
+            android:layout_alignParentRight="true"
+            android:src="@drawable/close_edit_mode_selector"
+            android:paddingLeft="2dp"
+            android:paddingRight="2dp"
+            android:contentDescription="@string/edit_mode_cancel"
+            android:visibility="invisible"/>
 
     <!-- The space to the left of the cancel button would be larger than the right because
          the url bar drawable contains some whitespace, so we compensate by removing
          some padding from the right (value determined through experimentation). -->
     <org.mozilla.gecko.toolbar.ToolbarEditLayout android:id="@+id/edit_layout"
                   style="@style/UrlBar.Button"
                   android:layout_toLeftOf="@id/edit_cancel"
                   android:paddingLeft="12dp"
--- a/mobile/android/base/toolbar/BrowserToolbar.java
+++ b/mobile/android/base/toolbar/BrowserToolbar.java
@@ -136,17 +136,17 @@ public class BrowserToolbar extends Them
     private ToolbarProgressView progressBar;
     private TabCounter tabsCounter;
     private ThemedImageButton menuButton;
     private ThemedImageView menuIcon;
     private LinearLayout actionItemBar;
     private MenuPopup menuPopup;
     private List<View> focusOrder;
 
-    private final ImageView editCancel;
+    private final ThemedImageView editCancel;
 
     private final View[] tabletDisplayModeViews;
     private boolean hidForwardButtonOnStartEditing = false;
 
     private boolean shouldShrinkURLBar = false;
 
     private OnActivateListener activateListener;
     private OnFocusChangeListener focusChangeListener;
@@ -229,17 +229,17 @@ public class BrowserToolbar extends Them
         forwardButton = (ImageButton) findViewById(R.id.forward);
         setButtonEnabled(forwardButton, false);
 
         menuButton = (ThemedImageButton) findViewById(R.id.menu);
         menuIcon = (ThemedImageView) findViewById(R.id.menu_icon);
         actionItemBar = (LinearLayout) findViewById(R.id.menu_items);
         hasSoftMenuButton = !HardwareUtils.hasMenuButton();
 
-        editCancel = (ImageView) findViewById(R.id.edit_cancel);
+        editCancel = (ThemedImageView) findViewById(R.id.edit_cancel);
 
         // We use different layouts on phones and tablets, so adjust the focus
         // order appropriately.
         focusOrder = new ArrayList<View>();
         if (HardwareUtils.isTablet()) {
             focusOrder.addAll(Arrays.asList(tabsButton, backButton, forwardButton, this));
             focusOrder.addAll(urlDisplayLayout.getFocusOrder());
             focusOrder.addAll(Arrays.asList(actionItemBar, menuButton));
@@ -1450,15 +1450,18 @@ public class BrowserToolbar extends Them
         if (drawable == null)
             return;
 
         StateListDrawable stateList = new StateListDrawable();
         stateList.addState(PRIVATE_STATE_SET, getColorDrawable(R.color.background_private));
         stateList.addState(EMPTY_STATE_SET, drawable);
 
         setBackgroundDrawable(stateList);
+
+        editCancel.onLightweightThemeChanged();
     }
 
     @Override
     public void onLightweightThemeReset() {
         setBackgroundResource(R.drawable.url_bar_bg);
+        editCancel.onLightweightThemeReset();
     }
 }
--- a/mobile/android/base/webapp/EventListener.java
+++ b/mobile/android/base/webapp/EventListener.java
@@ -178,17 +178,17 @@ public class EventListener implements Na
                 if (proc.processName.equals(targetProcessName)) {
                     android.os.Process.killProcess(proc.pid);
                     break;
                 }
             }
         }
     }
 
-    public static void installApk(final Activity context, NativeJSObject message, EventCallback callback) {
+    public static void installApk(final Activity context, NativeJSObject message, final EventCallback callback) {
         final JSONObject messageData;
 
         // We get the manifest url out of javascript here so we can use it as a checksum
         // in a minute, when a package has been installed.
         String manifestUrl = null;
         String filePath = null;
 
         try {
@@ -232,16 +232,17 @@ public class EventListener implements Na
                         receiver.cleanup();
                     } catch (java.lang.IllegalArgumentException e) {
                         // IllegalArgumentException happens because resultCode is RESULT_CANCELED
                         // when the user presses the Done button in the install confirmation dialog,
                         // even though the install has been successful (and InstallListener already
                         // unregistered the receiver).
                         Log.e(LOGTAG, "error unregistering install receiver: ", e);
                     }
+                    callback.sendError("APK installation cancelled by user");
                 }
             }
         });
     }
 
     private static final int DEFAULT_VERSION_CODE = -1;
 
     public static JSONObject getApkVersions(Activity context, String[] packageNames) {
--- a/mobile/android/base/widget/ActivityChooserModel.java
+++ b/mobile/android/base/widget/ActivityChooserModel.java
@@ -1043,45 +1043,57 @@ public class ActivityChooserModel extend
             }
         }
     }
 
     /**
      * Command for reading the historical records from a file off the UI thread.
      */
     private void readHistoricalDataImpl() {
-        FileInputStream fis = null;
         try {
             GeckoProfile profile = GeckoProfile.get(mContext);
             File f = profile.getFile(mHistoryFileName);
             if (!f.exists()) {
                 // Fall back to the non-profile aware file if it exists...
                 File oldFile = new File(mHistoryFileName);
                 oldFile.renameTo(f);
             }
-            fis = new FileInputStream(f);
+            readHistoricalDataFromStream(new FileInputStream(f));
         } catch (FileNotFoundException fnfe) {
-            try {
-                Distribution dist = new Distribution(mContext);
-                File distFile = dist.getDistributionFile("quickshare/" + mHistoryFileName);
-                if (distFile == null) {
-                    if (DEBUG) {
-                        Log.i(LOG_TAG, "Could not open historical records file: " + mHistoryFileName);
+            final Distribution dist = Distribution.getInstance(mContext);
+            dist.addOnDistributionReadyCallback(new Runnable() {
+                @Override
+                public void run() {
+                    Log.d(LOGTAG, "Running post-distribution task: quickshare.");
+
+                    if (!dist.exists()) {
+                        return;
                     }
-                    return;
+
+                    try {
+                        File distFile = dist.getDistributionFile("quickshare/" + mHistoryFileName);
+                        if (distFile == null) {
+                            if (DEBUG) {
+                                Log.i(LOG_TAG, "Could not open historical records file: " + mHistoryFileName);
+                            }
+                            return;
+                        }
+                        readHistoricalDataFromStream(new FileInputStream(distFile));
+                    } catch (Exception ex) {
+                        if (DEBUG) {
+                            Log.i(LOG_TAG, "Could not open historical records file: " + mHistoryFileName);
+                        }
+                        return;
+                    }
                 }
-                fis = new FileInputStream(distFile);
-            } catch(Exception ex) {
-                if (DEBUG) {
-                    Log.i(LOG_TAG, "Could not open historical records file: " + mHistoryFileName);
-                }
-                return;
-            }
+            });
         }
+    }
 
+    private void readHistoricalDataFromStream(FileInputStream fis) {
         try {
             XmlPullParser parser = Xml.newPullParser();
             parser.setInput(fis, null);
 
             int type = XmlPullParser.START_DOCUMENT;
             while (type != XmlPullParser.END_DOCUMENT && type != XmlPullParser.START_TAG) {
                 type = parser.next();
             }
@@ -1119,19 +1131,19 @@ public class ActivityChooserModel extend
                     Log.i(LOG_TAG, "Read " + readRecord.toString());
                 }
             }
 
             if (DEBUG) {
                 Log.i(LOG_TAG, "Read " + historicalRecords.size() + " historical records.");
             }
         } catch (XmlPullParserException xppe) {
-            Log.e(LOG_TAG, "Error reading historical recrod file: " + mHistoryFileName, xppe);
+            Log.e(LOG_TAG, "Error reading historical record file: " + mHistoryFileName, xppe);
         } catch (IOException ioe) {
-            Log.e(LOG_TAG, "Error reading historical recrod file: " + mHistoryFileName, ioe);
+            Log.e(LOG_TAG, "Error reading historical record file: " + mHistoryFileName, ioe);
         } finally {
             if (fis != null) {
                 try {
                     fis.close();
                 } catch (IOException ioe) {
                     /* ignore */
                 }
             }
@@ -1184,21 +1196,21 @@ public class ActivityChooserModel extend
 
                 serializer.endTag(null, TAG_HISTORICAL_RECORDS);
                 serializer.endDocument();
 
                 if (DEBUG) {
                     Log.i(LOG_TAG, "Wrote " + recordCount + " historical records.");
                 }
             } catch (IllegalArgumentException iae) {
-                Log.e(LOG_TAG, "Error writing historical recrod file: " + mHistoryFileName, iae);
+                Log.e(LOG_TAG, "Error writing historical record file: " + mHistoryFileName, iae);
             } catch (IllegalStateException ise) {
-                Log.e(LOG_TAG, "Error writing historical recrod file: " + mHistoryFileName, ise);
+                Log.e(LOG_TAG, "Error writing historical record file: " + mHistoryFileName, ise);
             } catch (IOException ioe) {
-                Log.e(LOG_TAG, "Error writing historical recrod file: " + mHistoryFileName, ioe);
+                Log.e(LOG_TAG, "Error writing historical record file: " + mHistoryFileName, ioe);
             } finally {
                 mCanReadHistoricalData = true;
                 if (fos != null) {
                     try {
                         fos.close();
                     } catch (IOException e) {
                         /* ignore */
                     }
--- a/mobile/android/modules/WebappManager.jsm
+++ b/mobile/android/modules/WebappManager.jsm
@@ -495,16 +495,22 @@ this.WebappManager = {
           app: apk.app,
           // TODO: figure out why Webapps:InstallApk needs the "from" property.
           from: apk.app.installOrigin,
         };
         sendMessageToJava({
           type: "Webapps:InstallApk",
           filePath: apk.filePath,
           data: msg,
+        }, (data, error) => {
+          if (!!error) {
+            // There's no page to report back to so drop the error.
+            // TODO: we should notify the user about this failure.
+            debug("APK install failed : " + returnError);
+          }
         });
       }
     } else {
       // The user cancelled the notification, so remove the downloaded APKs.
       for (let apk of downloadedApks) {
         try {
           yield OS.file.remove(apk.filePath);
         } catch(ex) {
--- a/mobile/locales/en-US/chrome/region.properties
+++ b/mobile/locales/en-US/chrome/region.properties
@@ -36,16 +36,26 @@ browser.contentHandlers.types.0.uri=http
 # Values for these keys must correspond to the name used in the keys that
 # define each suggested website's details. For example:
 # browser.suggestedsites.list.0=NAME
 # browser.suggestedsites.NAME.title=Displayed name
 # browser.suggestedsites.NAME.url=Website URL
 # browser.suggestedsites.NAME.bgcolor= Color (hex format)
 browser.suggestedsites.list.0=mozilla
 browser.suggestedsites.list.1=fxmarketplace
+browser.suggestedsites.list.2=fxaddons
+browser.suggestedsites.list.3=fxsupport
 
-browser.suggestedsites.mozilla.title=Mozilla
+browser.suggestedsites.mozilla.title=The Mozilla Project
 browser.suggestedsites.mozilla.url=https://www.mozilla.org/en-US/
-browser.suggestedsites.mozilla.bgcolor=#c13832
+browser.suggestedsites.mozilla.bgcolor=#ce4e41
 
 browser.suggestedsites.fxmarketplace.title=Firefox Marketplace
 browser.suggestedsites.fxmarketplace.url=https://marketplace.firefox.com/
-browser.suggestedsites.fxmarketplace.bgcolor=#0095dd
\ No newline at end of file
+browser.suggestedsites.fxmarketplace.bgcolor=#0096dd
+
+browser.suggestedsites.fxaddons.title=Add-ons: Customize Firefox
+browser.suggestedsites.fxaddons.url=https://addons.mozilla.org/en-US/android/
+browser.suggestedsites.fxaddons.bgcolor=#62be06
+
+browser.suggestedsites.fxsupport.title=Firefox Help and Support
+browser.suggestedsites.fxsupport.url=https://support.mozilla.org/en-US/products/mobile
+browser.suggestedsites.fxsupport.bgcolor=#f37c00
--- a/netwerk/mime/nsMimeTypes.h
+++ b/netwerk/mime/nsMimeTypes.h
@@ -142,16 +142,17 @@
 #define TEXT_CACHE_MANIFEST                 "text/cache-manifest"
 
 #define VIDEO_MPEG                          "video/mpeg"
 #define VIDEO_MP4                           "video/mp4"
 #define VIDEO_RAW                           "video/x-raw-yuv"
 #define VIDEO_OGG                           "video/ogg"
 #define VIDEO_WEBM                          "video/webm"
 #define VIDEO_3GPP                          "video/3gpp"
+#define VIDEO_3GPP2                         "video/3gpp2"
 #define APPLICATION_OGG                     "application/ogg"
 
 /* x-uuencode-apple-single. QuickMail made me do this. */
 #define UUENCODE_APPLE_SINGLE               "x-uuencode-apple-single"
 
 /* The standard MIME message-content-encoding values:
  */
 #define ENCODING_7BIT                       "7bit"
--- a/nsprpub/TAG-INFO
+++ b/nsprpub/TAG-INFO
@@ -1,1 +1,1 @@
-NSPR_4_10_6_BETA3
+NSPR_4_10_6_RTM
--- a/nsprpub/config/prdepend.h
+++ b/nsprpub/config/prdepend.h
@@ -5,8 +5,9 @@
 
 /*
  * A dummy header file that is a dependency for all the object files.
  * Used to force a full recompilation of NSPR in Mozilla's Tinderbox
  * depend builds.  See comments in rules.mk.
  */
 
 #error "Do not include this header file."
+
--- a/nsprpub/pr/include/prinit.h
+++ b/nsprpub/pr/include/prinit.h
@@ -26,21 +26,21 @@ PR_BEGIN_EXTERN_C
 /*
 ** NSPR's version is used to determine the likelihood that the version you
 ** used to build your component is anywhere close to being compatible with
 ** what is in the underlying library.
 **
 ** The format of the version string is
 **     "<major version>.<minor version>[.<patch level>] [<Beta>]"
 */
-#define PR_VERSION  "4.10.6 Beta"
+#define PR_VERSION  "4.10.6"
 #define PR_VMAJOR   4
 #define PR_VMINOR   10
 #define PR_VPATCH   6
-#define PR_BETA     PR_TRUE
+#define PR_BETA     PR_FALSE
 
 /*
 ** PRVersionCheck
 **
 ** The basic signature of the function that is called to provide version
 ** checking. The result will be a boolean that indicates the likelihood
 ** that the underling library will perform as the caller expects.
 **
--- a/services/healthreport/docs/dataformat.rst
+++ b/services/healthreport/docs/dataformat.rst
@@ -1559,23 +1559,32 @@ properties:
 translationOpportunityCountsByLanguage
     A mapping from language to count of opportunities to translate that
     language.
 pageTranslatedCountsByLanguage
     A mapping from language to the counts of pages translated from that
     language. Each language entry will be an object containing a "total" member
     along with individual counts for each language translated to.
 
+Other properties:
+
+detectLanguageEnabled
+    Whether automatic language detection is enabled. This is an integer, 0 or 1.
+showTranslationUI
+    Whether the translation feature UI will be shown. This is an integer, 0 or 1.
+
 Example
 ^^^^^^^
 
 ::
 
     "org.mozilla.translation.translation": {
       "_v": 1,
+      "detectLanguageEnabled": 1,
+      "showTranslationUI": 1,
       "translationOpportunityCount": 134,
       "pageTranslatedCount": 6,
       "charactersTranslatedCount": "1126",
       "detectedLanguageChangedBefore": 1,
       "detectedLanguageChangedAfter": 2,
       "translationOpportunityCountsByLanguage": {
         "fr": 100,
         "es": 34
--- a/testing/marionette/client/marionette/tests/unit-tests.ini
+++ b/testing/marionette/client/marionette/tests/unit-tests.ini
@@ -22,8 +22,11 @@ skip = false
 [include:../../../../../dom/mobilemessage/tests/marionette/manifest.ini]
 [include:../../../../../dom/mobileconnection/tests/marionette/manifest.ini]
 [include:../../../../../dom/system/gonk/tests/marionette/manifest.ini]
 [include:../../../../../dom/icc/tests/marionette/manifest.ini]
 [include:../../../../../dom/system/tests/marionette/manifest.ini]
 [include:../../../../../dom/nfc/tests/marionette/manifest.ini]
 [include:../../../../../dom/events/test/marionette/manifest.ini]
 [include:../../../../../dom/wifi/test/marionette/manifest.ini]
+
+; layout tests
+[include:../../../../../layout/base/tests/marionette/manifest.ini]
new file mode 100644
--- /dev/null
+++ b/testing/marionette/client/marionette/www/test_touchcaret.html
@@ -0,0 +1,17 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+   - License, v. 2.0. If a copy of the MPL was not distributed with this
+   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<!DOCTYPE html>
+<html id="html">
+  <head>
+    <title>Bug 960897: Marionette tests for touch caret</title>
+  </head>
+  <body>
+    <div><input id="input" value="ABCDEFGHI"></input></div>
+    <br />
+    <div><textarea name="textarea" id="textarea" rows="4" cols="6">ABCDEFGHI</textarea></div>
+    <br />
+    <div style="width: 10em; height: 2em; word-wrap: break-word; overflow: auto;" contenteditable="true" id="contenteditable">ABCDEFGHI</div>
+  </body>
+</html>
--- a/toolkit/components/passwordmgr/LoginImport.jsm
+++ b/toolkit/components/passwordmgr/LoginImport.jsm
@@ -160,20 +160,17 @@ this.LoginImport.prototype = {
       }
 
       rows = yield connection.execute("SELECT * FROM moz_disabledHosts");
       for (let row of rows) {
         try {
           let id = row.getResultByName("id");
           let hostname = row.getResultByName("hostname");
 
-          this.store.data.disabledHosts.push({
-            id: this.store.data.nextId++,
-            hostname: hostname,
-          });
+          this.store.data.disabledHosts.push(hostname);
         } catch (ex) {
           Cu.reportError("Error importing disabled host: " + ex);
         }
       }
     } finally {
       yield connection.close();
     }
   }),
--- a/toolkit/components/passwordmgr/LoginStore.jsm
+++ b/toolkit/components/passwordmgr/LoginStore.jsm
@@ -262,16 +262,41 @@ LoginStore.prototype = {
     }
     if (!this.data.disabledHosts) {
       this.data.disabledHosts = [];
     }
 
     // Indicate that the current version of the code has touched the file.
     this.data.version = kDataVersion;
 
+    // Due to bug 1019885, invalid data was created by the import process in
+    // Nightly.  This automated procedure fixes the error.  This is provided as
+    // a convenience to Nightly users and can be safely removed after Nightly
+    // users are updated to the new version.
+    let originalDisabledHosts = this.data.disabledHosts;
+    if (originalDisabledHosts.some(hostItem => typeof hostItem != "string")) {
+
+      this.data.disabledHosts = [];
+
+      for (let hostItem of originalDisabledHosts) {
+        // Fix each item if it is in the broken format.
+        if (typeof hostItem != "string") {
+          hostItem = hostItem.hostname;
+        }
+
+        // Ensure we don't create duplicates in the process.
+        if (this.data.disabledHosts.indexOf(hostItem) == -1) {
+          this.data.disabledHosts.push(hostItem);
+        }
+      }
+
+      // Ensure the updated data is saved.
+      this.saveSoon();
+    }
+
     this.dataReady = true;
   },
 
   /**
    * Called when the data changed, this triggers asynchronous serialization.
    */
   saveSoon: function () this._saver.arm(),
 
--- a/toolkit/components/passwordmgr/test/unit/test_module_LoginImport.js
+++ b/toolkit/components/passwordmgr/test/unit/test_module_LoginImport.js
@@ -165,20 +165,18 @@ add_task(function test_import()
              loginDataItem.timeLastUsed == loginInfo.timeLastUsed &&
              loginDataItem.timePasswordChanged == loginInfo.timePasswordChanged &&
              loginDataItem.timesUsed == loginInfo.timesUsed;
     });
   }));
 
   // Verify that disabled hosts have been imported.
   do_check_eq(store.data.disabledHosts.length, 2);
-  do_check_true(store.data.disabledHosts.some(
-                dataItem => dataItem.hostname == "http://www.example.com"));
-  do_check_true(store.data.disabledHosts.some(
-                dataItem => dataItem.hostname == "https://www.example.org"));
+  do_check_true(store.data.disabledHosts.indexOf("http://www.example.com") != -1);
+  do_check_true(store.data.disabledHosts.indexOf("https://www.example.org") != -1);
 });
 
 /**
  * Tests imports of NULL values due to a downgraded database.
  */
 add_task(function test_import_downgraded()
 {
   let store = new LoginStore(getTempFile("test-import-downgraded.json").path);
--- a/toolkit/content/devicestorage.properties
+++ b/toolkit/content/devicestorage.properties
@@ -1,4 +1,4 @@
 # Extensions we recognize for DeviceStorage storage areas
 pictures=*.jpe; *.jpg; *.jpeg; *.gif; *.png; *.bmp;
 music=*.mp3; *.oga; *.ogg; *.m4a; *.m4b; *.m4p; *.m4r; *.3gp; *.mp4; *.m3u; *.pls; *.opus; *.amr; *.wav; *.lcka;
-videos=*.mp4; *.mpeg; *.mpg; *.ogv; *.ogx; *.webm; *.3gp; *.ogg; *.m4v;
+videos=*.mp4; *.mpeg; *.mpg; *.ogv; *.ogx; *.webm; *.3gp; *.3g2; *.ogg; *.m4v;
--- a/toolkit/content/tests/browser/browser_bug295977_autoscroll_overflow.js
+++ b/toolkit/content/tests/browser/browser_bug295977_autoscroll_overflow.js
@@ -4,44 +4,44 @@ function test()
   Services.prefs.setBoolPref(kPrefName_AutoScroll, true);
 
   const expectScrollNone = 0;
   const expectScrollVert = 1;
   const expectScrollHori = 2;
   const expectScrollBoth = 3;
 
   var allTests = [
-    {dataUri: 'data:text/html,<body><style type="text/css">div { display: inline-block; }</style>\
+    {dataUri: 'data:text/html,<html><head><meta charset="utf-8"></head><body><style type="text/css">div { display: inline-block; }</style>\
       <div id="a" style="width: 100px; height: 100px; overflow: hidden;"><div style="width: 200px; height: 200px;"></div></div>\
       <div id="b" style="width: 100px; height: 100px; overflow: auto;"><div style="width: 200px; height: 200px;"></div></div>\
       <div id="c" style="width: 100px; height: 100px; overflow-x: auto; overflow-y: hidden;"><div style="width: 200px; height: 200px;"></div></div>\
       <div id="d" style="width: 100px; height: 100px; overflow-y: auto; overflow-x: hidden;"><div style="width: 200px; height: 200px;"></div></div>\
       <select id="e" style="width: 100px; height: 100px;" multiple="multiple"><option>aaaaaaaaaaaaaaaaaaaaaaaa</option><option>a</option><option>a</option>\
       <option>a</option><option>a</option><option>a</option><option>a</option><option>a</option><option>a</option><option>a</option>\
       <option>a</option><option>a</option><option>a</option><option>a</option><option>a</option><option>a</option><option>a</option></select>\
       <select id="f" style="width: 100px; height: 100px;"><option>a</option><option>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</option><option>a</option>\
       <option>a</option><option>a</option><option>a</option><option>a</option><option>a</option><option>a</option><option>a</option>\
       <option>a</option><option>a</option><option>a</option><option>a</option><option>a</option><option>a</option><option>a</option></select>\
       <div id="g" style="width: 99px; height: 99px; border: 10px solid black; margin: 10px; overflow: auto;"><div style="width: 100px; height: 100px;"></div></div>\
       <div id="h" style="width: 100px; height: 100px; overflow: -moz-hidden-unscrollable;"><div style="width: 200px; height: 200px;"></div></div>\
       <iframe id="iframe" style="display: none;"></iframe>\
-      </body>'},
+      </body></html>'},
     {elem: 'a', expected: expectScrollNone},
     {elem: 'b', expected: expectScrollBoth},
     {elem: 'c', expected: expectScrollHori},
     {elem: 'd', expected: expectScrollVert},
     {elem: 'e', expected: expectScrollVert},
     {elem: 'f', expected: expectScrollNone},
     {elem: 'g', expected: expectScrollBoth},
     {elem: 'h', expected: expectScrollNone},
-    {dataUri: 'data:text/html,<html><body id="i" style="overflow-y: scroll"><div style="height: 2000px"></div>\
+    {dataUri: 'data:text/html,<html><head><meta charset="utf-8"></head><body id="i" style="overflow-y: scroll"><div style="height: 2000px"></div>\
       <iframe id="iframe" style="display: none;"></iframe>\
       </body></html>'},
     {elem: 'i', expected: expectScrollVert}, // bug 695121
-    {dataUri: 'data:text/html,<html><style>html, body { width: 100%; height: 100%; overflow-x: hidden; overflow-y: scroll; }</style>\
+    {dataUri: 'data:text/html,<html><head><meta charset="utf-8"></head><style>html, body { width: 100%; height: 100%; overflow-x: hidden; overflow-y: scroll; }</style>\
       <body id="j"><div style="height: 2000px"></div>\
       <iframe id="iframe" style="display: none;"></iframe>\
       </body></html>'},
     {elem: 'j', expected: expectScrollVert}  // bug 914251
   ];
 
   var doc;
 
@@ -53,24 +53,45 @@ function test()
     }
 
     if (test.dataUri) {
       startLoad(test.dataUri);
       return;
     }
 
     var elem = doc.getElementById(test.elem);
-    // Skip the first callback as it's the same callback that the browser
-    // uses to kick off the scrolling.
-    var skipFrames = 1;
-    var checkScroll = function () {
-      if (skipFrames--) {
+
+    let firstTimestamp = undefined;
+    function checkScroll(timestamp) {
+      if (firstTimestamp === undefined) {
+        firstTimestamp = timestamp;
+      }
+
+      // This value is calculated similarly to the value of the same name in
+      // ClickEventHandler.autoscrollLoop, except here it's cumulative across
+      // all frames after the first one instead of being based only on the
+      // current frame.
+      let timeCompensation = (timestamp - firstTimestamp) / 20;
+      info("timestamp=" + timestamp + " firstTimestamp=" + firstTimestamp +
+           " timeCompensation=" + timeCompensation);
+
+      // Try to wait until enough time has passed to allow the scroll to happen.
+      // autoscrollLoop incrementally scrolls during each animation frame, but
+      // due to how its calculations work, when a frame is very close to the
+      // previous frame, no scrolling may actually occur during that frame.
+      // After 20ms's worth of frames, timeCompensation will be 1, making it
+      // more likely that the accumulated scroll in autoscrollLoop will be >= 1,
+      // although it also depends on acceleration, which here in this test
+      // should be > 1 due to how it synthesizes mouse events below.
+      if (timeCompensation < 1) {
         window.mozRequestAnimationFrame(checkScroll);
         return;
       }
+
+      // Close the autoscroll popup by synthesizing Esc.
       EventUtils.synthesizeKey("VK_ESCAPE", {}, gBrowser.contentWindow);
       var scrollVert = test.expected & expectScrollVert;
       ok((scrollVert && elem.scrollTop > 0) ||
          (!scrollVert && elem.scrollTop == 0),
          test.elem+' should'+(scrollVert ? '' : ' not')+' have scrolled vertically');
       var scrollHori = test.expected & expectScrollHori;
       ok((scrollHori && elem.scrollLeft > 0) ||
          (!scrollHori && elem.scrollLeft == 0),
@@ -78,30 +99,29 @@ function test()
 
       // Before continuing the test, we need to ensure that the IPC
       // message that stops autoscrolling has had time to arrive.
       executeSoon(nextTest);
     };
     EventUtils.synthesizeMouse(elem, 50, 50, { button: 1 },
                                gBrowser.contentWindow);
 
+    // This ensures bug 605127 is fixed: pagehide in an unrelated document
+    // should not cancel the autoscroll.
     var iframe = gBrowser.contentDocument.getElementById("iframe");
     var e = iframe.contentDocument.createEvent("pagetransition");
     e.initPageTransitionEvent("pagehide", true, true, false);
     iframe.contentDocument.dispatchEvent(e);
     iframe.contentDocument.documentElement.dispatchEvent(e);
 
     EventUtils.synthesizeMouse(elem, 100, 100,
                                { type: "mousemove", clickCount: "0" },
                                gBrowser.contentWindow);
-    /*
-     * if scrolling didn’t work, we wouldn’t do any redraws and thus time out.
-     * so request and force redraws to get the chance to check for scrolling at
-     * all.
-     */
+
+    // Start checking for the scroll.
     window.mozRequestAnimationFrame(checkScroll);
   }
 
   waitForExplicitFinish();
 
   nextTest();
 
   function startLoad(dataUri) {
--- a/toolkit/devtools/pretty-fast/pretty-fast.js
+++ b/toolkit/devtools/pretty-fast/pretty-fast.js
@@ -1,8 +1,9 @@
+/* -*- Mode: js; tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2; fill-column: 80 -*- */
 /*
  * Copyright 2013 Mozilla Foundation and contributors
  * Licensed under the New BSD license. See LICENSE.md or:
  * http://opensource.org/licenses/BSD-2-Clause
  */
 (function (root, factory) {
   if (typeof define === 'function' && define.amd) {
     define(factory);
@@ -319,33 +320,34 @@
         return true;
       }
       if (ltt == ";") {
         return true;
       }
 
       var ltk = lastToken.type.keyword;
       if (ltk != null) {
-        if (ltk == "break" || ltk == "continue") {
+        if (ltk == "break" || ltk == "continue" || ltk == "return") {
           return token.type.type != ";";
         }
         if (ltk != "debugger"
             && ltk != "null"
             && ltk != "true"
             && ltk != "false"
             && ltk != "this"
             && ltk != "default") {
           return true;
         }
       }
 
       if (ltt == ")" && (token.type.type != ")"
                          && token.type.type != "]"
                          && token.type.type != ";"
-                         && token.type.type != ",")) {
+                         && token.type.type != ","
+                         && token.type.type != ".")) {
         return true;
       }
     }
 
     if (token.type.isAssign) {
       return true;
     }
     if (token.type.binop != null) {
@@ -552,16 +554,17 @@
   function belongsOnStack(token) {
     var ttt = token.type.type;
     var ttk = token.type.keyword;
     return ttt == "{"
       || ttt == "("
       || ttt == "["
       || ttt == "?"
       || ttk == "do"
+      || ttk == "switch"
       || ttk == "case"
       || ttk == "default";
   }
 
   /**
    * Returns true if the given token should cause us to pop the stack.
    */
   function shouldStackPop(token, stack) {
@@ -584,17 +587,19 @@
       || (tokenType == "]" && stack[stack.length - 1] == "[\n")
   }
 
   /**
    * Returns true if the given token should cause us to increment the indent
    * level.
    */
   function incrementsIndent(token) {
-    return token.type.type == "{" || token.isArrayLiteral;
+    return token.type.type == "{"
+      || token.isArrayLiteral
+      || token.type.keyword == "switch";
   }
 
   /**
    * Add a comment to the pretty printed code.
    *
    * @param Function write
    *        The function to write pretty printed code to the result SourceNode.
    * @param Number indentLevel
@@ -719,16 +724,17 @@
     // Strings that go on the stack:
     //
     //   - "{"
     //   - "("
     //   - "["
     //   - "[\n"
     //   - "do"
     //   - "?"
+    //   - "switch"
     //   - "case"
     //   - "default"
     //
     // The difference between "[" and "[\n" is that "[\n" is used when we are
     // treating "[" and "]" tokens as line delimiters and should increment and
     // decrement the indent level when we find them.
     var stack = [];
 
@@ -751,17 +757,18 @@
       locations: true,
       sourceFile: options.url,
       onComment: function (block, text, start, end, startLoc, endLoc) {
         if (lastToken) {
           commentQueue.push({
             block: block,
             text: text,
             line: startLoc.line,
-            column: startLoc.column
+            column: startLoc.column,
+            trailing: lastToken.endLoc.line == startLoc.line
           });
         } else {
           addComment(write, indentLevel, options, block, text, startLoc.line,
                      startLoc.column);
           addedNewline = true;
         }
       }
     });
@@ -786,25 +793,36 @@
           stack.push("[\n");
         } else {
           stack.push(ttt || ttk);
         }
       }
 
       if (decrementsIndent(ttt, stack)) {
         indentLevel--;
+        if (ttt == "}"
+            && stack.length > 1
+            && stack[stack.length - 2] == "switch") {
+          indentLevel--;
+        }
       }
 
       prependWhiteSpace(token, lastToken, addedNewline, write, options,
                         indentLevel, stack);
       addToken(token, write, options);
-      addedNewline = appendNewline(token, write, stack);
+      if (commentQueue.length == 0 || !commentQueue[0].trailing) {
+        addedNewline = appendNewline(token, write, stack);
+      }
 
       if (shouldStackPop(token, stack)) {
         stack.pop();
+        if (token == "}" && stack.length
+            && stack[stack.length - 1] == "switch") {
+          stack.pop();
+        }
       }
 
       if (incrementsIndent(token)) {
         indentLevel++;
       }
 
       // Acorn's tokenizer re-uses tokens, so we have to copy the last token on
       // every iteration. We follow acorn's lead here, and reuse the lastToken
@@ -820,23 +838,27 @@
       lastToken.endLoc.line = token.endLoc.line;
       lastToken.endLoc.column = token.endLoc.column;
       lastToken.type = token.type;
       lastToken.value = token.value;
       lastToken.isArrayLiteral = token.isArrayLiteral;
 
       // Apply all the comments that have been queued up.
       if (commentQueue.length) {
-        if (!addedNewline) {
+        if (!addedNewline && !commentQueue[0].trailing) {
           write("\n");
         }
+        if (commentQueue[0].trailing) {
+          write(" ");
+        }
         for (var i = 0, n = commentQueue.length; i < n; i++) {
           var comment = commentQueue[i];
-          addComment(write, indentLevel, options, comment.block, comment.text,
-                     comment.line, comment.column);
+          var commentIndentLevel = commentQueue[i].trailing ? 0 : indentLevel;
+          addComment(write, commentIndentLevel, options, comment.block,
+                     comment.text, comment.line, comment.column);
         }
         addedNewline = true;
         commentQueue.splice(0, commentQueue.length);
       }
     }
 
     return result.toStringWithSourceMap({ file: options.url });
   };
--- a/toolkit/devtools/pretty-fast/tests/unit/test.js
+++ b/toolkit/devtools/pretty-fast/tests/unit/test.js
@@ -1,8 +1,12 @@
+/* -*- Mode: js; tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2; fill-column: 80 -*- */
+
+"use strict";
+
 /*
  * Copyright 2013 Mozilla Foundation and contributors
  * Licensed under the New BSD license. See LICENSE.md or:
  * http://opensource.org/licenses/BSD-2-Clause
  */
 var prettyFast = this.prettyFast || require("./pretty-fast");
 
 var testCases = [
@@ -341,21 +345,21 @@ var testCases = [
     input: "bar?baz:bang;",
     output: "bar ? baz : bang;\n"
   },
 
   {
     name: "Switch statements",
     input: "switch(x){case a:foo();break;default:bar()}",
     output: "switch (x) {\n" +
-            "case a:\n" +
-            "  foo();\n" +
-            "  break;\n" +
-            "default:\n" +
-            "  bar()\n" +
+            "  case a:\n" +
+            "    foo();\n" +
+            "    break;\n" +
+            "  default:\n" +
+            "    bar()\n" +
             "}\n"
   },
 
   {
     name: "Multiple single line comments",
     input: "function f() {\n" +
            "  // a\n" +
            "  // b\n" +
@@ -476,16 +480,54 @@ var testCases = [
   },
 
   {
     name: "Escaping null character in strings",
     input: "'\\0'\n",
     output: "'\\0'\n"
   },
 
+  {
+    name: "Bug 977082 - space between grouping operator and dot notation",
+    input: "JSON.stringify(3).length;\n" +
+           "([1,2,3]).length;\n" +
+           "(new Date()).toLocaleString();\n",
+    output: "JSON.stringify(3).length;\n" +
+            "([1,\n" +
+            "2,\n" +
+            "3]).length;\n" +
+            "(new Date()).toLocaleString();\n"
+  },
+
+  {
+    name: "Bug 975477 don't move end of line comments to next line",
+    input: "switch (request.action) {\n" +
+           "  case 'show': //$NON-NLS-0$\n" +
+           "    if (localStorage.hideicon !== 'true') { //$NON-NLS-0$\n" +
+           "      chrome.pageAction.show(sender.tab.id);\n" +
+           "    }\n" +
+           "    break;\n" +
+           "  default:\n" +
+           "    console.warn('unknown request'); //$NON-NLS-0$\n" +
+           "    // don't respond if you don't understand the message.\n" +
+           "    return;\n" +
+           "}\n",
+    output: "switch (request.action) {\n" +
+            "  case 'show': //$NON-NLS-0$\n" +
+            "    if (localStorage.hideicon !== 'true') { //$NON-NLS-0$\n" +
+            "      chrome.pageAction.show(sender.tab.id);\n" +
+            "    }\n" +
+            "    break;\n" +
+            "  default:\n" +
+            "    console.warn('unknown request'); //$NON-NLS-0$\n" +
+            "    // don't respond if you don't understand the message.\n" +
+            "    return;\n" +
+            "}\n"
+  }
+
 ];
 
 var sourceMap = this.sourceMap || require("source-map");
 
 function run_test() {
   testCases.forEach(function (test) {
     console.log(test.name);
 
--- a/toolkit/devtools/server/actors/inspector.js
+++ b/toolkit/devtools/server/actors/inspector.js
@@ -57,16 +57,18 @@ const {Arg, Option, method, RetVal, type
 const {LongStringActor, ShortLongString} = require("devtools/server/actors/string");
 const {Promise: promise} = Cu.import("resource://gre/modules/Promise.jsm", {});
 const object = require("sdk/util/object");
 const events = require("sdk/event/core");
 const {Unknown} = require("sdk/platform/xpcom");
 const {Class} = require("sdk/core/heritage");
 const {PageStyleActor} = require("devtools/server/actors/styles");
 const {HighlighterActor} = require("devtools/server/actors/highlighter");
+const {getLayoutChangesObserver, releaseLayoutChangesObserver} =
+  require("devtools/server/actors/layout");
 
 const FONT_FAMILY_PREVIEW_TEXT = "The quick brown fox jumps over the lazy dog";
 const FONT_FAMILY_PREVIEW_TEXT_SIZE = 20;
 const PSEUDO_CLASSES = [":hover", ":active", ":focus"];
 const HIDDEN_CLASS = "__fx-devtools-hide-shortcut__";
 const XHTML_NS = "http://www.w3.org/1999/xhtml";
 const IMAGE_FETCHING_TIMEOUT = 500;
 // The possible completions to a ':' with added score to give certain values
@@ -172,16 +174,20 @@ exports.setValueSummaryLength = function
  */
 var NodeActor = exports.NodeActor = protocol.ActorClass({
   typeName: "domnode",
 
   initialize: function(walker, node) {
     protocol.Actor.prototype.initialize.call(this, null);
     this.walker = walker;
     this.rawNode = node;
+
+    // Storing the original display of the node, to track changes when reflows
+    // occur
+    this.wasDisplayed = this.isDisplayed;
   },
 
   toString: function() {
     return "[NodeActor " + this.actorID + " for " + this.rawNode.toString() + "]";
   },
 
   /**
    * Instead of storing a connection object, the NodeActor gets its connection
@@ -222,16 +228,18 @@ var NodeActor = exports.NodeActor = prot
       // doctype attributes
       name: this.rawNode.name,
       publicId: this.rawNode.publicId,
       systemId: this.rawNode.systemId,
 
       attrs: this.writeAttrs(),
 
       pseudoClassLocks: this.writePseudoClassLocks(),
+
+      isDisplayed: this.isDisplayed,
     };
 
     if (this.isDocumentElement()) {
       form.isDocumentElement = true;
     }
 
     if (this.rawNode.nodeValue) {
       // We only include a short version of the value if it's longer than
@@ -242,16 +250,39 @@ var NodeActor = exports.NodeActor = prot
       } else {
         form.shortValue = this.rawNode.nodeValue;
       }
     }
 
     return form;
   },
 
+  get computedStyle() {
+    if (Cu.isDeadWrapper(this.rawNode) ||
+        this.rawNode.nodeType !== Ci.nsIDOMNode.ELEMENT_NODE ||
+        !this.rawNode.ownerDocument ||
+        !this.rawNode.ownerDocument.defaultView) {
+      return null;
+    }
+    return this.rawNode.ownerDocument.defaultView.getComputedStyle(this.rawNode);
+  },
+
+  /**
+   * Is the node's display computed style value other than "none"
+   */
+  get isDisplayed() {
+    let style = this.computedStyle;
+    if (!style) {
+      // Consider all non-element nodes as displayed
+      return true;
+    } else {
+      return style.display !== "none";
+    }
+  },
+
   writeAttrs: function() {
     if (!this.rawNode.attributes) {
       return undefined;
     }
     return [{namespace: attr.namespace, name: attr.name, value: attr.value }
             for (attr of this.rawNode.attributes)];
   },
 
@@ -543,16 +574,22 @@ let NodeFront = protocol.FrontClass(Node
 
   get attributes() this._form.attrs,
 
   get pseudoClassLocks() this._form.pseudoClassLocks || [],
   hasPseudoClassLock: function(pseudo) {
     return this.pseudoClassLocks.some(locked => locked === pseudo);
   },
 
+  get isDisplayed() {
+    // The NodeActor's form contains the isDisplayed information as a boolean
+    // starting from FF32. Before that, the property is missing
+    return "isDisplayed" in this._form ? this._form.isDisplayed : true;
+  },
+
   getNodeValue: protocol.custom(function() {
     if (!this.incompleteValue) {
       return delayedResolve(new ShortLongString(this.shortValue));
     } else {
       return this._getNodeValue();
     }
   }, {
     impl: "_getNodeValue"
@@ -831,16 +868,20 @@ var WalkerActor = protocol.ActorClass({
       type: "pickerNodeHovered",
       node: Arg(0, "disconnectedNode")
     },
     "highlighter-ready" : {
       type: "highlighter-ready"
     },
     "highlighter-hide" : {
       type: "highlighter-hide"
+    },
+    "display-change" : {
+      type: "display-change",
+      nodes: Arg(0, "array:domnode")
     }
   },
 
   /**
    * Create the WalkerActor
    * @param DebuggerServerConnection conn
    *    The server connection.
    */
@@ -870,16 +911,20 @@ var WalkerActor = protocol.ActorClass({
     this.onFrameUnload = this.onFrameUnload.bind(this);
 
     events.on(tabActor, "will-navigate", this.onFrameUnload);
     events.on(tabActor, "navigate", this.onFrameLoad);
 
     // Ensure that the root document node actor is ready and
     // managed.
     this.rootNode = this.document();
+
+    this.reflowObserver = getLayoutChangesObserver(this.tabActor);
+    this._onReflows = this._onReflows.bind(this);
+    this.reflowObserver.on("reflows", this._onReflows);
   },
 
   // Returns the JSON representation of this object over the wire.
   form: function() {
     return {
       actor: this.actorID,
       root: this.rootNode.form()
     }
@@ -889,27 +934,32 @@ var WalkerActor = protocol.ActorClass({
     return "[WalkerActor " + this.actorID + "]";
   },
 
   destroy: function() {
     this._hoveredNode = null;
     this.clearPseudoClassLocks();
     this._activePseudoClassLocks = null;
     this.rootDoc = null;
+
+    this.reflowObserver.off("reflows", this._onReflows);
+    this.reflowObserver = null;
+    releaseLayoutChangesObserver(this.tabActor);
+
     events.emit(this, "destroyed");
     protocol.Actor.prototype.destroy.call(this);
   },
 
   release: method(function() {}, { release: true }),
 
   unmanage: function(actor) {
     if (actor instanceof NodeActor) {
       if (this._activePseudoClassLocks &&
           this._activePseudoClassLocks.has(actor)) {
-        this.clearPsuedoClassLocks(actor);
+        this.clearPseudoClassLocks(actor);
       }
       this._refMap.delete(actor.rawNode);
     }
     protocol.Actor.prototype.unmanage.call(this, actor);
   },
 
   _ref: function(node) {
     let actor = this._refMap.get(node);
@@ -923,16 +973,34 @@ var WalkerActor = protocol.ActorClass({
     this._refMap.set(node, actor);
 
     if (node.nodeType === Ci.nsIDOMNode.DOCUMENT_NODE) {
       this._watchDocument(actor);
     }
     return actor;
   },
 
+  _onReflows: function(reflows) {
+    // Going through the nodes the walker knows about, see which ones have
+    // had their display changed and send a display-change event if any
+    let changes = [];
+    for (let [node, actor] of this._refMap) {
+      let isDisplayed = actor.isDisplayed;
+      if (isDisplayed !== actor.wasDisplayed) {
+        changes.push(actor);
+        // Updating the original value
+        actor.wasDisplayed = isDisplayed;
+      }
+    }
+
+    if (changes.length) {
+      events.emit(this, "display-change", changes);
+    }
+  },
+
   /**
    * This is kept for backward-compatibility reasons with older remote targets.
    * Targets prior to bug 916443.
    *
    * pick/cancelPick are used to pick a node on click on the content
    * document. But in their implementation prior to bug 916443, they don't allow
    * highlighting on hover.
    * The client-side now uses the highlighter actor's pick and cancelPick
--- a/uriloader/exthandler/nsExternalHelperAppService.cpp
+++ b/uriloader/exthandler/nsExternalHelperAppService.cpp
@@ -552,16 +552,17 @@ static nsExtraMimeTypeEntry extraMimeEnt
   { VIDEO_WEBM, "webm", "Web Media Video" },
   { AUDIO_WEBM, "webm", "Web Media Audio" },
   { AUDIO_MP3, "mp3", "MPEG Audio" },
   { VIDEO_MP4, "mp4", "MPEG-4 Video" },
   { AUDIO_MP4, "m4a", "MPEG-4 Audio" },
   { VIDEO_RAW, "yuv", "Raw YUV Video" },
   { AUDIO_WAV, "wav", "Waveform Audio" },
   { VIDEO_3GPP, "3gpp,3gp", "3GPP Video" },
+  { VIDEO_3GPP2,"3g2", "3GPP2 Video" },
   { AUDIO_MIDI, "mid", "Standard MIDI Audio" }
 };
 
 #undef MAC_TYPE
 
 /**
  * File extensions for which decoding should be disabled.
  * NOTE: These MUST be lower-case and ASCII.
--- a/widget/windows/winrt/MetroWidget.cpp
+++ b/widget/windows/winrt/MetroWidget.cpp
@@ -34,16 +34,17 @@
 #include "nsExceptionHandler.h"
 #endif
 #include "UIABridgePrivate.h"
 #include "WinMouseScrollHandler.h"
 #include "InputData.h"
 #include "mozilla/TextEvents.h"
 #include "mozilla/TouchEvents.h"
 #include "mozilla/MiscEvents.h"
+#include "gfxPrefs.h"
 
 using namespace Microsoft::WRL;
 using namespace Microsoft::WRL::Wrappers;
 
 using namespace mozilla;
 using namespace mozilla::widget;
 using namespace mozilla::layers;
 using namespace mozilla::widget::winrt;