Merge b2g-inbound to m-c a=merge CLOSED TREE
authorWes Kocher <wkocher@mozilla.com>
Mon, 30 Mar 2015 19:34:41 -0700
changeset 236624 8af276ab8636bbe330a95ce38bb223af17d44a1a
parent 236590 6dedce1ca673aa1ef3d9a0ce786e96664a38917b (current diff)
parent 236623 d80287e80eb7f4af2f49b4732fcbec5b84f5ef35 (diff)
child 236625 9ca3be4ef7802b95c4d444c9566567abaecd6fee
child 236730 e19d1eac741814964894c45c94c053cb60313c79
child 236768 df1e0d157c88207c403dfd81ae79b2b652dad8cf
push id57724
push userkwierso@gmail.com
push dateTue, 31 Mar 2015 02:39:27 +0000
treeherdermozilla-inbound@9ca3be4ef780 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmerge
milestone40.0a1
first release with
nightly linux32
8af276ab8636 / 40.0a1 / 20150331030204 / files
nightly linux64
8af276ab8636 / 40.0a1 / 20150331030204 / files
nightly mac
8af276ab8636 / 40.0a1 / 20150331030204 / files
nightly win32
8af276ab8636 / 40.0a1 / 20150331030204 / files
nightly win64
8af276ab8636 / 40.0a1 / 20150331030204 / files
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
releases
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Merge b2g-inbound to m-c a=merge CLOSED TREE
testing/taskcluster/tasks/builds/b2g_dolphin_user.yml
--- a/b2g/app/moz.build
+++ b/b2g/app/moz.build
@@ -53,17 +53,17 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk
     OS_LIBS += [
         'ui',
         'EGL',
         'hardware_legacy',
         'hardware',
         'cutils',
     ]
     OS_LIBS += CONFIG['MOZ_ZLIB_LIBS']
-    if CONFIG['ANDROID_VERSION'] in ('17', '18', '19', '21'):
+    if CONFIG['ANDROID_VERSION'] in ('17', '18', '19', '21', '22'):
         OS_LIBS += [
             'gui',
             'suspend',
         ]
     OS_LIBS += [
         'binder',
         'utils',
     ]
--- a/b2g/config/dolphin/sources.xml
+++ b/b2g/config/dolphin/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="ef937d1aca7c4cf89ecb5cc43ae8c21c2000a9db">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="be25b16efa19bab8d54be08f8fe45dcc93bf93d0"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="a249df8f4c84fe0a139741f05a534d36996ea7b8"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="2aa4a75c63cd6e93870a8bddbba45f863cbfd9a3"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ed2cf97a6c37a4bbd0bbbbffe06ec7136d8c79ff"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <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="47503b5ec80f00630548023efb5ea4f830e1527d"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="d99ab92d0b829a6c78b5284481d5b236d3901f11"/>
   <!-- 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="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"/>
   <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="a1e239a0bb5cd1d69680bf1075883aa9a7bf2429"/>
   <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="c7931763d41be602407ed9d71e2c0292c6597e00"/>
   <project groups="linux,x86" name="platform/prebuilts/python/linux-x86/2.7.5" path="prebuilts/python/linux-x86/2.7.5" revision="83760d213fb3bec7b4117d266fcfbf6fe2ba14ab"/>
   <project name="device/common" path="device/common" revision="6a2995683de147791e516aae2ccb31fdfbe2ad30"/>
--- a/b2g/config/emulator-ics/sources.xml
+++ b/b2g/config/emulator-ics/sources.xml
@@ -14,17 +14,17 @@
   <!--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="173b3104bfcbd23fc9dccd4b0035fc49aae3d444">
     <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="be25b16efa19bab8d54be08f8fe45dcc93bf93d0"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="a249df8f4c84fe0a139741f05a534d36996ea7b8"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="2aa4a75c63cd6e93870a8bddbba45f863cbfd9a3"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="93f9ba577f68d772093987c2f1c0a4ae293e1802"/>
   <project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="527d1c939ee57deb7192166e56e2a3fffa8cb087"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ed2cf97a6c37a4bbd0bbbbffe06ec7136d8c79ff"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="34ea6163f9f0e0122fb0bb03607eccdca31ced7a"/>
   <!-- Stock Android things -->
   <project name="platform/abi/cpp" path="abi/cpp" revision="dd924f92906085b831bf1cbbc7484d3c043d613c"/>
--- 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="4efd19d199ae52656604f794c5a77518400220fd">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="be25b16efa19bab8d54be08f8fe45dcc93bf93d0"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="a249df8f4c84fe0a139741f05a534d36996ea7b8"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="2aa4a75c63cd6e93870a8bddbba45f863cbfd9a3"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ed2cf97a6c37a4bbd0bbbbffe06ec7136d8c79ff"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="47503b5ec80f00630548023efb5ea4f830e1527d"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="d99ab92d0b829a6c78b5284481d5b236d3901f11"/>
   <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="ef937d1aca7c4cf89ecb5cc43ae8c21c2000a9db">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="be25b16efa19bab8d54be08f8fe45dcc93bf93d0"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="a249df8f4c84fe0a139741f05a534d36996ea7b8"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="2aa4a75c63cd6e93870a8bddbba45f863cbfd9a3"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ed2cf97a6c37a4bbd0bbbbffe06ec7136d8c79ff"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <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="47503b5ec80f00630548023efb5ea4f830e1527d"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="d99ab92d0b829a6c78b5284481d5b236d3901f11"/>
   <!-- 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-l/sources.xml
+++ b/b2g/config/emulator-l/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="52775e03a2d8532429dff579cb2cd56718e488c3">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="be25b16efa19bab8d54be08f8fe45dcc93bf93d0"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="a249df8f4c84fe0a139741f05a534d36996ea7b8"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="2aa4a75c63cd6e93870a8bddbba45f863cbfd9a3"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ed2cf97a6c37a4bbd0bbbbffe06ec7136d8c79ff"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <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="47503b5ec80f00630548023efb5ea4f830e1527d"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="d99ab92d0b829a6c78b5284481d5b236d3901f11"/>
   <!-- Stock Android things -->
   <project groups="pdk,linux" name="platform/prebuilts/clang/linux-x86/host/3.5" path="prebuilts/clang/linux-x86/host/3.5" revision="50d1ca4ab8add54523b7bc692860d57e8ee4c0d1"/>
   <project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.8" path="prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.8" revision="fb3845864573857677f9b500040a8f011eaf5078"/>
   <project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.8" revision="354496e8eddd28c743d8e02c02eeab02958367e6"/>
   <project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8" path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8" revision="b37c91354272b7413a0dc058b7445e677921d39e"/>
   <project groups="pdk,linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6" revision="a227c92e0170bcf2296a63386956946b0dd78ca7"/>
   <project groups="pdk,linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8" revision="884626610186b6dbea52cec5194b1c4bcfe1cb98"/>
   <project groups="pdk,linux,x86" name="platform/prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.8" path="prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.8" revision="29f9b82faa1af9730f52e933dca848546cbea84c"/>
--- a/b2g/config/emulator/sources.xml
+++ b/b2g/config/emulator/sources.xml
@@ -14,17 +14,17 @@
   <!--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="173b3104bfcbd23fc9dccd4b0035fc49aae3d444">
     <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="be25b16efa19bab8d54be08f8fe45dcc93bf93d0"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="a249df8f4c84fe0a139741f05a534d36996ea7b8"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="2aa4a75c63cd6e93870a8bddbba45f863cbfd9a3"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="93f9ba577f68d772093987c2f1c0a4ae293e1802"/>
   <project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="527d1c939ee57deb7192166e56e2a3fffa8cb087"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ed2cf97a6c37a4bbd0bbbbffe06ec7136d8c79ff"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="34ea6163f9f0e0122fb0bb03607eccdca31ced7a"/>
   <!-- Stock Android things -->
   <project name="platform/abi/cpp" path="abi/cpp" revision="dd924f92906085b831bf1cbbc7484d3c043d613c"/>
--- a/b2g/config/flame-kk/sources.xml
+++ b/b2g/config/flame-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="ef937d1aca7c4cf89ecb5cc43ae8c21c2000a9db">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="be25b16efa19bab8d54be08f8fe45dcc93bf93d0"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="a249df8f4c84fe0a139741f05a534d36996ea7b8"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="2aa4a75c63cd6e93870a8bddbba45f863cbfd9a3"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ed2cf97a6c37a4bbd0bbbbffe06ec7136d8c79ff"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <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="47503b5ec80f00630548023efb5ea4f830e1527d"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="d99ab92d0b829a6c78b5284481d5b236d3901f11"/>
   <!-- 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="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"/>
   <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="a1e239a0bb5cd1d69680bf1075883aa9a7bf2429"/>
   <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="c7931763d41be602407ed9d71e2c0292c6597e00"/>
   <project groups="linux,x86" name="platform/prebuilts/python/linux-x86/2.7.5" path="prebuilts/python/linux-x86/2.7.5" revision="a32003194f707f66a2d8cdb913ed1869f1926c5d"/>
   <project name="device/common" path="device/common" revision="96d4d2006c4fcb2f19a3fa47ab10cb409faa017b"/>
--- 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="4efd19d199ae52656604f794c5a77518400220fd">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="be25b16efa19bab8d54be08f8fe45dcc93bf93d0"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="a249df8f4c84fe0a139741f05a534d36996ea7b8"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="2aa4a75c63cd6e93870a8bddbba45f863cbfd9a3"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ed2cf97a6c37a4bbd0bbbbffe06ec7136d8c79ff"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="47503b5ec80f00630548023efb5ea4f830e1527d"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="d99ab92d0b829a6c78b5284481d5b236d3901f11"/>
   <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": "be25b16efa19bab8d54be08f8fe45dcc93bf93d0", 
+        "git_revision": "a249df8f4c84fe0a139741f05a534d36996ea7b8", 
         "remote": "https://git.mozilla.org/releases/gaia.git", 
         "branch": ""
     }, 
-    "revision": "1b729ede1a2a5333b6dd65bb15ba75e4a2d25282", 
+    "revision": "12cf6177ae0c2f63c267fc816d6c18c337b24a61", 
     "repo_path": "integration/gaia-central"
 }
--- 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="4efd19d199ae52656604f794c5a77518400220fd">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="be25b16efa19bab8d54be08f8fe45dcc93bf93d0"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="a249df8f4c84fe0a139741f05a534d36996ea7b8"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="2aa4a75c63cd6e93870a8bddbba45f863cbfd9a3"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ed2cf97a6c37a4bbd0bbbbffe06ec7136d8c79ff"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="47503b5ec80f00630548023efb5ea4f830e1527d"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="d99ab92d0b829a6c78b5284481d5b236d3901f11"/>
   <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/nexus-5-l/sources.xml
+++ b/b2g/config/nexus-5-l/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="52775e03a2d8532429dff579cb2cd56718e488c3">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="be25b16efa19bab8d54be08f8fe45dcc93bf93d0"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="a249df8f4c84fe0a139741f05a534d36996ea7b8"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="2aa4a75c63cd6e93870a8bddbba45f863cbfd9a3"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ed2cf97a6c37a4bbd0bbbbffe06ec7136d8c79ff"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <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="47503b5ec80f00630548023efb5ea4f830e1527d"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="d99ab92d0b829a6c78b5284481d5b236d3901f11"/>
   <!-- Stock Android things -->
   <project groups="pdk,linux" name="platform/prebuilts/clang/linux-x86/host/3.5" path="prebuilts/clang/linux-x86/host/3.5" revision="50d1ca4ab8add54523b7bc692860d57e8ee4c0d1"/>
   <project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.8" path="prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.8" revision="fb3845864573857677f9b500040a8f011eaf5078"/>
   <project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.8" revision="354496e8eddd28c743d8e02c02eeab02958367e6"/>
   <project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8" path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8" revision="b37c91354272b7413a0dc058b7445e677921d39e"/>
   <project groups="pdk,linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6" revision="a227c92e0170bcf2296a63386956946b0dd78ca7"/>
   <project groups="pdk,linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8" revision="884626610186b6dbea52cec5194b1c4bcfe1cb98"/>
   <project groups="pdk,linux,x86" name="platform/prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.8" path="prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.8" revision="29f9b82faa1af9730f52e933dca848546cbea84c"/>
--- a/configure.in
+++ b/configure.in
@@ -283,17 +283,17 @@ if test -n "$gonkdir" ; then
         MOZ_OMX_ENCODER=1
         AC_DEFINE(MOZ_OMX_ENCODER)
         MOZ_AUDIO_OFFLOAD=1
         MOZ_SECUREELEMENT=1
         AC_SUBST(MOZ_AUDIO_OFFLOAD)
         AC_DEFINE(MOZ_AUDIO_OFFLOAD)
         MOZ_FMP4=1
         ;;
-    21)
+    21|22)
         GONK_INCLUDES="-I$gonkdir/frameworks/native/include -I$gonkdir/frameworks/av/include -I$gonkdir/frameworks/av/include/media -I$gonkdir/frameworks/av/include/camera -I$gonkdir/frameworks/native/include/media/openmax -I$gonkdir/frameworks/av/media/libstagefright/include"
         MOZ_AUDIO_OFFLOAD=1
         MOZ_OMX_DECODER=1
         MOZ_OMX_ENCODER=1
         AC_DEFINE(MOZ_OMX_ENCODER)
         AC_SUBST(MOZ_AUDIO_OFFLOAD)
         AC_DEFINE(MOZ_AUDIO_OFFLOAD)
         MOZ_FMP4=
--- a/dom/devicestorage/DeviceStorage.h
+++ b/dom/devicestorage/DeviceStorage.h
@@ -329,16 +329,18 @@ private:
                                                   nsAString& aOutStoragePath);
   already_AddRefed<nsDOMDeviceStorage>
     GetStorageByName(const nsAString &aStorageName);
 
   nsCOMPtr<nsIPrincipal> mPrincipal;
 
   bool mIsWatchingFile;
   bool mAllowedToWatchFile;
+  bool mIsDefaultLocation;
+  void DispatchDefaultChangeEvent();
 
   nsresult Notify(const char* aReason, class DeviceStorageFile* aFile);
 
   friend class WatchFileEvent;
   friend class DeviceStorageRequest;
 
   static mozilla::StaticAutoPtr<nsTArray<nsString>> sVolumeNameCache;
 
--- a/dom/devicestorage/nsDeviceStorage.cpp
+++ b/dom/devicestorage/nsDeviceStorage.cpp
@@ -71,16 +71,17 @@
 #include "nsIVolumeService.h"
 #endif
 
 #define DEVICESTORAGE_PROPERTIES \
   "chrome://global/content/devicestorage.properties"
 #define DEFAULT_THREAD_TIMEOUT_MS 30000
 #define PREF_STORAGE_WRITABLE_NAME \
   "device.storage.writable.name"
+#define STORAGE_CHANGE_EVENT "change"
 
 using namespace mozilla;
 using namespace mozilla::dom;
 using namespace mozilla::dom::devicestorage;
 using namespace mozilla::ipc;
 
 #include "nsDirectoryServiceDefs.h"
 
@@ -3361,16 +3362,18 @@ nsDOMDeviceStorage::Init(nsPIDOMWindow* 
 
   MOZ_ASSERT(aWindow);
 
   SetRootDirectoryForType(aType, aVolName);
   if (!mRootDirectory) {
     return NS_ERROR_NOT_AVAILABLE;
   }
   if (!mStorageName.IsEmpty()) {
+    Preferences::AddStrongObserver(this, PREF_STORAGE_WRITABLE_NAME);
+    mIsDefaultLocation = Default();
     RegisterForSDCardChanges(this);
 
 #ifdef MOZ_WIDGET_GONK
     if (DeviceStorageTypeChecker::IsVolumeBased(mStorageType)) {
       nsCOMPtr<nsIVolumeService> vs = do_GetService(NS_VOLUMESERVICE_CONTRACTID);
       if (NS_WARN_IF(!vs)) {
         return NS_ERROR_FAILURE;
       }
@@ -3434,16 +3437,17 @@ nsDOMDeviceStorage::Shutdown()
   MOZ_ASSERT(NS_IsMainThread());
 
   if (mFileSystem) {
     mFileSystem->Shutdown();
     mFileSystem = nullptr;
   }
 
   if (!mStorageName.IsEmpty()) {
+    Preferences::RemoveObserver(this, PREF_STORAGE_WRITABLE_NAME);
     UnregisterForSDCardChanges(this);
   }
 
   nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService();
   obs->RemoveObserver(this, kFileWatcherUpdate);
   obs->RemoveObserver(this, "disk-space-watcher");
 }
 
@@ -4325,16 +4329,44 @@ nsDOMDeviceStorage::EnumerateInternal(co
     return cursor.forget();
   }
 
   nsContentPermissionUtils::AskPermission(r, win);
 
   return cursor.forget();
 }
 
+void
+nsDOMDeviceStorage::DispatchDefaultChangeEvent()
+{
+  nsAdoptingString DefaultLocation;
+  GetDefaultStorageName(mStorageType, DefaultLocation);
+
+  DeviceStorageChangeEventInit init;
+  init.mBubbles = true;
+  init.mCancelable = false;
+  init.mPath = DefaultLocation;
+
+  if (mIsDefaultLocation) {
+    init.mReason.AssignLiteral("default-location-changed");
+  } else {
+    init.mReason.AssignLiteral("became-default-location");
+  }
+
+  nsRefPtr<DeviceStorageChangeEvent> event =
+    DeviceStorageChangeEvent::Constructor(this,
+                                          NS_LITERAL_STRING(STORAGE_CHANGE_EVENT),
+                                          init);
+  event->SetTrusted(true);
+
+  bool ignore;
+  DispatchEvent(event, &ignore);
+  mIsDefaultLocation = Default();
+}
+
 #ifdef MOZ_WIDGET_GONK
 void
 nsDOMDeviceStorage::DispatchStatusChangeEvent(nsAString& aStatus)
 {
   if (aStatus == mLastStatus) {
     // We've already sent this status, don't bother sending it again.
     return;
   }
@@ -4342,17 +4374,18 @@ nsDOMDeviceStorage::DispatchStatusChange
 
   DeviceStorageChangeEventInit init;
   init.mBubbles = true;
   init.mCancelable = false;
   init.mPath = mStorageName;
   init.mReason = aStatus;
 
   nsRefPtr<DeviceStorageChangeEvent> event =
-    DeviceStorageChangeEvent::Constructor(this, NS_LITERAL_STRING("change"),
+    DeviceStorageChangeEvent::Constructor(this,
+                                          NS_LITERAL_STRING(STORAGE_CHANGE_EVENT),
                                           init);
   event->SetTrusted(true);
 
   bool ignore;
   DispatchEvent(event, &ignore);
 }
 
 void
@@ -4403,16 +4436,24 @@ nsDOMDeviceStorage::Observe(nsISupports 
     if (!NS_strcmp(aData, MOZ_UTF16("full"))) {
       Notify("low-disk-space", file);
     } else if (!NS_strcmp(aData, MOZ_UTF16("free"))) {
       Notify("available-disk-space", file);
     }
     return NS_OK;
   }
 
+  if (!strcmp(aTopic, NS_PREFBRANCH_PREFCHANGE_TOPIC_ID) &&
+               aData &&
+               nsDependentString(aData).Equals(NS_LITERAL_STRING(PREF_STORAGE_WRITABLE_NAME)))
+  {
+    DispatchDefaultChangeEvent();
+    return NS_OK;
+  }
+
 #ifdef MOZ_WIDGET_GONK
   else if (!strcmp(aTopic, NS_VOLUME_STATE_CHANGED)) {
     // We invalidate the used space cache for the volume that actually changed
     // state.
     nsCOMPtr<nsIVolume> vol = do_QueryInterface(aSubject);
     if (!vol) {
       return NS_OK;
     }
@@ -4460,17 +4501,18 @@ nsDOMDeviceStorage::Notify(const char* a
 
   DeviceStorageChangeEventInit init;
   init.mBubbles = true;
   init.mCancelable = false;
   aFile->GetFullPath(init.mPath);
   init.mReason.AssignWithConversion(aReason);
 
   nsRefPtr<DeviceStorageChangeEvent> event =
-    DeviceStorageChangeEvent::Constructor(this, NS_LITERAL_STRING("change"),
+    DeviceStorageChangeEvent::Constructor(this,
+                                          NS_LITERAL_STRING(STORAGE_CHANGE_EVENT),
                                           init);
   event->SetTrusted(true);
 
   bool ignore;
   DispatchEvent(event, &ignore);
   return NS_OK;
 }
 
--- a/dom/wifi/WifiNetUtil.jsm
+++ b/dom/wifi/WifiNetUtil.jsm
@@ -26,30 +26,41 @@ this.WifiNetUtil = function(controlMessa
     if (DEBUG) {
       dump('-------------- NetUtil: ' + msg);
     }
   }
 
   var util = {};
 
   util.runDhcp = function (ifname, callback) {
-    gNetworkService.dhcpRequest(ifname, function(success, dhcpInfo) {
-      util.runIpConfig(ifname, dhcpInfo, callback);
+    util.stopDhcp(ifname, function() {
+      gNetworkService.dhcpRequest(ifname, function(success, dhcpInfo) {
+        util.runIpConfig(ifname, dhcpInfo, callback);
+      });
     });
   };
 
   util.stopDhcp = function (ifname, callback) {
     // This function does exactly what dhcp_stop does. Unforunately, if we call
     // this function twice before the previous callback is returned. We may block
     // our self waiting for the callback. It slows down the wifi startup procedure.
     // Therefore, we have to roll our own version here.
     let dhcpService = DHCP_PROP + "_" + ifname;
     let suffix = (ifname.substr(0, 3) === "p2p") ? "p2p" : ifname;
     let processName = DHCP + "_" + suffix;
-    stopProcess(dhcpService, processName, callback);
+
+    // The implementation of |dhcp_do_request| would wait until the
+    // |result_prop_name| (e.g. dhcp.wlan0.result) to be non-null
+    // or 30 second timeout. So we manually change the result property
+    // to 'ko' to avoid timeout.
+    //
+    // http://androidxref.com/4.4.4_r1/xref/system/core/libnetutils/dhcp_utils.c#234
+    setProperty('dhcp.' + suffix + '.result', 'ko', function() {
+      stopProcess(dhcpService, processName, callback);
+    });
   };
 
   util.startDhcpServer = function (config, callback) {
     gNetworkService.setDhcpServer(true, config, function (error) {
       callback(!error);
     });
   };
 
--- a/dom/wifi/WifiWorker.js
+++ b/dom/wifi/WifiWorker.js
@@ -3274,33 +3274,17 @@ WifiWorker.prototype = {
         WifiManager.enableNetwork(privnet.netId, true, function (ok) {
           if (ok)
             self._needToEnableNetworks = true;
           if (WifiManager.state === "DISCONNECTED" ||
               WifiManager.state === "SCANNING") {
             WifiManager.reconnect(function (ok) {
               self._sendMessage(message, ok, ok, msg);
             });
-          } else if (WifiManager.state == "INACTIVE") {
-             // If AP info didn't clear, then call associate function.
-             // That maybe occurs wpa supplicant that suppose already associated.
-             // To avoid this case, need to clear AP info and call reassoiate
-             // in INACTIVE state.
-             let networkKey = getNetworkKey(network);
-             if (!(networkKey in this.configuredNetworks)) {
-               self._sendMessage(message, false, "Trying to forget an unknown network", msg);
-               return;
-             }
-             let configured = this.configuredNetworks[networkKey];
-             WifiManager.removeNetwork(configured.netId, function() {
-               WifiManager.reassociate(function() {
-                 self._sendMessage(message, ok, ok, msg);
-               });
-             });
-          }else {
+          } else {
             self._sendMessage(message, ok, ok, msg);
           }
         });
       }
 
       var selectAndConnectOrReturn = dontConnect ?
         function() {
           self._sendMessage(message, true, "Wifi has been recorded", msg);
--- a/dom/wifi/test/marionette/head.js
+++ b/dom/wifi/test/marionette/head.js
@@ -830,20 +830,31 @@ let gTestSuite = (function() {
    *        The file path that we desire the file to be located.
    *
    * @param aContent
    *        The content as string which should be written to the file.
    *
    * @return A deferred promise.
    */
   function writeFile(aFilePath, aContent) {
-    if (-1 === aContent.indexOf(' ')) {
-      aContent = '"' + aContent + '"';
+    const CONTENT_MAX_LENGTH = 900;
+    var commands = [];
+    for (var i = 0; i < aContent.length; i += CONTENT_MAX_LENGTH) {
+      var content = aContent.substr(i, CONTENT_MAX_LENGTH);
+      if (-1 === content.indexOf(' ')) {
+        content = '"' + content + '"';
+      }
+      commands.push(['echo', '-n', content, i === 0 ? '>' : '>>', aFilePath]);
     }
-    return runEmulatorShellSafe(['echo', aContent, '>', aFilePath]);
+
+    let chain = Promise.resolve();
+    commands.forEach(function (command) {
+      chain = chain.then(() => runEmulatorShellSafe(command));
+    });
+    return chain;
   }
 
   /**
    * Check if a init service is running or not.
    *
    * Check the android property 'init.svc.[aServiceName]' to determine if
    * a init service is running. Reject if the propery is neither 'running'
    * nor 'stopped'.
@@ -1237,16 +1248,17 @@ let gTestSuite = (function() {
   suite.waitForConnected = waitForConnected;
   suite.forgetNetwork = forgetNetwork;
   suite.waitForTimeout = waitForTimeout;
   suite.waitForRilDataConnected = waitForRilDataConnected;
   suite.requestTetheringEnabled = requestTetheringEnabled;
   suite.importCert = importCert;
   suite.getImportedCerts = getImportedCerts;
   suite.deleteCert = deleteCert;
+  suite.writeFile = writeFile;
 
   /**
    * Common test routine.
    *
    * Start a test with the given test case chain. The test environment will be
    * settled down before the test. After the test, all the affected things will
    * be restored.
    *
@@ -1359,17 +1371,17 @@ let gTestSuite = (function() {
    * @param usage
    *        Expected usage of imported certificate.
    * @param aTestCaseChain
    *        The test case entry point, which can be a function or a promise.
    *
    * @return A deferred promise.
    */
   suite.doTestWithCertificate = function(certBlob, password, nickname, usage, aTestCaseChain) {
-    return suite.doTest(function() {
+    return suite.doTestWithoutStockAp(function() {
       return ensureWifiEnabled(true)
       // Import test certificate.
       .then(() => importCert(certBlob, password, nickname))
       .then(function(info) {
         // Check import result.
         is(info.nickname, nickname, "Imported nickname");
         for (let i = 0; i < usage.length; i++) {
           isnot(info.usage.indexOf(usage[i]), -1, "Usage " + usage[i]);
--- a/dom/wifi/test/marionette/manifest.ini
+++ b/dom/wifi/test/marionette/manifest.ini
@@ -9,9 +9,12 @@ qemu = true
 [test_wifi_associate_wo_connect.js]
 [test_wifi_auto_connect.js]
 [test_wifi_tethering_wifi_disabled.js]
 [test_wifi_tethering_wifi_inactive.js]
 [test_wifi_tethering_wifi_active.js]
 [test_wifi_manage_server_certificate.js]
 [test_wifi_manage_user_certificate.js]
 [test_wifi_manage_pkcs12_certificate.js]
+[test_wifi_associate_WPA_EAP_PEAP.js]
+[test_wifi_associate_WPA_EAP_TTLS.js]
+[test_wifi_associate_WPA_EAP_TLS.js]
 [test_wifi_enable_api.js]
new file mode 100644
--- /dev/null
+++ b/dom/wifi/test/marionette/test_wifi_associate_WPA_EAP_PEAP.js
@@ -0,0 +1,623 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+MARIONETTE_TIMEOUT = 60000;
+MARIONETTE_HEAD_JS = 'head.js';
+
+const SCAN_RETRY_CNT = 5;
+
+const EAP_USERNAME = 'username';
+const EAP_PASSWORD = 'password';
+
+const SERVER_EAP_USER_CONF = {
+  path: HOSTAPD_CONFIG_PATH + 'hostapd.eap_user',
+  content: '* PEAP,TTLS,TLS\n' +
+    '"' + EAP_USERNAME + '" MSCHAPV2,TTLS-MSCHAPV2 "' + EAP_PASSWORD + '" [2]\n'
+};
+const CA_CERT = {
+  path: HOSTAPD_CONFIG_PATH + 'ca.pem',
+  content: '-----BEGIN CERTIFICATE-----\n' +
+    'MIIDsTCCApmgAwIBAgIJAKxTf+8X8qngMA0GCSqGSIb3DQEBCwUAMG4xCzAJBgNV\n' +
+    'BAYTAlRXMRMwEQYDVQQIDApTb21lLVN0YXRlMREwDwYDVQQKDAhjaHVja2xlZTER\n' +
+    'MA8GA1UEAwwIY2h1Y2tsZWUxJDAiBgkqhkiG9w0BCQEWFWNodWNrbGkwNzA2QGdt\n' +
+    'YWlsLmNvbTAgFw0xNDEyMjQxMTI4NTBaGA8yMjg4MTAwNzExMjg1MFowbjELMAkG\n' +
+    'A1UEBhMCVFcxEzARBgNVBAgMClNvbWUtU3RhdGUxETAPBgNVBAoMCGNodWNrbGVl\n' +
+    'MREwDwYDVQQDDAhjaHVja2xlZTEkMCIGCSqGSIb3DQEJARYVY2h1Y2tsaTA3MDZA\n' +
+    'Z21haWwuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAo3c2yFxY\n' +
+    'o6gGg0I83jy00ME+MAfzCd+4ShL45ZLqysQP93jRBfPzU9ZuZ29ysVwgWIdqkZao\n' +
+    'XTuV/NAW2GMGd8W1jQJ3J81fjb9wvhlny3rrACwvUn1N1S1BnM+BAAiDLGxEmvAQ\n' +
+    'onp2aaa6HsHsYS8ONX+d2Qh4LEA4vupeSGAqJychCZv/l+aq/ErFZhFYB3CPUQEt\n' +
+    'cClO24ucsIYP95lA0zhscnmAj06qplFD4Bv6IVrdDqujy1zNwCQwsJq/8OQdaTN/\n' +
+    'h3y9pWvNKMBMM2niOUAjtuNpqsSK/lTS1WAT3PdtVECX9fYBi0Bg+HM92xs/6gt6\n' +
+    'kh9jPV8keXHvSwIDAQABo1AwTjAdBgNVHQ4EFgQU7hBqhuG04xeCzrQ3ngx18ZJ3\n' +
+    'lUswHwYDVR0jBBgwFoAU7hBqhuG04xeCzrQ3ngx18ZJ3lUswDAYDVR0TBAUwAwEB\n' +
+    '/zANBgkqhkiG9w0BAQsFAAOCAQEAFYX2iy680GAnBTttk0gyX6gk+8pYr3D22k/G\n' +
+    '6rvcjefzS7ELQPRKr6mfmwXq3mMf/4jiS2zI5zmXsestPYzHYxf2viQ6t7vr9XiJ\n' +
+    '3WfFjNw4ERlRisAvg0aqqTNNQq5v2VME4sdFZagy217f73C7azwCHl0bqOLH05rl\n' +
+    '8RubOxiHEj7ZybJqnRciK/bht4D+rZkwf4bBBmoloqH7xT0+rFQclpYXDGGjNUQB\n' +
+    'LcHLF10xcr7g3ZVVu82fe6+d85gIGOIMR9+TKhdw6gO3CNcnDAj6gxksghgtcxmh\n' +
+    'OzOggCn7nlIwImtsg2sZkpWB4lEi9hdv4lkNuyFjOL3bnuc+NA==\n' +
+    '-----END CERTIFICATE-----\n'
+};
+
+const SERVER_CERT = {
+  path: HOSTAPD_CONFIG_PATH + 'server.pem',
+  content: '-----BEGIN CERTIFICATE-----\n' +
+    'MIID1DCCArygAwIBAgIBADANBgkqhkiG9w0BAQsFADBuMQswCQYDVQQGEwJUVzET\n' +
+    'MBEGA1UECAwKU29tZS1TdGF0ZTERMA8GA1UECgwIY2h1Y2tsZWUxETAPBgNVBAMM\n' +
+    'CGNodWNrbGVlMSQwIgYJKoZIhvcNAQkBFhVjaHVja2xpMDcwNkBnbWFpbC5jb20w\n' +
+    'IBcNMTQxMjI0MTEyOTQ5WhgPMjI4ODEwMDcxMTI5NDlaMG4xCzAJBgNVBAYTAlRX\n' +
+    'MRMwEQYDVQQIDApTb21lLVN0YXRlMREwDwYDVQQKDAhjaHVja2xlZTERMA8GA1UE\n' +
+    'AwwIY2h1Y2tsZWUxJDAiBgkqhkiG9w0BCQEWFWNodWNrbGkwNzA2QGdtYWlsLmNv\n' +
+    'bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMdhQmKilTJbWZRxTiSV\n' +
+    'rqIU+LYW1RKghx5o+0JpNRJVLuz5kBMaNskbbfUSNuHbEq0QA9BDKAZWIc4LSotk\n' +
+    'lCo8TbcO9CJvJPQGGjGdHcohWX5vy6BE/OVE46CUteMFyZF6F8R2fNUww08iR/u1\n' +
+    'YZebL5pWO1j43sPpAzEy6Tij2ACPt6EZcFaZG3SF2mVJWkCQnBqrojP65WUvZQqp\n' +
+    'seUhW2YAS8Nu0Yrohgxz6VYk+cNDuDZVGs6qWRStZzJfYrfc76DtkHof5B14M+xp\n' +
+    'XJaBLxN+whvnYkDTfinaCxnW1O7eXUltr87fLc5zmeBkgwaiaQuIdcfZm7vDUiz8\n' +
+    'vnUCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBH\n' +
+    'ZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFKK4f9/YavTHOfEiAB83Deac\n' +
+    '6gT5MB8GA1UdIwQYMBaAFO4QaobhtOMXgs60N54MdfGSd5VLMA0GCSqGSIb3DQEB\n' +
+    'CwUAA4IBAQBWnO9o9KSJIqjoz5Nwll63ULOdcvgGdOeJIw1fcKQ817Rsp+TVcjcH\n' +
+    'IrIADsT/QZGXRO/l6p1750e2iFtJEo1hsRaxtA1wWn2I9HO3+av2spQhr3jpYGPf\n' +
+    'zpsMTp4RNYV7Q8+q1kZIz9PY4V1T0p6lveK8+fUj2hSLnxSj0QiGSJJtnEC3w4Rv\n' +
+    'C9T6oUwIeToULmi+8FXQFdEqwKRU98DPq3eLzN28ZxUgoPE1C8+42D2UW8uyp/Gm\n' +
+    'tGOa/k7nzkCdVqZI7lX7f0AjEvQgjtAMQ/k7Mhxx7TzW2HO+1YPMoKji6Z4WkNwt\n' +
+    'JEj9ZUBSNt8B26UksJMBDkcvSegF3a7o\n' +
+    '-----END CERTIFICATE-----\n'
+};
+
+const SERVER_KEY = {
+  path: HOSTAPD_CONFIG_PATH + 'server.key',
+  content: '-----BEGIN RSA PRIVATE KEY-----\n' +
+    'MIIEpAIBAAKCAQEAx2FCYqKVMltZlHFOJJWuohT4thbVEqCHHmj7Qmk1ElUu7PmQ\n' +
+    'Exo2yRtt9RI24dsSrRAD0EMoBlYhzgtKi2SUKjxNtw70Im8k9AYaMZ0dyiFZfm/L\n' +
+    'oET85UTjoJS14wXJkXoXxHZ81TDDTyJH+7Vhl5svmlY7WPjew+kDMTLpOKPYAI+3\n' +
+    'oRlwVpkbdIXaZUlaQJCcGquiM/rlZS9lCqmx5SFbZgBLw27RiuiGDHPpViT5w0O4\n' +
+    'NlUazqpZFK1nMl9it9zvoO2Qeh/kHXgz7GlcloEvE37CG+diQNN+KdoLGdbU7t5d\n' +
+    'SW2vzt8tznOZ4GSDBqJpC4h1x9mbu8NSLPy+dQIDAQABAoIBAASG4Mr8hgaurEoC\n' +
+    'iJOsElr7vunjetMBcg/uskW/vcS8ymP3Bp5oafYG+WgnEbfvEW18f5mq7K24JuxW\n' +
+    'tUqU7ghHdjxByqk9fMlNmiqmNpbwSufkAeuRpWxPNBvhRH/zEbCL5R5A0nTEtqqF\n' +
+    'TL0aUSzwCRSoAJD0lZo9ICVt0n3GsDyM9rqQg/uZmh1qsRdwPsRuYORND9g48rKq\n' +
+    '6WN9leskSxhhsYE2D9ocOFd9bNt8Zxejh9ppVSnG/KsIdt18iBzcabatgAQ046fb\n' +
+    'Z3vprcZJLg93Sg2gSuVqlSTs3M2W8VQnm22/EBMb1y0M48MSRCgnbPLG/CcCLLfF\n' +
+    'LwxCOgECgYEA/eYt67xyJ6JeAdxdwOZuT1WWGbFpLiG9+2OgiHumyRQ5969XMTWo\n' +
+    'fIhMKchDdjoy9RR236\/\/EFCs7UEyB7+a7ODRzNiK2zCD8Smjp+21fUPSthEeQesk\n' +
+    'eiMYICIu5Ay35x9sxIX+XOUVvRhPOGcD29GVeRnKh1inTHOz2dje8LkCgYEAyQeY\n' +
+    'STi9jjCEcHkM1E/UeDiLfHHepLXi8wS41JNRHl5Jacp7XB5djAjKu/jf367/VpFy\n' +
+    'GDDMetE7n8eWkrnAvovxOwZ000YDMtL1sUYSjL+XtBS5s6VY1p4qaSAY9nUUGrJh\n' +
+    'JvtvsuI7SKTtL+60vjBOH7zDnvOdBgAp0utLhZ0CgYEAuLzzqrPKB8afShFSchn4\n' +
+    'J2dpuLYahsNsXW7HDqeR2nsKFosRETAusLXnXPtnAq4kB6jlOarwFqnsuRCX24Vx\n' +
+    'r2uBm9/vYL7zMdUPTA+s30ErHuhjsKjsOKYyVqcooSwT32pBFNk+E89nutfmRG7I\n' +
+    'IvhjHuNCNqqtx/Xj5d1jkZkCgYBQicppC2Jl5OoqZVTOem0U/RJk+PnJ41TZJ7sk\n' +
+    '7yBAmmWvDH\/\/l+rCf4M5a6vFYcbKV9rt9h711X2dtciNX/3oWQh8LUoAmrwNUJc+\n' +
+    'PmSQHvIYI3WCk2vUD+nN1B4sHxu+1lg11eYaNKiroeeknG2tBI1ICcgVlmQCU25u\n' +
+    'IfZPwQKBgQCdO6QHhPLtcHUDNFA6FQ1jKL1iEd7G0JLVRz4Xkpkn1Vrr5MD6JFDa\n' +
+    '5ccabADyl0lpFqDIVJQIzLku2hOD2i9aBNCY0pL391HeOS7CkZX+TdOY1tquoBq5\n' +
+    'MnmixZjDCVd2VcrVyTA6ntOBoharKFW0rH1PqU+qu7dZF7CBPbAdEw==\n' +
+    '-----END RSA PRIVATE KEY-----\n'
+};
+
+const WPA_EAP_AP_LIST = [
+  {
+    ssid: 'WPA-EAP-PEAP',
+    ieee8021x: 1,
+    eapol_version: 1,
+    eap_server: 1,
+    eapol_key_index_workaround: 0,
+    eap_user_file: SERVER_EAP_USER_CONF.path,
+    ca_cert: CA_CERT.path,
+    server_cert: SERVER_CERT.path,
+    private_key: SERVER_KEY.path,
+    wpa: 3,
+    wpa_key_mgmt: 'WPA-EAP'
+  }
+];
+
+const CLIENT_PKCS12_CERT = {
+  nickname: 'client',
+  password: 'password',
+  usage: ['UserCert', 'ServerCert'],
+  content: [0x30, 0x82, 0x0E, 0x01, 0x02, 0x01, 0x03, 0x30,
+    0x82, 0x0D, 0xC7, 0x06, 0x09, 0x2A, 0x86, 0x48,
+    0x86, 0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82,
+    0x0D, 0xB8, 0x04, 0x82, 0x0D, 0xB4, 0x30, 0x82,
+    0x0D, 0xB0, 0x30, 0x82, 0x08, 0x67, 0x06, 0x09,
+    0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x07,
+    0x06, 0xA0, 0x82, 0x08, 0x58, 0x30, 0x82, 0x08,
+    0x54, 0x02, 0x01, 0x00, 0x30, 0x82, 0x08, 0x4D,
+    0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D,
+    0x01, 0x07, 0x01, 0x30, 0x1C, 0x06, 0x0A, 0x2A,
+    0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x0C, 0x01,
+    0x06, 0x30, 0x0E, 0x04, 0x08, 0x67, 0x7A, 0xF3,
+    0x61, 0xBE, 0xE0, 0x51, 0xC1, 0x02, 0x02, 0x08,
+    0x00, 0x80, 0x82, 0x08, 0x20, 0xFC, 0x6A, 0x79,
+    0xA1, 0x6C, 0xAF, 0xBE, 0xEE, 0x62, 0x45, 0x33,
+    0xB8, 0x48, 0xE1, 0x68, 0xA1, 0x15, 0x11, 0x4B,
+    0x95, 0xCB, 0x77, 0xC0, 0x5D, 0xA2, 0xCB, 0xDB,
+    0xD1, 0x83, 0x74, 0x60, 0xD7, 0xEC, 0x42, 0xA6,
+    0x3A, 0x23, 0xF7, 0x85, 0xEB, 0xC1, 0xFE, 0x6A,
+    0x57, 0x8E, 0xC1, 0x44, 0xF3, 0x1F, 0xFE, 0xB8,
+    0x2D, 0x8C, 0x4D, 0xC9, 0x5B, 0xAE, 0x21, 0x2E,
+    0x4C, 0x1A, 0xEB, 0x84, 0x09, 0xF3, 0x40, 0x92,
+    0x39, 0x7F, 0x56, 0x02, 0x46, 0x61, 0x16, 0xDE,
+    0x5C, 0x48, 0xB6, 0x0C, 0x1D, 0xD3, 0x5F, 0x10,
+    0x9A, 0x39, 0xB8, 0x66, 0x31, 0xFC, 0x39, 0x71,
+    0x87, 0x23, 0x46, 0x9D, 0xE8, 0x3C, 0x2B, 0xA1,
+    0x39, 0x8A, 0xD3, 0xFF, 0xD9, 0x43, 0xB6, 0x61,
+    0xC6, 0x67, 0x70, 0x40, 0xBD, 0xFE, 0xD3, 0xC1,
+    0x68, 0xF5, 0xF7, 0xC8, 0x89, 0xD8, 0x17, 0xC5,
+    0xE8, 0x3D, 0x29, 0xD5, 0x91, 0xDF, 0x1F, 0x56,
+    0x74, 0x5A, 0xC4, 0xA8, 0x14, 0xBA, 0xD4, 0xFA,
+    0x13, 0x49, 0x2A, 0x9F, 0x63, 0xF1, 0xB2, 0x45,
+    0xF1, 0xF0, 0x2A, 0xDD, 0x75, 0x66, 0x8A, 0xF7,
+    0xAB, 0x73, 0x86, 0x26, 0x9D, 0x1F, 0x07, 0xAD,
+    0xD3, 0xFE, 0xE0, 0xA3, 0xED, 0xA0, 0x96, 0x3E,
+    0x1E, 0x89, 0x86, 0x02, 0x4C, 0x28, 0xFD, 0x57,
+    0xA1, 0x67, 0x55, 0xF0, 0x82, 0x3B, 0x7F, 0xCC,
+    0x2A, 0x32, 0x01, 0x93, 0x1D, 0x8B, 0x66, 0x8A,
+    0x20, 0x52, 0x84, 0xDD, 0x2C, 0xFD, 0xEE, 0x72,
+    0xF3, 0x8C, 0x58, 0xB9, 0x99, 0xE5, 0xC1, 0x22,
+    0x63, 0x59, 0x00, 0xE2, 0x76, 0xC5, 0x3A, 0x17,
+    0x7F, 0x93, 0xE9, 0x67, 0x61, 0xAA, 0x10, 0xC3,
+    0xD9, 0xC8, 0x24, 0x46, 0x5B, 0xBE, 0x8C, 0x1F,
+    0x2D, 0x66, 0x48, 0xD2, 0x02, 0x11, 0xFB, 0x74,
+    0x14, 0x76, 0x76, 0x5A, 0x98, 0x54, 0x35, 0xA7,
+    0x85, 0x66, 0x20, 0x26, 0x8B, 0x13, 0x6F, 0x68,
+    0xE3, 0xC9, 0x58, 0x7D, 0x1C, 0x3E, 0x01, 0x8D,
+    0xF8, 0xD6, 0x7F, 0xCF, 0xA2, 0x07, 0xB7, 0x95,
+    0xFD, 0xF0, 0x02, 0x34, 0x32, 0x30, 0xE8, 0xD4,
+    0x57, 0x5E, 0x53, 0xFB, 0x54, 0xE2, 0x03, 0x32,
+    0xCC, 0x52, 0x2E, 0xD2, 0x35, 0xD9, 0x58, 0x85,
+    0x2D, 0xEC, 0x2D, 0x71, 0xD1, 0x8A, 0x29, 0xD0,
+    0xB0, 0x24, 0xBD, 0x24, 0xDC, 0x1A, 0x28, 0x3F,
+    0xA0, 0x12, 0x81, 0x15, 0x24, 0xC9, 0xB5, 0x4A,
+    0x23, 0xB6, 0xA3, 0x45, 0x50, 0x2D, 0x73, 0x99,
+    0x6B, 0x1C, 0xFB, 0xA4, 0x53, 0xD7, 0x5C, 0xF4,
+    0x6C, 0xB0, 0xE5, 0x74, 0xB3, 0x76, 0xF8, 0xB1,
+    0x0D, 0x59, 0x70, 0x9F, 0xCA, 0xDE, 0xF2, 0xAA,
+    0x4C, 0x7D, 0x11, 0x54, 0xC4, 0x19, 0x0F, 0x36,
+    0x4A, 0x62, 0xFF, 0x8B, 0x10, 0xCB, 0x93, 0x50,
+    0xDA, 0x79, 0x5E, 0x4E, 0x09, 0x1F, 0x22, 0xC8,
+    0x19, 0x85, 0xE9, 0xEE, 0xB7, 0x71, 0x65, 0xB9,
+    0x10, 0xD2, 0x0A, 0x73, 0x5B, 0xA6, 0xDA, 0x37,
+    0x46, 0x02, 0x00, 0x98, 0x9E, 0x20, 0x6C, 0x7D,
+    0xC7, 0x69, 0xBB, 0xC2, 0x00, 0x40, 0x9C, 0x57,
+    0x00, 0xC2, 0x36, 0x76, 0xE8, 0x2A, 0x8D, 0xAD,
+    0x62, 0x57, 0xC8, 0xD0, 0x9D, 0x66, 0x27, 0x5A,
+    0xD8, 0x0D, 0x35, 0x60, 0x28, 0x38, 0x62, 0x94,
+    0x78, 0x36, 0x25, 0x58, 0xFD, 0xF8, 0x66, 0x1F,
+    0x68, 0x04, 0x0F, 0xD8, 0x00, 0xDF, 0xA0, 0x6C,
+    0x25, 0x42, 0x9A, 0x4C, 0xEB, 0x80, 0x13, 0x51,
+    0x7D, 0x2D, 0xA8, 0x89, 0xD6, 0x1B, 0x67, 0x72,
+    0x01, 0xF3, 0x2D, 0x16, 0x77, 0xFE, 0x22, 0xBC,
+    0x8A, 0x45, 0x09, 0x1F, 0x9C, 0x2F, 0x2A, 0xA9,
+    0x61, 0x5B, 0x4A, 0xE6, 0x64, 0x2C, 0x62, 0x1A,
+    0x3A, 0x96, 0xE6, 0x0A, 0xAE, 0x05, 0x1A, 0xC8,
+    0xCB, 0xD6, 0x8F, 0x3A, 0x4B, 0xE0, 0x7F, 0x82,
+    0xB4, 0x98, 0xF1, 0x9D, 0xD7, 0x14, 0x76, 0x5E,
+    0x77, 0x85, 0x87, 0xEC, 0x13, 0xDA, 0xFD, 0xAF,
+    0xCB, 0xA3, 0x1C, 0x99, 0xC1, 0xFE, 0x17, 0x0C,
+    0x40, 0x4D, 0x3C, 0x8F, 0x70, 0x86, 0x63, 0x64,
+    0xB7, 0x75, 0xA8, 0x71, 0x36, 0xDC, 0x54, 0x10,
+    0x57, 0x0C, 0xA8, 0xF2, 0xA1, 0xBB, 0xED, 0x03,
+    0x41, 0x57, 0x34, 0x2C, 0x8F, 0x7C, 0xA0, 0x09,
+    0xF3, 0x9E, 0x41, 0xB7, 0xA8, 0xD4, 0x66, 0x0D,
+    0x0D, 0xC0, 0x6A, 0xFC, 0x6A, 0xA2, 0xAC, 0xE2,
+    0x60, 0x00, 0xE3, 0xF7, 0x75, 0x43, 0x23, 0xEB,
+    0xC8, 0x61, 0xFA, 0xB3, 0xB8, 0x28, 0xCE, 0xCA,
+    0xF4, 0x47, 0x7F, 0x30, 0x6D, 0x61, 0x89, 0x47,
+    0xA1, 0x4A, 0xFE, 0xD1, 0x21, 0x0B, 0x6D, 0xF4,
+    0x3F, 0x00, 0x86, 0x30, 0x8E, 0x33, 0x21, 0x6F,
+    0xDA, 0x15, 0xFD, 0x5F, 0xEC, 0x8E, 0xF1, 0x12,
+    0x3F, 0xC9, 0x83, 0x0C, 0xCA, 0x22, 0x01, 0xF1,
+    0x70, 0x5F, 0x1F, 0x66, 0xB5, 0xF8, 0x3E, 0x7A,
+    0x6F, 0xDE, 0xDB, 0xA7, 0x8D, 0x18, 0x9E, 0xBE,
+    0xDB, 0xAD, 0x3D, 0x66, 0x30, 0xC1, 0x6C, 0x0C,
+    0x87, 0xB4, 0x65, 0x75, 0xE0, 0x9D, 0xEA, 0x16,
+    0x0D, 0x07, 0x37, 0x33, 0xC5, 0xEC, 0x97, 0x93,
+    0x37, 0xEB, 0x8E, 0x65, 0x9C, 0x40, 0x63, 0x6C,
+    0x43, 0x60, 0xB0, 0x40, 0x4D, 0x85, 0xEF, 0xC2,
+    0x47, 0x5F, 0xE7, 0x6B, 0xCB, 0x40, 0xE8, 0xEA,
+    0xD8, 0xAB, 0xB1, 0x9A, 0x72, 0xDC, 0x4C, 0x14,
+    0xFA, 0x43, 0x61, 0x5F, 0xA6, 0x5C, 0x3A, 0x05,
+    0x17, 0x2E, 0x74, 0xF3, 0x5E, 0x45, 0xD9, 0x47,
+    0xAA, 0x59, 0xB6, 0x8F, 0x42, 0x66, 0x42, 0x29,
+    0x90, 0x95, 0x48, 0x46, 0x91, 0x88, 0x3C, 0x8C,
+    0xDE, 0xCC, 0xED, 0xB3, 0xAA, 0x62, 0xEA, 0xBC,
+    0xB4, 0x0C, 0x48, 0x4C, 0x53, 0x23, 0x5E, 0x24,
+    0x85, 0xBF, 0x92, 0xDA, 0x14, 0xDB, 0x1A, 0x3D,
+    0xEF, 0x30, 0xD9, 0x49, 0x64, 0x4D, 0xE5, 0x01,
+    0xFC, 0xA4, 0x4B, 0xD1, 0x9F, 0xDE, 0x96, 0x7F,
+    0x50, 0xBC, 0x4D, 0x38, 0x44, 0xE9, 0x23, 0x5F,
+    0x37, 0x57, 0x1A, 0xA6, 0x52, 0x5A, 0x0F, 0x4F,
+    0x87, 0x33, 0x4A, 0x7B, 0x66, 0xEE, 0x3D, 0x66,
+    0x0A, 0x63, 0x39, 0x1F, 0x23, 0x38, 0x35, 0x73,
+    0x60, 0x5E, 0x47, 0x20, 0x4F, 0xC0, 0xC8, 0x3C,
+    0x09, 0xF9, 0x29, 0x4F, 0x5E, 0x55, 0x69, 0xC4,
+    0x6B, 0xE8, 0xF8, 0x91, 0xC0, 0x22, 0x65, 0x15,
+    0x1E, 0xFB, 0xB9, 0x61, 0xCE, 0x45, 0xBE, 0x2B,
+    0xEE, 0xB9, 0x04, 0x2B, 0xFD, 0xAE, 0x61, 0x1C,
+    0x3D, 0x3D, 0x7C, 0xBF, 0xC1, 0xF7, 0x3C, 0x4E,
+    0x9E, 0x0E, 0x54, 0xC8, 0xAD, 0xA9, 0xDF, 0x43,
+    0x49, 0xB9, 0x41, 0x05, 0xE5, 0xF1, 0x49, 0xAA,
+    0x77, 0x6C, 0x34, 0x5B, 0x93, 0x24, 0x24, 0x23,
+    0x74, 0x68, 0x11, 0xCE, 0x15, 0x80, 0xA1, 0xA4,
+    0x1F, 0x8D, 0x81, 0xCD, 0xB2, 0x98, 0xCA, 0x14,
+    0x0B, 0x0C, 0x61, 0x50, 0x69, 0x72, 0xAE, 0xFA,
+    0x8B, 0xC0, 0x3F, 0x0D, 0xE7, 0xF2, 0x0F, 0xEB,
+    0xC1, 0x11, 0xB9, 0x10, 0x03, 0x6A, 0xF5, 0x97,
+    0x3C, 0x53, 0x2F, 0x67, 0x86, 0x09, 0x6A, 0xE3,
+    0x28, 0xC0, 0x78, 0xC8, 0xB4, 0x39, 0x8E, 0xD1,
+    0xCE, 0x25, 0xE8, 0x66, 0xF7, 0x09, 0x40, 0x7D,
+    0x81, 0xFB, 0xAF, 0xFA, 0x59, 0xC4, 0x9B, 0x2B,
+    0x83, 0x45, 0x5B, 0xA8, 0x66, 0x9E, 0x38, 0xC8,
+    0xFD, 0xAC, 0xF2, 0x2D, 0x21, 0xDE, 0x50, 0x4C,
+    0x03, 0xCB, 0x88, 0x42, 0xDD, 0x84, 0x09, 0x99,
+    0x8E, 0x8B, 0x40, 0x97, 0x1B, 0x14, 0x85, 0x37,
+    0x11, 0x01, 0xE0, 0x74, 0x6B, 0x33, 0x52, 0x8C,
+    0x68, 0x3A, 0x89, 0xB2, 0xAF, 0x35, 0xE6, 0x65,
+    0xC3, 0x58, 0x70, 0xD2, 0xE7, 0x1F, 0x1F, 0xF6,
+    0xE5, 0x0A, 0xB1, 0xFE, 0xD0, 0xC9, 0x51, 0x50,
+    0xE7, 0xFD, 0x58, 0xF5, 0xC4, 0x58, 0x65, 0x94,
+    0xD1, 0x57, 0x55, 0x5E, 0xD2, 0x27, 0x98, 0xAF,
+    0xE7, 0x55, 0x0B, 0x87, 0x50, 0x9B, 0xEF, 0xE8,
+    0x2B, 0xFC, 0xE7, 0x3B, 0x4E, 0xD7, 0xB7, 0x4D,
+    0xF4, 0xBC, 0xF4, 0x88, 0x63, 0xE4, 0x8A, 0x20,
+    0x4B, 0x22, 0xB0, 0xA0, 0x53, 0x7F, 0xA8, 0xC9,
+    0x0C, 0xF8, 0xD7, 0xBD, 0x46, 0x39, 0xA7, 0x7D,
+    0xDD, 0x10, 0x91, 0x50, 0x54, 0x06, 0x47, 0xF0,
+    0x3C, 0xAA, 0x43, 0x40, 0xF8, 0x54, 0xDD, 0x8A,
+    0xEA, 0x8A, 0x0B, 0xA5, 0x7F, 0xCD, 0x5E, 0xAA,
+    0x02, 0x2E, 0x1F, 0xC6, 0x50, 0x15, 0xF8, 0x0A,
+    0x0C, 0x1B, 0x3C, 0x55, 0x3A, 0xC3, 0x6F, 0x88,
+    0xD7, 0xBF, 0xB1, 0x02, 0xCC, 0xE0, 0x08, 0x29,
+    0x97, 0xD2, 0xAA, 0x23, 0xC4, 0x6D, 0xE3, 0xE3,
+    0x76, 0x39, 0x92, 0xC3, 0x2E, 0x7A, 0xE2, 0x98,
+    0xD1, 0xFC, 0xAE, 0xCC, 0x95, 0xD8, 0xB4, 0xDC,
+    0x92, 0xEA, 0x6A, 0x5F, 0xF2, 0x92, 0x17, 0x0B,
+    0x8D, 0xC3, 0xFA, 0x9C, 0x62, 0xCE, 0x44, 0x8D,
+    0xC3, 0x1E, 0xC3, 0xB2, 0xD5, 0x00, 0xCD, 0xB4,
+    0x9E, 0x2D, 0x7B, 0xF2, 0x98, 0xA3, 0x00, 0x8B,
+    0x81, 0x30, 0x77, 0x5B, 0x02, 0x99, 0xB1, 0xCD,
+    0xC3, 0x1D, 0x74, 0x74, 0xEF, 0x41, 0xCB, 0x69,
+    0x63, 0x8E, 0xA6, 0xD3, 0x2D, 0x3E, 0x1F, 0x1D,
+    0x12, 0x9E, 0xD9, 0x18, 0x67, 0x06, 0xAF, 0x37,
+    0x29, 0xAD, 0x65, 0xD8, 0xEB, 0x71, 0xC4, 0x7D,
+    0x94, 0x3D, 0xEA, 0xCC, 0xDF, 0x72, 0x41, 0x51,
+    0x3C, 0xA1, 0x66, 0x98, 0x32, 0x32, 0x40, 0x54,
+    0xB0, 0x2F, 0xEB, 0xCE, 0xDF, 0x4A, 0x64, 0xFB,
+    0x9A, 0x90, 0xDC, 0xF6, 0x6F, 0xA9, 0xD4, 0xCA,
+    0xCB, 0x91, 0xC4, 0xFE, 0xEE, 0x9C, 0x01, 0x50,
+    0x2E, 0xAC, 0xCC, 0x5F, 0x89, 0xD0, 0x91, 0xA3,
+    0xD9, 0xF9, 0x4B, 0x8D, 0xDE, 0x6C, 0x60, 0x21,
+    0x19, 0xB1, 0xD3, 0x4D, 0x75, 0x56, 0x6F, 0xB8,
+    0x25, 0xA4, 0x92, 0x4F, 0x12, 0xF5, 0x8F, 0xC1,
+    0x17, 0x4B, 0xB3, 0x34, 0x21, 0x22, 0xAC, 0x52,
+    0xD2, 0x64, 0xC9, 0x9A, 0x7D, 0xFC, 0xC0, 0x0A,
+    0x89, 0x34, 0xFF, 0x08, 0xD3, 0x04, 0xDC, 0xFE,
+    0x7C, 0xB3, 0xB8, 0xFD, 0x85, 0xDD, 0x79, 0x51,
+    0xA7, 0x89, 0xE8, 0xF1, 0x23, 0xB1, 0xDF, 0xD7,
+    0x1F, 0x7B, 0xB1, 0x5D, 0x42, 0xF9, 0x61, 0xF8,
+    0xDC, 0x81, 0x04, 0xF1, 0xCC, 0xFA, 0xD7, 0xED,
+    0xBF, 0x47, 0xAC, 0xBD, 0xE5, 0xFA, 0xAC, 0xB3,
+    0x1C, 0xD9, 0xA1, 0xB3, 0x60, 0xEE, 0x9C, 0x8A,
+    0x36, 0x57, 0xB4, 0x2F, 0xA1, 0xA2, 0xF3, 0xE2,
+    0x09, 0x9A, 0x6E, 0x43, 0x9B, 0xE5, 0x93, 0xB8,
+    0x3D, 0x9E, 0x9F, 0xC1, 0xC6, 0x0D, 0x02, 0xEB,
+    0x4D, 0x38, 0xE9, 0xB4, 0x9F, 0xEA, 0x33, 0x8C,
+    0x07, 0xD8, 0xB4, 0x71, 0xAD, 0xE5, 0x43, 0xB2,
+    0xCC, 0x55, 0x93, 0x6A, 0xDB, 0x1E, 0x80, 0xDB,
+    0xC2, 0xEA, 0x42, 0x8E, 0xFC, 0x86, 0x44, 0xC9,
+    0x8A, 0xC4, 0xF2, 0x46, 0xA7, 0x39, 0x50, 0x0D,
+    0x1A, 0xAA, 0x07, 0x04, 0xBE, 0xD4, 0xCE, 0x62,
+    0x4D, 0x0F, 0x91, 0x7D, 0x29, 0x88, 0x9C, 0x4C,
+    0xAF, 0xF7, 0xD8, 0x40, 0x93, 0x88, 0xC7, 0x20,
+    0xD2, 0x17, 0x2A, 0xC4, 0x92, 0x72, 0xD0, 0xC0,
+    0x4E, 0x56, 0x47, 0xB1, 0x27, 0x02, 0xE6, 0x61,
+    0x82, 0x5E, 0xC8, 0x2E, 0x90, 0xD2, 0x31, 0x22,
+    0xE2, 0xA9, 0x4A, 0x91, 0x45, 0x69, 0xB1, 0xA5,
+    0x0F, 0x66, 0x2C, 0x30, 0xAD, 0x7F, 0x1B, 0x0E,
+    0x22, 0x17, 0x60, 0x2E, 0x3D, 0x7F, 0x7F, 0x8C,
+    0x33, 0x51, 0xA0, 0x25, 0xDE, 0xFD, 0x75, 0xBC,
+    0xEF, 0xE6, 0xE7, 0x20, 0x04, 0x5A, 0xEC, 0x50,
+    0x21, 0x48, 0x56, 0x98, 0xE2, 0x33, 0x6D, 0x22,
+    0x5C, 0xC3, 0xFB, 0xFC, 0x6F, 0xB3, 0xA7, 0x8E,
+    0x6F, 0x67, 0x70, 0x9D, 0xDA, 0x02, 0x01, 0x59,
+    0x7B, 0x3D, 0x2B, 0x38, 0xCC, 0x0F, 0x44, 0x3D,
+    0xFB, 0x9A, 0xB3, 0x23, 0x15, 0x50, 0x6E, 0xBF,
+    0x8B, 0xA1, 0x94, 0x33, 0xE5, 0x7B, 0x88, 0x4E,
+    0xCB, 0x6D, 0x9F, 0xBF, 0xBC, 0x7A, 0xA8, 0x1E,
+    0x68, 0x25, 0xED, 0x8E, 0x53, 0x21, 0x72, 0xC5,
+    0x70, 0xB3, 0xE4, 0xA6, 0xA1, 0x5A, 0x2D, 0xC8,
+    0x43, 0x9D, 0x60, 0x77, 0x78, 0xE0, 0xC4, 0xAF,
+    0xC8, 0x29, 0xBA, 0xD0, 0x4D, 0x39, 0x83, 0x51,
+    0xA7, 0x10, 0x7F, 0x0C, 0x34, 0x0E, 0x6C, 0x75,
+    0x26, 0xD7, 0xD6, 0xC7, 0x32, 0x53, 0xAF, 0x4E,
+    0xBE, 0xF2, 0xC2, 0x0F, 0x99, 0x23, 0xB9, 0xE1,
+    0xC8, 0xB4, 0xBC, 0x5A, 0xC6, 0xCB, 0xEB, 0x4D,
+    0x28, 0x56, 0x72, 0xFE, 0x1B, 0x2C, 0x5D, 0xE3,
+    0xBC, 0xC7, 0xA3, 0xC0, 0x7D, 0x27, 0xF0, 0xD0,
+    0x4F, 0x3F, 0x1F, 0xF7, 0x87, 0x15, 0xF2, 0xEA,
+    0xD4, 0x03, 0x6D, 0x2F, 0xD4, 0x8E, 0x50, 0x4B,
+    0x05, 0xBF, 0xF7, 0x8C, 0x67, 0x5A, 0xDC, 0x4D,
+    0xCD, 0xCF, 0x9D, 0x02, 0xB6, 0xE7, 0xAE, 0x49,
+    0xD1, 0x7C, 0x00, 0xE7, 0x3B, 0xEA, 0xFB, 0x0D,
+    0x2A, 0x7B, 0x41, 0x33, 0x66, 0xD0, 0x29, 0x9F,
+    0xB3, 0x8A, 0x71, 0xB0, 0xE2, 0x76, 0xA9, 0xDB,
+    0xFD, 0x64, 0x04, 0x69, 0xDF, 0x89, 0x1F, 0x56,
+    0x86, 0x92, 0xD9, 0xD9, 0xB9, 0xF3, 0x4F, 0xAC,
+    0xAE, 0x61, 0x48, 0x20, 0xCE, 0x3C, 0x2B, 0x44,
+    0xAB, 0x42, 0xFA, 0xAB, 0x2E, 0x94, 0x82, 0xC8,
+    0xD9, 0x97, 0xCF, 0x27, 0xDF, 0xAC, 0xAC, 0xE7,
+    0xCA, 0xB2, 0x84, 0xAB, 0xF2, 0x5D, 0xDF, 0x56,
+    0x0C, 0x8C, 0x07, 0x3C, 0x3D, 0xA8, 0xDD, 0xBE,
+    0xFF, 0x4E, 0x28, 0x0D, 0xB2, 0x2D, 0xE6, 0x9D,
+    0x44, 0x21, 0xCB, 0xE7, 0x33, 0x63, 0x22, 0x8F,
+    0x4C, 0xFF, 0xB6, 0x1D, 0x9A, 0x71, 0x3F, 0xB1,
+    0x29, 0xAE, 0x3A, 0x35, 0xEE, 0x9C, 0x97, 0x68,
+    0xA7, 0x52, 0x66, 0x01, 0xD8, 0x9A, 0x5D, 0xF4,
+    0xB3, 0x2F, 0x5C, 0xD4, 0x0E, 0xF9, 0xCF, 0x07,
+    0xF6, 0x8C, 0xBA, 0xA6, 0x8D, 0x6B, 0xC6, 0x01,
+    0xC2, 0x69, 0xAE, 0x60, 0x08, 0x1A, 0x0E, 0x3F,
+    0xAE, 0x60, 0x29, 0xF3, 0x48, 0x0D, 0xE0, 0xD0,
+    0xAE, 0x52, 0x44, 0xE9, 0x7F, 0x1F, 0x92, 0x5F,
+    0x71, 0xAD, 0xEC, 0x6B, 0x47, 0x66, 0x92, 0x22,
+    0x27, 0xAE, 0x6E, 0x25, 0xCD, 0xF3, 0x5F, 0x55,
+    0x59, 0xBD, 0x73, 0xCE, 0x2B, 0x7E, 0x99, 0x44,
+    0x56, 0x70, 0xA3, 0xE7, 0x7A, 0x59, 0x75, 0xD8,
+    0x48, 0x0C, 0x39, 0x2B, 0xD7, 0x53, 0xC6, 0xAD,
+    0x4A, 0x6F, 0xB4, 0x14, 0x96, 0xDF, 0xF2, 0x4A,
+    0x0C, 0xA2, 0xD5, 0x29, 0x98, 0x7C, 0x42, 0x87,
+    0xD9, 0x1F, 0x97, 0x61, 0xD9, 0xBF, 0x99, 0x4F,
+    0x2C, 0x4C, 0x75, 0xAC, 0xB8, 0x06, 0x75, 0xD6,
+    0x87, 0x76, 0x7E, 0xE3, 0x23, 0x4B, 0xEA, 0x1A,
+    0x1A, 0xF4, 0xB7, 0x09, 0xAF, 0x53, 0xEB, 0xA6,
+    0x39, 0x10, 0xFE, 0xD4, 0xEB, 0x1B, 0xAE, 0x38,
+    0x31, 0x33, 0xBA, 0x68, 0xEE, 0xC7, 0x65, 0x76,
+    0xFB, 0x49, 0x77, 0xD4, 0x19, 0xC4, 0xE6, 0xA7,
+    0x05, 0xFE, 0x2A, 0xDA, 0x39, 0x99, 0x1A, 0x92,
+    0xD2, 0xF0, 0x61, 0x97, 0xF6, 0x06, 0x6C, 0x88,
+    0x7B, 0x6F, 0x60, 0xE6, 0x70, 0x08, 0xF0, 0xB4,
+    0x6B, 0x39, 0x6F, 0x05, 0x41, 0x81, 0xF9, 0xBE,
+    0x7A, 0x51, 0xC4, 0x75, 0xB0, 0x6A, 0x89, 0xA0,
+    0xA6, 0x9A, 0x5B, 0xEE, 0x7D, 0x78, 0x17, 0x5F,
+    0x9F, 0x3B, 0x7D, 0xDD, 0x8A, 0x9E, 0xAA, 0x1A,
+    0xDA, 0x49, 0x08, 0xE9, 0xFD, 0x91, 0xA6, 0xFA,
+    0xCE, 0xCF, 0x67, 0xDF, 0x0F, 0xC9, 0xD6, 0x38,
+    0xD9, 0xD5, 0xD1, 0xC0, 0x76, 0x59, 0x42, 0x53,
+    0xBF, 0x48, 0xE9, 0x11, 0x74, 0xC7, 0x11, 0xD8,
+    0xE7, 0x8E, 0xD3, 0xC8, 0x25, 0xA1, 0x26, 0x50,
+    0xBB, 0xB4, 0x35, 0xAF, 0xAF, 0x06, 0x23, 0x69,
+    0x3E, 0x30, 0xFD, 0x7B, 0x34, 0x83, 0x07, 0xD0,
+    0xF0, 0x0F, 0x6C, 0x9A, 0x13, 0x5D, 0xC2, 0x7B,
+    0xDF, 0x6F, 0xDD, 0x8E, 0xF4, 0x30, 0x82, 0x05,
+    0x41, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7,
+    0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x05, 0x32,
+    0x04, 0x82, 0x05, 0x2E, 0x30, 0x82, 0x05, 0x2A,
+    0x30, 0x82, 0x05, 0x26, 0x06, 0x0B, 0x2A, 0x86,
+    0x48, 0x86, 0xF7, 0x0D, 0x01, 0x0C, 0x0A, 0x01,
+    0x02, 0xA0, 0x82, 0x04, 0xEE, 0x30, 0x82, 0x04,
+    0xEA, 0x30, 0x1C, 0x06, 0x0A, 0x2A, 0x86, 0x48,
+    0x86, 0xF7, 0x0D, 0x01, 0x0C, 0x01, 0x03, 0x30,
+    0x0E, 0x04, 0x08, 0x74, 0xC0, 0x84, 0x8F, 0xC7,
+    0x74, 0x5E, 0x21, 0x02, 0x02, 0x08, 0x00, 0x04,
+    0x82, 0x04, 0xC8, 0x1E, 0xF4, 0xE9, 0x07, 0x27,
+    0x9E, 0x5A, 0xC9, 0x39, 0x1D, 0x37, 0x2C, 0x06,
+    0x4B, 0x57, 0xEA, 0xC5, 0x42, 0x9A, 0x60, 0xD5,
+    0x42, 0xB2, 0x34, 0x2D, 0xD3, 0x88, 0x7C, 0x78,
+    0x87, 0xB6, 0xE9, 0x42, 0x44, 0x1F, 0x67, 0x32,
+    0x92, 0x54, 0x22, 0xDA, 0xB2, 0x43, 0xE7, 0x40,
+    0xBE, 0x1F, 0xAF, 0x3A, 0xCD, 0x2A, 0x9F, 0xD7,
+    0x44, 0x5B, 0x37, 0x69, 0x85, 0xDF, 0xEB, 0x2A,
+    0xB9, 0xE2, 0x92, 0x3B, 0xEA, 0xD5, 0x42, 0x53,
+    0x95, 0x4A, 0xB0, 0x1B, 0xA5, 0xEF, 0xA6, 0x0D,
+    0x29, 0xF4, 0x33, 0xFE, 0xD7, 0x49, 0x04, 0x1E,
+    0x8C, 0xAD, 0x63, 0x1E, 0x79, 0x63, 0x74, 0x0C,
+    0xE5, 0x5E, 0xA2, 0x2C, 0xBE, 0xB8, 0x90, 0xCE,
+    0x06, 0x25, 0xBF, 0xD1, 0x5A, 0x50, 0xCF, 0x3B,
+    0x52, 0xE2, 0xA7, 0xFF, 0x19, 0x02, 0xCF, 0xD0,
+    0x9B, 0xD9, 0xF7, 0x28, 0x07, 0x38, 0x1F, 0xF2,
+    0xAF, 0x44, 0x91, 0x3F, 0x0F, 0xB6, 0x6E, 0x8C,
+    0xC0, 0x32, 0x92, 0xC0, 0xCD, 0x25, 0x98, 0x67,
+    0xF1, 0x47, 0x52, 0x50, 0xF0, 0xA3, 0x7B, 0xE6,
+    0x74, 0xDC, 0x72, 0x28, 0xC8, 0xAB, 0xB3, 0x31,
+    0x7D, 0xA3, 0xF7, 0xC7, 0xD1, 0xE6, 0x99, 0xB4,
+    0xB6, 0x5A, 0x3A, 0x4D, 0x83, 0x4F, 0xB8, 0xB5,
+    0x86, 0xF8, 0x37, 0x7F, 0xA0, 0x16, 0x2F, 0x3C,
+    0x62, 0x7A, 0xD4, 0x3A, 0xEB, 0xC2, 0xE8, 0x03,
+    0x49, 0x17, 0x9E, 0xFB, 0xD7, 0xAF, 0x91, 0x32,
+    0xFD, 0xEA, 0x4F, 0x64, 0xC6, 0x6E, 0x02, 0xEA,
+    0xC4, 0xC8, 0x1F, 0x16, 0xC5, 0x4C, 0xFB, 0xC5,
+    0x42, 0xF5, 0x85, 0x05, 0x92, 0x59, 0x4B, 0x31,
+    0xE5, 0xE9, 0x69, 0xE7, 0x02, 0x98, 0x33, 0xBA,
+    0x4C, 0x17, 0x09, 0xEF, 0x89, 0x20, 0xFA, 0x83,
+    0x9F, 0xAE, 0x0E, 0x1B, 0x7D, 0x98, 0xB9, 0xF2,
+    0x3C, 0x0F, 0xB7, 0x1C, 0x72, 0xDF, 0x17, 0x84,
+    0x7F, 0x0A, 0xFD, 0x12, 0x3C, 0x6F, 0x68, 0x5D,
+    0x45, 0xEB, 0xB8, 0xD6, 0x24, 0x65, 0x42, 0x75,
+    0x5C, 0xC2, 0xF3, 0x3A, 0x6A, 0x4E, 0x51, 0x34,
+    0x1B, 0xB6, 0x81, 0xB2, 0x8A, 0xEF, 0x28, 0xA4,
+    0xC5, 0x88, 0x9A, 0x97, 0xE0, 0xEF, 0x31, 0x12,
+    0x01, 0x7E, 0x1B, 0x43, 0x0F, 0x27, 0x80, 0x87,
+    0x98, 0xC5, 0xD5, 0x83, 0xCB, 0x4B, 0xB7, 0x01,
+    0x79, 0x60, 0xA1, 0x1A, 0x03, 0x05, 0xC6, 0x36,
+    0x04, 0x31, 0x3C, 0x06, 0xDB, 0x08, 0xA8, 0xDA,
+    0x8E, 0x32, 0x19, 0x91, 0xF1, 0x0D, 0x61, 0x6F,
+    0xE4, 0xB2, 0x79, 0x8A, 0xDE, 0xF4, 0xF7, 0xFB,
+    0x2C, 0x23, 0x5B, 0xD9, 0x64, 0x2F, 0xB7, 0xB3,
+    0x8B, 0xCA, 0xB8, 0x8C, 0x1D, 0x3B, 0x49, 0x05,
+    0x38, 0xA1, 0xE5, 0x8C, 0x1A, 0xDC, 0xA5, 0x61,
+    0xFE, 0xF4, 0x2B, 0xDC, 0x77, 0x28, 0xF6, 0x19,
+    0xE7, 0xB7, 0x8F, 0x4D, 0x27, 0x2D, 0xED, 0x8A,
+    0x3F, 0x3D, 0xDC, 0x9F, 0xD1, 0x30, 0xFF, 0xD6,
+    0xC3, 0xBE, 0x41, 0x25, 0xE3, 0xA5, 0x9B, 0x73,
+    0xDF, 0x6A, 0xD9, 0xF9, 0x70, 0x84, 0x02, 0x4C,
+    0x35, 0xD4, 0x3E, 0x05, 0x76, 0x3A, 0xDC, 0x6D,
+    0x5A, 0x81, 0xB3, 0x94, 0xF7, 0x22, 0xF7, 0xDC,
+    0xC1, 0x43, 0x31, 0x57, 0x5B, 0x42, 0x9A, 0x0B,
+    0xF4, 0x95, 0x30, 0xA9, 0xBB, 0xD8, 0x06, 0xFB,
+    0x1D, 0x6F, 0x9B, 0xC3, 0xBB, 0xF3, 0xBF, 0xFB,
+    0xB4, 0x9F, 0x35, 0x64, 0x0A, 0x69, 0xB7, 0xD1,
+    0x3E, 0xCA, 0x78, 0x07, 0x04, 0x03, 0x79, 0xD4,
+    0xF3, 0xA8, 0xEC, 0x18, 0xDB, 0x03, 0x5E, 0x47,
+    0xD7, 0xD0, 0x56, 0x2C, 0x74, 0x94, 0x86, 0x04,
+    0x46, 0xB8, 0xD4, 0x35, 0x0A, 0x7B, 0xE6, 0x78,
+    0xC4, 0x43, 0x3C, 0x56, 0xCC, 0x37, 0x8B, 0xFD,
+    0xE8, 0xF4, 0x57, 0xEA, 0xAE, 0xCF, 0x36, 0x97,
+    0x12, 0xAC, 0x39, 0xCF, 0x7C, 0xEF, 0x22, 0x67,
+    0x01, 0xEC, 0xD8, 0x09, 0x49, 0x4E, 0xE3, 0x74,
+    0xDD, 0x39, 0xE1, 0x39, 0xD7, 0x0C, 0x5F, 0x1B,
+    0xCE, 0x69, 0xBC, 0x72, 0x44, 0x87, 0x64, 0x1C,
+    0x08, 0x05, 0x93, 0x69, 0x6D, 0x7F, 0x90, 0x0A,
+    0x2C, 0xCB, 0x8A, 0xBB, 0x7F, 0xE3, 0xE0, 0x80,
+    0x31, 0xD0, 0x0A, 0x3A, 0x95, 0xFF, 0xF7, 0xB4,
+    0x36, 0x38, 0x93, 0xE0, 0x0C, 0x11, 0x37, 0x12,
+    0x06, 0xF6, 0xAD, 0xE9, 0xB1, 0x7A, 0x00, 0xF5,
+    0xD2, 0x32, 0x6B, 0xD0, 0x27, 0xA5, 0x1B, 0x3D,
+    0xE8, 0xDB, 0xCC, 0xA9, 0x1F, 0x1F, 0xB1, 0x99,
+    0x3D, 0x7C, 0xB7, 0xCA, 0xDA, 0x27, 0x2C, 0x64,
+    0x1C, 0x49, 0xB6, 0x87, 0x44, 0x06, 0x94, 0x9D,
+    0xBC, 0x6B, 0x20, 0xA2, 0x68, 0x15, 0x1F, 0xE2,
+    0xF2, 0xAD, 0x6D, 0x23, 0x2E, 0x2B, 0x74, 0xE2,
+    0x5D, 0xE4, 0xB0, 0xC7, 0x84, 0xCB, 0x64, 0xBF,
+    0xE0, 0xA8, 0x18, 0x83, 0xB4, 0xC9, 0xD9, 0x73,
+    0xA8, 0xE6, 0xA9, 0x36, 0xD5, 0x63, 0x1E, 0x2C,
+    0x2A, 0x55, 0x09, 0x77, 0x5E, 0xB3, 0x4B, 0xEA,
+    0xB5, 0xD0, 0x14, 0x5F, 0xEB, 0x50, 0x7B, 0xAA,
+    0xEF, 0x94, 0xBA, 0x2B, 0xD7, 0x8A, 0x07, 0xF1,
+    0xF9, 0x5E, 0x12, 0x12, 0x21, 0x52, 0xE5, 0x0A,
+    0x3E, 0xC0, 0xBC, 0x5D, 0x4C, 0xE2, 0x12, 0x7C,
+    0x39, 0xF9, 0x16, 0x9D, 0xBD, 0x96, 0x83, 0x3B,
+    0x7F, 0x3D, 0x6A, 0xEC, 0xF1, 0x25, 0xD2, 0xB0,
+    0xB0, 0xEB, 0x20, 0x06, 0x07, 0xD6, 0xD9, 0x4C,
+    0x07, 0x9A, 0x82, 0xC1, 0xFC, 0xF7, 0x66, 0x15,
+    0xBD, 0x62, 0x65, 0xD8, 0x6C, 0xF6, 0x33, 0x7B,
+    0x5A, 0x28, 0xEC, 0x90, 0xA1, 0x26, 0x9F, 0xC3,
+    0x28, 0x4A, 0x64, 0x50, 0x5F, 0xCA, 0xE2, 0x6D,
+    0xB8, 0x0F, 0xE2, 0x94, 0xB5, 0x8E, 0x1F, 0x8A,
+    0x8F, 0x6B, 0xA6, 0x86, 0x1F, 0xEE, 0xDC, 0x24,
+    0xB4, 0xB8, 0x25, 0xEC, 0x28, 0x2D, 0xF9, 0xCB,
+    0x7D, 0x38, 0xFF, 0xC7, 0x74, 0x2E, 0xD3, 0x10,
+    0xEC, 0x03, 0x31, 0xEE, 0x83, 0xE7, 0xA4, 0xF7,
+    0xBA, 0x28, 0x21, 0xE0, 0x7F, 0xB4, 0xB7, 0xE1,
+    0x7A, 0xF9, 0x2B, 0xB0, 0x2C, 0x3B, 0x80, 0x5F,
+    0xE0, 0x5D, 0xB2, 0x7E, 0x59, 0xFF, 0x59, 0x07,
+    0x58, 0x42, 0x57, 0xEE, 0x44, 0xF1, 0xB1, 0xAD,
+    0xBA, 0xDE, 0xCB, 0x1D, 0x8A, 0x36, 0x67, 0xE8,
+    0x45, 0xFF, 0x07, 0x8D, 0xEE, 0xA4, 0x51, 0x9C,
+    0x4C, 0x83, 0x5D, 0x2E, 0x2F, 0xE1, 0x5B, 0x75,
+    0xE8, 0x29, 0xCD, 0x0B, 0x07, 0x62, 0xE0, 0xC3,
+    0x0D, 0x1D, 0xEA, 0xCF, 0xF0, 0x8A, 0x65, 0x27,
+    0x70, 0x42, 0x9F, 0x26, 0x00, 0x15, 0x70, 0xC5,
+    0x4A, 0xF6, 0x25, 0xD0, 0x40, 0x72, 0xE9, 0xC1,
+    0x73, 0xFD, 0x48, 0x94, 0xA3, 0x8D, 0x66, 0x63,
+    0x96, 0x4F, 0xF7, 0xEE, 0xFB, 0x4C, 0xC7, 0xB8,
+    0x6B, 0xE9, 0x90, 0xE1, 0x2A, 0x66, 0x80, 0x99,
+    0x3B, 0xB0, 0x1A, 0x6C, 0xF9, 0x0E, 0x72, 0xDA,
+    0x8E, 0x4F, 0x46, 0xC2, 0x6A, 0x4B, 0x7A, 0x16,
+    0xE5, 0x26, 0x0B, 0x5C, 0xD4, 0x47, 0x34, 0xE5,
+    0x37, 0xBE, 0x68, 0x6C, 0xDA, 0xD3, 0x9B, 0x6F,
+    0xAE, 0x51, 0x9C, 0x99, 0x0A, 0x5B, 0xF8, 0x37,
+    0xBC, 0xDE, 0xFC, 0x93, 0xC5, 0xE7, 0x0F, 0xEF,
+    0x0B, 0xA6, 0x07, 0xC2, 0xA6, 0xE6, 0xDA, 0x2D,
+    0x1B, 0x49, 0xC9, 0xDE, 0x6B, 0x27, 0xDC, 0x00,
+    0xEF, 0x23, 0x87, 0x0E, 0xEB, 0xD1, 0x48, 0x7D,
+    0xB4, 0xF2, 0x58, 0xC6, 0x3C, 0xE2, 0x89, 0xBA,
+    0xB0, 0x05, 0xAC, 0x94, 0x41, 0x9A, 0xA8, 0xFF,
+    0x3E, 0xBC, 0x3A, 0x52, 0x9C, 0xF9, 0x7F, 0x07,
+    0x8B, 0xB0, 0x2C, 0x71, 0x83, 0x7B, 0xCF, 0x2E,
+    0x7F, 0x7C, 0x96, 0x65, 0xD9, 0x08, 0x17, 0xEC,
+    0xFA, 0xDE, 0x4E, 0x40, 0x12, 0x26, 0x70, 0x71,
+    0x65, 0xA5, 0xDC, 0x98, 0x47, 0xA3, 0xFC, 0xE0,
+    0x9A, 0x16, 0xED, 0x45, 0x56, 0x72, 0x50, 0x05,
+    0x28, 0x2C, 0x99, 0xEC, 0x20, 0x2E, 0x40, 0xC0,
+    0x26, 0x69, 0xCD, 0x49, 0x45, 0x17, 0xA4, 0xA3,
+    0x42, 0x0D, 0x14, 0x65, 0x87, 0x33, 0x8C, 0x92,
+    0xC5, 0xC4, 0x61, 0xFD, 0xE8, 0x68, 0x56, 0x20,
+    0x57, 0xF5, 0x8E, 0x5F, 0xCF, 0x7E, 0x97, 0xF6,
+    0x49, 0x97, 0x0A, 0xFE, 0xD3, 0x60, 0x1A, 0x5B,
+    0x0C, 0x75, 0xDD, 0x8E, 0x31, 0x78, 0x29, 0xA6,
+    0xB1, 0x4D, 0xAA, 0xDF, 0x8A, 0xD1, 0xE6, 0x91,
+    0xE3, 0x32, 0x3F, 0xEC, 0x8A, 0x1F, 0x0E, 0x35,
+    0x07, 0x6E, 0x4B, 0x83, 0x3B, 0xE5, 0x67, 0x34,
+    0x1F, 0x0C, 0x81, 0xD8, 0xD5, 0x25, 0x68, 0xE5,
+    0x28, 0x1B, 0x5C, 0x81, 0x3E, 0xE3, 0x5C, 0xB4,
+    0xB6, 0xBD, 0x62, 0x6A, 0x70, 0x33, 0xC2, 0xC5,
+    0x75, 0x27, 0xF4, 0x30, 0xE1, 0x1D, 0xC1, 0x4C,
+    0xC5, 0x02, 0x12, 0x46, 0xAC, 0xEC, 0xF9, 0xE8,
+    0xE7, 0x58, 0x24, 0x11, 0xB1, 0xF3, 0xB7, 0x8C,
+    0x3C, 0xA4, 0x0A, 0x94, 0xA6, 0x7C, 0x68, 0x54,
+    0x5B, 0xB9, 0x4D, 0x57, 0x9C, 0xE7, 0x28, 0x09,
+    0x6B, 0x89, 0x26, 0x5D, 0xE7, 0x50, 0xA9, 0x95,
+    0x90, 0x91, 0x8E, 0x00, 0x59, 0xF8, 0x3A, 0x70,
+    0xAF, 0x48, 0x2E, 0xE8, 0xC4, 0x34, 0x8C, 0xF4,
+    0x5F, 0x7F, 0xCB, 0x07, 0xAA, 0xF0, 0xD9, 0xFB,
+    0x5C, 0x32, 0x90, 0x22, 0x1A, 0xD2, 0x1A, 0xCF,
+    0x92, 0x06, 0x02, 0xCF, 0x10, 0x18, 0x7B, 0x93,
+    0xCC, 0x07, 0x4A, 0x31, 0x25, 0x30, 0x23, 0x06,
+    0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01,
+    0x09, 0x15, 0x31, 0x16, 0x04, 0x14, 0xD1, 0xDE,
+    0x23, 0x16, 0x9F, 0x6E, 0xF4, 0x42, 0x21, 0x23,
+    0xE1, 0x11, 0xAA, 0xC8, 0x7C, 0x60, 0x4A, 0x78,
+    0x9D, 0x24, 0x30, 0x31, 0x30, 0x21, 0x30, 0x09,
+    0x06, 0x05, 0x2B, 0x0E, 0x03, 0x02, 0x1A, 0x05,
+    0x00, 0x04, 0x14, 0xD6, 0x4A, 0xBB, 0x75, 0xB1,
+    0xF9, 0x9E, 0xD3, 0x58, 0x6D, 0xD1, 0x74, 0x9F,
+    0x00, 0x8A, 0xF2, 0xC8, 0xAA, 0x52, 0x4D, 0x04,
+    0x08, 0x77, 0x46, 0xE7, 0xBA, 0x25, 0x4B, 0xDA,
+    0x41, 0x02, 0x02, 0x08, 0x00]
+};
+
+const WPA_EAP_CLIENT_LIST = [
+  {
+    ssid: 'WPA-EAP-PEAP',
+    keyManagement: 'WPA-EAP',
+    eap: 'PEAP',
+    identity: EAP_USERNAME,
+    password: EAP_PASSWORD,
+    serverCertificate: CLIENT_PKCS12_CERT.nickname,
+    phase2: 'MSCHAPV2'
+  }
+];
+
+/**
+ * Convert the given MozWifiNetwork object array to testAssociate chain.
+ *
+ * @param aNetworks
+ *        An array of MozWifiNetwork which we want to convert.
+ *
+ * @return A promise chain which "then"s testAssociate accordingly.
+ */
+function convertToTestAssociateChain(aNetworks) {
+  let chain = Promise.resolve();
+
+  aNetworks.forEach(function (aNetwork) {
+    network = new window.MozWifiNetwork(aNetwork);
+    chain = chain.then(() => gTestSuite.testAssociate(network));
+  });
+
+  return chain;
+}
+
+gTestSuite.doTestWithCertificate(
+  new Blob([new Uint8Array(CLIENT_PKCS12_CERT.content)]),
+  CLIENT_PKCS12_CERT.password,
+  CLIENT_PKCS12_CERT.nickname,
+  CLIENT_PKCS12_CERT.usage,
+  function() {
+    return gTestSuite.ensureWifiEnabled(true)
+      // Load required server files.
+      .then(() => gTestSuite.writeFile(SERVER_EAP_USER_CONF.path, SERVER_EAP_USER_CONF.content))
+      .then(() => gTestSuite.writeFile(CA_CERT.path, CA_CERT.content))
+      .then(() => gTestSuite.writeFile(SERVER_CERT.path, SERVER_CERT.content))
+      .then(() => gTestSuite.writeFile(SERVER_KEY.path, SERVER_KEY.content))
+      // Start AP.
+      .then(() => gTestSuite.startHostapds(WPA_EAP_AP_LIST))
+      // Scan test.
+      .then(() => gTestSuite.testWifiScanWithRetry(SCAN_RETRY_CNT, WPA_EAP_AP_LIST))
+      // Associate test.
+      .then(() => convertToTestAssociateChain(WPA_EAP_CLIENT_LIST))
+      // Tear down.
+      .then(gTestSuite.killAllHostapd)
+});
new file mode 100644
--- /dev/null
+++ b/dom/wifi/test/marionette/test_wifi_associate_WPA_EAP_TLS.js
@@ -0,0 +1,622 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+MARIONETTE_TIMEOUT = 60000;
+MARIONETTE_HEAD_JS = 'head.js';
+
+const SCAN_RETRY_CNT = 5;
+
+const EAP_USERNAME = 'username';
+const EAP_PASSWORD = 'password';
+
+const SERVER_EAP_USER_CONF = {
+  path: HOSTAPD_CONFIG_PATH + 'hostapd.eap_user',
+  content: '* PEAP,TTLS,TLS\n' +
+    '"' + EAP_USERNAME + '" MSCHAPV2,TTLS-MSCHAPV2 "' + EAP_PASSWORD + '" [2]\n'
+};
+const CA_CERT = {
+  path: HOSTAPD_CONFIG_PATH + 'ca.pem',
+  content: '-----BEGIN CERTIFICATE-----\n' +
+    'MIIDsTCCApmgAwIBAgIJAKxTf+8X8qngMA0GCSqGSIb3DQEBCwUAMG4xCzAJBgNV\n' +
+    'BAYTAlRXMRMwEQYDVQQIDApTb21lLVN0YXRlMREwDwYDVQQKDAhjaHVja2xlZTER\n' +
+    'MA8GA1UEAwwIY2h1Y2tsZWUxJDAiBgkqhkiG9w0BCQEWFWNodWNrbGkwNzA2QGdt\n' +
+    'YWlsLmNvbTAgFw0xNDEyMjQxMTI4NTBaGA8yMjg4MTAwNzExMjg1MFowbjELMAkG\n' +
+    'A1UEBhMCVFcxEzARBgNVBAgMClNvbWUtU3RhdGUxETAPBgNVBAoMCGNodWNrbGVl\n' +
+    'MREwDwYDVQQDDAhjaHVja2xlZTEkMCIGCSqGSIb3DQEJARYVY2h1Y2tsaTA3MDZA\n' +
+    'Z21haWwuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAo3c2yFxY\n' +
+    'o6gGg0I83jy00ME+MAfzCd+4ShL45ZLqysQP93jRBfPzU9ZuZ29ysVwgWIdqkZao\n' +
+    'XTuV/NAW2GMGd8W1jQJ3J81fjb9wvhlny3rrACwvUn1N1S1BnM+BAAiDLGxEmvAQ\n' +
+    'onp2aaa6HsHsYS8ONX+d2Qh4LEA4vupeSGAqJychCZv/l+aq/ErFZhFYB3CPUQEt\n' +
+    'cClO24ucsIYP95lA0zhscnmAj06qplFD4Bv6IVrdDqujy1zNwCQwsJq/8OQdaTN/\n' +
+    'h3y9pWvNKMBMM2niOUAjtuNpqsSK/lTS1WAT3PdtVECX9fYBi0Bg+HM92xs/6gt6\n' +
+    'kh9jPV8keXHvSwIDAQABo1AwTjAdBgNVHQ4EFgQU7hBqhuG04xeCzrQ3ngx18ZJ3\n' +
+    'lUswHwYDVR0jBBgwFoAU7hBqhuG04xeCzrQ3ngx18ZJ3lUswDAYDVR0TBAUwAwEB\n' +
+    '/zANBgkqhkiG9w0BAQsFAAOCAQEAFYX2iy680GAnBTttk0gyX6gk+8pYr3D22k/G\n' +
+    '6rvcjefzS7ELQPRKr6mfmwXq3mMf/4jiS2zI5zmXsestPYzHYxf2viQ6t7vr9XiJ\n' +
+    '3WfFjNw4ERlRisAvg0aqqTNNQq5v2VME4sdFZagy217f73C7azwCHl0bqOLH05rl\n' +
+    '8RubOxiHEj7ZybJqnRciK/bht4D+rZkwf4bBBmoloqH7xT0+rFQclpYXDGGjNUQB\n' +
+    'LcHLF10xcr7g3ZVVu82fe6+d85gIGOIMR9+TKhdw6gO3CNcnDAj6gxksghgtcxmh\n' +
+    'OzOggCn7nlIwImtsg2sZkpWB4lEi9hdv4lkNuyFjOL3bnuc+NA==\n' +
+    '-----END CERTIFICATE-----\n'
+};
+
+const SERVER_CERT = {
+  path: HOSTAPD_CONFIG_PATH + 'server.pem',
+  content: '-----BEGIN CERTIFICATE-----\n' +
+    'MIID1DCCArygAwIBAgIBADANBgkqhkiG9w0BAQsFADBuMQswCQYDVQQGEwJUVzET\n' +
+    'MBEGA1UECAwKU29tZS1TdGF0ZTERMA8GA1UECgwIY2h1Y2tsZWUxETAPBgNVBAMM\n' +
+    'CGNodWNrbGVlMSQwIgYJKoZIhvcNAQkBFhVjaHVja2xpMDcwNkBnbWFpbC5jb20w\n' +
+    'IBcNMTQxMjI0MTEyOTQ5WhgPMjI4ODEwMDcxMTI5NDlaMG4xCzAJBgNVBAYTAlRX\n' +
+    'MRMwEQYDVQQIDApTb21lLVN0YXRlMREwDwYDVQQKDAhjaHVja2xlZTERMA8GA1UE\n' +
+    'AwwIY2h1Y2tsZWUxJDAiBgkqhkiG9w0BCQEWFWNodWNrbGkwNzA2QGdtYWlsLmNv\n' +
+    'bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMdhQmKilTJbWZRxTiSV\n' +
+    'rqIU+LYW1RKghx5o+0JpNRJVLuz5kBMaNskbbfUSNuHbEq0QA9BDKAZWIc4LSotk\n' +
+    'lCo8TbcO9CJvJPQGGjGdHcohWX5vy6BE/OVE46CUteMFyZF6F8R2fNUww08iR/u1\n' +
+    'YZebL5pWO1j43sPpAzEy6Tij2ACPt6EZcFaZG3SF2mVJWkCQnBqrojP65WUvZQqp\n' +
+    'seUhW2YAS8Nu0Yrohgxz6VYk+cNDuDZVGs6qWRStZzJfYrfc76DtkHof5B14M+xp\n' +
+    'XJaBLxN+whvnYkDTfinaCxnW1O7eXUltr87fLc5zmeBkgwaiaQuIdcfZm7vDUiz8\n' +
+    'vnUCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBH\n' +
+    'ZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFKK4f9/YavTHOfEiAB83Deac\n' +
+    '6gT5MB8GA1UdIwQYMBaAFO4QaobhtOMXgs60N54MdfGSd5VLMA0GCSqGSIb3DQEB\n' +
+    'CwUAA4IBAQBWnO9o9KSJIqjoz5Nwll63ULOdcvgGdOeJIw1fcKQ817Rsp+TVcjcH\n' +
+    'IrIADsT/QZGXRO/l6p1750e2iFtJEo1hsRaxtA1wWn2I9HO3+av2spQhr3jpYGPf\n' +
+    'zpsMTp4RNYV7Q8+q1kZIz9PY4V1T0p6lveK8+fUj2hSLnxSj0QiGSJJtnEC3w4Rv\n' +
+    'C9T6oUwIeToULmi+8FXQFdEqwKRU98DPq3eLzN28ZxUgoPE1C8+42D2UW8uyp/Gm\n' +
+    'tGOa/k7nzkCdVqZI7lX7f0AjEvQgjtAMQ/k7Mhxx7TzW2HO+1YPMoKji6Z4WkNwt\n' +
+    'JEj9ZUBSNt8B26UksJMBDkcvSegF3a7o\n' +
+    '-----END CERTIFICATE-----\n'
+};
+
+const SERVER_KEY = {
+  path: HOSTAPD_CONFIG_PATH + 'server.key',
+  content: '-----BEGIN RSA PRIVATE KEY-----\n' +
+    'MIIEpAIBAAKCAQEAx2FCYqKVMltZlHFOJJWuohT4thbVEqCHHmj7Qmk1ElUu7PmQ\n' +
+    'Exo2yRtt9RI24dsSrRAD0EMoBlYhzgtKi2SUKjxNtw70Im8k9AYaMZ0dyiFZfm/L\n' +
+    'oET85UTjoJS14wXJkXoXxHZ81TDDTyJH+7Vhl5svmlY7WPjew+kDMTLpOKPYAI+3\n' +
+    'oRlwVpkbdIXaZUlaQJCcGquiM/rlZS9lCqmx5SFbZgBLw27RiuiGDHPpViT5w0O4\n' +
+    'NlUazqpZFK1nMl9it9zvoO2Qeh/kHXgz7GlcloEvE37CG+diQNN+KdoLGdbU7t5d\n' +
+    'SW2vzt8tznOZ4GSDBqJpC4h1x9mbu8NSLPy+dQIDAQABAoIBAASG4Mr8hgaurEoC\n' +
+    'iJOsElr7vunjetMBcg/uskW/vcS8ymP3Bp5oafYG+WgnEbfvEW18f5mq7K24JuxW\n' +
+    'tUqU7ghHdjxByqk9fMlNmiqmNpbwSufkAeuRpWxPNBvhRH/zEbCL5R5A0nTEtqqF\n' +
+    'TL0aUSzwCRSoAJD0lZo9ICVt0n3GsDyM9rqQg/uZmh1qsRdwPsRuYORND9g48rKq\n' +
+    '6WN9leskSxhhsYE2D9ocOFd9bNt8Zxejh9ppVSnG/KsIdt18iBzcabatgAQ046fb\n' +
+    'Z3vprcZJLg93Sg2gSuVqlSTs3M2W8VQnm22/EBMb1y0M48MSRCgnbPLG/CcCLLfF\n' +
+    'LwxCOgECgYEA/eYt67xyJ6JeAdxdwOZuT1WWGbFpLiG9+2OgiHumyRQ5969XMTWo\n' +
+    'fIhMKchDdjoy9RR236\/\/EFCs7UEyB7+a7ODRzNiK2zCD8Smjp+21fUPSthEeQesk\n' +
+    'eiMYICIu5Ay35x9sxIX+XOUVvRhPOGcD29GVeRnKh1inTHOz2dje8LkCgYEAyQeY\n' +
+    'STi9jjCEcHkM1E/UeDiLfHHepLXi8wS41JNRHl5Jacp7XB5djAjKu/jf367/VpFy\n' +
+    'GDDMetE7n8eWkrnAvovxOwZ000YDMtL1sUYSjL+XtBS5s6VY1p4qaSAY9nUUGrJh\n' +
+    'JvtvsuI7SKTtL+60vjBOH7zDnvOdBgAp0utLhZ0CgYEAuLzzqrPKB8afShFSchn4\n' +
+    'J2dpuLYahsNsXW7HDqeR2nsKFosRETAusLXnXPtnAq4kB6jlOarwFqnsuRCX24Vx\n' +
+    'r2uBm9/vYL7zMdUPTA+s30ErHuhjsKjsOKYyVqcooSwT32pBFNk+E89nutfmRG7I\n' +
+    'IvhjHuNCNqqtx/Xj5d1jkZkCgYBQicppC2Jl5OoqZVTOem0U/RJk+PnJ41TZJ7sk\n' +
+    '7yBAmmWvDH\/\/l+rCf4M5a6vFYcbKV9rt9h711X2dtciNX/3oWQh8LUoAmrwNUJc+\n' +
+    'PmSQHvIYI3WCk2vUD+nN1B4sHxu+1lg11eYaNKiroeeknG2tBI1ICcgVlmQCU25u\n' +
+    'IfZPwQKBgQCdO6QHhPLtcHUDNFA6FQ1jKL1iEd7G0JLVRz4Xkpkn1Vrr5MD6JFDa\n' +
+    '5ccabADyl0lpFqDIVJQIzLku2hOD2i9aBNCY0pL391HeOS7CkZX+TdOY1tquoBq5\n' +
+    'MnmixZjDCVd2VcrVyTA6ntOBoharKFW0rH1PqU+qu7dZF7CBPbAdEw==\n' +
+    '-----END RSA PRIVATE KEY-----\n'
+};
+
+const WPA_EAP_AP_LIST = [
+  {
+    ssid: 'WPA-EAP-TLS',
+    ieee8021x: 1,
+    eapol_version: 1,
+    eap_server: 1,
+    eapol_key_index_workaround: 0,
+    eap_user_file: SERVER_EAP_USER_CONF.path,
+    ca_cert: CA_CERT.path,
+    server_cert: SERVER_CERT.path,
+    private_key: SERVER_KEY.path,
+    wpa: 2,
+    wpa_key_mgmt: 'WPA-EAP'
+  }
+];
+
+const CLIENT_PKCS12_CERT = {
+  nickname: 'client',
+  password: 'password',
+  usage: ['UserCert', 'ServerCert'],
+  content: [0x30, 0x82, 0x0E, 0x01, 0x02, 0x01, 0x03, 0x30,
+    0x82, 0x0D, 0xC7, 0x06, 0x09, 0x2A, 0x86, 0x48,
+    0x86, 0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82,
+    0x0D, 0xB8, 0x04, 0x82, 0x0D, 0xB4, 0x30, 0x82,
+    0x0D, 0xB0, 0x30, 0x82, 0x08, 0x67, 0x06, 0x09,
+    0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x07,
+    0x06, 0xA0, 0x82, 0x08, 0x58, 0x30, 0x82, 0x08,
+    0x54, 0x02, 0x01, 0x00, 0x30, 0x82, 0x08, 0x4D,
+    0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D,
+    0x01, 0x07, 0x01, 0x30, 0x1C, 0x06, 0x0A, 0x2A,
+    0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x0C, 0x01,
+    0x06, 0x30, 0x0E, 0x04, 0x08, 0x67, 0x7A, 0xF3,
+    0x61, 0xBE, 0xE0, 0x51, 0xC1, 0x02, 0x02, 0x08,
+    0x00, 0x80, 0x82, 0x08, 0x20, 0xFC, 0x6A, 0x79,
+    0xA1, 0x6C, 0xAF, 0xBE, 0xEE, 0x62, 0x45, 0x33,
+    0xB8, 0x48, 0xE1, 0x68, 0xA1, 0x15, 0x11, 0x4B,
+    0x95, 0xCB, 0x77, 0xC0, 0x5D, 0xA2, 0xCB, 0xDB,
+    0xD1, 0x83, 0x74, 0x60, 0xD7, 0xEC, 0x42, 0xA6,
+    0x3A, 0x23, 0xF7, 0x85, 0xEB, 0xC1, 0xFE, 0x6A,
+    0x57, 0x8E, 0xC1, 0x44, 0xF3, 0x1F, 0xFE, 0xB8,
+    0x2D, 0x8C, 0x4D, 0xC9, 0x5B, 0xAE, 0x21, 0x2E,
+    0x4C, 0x1A, 0xEB, 0x84, 0x09, 0xF3, 0x40, 0x92,
+    0x39, 0x7F, 0x56, 0x02, 0x46, 0x61, 0x16, 0xDE,
+    0x5C, 0x48, 0xB6, 0x0C, 0x1D, 0xD3, 0x5F, 0x10,
+    0x9A, 0x39, 0xB8, 0x66, 0x31, 0xFC, 0x39, 0x71,
+    0x87, 0x23, 0x46, 0x9D, 0xE8, 0x3C, 0x2B, 0xA1,
+    0x39, 0x8A, 0xD3, 0xFF, 0xD9, 0x43, 0xB6, 0x61,
+    0xC6, 0x67, 0x70, 0x40, 0xBD, 0xFE, 0xD3, 0xC1,
+    0x68, 0xF5, 0xF7, 0xC8, 0x89, 0xD8, 0x17, 0xC5,
+    0xE8, 0x3D, 0x29, 0xD5, 0x91, 0xDF, 0x1F, 0x56,
+    0x74, 0x5A, 0xC4, 0xA8, 0x14, 0xBA, 0xD4, 0xFA,
+    0x13, 0x49, 0x2A, 0x9F, 0x63, 0xF1, 0xB2, 0x45,
+    0xF1, 0xF0, 0x2A, 0xDD, 0x75, 0x66, 0x8A, 0xF7,
+    0xAB, 0x73, 0x86, 0x26, 0x9D, 0x1F, 0x07, 0xAD,
+    0xD3, 0xFE, 0xE0, 0xA3, 0xED, 0xA0, 0x96, 0x3E,
+    0x1E, 0x89, 0x86, 0x02, 0x4C, 0x28, 0xFD, 0x57,
+    0xA1, 0x67, 0x55, 0xF0, 0x82, 0x3B, 0x7F, 0xCC,
+    0x2A, 0x32, 0x01, 0x93, 0x1D, 0x8B, 0x66, 0x8A,
+    0x20, 0x52, 0x84, 0xDD, 0x2C, 0xFD, 0xEE, 0x72,
+    0xF3, 0x8C, 0x58, 0xB9, 0x99, 0xE5, 0xC1, 0x22,
+    0x63, 0x59, 0x00, 0xE2, 0x76, 0xC5, 0x3A, 0x17,
+    0x7F, 0x93, 0xE9, 0x67, 0x61, 0xAA, 0x10, 0xC3,
+    0xD9, 0xC8, 0x24, 0x46, 0x5B, 0xBE, 0x8C, 0x1F,
+    0x2D, 0x66, 0x48, 0xD2, 0x02, 0x11, 0xFB, 0x74,
+    0x14, 0x76, 0x76, 0x5A, 0x98, 0x54, 0x35, 0xA7,
+    0x85, 0x66, 0x20, 0x26, 0x8B, 0x13, 0x6F, 0x68,
+    0xE3, 0xC9, 0x58, 0x7D, 0x1C, 0x3E, 0x01, 0x8D,
+    0xF8, 0xD6, 0x7F, 0xCF, 0xA2, 0x07, 0xB7, 0x95,
+    0xFD, 0xF0, 0x02, 0x34, 0x32, 0x30, 0xE8, 0xD4,
+    0x57, 0x5E, 0x53, 0xFB, 0x54, 0xE2, 0x03, 0x32,
+    0xCC, 0x52, 0x2E, 0xD2, 0x35, 0xD9, 0x58, 0x85,
+    0x2D, 0xEC, 0x2D, 0x71, 0xD1, 0x8A, 0x29, 0xD0,
+    0xB0, 0x24, 0xBD, 0x24, 0xDC, 0x1A, 0x28, 0x3F,
+    0xA0, 0x12, 0x81, 0x15, 0x24, 0xC9, 0xB5, 0x4A,
+    0x23, 0xB6, 0xA3, 0x45, 0x50, 0x2D, 0x73, 0x99,
+    0x6B, 0x1C, 0xFB, 0xA4, 0x53, 0xD7, 0x5C, 0xF4,
+    0x6C, 0xB0, 0xE5, 0x74, 0xB3, 0x76, 0xF8, 0xB1,
+    0x0D, 0x59, 0x70, 0x9F, 0xCA, 0xDE, 0xF2, 0xAA,
+    0x4C, 0x7D, 0x11, 0x54, 0xC4, 0x19, 0x0F, 0x36,
+    0x4A, 0x62, 0xFF, 0x8B, 0x10, 0xCB, 0x93, 0x50,
+    0xDA, 0x79, 0x5E, 0x4E, 0x09, 0x1F, 0x22, 0xC8,
+    0x19, 0x85, 0xE9, 0xEE, 0xB7, 0x71, 0x65, 0xB9,
+    0x10, 0xD2, 0x0A, 0x73, 0x5B, 0xA6, 0xDA, 0x37,
+    0x46, 0x02, 0x00, 0x98, 0x9E, 0x20, 0x6C, 0x7D,
+    0xC7, 0x69, 0xBB, 0xC2, 0x00, 0x40, 0x9C, 0x57,
+    0x00, 0xC2, 0x36, 0x76, 0xE8, 0x2A, 0x8D, 0xAD,
+    0x62, 0x57, 0xC8, 0xD0, 0x9D, 0x66, 0x27, 0x5A,
+    0xD8, 0x0D, 0x35, 0x60, 0x28, 0x38, 0x62, 0x94,
+    0x78, 0x36, 0x25, 0x58, 0xFD, 0xF8, 0x66, 0x1F,
+    0x68, 0x04, 0x0F, 0xD8, 0x00, 0xDF, 0xA0, 0x6C,
+    0x25, 0x42, 0x9A, 0x4C, 0xEB, 0x80, 0x13, 0x51,
+    0x7D, 0x2D, 0xA8, 0x89, 0xD6, 0x1B, 0x67, 0x72,
+    0x01, 0xF3, 0x2D, 0x16, 0x77, 0xFE, 0x22, 0xBC,
+    0x8A, 0x45, 0x09, 0x1F, 0x9C, 0x2F, 0x2A, 0xA9,
+    0x61, 0x5B, 0x4A, 0xE6, 0x64, 0x2C, 0x62, 0x1A,
+    0x3A, 0x96, 0xE6, 0x0A, 0xAE, 0x05, 0x1A, 0xC8,
+    0xCB, 0xD6, 0x8F, 0x3A, 0x4B, 0xE0, 0x7F, 0x82,
+    0xB4, 0x98, 0xF1, 0x9D, 0xD7, 0x14, 0x76, 0x5E,
+    0x77, 0x85, 0x87, 0xEC, 0x13, 0xDA, 0xFD, 0xAF,
+    0xCB, 0xA3, 0x1C, 0x99, 0xC1, 0xFE, 0x17, 0x0C,
+    0x40, 0x4D, 0x3C, 0x8F, 0x70, 0x86, 0x63, 0x64,
+    0xB7, 0x75, 0xA8, 0x71, 0x36, 0xDC, 0x54, 0x10,
+    0x57, 0x0C, 0xA8, 0xF2, 0xA1, 0xBB, 0xED, 0x03,
+    0x41, 0x57, 0x34, 0x2C, 0x8F, 0x7C, 0xA0, 0x09,
+    0xF3, 0x9E, 0x41, 0xB7, 0xA8, 0xD4, 0x66, 0x0D,
+    0x0D, 0xC0, 0x6A, 0xFC, 0x6A, 0xA2, 0xAC, 0xE2,
+    0x60, 0x00, 0xE3, 0xF7, 0x75, 0x43, 0x23, 0xEB,
+    0xC8, 0x61, 0xFA, 0xB3, 0xB8, 0x28, 0xCE, 0xCA,
+    0xF4, 0x47, 0x7F, 0x30, 0x6D, 0x61, 0x89, 0x47,
+    0xA1, 0x4A, 0xFE, 0xD1, 0x21, 0x0B, 0x6D, 0xF4,
+    0x3F, 0x00, 0x86, 0x30, 0x8E, 0x33, 0x21, 0x6F,
+    0xDA, 0x15, 0xFD, 0x5F, 0xEC, 0x8E, 0xF1, 0x12,
+    0x3F, 0xC9, 0x83, 0x0C, 0xCA, 0x22, 0x01, 0xF1,
+    0x70, 0x5F, 0x1F, 0x66, 0xB5, 0xF8, 0x3E, 0x7A,
+    0x6F, 0xDE, 0xDB, 0xA7, 0x8D, 0x18, 0x9E, 0xBE,
+    0xDB, 0xAD, 0x3D, 0x66, 0x30, 0xC1, 0x6C, 0x0C,
+    0x87, 0xB4, 0x65, 0x75, 0xE0, 0x9D, 0xEA, 0x16,
+    0x0D, 0x07, 0x37, 0x33, 0xC5, 0xEC, 0x97, 0x93,
+    0x37, 0xEB, 0x8E, 0x65, 0x9C, 0x40, 0x63, 0x6C,
+    0x43, 0x60, 0xB0, 0x40, 0x4D, 0x85, 0xEF, 0xC2,
+    0x47, 0x5F, 0xE7, 0x6B, 0xCB, 0x40, 0xE8, 0xEA,
+    0xD8, 0xAB, 0xB1, 0x9A, 0x72, 0xDC, 0x4C, 0x14,
+    0xFA, 0x43, 0x61, 0x5F, 0xA6, 0x5C, 0x3A, 0x05,
+    0x17, 0x2E, 0x74, 0xF3, 0x5E, 0x45, 0xD9, 0x47,
+    0xAA, 0x59, 0xB6, 0x8F, 0x42, 0x66, 0x42, 0x29,
+    0x90, 0x95, 0x48, 0x46, 0x91, 0x88, 0x3C, 0x8C,
+    0xDE, 0xCC, 0xED, 0xB3, 0xAA, 0x62, 0xEA, 0xBC,
+    0xB4, 0x0C, 0x48, 0x4C, 0x53, 0x23, 0x5E, 0x24,
+    0x85, 0xBF, 0x92, 0xDA, 0x14, 0xDB, 0x1A, 0x3D,
+    0xEF, 0x30, 0xD9, 0x49, 0x64, 0x4D, 0xE5, 0x01,
+    0xFC, 0xA4, 0x4B, 0xD1, 0x9F, 0xDE, 0x96, 0x7F,
+    0x50, 0xBC, 0x4D, 0x38, 0x44, 0xE9, 0x23, 0x5F,
+    0x37, 0x57, 0x1A, 0xA6, 0x52, 0x5A, 0x0F, 0x4F,
+    0x87, 0x33, 0x4A, 0x7B, 0x66, 0xEE, 0x3D, 0x66,
+    0x0A, 0x63, 0x39, 0x1F, 0x23, 0x38, 0x35, 0x73,
+    0x60, 0x5E, 0x47, 0x20, 0x4F, 0xC0, 0xC8, 0x3C,
+    0x09, 0xF9, 0x29, 0x4F, 0x5E, 0x55, 0x69, 0xC4,
+    0x6B, 0xE8, 0xF8, 0x91, 0xC0, 0x22, 0x65, 0x15,
+    0x1E, 0xFB, 0xB9, 0x61, 0xCE, 0x45, 0xBE, 0x2B,
+    0xEE, 0xB9, 0x04, 0x2B, 0xFD, 0xAE, 0x61, 0x1C,
+    0x3D, 0x3D, 0x7C, 0xBF, 0xC1, 0xF7, 0x3C, 0x4E,
+    0x9E, 0x0E, 0x54, 0xC8, 0xAD, 0xA9, 0xDF, 0x43,
+    0x49, 0xB9, 0x41, 0x05, 0xE5, 0xF1, 0x49, 0xAA,
+    0x77, 0x6C, 0x34, 0x5B, 0x93, 0x24, 0x24, 0x23,
+    0x74, 0x68, 0x11, 0xCE, 0x15, 0x80, 0xA1, 0xA4,
+    0x1F, 0x8D, 0x81, 0xCD, 0xB2, 0x98, 0xCA, 0x14,
+    0x0B, 0x0C, 0x61, 0x50, 0x69, 0x72, 0xAE, 0xFA,
+    0x8B, 0xC0, 0x3F, 0x0D, 0xE7, 0xF2, 0x0F, 0xEB,
+    0xC1, 0x11, 0xB9, 0x10, 0x03, 0x6A, 0xF5, 0x97,
+    0x3C, 0x53, 0x2F, 0x67, 0x86, 0x09, 0x6A, 0xE3,
+    0x28, 0xC0, 0x78, 0xC8, 0xB4, 0x39, 0x8E, 0xD1,
+    0xCE, 0x25, 0xE8, 0x66, 0xF7, 0x09, 0x40, 0x7D,
+    0x81, 0xFB, 0xAF, 0xFA, 0x59, 0xC4, 0x9B, 0x2B,
+    0x83, 0x45, 0x5B, 0xA8, 0x66, 0x9E, 0x38, 0xC8,
+    0xFD, 0xAC, 0xF2, 0x2D, 0x21, 0xDE, 0x50, 0x4C,
+    0x03, 0xCB, 0x88, 0x42, 0xDD, 0x84, 0x09, 0x99,
+    0x8E, 0x8B, 0x40, 0x97, 0x1B, 0x14, 0x85, 0x37,
+    0x11, 0x01, 0xE0, 0x74, 0x6B, 0x33, 0x52, 0x8C,
+    0x68, 0x3A, 0x89, 0xB2, 0xAF, 0x35, 0xE6, 0x65,
+    0xC3, 0x58, 0x70, 0xD2, 0xE7, 0x1F, 0x1F, 0xF6,
+    0xE5, 0x0A, 0xB1, 0xFE, 0xD0, 0xC9, 0x51, 0x50,
+    0xE7, 0xFD, 0x58, 0xF5, 0xC4, 0x58, 0x65, 0x94,
+    0xD1, 0x57, 0x55, 0x5E, 0xD2, 0x27, 0x98, 0xAF,
+    0xE7, 0x55, 0x0B, 0x87, 0x50, 0x9B, 0xEF, 0xE8,
+    0x2B, 0xFC, 0xE7, 0x3B, 0x4E, 0xD7, 0xB7, 0x4D,
+    0xF4, 0xBC, 0xF4, 0x88, 0x63, 0xE4, 0x8A, 0x20,
+    0x4B, 0x22, 0xB0, 0xA0, 0x53, 0x7F, 0xA8, 0xC9,
+    0x0C, 0xF8, 0xD7, 0xBD, 0x46, 0x39, 0xA7, 0x7D,
+    0xDD, 0x10, 0x91, 0x50, 0x54, 0x06, 0x47, 0xF0,
+    0x3C, 0xAA, 0x43, 0x40, 0xF8, 0x54, 0xDD, 0x8A,
+    0xEA, 0x8A, 0x0B, 0xA5, 0x7F, 0xCD, 0x5E, 0xAA,
+    0x02, 0x2E, 0x1F, 0xC6, 0x50, 0x15, 0xF8, 0x0A,
+    0x0C, 0x1B, 0x3C, 0x55, 0x3A, 0xC3, 0x6F, 0x88,
+    0xD7, 0xBF, 0xB1, 0x02, 0xCC, 0xE0, 0x08, 0x29,
+    0x97, 0xD2, 0xAA, 0x23, 0xC4, 0x6D, 0xE3, 0xE3,
+    0x76, 0x39, 0x92, 0xC3, 0x2E, 0x7A, 0xE2, 0x98,
+    0xD1, 0xFC, 0xAE, 0xCC, 0x95, 0xD8, 0xB4, 0xDC,
+    0x92, 0xEA, 0x6A, 0x5F, 0xF2, 0x92, 0x17, 0x0B,
+    0x8D, 0xC3, 0xFA, 0x9C, 0x62, 0xCE, 0x44, 0x8D,
+    0xC3, 0x1E, 0xC3, 0xB2, 0xD5, 0x00, 0xCD, 0xB4,
+    0x9E, 0x2D, 0x7B, 0xF2, 0x98, 0xA3, 0x00, 0x8B,
+    0x81, 0x30, 0x77, 0x5B, 0x02, 0x99, 0xB1, 0xCD,
+    0xC3, 0x1D, 0x74, 0x74, 0xEF, 0x41, 0xCB, 0x69,
+    0x63, 0x8E, 0xA6, 0xD3, 0x2D, 0x3E, 0x1F, 0x1D,
+    0x12, 0x9E, 0xD9, 0x18, 0x67, 0x06, 0xAF, 0x37,
+    0x29, 0xAD, 0x65, 0xD8, 0xEB, 0x71, 0xC4, 0x7D,
+    0x94, 0x3D, 0xEA, 0xCC, 0xDF, 0x72, 0x41, 0x51,
+    0x3C, 0xA1, 0x66, 0x98, 0x32, 0x32, 0x40, 0x54,
+    0xB0, 0x2F, 0xEB, 0xCE, 0xDF, 0x4A, 0x64, 0xFB,
+    0x9A, 0x90, 0xDC, 0xF6, 0x6F, 0xA9, 0xD4, 0xCA,
+    0xCB, 0x91, 0xC4, 0xFE, 0xEE, 0x9C, 0x01, 0x50,
+    0x2E, 0xAC, 0xCC, 0x5F, 0x89, 0xD0, 0x91, 0xA3,
+    0xD9, 0xF9, 0x4B, 0x8D, 0xDE, 0x6C, 0x60, 0x21,
+    0x19, 0xB1, 0xD3, 0x4D, 0x75, 0x56, 0x6F, 0xB8,
+    0x25, 0xA4, 0x92, 0x4F, 0x12, 0xF5, 0x8F, 0xC1,
+    0x17, 0x4B, 0xB3, 0x34, 0x21, 0x22, 0xAC, 0x52,
+    0xD2, 0x64, 0xC9, 0x9A, 0x7D, 0xFC, 0xC0, 0x0A,
+    0x89, 0x34, 0xFF, 0x08, 0xD3, 0x04, 0xDC, 0xFE,
+    0x7C, 0xB3, 0xB8, 0xFD, 0x85, 0xDD, 0x79, 0x51,
+    0xA7, 0x89, 0xE8, 0xF1, 0x23, 0xB1, 0xDF, 0xD7,
+    0x1F, 0x7B, 0xB1, 0x5D, 0x42, 0xF9, 0x61, 0xF8,
+    0xDC, 0x81, 0x04, 0xF1, 0xCC, 0xFA, 0xD7, 0xED,
+    0xBF, 0x47, 0xAC, 0xBD, 0xE5, 0xFA, 0xAC, 0xB3,
+    0x1C, 0xD9, 0xA1, 0xB3, 0x60, 0xEE, 0x9C, 0x8A,
+    0x36, 0x57, 0xB4, 0x2F, 0xA1, 0xA2, 0xF3, 0xE2,
+    0x09, 0x9A, 0x6E, 0x43, 0x9B, 0xE5, 0x93, 0xB8,
+    0x3D, 0x9E, 0x9F, 0xC1, 0xC6, 0x0D, 0x02, 0xEB,
+    0x4D, 0x38, 0xE9, 0xB4, 0x9F, 0xEA, 0x33, 0x8C,
+    0x07, 0xD8, 0xB4, 0x71, 0xAD, 0xE5, 0x43, 0xB2,
+    0xCC, 0x55, 0x93, 0x6A, 0xDB, 0x1E, 0x80, 0xDB,
+    0xC2, 0xEA, 0x42, 0x8E, 0xFC, 0x86, 0x44, 0xC9,
+    0x8A, 0xC4, 0xF2, 0x46, 0xA7, 0x39, 0x50, 0x0D,
+    0x1A, 0xAA, 0x07, 0x04, 0xBE, 0xD4, 0xCE, 0x62,
+    0x4D, 0x0F, 0x91, 0x7D, 0x29, 0x88, 0x9C, 0x4C,
+    0xAF, 0xF7, 0xD8, 0x40, 0x93, 0x88, 0xC7, 0x20,
+    0xD2, 0x17, 0x2A, 0xC4, 0x92, 0x72, 0xD0, 0xC0,
+    0x4E, 0x56, 0x47, 0xB1, 0x27, 0x02, 0xE6, 0x61,
+    0x82, 0x5E, 0xC8, 0x2E, 0x90, 0xD2, 0x31, 0x22,
+    0xE2, 0xA9, 0x4A, 0x91, 0x45, 0x69, 0xB1, 0xA5,
+    0x0F, 0x66, 0x2C, 0x30, 0xAD, 0x7F, 0x1B, 0x0E,
+    0x22, 0x17, 0x60, 0x2E, 0x3D, 0x7F, 0x7F, 0x8C,
+    0x33, 0x51, 0xA0, 0x25, 0xDE, 0xFD, 0x75, 0xBC,
+    0xEF, 0xE6, 0xE7, 0x20, 0x04, 0x5A, 0xEC, 0x50,
+    0x21, 0x48, 0x56, 0x98, 0xE2, 0x33, 0x6D, 0x22,
+    0x5C, 0xC3, 0xFB, 0xFC, 0x6F, 0xB3, 0xA7, 0x8E,
+    0x6F, 0x67, 0x70, 0x9D, 0xDA, 0x02, 0x01, 0x59,
+    0x7B, 0x3D, 0x2B, 0x38, 0xCC, 0x0F, 0x44, 0x3D,
+    0xFB, 0x9A, 0xB3, 0x23, 0x15, 0x50, 0x6E, 0xBF,
+    0x8B, 0xA1, 0x94, 0x33, 0xE5, 0x7B, 0x88, 0x4E,
+    0xCB, 0x6D, 0x9F, 0xBF, 0xBC, 0x7A, 0xA8, 0x1E,
+    0x68, 0x25, 0xED, 0x8E, 0x53, 0x21, 0x72, 0xC5,
+    0x70, 0xB3, 0xE4, 0xA6, 0xA1, 0x5A, 0x2D, 0xC8,
+    0x43, 0x9D, 0x60, 0x77, 0x78, 0xE0, 0xC4, 0xAF,
+    0xC8, 0x29, 0xBA, 0xD0, 0x4D, 0x39, 0x83, 0x51,
+    0xA7, 0x10, 0x7F, 0x0C, 0x34, 0x0E, 0x6C, 0x75,
+    0x26, 0xD7, 0xD6, 0xC7, 0x32, 0x53, 0xAF, 0x4E,
+    0xBE, 0xF2, 0xC2, 0x0F, 0x99, 0x23, 0xB9, 0xE1,
+    0xC8, 0xB4, 0xBC, 0x5A, 0xC6, 0xCB, 0xEB, 0x4D,
+    0x28, 0x56, 0x72, 0xFE, 0x1B, 0x2C, 0x5D, 0xE3,
+    0xBC, 0xC7, 0xA3, 0xC0, 0x7D, 0x27, 0xF0, 0xD0,
+    0x4F, 0x3F, 0x1F, 0xF7, 0x87, 0x15, 0xF2, 0xEA,
+    0xD4, 0x03, 0x6D, 0x2F, 0xD4, 0x8E, 0x50, 0x4B,
+    0x05, 0xBF, 0xF7, 0x8C, 0x67, 0x5A, 0xDC, 0x4D,
+    0xCD, 0xCF, 0x9D, 0x02, 0xB6, 0xE7, 0xAE, 0x49,
+    0xD1, 0x7C, 0x00, 0xE7, 0x3B, 0xEA, 0xFB, 0x0D,
+    0x2A, 0x7B, 0x41, 0x33, 0x66, 0xD0, 0x29, 0x9F,
+    0xB3, 0x8A, 0x71, 0xB0, 0xE2, 0x76, 0xA9, 0xDB,
+    0xFD, 0x64, 0x04, 0x69, 0xDF, 0x89, 0x1F, 0x56,
+    0x86, 0x92, 0xD9, 0xD9, 0xB9, 0xF3, 0x4F, 0xAC,
+    0xAE, 0x61, 0x48, 0x20, 0xCE, 0x3C, 0x2B, 0x44,
+    0xAB, 0x42, 0xFA, 0xAB, 0x2E, 0x94, 0x82, 0xC8,
+    0xD9, 0x97, 0xCF, 0x27, 0xDF, 0xAC, 0xAC, 0xE7,
+    0xCA, 0xB2, 0x84, 0xAB, 0xF2, 0x5D, 0xDF, 0x56,
+    0x0C, 0x8C, 0x07, 0x3C, 0x3D, 0xA8, 0xDD, 0xBE,
+    0xFF, 0x4E, 0x28, 0x0D, 0xB2, 0x2D, 0xE6, 0x9D,
+    0x44, 0x21, 0xCB, 0xE7, 0x33, 0x63, 0x22, 0x8F,
+    0x4C, 0xFF, 0xB6, 0x1D, 0x9A, 0x71, 0x3F, 0xB1,
+    0x29, 0xAE, 0x3A, 0x35, 0xEE, 0x9C, 0x97, 0x68,
+    0xA7, 0x52, 0x66, 0x01, 0xD8, 0x9A, 0x5D, 0xF4,
+    0xB3, 0x2F, 0x5C, 0xD4, 0x0E, 0xF9, 0xCF, 0x07,
+    0xF6, 0x8C, 0xBA, 0xA6, 0x8D, 0x6B, 0xC6, 0x01,
+    0xC2, 0x69, 0xAE, 0x60, 0x08, 0x1A, 0x0E, 0x3F,
+    0xAE, 0x60, 0x29, 0xF3, 0x48, 0x0D, 0xE0, 0xD0,
+    0xAE, 0x52, 0x44, 0xE9, 0x7F, 0x1F, 0x92, 0x5F,
+    0x71, 0xAD, 0xEC, 0x6B, 0x47, 0x66, 0x92, 0x22,
+    0x27, 0xAE, 0x6E, 0x25, 0xCD, 0xF3, 0x5F, 0x55,
+    0x59, 0xBD, 0x73, 0xCE, 0x2B, 0x7E, 0x99, 0x44,
+    0x56, 0x70, 0xA3, 0xE7, 0x7A, 0x59, 0x75, 0xD8,
+    0x48, 0x0C, 0x39, 0x2B, 0xD7, 0x53, 0xC6, 0xAD,
+    0x4A, 0x6F, 0xB4, 0x14, 0x96, 0xDF, 0xF2, 0x4A,
+    0x0C, 0xA2, 0xD5, 0x29, 0x98, 0x7C, 0x42, 0x87,
+    0xD9, 0x1F, 0x97, 0x61, 0xD9, 0xBF, 0x99, 0x4F,
+    0x2C, 0x4C, 0x75, 0xAC, 0xB8, 0x06, 0x75, 0xD6,
+    0x87, 0x76, 0x7E, 0xE3, 0x23, 0x4B, 0xEA, 0x1A,
+    0x1A, 0xF4, 0xB7, 0x09, 0xAF, 0x53, 0xEB, 0xA6,
+    0x39, 0x10, 0xFE, 0xD4, 0xEB, 0x1B, 0xAE, 0x38,
+    0x31, 0x33, 0xBA, 0x68, 0xEE, 0xC7, 0x65, 0x76,
+    0xFB, 0x49, 0x77, 0xD4, 0x19, 0xC4, 0xE6, 0xA7,
+    0x05, 0xFE, 0x2A, 0xDA, 0x39, 0x99, 0x1A, 0x92,
+    0xD2, 0xF0, 0x61, 0x97, 0xF6, 0x06, 0x6C, 0x88,
+    0x7B, 0x6F, 0x60, 0xE6, 0x70, 0x08, 0xF0, 0xB4,
+    0x6B, 0x39, 0x6F, 0x05, 0x41, 0x81, 0xF9, 0xBE,
+    0x7A, 0x51, 0xC4, 0x75, 0xB0, 0x6A, 0x89, 0xA0,
+    0xA6, 0x9A, 0x5B, 0xEE, 0x7D, 0x78, 0x17, 0x5F,
+    0x9F, 0x3B, 0x7D, 0xDD, 0x8A, 0x9E, 0xAA, 0x1A,
+    0xDA, 0x49, 0x08, 0xE9, 0xFD, 0x91, 0xA6, 0xFA,
+    0xCE, 0xCF, 0x67, 0xDF, 0x0F, 0xC9, 0xD6, 0x38,
+    0xD9, 0xD5, 0xD1, 0xC0, 0x76, 0x59, 0x42, 0x53,
+    0xBF, 0x48, 0xE9, 0x11, 0x74, 0xC7, 0x11, 0xD8,
+    0xE7, 0x8E, 0xD3, 0xC8, 0x25, 0xA1, 0x26, 0x50,
+    0xBB, 0xB4, 0x35, 0xAF, 0xAF, 0x06, 0x23, 0x69,
+    0x3E, 0x30, 0xFD, 0x7B, 0x34, 0x83, 0x07, 0xD0,
+    0xF0, 0x0F, 0x6C, 0x9A, 0x13, 0x5D, 0xC2, 0x7B,
+    0xDF, 0x6F, 0xDD, 0x8E, 0xF4, 0x30, 0x82, 0x05,
+    0x41, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7,
+    0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x05, 0x32,
+    0x04, 0x82, 0x05, 0x2E, 0x30, 0x82, 0x05, 0x2A,
+    0x30, 0x82, 0x05, 0x26, 0x06, 0x0B, 0x2A, 0x86,
+    0x48, 0x86, 0xF7, 0x0D, 0x01, 0x0C, 0x0A, 0x01,
+    0x02, 0xA0, 0x82, 0x04, 0xEE, 0x30, 0x82, 0x04,
+    0xEA, 0x30, 0x1C, 0x06, 0x0A, 0x2A, 0x86, 0x48,
+    0x86, 0xF7, 0x0D, 0x01, 0x0C, 0x01, 0x03, 0x30,
+    0x0E, 0x04, 0x08, 0x74, 0xC0, 0x84, 0x8F, 0xC7,
+    0x74, 0x5E, 0x21, 0x02, 0x02, 0x08, 0x00, 0x04,
+    0x82, 0x04, 0xC8, 0x1E, 0xF4, 0xE9, 0x07, 0x27,
+    0x9E, 0x5A, 0xC9, 0x39, 0x1D, 0x37, 0x2C, 0x06,
+    0x4B, 0x57, 0xEA, 0xC5, 0x42, 0x9A, 0x60, 0xD5,
+    0x42, 0xB2, 0x34, 0x2D, 0xD3, 0x88, 0x7C, 0x78,
+    0x87, 0xB6, 0xE9, 0x42, 0x44, 0x1F, 0x67, 0x32,
+    0x92, 0x54, 0x22, 0xDA, 0xB2, 0x43, 0xE7, 0x40,
+    0xBE, 0x1F, 0xAF, 0x3A, 0xCD, 0x2A, 0x9F, 0xD7,
+    0x44, 0x5B, 0x37, 0x69, 0x85, 0xDF, 0xEB, 0x2A,
+    0xB9, 0xE2, 0x92, 0x3B, 0xEA, 0xD5, 0x42, 0x53,
+    0x95, 0x4A, 0xB0, 0x1B, 0xA5, 0xEF, 0xA6, 0x0D,
+    0x29, 0xF4, 0x33, 0xFE, 0xD7, 0x49, 0x04, 0x1E,
+    0x8C, 0xAD, 0x63, 0x1E, 0x79, 0x63, 0x74, 0x0C,
+    0xE5, 0x5E, 0xA2, 0x2C, 0xBE, 0xB8, 0x90, 0xCE,
+    0x06, 0x25, 0xBF, 0xD1, 0x5A, 0x50, 0xCF, 0x3B,
+    0x52, 0xE2, 0xA7, 0xFF, 0x19, 0x02, 0xCF, 0xD0,
+    0x9B, 0xD9, 0xF7, 0x28, 0x07, 0x38, 0x1F, 0xF2,
+    0xAF, 0x44, 0x91, 0x3F, 0x0F, 0xB6, 0x6E, 0x8C,
+    0xC0, 0x32, 0x92, 0xC0, 0xCD, 0x25, 0x98, 0x67,
+    0xF1, 0x47, 0x52, 0x50, 0xF0, 0xA3, 0x7B, 0xE6,
+    0x74, 0xDC, 0x72, 0x28, 0xC8, 0xAB, 0xB3, 0x31,
+    0x7D, 0xA3, 0xF7, 0xC7, 0xD1, 0xE6, 0x99, 0xB4,
+    0xB6, 0x5A, 0x3A, 0x4D, 0x83, 0x4F, 0xB8, 0xB5,
+    0x86, 0xF8, 0x37, 0x7F, 0xA0, 0x16, 0x2F, 0x3C,
+    0x62, 0x7A, 0xD4, 0x3A, 0xEB, 0xC2, 0xE8, 0x03,
+    0x49, 0x17, 0x9E, 0xFB, 0xD7, 0xAF, 0x91, 0x32,
+    0xFD, 0xEA, 0x4F, 0x64, 0xC6, 0x6E, 0x02, 0xEA,
+    0xC4, 0xC8, 0x1F, 0x16, 0xC5, 0x4C, 0xFB, 0xC5,
+    0x42, 0xF5, 0x85, 0x05, 0x92, 0x59, 0x4B, 0x31,
+    0xE5, 0xE9, 0x69, 0xE7, 0x02, 0x98, 0x33, 0xBA,
+    0x4C, 0x17, 0x09, 0xEF, 0x89, 0x20, 0xFA, 0x83,
+    0x9F, 0xAE, 0x0E, 0x1B, 0x7D, 0x98, 0xB9, 0xF2,
+    0x3C, 0x0F, 0xB7, 0x1C, 0x72, 0xDF, 0x17, 0x84,
+    0x7F, 0x0A, 0xFD, 0x12, 0x3C, 0x6F, 0x68, 0x5D,
+    0x45, 0xEB, 0xB8, 0xD6, 0x24, 0x65, 0x42, 0x75,
+    0x5C, 0xC2, 0xF3, 0x3A, 0x6A, 0x4E, 0x51, 0x34,
+    0x1B, 0xB6, 0x81, 0xB2, 0x8A, 0xEF, 0x28, 0xA4,
+    0xC5, 0x88, 0x9A, 0x97, 0xE0, 0xEF, 0x31, 0x12,
+    0x01, 0x7E, 0x1B, 0x43, 0x0F, 0x27, 0x80, 0x87,
+    0x98, 0xC5, 0xD5, 0x83, 0xCB, 0x4B, 0xB7, 0x01,
+    0x79, 0x60, 0xA1, 0x1A, 0x03, 0x05, 0xC6, 0x36,
+    0x04, 0x31, 0x3C, 0x06, 0xDB, 0x08, 0xA8, 0xDA,
+    0x8E, 0x32, 0x19, 0x91, 0xF1, 0x0D, 0x61, 0x6F,
+    0xE4, 0xB2, 0x79, 0x8A, 0xDE, 0xF4, 0xF7, 0xFB,
+    0x2C, 0x23, 0x5B, 0xD9, 0x64, 0x2F, 0xB7, 0xB3,
+    0x8B, 0xCA, 0xB8, 0x8C, 0x1D, 0x3B, 0x49, 0x05,
+    0x38, 0xA1, 0xE5, 0x8C, 0x1A, 0xDC, 0xA5, 0x61,
+    0xFE, 0xF4, 0x2B, 0xDC, 0x77, 0x28, 0xF6, 0x19,
+    0xE7, 0xB7, 0x8F, 0x4D, 0x27, 0x2D, 0xED, 0x8A,
+    0x3F, 0x3D, 0xDC, 0x9F, 0xD1, 0x30, 0xFF, 0xD6,
+    0xC3, 0xBE, 0x41, 0x25, 0xE3, 0xA5, 0x9B, 0x73,
+    0xDF, 0x6A, 0xD9, 0xF9, 0x70, 0x84, 0x02, 0x4C,
+    0x35, 0xD4, 0x3E, 0x05, 0x76, 0x3A, 0xDC, 0x6D,
+    0x5A, 0x81, 0xB3, 0x94, 0xF7, 0x22, 0xF7, 0xDC,
+    0xC1, 0x43, 0x31, 0x57, 0x5B, 0x42, 0x9A, 0x0B,
+    0xF4, 0x95, 0x30, 0xA9, 0xBB, 0xD8, 0x06, 0xFB,
+    0x1D, 0x6F, 0x9B, 0xC3, 0xBB, 0xF3, 0xBF, 0xFB,
+    0xB4, 0x9F, 0x35, 0x64, 0x0A, 0x69, 0xB7, 0xD1,
+    0x3E, 0xCA, 0x78, 0x07, 0x04, 0x03, 0x79, 0xD4,
+    0xF3, 0xA8, 0xEC, 0x18, 0xDB, 0x03, 0x5E, 0x47,
+    0xD7, 0xD0, 0x56, 0x2C, 0x74, 0x94, 0x86, 0x04,
+    0x46, 0xB8, 0xD4, 0x35, 0x0A, 0x7B, 0xE6, 0x78,
+    0xC4, 0x43, 0x3C, 0x56, 0xCC, 0x37, 0x8B, 0xFD,
+    0xE8, 0xF4, 0x57, 0xEA, 0xAE, 0xCF, 0x36, 0x97,
+    0x12, 0xAC, 0x39, 0xCF, 0x7C, 0xEF, 0x22, 0x67,
+    0x01, 0xEC, 0xD8, 0x09, 0x49, 0x4E, 0xE3, 0x74,
+    0xDD, 0x39, 0xE1, 0x39, 0xD7, 0x0C, 0x5F, 0x1B,
+    0xCE, 0x69, 0xBC, 0x72, 0x44, 0x87, 0x64, 0x1C,
+    0x08, 0x05, 0x93, 0x69, 0x6D, 0x7F, 0x90, 0x0A,
+    0x2C, 0xCB, 0x8A, 0xBB, 0x7F, 0xE3, 0xE0, 0x80,
+    0x31, 0xD0, 0x0A, 0x3A, 0x95, 0xFF, 0xF7, 0xB4,
+    0x36, 0x38, 0x93, 0xE0, 0x0C, 0x11, 0x37, 0x12,
+    0x06, 0xF6, 0xAD, 0xE9, 0xB1, 0x7A, 0x00, 0xF5,
+    0xD2, 0x32, 0x6B, 0xD0, 0x27, 0xA5, 0x1B, 0x3D,
+    0xE8, 0xDB, 0xCC, 0xA9, 0x1F, 0x1F, 0xB1, 0x99,
+    0x3D, 0x7C, 0xB7, 0xCA, 0xDA, 0x27, 0x2C, 0x64,
+    0x1C, 0x49, 0xB6, 0x87, 0x44, 0x06, 0x94, 0x9D,
+    0xBC, 0x6B, 0x20, 0xA2, 0x68, 0x15, 0x1F, 0xE2,
+    0xF2, 0xAD, 0x6D, 0x23, 0x2E, 0x2B, 0x74, 0xE2,
+    0x5D, 0xE4, 0xB0, 0xC7, 0x84, 0xCB, 0x64, 0xBF,
+    0xE0, 0xA8, 0x18, 0x83, 0xB4, 0xC9, 0xD9, 0x73,
+    0xA8, 0xE6, 0xA9, 0x36, 0xD5, 0x63, 0x1E, 0x2C,
+    0x2A, 0x55, 0x09, 0x77, 0x5E, 0xB3, 0x4B, 0xEA,
+    0xB5, 0xD0, 0x14, 0x5F, 0xEB, 0x50, 0x7B, 0xAA,
+    0xEF, 0x94, 0xBA, 0x2B, 0xD7, 0x8A, 0x07, 0xF1,
+    0xF9, 0x5E, 0x12, 0x12, 0x21, 0x52, 0xE5, 0x0A,
+    0x3E, 0xC0, 0xBC, 0x5D, 0x4C, 0xE2, 0x12, 0x7C,
+    0x39, 0xF9, 0x16, 0x9D, 0xBD, 0x96, 0x83, 0x3B,
+    0x7F, 0x3D, 0x6A, 0xEC, 0xF1, 0x25, 0xD2, 0xB0,
+    0xB0, 0xEB, 0x20, 0x06, 0x07, 0xD6, 0xD9, 0x4C,
+    0x07, 0x9A, 0x82, 0xC1, 0xFC, 0xF7, 0x66, 0x15,
+    0xBD, 0x62, 0x65, 0xD8, 0x6C, 0xF6, 0x33, 0x7B,
+    0x5A, 0x28, 0xEC, 0x90, 0xA1, 0x26, 0x9F, 0xC3,
+    0x28, 0x4A, 0x64, 0x50, 0x5F, 0xCA, 0xE2, 0x6D,
+    0xB8, 0x0F, 0xE2, 0x94, 0xB5, 0x8E, 0x1F, 0x8A,
+    0x8F, 0x6B, 0xA6, 0x86, 0x1F, 0xEE, 0xDC, 0x24,
+    0xB4, 0xB8, 0x25, 0xEC, 0x28, 0x2D, 0xF9, 0xCB,
+    0x7D, 0x38, 0xFF, 0xC7, 0x74, 0x2E, 0xD3, 0x10,
+    0xEC, 0x03, 0x31, 0xEE, 0x83, 0xE7, 0xA4, 0xF7,
+    0xBA, 0x28, 0x21, 0xE0, 0x7F, 0xB4, 0xB7, 0xE1,
+    0x7A, 0xF9, 0x2B, 0xB0, 0x2C, 0x3B, 0x80, 0x5F,
+    0xE0, 0x5D, 0xB2, 0x7E, 0x59, 0xFF, 0x59, 0x07,
+    0x58, 0x42, 0x57, 0xEE, 0x44, 0xF1, 0xB1, 0xAD,
+    0xBA, 0xDE, 0xCB, 0x1D, 0x8A, 0x36, 0x67, 0xE8,
+    0x45, 0xFF, 0x07, 0x8D, 0xEE, 0xA4, 0x51, 0x9C,
+    0x4C, 0x83, 0x5D, 0x2E, 0x2F, 0xE1, 0x5B, 0x75,
+    0xE8, 0x29, 0xCD, 0x0B, 0x07, 0x62, 0xE0, 0xC3,
+    0x0D, 0x1D, 0xEA, 0xCF, 0xF0, 0x8A, 0x65, 0x27,
+    0x70, 0x42, 0x9F, 0x26, 0x00, 0x15, 0x70, 0xC5,
+    0x4A, 0xF6, 0x25, 0xD0, 0x40, 0x72, 0xE9, 0xC1,
+    0x73, 0xFD, 0x48, 0x94, 0xA3, 0x8D, 0x66, 0x63,
+    0x96, 0x4F, 0xF7, 0xEE, 0xFB, 0x4C, 0xC7, 0xB8,
+    0x6B, 0xE9, 0x90, 0xE1, 0x2A, 0x66, 0x80, 0x99,
+    0x3B, 0xB0, 0x1A, 0x6C, 0xF9, 0x0E, 0x72, 0xDA,
+    0x8E, 0x4F, 0x46, 0xC2, 0x6A, 0x4B, 0x7A, 0x16,
+    0xE5, 0x26, 0x0B, 0x5C, 0xD4, 0x47, 0x34, 0xE5,
+    0x37, 0xBE, 0x68, 0x6C, 0xDA, 0xD3, 0x9B, 0x6F,
+    0xAE, 0x51, 0x9C, 0x99, 0x0A, 0x5B, 0xF8, 0x37,
+    0xBC, 0xDE, 0xFC, 0x93, 0xC5, 0xE7, 0x0F, 0xEF,
+    0x0B, 0xA6, 0x07, 0xC2, 0xA6, 0xE6, 0xDA, 0x2D,
+    0x1B, 0x49, 0xC9, 0xDE, 0x6B, 0x27, 0xDC, 0x00,
+    0xEF, 0x23, 0x87, 0x0E, 0xEB, 0xD1, 0x48, 0x7D,
+    0xB4, 0xF2, 0x58, 0xC6, 0x3C, 0xE2, 0x89, 0xBA,
+    0xB0, 0x05, 0xAC, 0x94, 0x41, 0x9A, 0xA8, 0xFF,
+    0x3E, 0xBC, 0x3A, 0x52, 0x9C, 0xF9, 0x7F, 0x07,
+    0x8B, 0xB0, 0x2C, 0x71, 0x83, 0x7B, 0xCF, 0x2E,
+    0x7F, 0x7C, 0x96, 0x65, 0xD9, 0x08, 0x17, 0xEC,
+    0xFA, 0xDE, 0x4E, 0x40, 0x12, 0x26, 0x70, 0x71,
+    0x65, 0xA5, 0xDC, 0x98, 0x47, 0xA3, 0xFC, 0xE0,
+    0x9A, 0x16, 0xED, 0x45, 0x56, 0x72, 0x50, 0x05,
+    0x28, 0x2C, 0x99, 0xEC, 0x20, 0x2E, 0x40, 0xC0,
+    0x26, 0x69, 0xCD, 0x49, 0x45, 0x17, 0xA4, 0xA3,
+    0x42, 0x0D, 0x14, 0x65, 0x87, 0x33, 0x8C, 0x92,
+    0xC5, 0xC4, 0x61, 0xFD, 0xE8, 0x68, 0x56, 0x20,
+    0x57, 0xF5, 0x8E, 0x5F, 0xCF, 0x7E, 0x97, 0xF6,
+    0x49, 0x97, 0x0A, 0xFE, 0xD3, 0x60, 0x1A, 0x5B,
+    0x0C, 0x75, 0xDD, 0x8E, 0x31, 0x78, 0x29, 0xA6,
+    0xB1, 0x4D, 0xAA, 0xDF, 0x8A, 0xD1, 0xE6, 0x91,
+    0xE3, 0x32, 0x3F, 0xEC, 0x8A, 0x1F, 0x0E, 0x35,
+    0x07, 0x6E, 0x4B, 0x83, 0x3B, 0xE5, 0x67, 0x34,
+    0x1F, 0x0C, 0x81, 0xD8, 0xD5, 0x25, 0x68, 0xE5,
+    0x28, 0x1B, 0x5C, 0x81, 0x3E, 0xE3, 0x5C, 0xB4,
+    0xB6, 0xBD, 0x62, 0x6A, 0x70, 0x33, 0xC2, 0xC5,
+    0x75, 0x27, 0xF4, 0x30, 0xE1, 0x1D, 0xC1, 0x4C,
+    0xC5, 0x02, 0x12, 0x46, 0xAC, 0xEC, 0xF9, 0xE8,
+    0xE7, 0x58, 0x24, 0x11, 0xB1, 0xF3, 0xB7, 0x8C,
+    0x3C, 0xA4, 0x0A, 0x94, 0xA6, 0x7C, 0x68, 0x54,
+    0x5B, 0xB9, 0x4D, 0x57, 0x9C, 0xE7, 0x28, 0x09,
+    0x6B, 0x89, 0x26, 0x5D, 0xE7, 0x50, 0xA9, 0x95,
+    0x90, 0x91, 0x8E, 0x00, 0x59, 0xF8, 0x3A, 0x70,
+    0xAF, 0x48, 0x2E, 0xE8, 0xC4, 0x34, 0x8C, 0xF4,
+    0x5F, 0x7F, 0xCB, 0x07, 0xAA, 0xF0, 0xD9, 0xFB,
+    0x5C, 0x32, 0x90, 0x22, 0x1A, 0xD2, 0x1A, 0xCF,
+    0x92, 0x06, 0x02, 0xCF, 0x10, 0x18, 0x7B, 0x93,
+    0xCC, 0x07, 0x4A, 0x31, 0x25, 0x30, 0x23, 0x06,
+    0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01,
+    0x09, 0x15, 0x31, 0x16, 0x04, 0x14, 0xD1, 0xDE,
+    0x23, 0x16, 0x9F, 0x6E, 0xF4, 0x42, 0x21, 0x23,
+    0xE1, 0x11, 0xAA, 0xC8, 0x7C, 0x60, 0x4A, 0x78,
+    0x9D, 0x24, 0x30, 0x31, 0x30, 0x21, 0x30, 0x09,
+    0x06, 0x05, 0x2B, 0x0E, 0x03, 0x02, 0x1A, 0x05,
+    0x00, 0x04, 0x14, 0xD6, 0x4A, 0xBB, 0x75, 0xB1,
+    0xF9, 0x9E, 0xD3, 0x58, 0x6D, 0xD1, 0x74, 0x9F,
+    0x00, 0x8A, 0xF2, 0xC8, 0xAA, 0x52, 0x4D, 0x04,
+    0x08, 0x77, 0x46, 0xE7, 0xBA, 0x25, 0x4B, 0xDA,
+    0x41, 0x02, 0x02, 0x08, 0x00]
+};
+
+const WPA_EAP_CLIENT_LIST = [
+  {
+    ssid: 'WPA-EAP-TLS',
+    keyManagement: 'WPA-EAP',
+    eap: 'TLS',
+    identity: EAP_USERNAME,
+    serverCertificate: CLIENT_PKCS12_CERT.nickname,
+    userCertificate: CLIENT_PKCS12_CERT.nickname
+  }
+];
+
+/**
+ * Convert the given MozWifiNetwork object array to testAssociate chain.
+ *
+ * @param aNetworks
+ *        An array of MozWifiNetwork which we want to convert.
+ *
+ * @return A promise chain which "then"s testAssociate accordingly.
+ */
+function convertToTestAssociateChain(aNetworks) {
+  let chain = Promise.resolve();
+
+  aNetworks.forEach(function (aNetwork) {
+    network = new window.MozWifiNetwork(aNetwork);
+    chain = chain.then(() => gTestSuite.testAssociate(network));
+  });
+
+  return chain;
+}
+
+gTestSuite.doTestWithCertificate(
+    new Blob([new Uint8Array(CLIENT_PKCS12_CERT.content)]),
+    CLIENT_PKCS12_CERT.password,
+    CLIENT_PKCS12_CERT.nickname,
+    CLIENT_PKCS12_CERT.usage,
+    function() {
+      return gTestSuite.ensureWifiEnabled(true)
+        // Load required server files.
+        .then(() => gTestSuite.writeFile(SERVER_EAP_USER_CONF.path, SERVER_EAP_USER_CONF.content))
+        .then(() => gTestSuite.writeFile(CA_CERT.path, CA_CERT.content))
+        .then(() => gTestSuite.writeFile(SERVER_CERT.path, SERVER_CERT.content))
+        .then(() => gTestSuite.writeFile(SERVER_KEY.path, SERVER_KEY.content))
+        // Start AP.
+        .then(() => gTestSuite.startHostapds(WPA_EAP_AP_LIST))
+        // Scan test.
+        .then(() => gTestSuite.testWifiScanWithRetry(SCAN_RETRY_CNT, WPA_EAP_AP_LIST))
+        // Associate test.
+        .then(() => convertToTestAssociateChain(WPA_EAP_CLIENT_LIST))
+        // Tear down.
+        .then(gTestSuite.killAllHostapd)
+});
new file mode 100644
--- /dev/null
+++ b/dom/wifi/test/marionette/test_wifi_associate_WPA_EAP_TTLS.js
@@ -0,0 +1,623 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+MARIONETTE_TIMEOUT = 60000;
+MARIONETTE_HEAD_JS = 'head.js';
+
+const SCAN_RETRY_CNT = 5;
+
+const EAP_USERNAME = 'username';
+const EAP_PASSWORD = 'password';
+
+const SERVER_EAP_USER_CONF = {
+  path: HOSTAPD_CONFIG_PATH + 'hostapd.eap_user',
+  content: '* PEAP,TTLS,TLS\n' +
+    '"' + EAP_USERNAME + '" MSCHAPV2,TTLS-MSCHAPV2 "' + EAP_PASSWORD + '" [2]\n'
+};
+const CA_CERT = {
+  path: HOSTAPD_CONFIG_PATH + 'ca.pem',
+  content: '-----BEGIN CERTIFICATE-----\n' +
+    'MIIDsTCCApmgAwIBAgIJAKxTf+8X8qngMA0GCSqGSIb3DQEBCwUAMG4xCzAJBgNV\n' +
+    'BAYTAlRXMRMwEQYDVQQIDApTb21lLVN0YXRlMREwDwYDVQQKDAhjaHVja2xlZTER\n' +
+    'MA8GA1UEAwwIY2h1Y2tsZWUxJDAiBgkqhkiG9w0BCQEWFWNodWNrbGkwNzA2QGdt\n' +
+    'YWlsLmNvbTAgFw0xNDEyMjQxMTI4NTBaGA8yMjg4MTAwNzExMjg1MFowbjELMAkG\n' +
+    'A1UEBhMCVFcxEzARBgNVBAgMClNvbWUtU3RhdGUxETAPBgNVBAoMCGNodWNrbGVl\n' +
+    'MREwDwYDVQQDDAhjaHVja2xlZTEkMCIGCSqGSIb3DQEJARYVY2h1Y2tsaTA3MDZA\n' +
+    'Z21haWwuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAo3c2yFxY\n' +
+    'o6gGg0I83jy00ME+MAfzCd+4ShL45ZLqysQP93jRBfPzU9ZuZ29ysVwgWIdqkZao\n' +
+    'XTuV/NAW2GMGd8W1jQJ3J81fjb9wvhlny3rrACwvUn1N1S1BnM+BAAiDLGxEmvAQ\n' +
+    'onp2aaa6HsHsYS8ONX+d2Qh4LEA4vupeSGAqJychCZv/l+aq/ErFZhFYB3CPUQEt\n' +
+    'cClO24ucsIYP95lA0zhscnmAj06qplFD4Bv6IVrdDqujy1zNwCQwsJq/8OQdaTN/\n' +
+    'h3y9pWvNKMBMM2niOUAjtuNpqsSK/lTS1WAT3PdtVECX9fYBi0Bg+HM92xs/6gt6\n' +
+    'kh9jPV8keXHvSwIDAQABo1AwTjAdBgNVHQ4EFgQU7hBqhuG04xeCzrQ3ngx18ZJ3\n' +
+    'lUswHwYDVR0jBBgwFoAU7hBqhuG04xeCzrQ3ngx18ZJ3lUswDAYDVR0TBAUwAwEB\n' +
+    '/zANBgkqhkiG9w0BAQsFAAOCAQEAFYX2iy680GAnBTttk0gyX6gk+8pYr3D22k/G\n' +
+    '6rvcjefzS7ELQPRKr6mfmwXq3mMf/4jiS2zI5zmXsestPYzHYxf2viQ6t7vr9XiJ\n' +
+    '3WfFjNw4ERlRisAvg0aqqTNNQq5v2VME4sdFZagy217f73C7azwCHl0bqOLH05rl\n' +
+    '8RubOxiHEj7ZybJqnRciK/bht4D+rZkwf4bBBmoloqH7xT0+rFQclpYXDGGjNUQB\n' +
+    'LcHLF10xcr7g3ZVVu82fe6+d85gIGOIMR9+TKhdw6gO3CNcnDAj6gxksghgtcxmh\n' +
+    'OzOggCn7nlIwImtsg2sZkpWB4lEi9hdv4lkNuyFjOL3bnuc+NA==\n' +
+    '-----END CERTIFICATE-----\n'
+};
+
+const SERVER_CERT = {
+  path: HOSTAPD_CONFIG_PATH + 'server.pem',
+  content: '-----BEGIN CERTIFICATE-----\n' +
+    'MIID1DCCArygAwIBAgIBADANBgkqhkiG9w0BAQsFADBuMQswCQYDVQQGEwJUVzET\n' +
+    'MBEGA1UECAwKU29tZS1TdGF0ZTERMA8GA1UECgwIY2h1Y2tsZWUxETAPBgNVBAMM\n' +
+    'CGNodWNrbGVlMSQwIgYJKoZIhvcNAQkBFhVjaHVja2xpMDcwNkBnbWFpbC5jb20w\n' +
+    'IBcNMTQxMjI0MTEyOTQ5WhgPMjI4ODEwMDcxMTI5NDlaMG4xCzAJBgNVBAYTAlRX\n' +
+    'MRMwEQYDVQQIDApTb21lLVN0YXRlMREwDwYDVQQKDAhjaHVja2xlZTERMA8GA1UE\n' +
+    'AwwIY2h1Y2tsZWUxJDAiBgkqhkiG9w0BCQEWFWNodWNrbGkwNzA2QGdtYWlsLmNv\n' +
+    'bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMdhQmKilTJbWZRxTiSV\n' +
+    'rqIU+LYW1RKghx5o+0JpNRJVLuz5kBMaNskbbfUSNuHbEq0QA9BDKAZWIc4LSotk\n' +
+    'lCo8TbcO9CJvJPQGGjGdHcohWX5vy6BE/OVE46CUteMFyZF6F8R2fNUww08iR/u1\n' +
+    'YZebL5pWO1j43sPpAzEy6Tij2ACPt6EZcFaZG3SF2mVJWkCQnBqrojP65WUvZQqp\n' +
+    'seUhW2YAS8Nu0Yrohgxz6VYk+cNDuDZVGs6qWRStZzJfYrfc76DtkHof5B14M+xp\n' +
+    'XJaBLxN+whvnYkDTfinaCxnW1O7eXUltr87fLc5zmeBkgwaiaQuIdcfZm7vDUiz8\n' +
+    'vnUCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBH\n' +
+    'ZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFKK4f9/YavTHOfEiAB83Deac\n' +
+    '6gT5MB8GA1UdIwQYMBaAFO4QaobhtOMXgs60N54MdfGSd5VLMA0GCSqGSIb3DQEB\n' +
+    'CwUAA4IBAQBWnO9o9KSJIqjoz5Nwll63ULOdcvgGdOeJIw1fcKQ817Rsp+TVcjcH\n' +
+    'IrIADsT/QZGXRO/l6p1750e2iFtJEo1hsRaxtA1wWn2I9HO3+av2spQhr3jpYGPf\n' +
+    'zpsMTp4RNYV7Q8+q1kZIz9PY4V1T0p6lveK8+fUj2hSLnxSj0QiGSJJtnEC3w4Rv\n' +
+    'C9T6oUwIeToULmi+8FXQFdEqwKRU98DPq3eLzN28ZxUgoPE1C8+42D2UW8uyp/Gm\n' +
+    'tGOa/k7nzkCdVqZI7lX7f0AjEvQgjtAMQ/k7Mhxx7TzW2HO+1YPMoKji6Z4WkNwt\n' +
+    'JEj9ZUBSNt8B26UksJMBDkcvSegF3a7o\n' +
+    '-----END CERTIFICATE-----\n'
+};
+
+const SERVER_KEY = {
+  path: HOSTAPD_CONFIG_PATH + 'server.key',
+  content: '-----BEGIN RSA PRIVATE KEY-----\n' +
+    'MIIEpAIBAAKCAQEAx2FCYqKVMltZlHFOJJWuohT4thbVEqCHHmj7Qmk1ElUu7PmQ\n' +
+    'Exo2yRtt9RI24dsSrRAD0EMoBlYhzgtKi2SUKjxNtw70Im8k9AYaMZ0dyiFZfm/L\n' +
+    'oET85UTjoJS14wXJkXoXxHZ81TDDTyJH+7Vhl5svmlY7WPjew+kDMTLpOKPYAI+3\n' +
+    'oRlwVpkbdIXaZUlaQJCcGquiM/rlZS9lCqmx5SFbZgBLw27RiuiGDHPpViT5w0O4\n' +
+    'NlUazqpZFK1nMl9it9zvoO2Qeh/kHXgz7GlcloEvE37CG+diQNN+KdoLGdbU7t5d\n' +
+    'SW2vzt8tznOZ4GSDBqJpC4h1x9mbu8NSLPy+dQIDAQABAoIBAASG4Mr8hgaurEoC\n' +
+    'iJOsElr7vunjetMBcg/uskW/vcS8ymP3Bp5oafYG+WgnEbfvEW18f5mq7K24JuxW\n' +
+    'tUqU7ghHdjxByqk9fMlNmiqmNpbwSufkAeuRpWxPNBvhRH/zEbCL5R5A0nTEtqqF\n' +
+    'TL0aUSzwCRSoAJD0lZo9ICVt0n3GsDyM9rqQg/uZmh1qsRdwPsRuYORND9g48rKq\n' +
+    '6WN9leskSxhhsYE2D9ocOFd9bNt8Zxejh9ppVSnG/KsIdt18iBzcabatgAQ046fb\n' +
+    'Z3vprcZJLg93Sg2gSuVqlSTs3M2W8VQnm22/EBMb1y0M48MSRCgnbPLG/CcCLLfF\n' +
+    'LwxCOgECgYEA/eYt67xyJ6JeAdxdwOZuT1WWGbFpLiG9+2OgiHumyRQ5969XMTWo\n' +
+    'fIhMKchDdjoy9RR236\/\/EFCs7UEyB7+a7ODRzNiK2zCD8Smjp+21fUPSthEeQesk\n' +
+    'eiMYICIu5Ay35x9sxIX+XOUVvRhPOGcD29GVeRnKh1inTHOz2dje8LkCgYEAyQeY\n' +
+    'STi9jjCEcHkM1E/UeDiLfHHepLXi8wS41JNRHl5Jacp7XB5djAjKu/jf367/VpFy\n' +
+    'GDDMetE7n8eWkrnAvovxOwZ000YDMtL1sUYSjL+XtBS5s6VY1p4qaSAY9nUUGrJh\n' +
+    'JvtvsuI7SKTtL+60vjBOH7zDnvOdBgAp0utLhZ0CgYEAuLzzqrPKB8afShFSchn4\n' +
+    'J2dpuLYahsNsXW7HDqeR2nsKFosRETAusLXnXPtnAq4kB6jlOarwFqnsuRCX24Vx\n' +
+    'r2uBm9/vYL7zMdUPTA+s30ErHuhjsKjsOKYyVqcooSwT32pBFNk+E89nutfmRG7I\n' +
+    'IvhjHuNCNqqtx/Xj5d1jkZkCgYBQicppC2Jl5OoqZVTOem0U/RJk+PnJ41TZJ7sk\n' +
+    '7yBAmmWvDH\/\/l+rCf4M5a6vFYcbKV9rt9h711X2dtciNX/3oWQh8LUoAmrwNUJc+\n' +
+    'PmSQHvIYI3WCk2vUD+nN1B4sHxu+1lg11eYaNKiroeeknG2tBI1ICcgVlmQCU25u\n' +
+    'IfZPwQKBgQCdO6QHhPLtcHUDNFA6FQ1jKL1iEd7G0JLVRz4Xkpkn1Vrr5MD6JFDa\n' +
+    '5ccabADyl0lpFqDIVJQIzLku2hOD2i9aBNCY0pL391HeOS7CkZX+TdOY1tquoBq5\n' +
+    'MnmixZjDCVd2VcrVyTA6ntOBoharKFW0rH1PqU+qu7dZF7CBPbAdEw==\n' +
+    '-----END RSA PRIVATE KEY-----\n'
+};
+
+const WPA_EAP_AP_LIST = [
+  {
+    ssid: 'WPA-EAP-TTLS',
+    ieee8021x: 1,
+    eapol_version: 1,
+    eap_server: 1,
+    eapol_key_index_workaround: 0,
+    eap_user_file: SERVER_EAP_USER_CONF.path,
+    ca_cert: CA_CERT.path,
+    server_cert: SERVER_CERT.path,
+    private_key: SERVER_KEY.path,
+    wpa: 3,
+    wpa_key_mgmt: 'WPA-EAP'
+  }
+];
+
+const CLIENT_PKCS12_CERT = {
+  nickname: 'client',
+  password: 'password',
+  usage: ['UserCert', 'ServerCert'],
+  content: [0x30, 0x82, 0x0E, 0x01, 0x02, 0x01, 0x03, 0x30,
+    0x82, 0x0D, 0xC7, 0x06, 0x09, 0x2A, 0x86, 0x48,
+    0x86, 0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82,
+    0x0D, 0xB8, 0x04, 0x82, 0x0D, 0xB4, 0x30, 0x82,
+    0x0D, 0xB0, 0x30, 0x82, 0x08, 0x67, 0x06, 0x09,
+    0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x07,
+    0x06, 0xA0, 0x82, 0x08, 0x58, 0x30, 0x82, 0x08,
+    0x54, 0x02, 0x01, 0x00, 0x30, 0x82, 0x08, 0x4D,
+    0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D,
+    0x01, 0x07, 0x01, 0x30, 0x1C, 0x06, 0x0A, 0x2A,
+    0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x0C, 0x01,
+    0x06, 0x30, 0x0E, 0x04, 0x08, 0x67, 0x7A, 0xF3,
+    0x61, 0xBE, 0xE0, 0x51, 0xC1, 0x02, 0x02, 0x08,
+    0x00, 0x80, 0x82, 0x08, 0x20, 0xFC, 0x6A, 0x79,
+    0xA1, 0x6C, 0xAF, 0xBE, 0xEE, 0x62, 0x45, 0x33,
+    0xB8, 0x48, 0xE1, 0x68, 0xA1, 0x15, 0x11, 0x4B,
+    0x95, 0xCB, 0x77, 0xC0, 0x5D, 0xA2, 0xCB, 0xDB,
+    0xD1, 0x83, 0x74, 0x60, 0xD7, 0xEC, 0x42, 0xA6,
+    0x3A, 0x23, 0xF7, 0x85, 0xEB, 0xC1, 0xFE, 0x6A,
+    0x57, 0x8E, 0xC1, 0x44, 0xF3, 0x1F, 0xFE, 0xB8,
+    0x2D, 0x8C, 0x4D, 0xC9, 0x5B, 0xAE, 0x21, 0x2E,
+    0x4C, 0x1A, 0xEB, 0x84, 0x09, 0xF3, 0x40, 0x92,
+    0x39, 0x7F, 0x56, 0x02, 0x46, 0x61, 0x16, 0xDE,
+    0x5C, 0x48, 0xB6, 0x0C, 0x1D, 0xD3, 0x5F, 0x10,
+    0x9A, 0x39, 0xB8, 0x66, 0x31, 0xFC, 0x39, 0x71,
+    0x87, 0x23, 0x46, 0x9D, 0xE8, 0x3C, 0x2B, 0xA1,
+    0x39, 0x8A, 0xD3, 0xFF, 0xD9, 0x43, 0xB6, 0x61,
+    0xC6, 0x67, 0x70, 0x40, 0xBD, 0xFE, 0xD3, 0xC1,
+    0x68, 0xF5, 0xF7, 0xC8, 0x89, 0xD8, 0x17, 0xC5,
+    0xE8, 0x3D, 0x29, 0xD5, 0x91, 0xDF, 0x1F, 0x56,
+    0x74, 0x5A, 0xC4, 0xA8, 0x14, 0xBA, 0xD4, 0xFA,
+    0x13, 0x49, 0x2A, 0x9F, 0x63, 0xF1, 0xB2, 0x45,
+    0xF1, 0xF0, 0x2A, 0xDD, 0x75, 0x66, 0x8A, 0xF7,
+    0xAB, 0x73, 0x86, 0x26, 0x9D, 0x1F, 0x07, 0xAD,
+    0xD3, 0xFE, 0xE0, 0xA3, 0xED, 0xA0, 0x96, 0x3E,
+    0x1E, 0x89, 0x86, 0x02, 0x4C, 0x28, 0xFD, 0x57,
+    0xA1, 0x67, 0x55, 0xF0, 0x82, 0x3B, 0x7F, 0xCC,
+    0x2A, 0x32, 0x01, 0x93, 0x1D, 0x8B, 0x66, 0x8A,
+    0x20, 0x52, 0x84, 0xDD, 0x2C, 0xFD, 0xEE, 0x72,
+    0xF3, 0x8C, 0x58, 0xB9, 0x99, 0xE5, 0xC1, 0x22,
+    0x63, 0x59, 0x00, 0xE2, 0x76, 0xC5, 0x3A, 0x17,
+    0x7F, 0x93, 0xE9, 0x67, 0x61, 0xAA, 0x10, 0xC3,
+    0xD9, 0xC8, 0x24, 0x46, 0x5B, 0xBE, 0x8C, 0x1F,
+    0x2D, 0x66, 0x48, 0xD2, 0x02, 0x11, 0xFB, 0x74,
+    0x14, 0x76, 0x76, 0x5A, 0x98, 0x54, 0x35, 0xA7,
+    0x85, 0x66, 0x20, 0x26, 0x8B, 0x13, 0x6F, 0x68,
+    0xE3, 0xC9, 0x58, 0x7D, 0x1C, 0x3E, 0x01, 0x8D,
+    0xF8, 0xD6, 0x7F, 0xCF, 0xA2, 0x07, 0xB7, 0x95,
+    0xFD, 0xF0, 0x02, 0x34, 0x32, 0x30, 0xE8, 0xD4,
+    0x57, 0x5E, 0x53, 0xFB, 0x54, 0xE2, 0x03, 0x32,
+    0xCC, 0x52, 0x2E, 0xD2, 0x35, 0xD9, 0x58, 0x85,
+    0x2D, 0xEC, 0x2D, 0x71, 0xD1, 0x8A, 0x29, 0xD0,
+    0xB0, 0x24, 0xBD, 0x24, 0xDC, 0x1A, 0x28, 0x3F,
+    0xA0, 0x12, 0x81, 0x15, 0x24, 0xC9, 0xB5, 0x4A,
+    0x23, 0xB6, 0xA3, 0x45, 0x50, 0x2D, 0x73, 0x99,
+    0x6B, 0x1C, 0xFB, 0xA4, 0x53, 0xD7, 0x5C, 0xF4,
+    0x6C, 0xB0, 0xE5, 0x74, 0xB3, 0x76, 0xF8, 0xB1,
+    0x0D, 0x59, 0x70, 0x9F, 0xCA, 0xDE, 0xF2, 0xAA,
+    0x4C, 0x7D, 0x11, 0x54, 0xC4, 0x19, 0x0F, 0x36,
+    0x4A, 0x62, 0xFF, 0x8B, 0x10, 0xCB, 0x93, 0x50,
+    0xDA, 0x79, 0x5E, 0x4E, 0x09, 0x1F, 0x22, 0xC8,
+    0x19, 0x85, 0xE9, 0xEE, 0xB7, 0x71, 0x65, 0xB9,
+    0x10, 0xD2, 0x0A, 0x73, 0x5B, 0xA6, 0xDA, 0x37,
+    0x46, 0x02, 0x00, 0x98, 0x9E, 0x20, 0x6C, 0x7D,
+    0xC7, 0x69, 0xBB, 0xC2, 0x00, 0x40, 0x9C, 0x57,
+    0x00, 0xC2, 0x36, 0x76, 0xE8, 0x2A, 0x8D, 0xAD,
+    0x62, 0x57, 0xC8, 0xD0, 0x9D, 0x66, 0x27, 0x5A,
+    0xD8, 0x0D, 0x35, 0x60, 0x28, 0x38, 0x62, 0x94,
+    0x78, 0x36, 0x25, 0x58, 0xFD, 0xF8, 0x66, 0x1F,
+    0x68, 0x04, 0x0F, 0xD8, 0x00, 0xDF, 0xA0, 0x6C,
+    0x25, 0x42, 0x9A, 0x4C, 0xEB, 0x80, 0x13, 0x51,
+    0x7D, 0x2D, 0xA8, 0x89, 0xD6, 0x1B, 0x67, 0x72,
+    0x01, 0xF3, 0x2D, 0x16, 0x77, 0xFE, 0x22, 0xBC,
+    0x8A, 0x45, 0x09, 0x1F, 0x9C, 0x2F, 0x2A, 0xA9,
+    0x61, 0x5B, 0x4A, 0xE6, 0x64, 0x2C, 0x62, 0x1A,
+    0x3A, 0x96, 0xE6, 0x0A, 0xAE, 0x05, 0x1A, 0xC8,
+    0xCB, 0xD6, 0x8F, 0x3A, 0x4B, 0xE0, 0x7F, 0x82,
+    0xB4, 0x98, 0xF1, 0x9D, 0xD7, 0x14, 0x76, 0x5E,
+    0x77, 0x85, 0x87, 0xEC, 0x13, 0xDA, 0xFD, 0xAF,
+    0xCB, 0xA3, 0x1C, 0x99, 0xC1, 0xFE, 0x17, 0x0C,
+    0x40, 0x4D, 0x3C, 0x8F, 0x70, 0x86, 0x63, 0x64,
+    0xB7, 0x75, 0xA8, 0x71, 0x36, 0xDC, 0x54, 0x10,
+    0x57, 0x0C, 0xA8, 0xF2, 0xA1, 0xBB, 0xED, 0x03,
+    0x41, 0x57, 0x34, 0x2C, 0x8F, 0x7C, 0xA0, 0x09,
+    0xF3, 0x9E, 0x41, 0xB7, 0xA8, 0xD4, 0x66, 0x0D,
+    0x0D, 0xC0, 0x6A, 0xFC, 0x6A, 0xA2, 0xAC, 0xE2,
+    0x60, 0x00, 0xE3, 0xF7, 0x75, 0x43, 0x23, 0xEB,
+    0xC8, 0x61, 0xFA, 0xB3, 0xB8, 0x28, 0xCE, 0xCA,
+    0xF4, 0x47, 0x7F, 0x30, 0x6D, 0x61, 0x89, 0x47,
+    0xA1, 0x4A, 0xFE, 0xD1, 0x21, 0x0B, 0x6D, 0xF4,
+    0x3F, 0x00, 0x86, 0x30, 0x8E, 0x33, 0x21, 0x6F,
+    0xDA, 0x15, 0xFD, 0x5F, 0xEC, 0x8E, 0xF1, 0x12,
+    0x3F, 0xC9, 0x83, 0x0C, 0xCA, 0x22, 0x01, 0xF1,
+    0x70, 0x5F, 0x1F, 0x66, 0xB5, 0xF8, 0x3E, 0x7A,
+    0x6F, 0xDE, 0xDB, 0xA7, 0x8D, 0x18, 0x9E, 0xBE,
+    0xDB, 0xAD, 0x3D, 0x66, 0x30, 0xC1, 0x6C, 0x0C,
+    0x87, 0xB4, 0x65, 0x75, 0xE0, 0x9D, 0xEA, 0x16,
+    0x0D, 0x07, 0x37, 0x33, 0xC5, 0xEC, 0x97, 0x93,
+    0x37, 0xEB, 0x8E, 0x65, 0x9C, 0x40, 0x63, 0x6C,
+    0x43, 0x60, 0xB0, 0x40, 0x4D, 0x85, 0xEF, 0xC2,
+    0x47, 0x5F, 0xE7, 0x6B, 0xCB, 0x40, 0xE8, 0xEA,
+    0xD8, 0xAB, 0xB1, 0x9A, 0x72, 0xDC, 0x4C, 0x14,
+    0xFA, 0x43, 0x61, 0x5F, 0xA6, 0x5C, 0x3A, 0x05,
+    0x17, 0x2E, 0x74, 0xF3, 0x5E, 0x45, 0xD9, 0x47,
+    0xAA, 0x59, 0xB6, 0x8F, 0x42, 0x66, 0x42, 0x29,
+    0x90, 0x95, 0x48, 0x46, 0x91, 0x88, 0x3C, 0x8C,
+    0xDE, 0xCC, 0xED, 0xB3, 0xAA, 0x62, 0xEA, 0xBC,
+    0xB4, 0x0C, 0x48, 0x4C, 0x53, 0x23, 0x5E, 0x24,
+    0x85, 0xBF, 0x92, 0xDA, 0x14, 0xDB, 0x1A, 0x3D,
+    0xEF, 0x30, 0xD9, 0x49, 0x64, 0x4D, 0xE5, 0x01,
+    0xFC, 0xA4, 0x4B, 0xD1, 0x9F, 0xDE, 0x96, 0x7F,
+    0x50, 0xBC, 0x4D, 0x38, 0x44, 0xE9, 0x23, 0x5F,
+    0x37, 0x57, 0x1A, 0xA6, 0x52, 0x5A, 0x0F, 0x4F,
+    0x87, 0x33, 0x4A, 0x7B, 0x66, 0xEE, 0x3D, 0x66,
+    0x0A, 0x63, 0x39, 0x1F, 0x23, 0x38, 0x35, 0x73,
+    0x60, 0x5E, 0x47, 0x20, 0x4F, 0xC0, 0xC8, 0x3C,
+    0x09, 0xF9, 0x29, 0x4F, 0x5E, 0x55, 0x69, 0xC4,
+    0x6B, 0xE8, 0xF8, 0x91, 0xC0, 0x22, 0x65, 0x15,
+    0x1E, 0xFB, 0xB9, 0x61, 0xCE, 0x45, 0xBE, 0x2B,
+    0xEE, 0xB9, 0x04, 0x2B, 0xFD, 0xAE, 0x61, 0x1C,
+    0x3D, 0x3D, 0x7C, 0xBF, 0xC1, 0xF7, 0x3C, 0x4E,
+    0x9E, 0x0E, 0x54, 0xC8, 0xAD, 0xA9, 0xDF, 0x43,
+    0x49, 0xB9, 0x41, 0x05, 0xE5, 0xF1, 0x49, 0xAA,
+    0x77, 0x6C, 0x34, 0x5B, 0x93, 0x24, 0x24, 0x23,
+    0x74, 0x68, 0x11, 0xCE, 0x15, 0x80, 0xA1, 0xA4,
+    0x1F, 0x8D, 0x81, 0xCD, 0xB2, 0x98, 0xCA, 0x14,
+    0x0B, 0x0C, 0x61, 0x50, 0x69, 0x72, 0xAE, 0xFA,
+    0x8B, 0xC0, 0x3F, 0x0D, 0xE7, 0xF2, 0x0F, 0xEB,
+    0xC1, 0x11, 0xB9, 0x10, 0x03, 0x6A, 0xF5, 0x97,
+    0x3C, 0x53, 0x2F, 0x67, 0x86, 0x09, 0x6A, 0xE3,
+    0x28, 0xC0, 0x78, 0xC8, 0xB4, 0x39, 0x8E, 0xD1,
+    0xCE, 0x25, 0xE8, 0x66, 0xF7, 0x09, 0x40, 0x7D,
+    0x81, 0xFB, 0xAF, 0xFA, 0x59, 0xC4, 0x9B, 0x2B,
+    0x83, 0x45, 0x5B, 0xA8, 0x66, 0x9E, 0x38, 0xC8,
+    0xFD, 0xAC, 0xF2, 0x2D, 0x21, 0xDE, 0x50, 0x4C,
+    0x03, 0xCB, 0x88, 0x42, 0xDD, 0x84, 0x09, 0x99,
+    0x8E, 0x8B, 0x40, 0x97, 0x1B, 0x14, 0x85, 0x37,
+    0x11, 0x01, 0xE0, 0x74, 0x6B, 0x33, 0x52, 0x8C,
+    0x68, 0x3A, 0x89, 0xB2, 0xAF, 0x35, 0xE6, 0x65,
+    0xC3, 0x58, 0x70, 0xD2, 0xE7, 0x1F, 0x1F, 0xF6,
+    0xE5, 0x0A, 0xB1, 0xFE, 0xD0, 0xC9, 0x51, 0x50,
+    0xE7, 0xFD, 0x58, 0xF5, 0xC4, 0x58, 0x65, 0x94,
+    0xD1, 0x57, 0x55, 0x5E, 0xD2, 0x27, 0x98, 0xAF,
+    0xE7, 0x55, 0x0B, 0x87, 0x50, 0x9B, 0xEF, 0xE8,
+    0x2B, 0xFC, 0xE7, 0x3B, 0x4E, 0xD7, 0xB7, 0x4D,
+    0xF4, 0xBC, 0xF4, 0x88, 0x63, 0xE4, 0x8A, 0x20,
+    0x4B, 0x22, 0xB0, 0xA0, 0x53, 0x7F, 0xA8, 0xC9,
+    0x0C, 0xF8, 0xD7, 0xBD, 0x46, 0x39, 0xA7, 0x7D,
+    0xDD, 0x10, 0x91, 0x50, 0x54, 0x06, 0x47, 0xF0,
+    0x3C, 0xAA, 0x43, 0x40, 0xF8, 0x54, 0xDD, 0x8A,
+    0xEA, 0x8A, 0x0B, 0xA5, 0x7F, 0xCD, 0x5E, 0xAA,
+    0x02, 0x2E, 0x1F, 0xC6, 0x50, 0x15, 0xF8, 0x0A,
+    0x0C, 0x1B, 0x3C, 0x55, 0x3A, 0xC3, 0x6F, 0x88,
+    0xD7, 0xBF, 0xB1, 0x02, 0xCC, 0xE0, 0x08, 0x29,
+    0x97, 0xD2, 0xAA, 0x23, 0xC4, 0x6D, 0xE3, 0xE3,
+    0x76, 0x39, 0x92, 0xC3, 0x2E, 0x7A, 0xE2, 0x98,
+    0xD1, 0xFC, 0xAE, 0xCC, 0x95, 0xD8, 0xB4, 0xDC,
+    0x92, 0xEA, 0x6A, 0x5F, 0xF2, 0x92, 0x17, 0x0B,
+    0x8D, 0xC3, 0xFA, 0x9C, 0x62, 0xCE, 0x44, 0x8D,
+    0xC3, 0x1E, 0xC3, 0xB2, 0xD5, 0x00, 0xCD, 0xB4,
+    0x9E, 0x2D, 0x7B, 0xF2, 0x98, 0xA3, 0x00, 0x8B,
+    0x81, 0x30, 0x77, 0x5B, 0x02, 0x99, 0xB1, 0xCD,
+    0xC3, 0x1D, 0x74, 0x74, 0xEF, 0x41, 0xCB, 0x69,
+    0x63, 0x8E, 0xA6, 0xD3, 0x2D, 0x3E, 0x1F, 0x1D,
+    0x12, 0x9E, 0xD9, 0x18, 0x67, 0x06, 0xAF, 0x37,
+    0x29, 0xAD, 0x65, 0xD8, 0xEB, 0x71, 0xC4, 0x7D,
+    0x94, 0x3D, 0xEA, 0xCC, 0xDF, 0x72, 0x41, 0x51,
+    0x3C, 0xA1, 0x66, 0x98, 0x32, 0x32, 0x40, 0x54,
+    0xB0, 0x2F, 0xEB, 0xCE, 0xDF, 0x4A, 0x64, 0xFB,
+    0x9A, 0x90, 0xDC, 0xF6, 0x6F, 0xA9, 0xD4, 0xCA,
+    0xCB, 0x91, 0xC4, 0xFE, 0xEE, 0x9C, 0x01, 0x50,
+    0x2E, 0xAC, 0xCC, 0x5F, 0x89, 0xD0, 0x91, 0xA3,
+    0xD9, 0xF9, 0x4B, 0x8D, 0xDE, 0x6C, 0x60, 0x21,
+    0x19, 0xB1, 0xD3, 0x4D, 0x75, 0x56, 0x6F, 0xB8,
+    0x25, 0xA4, 0x92, 0x4F, 0x12, 0xF5, 0x8F, 0xC1,
+    0x17, 0x4B, 0xB3, 0x34, 0x21, 0x22, 0xAC, 0x52,
+    0xD2, 0x64, 0xC9, 0x9A, 0x7D, 0xFC, 0xC0, 0x0A,
+    0x89, 0x34, 0xFF, 0x08, 0xD3, 0x04, 0xDC, 0xFE,
+    0x7C, 0xB3, 0xB8, 0xFD, 0x85, 0xDD, 0x79, 0x51,
+    0xA7, 0x89, 0xE8, 0xF1, 0x23, 0xB1, 0xDF, 0xD7,
+    0x1F, 0x7B, 0xB1, 0x5D, 0x42, 0xF9, 0x61, 0xF8,
+    0xDC, 0x81, 0x04, 0xF1, 0xCC, 0xFA, 0xD7, 0xED,
+    0xBF, 0x47, 0xAC, 0xBD, 0xE5, 0xFA, 0xAC, 0xB3,
+    0x1C, 0xD9, 0xA1, 0xB3, 0x60, 0xEE, 0x9C, 0x8A,
+    0x36, 0x57, 0xB4, 0x2F, 0xA1, 0xA2, 0xF3, 0xE2,
+    0x09, 0x9A, 0x6E, 0x43, 0x9B, 0xE5, 0x93, 0xB8,
+    0x3D, 0x9E, 0x9F, 0xC1, 0xC6, 0x0D, 0x02, 0xEB,
+    0x4D, 0x38, 0xE9, 0xB4, 0x9F, 0xEA, 0x33, 0x8C,
+    0x07, 0xD8, 0xB4, 0x71, 0xAD, 0xE5, 0x43, 0xB2,
+    0xCC, 0x55, 0x93, 0x6A, 0xDB, 0x1E, 0x80, 0xDB,
+    0xC2, 0xEA, 0x42, 0x8E, 0xFC, 0x86, 0x44, 0xC9,
+    0x8A, 0xC4, 0xF2, 0x46, 0xA7, 0x39, 0x50, 0x0D,
+    0x1A, 0xAA, 0x07, 0x04, 0xBE, 0xD4, 0xCE, 0x62,
+    0x4D, 0x0F, 0x91, 0x7D, 0x29, 0x88, 0x9C, 0x4C,
+    0xAF, 0xF7, 0xD8, 0x40, 0x93, 0x88, 0xC7, 0x20,
+    0xD2, 0x17, 0x2A, 0xC4, 0x92, 0x72, 0xD0, 0xC0,
+    0x4E, 0x56, 0x47, 0xB1, 0x27, 0x02, 0xE6, 0x61,
+    0x82, 0x5E, 0xC8, 0x2E, 0x90, 0xD2, 0x31, 0x22,
+    0xE2, 0xA9, 0x4A, 0x91, 0x45, 0x69, 0xB1, 0xA5,
+    0x0F, 0x66, 0x2C, 0x30, 0xAD, 0x7F, 0x1B, 0x0E,
+    0x22, 0x17, 0x60, 0x2E, 0x3D, 0x7F, 0x7F, 0x8C,
+    0x33, 0x51, 0xA0, 0x25, 0xDE, 0xFD, 0x75, 0xBC,
+    0xEF, 0xE6, 0xE7, 0x20, 0x04, 0x5A, 0xEC, 0x50,
+    0x21, 0x48, 0x56, 0x98, 0xE2, 0x33, 0x6D, 0x22,
+    0x5C, 0xC3, 0xFB, 0xFC, 0x6F, 0xB3, 0xA7, 0x8E,
+    0x6F, 0x67, 0x70, 0x9D, 0xDA, 0x02, 0x01, 0x59,
+    0x7B, 0x3D, 0x2B, 0x38, 0xCC, 0x0F, 0x44, 0x3D,
+    0xFB, 0x9A, 0xB3, 0x23, 0x15, 0x50, 0x6E, 0xBF,
+    0x8B, 0xA1, 0x94, 0x33, 0xE5, 0x7B, 0x88, 0x4E,
+    0xCB, 0x6D, 0x9F, 0xBF, 0xBC, 0x7A, 0xA8, 0x1E,
+    0x68, 0x25, 0xED, 0x8E, 0x53, 0x21, 0x72, 0xC5,
+    0x70, 0xB3, 0xE4, 0xA6, 0xA1, 0x5A, 0x2D, 0xC8,
+    0x43, 0x9D, 0x60, 0x77, 0x78, 0xE0, 0xC4, 0xAF,
+    0xC8, 0x29, 0xBA, 0xD0, 0x4D, 0x39, 0x83, 0x51,
+    0xA7, 0x10, 0x7F, 0x0C, 0x34, 0x0E, 0x6C, 0x75,
+    0x26, 0xD7, 0xD6, 0xC7, 0x32, 0x53, 0xAF, 0x4E,
+    0xBE, 0xF2, 0xC2, 0x0F, 0x99, 0x23, 0xB9, 0xE1,
+    0xC8, 0xB4, 0xBC, 0x5A, 0xC6, 0xCB, 0xEB, 0x4D,
+    0x28, 0x56, 0x72, 0xFE, 0x1B, 0x2C, 0x5D, 0xE3,
+    0xBC, 0xC7, 0xA3, 0xC0, 0x7D, 0x27, 0xF0, 0xD0,
+    0x4F, 0x3F, 0x1F, 0xF7, 0x87, 0x15, 0xF2, 0xEA,
+    0xD4, 0x03, 0x6D, 0x2F, 0xD4, 0x8E, 0x50, 0x4B,
+    0x05, 0xBF, 0xF7, 0x8C, 0x67, 0x5A, 0xDC, 0x4D,
+    0xCD, 0xCF, 0x9D, 0x02, 0xB6, 0xE7, 0xAE, 0x49,
+    0xD1, 0x7C, 0x00, 0xE7, 0x3B, 0xEA, 0xFB, 0x0D,
+    0x2A, 0x7B, 0x41, 0x33, 0x66, 0xD0, 0x29, 0x9F,
+    0xB3, 0x8A, 0x71, 0xB0, 0xE2, 0x76, 0xA9, 0xDB,
+    0xFD, 0x64, 0x04, 0x69, 0xDF, 0x89, 0x1F, 0x56,
+    0x86, 0x92, 0xD9, 0xD9, 0xB9, 0xF3, 0x4F, 0xAC,
+    0xAE, 0x61, 0x48, 0x20, 0xCE, 0x3C, 0x2B, 0x44,
+    0xAB, 0x42, 0xFA, 0xAB, 0x2E, 0x94, 0x82, 0xC8,
+    0xD9, 0x97, 0xCF, 0x27, 0xDF, 0xAC, 0xAC, 0xE7,
+    0xCA, 0xB2, 0x84, 0xAB, 0xF2, 0x5D, 0xDF, 0x56,
+    0x0C, 0x8C, 0x07, 0x3C, 0x3D, 0xA8, 0xDD, 0xBE,
+    0xFF, 0x4E, 0x28, 0x0D, 0xB2, 0x2D, 0xE6, 0x9D,
+    0x44, 0x21, 0xCB, 0xE7, 0x33, 0x63, 0x22, 0x8F,
+    0x4C, 0xFF, 0xB6, 0x1D, 0x9A, 0x71, 0x3F, 0xB1,
+    0x29, 0xAE, 0x3A, 0x35, 0xEE, 0x9C, 0x97, 0x68,
+    0xA7, 0x52, 0x66, 0x01, 0xD8, 0x9A, 0x5D, 0xF4,
+    0xB3, 0x2F, 0x5C, 0xD4, 0x0E, 0xF9, 0xCF, 0x07,
+    0xF6, 0x8C, 0xBA, 0xA6, 0x8D, 0x6B, 0xC6, 0x01,
+    0xC2, 0x69, 0xAE, 0x60, 0x08, 0x1A, 0x0E, 0x3F,
+    0xAE, 0x60, 0x29, 0xF3, 0x48, 0x0D, 0xE0, 0xD0,
+    0xAE, 0x52, 0x44, 0xE9, 0x7F, 0x1F, 0x92, 0x5F,
+    0x71, 0xAD, 0xEC, 0x6B, 0x47, 0x66, 0x92, 0x22,
+    0x27, 0xAE, 0x6E, 0x25, 0xCD, 0xF3, 0x5F, 0x55,
+    0x59, 0xBD, 0x73, 0xCE, 0x2B, 0x7E, 0x99, 0x44,
+    0x56, 0x70, 0xA3, 0xE7, 0x7A, 0x59, 0x75, 0xD8,
+    0x48, 0x0C, 0x39, 0x2B, 0xD7, 0x53, 0xC6, 0xAD,
+    0x4A, 0x6F, 0xB4, 0x14, 0x96, 0xDF, 0xF2, 0x4A,
+    0x0C, 0xA2, 0xD5, 0x29, 0x98, 0x7C, 0x42, 0x87,
+    0xD9, 0x1F, 0x97, 0x61, 0xD9, 0xBF, 0x99, 0x4F,
+    0x2C, 0x4C, 0x75, 0xAC, 0xB8, 0x06, 0x75, 0xD6,
+    0x87, 0x76, 0x7E, 0xE3, 0x23, 0x4B, 0xEA, 0x1A,
+    0x1A, 0xF4, 0xB7, 0x09, 0xAF, 0x53, 0xEB, 0xA6,
+    0x39, 0x10, 0xFE, 0xD4, 0xEB, 0x1B, 0xAE, 0x38,
+    0x31, 0x33, 0xBA, 0x68, 0xEE, 0xC7, 0x65, 0x76,
+    0xFB, 0x49, 0x77, 0xD4, 0x19, 0xC4, 0xE6, 0xA7,
+    0x05, 0xFE, 0x2A, 0xDA, 0x39, 0x99, 0x1A, 0x92,
+    0xD2, 0xF0, 0x61, 0x97, 0xF6, 0x06, 0x6C, 0x88,
+    0x7B, 0x6F, 0x60, 0xE6, 0x70, 0x08, 0xF0, 0xB4,
+    0x6B, 0x39, 0x6F, 0x05, 0x41, 0x81, 0xF9, 0xBE,
+    0x7A, 0x51, 0xC4, 0x75, 0xB0, 0x6A, 0x89, 0xA0,
+    0xA6, 0x9A, 0x5B, 0xEE, 0x7D, 0x78, 0x17, 0x5F,
+    0x9F, 0x3B, 0x7D, 0xDD, 0x8A, 0x9E, 0xAA, 0x1A,
+    0xDA, 0x49, 0x08, 0xE9, 0xFD, 0x91, 0xA6, 0xFA,
+    0xCE, 0xCF, 0x67, 0xDF, 0x0F, 0xC9, 0xD6, 0x38,
+    0xD9, 0xD5, 0xD1, 0xC0, 0x76, 0x59, 0x42, 0x53,
+    0xBF, 0x48, 0xE9, 0x11, 0x74, 0xC7, 0x11, 0xD8,
+    0xE7, 0x8E, 0xD3, 0xC8, 0x25, 0xA1, 0x26, 0x50,
+    0xBB, 0xB4, 0x35, 0xAF, 0xAF, 0x06, 0x23, 0x69,
+    0x3E, 0x30, 0xFD, 0x7B, 0x34, 0x83, 0x07, 0xD0,
+    0xF0, 0x0F, 0x6C, 0x9A, 0x13, 0x5D, 0xC2, 0x7B,
+    0xDF, 0x6F, 0xDD, 0x8E, 0xF4, 0x30, 0x82, 0x05,
+    0x41, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7,
+    0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x05, 0x32,
+    0x04, 0x82, 0x05, 0x2E, 0x30, 0x82, 0x05, 0x2A,
+    0x30, 0x82, 0x05, 0x26, 0x06, 0x0B, 0x2A, 0x86,
+    0x48, 0x86, 0xF7, 0x0D, 0x01, 0x0C, 0x0A, 0x01,
+    0x02, 0xA0, 0x82, 0x04, 0xEE, 0x30, 0x82, 0x04,
+    0xEA, 0x30, 0x1C, 0x06, 0x0A, 0x2A, 0x86, 0x48,
+    0x86, 0xF7, 0x0D, 0x01, 0x0C, 0x01, 0x03, 0x30,
+    0x0E, 0x04, 0x08, 0x74, 0xC0, 0x84, 0x8F, 0xC7,
+    0x74, 0x5E, 0x21, 0x02, 0x02, 0x08, 0x00, 0x04,
+    0x82, 0x04, 0xC8, 0x1E, 0xF4, 0xE9, 0x07, 0x27,
+    0x9E, 0x5A, 0xC9, 0x39, 0x1D, 0x37, 0x2C, 0x06,
+    0x4B, 0x57, 0xEA, 0xC5, 0x42, 0x9A, 0x60, 0xD5,
+    0x42, 0xB2, 0x34, 0x2D, 0xD3, 0x88, 0x7C, 0x78,
+    0x87, 0xB6, 0xE9, 0x42, 0x44, 0x1F, 0x67, 0x32,
+    0x92, 0x54, 0x22, 0xDA, 0xB2, 0x43, 0xE7, 0x40,
+    0xBE, 0x1F, 0xAF, 0x3A, 0xCD, 0x2A, 0x9F, 0xD7,
+    0x44, 0x5B, 0x37, 0x69, 0x85, 0xDF, 0xEB, 0x2A,
+    0xB9, 0xE2, 0x92, 0x3B, 0xEA, 0xD5, 0x42, 0x53,
+    0x95, 0x4A, 0xB0, 0x1B, 0xA5, 0xEF, 0xA6, 0x0D,
+    0x29, 0xF4, 0x33, 0xFE, 0xD7, 0x49, 0x04, 0x1E,
+    0x8C, 0xAD, 0x63, 0x1E, 0x79, 0x63, 0x74, 0x0C,
+    0xE5, 0x5E, 0xA2, 0x2C, 0xBE, 0xB8, 0x90, 0xCE,
+    0x06, 0x25, 0xBF, 0xD1, 0x5A, 0x50, 0xCF, 0x3B,
+    0x52, 0xE2, 0xA7, 0xFF, 0x19, 0x02, 0xCF, 0xD0,
+    0x9B, 0xD9, 0xF7, 0x28, 0x07, 0x38, 0x1F, 0xF2,
+    0xAF, 0x44, 0x91, 0x3F, 0x0F, 0xB6, 0x6E, 0x8C,
+    0xC0, 0x32, 0x92, 0xC0, 0xCD, 0x25, 0x98, 0x67,
+    0xF1, 0x47, 0x52, 0x50, 0xF0, 0xA3, 0x7B, 0xE6,
+    0x74, 0xDC, 0x72, 0x28, 0xC8, 0xAB, 0xB3, 0x31,
+    0x7D, 0xA3, 0xF7, 0xC7, 0xD1, 0xE6, 0x99, 0xB4,
+    0xB6, 0x5A, 0x3A, 0x4D, 0x83, 0x4F, 0xB8, 0xB5,
+    0x86, 0xF8, 0x37, 0x7F, 0xA0, 0x16, 0x2F, 0x3C,
+    0x62, 0x7A, 0xD4, 0x3A, 0xEB, 0xC2, 0xE8, 0x03,
+    0x49, 0x17, 0x9E, 0xFB, 0xD7, 0xAF, 0x91, 0x32,
+    0xFD, 0xEA, 0x4F, 0x64, 0xC6, 0x6E, 0x02, 0xEA,
+    0xC4, 0xC8, 0x1F, 0x16, 0xC5, 0x4C, 0xFB, 0xC5,
+    0x42, 0xF5, 0x85, 0x05, 0x92, 0x59, 0x4B, 0x31,
+    0xE5, 0xE9, 0x69, 0xE7, 0x02, 0x98, 0x33, 0xBA,
+    0x4C, 0x17, 0x09, 0xEF, 0x89, 0x20, 0xFA, 0x83,
+    0x9F, 0xAE, 0x0E, 0x1B, 0x7D, 0x98, 0xB9, 0xF2,
+    0x3C, 0x0F, 0xB7, 0x1C, 0x72, 0xDF, 0x17, 0x84,
+    0x7F, 0x0A, 0xFD, 0x12, 0x3C, 0x6F, 0x68, 0x5D,
+    0x45, 0xEB, 0xB8, 0xD6, 0x24, 0x65, 0x42, 0x75,
+    0x5C, 0xC2, 0xF3, 0x3A, 0x6A, 0x4E, 0x51, 0x34,
+    0x1B, 0xB6, 0x81, 0xB2, 0x8A, 0xEF, 0x28, 0xA4,
+    0xC5, 0x88, 0x9A, 0x97, 0xE0, 0xEF, 0x31, 0x12,
+    0x01, 0x7E, 0x1B, 0x43, 0x0F, 0x27, 0x80, 0x87,
+    0x98, 0xC5, 0xD5, 0x83, 0xCB, 0x4B, 0xB7, 0x01,
+    0x79, 0x60, 0xA1, 0x1A, 0x03, 0x05, 0xC6, 0x36,
+    0x04, 0x31, 0x3C, 0x06, 0xDB, 0x08, 0xA8, 0xDA,
+    0x8E, 0x32, 0x19, 0x91, 0xF1, 0x0D, 0x61, 0x6F,
+    0xE4, 0xB2, 0x79, 0x8A, 0xDE, 0xF4, 0xF7, 0xFB,
+    0x2C, 0x23, 0x5B, 0xD9, 0x64, 0x2F, 0xB7, 0xB3,
+    0x8B, 0xCA, 0xB8, 0x8C, 0x1D, 0x3B, 0x49, 0x05,
+    0x38, 0xA1, 0xE5, 0x8C, 0x1A, 0xDC, 0xA5, 0x61,
+    0xFE, 0xF4, 0x2B, 0xDC, 0x77, 0x28, 0xF6, 0x19,
+    0xE7, 0xB7, 0x8F, 0x4D, 0x27, 0x2D, 0xED, 0x8A,
+    0x3F, 0x3D, 0xDC, 0x9F, 0xD1, 0x30, 0xFF, 0xD6,
+    0xC3, 0xBE, 0x41, 0x25, 0xE3, 0xA5, 0x9B, 0x73,
+    0xDF, 0x6A, 0xD9, 0xF9, 0x70, 0x84, 0x02, 0x4C,
+    0x35, 0xD4, 0x3E, 0x05, 0x76, 0x3A, 0xDC, 0x6D,
+    0x5A, 0x81, 0xB3, 0x94, 0xF7, 0x22, 0xF7, 0xDC,
+    0xC1, 0x43, 0x31, 0x57, 0x5B, 0x42, 0x9A, 0x0B,
+    0xF4, 0x95, 0x30, 0xA9, 0xBB, 0xD8, 0x06, 0xFB,
+    0x1D, 0x6F, 0x9B, 0xC3, 0xBB, 0xF3, 0xBF, 0xFB,
+    0xB4, 0x9F, 0x35, 0x64, 0x0A, 0x69, 0xB7, 0xD1,
+    0x3E, 0xCA, 0x78, 0x07, 0x04, 0x03, 0x79, 0xD4,
+    0xF3, 0xA8, 0xEC, 0x18, 0xDB, 0x03, 0x5E, 0x47,
+    0xD7, 0xD0, 0x56, 0x2C, 0x74, 0x94, 0x86, 0x04,
+    0x46, 0xB8, 0xD4, 0x35, 0x0A, 0x7B, 0xE6, 0x78,
+    0xC4, 0x43, 0x3C, 0x56, 0xCC, 0x37, 0x8B, 0xFD,
+    0xE8, 0xF4, 0x57, 0xEA, 0xAE, 0xCF, 0x36, 0x97,
+    0x12, 0xAC, 0x39, 0xCF, 0x7C, 0xEF, 0x22, 0x67,
+    0x01, 0xEC, 0xD8, 0x09, 0x49, 0x4E, 0xE3, 0x74,
+    0xDD, 0x39, 0xE1, 0x39, 0xD7, 0x0C, 0x5F, 0x1B,
+    0xCE, 0x69, 0xBC, 0x72, 0x44, 0x87, 0x64, 0x1C,
+    0x08, 0x05, 0x93, 0x69, 0x6D, 0x7F, 0x90, 0x0A,
+    0x2C, 0xCB, 0x8A, 0xBB, 0x7F, 0xE3, 0xE0, 0x80,
+    0x31, 0xD0, 0x0A, 0x3A, 0x95, 0xFF, 0xF7, 0xB4,
+    0x36, 0x38, 0x93, 0xE0, 0x0C, 0x11, 0x37, 0x12,
+    0x06, 0xF6, 0xAD, 0xE9, 0xB1, 0x7A, 0x00, 0xF5,
+    0xD2, 0x32, 0x6B, 0xD0, 0x27, 0xA5, 0x1B, 0x3D,
+    0xE8, 0xDB, 0xCC, 0xA9, 0x1F, 0x1F, 0xB1, 0x99,
+    0x3D, 0x7C, 0xB7, 0xCA, 0xDA, 0x27, 0x2C, 0x64,
+    0x1C, 0x49, 0xB6, 0x87, 0x44, 0x06, 0x94, 0x9D,
+    0xBC, 0x6B, 0x20, 0xA2, 0x68, 0x15, 0x1F, 0xE2,
+    0xF2, 0xAD, 0x6D, 0x23, 0x2E, 0x2B, 0x74, 0xE2,
+    0x5D, 0xE4, 0xB0, 0xC7, 0x84, 0xCB, 0x64, 0xBF,
+    0xE0, 0xA8, 0x18, 0x83, 0xB4, 0xC9, 0xD9, 0x73,
+    0xA8, 0xE6, 0xA9, 0x36, 0xD5, 0x63, 0x1E, 0x2C,
+    0x2A, 0x55, 0x09, 0x77, 0x5E, 0xB3, 0x4B, 0xEA,
+    0xB5, 0xD0, 0x14, 0x5F, 0xEB, 0x50, 0x7B, 0xAA,
+    0xEF, 0x94, 0xBA, 0x2B, 0xD7, 0x8A, 0x07, 0xF1,
+    0xF9, 0x5E, 0x12, 0x12, 0x21, 0x52, 0xE5, 0x0A,
+    0x3E, 0xC0, 0xBC, 0x5D, 0x4C, 0xE2, 0x12, 0x7C,
+    0x39, 0xF9, 0x16, 0x9D, 0xBD, 0x96, 0x83, 0x3B,
+    0x7F, 0x3D, 0x6A, 0xEC, 0xF1, 0x25, 0xD2, 0xB0,
+    0xB0, 0xEB, 0x20, 0x06, 0x07, 0xD6, 0xD9, 0x4C,
+    0x07, 0x9A, 0x82, 0xC1, 0xFC, 0xF7, 0x66, 0x15,
+    0xBD, 0x62, 0x65, 0xD8, 0x6C, 0xF6, 0x33, 0x7B,
+    0x5A, 0x28, 0xEC, 0x90, 0xA1, 0x26, 0x9F, 0xC3,
+    0x28, 0x4A, 0x64, 0x50, 0x5F, 0xCA, 0xE2, 0x6D,
+    0xB8, 0x0F, 0xE2, 0x94, 0xB5, 0x8E, 0x1F, 0x8A,
+    0x8F, 0x6B, 0xA6, 0x86, 0x1F, 0xEE, 0xDC, 0x24,
+    0xB4, 0xB8, 0x25, 0xEC, 0x28, 0x2D, 0xF9, 0xCB,
+    0x7D, 0x38, 0xFF, 0xC7, 0x74, 0x2E, 0xD3, 0x10,
+    0xEC, 0x03, 0x31, 0xEE, 0x83, 0xE7, 0xA4, 0xF7,
+    0xBA, 0x28, 0x21, 0xE0, 0x7F, 0xB4, 0xB7, 0xE1,
+    0x7A, 0xF9, 0x2B, 0xB0, 0x2C, 0x3B, 0x80, 0x5F,
+    0xE0, 0x5D, 0xB2, 0x7E, 0x59, 0xFF, 0x59, 0x07,
+    0x58, 0x42, 0x57, 0xEE, 0x44, 0xF1, 0xB1, 0xAD,
+    0xBA, 0xDE, 0xCB, 0x1D, 0x8A, 0x36, 0x67, 0xE8,
+    0x45, 0xFF, 0x07, 0x8D, 0xEE, 0xA4, 0x51, 0x9C,
+    0x4C, 0x83, 0x5D, 0x2E, 0x2F, 0xE1, 0x5B, 0x75,
+    0xE8, 0x29, 0xCD, 0x0B, 0x07, 0x62, 0xE0, 0xC3,
+    0x0D, 0x1D, 0xEA, 0xCF, 0xF0, 0x8A, 0x65, 0x27,
+    0x70, 0x42, 0x9F, 0x26, 0x00, 0x15, 0x70, 0xC5,
+    0x4A, 0xF6, 0x25, 0xD0, 0x40, 0x72, 0xE9, 0xC1,
+    0x73, 0xFD, 0x48, 0x94, 0xA3, 0x8D, 0x66, 0x63,
+    0x96, 0x4F, 0xF7, 0xEE, 0xFB, 0x4C, 0xC7, 0xB8,
+    0x6B, 0xE9, 0x90, 0xE1, 0x2A, 0x66, 0x80, 0x99,
+    0x3B, 0xB0, 0x1A, 0x6C, 0xF9, 0x0E, 0x72, 0xDA,
+    0x8E, 0x4F, 0x46, 0xC2, 0x6A, 0x4B, 0x7A, 0x16,
+    0xE5, 0x26, 0x0B, 0x5C, 0xD4, 0x47, 0x34, 0xE5,
+    0x37, 0xBE, 0x68, 0x6C, 0xDA, 0xD3, 0x9B, 0x6F,
+    0xAE, 0x51, 0x9C, 0x99, 0x0A, 0x5B, 0xF8, 0x37,
+    0xBC, 0xDE, 0xFC, 0x93, 0xC5, 0xE7, 0x0F, 0xEF,
+    0x0B, 0xA6, 0x07, 0xC2, 0xA6, 0xE6, 0xDA, 0x2D,
+    0x1B, 0x49, 0xC9, 0xDE, 0x6B, 0x27, 0xDC, 0x00,
+    0xEF, 0x23, 0x87, 0x0E, 0xEB, 0xD1, 0x48, 0x7D,
+    0xB4, 0xF2, 0x58, 0xC6, 0x3C, 0xE2, 0x89, 0xBA,
+    0xB0, 0x05, 0xAC, 0x94, 0x41, 0x9A, 0xA8, 0xFF,
+    0x3E, 0xBC, 0x3A, 0x52, 0x9C, 0xF9, 0x7F, 0x07,
+    0x8B, 0xB0, 0x2C, 0x71, 0x83, 0x7B, 0xCF, 0x2E,
+    0x7F, 0x7C, 0x96, 0x65, 0xD9, 0x08, 0x17, 0xEC,
+    0xFA, 0xDE, 0x4E, 0x40, 0x12, 0x26, 0x70, 0x71,
+    0x65, 0xA5, 0xDC, 0x98, 0x47, 0xA3, 0xFC, 0xE0,
+    0x9A, 0x16, 0xED, 0x45, 0x56, 0x72, 0x50, 0x05,
+    0x28, 0x2C, 0x99, 0xEC, 0x20, 0x2E, 0x40, 0xC0,
+    0x26, 0x69, 0xCD, 0x49, 0x45, 0x17, 0xA4, 0xA3,
+    0x42, 0x0D, 0x14, 0x65, 0x87, 0x33, 0x8C, 0x92,
+    0xC5, 0xC4, 0x61, 0xFD, 0xE8, 0x68, 0x56, 0x20,
+    0x57, 0xF5, 0x8E, 0x5F, 0xCF, 0x7E, 0x97, 0xF6,
+    0x49, 0x97, 0x0A, 0xFE, 0xD3, 0x60, 0x1A, 0x5B,
+    0x0C, 0x75, 0xDD, 0x8E, 0x31, 0x78, 0x29, 0xA6,
+    0xB1, 0x4D, 0xAA, 0xDF, 0x8A, 0xD1, 0xE6, 0x91,
+    0xE3, 0x32, 0x3F, 0xEC, 0x8A, 0x1F, 0x0E, 0x35,
+    0x07, 0x6E, 0x4B, 0x83, 0x3B, 0xE5, 0x67, 0x34,
+    0x1F, 0x0C, 0x81, 0xD8, 0xD5, 0x25, 0x68, 0xE5,
+    0x28, 0x1B, 0x5C, 0x81, 0x3E, 0xE3, 0x5C, 0xB4,
+    0xB6, 0xBD, 0x62, 0x6A, 0x70, 0x33, 0xC2, 0xC5,
+    0x75, 0x27, 0xF4, 0x30, 0xE1, 0x1D, 0xC1, 0x4C,
+    0xC5, 0x02, 0x12, 0x46, 0xAC, 0xEC, 0xF9, 0xE8,
+    0xE7, 0x58, 0x24, 0x11, 0xB1, 0xF3, 0xB7, 0x8C,
+    0x3C, 0xA4, 0x0A, 0x94, 0xA6, 0x7C, 0x68, 0x54,
+    0x5B, 0xB9, 0x4D, 0x57, 0x9C, 0xE7, 0x28, 0x09,
+    0x6B, 0x89, 0x26, 0x5D, 0xE7, 0x50, 0xA9, 0x95,
+    0x90, 0x91, 0x8E, 0x00, 0x59, 0xF8, 0x3A, 0x70,
+    0xAF, 0x48, 0x2E, 0xE8, 0xC4, 0x34, 0x8C, 0xF4,
+    0x5F, 0x7F, 0xCB, 0x07, 0xAA, 0xF0, 0xD9, 0xFB,
+    0x5C, 0x32, 0x90, 0x22, 0x1A, 0xD2, 0x1A, 0xCF,
+    0x92, 0x06, 0x02, 0xCF, 0x10, 0x18, 0x7B, 0x93,
+    0xCC, 0x07, 0x4A, 0x31, 0x25, 0x30, 0x23, 0x06,
+    0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01,
+    0x09, 0x15, 0x31, 0x16, 0x04, 0x14, 0xD1, 0xDE,
+    0x23, 0x16, 0x9F, 0x6E, 0xF4, 0x42, 0x21, 0x23,
+    0xE1, 0x11, 0xAA, 0xC8, 0x7C, 0x60, 0x4A, 0x78,
+    0x9D, 0x24, 0x30, 0x31, 0x30, 0x21, 0x30, 0x09,
+    0x06, 0x05, 0x2B, 0x0E, 0x03, 0x02, 0x1A, 0x05,
+    0x00, 0x04, 0x14, 0xD6, 0x4A, 0xBB, 0x75, 0xB1,
+    0xF9, 0x9E, 0xD3, 0x58, 0x6D, 0xD1, 0x74, 0x9F,
+    0x00, 0x8A, 0xF2, 0xC8, 0xAA, 0x52, 0x4D, 0x04,
+    0x08, 0x77, 0x46, 0xE7, 0xBA, 0x25, 0x4B, 0xDA,
+    0x41, 0x02, 0x02, 0x08, 0x00]
+};
+
+const WPA_EAP_CLIENT_LIST = [
+  {
+    ssid: 'WPA-EAP-TTLS',
+    keyManagement: 'WPA-EAP',
+    eap: 'TTLS',
+    identity: EAP_USERNAME,
+    password: EAP_PASSWORD,
+    serverCertificate: CLIENT_PKCS12_CERT.nickname,
+    phase2: 'MSCHAPV2'
+  }
+];
+
+/**
+ * Convert the given MozWifiNetwork object array to testAssociate chain.
+ *
+ * @param aNetworks
+ *        An array of MozWifiNetwork which we want to convert.
+ *
+ * @return A promise chain which "then"s testAssociate accordingly.
+ */
+function convertToTestAssociateChain(aNetworks) {
+  let chain = Promise.resolve();
+
+  aNetworks.forEach(function (aNetwork) {
+    network = new window.MozWifiNetwork(aNetwork);
+    chain = chain.then(() => gTestSuite.testAssociate(network));
+  });
+
+  return chain;
+}
+
+gTestSuite.doTestWithCertificate(
+    new Blob([new Uint8Array(CLIENT_PKCS12_CERT.content)]),
+    CLIENT_PKCS12_CERT.password,
+    CLIENT_PKCS12_CERT.nickname,
+    CLIENT_PKCS12_CERT.usage,
+    function() {
+      return gTestSuite.ensureWifiEnabled(true)
+        // Load required server files.
+        .then(() => gTestSuite.writeFile(SERVER_EAP_USER_CONF.path, SERVER_EAP_USER_CONF.content))
+        .then(() => gTestSuite.writeFile(CA_CERT.path, CA_CERT.content))
+        .then(() => gTestSuite.writeFile(SERVER_CERT.path, SERVER_CERT.content))
+        .then(() => gTestSuite.writeFile(SERVER_KEY.path, SERVER_KEY.content))
+        // Start AP.
+        .then(() => gTestSuite.startHostapds(WPA_EAP_AP_LIST))
+        // Scan test.
+        .then(() => gTestSuite.testWifiScanWithRetry(SCAN_RETRY_CNT, WPA_EAP_AP_LIST))
+        // Associate test.
+        .then(() => convertToTestAssociateChain(WPA_EAP_CLIENT_LIST))
+        // Tear down.
+        .then(gTestSuite.killAllHostapd)
+});
--- a/gfx/layers/ipc/CompositorParent.cpp
+++ b/gfx/layers/ipc/CompositorParent.cpp
@@ -327,25 +327,25 @@ void
 CompositorVsyncObserver::Composite(TimeStamp aVsyncTimestamp)
 {
   MOZ_ASSERT(CompositorParent::IsInCompositorThread());
   {
     MonitorAutoLock lock(mCurrentCompositeTaskMonitor);
     mCurrentCompositeTask = nullptr;
   }
 
+  DispatchTouchEvents(aVsyncTimestamp);
+
   if (mNeedsComposite && mCompositorParent) {
     mNeedsComposite = false;
     mCompositorParent->CompositeCallback(aVsyncTimestamp);
     mVsyncNotificationsSkipped = 0;
   } else if (mVsyncNotificationsSkipped++ > gfxPrefs::CompositorUnobserveCount()) {
     UnobserveVsync();
   }
-
-  DispatchTouchEvents(aVsyncTimestamp);
 }
 
 void
 CompositorVsyncObserver::OnForceComposeToTarget()
 {
   /**
    * bug 1138502 - There are cases such as during long-running window resizing events
    * where we receive many sync RecvFlushComposites. We also get vsync notifications which
--- a/testing/docker/b2g-build/Dockerfile
+++ b/testing/docker/b2g-build/Dockerfile
@@ -6,16 +6,17 @@ COPY releng.repo /etc/yum.repos.d/releng
 RUN yum install -y epel-release && \
   yum update -y && \
   yum makecache && \
   yum install -y \
   # From Building B2G docs
   GConf2-devel \
   alsa-lib-devel \
   autoconf213 \
+  bc \
   bison \
   bzip2 \
   ccache \
   # cmake: is disabled intentionally to work around: bug 1141417
   # cmake \
   curl \
   curl-devel \
   dbus-devel \
--- a/testing/docker/b2g-build/VERSION
+++ b/testing/docker/b2g-build/VERSION
@@ -1,1 +1,1 @@
-0.2.6
+0.2.7
--- a/testing/docker/builder/Dockerfile
+++ b/testing/docker/builder/Dockerfile
@@ -1,9 +1,9 @@
-FROM          quay.io/mozilla/b2g-build:0.2.6
+FROM          quay.io/mozilla/b2g-build:0.2.7
 MAINTAINER    Dustin J. Mitchell <dustin@mozilla.com>
 
 ENV PYTHONPATH /tools/tools/lib/python:$PYTHONPATH
 ENV TOOLTOOL_CACHE  /home/worker/tools/tooltool-cache
 
 ADD https://raw.githubusercontent.com/taskcluster/buildbot-step/58a16f7370a8b4de7a4458436a4a5fad9905f5d9/buildbot_step.js /home/worker/bin/buildbot_step
 
 # Add utilities and configuration
--- a/testing/docker/builder/VERSION
+++ b/testing/docker/builder/VERSION
@@ -1,1 +1,1 @@
-0.5.3
+0.5.4
--- a/testing/docker/tester-device/VERSION
+++ b/testing/docker/tester-device/VERSION
@@ -1,1 +1,1 @@
-0.0.2
+0.0.3
--- a/testing/docker/tester-device/bin/entrypoint
+++ b/testing/docker/tester-device/bin/entrypoint
@@ -1,18 +1,25 @@
 #! /bin/bash -e
 
 echo "Validating Task"
 python /home/worker/bin/validate_task.py
 
 echo "Retrieving device"
 res=`curl --request POST -H "Content-Type: application/json" -d "$DEVICE_CAPABILITIES" http://$CLOUD_HOST/device`
+error=`echo $res | jq .error`
+
+if [ "$error" != "null" ]; then
+    echo $error
+    exit -1
+fi
+
 status=`echo $res | jq .session`
 
-if [[ $status == 'null' ]]; then
+if [ "$status" == "null" ]; then
     echo "Session could not be created with a device."
     exit -1
 fi
 
 export SESSION_ID=`echo $res | jq .session.id`
 export SERIAL_ID=`echo $res | jq -r .proxies.adb.serialId`
 export ADB_HOST=`echo $res | jq .proxies.adb.forwardHost`
 export ADB_PORT=`echo $res | jq .proxies.adb.port`
--- a/testing/taskcluster/tasks/branches/base_job_flags.yml
+++ b/testing/taskcluster/tasks/branches/base_job_flags.yml
@@ -13,16 +13,20 @@ flags:
     - emulator-l
     - linux32_gecko  # b2g desktop linux 32 bit
     - linux64_gecko  # b2g desktop linux 64 bit
     - linux64-mulet  # Firefox desktop - b2g gecko linux 64 bit
     - macosx64_gecko # b2g desktop osx 64 bit
     - win32_gecko    # b2g desktop win 32 bit
     - flame-kk       # b2g flame kitkat
     - flame-kk-eng   # b2g flame eng build
+    - dolphin
+    - dolphin-eng
+    - dolphin-512
+    - dolphin-512-eng
 
   tests:
     - cppunit
     - crashtest
     - crashtest-ipc
     - gaia-build
     - gaia-build-unit
     - gaia-js-integration
--- a/testing/taskcluster/tasks/branches/try/job_flags.yml
+++ b/testing/taskcluster/tasks/branches/try/job_flags.yml
@@ -71,16 +71,40 @@ builds:
       opt:
         task: tasks/builds/b2g_flame_kk_opt.yml
   flame-kk-eng:
     platforms:
       - b2g
     types:
       opt:
         task: tasks/builds/b2g_flame_kk_eng.yml
+  dolphin:
+    platforms:
+      - b2g
+    types:
+      opt:
+        task: tasks/builds/b2g_dolphin_opt.yml
+  dolphin-eng:
+    platforms:
+      - b2g
+    types:
+      opt:
+        task: tasks/builds/b2g_dolphin_eng.yml
+  dolphin-512:
+    platforms:
+      - b2g
+    types:
+      opt:
+        task: tasks/builds/b2g_dolphin_512_opt.yml
+  dolphin-512-eng:
+    platforms:
+      - b2g
+    types:
+      opt:
+        task: tasks/builds/b2g_dolphin_512_eng.yml
 
 tests:
   cppunit:
     allowed_build_tasks:
       tasks/builds/b2g_emulator_ics_opt.yml:
         task: tasks/tests/b2g_emulator_cpp_unit.yml
       tasks/builds/b2g_emulator_ics_debug.yml:
         task: tasks/tests/b2g_emulator_cpp_unit.yml
--- a/testing/taskcluster/tasks/builds/b2g_dolphin_eng.yml
+++ b/testing/taskcluster/tasks/builds/b2g_dolphin_eng.yml
@@ -1,18 +1,23 @@
 $inherits:
-  from: 'tasks/builds/b2g_phone_base.yml'
+  from: 'tasks/builds/b2g_dolphin_base.yml'
 task:
   scopes:
     - 'docker-worker:cache:build-dolphin-eng'
   metadata:
-    name: B2G Dolphin Eng
+    name: '[TC] B2G Dolphin Eng'
+
+  extra:
+    treeherder:
+      symbol: Be
+      groupSymbol: Dolphin
+      groupName: Dolphin Device Image
+      machine:
+        platform: b2g-device-image
+
   payload:
     cache:
-      build-hamachi-eng: /home/worker/object-folder
+      build-dolphin-eng: /home/worker/object-folder
     env:
       TARGET: 'dolphin'
-      DEBUG: 0
       VARIANT: eng
-  extra:
-    locations:
-      img: 'private/build/dolphin.zip'
 
deleted file mode 100644
--- a/testing/taskcluster/tasks/builds/b2g_dolphin_user.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-$inherits:
-  from: 'tasks/builds/b2g_phone_base.yml'
-task:
-  scopes:
-    - 'docker-worker:cache:build-dolphin-user'
-  metadata:
-    name: B2G Dolphin User
-  payload:
-    cache:
-      build-hamachi-user: /home/worker/object-folder
-    env:
-      TARGET: 'dolphin'
-      DEBUG: 0
-  extra:
-    locations:
-      img: 'private/build/dolphin.zip'
-
--- a/testing/taskcluster/tasks/test.yml
+++ b/testing/taskcluster/tasks/test.yml
@@ -11,21 +11,24 @@ task:
   provisionerId: aws-provisioner
   schedulerId: task-graph-scheduler
 
   scopes:
     - 'docker-worker:image:{{#docker_image}}tester{{/docker_image}}'
     - 'queue:define-task:aws-provisioner/test-c4-2xlarge'
     - 'queue:create-task:aws-provisioner/test-c4-2xlarge'
     - 'docker-worker:cache:tc-vcs'
+    - 'docker-worker:cache:linux-cache'
 
   payload:
     image: '{{#docker_image}}tester{{/docker_image}}'
     maxRunTime: 3600
     cache:
+      # So pip installs are cached...
+      linux-cache: /home/worker/.cache
       tc-vcs: '/home/worker/.tc-vcs'
     env:
       GAIA_HEAD_REPOSITORY: '{{{gaia_head_repository}}}'
       GAIA_BASE_REPOSITORY: '{{{gaia_base_repository}}}'
       GAIA_REF: '{{{gaia_ref}}}'
       GAIA_REV: '{{{gaia_rev}}}'
       MOZHARNESS_REPOSITORY: '{{mozharness_repository}}'
       MOZHARNESS_REV: '{{mozharness_rev}}'
--- a/widget/gonk/GeckoTouchDispatcher.cpp
+++ b/widget/gonk/GeckoTouchDispatcher.cpp
@@ -127,17 +127,17 @@ GeckoTouchDispatcher::NotifyTouch(MultiT
     mHavePendingTouchMoves = true;
     if (mResamplingEnabled) {
       return;
     }
 
     layers::APZThreadUtils::RunOnControllerThread(NewRunnableMethod(
       this, &GeckoTouchDispatcher::DispatchTouchMoveEvents, TimeStamp::Now()));
   } else {
-    if (mResamplingEnabled) {
+    { // scope lock
       MutexAutoLock lock(mTouchQueueLock);
       mInflightNonMoveEvents++;
     }
     layers::APZThreadUtils::RunOnControllerThread(NewRunnableMethod(
       this, &GeckoTouchDispatcher::DispatchTouchNonMoveEvent, aTouch));
   }
 }
 
@@ -149,31 +149,32 @@ GeckoTouchDispatcher::DispatchTouchNonMo
   if (mResamplingEnabled) {
     // Flush pending touch move events, if there are any
     // (DispatchTouchMoveEvents will check the mHavePendingTouchMoves flag and
     // bail out if there's nothing to be done).
     NotifyVsync(TimeStamp::Now());
   }
   DispatchTouchEvent(aInput);
 
-  if (mResamplingEnabled) {
+  { // scope lock
     MutexAutoLock lock(mTouchQueueLock);
     mInflightNonMoveEvents--;
     MOZ_ASSERT(mInflightNonMoveEvents >= 0);
   }
 }
 
 void
 GeckoTouchDispatcher::DispatchTouchMoveEvents(TimeStamp aVsyncTime)
 {
   MultiTouchInput touchMove;
 
   {
     MutexAutoLock lock(mTouchQueueLock);
     if (!mHavePendingTouchMoves) {
+      MOZ_ASSERT(mTouchMoveEvents.empty());
       return;
     }
     mHavePendingTouchMoves = false;
 
     if (mResamplingEnabled) {
       int touchCount = mTouchMoveEvents.size();
       TimeDuration vsyncTouchDiff = aVsyncTime - mTouchMoveEvents.back().mTimeStamp;
       // The delay threshold is a positive pref, but we're testing to see if the
--- a/widget/gonk/libdisplay/FramebufferSurface.cpp
+++ b/widget/gonk/libdisplay/FramebufferSurface.cpp
@@ -124,17 +124,21 @@ status_t FramebufferSurface::nextBuffer(
     mCurrentBufferSlot = item.mBuf;
     mCurrentBuffer = mSlots[mCurrentBufferSlot].mGraphicBuffer;
     outFence = item.mFence;
     outBuffer = mCurrentBuffer;
     return NO_ERROR;
 }
 
 // Overrides ConsumerBase::onFrameAvailable(), does not call base class impl.
+#if ANDROID_VERSION >= 22
+void FramebufferSurface::onFrameAvailable(const ::android::BufferItem &item) {
+#else
 void FramebufferSurface::onFrameAvailable() {
+#endif
     sp<GraphicBuffer> buf;
     sp<Fence> acquireFence;
     status_t err = nextBuffer(buf, acquireFence);
     if (err != NO_ERROR) {
         ALOGE("error latching nnext FramebufferSurface buffer: %s (%d)",
                 strerror(-err), err);
         return;
     }
--- a/widget/gonk/libdisplay/FramebufferSurface.h
+++ b/widget/gonk/libdisplay/FramebufferSurface.h
@@ -58,17 +58,21 @@ public:
     status_t setReleaseFenceFd(int fenceFd);
 
     virtual int GetPrevFBAcquireFd();
 
     buffer_handle_t lastHandle;
 private:
     virtual ~FramebufferSurface() { }; // this class cannot be overloaded
 
+#if ANDROID_VERSION >= 22
+    virtual void onFrameAvailable(const ::android::BufferItem &item);
+#else
     virtual void onFrameAvailable();
+#endif
     virtual void freeBufferLocked(int slotIndex);
 
     // nextBuffer waits for and then latches the next buffer from the
     // BufferQueue and releases the previously latched buffer to the
     // BufferQueue.  The new buffer is returned in the 'buffer' argument.
     status_t nextBuffer(sp<GraphicBuffer>& outBuffer, sp<Fence>& outFence);
 
     // mDisplayType must match one of the HWC display types
--- a/widget/gonk/nativewindow/GonkBufferQueueLL/GonkBufferQueueLL.cpp
+++ b/widget/gonk/nativewindow/GonkBufferQueueLL/GonkBufferQueueLL.cpp
@@ -27,22 +27,38 @@
 namespace android {
 
 GonkBufferQueue::ProxyConsumerListener::ProxyConsumerListener(
         const wp<ConsumerListener>& consumerListener):
         mConsumerListener(consumerListener) {}
 
 GonkBufferQueue::ProxyConsumerListener::~ProxyConsumerListener() {}
 
+#if ANDROID_VERSION == 21
 void GonkBufferQueue::ProxyConsumerListener::onFrameAvailable() {
     sp<ConsumerListener> listener(mConsumerListener.promote());
     if (listener != NULL) {
         listener->onFrameAvailable();
     }
 }
+#else
+void GonkBufferQueue::ProxyConsumerListener::onFrameAvailable(const ::android::BufferItem& item) {
+    sp<ConsumerListener> listener(mConsumerListener.promote());
+    if (listener != NULL) {
+        listener->onFrameAvailable(item);
+    }
+}
+
+void GonkBufferQueue::ProxyConsumerListener::onFrameReplaced(const ::android::BufferItem& item) {
+    sp<ConsumerListener> listener(mConsumerListener.promote());
+    if (listener != NULL) {
+        listener->onFrameReplaced(item);
+    }
+}
+#endif
 
 void GonkBufferQueue::ProxyConsumerListener::onBuffersReleased() {
     sp<ConsumerListener> listener(mConsumerListener.promote());
     if (listener != NULL) {
         listener->onBuffersReleased();
     }
 }
 
--- a/widget/gonk/nativewindow/GonkBufferQueueLL/GonkBufferQueueLL.h
+++ b/widget/gonk/nativewindow/GonkBufferQueueLL/GonkBufferQueueLL.h
@@ -58,17 +58,22 @@ public:
     // GonkBufferQueue object and the consumer object.  The reason this can't be a weak
     // reference in the GonkBufferQueue class is because we're planning to expose the
     // consumer side of a GonkBufferQueue as a binder interface, which doesn't support
     // weak references.
     class ProxyConsumerListener : public BnConsumerListener {
     public:
         ProxyConsumerListener(const wp<ConsumerListener>& consumerListener);
         virtual ~ProxyConsumerListener();
+#if ANDROID_VERSION == 21
         virtual void onFrameAvailable();
+#else
+        virtual void onFrameAvailable(const ::android::BufferItem& item);
+        virtual void onFrameReplaced(const ::android::BufferItem& item);
+#endif
         virtual void onBuffersReleased();
         virtual void onSidebandStreamChanged();
     private:
         // mConsumerListener is a weak reference to the IConsumerListener.  This is
         // the raison d'etre of ProxyConsumerListener.
         wp<ConsumerListener> mConsumerListener;
     };
 
--- a/widget/gonk/nativewindow/GonkBufferQueueLL/GonkBufferQueueProducer.cpp
+++ b/widget/gonk/nativewindow/GonkBufferQueueLL/GonkBufferQueueProducer.cpp
@@ -549,16 +549,17 @@ status_t GonkBufferQueueProducer::queueB
         case NATIVE_WINDOW_SCALING_MODE_SCALE_CROP:
         case NATIVE_WINDOW_SCALING_MODE_NO_SCALE_CROP:
             break;
         default:
             ALOGE("queueBuffer: unknown scaling mode %d", scalingMode);
             return BAD_VALUE;
     }
 
+    GonkBufferItem item;
     sp<IConsumerListener> listener;
     { // Autolock scope
         Mutex::Autolock lock(mCore->mMutex);
 
         if (mCore->mIsAbandoned) {
             ALOGE("queueBuffer: GonkBufferQueue has been abandoned");
             return NO_INIT;
         }
@@ -605,17 +606,16 @@ status_t GonkBufferQueueProducer::queueB
             return BAD_VALUE;
         }
 
         mSlots[slot].mFence = fence;
         mSlots[slot].mBufferState = GonkBufferSlot::QUEUED;
         ++mCore->mFrameCounter;
         mSlots[slot].mFrameNumber = mCore->mFrameCounter;
 
-        GonkBufferItem item;
         item.mAcquireCalled = mSlots[slot].mAcquireCalled;
         item.mGraphicBuffer = mSlots[slot].mGraphicBuffer;
         item.mCrop = crop;
         item.mTransform = transform & ~NATIVE_WINDOW_TRANSFORM_INVERSE_DISPLAY;
         item.mTransformToDisplayInverse =
                 bool(transform & NATIVE_WINDOW_TRANSFORM_INVERSE_DISPLAY);
         item.mScalingMode = scalingMode;
         item.mTimestamp = timestamp;
@@ -654,21 +654,28 @@ status_t GonkBufferQueueProducer::queueB
             }
         }
 
         mCore->mBufferHasBeenQueued = true;
         mCore->mDequeueCondition.broadcast();
 
         output->inflate(mCore->mDefaultWidth, mCore->mDefaultHeight,
                 mCore->mTransformHint, mCore->mQueue.size());
+
+        item.mGraphicBuffer.clear();
+        item.mSlot = GonkBufferItem::INVALID_BUFFER_SLOT;
     } // Autolock scope
 
     // Call back without lock held
     if (listener != NULL) {
+#if ANDROID_VERSION == 21
         listener->onFrameAvailable();
+#else
+        listener->onFrameAvailable(reinterpret_cast<::android::BufferItem&>(item));
+#endif
     }
 
     return NO_ERROR;
 }
 
 void GonkBufferQueueProducer::cancelBuffer(int slot, const sp<Fence>& fence) {
     ATRACE_CALL();
     ALOGV("cancelBuffer: slot %d", slot);
--- a/widget/gonk/nativewindow/GonkConsumerBaseLL.cpp
+++ b/widget/gonk/nativewindow/GonkConsumerBaseLL.cpp
@@ -80,17 +80,21 @@ void GonkConsumerBase::onLastStrongRef(c
 
 void GonkConsumerBase::freeBufferLocked(int slotIndex) {
     ALOGV("freeBufferLocked: slotIndex=%d", slotIndex);
     mSlots[slotIndex].mGraphicBuffer = 0;
     mSlots[slotIndex].mFence = Fence::NO_FENCE;
     mSlots[slotIndex].mFrameNumber = 0;
 }
 
+#if ANDROID_VERSION == 21
 void GonkConsumerBase::onFrameAvailable() {
+#else
+void GonkConsumerBase::onFrameAvailable(const ::android::BufferItem& item) {
+#endif
     ALOGV("onFrameAvailable");
 
     sp<FrameAvailableListener> listener;
     { // scope for the lock
         Mutex::Autolock lock(mMutex);
         listener = mFrameAvailableListener.promote();
     }
 
--- a/widget/gonk/nativewindow/GonkConsumerBaseLL.h
+++ b/widget/gonk/nativewindow/GonkConsumerBaseLL.h
@@ -102,17 +102,22 @@ protected:
 
     // Implementation of the IConsumerListener interface.  These
     // calls are used to notify the GonkConsumerBase of asynchronous events in the
     // GonkBufferQueue.  The onFrameAvailable and onBuffersReleased methods should
     // not need to be overridden by derived classes, but if they are overridden
     // the GonkConsumerBase implementation must be called from the derived class.
     // The GonkConsumerBase version of onSidebandStreamChanged does nothing and can
     // be overriden by derived classes if they want the notification.
+#if ANDROID_VERSION == 21
     virtual void onFrameAvailable();
+#else
+    virtual void onFrameAvailable(const ::android::BufferItem& item);
+    virtual void onFrameReplaced(const ::android::BufferItem& item) {};
+#endif
     virtual void onBuffersReleased();
     virtual void onSidebandStreamChanged();
 
     // freeBufferLocked frees up the given buffer slot.  If the slot has been
     // initialized this will release the reference to the GraphicBuffer in that
     // slot.  Otherwise it has no effect.
     //
     // Derived classes should override this method to clean up any state they
--- a/widget/gonk/nativewindow/GonkNativeWindowLL.cpp
+++ b/widget/gonk/nativewindow/GonkNativeWindowLL.cpp
@@ -183,17 +183,22 @@ GonkNativeWindow::getTextureClientFromBu
 
 void GonkNativeWindow::setNewFrameCallback(
         GonkNativeWindowNewFrameCallback* callback) {
     ALOGD("setNewFrameCallback");
     Mutex::Autolock lock(mMutex);
     mNewFrameCallback = callback;
 }
 
+#if ANDROID_VERSION == 21
 void GonkNativeWindow::onFrameAvailable() {
     GonkConsumerBase::onFrameAvailable();
+#else
+void GonkNativeWindow::onFrameAvailable(const ::android::BufferItem &item) {
+    GonkConsumerBase::onFrameAvailable(item);
+#endif
 
     if (mNewFrameCallback) {
         mNewFrameCallback->OnNewFrame();
     }
 }
 
 } // namespace android
--- a/widget/gonk/nativewindow/GonkNativeWindowLL.h
+++ b/widget/gonk/nativewindow/GonkNativeWindowLL.h
@@ -113,17 +113,21 @@ class GonkNativeWindow: public GonkConsu
 
     mozilla::TemporaryRef<TextureClient> getTextureClientFromBuffer(ANativeWindowBuffer* buffer);
 
     void setNewFrameCallback(GonkNativeWindowNewFrameCallback* callback);
 
     static void RecycleCallback(TextureClient* client, void* closure);
 
 protected:
+#if ANDROID_VERSION == 21
     virtual void onFrameAvailable();
+#else
+    virtual void onFrameAvailable(const ::android::BufferItem &item);
+#endif
 
 private:
     GonkNativeWindowNewFrameCallback* mNewFrameCallback;
 };
 
 } // namespace android
 
 #endif // NATIVEWINDOW_GONKNATIVEWINDOW_LL_H