diff --git a/.gitignore b/.gitignore
index 0ca984a..ecf4df3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,7 +1,7 @@
 SOURCES/Python-2.7.8.tgz
 SOURCES/devtoolset-2-binutils-2.23.52.0.1-10.el5.src.rpm
 SOURCES/gcc48-4.8.2-16.el5.src.rpm
-SOURCES/l10n-lightning-45.8.0.tar.xz
-SOURCES/thunderbird-45.8.0.source.tar.xz
-SOURCES/thunderbird-langpacks-45.8.0-20170307.tar.xz
+SOURCES/l10n-lightning-52.1.0.tar.xz
+SOURCES/thunderbird-52.1.0.source.tar.xz
+SOURCES/thunderbird-langpacks-52.1.0-20170502.tar.xz
 SOURCES/yasm-1.2.0-3.el5.src.rpm
diff --git a/.thunderbird.metadata b/.thunderbird.metadata
index 6047351..b6debf2 100644
--- a/.thunderbird.metadata
+++ b/.thunderbird.metadata
@@ -1,7 +1,7 @@
 511960dd78451a06c9df76509635aeec05b2051a SOURCES/Python-2.7.8.tgz
 467bdb846d67c01aed9e521fe0ef280065a50c3c SOURCES/devtoolset-2-binutils-2.23.52.0.1-10.el5.src.rpm
 e5ba84786af5d0e0e23b1a9112c76821ef23306c SOURCES/gcc48-4.8.2-16.el5.src.rpm
-50c59f97f5377a1c1fe2db59d93aeeb5179c4951 SOURCES/l10n-lightning-45.8.0.tar.xz
-36fc106885d612966ec3be047f4e7d3fa06dc04a SOURCES/thunderbird-45.8.0.source.tar.xz
-bff28b5995922ec4bc83ee8152de465377969efd SOURCES/thunderbird-langpacks-45.8.0-20170307.tar.xz
+f1bb15ef9bbdfb1a668417b359e392aa3e54f08a SOURCES/l10n-lightning-52.1.0.tar.xz
+09704d01e0fd78af688883b8eb6745feff29202b SOURCES/thunderbird-52.1.0.source.tar.xz
+3d3dbf1a0020d1278544653c332666a0a5d63ca1 SOURCES/thunderbird-langpacks-52.1.0-20170502.tar.xz
 77fd30f7ebc12a629a31c1e252cec06af55a71fe SOURCES/yasm-1.2.0-3.el5.src.rpm
diff --git a/SOURCES/aarch64-fix-skia.patch b/SOURCES/aarch64-fix-skia.patch
deleted file mode 100644
index 115b1d8..0000000
--- a/SOURCES/aarch64-fix-skia.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-Based on https://github.com/google/skia/commit/b79ff56de23fef680ae7187040f2d6a9516b553d
-
-Index: mozilla-release/gfx/skia/skia/src/core/SkUtilsArm.h
-===================================================================
---- mozilla-release.orig/gfx/skia/skia/src/core/SkUtilsArm.h
-+++ mozilla-release/gfx/skia/skia/src/core/SkUtilsArm.h
-@@ -21,9 +21,9 @@
- #define SK_ARM_NEON_MODE_ALWAYS   1
- #define SK_ARM_NEON_MODE_DYNAMIC  2
- 
--#if defined(SK_CPU_ARM32) && defined(__ARM_HAVE_OPTIONAL_NEON_SUPPORT)
-+#if defined(__ARM_HAVE_OPTIONAL_NEON_SUPPORT)
- #  define SK_ARM_NEON_MODE  SK_ARM_NEON_MODE_DYNAMIC
--#elif defined(SK_CPU_ARM32) && defined(__ARM_HAVE_NEON) || defined(SK_CPU_ARM64)
-+#elif defined(__ARM_HAVE_NEON)
- #  define SK_ARM_NEON_MODE  SK_ARM_NEON_MODE_ALWAYS
- #else
- #  define SK_ARM_NEON_MODE  SK_ARM_NEON_MODE_NONE
diff --git a/SOURCES/build-el5-build-id.patch b/SOURCES/build-el5-build-id.patch
deleted file mode 100644
index 17b19cf..0000000
--- a/SOURCES/build-el5-build-id.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-diff -up mozilla-esr31/tools/profiler/LulElf.cpp.python3 mozilla-esr31/tools/profiler/LulElf.cpp
---- mozilla-esr31/tools/profiler/lul/LulElf.cpp.python3	2014-08-25 15:17:29.000000000 +0200
-+++ mozilla-esr31/tools/profiler/lul/LulElf.cpp	2014-09-05 15:26:14.114681217 +0200
-@@ -69,6 +69,11 @@
- #include "LulElfInt.h"
- #include "LulMainInt.h"
- 
-+#ifndef NT_GNU_BUILD_ID
-+#define NT_GNU_BUILD_ID 3
-+#endif
-+
-+
- 
- #if defined(LUL_PLAT_arm_android) && !defined(SHT_ARM_EXIDX)
- // bionic and older glibsc don't define it
diff --git a/SOURCES/build-el5-fontconfig.patch b/SOURCES/build-el5-fontconfig.patch
deleted file mode 100644
index 3e25c44..0000000
--- a/SOURCES/build-el5-fontconfig.patch
+++ /dev/null
@@ -1,100 +0,0 @@
-diff -up mozilla-aurora/gfx/thebes/gfxFcPlatformFontList.cpp.build-el5-fontconfig mozilla-aurora/gfx/thebes/gfxFcPlatformFontList.cpp
---- mozilla-aurora/gfx/thebes/gfxFcPlatformFontList.cpp.build-el5-fontconfig	2015-12-16 16:47:28.000000000 +0100
-+++ mozilla-aurora/gfx/thebes/gfxFcPlatformFontList.cpp	2016-01-19 14:20:43.676153725 +0100
-@@ -367,7 +367,48 @@ gfxFontconfigFontEntry::gfxFontconfigFon
-     // "blanks", effectively assuming that, if the font has a blank glyph,
-     // then the author intends any associated character to be rendered
-     // blank.
--    mFontPattern = FcFreeTypeQueryFace(mFTFace, ToFcChar8Ptr(""), 0, nullptr);
-+    // BACKPORT: FcFreeTypeQueryFace is not available in RHEL5's fontconfig
-+    // mFontPattern = FcFreeTypeQueryFace(mFTFace, ToFcChar8Ptr(""), 0, nullptr);
-+
-+
-+    // FC_CHARSET is vital to determine which characters are supported.
-+    nsAutoRef<FcCharSet> charset(FcFreeTypeCharSet(mFTFace, nullptr));
-+    // If there are no characters then assume we don't know how to read
-+    // this font.
-+    if (!charset || FcCharSetCount(charset) == 0)
-+      return;
-+
-+    mFontPattern = FcPatternCreate();
-+    FcPatternAddCharSet(mFontPattern, FC_CHARSET, charset);
-+
-+    // FC_PIXEL_SIZE can be important for font selection of fixed-size
-+    // fonts.
-+    if (!(mFTFace->face_flags & FT_FACE_FLAG_SCALABLE)) {
-+      for (FT_Int i = 0; i < mFTFace->num_fixed_sizes; ++i) {
-+#if HAVE_FT_BITMAP_SIZE_Y_PPEM
-+        double size = FLOAT_FROM_26_6(mFTFace->available_sizes[i].y_ppem);
-+#else
-+        double size = mFTFace->available_sizes[i].height;
-+#endif
-+        FcPatternAddDouble (mFontPattern, FC_PIXEL_SIZE, size);
-+      }
-+
-+      // Not sure whether this is important;
-+      // imitating FcFreeTypeQueryFace:
-+      FcPatternAddBool (mFontPattern, FC_ANTIALIAS, FcFalse);
-+    }
-+
-+    // Setting up the FC_LANGSET property is very difficult with the APIs
-+    // available prior to FcFreeTypeQueryFace.  Having no FC_LANGSET
-+    // property seems better than having a property with an empty LangSet.
-+    // With no FC_LANGSET property, fontconfig sort functions will
-+    // consider this face to have the same priority as (otherwise equal)
-+    // faces that have support for the primary requested language, but
-+    // will not consider any language to have been satisfied (and so will
-+    // continue to look for a face with language support in fallback
-+    // fonts).
-+
-+    // END BACKPORT
-     // given that we have a FT_Face, not really sure this is possible...
-     if (!mFontPattern) {
-         mFontPattern = FcPatternCreate();
-@@ -1015,9 +1056,12 @@ gfxFcPlatformFontList::gfxFcPlatformFont
-     , mAlwaysUseFontconfigGenerics(true)
- {
-     // if the rescan interval is set, start the timer
--    int rescanInterval = FcConfigGetRescanInterval(nullptr);
-+    // BACKPORT - do not implement rescan interval
-+    //int rescanInterval = FcConfigGetRescanInterval(nullptr);
-+    int rescanInterval = 0;
-     if (rescanInterval) {
--        mLastConfig = FcConfigGetCurrent();
-+        nsAutoRef<FcConfig> fc_conf(FcConfigGetCurrent());
-+        mLastConfig = fc_conf.out();
-         mCheckFontUpdatesTimer = do_CreateInstance("@mozilla.org/timer;1");
-         if (mCheckFontUpdatesTimer) {
-             mCheckFontUpdatesTimer->
-@@ -1131,7 +1175,8 @@ gfxFcPlatformFontList::AddFontSetFamilie
- nsresult
- gfxFcPlatformFontList::InitFontList()
- {
--    mLastConfig = FcConfigGetCurrent();
-+    nsAutoRef<FcConfig> fc_conf(FcConfigGetCurrent());
-+    mLastConfig = fc_conf.out();
- 
-     // reset font lists
-     gfxPlatformFontList::InitFontList();
-diff -up mozilla-aurora/gfx/thebes/gfxFcPlatformFontList.h.build-el5-fontconfig mozilla-aurora/gfx/thebes/gfxFcPlatformFontList.h
---- mozilla-aurora/gfx/thebes/gfxFcPlatformFontList.h.build-el5-fontconfig	2016-01-19 11:45:08.927745469 +0100
-+++ mozilla-aurora/gfx/thebes/gfxFcPlatformFontList.h	2016-01-19 13:49:58.296124911 +0100
-@@ -33,7 +33,8 @@ class nsAutoRefTraits<FcConfig> : public
- {
- public:
-     static void Release(FcConfig *ptr) { FcConfigDestroy(ptr); }
--    static void AddRef(FcConfig *ptr) { FcConfigReference(ptr); }
-+    // AddRef is not supported in older font-config
-+    // static void AddRef(FcConfig *ptr) { FcConfigReference(ptr); }
- };
- 
- // Helper classes used for clearning out user font data when cairo font
-@@ -290,7 +291,7 @@ protected:
-     nsRefPtrHashtable<nsCStringHashKey, gfxFontFamily> mFcSubstituteCache;
- 
-     nsCOMPtr<nsITimer> mCheckFontUpdatesTimer;
--    nsCountedRef<FcConfig> mLastConfig;
-+    nsAutoRef<FcConfig> mLastConfig;
- 
-     // By default, font prefs under Linux are set to simply lookup
-     // via fontconfig the appropriate font for serif/sans-serif/monospace.
diff --git a/SOURCES/build-el5-gtk2-2.10.patch b/SOURCES/build-el5-gtk2-2.10.patch
deleted file mode 100644
index 9b1080b..0000000
--- a/SOURCES/build-el5-gtk2-2.10.patch
+++ /dev/null
@@ -1,2724 +0,0 @@
-diff -up mozilla-aurora/config/system-headers.build-gtk2 mozilla-aurora/config/system-headers
---- mozilla-aurora/config/system-headers.build-gtk2	2015-12-16 16:47:44.000000000 +0100
-+++ mozilla-aurora/config/system-headers	2016-01-15 17:38:34.974272205 +0100
-@@ -511,7 +511,9 @@ gssapi/gssapi.h
- gssapi.h
- gtk/gtk.h
- gtk/gtkx.h
--gtk/gtkunixprint.h
-+gtk/gtkprinter.h
-+gtk/gtkprintjob.h
-+gtk/gtkprintunixdialog.h
- #ifdef ANDROID
- gui/BufferQueue.h
- gui/ConsumerBase.h
-diff -up mozilla-aurora/configure.in.build-gtk2 mozilla-aurora/configure.in
---- mozilla-aurora/configure.in.build-gtk2	2016-01-15 17:38:34.972272207 +0100
-+++ mozilla-aurora/configure.in	2016-01-15 17:38:34.975272203 +0100
-@@ -58,15 +58,15 @@ NSS_VERSION=3
- 
- dnl Set the minimum version of toolkit libs used by mozilla
- dnl ========================================================
--GLIB_VERSION=2.22
-+GLIB_VERSION=2.12
- # 2_26 is the earliest version we can set GLIB_VERSION_MIN_REQUIRED.
- # The macro won't be used when compiling with earlier versions anyway.
- GLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_26
- GIO_VERSION=2.22
- PERL_VERSION=5.006
- CAIRO_VERSION=1.10
--PANGO_VERSION=1.22.0
--GTK2_VERSION=2.18.0
-+PANGO_VERSION=1.14
-+GTK2_VERSION=2.10
- GTK3_VERSION=3.4.0
- GDK_VERSION_MIN_REQUIRED=GDK_VERSION_3_4
- WINDRES_VERSION=2.14.90
-@@ -4278,7 +4278,7 @@ if test "$COMPILE_ENVIRONMENT"; then
-     AC_DEFINE_UNQUOTED(GLIB_VERSION_MIN_REQUIRED,$GLIB_VERSION_MIN_REQUIRED)
-     AC_DEFINE_UNQUOTED(GLIB_VERSION_MAX_ALLOWED,$GLIB_VERSION_MAX_ALLOWED)
- 
--    PKG_CHECK_MODULES(MOZ_GTK2, gtk+-2.0 >= $GTK2_VERSION gtk+-unix-print-2.0 glib-2.0 >= $GLIB_VERSION gobject-2.0 $GDK_PACKAGES)
-+    PKG_CHECK_MODULES(MOZ_GTK2, gtk+-2.0 >= $GTK2_VERSION gtk+-unix-print-2.0 glib-2.0 >= $GLIB_VERSION gobject-2.0 $GDK_PACKAGES freetype2 fontconfig)
-     MOZ_GTK2_CFLAGS="-I${_topsrcdir}/widget/gtk/compat $MOZ_GTK2_CFLAGS"
-   fi
-   if test "$MOZ_ENABLE_GTK2"; then
-diff -up mozilla-aurora/security/sandbox/linux/Sandbox.cpp.build-gtk2 mozilla-aurora/security/sandbox/linux/Sandbox.cpp
---- mozilla-aurora/security/sandbox/linux/Sandbox.cpp.build-gtk2	2015-12-16 16:47:02.000000000 +0100
-+++ mozilla-aurora/security/sandbox/linux/Sandbox.cpp	2016-01-15 17:38:34.976272202 +0100
-@@ -668,12 +668,13 @@ SetMediaPluginSandbox(const char *aFileP
-   MOZ_ASSERT(!gMediaPluginFile.mPath);
-   if (aFilePath) {
-     gMediaPluginFile.mPath = strdup(aFilePath);
--    gMediaPluginFile.mFd = open(aFilePath, O_RDONLY | O_CLOEXEC);
-+    gMediaPluginFile.mFd = open(aFilePath, O_RDONLY);
-     if (gMediaPluginFile.mFd == -1) {
-       SANDBOX_LOG_ERROR("failed to open plugin file %s: %s",
-                         aFilePath, strerror(errno));
-       MOZ_CRASH();
-     }
-+    fcntl(gMediaPluginFile.mFd, F_SETFD, fcntl(gMediaPluginFile.mFd, F_GETFD, 0) | FD_CLOEXEC);
-   } else {
-     gMediaPluginFile.mFd = -1;
-   }
-diff -up mozilla-aurora/widget/gtk/compat/gdk/gdkkeysyms.h.build-gtk2 mozilla-aurora/widget/gtk/compat/gdk/gdkkeysyms.h
---- mozilla-aurora/widget/gtk/compat/gdk/gdkkeysyms.h.build-gtk2	2015-12-16 16:47:23.000000000 +0100
-+++ mozilla-aurora/widget/gtk/compat/gdk/gdkkeysyms.h	2016-01-15 17:38:34.976272202 +0100
-@@ -6,6 +6,7 @@
- #define GDKKEYSYMS_WRAPPER_H
- 
- #include_next <gdk/gdkkeysyms.h>
-+#include "gdkkeysyms-compat.h"
- 
- #ifndef GDK_ISO_Level5_Shift
- #define GDK_ISO_Level5_Shift    0xFE11
-diff -up mozilla-aurora/widget/gtk/compat/gtk/gtkcolorseldialog.h.build-gtk2 mozilla-aurora/widget/gtk/compat/gtk/gtkcolorseldialog.h
---- mozilla-aurora/widget/gtk/compat/gtk/gtkcolorseldialog.h.build-gtk2	2016-01-15 17:38:34.976272202 +0100
-+++ mozilla-aurora/widget/gtk/compat/gtk/gtkcolorseldialog.h	2016-01-15 17:38:34.976272202 +0100
-@@ -0,0 +1,20 @@
-+/* This Source Code Form is subject to the terms of the Mozilla Public
-+ * License, v. 2.0. If a copy of the MPL was not distributed with this
-+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-+
-+#ifndef GTKCOLOR_SELECTION_DIALOG_WRAPPER_H
-+#define GTKCOLOR_SELECTION_DIALOG_WRAPPER_H
-+
-+#define gtk_color_selection_dialog_get_color_selection gtk_color_selection_dialog_get_color_selection_
-+#include_next <gtk/gtkcolorseldialog.h>
-+#undef gtk_color_selection_dialog_get_color_selection
-+
-+static inline GtkWidget*
-+gtk_color_selection_dialog_get_color_selection (GtkColorSelectionDialog *colorsel)
-+{
-+  g_return_val_if_fail (GTK_IS_COLOR_SELECTION_DIALOG (colorsel), NULL);
-+
-+  return colorsel->colorsel;
-+}
-+
-+#endif /* GTKCOLOR_SELECTION_DIALOG_WRAPPER_H */
-diff -up mozilla-aurora/widget/gtk/compat/gtk/gtkdialog.h.build-gtk2 mozilla-aurora/widget/gtk/compat/gtk/gtkdialog.h
---- mozilla-aurora/widget/gtk/compat/gtk/gtkdialog.h.build-gtk2	2016-01-15 17:38:34.976272202 +0100
-+++ mozilla-aurora/widget/gtk/compat/gtk/gtkdialog.h	2016-01-15 17:38:34.976272202 +0100
-@@ -0,0 +1,20 @@
-+/* This Source Code Form is subject to the terms of the Mozilla Public
-+ * License, v. 2.0. If a copy of the MPL was not distributed with this
-+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-+
-+#ifndef GTKDIALOG_WRAPPER_H
-+#define GTKDIALOG_WRAPPER_H
-+
-+#define gtk_dialog_get_content_area gtk_dialog_get_content_area_
-+#include_next <gtk/gtkdialog.h>
-+#undef gtk_dialog_get_content_area
-+
-+static inline GtkWidget *
-+gtk_dialog_get_content_area (GtkDialog *dialog)
-+{
-+  g_return_val_if_fail (GTK_IS_DIALOG (dialog), NULL);
-+
-+  return dialog->vbox;
-+}
-+
-+#endif /* GTKDIALOG_WRAPPER_H */
-diff -up mozilla-aurora/widget/gtk/compat/gtk/gtkplug.h.build-gtk2 mozilla-aurora/widget/gtk/compat/gtk/gtkplug.h
---- mozilla-aurora/widget/gtk/compat/gtk/gtkplug.h.build-gtk2	2016-01-15 17:38:34.976272202 +0100
-+++ mozilla-aurora/widget/gtk/compat/gtk/gtkplug.h	2016-01-15 17:38:34.976272202 +0100
-@@ -0,0 +1,20 @@
-+/* This Source Code Form is subject to the terms of the Mozilla Public
-+ * License, v. 2.0. If a copy of the MPL was not distributed with this
-+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-+
-+#ifndef GTKPLUG_WRAPPER_H
-+#define GTKPLUG_WRAPPER_H
-+
-+#define gtk_plug_get_socket_window gtk_plug_get_socket_window_
-+#include_next <gtk/gtkplug.h>
-+#undef gtk_plug_get_socket_window
-+
-+static inline GdkWindow *
-+gtk_plug_get_socket_window (GtkPlug *plug)
-+{
-+  g_return_val_if_fail (GTK_IS_PLUG (plug), NULL);
-+
-+  return plug->socket_window;
-+}
-+
-+#endif /* GTKPLUG_WRAPPER_H */
-diff -up mozilla-aurora/widget/gtk/compat/gtk/gtkselection.h.build-gtk2 mozilla-aurora/widget/gtk/compat/gtk/gtkselection.h
---- mozilla-aurora/widget/gtk/compat/gtk/gtkselection.h.build-gtk2	2016-01-15 17:38:34.977272201 +0100
-+++ mozilla-aurora/widget/gtk/compat/gtk/gtkselection.h	2016-01-15 17:38:34.976272202 +0100
-@@ -0,0 +1,60 @@
-+/* This Source Code Form is subject to the terms of the Mozilla Public
-+ * License, v. 2.0. If a copy of the MPL was not distributed with this
-+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-+
-+#ifndef GTKSELECTION_WRAPPER_H
-+#define GTKSELECTION_WRAPPER_H
-+
-+#define gtk_selection_data_get_length gtk_selection_data_get_length_
-+#define gtk_selection_data_get_data_type gtk_selection_data_get_data_type_
-+#define gtk_selection_data_get_selection gtk_selection_data_get_selection_
-+#define gtk_selection_data_get_target gtk_selection_data_get_target_
-+#define gtk_selection_data_get_data gtk_selection_data_get_data_
-+#include_next <gtk/gtkselection.h>
-+#undef gtk_selection_data_get_length
-+#undef gtk_selection_data_get_data_type
-+#undef gtk_selection_data_get_selection
-+#undef gtk_selection_data_get_target
-+#undef gtk_selection_data_get_data
-+
-+static inline GdkAtom
-+gtk_selection_data_get_data_type (GtkSelectionData *selection_data)
-+{
-+  g_return_val_if_fail (selection_data != NULL, 0);
-+ 
-+  return selection_data->type;
-+}
-+
-+static inline gint
-+gtk_selection_data_get_length (GtkSelectionData *selection_data)
-+{
-+  g_return_val_if_fail (selection_data != NULL, -1);
-+
-+  return selection_data->length;
-+}
-+
-+static inline GdkAtom
-+gtk_selection_data_get_selection (GtkSelectionData *selection_data)
-+{
-+  g_return_val_if_fail (selection_data != NULL, 0);
-+
-+  return selection_data->selection;
-+}                                               
-+
-+static inline GdkAtom
-+gtk_selection_data_get_target (GtkSelectionData *selection_data)
-+{
-+  g_return_val_if_fail (selection_data != NULL, 0);
-+
-+  return selection_data->target;
-+}
-+
-+static inline const guchar*
-+gtk_selection_data_get_data (GtkSelectionData *selection_data)
-+{
-+  g_return_val_if_fail (selection_data != NULL, NULL);
-+
-+  return selection_data->data;
-+}
-+
-+#endif /* GTKSELECTION_WRAPPER_H */
-diff -up mozilla-aurora/widget/gtk/compat/gtk/gtkwidget.h.build-gtk2 mozilla-aurora/widget/gtk/compat/gtk/gtkwidget.h
---- mozilla-aurora/widget/gtk/compat/gtk/gtkwidget.h.build-gtk2	2015-12-16 16:47:23.000000000 +0100
-+++ mozilla-aurora/widget/gtk/compat/gtk/gtkwidget.h	2016-01-15 17:38:34.977272201 +0100
-@@ -9,11 +9,34 @@
- #define gtk_widget_get_mapped gtk_widget_get_mapped_
- #define gtk_widget_set_realized gtk_widget_set_realized_
- #define gtk_widget_get_realized gtk_widget_get_realized_
-+#define gtk_widget_get_window gtk_widget_get_window_
-+#define gtk_widget_has_focus gtk_widget_has_focus_
-+#define gtk_widget_get_visible gtk_widget_get_visible_
-+#define gtk_widget_set_window gtk_widget_set_window_
-+#define gtk_widget_set_can_focus gtk_widget_set_can_focus_
-+#define gtk_widget_get_has_window gtk_widget_get_has_window_
-+#define gtk_widget_set_has_window gtk_widget_set_has_window_
-+#define gtk_widget_get_allocation gtk_widget_get_allocation_
-+#define gtk_widget_set_allocation gtk_widget_set_allocation_
-+#define gtk_widget_get_can_focus gtk_widget_get_can_focus_
-+#define gtk_widget_has_grab gtk_widget_has_grab_
-+#define gtk_widget_is_toplevel gtk_widget_is_toplevel_
- #include_next <gtk/gtkwidget.h>
- #undef gtk_widget_set_mapped
- #undef gtk_widget_get_mapped
- #undef gtk_widget_set_realized
- #undef gtk_widget_get_realized
-+#undef gtk_widget_get_window
-+#undef gtk_widget_has_focus
-+#undef gtk_widget_get_visible
-+#undef gtk_widget_set_window
-+#undef gtk_widget_set_can_focus
-+#undef gtk_widget_get_has_window
-+#undef gtk_widget_set_has_window
-+#undef gtk_widget_get_allocation
-+#undef gtk_widget_set_allocation
-+#undef gtk_widget_has_grab
-+#undef gtk_widget_is_toplevel
- 
- #include <gtk/gtkversion.h>
- 
-@@ -47,4 +70,119 @@ gtk_widget_get_realized(GtkWidget *widge
-   return GTK_WIDGET_REALIZED (widget);
- }
- 
-+static inline GdkWindow *
-+gtk_widget_get_window(GtkWidget *widget)
-+{
-+  return widget->window;
-+}
-+
-+static inline void
-+gtk_widget_set_window(GtkWidget *widget,
-+                      GdkWindow *window)
-+{
-+  g_return_if_fail (GTK_IS_WIDGET (widget));
-+  g_return_if_fail (window == NULL || GDK_IS_WINDOW (window));
-+
-+  if (widget->window != window)
-+    {
-+      widget->window = window;
-+      g_object_notify (G_OBJECT (widget), "window");
-+    }
-+}
-+
-+
-+static inline gboolean
-+gtk_widget_has_focus(GtkWidget *widget)
-+{
-+  return GTK_WIDGET_HAS_FOCUS(widget);
-+}
-+
-+static inline gboolean
-+gtk_widget_get_can_focus (GtkWidget *widget)
-+{
-+  g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
-+
-+  return (GTK_OBJECT_FLAGS (widget) & GTK_CAN_FOCUS) != 0;
-+}
-+
-+static inline void
-+gtk_widget_set_can_focus (GtkWidget *widget,
-+                          gboolean   can_focus)
-+{
-+  g_return_if_fail (GTK_IS_WIDGET (widget));
-+
-+  if (can_focus != gtk_widget_get_can_focus (widget))
-+    {
-+      if (can_focus)
-+        GTK_OBJECT_FLAGS (widget) |= GTK_CAN_FOCUS;
-+      else
-+        GTK_OBJECT_FLAGS (widget) &= ~(GTK_CAN_FOCUS);
-+
-+      gtk_widget_queue_resize (widget);
-+      g_object_notify (G_OBJECT (widget), "can-focus");
-+    }
-+}
-+
-+static inline gboolean
-+gtk_widget_get_visible(GtkWidget *widget)
-+{
-+  return GTK_WIDGET_VISIBLE(widget);
-+}
-+
-+static inline gboolean
-+gtk_widget_get_has_window (GtkWidget *widget)
-+{
-+  g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
-+
-+  return !((GTK_OBJECT_FLAGS (widget) & GTK_NO_WINDOW) != 0);
-+}
-+
-+static inline void
-+gtk_widget_set_has_window (GtkWidget *widget,
-+                           gboolean   has_window)
-+{
-+  g_return_if_fail (GTK_IS_WIDGET (widget));
-+
-+  if (has_window)
-+    GTK_OBJECT_FLAGS (widget) &= ~(GTK_NO_WINDOW);
-+  else
-+    GTK_OBJECT_FLAGS (widget) |= GTK_NO_WINDOW;
-+}
-+
-+static inline void
-+gtk_widget_get_allocation (GtkWidget     *widget,
-+                           GtkAllocation *allocation)
-+{
-+  g_return_if_fail (GTK_IS_WIDGET (widget));
-+  g_return_if_fail (allocation != NULL);
-+
-+  *allocation = widget->allocation;
-+}
-+
-+static inline void
-+gtk_widget_set_allocation (GtkWidget           *widget,
-+                           const GtkAllocation *allocation)
-+{
-+  g_return_if_fail (GTK_IS_WIDGET (widget));
-+  g_return_if_fail (allocation != NULL);
-+
-+  widget->allocation = *allocation;
-+}
-+
-+static inline gboolean
-+gtk_widget_has_grab (GtkWidget *widget)
-+{
-+  g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
-+
-+  return (GTK_OBJECT_FLAGS (widget) & GTK_HAS_GRAB) != 0;
-+}
-+
-+static inline gboolean
-+gtk_widget_is_toplevel (GtkWidget *widget)
-+{   
-+  g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
-+  
-+  return (GTK_OBJECT_FLAGS (widget) & GTK_TOPLEVEL) != 0;
-+}
-+
- #endif /* GTKWIDGET_WRAPPER_H */
-diff -up mozilla-aurora/widget/gtk/gdkkeysyms-compat.h.build-gtk2 mozilla-aurora/widget/gtk/gdkkeysyms-compat.h
---- mozilla-aurora/widget/gtk/gdkkeysyms-compat.h.build-gtk2	2016-01-15 17:38:34.978272200 +0100
-+++ mozilla-aurora/widget/gtk/gdkkeysyms-compat.h	2016-01-15 17:38:34.978272200 +0100
-@@ -0,0 +1,2208 @@
-+/* GDK - The GIMP Drawing Kit
-+ * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
-+ * Copyright (C) 2005, 2006, 2007, 2009 GNOME Foundation
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the
-+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-+ * Boston, MA 02111-1307, USA.
-+ */
-+
-+/*
-+ * Compatibility version of gdkkeysyms.h.
-+ *
-+ * In GTK3, keysyms changed to have a KEY_ prefix.  This is a compatibility header
-+ * your application can include to gain access to the old names as well.  Consider
-+ * porting to the new names instead.
-+ */
-+
-+#ifndef __GDK_KEYSYMS_COMPAT_H__
-+#define __GDK_KEYSYMS_COMPAT_H__
-+
-+#define GDK_VoidSymbol 0xffffff
-+#define GDK_BackSpace 0xff08
-+#define GDK_Tab 0xff09
-+#define GDK_Linefeed 0xff0a
-+#define GDK_Clear 0xff0b
-+#define GDK_Return 0xff0d
-+#define GDK_Pause 0xff13
-+#define GDK_Scroll_Lock 0xff14
-+#define GDK_Sys_Req 0xff15
-+#define GDK_Escape 0xff1b
-+#define GDK_Delete 0xffff
-+#define GDK_Multi_key 0xff20
-+#define GDK_Codeinput 0xff37
-+#define GDK_SingleCandidate 0xff3c
-+#define GDK_MultipleCandidate 0xff3d
-+#define GDK_PreviousCandidate 0xff3e
-+#define GDK_Kanji 0xff21
-+#define GDK_Muhenkan 0xff22
-+#define GDK_Henkan_Mode 0xff23
-+#define GDK_Henkan 0xff23
-+#define GDK_Romaji 0xff24
-+#define GDK_Hiragana 0xff25
-+#define GDK_Katakana 0xff26
-+#define GDK_Hiragana_Katakana 0xff27
-+#define GDK_Zenkaku 0xff28
-+#define GDK_Hankaku 0xff29
-+#define GDK_Zenkaku_Hankaku 0xff2a
-+#define GDK_Touroku 0xff2b
-+#define GDK_Massyo 0xff2c
-+#define GDK_Kana_Lock 0xff2d
-+#define GDK_Kana_Shift 0xff2e
-+#define GDK_Eisu_Shift 0xff2f
-+#define GDK_Eisu_toggle 0xff30
-+#define GDK_Kanji_Bangou 0xff37
-+#define GDK_Zen_Koho 0xff3d
-+#define GDK_Mae_Koho 0xff3e
-+#define GDK_Home 0xff50
-+#define GDK_Left 0xff51
-+#define GDK_Up 0xff52
-+#define GDK_Right 0xff53
-+#define GDK_Down 0xff54
-+#define GDK_Prior 0xff55
-+#define GDK_Page_Up 0xff55
-+#define GDK_Next 0xff56
-+#define GDK_Page_Down 0xff56
-+#define GDK_End 0xff57
-+#define GDK_Begin 0xff58
-+#define GDK_Select 0xff60
-+#define GDK_Print 0xff61
-+#define GDK_Execute 0xff62
-+#define GDK_Insert 0xff63
-+#define GDK_Undo 0xff65
-+#define GDK_Redo 0xff66
-+#define GDK_Menu 0xff67
-+#define GDK_Find 0xff68
-+#define GDK_Cancel 0xff69
-+#define GDK_Help 0xff6a
-+#define GDK_Break 0xff6b
-+#define GDK_Mode_switch 0xff7e
-+#define GDK_script_switch 0xff7e
-+#define GDK_Num_Lock 0xff7f
-+#define GDK_KP_Space 0xff80
-+#define GDK_KP_Tab 0xff89
-+#define GDK_KP_Enter 0xff8d
-+#define GDK_KP_F1 0xff91
-+#define GDK_KP_F2 0xff92
-+#define GDK_KP_F3 0xff93
-+#define GDK_KP_F4 0xff94
-+#define GDK_KP_Home 0xff95
-+#define GDK_KP_Left 0xff96
-+#define GDK_KP_Up 0xff97
-+#define GDK_KP_Right 0xff98
-+#define GDK_KP_Down 0xff99
-+#define GDK_KP_Prior 0xff9a
-+#define GDK_KP_Page_Up 0xff9a
-+#define GDK_KP_Next 0xff9b
-+#define GDK_KP_Page_Down 0xff9b
-+#define GDK_KP_End 0xff9c
-+#define GDK_KP_Begin 0xff9d
-+#define GDK_KP_Insert 0xff9e
-+#define GDK_KP_Delete 0xff9f
-+#define GDK_KP_Equal 0xffbd
-+#define GDK_KP_Multiply 0xffaa
-+#define GDK_KP_Add 0xffab
-+#define GDK_KP_Separator 0xffac
-+#define GDK_KP_Subtract 0xffad
-+#define GDK_KP_Decimal 0xffae
-+#define GDK_KP_Divide 0xffaf
-+#define GDK_KP_0 0xffb0
-+#define GDK_KP_1 0xffb1
-+#define GDK_KP_2 0xffb2
-+#define GDK_KP_3 0xffb3
-+#define GDK_KP_4 0xffb4
-+#define GDK_KP_5 0xffb5
-+#define GDK_KP_6 0xffb6
-+#define GDK_KP_7 0xffb7
-+#define GDK_KP_8 0xffb8
-+#define GDK_KP_9 0xffb9
-+#define GDK_F1 0xffbe
-+#define GDK_F2 0xffbf
-+#define GDK_F3 0xffc0
-+#define GDK_F4 0xffc1
-+#define GDK_F5 0xffc2
-+#define GDK_F6 0xffc3
-+#define GDK_F7 0xffc4
-+#define GDK_F8 0xffc5
-+#define GDK_F9 0xffc6
-+#define GDK_F10 0xffc7
-+#define GDK_F11 0xffc8
-+#define GDK_L1 0xffc8
-+#define GDK_F12 0xffc9
-+#define GDK_L2 0xffc9
-+#define GDK_F13 0xffca
-+#define GDK_L3 0xffca
-+#define GDK_F14 0xffcb
-+#define GDK_L4 0xffcb
-+#define GDK_F15 0xffcc
-+#define GDK_L5 0xffcc
-+#define GDK_F16 0xffcd
-+#define GDK_L6 0xffcd
-+#define GDK_F17 0xffce
-+#define GDK_L7 0xffce
-+#define GDK_F18 0xffcf
-+#define GDK_L8 0xffcf
-+#define GDK_F19 0xffd0
-+#define GDK_L9 0xffd0
-+#define GDK_F20 0xffd1
-+#define GDK_L10 0xffd1
-+#define GDK_F21 0xffd2
-+#define GDK_R1 0xffd2
-+#define GDK_F22 0xffd3
-+#define GDK_R2 0xffd3
-+#define GDK_F23 0xffd4
-+#define GDK_R3 0xffd4
-+#define GDK_F24 0xffd5
-+#define GDK_R4 0xffd5
-+#define GDK_F25 0xffd6
-+#define GDK_R5 0xffd6
-+#define GDK_F26 0xffd7
-+#define GDK_R6 0xffd7
-+#define GDK_F27 0xffd8
-+#define GDK_R7 0xffd8
-+#define GDK_F28 0xffd9
-+#define GDK_R8 0xffd9
-+#define GDK_F29 0xffda
-+#define GDK_R9 0xffda
-+#define GDK_F30 0xffdb
-+#define GDK_R10 0xffdb
-+#define GDK_F31 0xffdc
-+#define GDK_R11 0xffdc
-+#define GDK_F32 0xffdd
-+#define GDK_R12 0xffdd
-+#define GDK_F33 0xffde
-+#define GDK_R13 0xffde
-+#define GDK_F34 0xffdf
-+#define GDK_R14 0xffdf
-+#define GDK_F35 0xffe0
-+#define GDK_R15 0xffe0
-+#define GDK_Shift_L 0xffe1
-+#define GDK_Shift_R 0xffe2
-+#define GDK_Control_L 0xffe3
-+#define GDK_Control_R 0xffe4
-+#define GDK_Caps_Lock 0xffe5
-+#define GDK_Shift_Lock 0xffe6
-+#define GDK_Meta_L 0xffe7
-+#define GDK_Meta_R 0xffe8
-+#define GDK_Alt_L 0xffe9
-+#define GDK_Alt_R 0xffea
-+#define GDK_Super_L 0xffeb
-+#define GDK_Super_R 0xffec
-+#define GDK_Hyper_L 0xffed
-+#define GDK_Hyper_R 0xffee
-+#define GDK_ISO_Lock 0xfe01
-+#define GDK_ISO_Level2_Latch 0xfe02
-+#define GDK_ISO_Level3_Shift 0xfe03
-+#define GDK_ISO_Level3_Latch 0xfe04
-+#define GDK_ISO_Level3_Lock 0xfe05
-+#define GDK_ISO_Level5_Shift 0xfe11
-+#define GDK_ISO_Level5_Latch 0xfe12
-+#define GDK_ISO_Level5_Lock 0xfe13
-+#define GDK_ISO_Group_Shift 0xff7e
-+#define GDK_ISO_Group_Latch 0xfe06
-+#define GDK_ISO_Group_Lock 0xfe07
-+#define GDK_ISO_Next_Group 0xfe08
-+#define GDK_ISO_Next_Group_Lock 0xfe09
-+#define GDK_ISO_Prev_Group 0xfe0a
-+#define GDK_ISO_Prev_Group_Lock 0xfe0b
-+#define GDK_ISO_First_Group 0xfe0c
-+#define GDK_ISO_First_Group_Lock 0xfe0d
-+#define GDK_ISO_Last_Group 0xfe0e
-+#define GDK_ISO_Last_Group_Lock 0xfe0f
-+#define GDK_ISO_Left_Tab 0xfe20
-+#define GDK_ISO_Move_Line_Up 0xfe21
-+#define GDK_ISO_Move_Line_Down 0xfe22
-+#define GDK_ISO_Partial_Line_Up 0xfe23
-+#define GDK_ISO_Partial_Line_Down 0xfe24
-+#define GDK_ISO_Partial_Space_Left 0xfe25
-+#define GDK_ISO_Partial_Space_Right 0xfe26
-+#define GDK_ISO_Set_Margin_Left 0xfe27
-+#define GDK_ISO_Set_Margin_Right 0xfe28
-+#define GDK_ISO_Release_Margin_Left 0xfe29
-+#define GDK_ISO_Release_Margin_Right 0xfe2a
-+#define GDK_ISO_Release_Both_Margins 0xfe2b
-+#define GDK_ISO_Fast_Cursor_Left 0xfe2c
-+#define GDK_ISO_Fast_Cursor_Right 0xfe2d
-+#define GDK_ISO_Fast_Cursor_Up 0xfe2e
-+#define GDK_ISO_Fast_Cursor_Down 0xfe2f
-+#define GDK_ISO_Continuous_Underline 0xfe30
-+#define GDK_ISO_Discontinuous_Underline 0xfe31
-+#define GDK_ISO_Emphasize 0xfe32
-+#define GDK_ISO_Center_Object 0xfe33
-+#define GDK_ISO_Enter 0xfe34
-+#define GDK_dead_grave 0xfe50
-+#define GDK_dead_acute 0xfe51
-+#define GDK_dead_circumflex 0xfe52
-+#define GDK_dead_tilde 0xfe53
-+#define GDK_dead_perispomeni 0xfe53
-+#define GDK_dead_macron 0xfe54
-+#define GDK_dead_breve 0xfe55
-+#define GDK_dead_abovedot 0xfe56
-+#define GDK_dead_diaeresis 0xfe57
-+#define GDK_dead_abovering 0xfe58
-+#define GDK_dead_doubleacute 0xfe59
-+#define GDK_dead_caron 0xfe5a
-+#define GDK_dead_cedilla 0xfe5b
-+#define GDK_dead_ogonek 0xfe5c
-+#define GDK_dead_iota 0xfe5d
-+#define GDK_dead_voiced_sound 0xfe5e
-+#define GDK_dead_semivoiced_sound 0xfe5f
-+#define GDK_dead_belowdot 0xfe60
-+#define GDK_dead_hook 0xfe61
-+#define GDK_dead_horn 0xfe62
-+#define GDK_dead_stroke 0xfe63
-+#define GDK_dead_abovecomma 0xfe64
-+#define GDK_dead_psili 0xfe64
-+#define GDK_dead_abovereversedcomma 0xfe65
-+#define GDK_dead_dasia 0xfe65
-+#define GDK_dead_doublegrave 0xfe66
-+#define GDK_dead_belowring 0xfe67
-+#define GDK_dead_belowmacron 0xfe68
-+#define GDK_dead_belowcircumflex 0xfe69
-+#define GDK_dead_belowtilde 0xfe6a
-+#define GDK_dead_belowbreve 0xfe6b
-+#define GDK_dead_belowdiaeresis 0xfe6c
-+#define GDK_dead_invertedbreve 0xfe6d
-+#define GDK_dead_belowcomma 0xfe6e
-+#define GDK_dead_currency 0xfe6f
-+#define GDK_dead_a 0xfe80
-+#define GDK_dead_A 0xfe81
-+#define GDK_dead_e 0xfe82
-+#define GDK_dead_E 0xfe83
-+#define GDK_dead_i 0xfe84
-+#define GDK_dead_I 0xfe85
-+#define GDK_dead_o 0xfe86
-+#define GDK_dead_O 0xfe87
-+#define GDK_dead_u 0xfe88
-+#define GDK_dead_U 0xfe89
-+#define GDK_dead_small_schwa 0xfe8a
-+#define GDK_dead_capital_schwa 0xfe8b
-+#define GDK_First_Virtual_Screen 0xfed0
-+#define GDK_Prev_Virtual_Screen 0xfed1
-+#define GDK_Next_Virtual_Screen 0xfed2
-+#define GDK_Last_Virtual_Screen 0xfed4
-+#define GDK_Terminate_Server 0xfed5
-+#define GDK_AccessX_Enable 0xfe70
-+#define GDK_AccessX_Feedback_Enable 0xfe71
-+#define GDK_RepeatKeys_Enable 0xfe72
-+#define GDK_SlowKeys_Enable 0xfe73
-+#define GDK_BounceKeys_Enable 0xfe74
-+#define GDK_StickyKeys_Enable 0xfe75
-+#define GDK_MouseKeys_Enable 0xfe76
-+#define GDK_MouseKeys_Accel_Enable 0xfe77
-+#define GDK_Overlay1_Enable 0xfe78
-+#define GDK_Overlay2_Enable 0xfe79
-+#define GDK_AudibleBell_Enable 0xfe7a
-+#define GDK_Pointer_Left 0xfee0
-+#define GDK_Pointer_Right 0xfee1
-+#define GDK_Pointer_Up 0xfee2
-+#define GDK_Pointer_Down 0xfee3
-+#define GDK_Pointer_UpLeft 0xfee4
-+#define GDK_Pointer_UpRight 0xfee5
-+#define GDK_Pointer_DownLeft 0xfee6
-+#define GDK_Pointer_DownRight 0xfee7
-+#define GDK_Pointer_Button_Dflt 0xfee8
-+#define GDK_Pointer_Button1 0xfee9
-+#define GDK_Pointer_Button2 0xfeea
-+#define GDK_Pointer_Button3 0xfeeb
-+#define GDK_Pointer_Button4 0xfeec
-+#define GDK_Pointer_Button5 0xfeed
-+#define GDK_Pointer_DblClick_Dflt 0xfeee
-+#define GDK_Pointer_DblClick1 0xfeef
-+#define GDK_Pointer_DblClick2 0xfef0
-+#define GDK_Pointer_DblClick3 0xfef1
-+#define GDK_Pointer_DblClick4 0xfef2
-+#define GDK_Pointer_DblClick5 0xfef3
-+#define GDK_Pointer_Drag_Dflt 0xfef4
-+#define GDK_Pointer_Drag1 0xfef5
-+#define GDK_Pointer_Drag2 0xfef6
-+#define GDK_Pointer_Drag3 0xfef7
-+#define GDK_Pointer_Drag4 0xfef8
-+#define GDK_Pointer_Drag5 0xfefd
-+#define GDK_Pointer_EnableKeys 0xfef9
-+#define GDK_Pointer_Accelerate 0xfefa
-+#define GDK_Pointer_DfltBtnNext 0xfefb
-+#define GDK_Pointer_DfltBtnPrev 0xfefc
-+#define GDK_3270_Duplicate 0xfd01
-+#define GDK_3270_FieldMark 0xfd02
-+#define GDK_3270_Right2 0xfd03
-+#define GDK_3270_Left2 0xfd04
-+#define GDK_3270_BackTab 0xfd05
-+#define GDK_3270_EraseEOF 0xfd06
-+#define GDK_3270_EraseInput 0xfd07
-+#define GDK_3270_Reset 0xfd08
-+#define GDK_3270_Quit 0xfd09
-+#define GDK_3270_PA1 0xfd0a
-+#define GDK_3270_PA2 0xfd0b
-+#define GDK_3270_PA3 0xfd0c
-+#define GDK_3270_Test 0xfd0d
-+#define GDK_3270_Attn 0xfd0e
-+#define GDK_3270_CursorBlink 0xfd0f
-+#define GDK_3270_AltCursor 0xfd10
-+#define GDK_3270_KeyClick 0xfd11
-+#define GDK_3270_Jump 0xfd12
-+#define GDK_3270_Ident 0xfd13
-+#define GDK_3270_Rule 0xfd14
-+#define GDK_3270_Copy 0xfd15
-+#define GDK_3270_Play 0xfd16
-+#define GDK_3270_Setup 0xfd17
-+#define GDK_3270_Record 0xfd18
-+#define GDK_3270_ChangeScreen 0xfd19
-+#define GDK_3270_DeleteWord 0xfd1a
-+#define GDK_3270_ExSelect 0xfd1b
-+#define GDK_3270_CursorSelect 0xfd1c
-+#define GDK_3270_PrintScreen 0xfd1d
-+#define GDK_3270_Enter 0xfd1e
-+#define GDK_space 0x020
-+#define GDK_exclam 0x021
-+#define GDK_quotedbl 0x022
-+#define GDK_numbersign 0x023
-+#define GDK_dollar 0x024
-+#define GDK_percent 0x025
-+#define GDK_ampersand 0x026
-+#define GDK_apostrophe 0x027
-+#define GDK_quoteright 0x027
-+#define GDK_parenleft 0x028
-+#define GDK_parenright 0x029
-+#define GDK_asterisk 0x02a
-+#define GDK_plus 0x02b
-+#define GDK_comma 0x02c
-+#define GDK_minus 0x02d
-+#define GDK_period 0x02e
-+#define GDK_slash 0x02f
-+#define GDK_0 0x030
-+#define GDK_1 0x031
-+#define GDK_2 0x032
-+#define GDK_3 0x033
-+#define GDK_4 0x034
-+#define GDK_5 0x035
-+#define GDK_6 0x036
-+#define GDK_7 0x037
-+#define GDK_8 0x038
-+#define GDK_9 0x039
-+#define GDK_colon 0x03a
-+#define GDK_semicolon 0x03b
-+#define GDK_less 0x03c
-+#define GDK_equal 0x03d
-+#define GDK_greater 0x03e
-+#define GDK_question 0x03f
-+#define GDK_at 0x040
-+#define GDK_A 0x041
-+#define GDK_B 0x042
-+#define GDK_C 0x043
-+#define GDK_D 0x044
-+#define GDK_E 0x045
-+#define GDK_F 0x046
-+#define GDK_G 0x047
-+#define GDK_H 0x048
-+#define GDK_I 0x049
-+#define GDK_J 0x04a
-+#define GDK_K 0x04b
-+#define GDK_L 0x04c
-+#define GDK_M 0x04d
-+#define GDK_N 0x04e
-+#define GDK_O 0x04f
-+#define GDK_P 0x050
-+#define GDK_Q 0x051
-+#define GDK_R 0x052
-+#define GDK_S 0x053
-+#define GDK_T 0x054
-+#define GDK_U 0x055
-+#define GDK_V 0x056
-+#define GDK_W 0x057
-+#define GDK_X 0x058
-+#define GDK_Y 0x059
-+#define GDK_Z 0x05a
-+#define GDK_bracketleft 0x05b
-+#define GDK_backslash 0x05c
-+#define GDK_bracketright 0x05d
-+#define GDK_asciicircum 0x05e
-+#define GDK_underscore 0x05f
-+#define GDK_grave 0x060
-+#define GDK_quoteleft 0x060
-+#define GDK_a 0x061
-+#define GDK_b 0x062
-+#define GDK_c 0x063
-+#define GDK_d 0x064
-+#define GDK_e 0x065
-+#define GDK_f 0x066
-+#define GDK_g 0x067
-+#define GDK_h 0x068
-+#define GDK_i 0x069
-+#define GDK_j 0x06a
-+#define GDK_k 0x06b
-+#define GDK_l 0x06c
-+#define GDK_m 0x06d
-+#define GDK_n 0x06e
-+#define GDK_o 0x06f
-+#define GDK_p 0x070
-+#define GDK_q 0x071
-+#define GDK_r 0x072
-+#define GDK_s 0x073
-+#define GDK_t 0x074
-+#define GDK_u 0x075
-+#define GDK_v 0x076
-+#define GDK_w 0x077
-+#define GDK_x 0x078
-+#define GDK_y 0x079
-+#define GDK_z 0x07a
-+#define GDK_braceleft 0x07b
-+#define GDK_bar 0x07c
-+#define GDK_braceright 0x07d
-+#define GDK_asciitilde 0x07e
-+#define GDK_nobreakspace 0x0a0
-+#define GDK_exclamdown 0x0a1
-+#define GDK_cent 0x0a2
-+#define GDK_sterling 0x0a3
-+#define GDK_currency 0x0a4
-+#define GDK_yen 0x0a5
-+#define GDK_brokenbar 0x0a6
-+#define GDK_section 0x0a7
-+#define GDK_diaeresis 0x0a8
-+#define GDK_copyright 0x0a9
-+#define GDK_ordfeminine 0x0aa
-+#define GDK_guillemotleft 0x0ab
-+#define GDK_notsign 0x0ac
-+#define GDK_hyphen 0x0ad
-+#define GDK_registered 0x0ae
-+#define GDK_macron 0x0af
-+#define GDK_degree 0x0b0
-+#define GDK_plusminus 0x0b1
-+#define GDK_twosuperior 0x0b2
-+#define GDK_threesuperior 0x0b3
-+#define GDK_acute 0x0b4
-+#define GDK_mu 0x0b5
-+#define GDK_paragraph 0x0b6
-+#define GDK_periodcentered 0x0b7
-+#define GDK_cedilla 0x0b8
-+#define GDK_onesuperior 0x0b9
-+#define GDK_masculine 0x0ba
-+#define GDK_guillemotright 0x0bb
-+#define GDK_onequarter 0x0bc
-+#define GDK_onehalf 0x0bd
-+#define GDK_threequarters 0x0be
-+#define GDK_questiondown 0x0bf
-+#define GDK_Agrave 0x0c0
-+#define GDK_Aacute 0x0c1
-+#define GDK_Acircumflex 0x0c2
-+#define GDK_Atilde 0x0c3
-+#define GDK_Adiaeresis 0x0c4
-+#define GDK_Aring 0x0c5
-+#define GDK_AE 0x0c6
-+#define GDK_Ccedilla 0x0c7
-+#define GDK_Egrave 0x0c8
-+#define GDK_Eacute 0x0c9
-+#define GDK_Ecircumflex 0x0ca
-+#define GDK_Ediaeresis 0x0cb
-+#define GDK_Igrave 0x0cc
-+#define GDK_Iacute 0x0cd
-+#define GDK_Icircumflex 0x0ce
-+#define GDK_Idiaeresis 0x0cf
-+#define GDK_ETH 0x0d0
-+#define GDK_Eth 0x0d0
-+#define GDK_Ntilde 0x0d1
-+#define GDK_Ograve 0x0d2
-+#define GDK_Oacute 0x0d3
-+#define GDK_Ocircumflex 0x0d4
-+#define GDK_Otilde 0x0d5
-+#define GDK_Odiaeresis 0x0d6
-+#define GDK_multiply 0x0d7
-+#define GDK_Oslash 0x0d8
-+#define GDK_Ooblique 0x0d8
-+#define GDK_Ugrave 0x0d9
-+#define GDK_Uacute 0x0da
-+#define GDK_Ucircumflex 0x0db
-+#define GDK_Udiaeresis 0x0dc
-+#define GDK_Yacute 0x0dd
-+#define GDK_THORN 0x0de
-+#define GDK_Thorn 0x0de
-+#define GDK_ssharp 0x0df
-+#define GDK_agrave 0x0e0
-+#define GDK_aacute 0x0e1
-+#define GDK_acircumflex 0x0e2
-+#define GDK_atilde 0x0e3
-+#define GDK_adiaeresis 0x0e4
-+#define GDK_aring 0x0e5
-+#define GDK_ae 0x0e6
-+#define GDK_ccedilla 0x0e7
-+#define GDK_egrave 0x0e8
-+#define GDK_eacute 0x0e9
-+#define GDK_ecircumflex 0x0ea
-+#define GDK_ediaeresis 0x0eb
-+#define GDK_igrave 0x0ec
-+#define GDK_iacute 0x0ed
-+#define GDK_icircumflex 0x0ee
-+#define GDK_idiaeresis 0x0ef
-+#define GDK_eth 0x0f0
-+#define GDK_ntilde 0x0f1
-+#define GDK_ograve 0x0f2
-+#define GDK_oacute 0x0f3
-+#define GDK_ocircumflex 0x0f4
-+#define GDK_otilde 0x0f5
-+#define GDK_odiaeresis 0x0f6
-+#define GDK_division 0x0f7
-+#define GDK_oslash 0x0f8
-+#define GDK_ooblique 0x0f8
-+#define GDK_ugrave 0x0f9
-+#define GDK_uacute 0x0fa
-+#define GDK_ucircumflex 0x0fb
-+#define GDK_udiaeresis 0x0fc
-+#define GDK_yacute 0x0fd
-+#define GDK_thorn 0x0fe
-+#define GDK_ydiaeresis 0x0ff
-+#define GDK_Aogonek 0x1a1
-+#define GDK_breve 0x1a2
-+#define GDK_Lstroke 0x1a3
-+#define GDK_Lcaron 0x1a5
-+#define GDK_Sacute 0x1a6
-+#define GDK_Scaron 0x1a9
-+#define GDK_Scedilla 0x1aa
-+#define GDK_Tcaron 0x1ab
-+#define GDK_Zacute 0x1ac
-+#define GDK_Zcaron 0x1ae
-+#define GDK_Zabovedot 0x1af
-+#define GDK_aogonek 0x1b1
-+#define GDK_ogonek 0x1b2
-+#define GDK_lstroke 0x1b3
-+#define GDK_lcaron 0x1b5
-+#define GDK_sacute 0x1b6
-+#define GDK_caron 0x1b7
-+#define GDK_scaron 0x1b9
-+#define GDK_scedilla 0x1ba
-+#define GDK_tcaron 0x1bb
-+#define GDK_zacute 0x1bc
-+#define GDK_doubleacute 0x1bd
-+#define GDK_zcaron 0x1be
-+#define GDK_zabovedot 0x1bf
-+#define GDK_Racute 0x1c0
-+#define GDK_Abreve 0x1c3
-+#define GDK_Lacute 0x1c5
-+#define GDK_Cacute 0x1c6
-+#define GDK_Ccaron 0x1c8
-+#define GDK_Eogonek 0x1ca
-+#define GDK_Ecaron 0x1cc
-+#define GDK_Dcaron 0x1cf
-+#define GDK_Dstroke 0x1d0
-+#define GDK_Nacute 0x1d1
-+#define GDK_Ncaron 0x1d2
-+#define GDK_Odoubleacute 0x1d5
-+#define GDK_Rcaron 0x1d8
-+#define GDK_Uring 0x1d9
-+#define GDK_Udoubleacute 0x1db
-+#define GDK_Tcedilla 0x1de
-+#define GDK_racute 0x1e0
-+#define GDK_abreve 0x1e3
-+#define GDK_lacute 0x1e5
-+#define GDK_cacute 0x1e6
-+#define GDK_ccaron 0x1e8
-+#define GDK_eogonek 0x1ea
-+#define GDK_ecaron 0x1ec
-+#define GDK_dcaron 0x1ef
-+#define GDK_dstroke 0x1f0
-+#define GDK_nacute 0x1f1
-+#define GDK_ncaron 0x1f2
-+#define GDK_odoubleacute 0x1f5
-+#define GDK_udoubleacute 0x1fb
-+#define GDK_rcaron 0x1f8
-+#define GDK_uring 0x1f9
-+#define GDK_tcedilla 0x1fe
-+#define GDK_abovedot 0x1ff
-+#define GDK_Hstroke 0x2a1
-+#define GDK_Hcircumflex 0x2a6
-+#define GDK_Iabovedot 0x2a9
-+#define GDK_Gbreve 0x2ab
-+#define GDK_Jcircumflex 0x2ac
-+#define GDK_hstroke 0x2b1
-+#define GDK_hcircumflex 0x2b6
-+#define GDK_idotless 0x2b9
-+#define GDK_gbreve 0x2bb
-+#define GDK_jcircumflex 0x2bc
-+#define GDK_Cabovedot 0x2c5
-+#define GDK_Ccircumflex 0x2c6
-+#define GDK_Gabovedot 0x2d5
-+#define GDK_Gcircumflex 0x2d8
-+#define GDK_Ubreve 0x2dd
-+#define GDK_Scircumflex 0x2de
-+#define GDK_cabovedot 0x2e5
-+#define GDK_ccircumflex 0x2e6
-+#define GDK_gabovedot 0x2f5
-+#define GDK_gcircumflex 0x2f8
-+#define GDK_ubreve 0x2fd
-+#define GDK_scircumflex 0x2fe
-+#define GDK_kra 0x3a2
-+#define GDK_kappa 0x3a2
-+#define GDK_Rcedilla 0x3a3
-+#define GDK_Itilde 0x3a5
-+#define GDK_Lcedilla 0x3a6
-+#define GDK_Emacron 0x3aa
-+#define GDK_Gcedilla 0x3ab
-+#define GDK_Tslash 0x3ac
-+#define GDK_rcedilla 0x3b3
-+#define GDK_itilde 0x3b5
-+#define GDK_lcedilla 0x3b6
-+#define GDK_emacron 0x3ba
-+#define GDK_gcedilla 0x3bb
-+#define GDK_tslash 0x3bc
-+#define GDK_ENG 0x3bd
-+#define GDK_eng 0x3bf
-+#define GDK_Amacron 0x3c0
-+#define GDK_Iogonek 0x3c7
-+#define GDK_Eabovedot 0x3cc
-+#define GDK_Imacron 0x3cf
-+#define GDK_Ncedilla 0x3d1
-+#define GDK_Omacron 0x3d2
-+#define GDK_Kcedilla 0x3d3
-+#define GDK_Uogonek 0x3d9
-+#define GDK_Utilde 0x3dd
-+#define GDK_Umacron 0x3de
-+#define GDK_amacron 0x3e0
-+#define GDK_iogonek 0x3e7
-+#define GDK_eabovedot 0x3ec
-+#define GDK_imacron 0x3ef
-+#define GDK_ncedilla 0x3f1
-+#define GDK_omacron 0x3f2
-+#define GDK_kcedilla 0x3f3
-+#define GDK_uogonek 0x3f9
-+#define GDK_utilde 0x3fd
-+#define GDK_umacron 0x3fe
-+#define GDK_Babovedot 0x1001e02
-+#define GDK_babovedot 0x1001e03
-+#define GDK_Dabovedot 0x1001e0a
-+#define GDK_Wgrave 0x1001e80
-+#define GDK_Wacute 0x1001e82
-+#define GDK_dabovedot 0x1001e0b
-+#define GDK_Ygrave 0x1001ef2
-+#define GDK_Fabovedot 0x1001e1e
-+#define GDK_fabovedot 0x1001e1f
-+#define GDK_Mabovedot 0x1001e40
-+#define GDK_mabovedot 0x1001e41
-+#define GDK_Pabovedot 0x1001e56
-+#define GDK_wgrave 0x1001e81
-+#define GDK_pabovedot 0x1001e57
-+#define GDK_wacute 0x1001e83
-+#define GDK_Sabovedot 0x1001e60
-+#define GDK_ygrave 0x1001ef3
-+#define GDK_Wdiaeresis 0x1001e84
-+#define GDK_wdiaeresis 0x1001e85
-+#define GDK_sabovedot 0x1001e61
-+#define GDK_Wcircumflex 0x1000174
-+#define GDK_Tabovedot 0x1001e6a
-+#define GDK_Ycircumflex 0x1000176
-+#define GDK_wcircumflex 0x1000175
-+#define GDK_tabovedot 0x1001e6b
-+#define GDK_ycircumflex 0x1000177
-+#define GDK_OE 0x13bc
-+#define GDK_oe 0x13bd
-+#define GDK_Ydiaeresis 0x13be
-+#define GDK_overline 0x47e
-+#define GDK_kana_fullstop 0x4a1
-+#define GDK_kana_openingbracket 0x4a2
-+#define GDK_kana_closingbracket 0x4a3
-+#define GDK_kana_comma 0x4a4
-+#define GDK_kana_conjunctive 0x4a5
-+#define GDK_kana_middledot 0x4a5
-+#define GDK_kana_WO 0x4a6
-+#define GDK_kana_a 0x4a7
-+#define GDK_kana_i 0x4a8
-+#define GDK_kana_u 0x4a9
-+#define GDK_kana_e 0x4aa
-+#define GDK_kana_o 0x4ab
-+#define GDK_kana_ya 0x4ac
-+#define GDK_kana_yu 0x4ad
-+#define GDK_kana_yo 0x4ae
-+#define GDK_kana_tsu 0x4af
-+#define GDK_kana_tu 0x4af
-+#define GDK_prolongedsound 0x4b0
-+#define GDK_kana_A 0x4b1
-+#define GDK_kana_I 0x4b2
-+#define GDK_kana_U 0x4b3
-+#define GDK_kana_E 0x4b4
-+#define GDK_kana_O 0x4b5
-+#define GDK_kana_KA 0x4b6
-+#define GDK_kana_KI 0x4b7
-+#define GDK_kana_KU 0x4b8
-+#define GDK_kana_KE 0x4b9
-+#define GDK_kana_KO 0x4ba
-+#define GDK_kana_SA 0x4bb
-+#define GDK_kana_SHI 0x4bc
-+#define GDK_kana_SU 0x4bd
-+#define GDK_kana_SE 0x4be
-+#define GDK_kana_SO 0x4bf
-+#define GDK_kana_TA 0x4c0
-+#define GDK_kana_CHI 0x4c1
-+#define GDK_kana_TI 0x4c1
-+#define GDK_kana_TSU 0x4c2
-+#define GDK_kana_TU 0x4c2
-+#define GDK_kana_TE 0x4c3
-+#define GDK_kana_TO 0x4c4
-+#define GDK_kana_NA 0x4c5
-+#define GDK_kana_NI 0x4c6
-+#define GDK_kana_NU 0x4c7
-+#define GDK_kana_NE 0x4c8
-+#define GDK_kana_NO 0x4c9
-+#define GDK_kana_HA 0x4ca
-+#define GDK_kana_HI 0x4cb
-+#define GDK_kana_FU 0x4cc
-+#define GDK_kana_HU 0x4cc
-+#define GDK_kana_HE 0x4cd
-+#define GDK_kana_HO 0x4ce
-+#define GDK_kana_MA 0x4cf
-+#define GDK_kana_MI 0x4d0
-+#define GDK_kana_MU 0x4d1
-+#define GDK_kana_ME 0x4d2
-+#define GDK_kana_MO 0x4d3
-+#define GDK_kana_YA 0x4d4
-+#define GDK_kana_YU 0x4d5
-+#define GDK_kana_YO 0x4d6
-+#define GDK_kana_RA 0x4d7
-+#define GDK_kana_RI 0x4d8
-+#define GDK_kana_RU 0x4d9
-+#define GDK_kana_RE 0x4da
-+#define GDK_kana_RO 0x4db
-+#define GDK_kana_WA 0x4dc
-+#define GDK_kana_N 0x4dd
-+#define GDK_voicedsound 0x4de
-+#define GDK_semivoicedsound 0x4df
-+#define GDK_kana_switch 0xff7e
-+#define GDK_Farsi_0 0x10006f0
-+#define GDK_Farsi_1 0x10006f1
-+#define GDK_Farsi_2 0x10006f2
-+#define GDK_Farsi_3 0x10006f3
-+#define GDK_Farsi_4 0x10006f4
-+#define GDK_Farsi_5 0x10006f5
-+#define GDK_Farsi_6 0x10006f6
-+#define GDK_Farsi_7 0x10006f7
-+#define GDK_Farsi_8 0x10006f8
-+#define GDK_Farsi_9 0x10006f9
-+#define GDK_Arabic_percent 0x100066a
-+#define GDK_Arabic_superscript_alef 0x1000670
-+#define GDK_Arabic_tteh 0x1000679
-+#define GDK_Arabic_peh 0x100067e
-+#define GDK_Arabic_tcheh 0x1000686
-+#define GDK_Arabic_ddal 0x1000688
-+#define GDK_Arabic_rreh 0x1000691
-+#define GDK_Arabic_comma 0x5ac
-+#define GDK_Arabic_fullstop 0x10006d4
-+#define GDK_Arabic_0 0x1000660
-+#define GDK_Arabic_1 0x1000661
-+#define GDK_Arabic_2 0x1000662
-+#define GDK_Arabic_3 0x1000663
-+#define GDK_Arabic_4 0x1000664
-+#define GDK_Arabic_5 0x1000665
-+#define GDK_Arabic_6 0x1000666
-+#define GDK_Arabic_7 0x1000667
-+#define GDK_Arabic_8 0x1000668
-+#define GDK_Arabic_9 0x1000669
-+#define GDK_Arabic_semicolon 0x5bb
-+#define GDK_Arabic_question_mark 0x5bf
-+#define GDK_Arabic_hamza 0x5c1
-+#define GDK_Arabic_maddaonalef 0x5c2
-+#define GDK_Arabic_hamzaonalef 0x5c3
-+#define GDK_Arabic_hamzaonwaw 0x5c4
-+#define GDK_Arabic_hamzaunderalef 0x5c5
-+#define GDK_Arabic_hamzaonyeh 0x5c6
-+#define GDK_Arabic_alef 0x5c7
-+#define GDK_Arabic_beh 0x5c8
-+#define GDK_Arabic_tehmarbuta 0x5c9
-+#define GDK_Arabic_teh 0x5ca
-+#define GDK_Arabic_theh 0x5cb
-+#define GDK_Arabic_jeem 0x5cc
-+#define GDK_Arabic_hah 0x5cd
-+#define GDK_Arabic_khah 0x5ce
-+#define GDK_Arabic_dal 0x5cf
-+#define GDK_Arabic_thal 0x5d0
-+#define GDK_Arabic_ra 0x5d1
-+#define GDK_Arabic_zain 0x5d2
-+#define GDK_Arabic_seen 0x5d3
-+#define GDK_Arabic_sheen 0x5d4
-+#define GDK_Arabic_sad 0x5d5
-+#define GDK_Arabic_dad 0x5d6
-+#define GDK_Arabic_tah 0x5d7
-+#define GDK_Arabic_zah 0x5d8
-+#define GDK_Arabic_ain 0x5d9
-+#define GDK_Arabic_ghain 0x5da
-+#define GDK_Arabic_tatweel 0x5e0
-+#define GDK_Arabic_feh 0x5e1
-+#define GDK_Arabic_qaf 0x5e2
-+#define GDK_Arabic_kaf 0x5e3
-+#define GDK_Arabic_lam 0x5e4
-+#define GDK_Arabic_meem 0x5e5
-+#define GDK_Arabic_noon 0x5e6
-+#define GDK_Arabic_ha 0x5e7
-+#define GDK_Arabic_heh 0x5e7
-+#define GDK_Arabic_waw 0x5e8
-+#define GDK_Arabic_alefmaksura 0x5e9
-+#define GDK_Arabic_yeh 0x5ea
-+#define GDK_Arabic_fathatan 0x5eb
-+#define GDK_Arabic_dammatan 0x5ec
-+#define GDK_Arabic_kasratan 0x5ed
-+#define GDK_Arabic_fatha 0x5ee
-+#define GDK_Arabic_damma 0x5ef
-+#define GDK_Arabic_kasra 0x5f0
-+#define GDK_Arabic_shadda 0x5f1
-+#define GDK_Arabic_sukun 0x5f2
-+#define GDK_Arabic_madda_above 0x1000653
-+#define GDK_Arabic_hamza_above 0x1000654
-+#define GDK_Arabic_hamza_below 0x1000655
-+#define GDK_Arabic_jeh 0x1000698
-+#define GDK_Arabic_veh 0x10006a4
-+#define GDK_Arabic_keheh 0x10006a9
-+#define GDK_Arabic_gaf 0x10006af
-+#define GDK_Arabic_noon_ghunna 0x10006ba
-+#define GDK_Arabic_heh_doachashmee 0x10006be
-+#define GDK_Farsi_yeh 0x10006cc
-+#define GDK_Arabic_farsi_yeh 0x10006cc
-+#define GDK_Arabic_yeh_baree 0x10006d2
-+#define GDK_Arabic_heh_goal 0x10006c1
-+#define GDK_Arabic_switch 0xff7e
-+#define GDK_Cyrillic_GHE_bar 0x1000492
-+#define GDK_Cyrillic_ghe_bar 0x1000493
-+#define GDK_Cyrillic_ZHE_descender 0x1000496
-+#define GDK_Cyrillic_zhe_descender 0x1000497
-+#define GDK_Cyrillic_KA_descender 0x100049a
-+#define GDK_Cyrillic_ka_descender 0x100049b
-+#define GDK_Cyrillic_KA_vertstroke 0x100049c
-+#define GDK_Cyrillic_ka_vertstroke 0x100049d
-+#define GDK_Cyrillic_EN_descender 0x10004a2
-+#define GDK_Cyrillic_en_descender 0x10004a3
-+#define GDK_Cyrillic_U_straight 0x10004ae
-+#define GDK_Cyrillic_u_straight 0x10004af
-+#define GDK_Cyrillic_U_straight_bar 0x10004b0
-+#define GDK_Cyrillic_u_straight_bar 0x10004b1
-+#define GDK_Cyrillic_HA_descender 0x10004b2
-+#define GDK_Cyrillic_ha_descender 0x10004b3
-+#define GDK_Cyrillic_CHE_descender 0x10004b6
-+#define GDK_Cyrillic_che_descender 0x10004b7
-+#define GDK_Cyrillic_CHE_vertstroke 0x10004b8
-+#define GDK_Cyrillic_che_vertstroke 0x10004b9
-+#define GDK_Cyrillic_SHHA 0x10004ba
-+#define GDK_Cyrillic_shha 0x10004bb
-+#define GDK_Cyrillic_SCHWA 0x10004d8
-+#define GDK_Cyrillic_schwa 0x10004d9
-+#define GDK_Cyrillic_I_macron 0x10004e2
-+#define GDK_Cyrillic_i_macron 0x10004e3
-+#define GDK_Cyrillic_O_bar 0x10004e8
-+#define GDK_Cyrillic_o_bar 0x10004e9
-+#define GDK_Cyrillic_U_macron 0x10004ee
-+#define GDK_Cyrillic_u_macron 0x10004ef
-+#define GDK_Serbian_dje 0x6a1
-+#define GDK_Macedonia_gje 0x6a2
-+#define GDK_Cyrillic_io 0x6a3
-+#define GDK_Ukrainian_ie 0x6a4
-+#define GDK_Ukranian_je 0x6a4
-+#define GDK_Macedonia_dse 0x6a5
-+#define GDK_Ukrainian_i 0x6a6
-+#define GDK_Ukranian_i 0x6a6
-+#define GDK_Ukrainian_yi 0x6a7
-+#define GDK_Ukranian_yi 0x6a7
-+#define GDK_Cyrillic_je 0x6a8
-+#define GDK_Serbian_je 0x6a8
-+#define GDK_Cyrillic_lje 0x6a9
-+#define GDK_Serbian_lje 0x6a9
-+#define GDK_Cyrillic_nje 0x6aa
-+#define GDK_Serbian_nje 0x6aa
-+#define GDK_Serbian_tshe 0x6ab
-+#define GDK_Macedonia_kje 0x6ac
-+#define GDK_Ukrainian_ghe_with_upturn 0x6ad
-+#define GDK_Byelorussian_shortu 0x6ae
-+#define GDK_Cyrillic_dzhe 0x6af
-+#define GDK_Serbian_dze 0x6af
-+#define GDK_numerosign 0x6b0
-+#define GDK_Serbian_DJE 0x6b1
-+#define GDK_Macedonia_GJE 0x6b2
-+#define GDK_Cyrillic_IO 0x6b3
-+#define GDK_Ukrainian_IE 0x6b4
-+#define GDK_Ukranian_JE 0x6b4
-+#define GDK_Macedonia_DSE 0x6b5
-+#define GDK_Ukrainian_I 0x6b6
-+#define GDK_Ukranian_I 0x6b6
-+#define GDK_Ukrainian_YI 0x6b7
-+#define GDK_Ukranian_YI 0x6b7
-+#define GDK_Cyrillic_JE 0x6b8
-+#define GDK_Serbian_JE 0x6b8
-+#define GDK_Cyrillic_LJE 0x6b9
-+#define GDK_Serbian_LJE 0x6b9
-+#define GDK_Cyrillic_NJE 0x6ba
-+#define GDK_Serbian_NJE 0x6ba
-+#define GDK_Serbian_TSHE 0x6bb
-+#define GDK_Macedonia_KJE 0x6bc
-+#define GDK_Ukrainian_GHE_WITH_UPTURN 0x6bd
-+#define GDK_Byelorussian_SHORTU 0x6be
-+#define GDK_Cyrillic_DZHE 0x6bf
-+#define GDK_Serbian_DZE 0x6bf
-+#define GDK_Cyrillic_yu 0x6c0
-+#define GDK_Cyrillic_a 0x6c1
-+#define GDK_Cyrillic_be 0x6c2
-+#define GDK_Cyrillic_tse 0x6c3
-+#define GDK_Cyrillic_de 0x6c4
-+#define GDK_Cyrillic_ie 0x6c5
-+#define GDK_Cyrillic_ef 0x6c6
-+#define GDK_Cyrillic_ghe 0x6c7
-+#define GDK_Cyrillic_ha 0x6c8
-+#define GDK_Cyrillic_i 0x6c9
-+#define GDK_Cyrillic_shorti 0x6ca
-+#define GDK_Cyrillic_ka 0x6cb
-+#define GDK_Cyrillic_el 0x6cc
-+#define GDK_Cyrillic_em 0x6cd
-+#define GDK_Cyrillic_en 0x6ce
-+#define GDK_Cyrillic_o 0x6cf
-+#define GDK_Cyrillic_pe 0x6d0
-+#define GDK_Cyrillic_ya 0x6d1
-+#define GDK_Cyrillic_er 0x6d2
-+#define GDK_Cyrillic_es 0x6d3
-+#define GDK_Cyrillic_te 0x6d4
-+#define GDK_Cyrillic_u 0x6d5
-+#define GDK_Cyrillic_zhe 0x6d6
-+#define GDK_Cyrillic_ve 0x6d7
-+#define GDK_Cyrillic_softsign 0x6d8
-+#define GDK_Cyrillic_yeru 0x6d9
-+#define GDK_Cyrillic_ze 0x6da
-+#define GDK_Cyrillic_sha 0x6db
-+#define GDK_Cyrillic_e 0x6dc
-+#define GDK_Cyrillic_shcha 0x6dd
-+#define GDK_Cyrillic_che 0x6de
-+#define GDK_Cyrillic_hardsign 0x6df
-+#define GDK_Cyrillic_YU 0x6e0
-+#define GDK_Cyrillic_A 0x6e1
-+#define GDK_Cyrillic_BE 0x6e2
-+#define GDK_Cyrillic_TSE 0x6e3
-+#define GDK_Cyrillic_DE 0x6e4
-+#define GDK_Cyrillic_IE 0x6e5
-+#define GDK_Cyrillic_EF 0x6e6
-+#define GDK_Cyrillic_GHE 0x6e7
-+#define GDK_Cyrillic_HA 0x6e8
-+#define GDK_Cyrillic_I 0x6e9
-+#define GDK_Cyrillic_SHORTI 0x6ea
-+#define GDK_Cyrillic_KA 0x6eb
-+#define GDK_Cyrillic_EL 0x6ec
-+#define GDK_Cyrillic_EM 0x6ed
-+#define GDK_Cyrillic_EN 0x6ee
-+#define GDK_Cyrillic_O 0x6ef
-+#define GDK_Cyrillic_PE 0x6f0
-+#define GDK_Cyrillic_YA 0x6f1
-+#define GDK_Cyrillic_ER 0x6f2
-+#define GDK_Cyrillic_ES 0x6f3
-+#define GDK_Cyrillic_TE 0x6f4
-+#define GDK_Cyrillic_U 0x6f5
-+#define GDK_Cyrillic_ZHE 0x6f6
-+#define GDK_Cyrillic_VE 0x6f7
-+#define GDK_Cyrillic_SOFTSIGN 0x6f8
-+#define GDK_Cyrillic_YERU 0x6f9
-+#define GDK_Cyrillic_ZE 0x6fa
-+#define GDK_Cyrillic_SHA 0x6fb
-+#define GDK_Cyrillic_E 0x6fc
-+#define GDK_Cyrillic_SHCHA 0x6fd
-+#define GDK_Cyrillic_CHE 0x6fe
-+#define GDK_Cyrillic_HARDSIGN 0x6ff
-+#define GDK_Greek_ALPHAaccent 0x7a1
-+#define GDK_Greek_EPSILONaccent 0x7a2
-+#define GDK_Greek_ETAaccent 0x7a3
-+#define GDK_Greek_IOTAaccent 0x7a4
-+#define GDK_Greek_IOTAdieresis 0x7a5
-+#define GDK_Greek_IOTAdiaeresis 0x7a5
-+#define GDK_Greek_OMICRONaccent 0x7a7
-+#define GDK_Greek_UPSILONaccent 0x7a8
-+#define GDK_Greek_UPSILONdieresis 0x7a9
-+#define GDK_Greek_OMEGAaccent 0x7ab
-+#define GDK_Greek_accentdieresis 0x7ae
-+#define GDK_Greek_horizbar 0x7af
-+#define GDK_Greek_alphaaccent 0x7b1
-+#define GDK_Greek_epsilonaccent 0x7b2
-+#define GDK_Greek_etaaccent 0x7b3
-+#define GDK_Greek_iotaaccent 0x7b4
-+#define GDK_Greek_iotadieresis 0x7b5
-+#define GDK_Greek_iotaaccentdieresis 0x7b6
-+#define GDK_Greek_omicronaccent 0x7b7
-+#define GDK_Greek_upsilonaccent 0x7b8
-+#define GDK_Greek_upsilondieresis 0x7b9
-+#define GDK_Greek_upsilonaccentdieresis 0x7ba
-+#define GDK_Greek_omegaaccent 0x7bb
-+#define GDK_Greek_ALPHA 0x7c1
-+#define GDK_Greek_BETA 0x7c2
-+#define GDK_Greek_GAMMA 0x7c3
-+#define GDK_Greek_DELTA 0x7c4
-+#define GDK_Greek_EPSILON 0x7c5
-+#define GDK_Greek_ZETA 0x7c6
-+#define GDK_Greek_ETA 0x7c7
-+#define GDK_Greek_THETA 0x7c8
-+#define GDK_Greek_IOTA 0x7c9
-+#define GDK_Greek_KAPPA 0x7ca
-+#define GDK_Greek_LAMDA 0x7cb
-+#define GDK_Greek_LAMBDA 0x7cb
-+#define GDK_Greek_MU 0x7cc
-+#define GDK_Greek_NU 0x7cd
-+#define GDK_Greek_XI 0x7ce
-+#define GDK_Greek_OMICRON 0x7cf
-+#define GDK_Greek_PI 0x7d0
-+#define GDK_Greek_RHO 0x7d1
-+#define GDK_Greek_SIGMA 0x7d2
-+#define GDK_Greek_TAU 0x7d4
-+#define GDK_Greek_UPSILON 0x7d5
-+#define GDK_Greek_PHI 0x7d6
-+#define GDK_Greek_CHI 0x7d7
-+#define GDK_Greek_PSI 0x7d8
-+#define GDK_Greek_OMEGA 0x7d9
-+#define GDK_Greek_alpha 0x7e1
-+#define GDK_Greek_beta 0x7e2
-+#define GDK_Greek_gamma 0x7e3
-+#define GDK_Greek_delta 0x7e4
-+#define GDK_Greek_epsilon 0x7e5
-+#define GDK_Greek_zeta 0x7e6
-+#define GDK_Greek_eta 0x7e7
-+#define GDK_Greek_theta 0x7e8
-+#define GDK_Greek_iota 0x7e9
-+#define GDK_Greek_kappa 0x7ea
-+#define GDK_Greek_lamda 0x7eb
-+#define GDK_Greek_lambda 0x7eb
-+#define GDK_Greek_mu 0x7ec
-+#define GDK_Greek_nu 0x7ed
-+#define GDK_Greek_xi 0x7ee
-+#define GDK_Greek_omicron 0x7ef
-+#define GDK_Greek_pi 0x7f0
-+#define GDK_Greek_rho 0x7f1
-+#define GDK_Greek_sigma 0x7f2
-+#define GDK_Greek_finalsmallsigma 0x7f3
-+#define GDK_Greek_tau 0x7f4
-+#define GDK_Greek_upsilon 0x7f5
-+#define GDK_Greek_phi 0x7f6
-+#define GDK_Greek_chi 0x7f7
-+#define GDK_Greek_psi 0x7f8
-+#define GDK_Greek_omega 0x7f9
-+#define GDK_Greek_switch 0xff7e
-+#define GDK_leftradical 0x8a1
-+#define GDK_topleftradical 0x8a2
-+#define GDK_horizconnector 0x8a3
-+#define GDK_topintegral 0x8a4
-+#define GDK_botintegral 0x8a5
-+#define GDK_vertconnector 0x8a6
-+#define GDK_topleftsqbracket 0x8a7
-+#define GDK_botleftsqbracket 0x8a8
-+#define GDK_toprightsqbracket 0x8a9
-+#define GDK_botrightsqbracket 0x8aa
-+#define GDK_topleftparens 0x8ab
-+#define GDK_botleftparens 0x8ac
-+#define GDK_toprightparens 0x8ad
-+#define GDK_botrightparens 0x8ae
-+#define GDK_leftmiddlecurlybrace 0x8af
-+#define GDK_rightmiddlecurlybrace 0x8b0
-+#define GDK_topleftsummation 0x8b1
-+#define GDK_botleftsummation 0x8b2
-+#define GDK_topvertsummationconnector 0x8b3
-+#define GDK_botvertsummationconnector 0x8b4
-+#define GDK_toprightsummation 0x8b5
-+#define GDK_botrightsummation 0x8b6
-+#define GDK_rightmiddlesummation 0x8b7
-+#define GDK_lessthanequal 0x8bc
-+#define GDK_notequal 0x8bd
-+#define GDK_greaterthanequal 0x8be
-+#define GDK_integral 0x8bf
-+#define GDK_therefore 0x8c0
-+#define GDK_variation 0x8c1
-+#define GDK_infinity 0x8c2
-+#define GDK_nabla 0x8c5
-+#define GDK_approximate 0x8c8
-+#define GDK_similarequal 0x8c9
-+#define GDK_ifonlyif 0x8cd
-+#define GDK_implies 0x8ce
-+#define GDK_identical 0x8cf
-+#define GDK_radical 0x8d6
-+#define GDK_includedin 0x8da
-+#define GDK_includes 0x8db
-+#define GDK_intersection 0x8dc
-+#define GDK_union 0x8dd
-+#define GDK_logicaland 0x8de
-+#define GDK_logicalor 0x8df
-+#define GDK_partialderivative 0x8ef
-+#define GDK_function 0x8f6
-+#define GDK_leftarrow 0x8fb
-+#define GDK_uparrow 0x8fc
-+#define GDK_rightarrow 0x8fd
-+#define GDK_downarrow 0x8fe
-+#define GDK_blank 0x9df
-+#define GDK_soliddiamond 0x9e0
-+#define GDK_checkerboard 0x9e1
-+#define GDK_ht 0x9e2
-+#define GDK_ff 0x9e3
-+#define GDK_cr 0x9e4
-+#define GDK_lf 0x9e5
-+#define GDK_nl 0x9e8
-+#define GDK_vt 0x9e9
-+#define GDK_lowrightcorner 0x9ea
-+#define GDK_uprightcorner 0x9eb
-+#define GDK_upleftcorner 0x9ec
-+#define GDK_lowleftcorner 0x9ed
-+#define GDK_crossinglines 0x9ee
-+#define GDK_horizlinescan1 0x9ef
-+#define GDK_horizlinescan3 0x9f0
-+#define GDK_horizlinescan5 0x9f1
-+#define GDK_horizlinescan7 0x9f2
-+#define GDK_horizlinescan9 0x9f3
-+#define GDK_leftt 0x9f4
-+#define GDK_rightt 0x9f5
-+#define GDK_bott 0x9f6
-+#define GDK_topt 0x9f7
-+#define GDK_vertbar 0x9f8
-+#define GDK_emspace 0xaa1
-+#define GDK_enspace 0xaa2
-+#define GDK_em3space 0xaa3
-+#define GDK_em4space 0xaa4
-+#define GDK_digitspace 0xaa5
-+#define GDK_punctspace 0xaa6
-+#define GDK_thinspace 0xaa7
-+#define GDK_hairspace 0xaa8
-+#define GDK_emdash 0xaa9
-+#define GDK_endash 0xaaa
-+#define GDK_signifblank 0xaac
-+#define GDK_ellipsis 0xaae
-+#define GDK_doubbaselinedot 0xaaf
-+#define GDK_onethird 0xab0
-+#define GDK_twothirds 0xab1
-+#define GDK_onefifth 0xab2
-+#define GDK_twofifths 0xab3
-+#define GDK_threefifths 0xab4
-+#define GDK_fourfifths 0xab5
-+#define GDK_onesixth 0xab6
-+#define GDK_fivesixths 0xab7
-+#define GDK_careof 0xab8
-+#define GDK_figdash 0xabb
-+#define GDK_leftanglebracket 0xabc
-+#define GDK_decimalpoint 0xabd
-+#define GDK_rightanglebracket 0xabe
-+#define GDK_marker 0xabf
-+#define GDK_oneeighth 0xac3
-+#define GDK_threeeighths 0xac4
-+#define GDK_fiveeighths 0xac5
-+#define GDK_seveneighths 0xac6
-+#define GDK_trademark 0xac9
-+#define GDK_signaturemark 0xaca
-+#define GDK_trademarkincircle 0xacb
-+#define GDK_leftopentriangle 0xacc
-+#define GDK_rightopentriangle 0xacd
-+#define GDK_emopencircle 0xace
-+#define GDK_emopenrectangle 0xacf
-+#define GDK_leftsinglequotemark 0xad0
-+#define GDK_rightsinglequotemark 0xad1
-+#define GDK_leftdoublequotemark 0xad2
-+#define GDK_rightdoublequotemark 0xad3
-+#define GDK_prescription 0xad4
-+#define GDK_minutes 0xad6
-+#define GDK_seconds 0xad7
-+#define GDK_latincross 0xad9
-+#define GDK_hexagram 0xada
-+#define GDK_filledrectbullet 0xadb
-+#define GDK_filledlefttribullet 0xadc
-+#define GDK_filledrighttribullet 0xadd
-+#define GDK_emfilledcircle 0xade
-+#define GDK_emfilledrect 0xadf
-+#define GDK_enopencircbullet 0xae0
-+#define GDK_enopensquarebullet 0xae1
-+#define GDK_openrectbullet 0xae2
-+#define GDK_opentribulletup 0xae3
-+#define GDK_opentribulletdown 0xae4
-+#define GDK_openstar 0xae5
-+#define GDK_enfilledcircbullet 0xae6
-+#define GDK_enfilledsqbullet 0xae7
-+#define GDK_filledtribulletup 0xae8
-+#define GDK_filledtribulletdown 0xae9
-+#define GDK_leftpointer 0xaea
-+#define GDK_rightpointer 0xaeb
-+#define GDK_club 0xaec
-+#define GDK_diamond 0xaed
-+#define GDK_heart 0xaee
-+#define GDK_maltesecross 0xaf0
-+#define GDK_dagger 0xaf1
-+#define GDK_doubledagger 0xaf2
-+#define GDK_checkmark 0xaf3
-+#define GDK_ballotcross 0xaf4
-+#define GDK_musicalsharp 0xaf5
-+#define GDK_musicalflat 0xaf6
-+#define GDK_malesymbol 0xaf7
-+#define GDK_femalesymbol 0xaf8
-+#define GDK_telephone 0xaf9
-+#define GDK_telephonerecorder 0xafa
-+#define GDK_phonographcopyright 0xafb
-+#define GDK_caret 0xafc
-+#define GDK_singlelowquotemark 0xafd
-+#define GDK_doublelowquotemark 0xafe
-+#define GDK_cursor 0xaff
-+#define GDK_leftcaret 0xba3
-+#define GDK_rightcaret 0xba6
-+#define GDK_downcaret 0xba8
-+#define GDK_upcaret 0xba9
-+#define GDK_overbar 0xbc0
-+#define GDK_downtack 0xbc2
-+#define GDK_upshoe 0xbc3
-+#define GDK_downstile 0xbc4
-+#define GDK_underbar 0xbc6
-+#define GDK_jot 0xbca
-+#define GDK_quad 0xbcc
-+#define GDK_uptack 0xbce
-+#define GDK_circle 0xbcf
-+#define GDK_upstile 0xbd3
-+#define GDK_downshoe 0xbd6
-+#define GDK_rightshoe 0xbd8
-+#define GDK_leftshoe 0xbda
-+#define GDK_lefttack 0xbdc
-+#define GDK_righttack 0xbfc
-+#define GDK_hebrew_doublelowline 0xcdf
-+#define GDK_hebrew_aleph 0xce0
-+#define GDK_hebrew_bet 0xce1
-+#define GDK_hebrew_beth 0xce1
-+#define GDK_hebrew_gimel 0xce2
-+#define GDK_hebrew_gimmel 0xce2
-+#define GDK_hebrew_dalet 0xce3
-+#define GDK_hebrew_daleth 0xce3
-+#define GDK_hebrew_he 0xce4
-+#define GDK_hebrew_waw 0xce5
-+#define GDK_hebrew_zain 0xce6
-+#define GDK_hebrew_zayin 0xce6
-+#define GDK_hebrew_chet 0xce7
-+#define GDK_hebrew_het 0xce7
-+#define GDK_hebrew_tet 0xce8
-+#define GDK_hebrew_teth 0xce8
-+#define GDK_hebrew_yod 0xce9
-+#define GDK_hebrew_finalkaph 0xcea
-+#define GDK_hebrew_kaph 0xceb
-+#define GDK_hebrew_lamed 0xcec
-+#define GDK_hebrew_finalmem 0xced
-+#define GDK_hebrew_mem 0xcee
-+#define GDK_hebrew_finalnun 0xcef
-+#define GDK_hebrew_nun 0xcf0
-+#define GDK_hebrew_samech 0xcf1
-+#define GDK_hebrew_samekh 0xcf1
-+#define GDK_hebrew_ayin 0xcf2
-+#define GDK_hebrew_finalpe 0xcf3
-+#define GDK_hebrew_pe 0xcf4
-+#define GDK_hebrew_finalzade 0xcf5
-+#define GDK_hebrew_finalzadi 0xcf5
-+#define GDK_hebrew_zade 0xcf6
-+#define GDK_hebrew_zadi 0xcf6
-+#define GDK_hebrew_qoph 0xcf7
-+#define GDK_hebrew_kuf 0xcf7
-+#define GDK_hebrew_resh 0xcf8
-+#define GDK_hebrew_shin 0xcf9
-+#define GDK_hebrew_taw 0xcfa
-+#define GDK_hebrew_taf 0xcfa
-+#define GDK_Hebrew_switch 0xff7e
-+#define GDK_Thai_kokai 0xda1
-+#define GDK_Thai_khokhai 0xda2
-+#define GDK_Thai_khokhuat 0xda3
-+#define GDK_Thai_khokhwai 0xda4
-+#define GDK_Thai_khokhon 0xda5
-+#define GDK_Thai_khorakhang 0xda6
-+#define GDK_Thai_ngongu 0xda7
-+#define GDK_Thai_chochan 0xda8
-+#define GDK_Thai_choching 0xda9
-+#define GDK_Thai_chochang 0xdaa
-+#define GDK_Thai_soso 0xdab
-+#define GDK_Thai_chochoe 0xdac
-+#define GDK_Thai_yoying 0xdad
-+#define GDK_Thai_dochada 0xdae
-+#define GDK_Thai_topatak 0xdaf
-+#define GDK_Thai_thothan 0xdb0
-+#define GDK_Thai_thonangmontho 0xdb1
-+#define GDK_Thai_thophuthao 0xdb2
-+#define GDK_Thai_nonen 0xdb3
-+#define GDK_Thai_dodek 0xdb4
-+#define GDK_Thai_totao 0xdb5
-+#define GDK_Thai_thothung 0xdb6
-+#define GDK_Thai_thothahan 0xdb7
-+#define GDK_Thai_thothong 0xdb8
-+#define GDK_Thai_nonu 0xdb9
-+#define GDK_Thai_bobaimai 0xdba
-+#define GDK_Thai_popla 0xdbb
-+#define GDK_Thai_phophung 0xdbc
-+#define GDK_Thai_fofa 0xdbd
-+#define GDK_Thai_phophan 0xdbe
-+#define GDK_Thai_fofan 0xdbf
-+#define GDK_Thai_phosamphao 0xdc0
-+#define GDK_Thai_moma 0xdc1
-+#define GDK_Thai_yoyak 0xdc2
-+#define GDK_Thai_rorua 0xdc3
-+#define GDK_Thai_ru 0xdc4
-+#define GDK_Thai_loling 0xdc5
-+#define GDK_Thai_lu 0xdc6
-+#define GDK_Thai_wowaen 0xdc7
-+#define GDK_Thai_sosala 0xdc8
-+#define GDK_Thai_sorusi 0xdc9
-+#define GDK_Thai_sosua 0xdca
-+#define GDK_Thai_hohip 0xdcb
-+#define GDK_Thai_lochula 0xdcc
-+#define GDK_Thai_oang 0xdcd
-+#define GDK_Thai_honokhuk 0xdce
-+#define GDK_Thai_paiyannoi 0xdcf
-+#define GDK_Thai_saraa 0xdd0
-+#define GDK_Thai_maihanakat 0xdd1
-+#define GDK_Thai_saraaa 0xdd2
-+#define GDK_Thai_saraam 0xdd3
-+#define GDK_Thai_sarai 0xdd4
-+#define GDK_Thai_saraii 0xdd5
-+#define GDK_Thai_saraue 0xdd6
-+#define GDK_Thai_sarauee 0xdd7
-+#define GDK_Thai_sarau 0xdd8
-+#define GDK_Thai_sarauu 0xdd9
-+#define GDK_Thai_phinthu 0xdda
-+#define GDK_Thai_maihanakat_maitho 0xdde
-+#define GDK_Thai_baht 0xddf
-+#define GDK_Thai_sarae 0xde0
-+#define GDK_Thai_saraae 0xde1
-+#define GDK_Thai_sarao 0xde2
-+#define GDK_Thai_saraaimaimuan 0xde3
-+#define GDK_Thai_saraaimaimalai 0xde4
-+#define GDK_Thai_lakkhangyao 0xde5
-+#define GDK_Thai_maiyamok 0xde6
-+#define GDK_Thai_maitaikhu 0xde7
-+#define GDK_Thai_maiek 0xde8
-+#define GDK_Thai_maitho 0xde9
-+#define GDK_Thai_maitri 0xdea
-+#define GDK_Thai_maichattawa 0xdeb
-+#define GDK_Thai_thanthakhat 0xdec
-+#define GDK_Thai_nikhahit 0xded
-+#define GDK_Thai_leksun 0xdf0
-+#define GDK_Thai_leknung 0xdf1
-+#define GDK_Thai_leksong 0xdf2
-+#define GDK_Thai_leksam 0xdf3
-+#define GDK_Thai_leksi 0xdf4
-+#define GDK_Thai_lekha 0xdf5
-+#define GDK_Thai_lekhok 0xdf6
-+#define GDK_Thai_lekchet 0xdf7
-+#define GDK_Thai_lekpaet 0xdf8
-+#define GDK_Thai_lekkao 0xdf9
-+#define GDK_Hangul 0xff31
-+#define GDK_Hangul_Start 0xff32
-+#define GDK_Hangul_End 0xff33
-+#define GDK_Hangul_Hanja 0xff34
-+#define GDK_Hangul_Jamo 0xff35
-+#define GDK_Hangul_Romaja 0xff36
-+#define GDK_Hangul_Codeinput 0xff37
-+#define GDK_Hangul_Jeonja 0xff38
-+#define GDK_Hangul_Banja 0xff39
-+#define GDK_Hangul_PreHanja 0xff3a
-+#define GDK_Hangul_PostHanja 0xff3b
-+#define GDK_Hangul_SingleCandidate 0xff3c
-+#define GDK_Hangul_MultipleCandidate 0xff3d
-+#define GDK_Hangul_PreviousCandidate 0xff3e
-+#define GDK_Hangul_Special 0xff3f
-+#define GDK_Hangul_switch 0xff7e
-+#define GDK_Hangul_Kiyeog 0xea1
-+#define GDK_Hangul_SsangKiyeog 0xea2
-+#define GDK_Hangul_KiyeogSios 0xea3
-+#define GDK_Hangul_Nieun 0xea4
-+#define GDK_Hangul_NieunJieuj 0xea5
-+#define GDK_Hangul_NieunHieuh 0xea6
-+#define GDK_Hangul_Dikeud 0xea7
-+#define GDK_Hangul_SsangDikeud 0xea8
-+#define GDK_Hangul_Rieul 0xea9
-+#define GDK_Hangul_RieulKiyeog 0xeaa
-+#define GDK_Hangul_RieulMieum 0xeab
-+#define GDK_Hangul_RieulPieub 0xeac
-+#define GDK_Hangul_RieulSios 0xead
-+#define GDK_Hangul_RieulTieut 0xeae
-+#define GDK_Hangul_RieulPhieuf 0xeaf
-+#define GDK_Hangul_RieulHieuh 0xeb0
-+#define GDK_Hangul_Mieum 0xeb1
-+#define GDK_Hangul_Pieub 0xeb2
-+#define GDK_Hangul_SsangPieub 0xeb3
-+#define GDK_Hangul_PieubSios 0xeb4
-+#define GDK_Hangul_Sios 0xeb5
-+#define GDK_Hangul_SsangSios 0xeb6
-+#define GDK_Hangul_Ieung 0xeb7
-+#define GDK_Hangul_Jieuj 0xeb8
-+#define GDK_Hangul_SsangJieuj 0xeb9
-+#define GDK_Hangul_Cieuc 0xeba
-+#define GDK_Hangul_Khieuq 0xebb
-+#define GDK_Hangul_Tieut 0xebc
-+#define GDK_Hangul_Phieuf 0xebd
-+#define GDK_Hangul_Hieuh 0xebe
-+#define GDK_Hangul_A 0xebf
-+#define GDK_Hangul_AE 0xec0
-+#define GDK_Hangul_YA 0xec1
-+#define GDK_Hangul_YAE 0xec2
-+#define GDK_Hangul_EO 0xec3
-+#define GDK_Hangul_E 0xec4
-+#define GDK_Hangul_YEO 0xec5
-+#define GDK_Hangul_YE 0xec6
-+#define GDK_Hangul_O 0xec7
-+#define GDK_Hangul_WA 0xec8
-+#define GDK_Hangul_WAE 0xec9
-+#define GDK_Hangul_OE 0xeca
-+#define GDK_Hangul_YO 0xecb
-+#define GDK_Hangul_U 0xecc
-+#define GDK_Hangul_WEO 0xecd
-+#define GDK_Hangul_WE 0xece
-+#define GDK_Hangul_WI 0xecf
-+#define GDK_Hangul_YU 0xed0
-+#define GDK_Hangul_EU 0xed1
-+#define GDK_Hangul_YI 0xed2
-+#define GDK_Hangul_I 0xed3
-+#define GDK_Hangul_J_Kiyeog 0xed4
-+#define GDK_Hangul_J_SsangKiyeog 0xed5
-+#define GDK_Hangul_J_KiyeogSios 0xed6
-+#define GDK_Hangul_J_Nieun 0xed7
-+#define GDK_Hangul_J_NieunJieuj 0xed8
-+#define GDK_Hangul_J_NieunHieuh 0xed9
-+#define GDK_Hangul_J_Dikeud 0xeda
-+#define GDK_Hangul_J_Rieul 0xedb
-+#define GDK_Hangul_J_RieulKiyeog 0xedc
-+#define GDK_Hangul_J_RieulMieum 0xedd
-+#define GDK_Hangul_J_RieulPieub 0xede
-+#define GDK_Hangul_J_RieulSios 0xedf
-+#define GDK_Hangul_J_RieulTieut 0xee0
-+#define GDK_Hangul_J_RieulPhieuf 0xee1
-+#define GDK_Hangul_J_RieulHieuh 0xee2
-+#define GDK_Hangul_J_Mieum 0xee3
-+#define GDK_Hangul_J_Pieub 0xee4
-+#define GDK_Hangul_J_PieubSios 0xee5
-+#define GDK_Hangul_J_Sios 0xee6
-+#define GDK_Hangul_J_SsangSios 0xee7
-+#define GDK_Hangul_J_Ieung 0xee8
-+#define GDK_Hangul_J_Jieuj 0xee9
-+#define GDK_Hangul_J_Cieuc 0xeea
-+#define GDK_Hangul_J_Khieuq 0xeeb
-+#define GDK_Hangul_J_Tieut 0xeec
-+#define GDK_Hangul_J_Phieuf 0xeed
-+#define GDK_Hangul_J_Hieuh 0xeee
-+#define GDK_Hangul_RieulYeorinHieuh 0xeef
-+#define GDK_Hangul_SunkyeongeumMieum 0xef0
-+#define GDK_Hangul_SunkyeongeumPieub 0xef1
-+#define GDK_Hangul_PanSios 0xef2
-+#define GDK_Hangul_KkogjiDalrinIeung 0xef3
-+#define GDK_Hangul_SunkyeongeumPhieuf 0xef4
-+#define GDK_Hangul_YeorinHieuh 0xef5
-+#define GDK_Hangul_AraeA 0xef6
-+#define GDK_Hangul_AraeAE 0xef7
-+#define GDK_Hangul_J_PanSios 0xef8
-+#define GDK_Hangul_J_KkogjiDalrinIeung 0xef9
-+#define GDK_Hangul_J_YeorinHieuh 0xefa
-+#define GDK_Korean_Won 0xeff
-+#define GDK_Armenian_ligature_ew 0x1000587
-+#define GDK_Armenian_full_stop 0x1000589
-+#define GDK_Armenian_verjaket 0x1000589
-+#define GDK_Armenian_separation_mark 0x100055d
-+#define GDK_Armenian_but 0x100055d
-+#define GDK_Armenian_hyphen 0x100058a
-+#define GDK_Armenian_yentamna 0x100058a
-+#define GDK_Armenian_exclam 0x100055c
-+#define GDK_Armenian_amanak 0x100055c
-+#define GDK_Armenian_accent 0x100055b
-+#define GDK_Armenian_shesht 0x100055b
-+#define GDK_Armenian_question 0x100055e
-+#define GDK_Armenian_paruyk 0x100055e
-+#define GDK_Armenian_AYB 0x1000531
-+#define GDK_Armenian_ayb 0x1000561
-+#define GDK_Armenian_BEN 0x1000532
-+#define GDK_Armenian_ben 0x1000562
-+#define GDK_Armenian_GIM 0x1000533
-+#define GDK_Armenian_gim 0x1000563
-+#define GDK_Armenian_DA 0x1000534
-+#define GDK_Armenian_da 0x1000564
-+#define GDK_Armenian_YECH 0x1000535
-+#define GDK_Armenian_yech 0x1000565
-+#define GDK_Armenian_ZA 0x1000536
-+#define GDK_Armenian_za 0x1000566
-+#define GDK_Armenian_E 0x1000537
-+#define GDK_Armenian_e 0x1000567
-+#define GDK_Armenian_AT 0x1000538
-+#define GDK_Armenian_at 0x1000568
-+#define GDK_Armenian_TO 0x1000539
-+#define GDK_Armenian_to 0x1000569
-+#define GDK_Armenian_ZHE 0x100053a
-+#define GDK_Armenian_zhe 0x100056a
-+#define GDK_Armenian_INI 0x100053b
-+#define GDK_Armenian_ini 0x100056b
-+#define GDK_Armenian_LYUN 0x100053c
-+#define GDK_Armenian_lyun 0x100056c
-+#define GDK_Armenian_KHE 0x100053d
-+#define GDK_Armenian_khe 0x100056d
-+#define GDK_Armenian_TSA 0x100053e
-+#define GDK_Armenian_tsa 0x100056e
-+#define GDK_Armenian_KEN 0x100053f
-+#define GDK_Armenian_ken 0x100056f
-+#define GDK_Armenian_HO 0x1000540
-+#define GDK_Armenian_ho 0x1000570
-+#define GDK_Armenian_DZA 0x1000541
-+#define GDK_Armenian_dza 0x1000571
-+#define GDK_Armenian_GHAT 0x1000542
-+#define GDK_Armenian_ghat 0x1000572
-+#define GDK_Armenian_TCHE 0x1000543
-+#define GDK_Armenian_tche 0x1000573
-+#define GDK_Armenian_MEN 0x1000544
-+#define GDK_Armenian_men 0x1000574
-+#define GDK_Armenian_HI 0x1000545
-+#define GDK_Armenian_hi 0x1000575
-+#define GDK_Armenian_NU 0x1000546
-+#define GDK_Armenian_nu 0x1000576
-+#define GDK_Armenian_SHA 0x1000547
-+#define GDK_Armenian_sha 0x1000577
-+#define GDK_Armenian_VO 0x1000548
-+#define GDK_Armenian_vo 0x1000578
-+#define GDK_Armenian_CHA 0x1000549
-+#define GDK_Armenian_cha 0x1000579
-+#define GDK_Armenian_PE 0x100054a
-+#define GDK_Armenian_pe 0x100057a
-+#define GDK_Armenian_JE 0x100054b
-+#define GDK_Armenian_je 0x100057b
-+#define GDK_Armenian_RA 0x100054c
-+#define GDK_Armenian_ra 0x100057c
-+#define GDK_Armenian_SE 0x100054d
-+#define GDK_Armenian_se 0x100057d
-+#define GDK_Armenian_VEV 0x100054e
-+#define GDK_Armenian_vev 0x100057e
-+#define GDK_Armenian_TYUN 0x100054f
-+#define GDK_Armenian_tyun 0x100057f
-+#define GDK_Armenian_RE 0x1000550
-+#define GDK_Armenian_re 0x1000580
-+#define GDK_Armenian_TSO 0x1000551
-+#define GDK_Armenian_tso 0x1000581
-+#define GDK_Armenian_VYUN 0x1000552
-+#define GDK_Armenian_vyun 0x1000582
-+#define GDK_Armenian_PYUR 0x1000553
-+#define GDK_Armenian_pyur 0x1000583
-+#define GDK_Armenian_KE 0x1000554
-+#define GDK_Armenian_ke 0x1000584
-+#define GDK_Armenian_O 0x1000555
-+#define GDK_Armenian_o 0x1000585
-+#define GDK_Armenian_FE 0x1000556
-+#define GDK_Armenian_fe 0x1000586
-+#define GDK_Armenian_apostrophe 0x100055a
-+#define GDK_Georgian_an 0x10010d0
-+#define GDK_Georgian_ban 0x10010d1
-+#define GDK_Georgian_gan 0x10010d2
-+#define GDK_Georgian_don 0x10010d3
-+#define GDK_Georgian_en 0x10010d4
-+#define GDK_Georgian_vin 0x10010d5
-+#define GDK_Georgian_zen 0x10010d6
-+#define GDK_Georgian_tan 0x10010d7
-+#define GDK_Georgian_in 0x10010d8
-+#define GDK_Georgian_kan 0x10010d9
-+#define GDK_Georgian_las 0x10010da
-+#define GDK_Georgian_man 0x10010db
-+#define GDK_Georgian_nar 0x10010dc
-+#define GDK_Georgian_on 0x10010dd
-+#define GDK_Georgian_par 0x10010de
-+#define GDK_Georgian_zhar 0x10010df
-+#define GDK_Georgian_rae 0x10010e0
-+#define GDK_Georgian_san 0x10010e1
-+#define GDK_Georgian_tar 0x10010e2
-+#define GDK_Georgian_un 0x10010e3
-+#define GDK_Georgian_phar 0x10010e4
-+#define GDK_Georgian_khar 0x10010e5
-+#define GDK_Georgian_ghan 0x10010e6
-+#define GDK_Georgian_qar 0x10010e7
-+#define GDK_Georgian_shin 0x10010e8
-+#define GDK_Georgian_chin 0x10010e9
-+#define GDK_Georgian_can 0x10010ea
-+#define GDK_Georgian_jil 0x10010eb
-+#define GDK_Georgian_cil 0x10010ec
-+#define GDK_Georgian_char 0x10010ed
-+#define GDK_Georgian_xan 0x10010ee
-+#define GDK_Georgian_jhan 0x10010ef
-+#define GDK_Georgian_hae 0x10010f0
-+#define GDK_Georgian_he 0x10010f1
-+#define GDK_Georgian_hie 0x10010f2
-+#define GDK_Georgian_we 0x10010f3
-+#define GDK_Georgian_har 0x10010f4
-+#define GDK_Georgian_hoe 0x10010f5
-+#define GDK_Georgian_fi 0x10010f6
-+#define GDK_Xabovedot 0x1001e8a
-+#define GDK_Ibreve 0x100012c
-+#define GDK_Zstroke 0x10001b5
-+#define GDK_Gcaron 0x10001e6
-+#define GDK_Ocaron 0x10001d1
-+#define GDK_Obarred 0x100019f
-+#define GDK_xabovedot 0x1001e8b
-+#define GDK_ibreve 0x100012d
-+#define GDK_zstroke 0x10001b6
-+#define GDK_gcaron 0x10001e7
-+#define GDK_ocaron 0x10001d2
-+#define GDK_obarred 0x1000275
-+#define GDK_SCHWA 0x100018f
-+#define GDK_schwa 0x1000259
-+#define GDK_Lbelowdot 0x1001e36
-+#define GDK_lbelowdot 0x1001e37
-+#define GDK_Abelowdot 0x1001ea0
-+#define GDK_abelowdot 0x1001ea1
-+#define GDK_Ahook 0x1001ea2
-+#define GDK_ahook 0x1001ea3
-+#define GDK_Acircumflexacute 0x1001ea4
-+#define GDK_acircumflexacute 0x1001ea5
-+#define GDK_Acircumflexgrave 0x1001ea6
-+#define GDK_acircumflexgrave 0x1001ea7
-+#define GDK_Acircumflexhook 0x1001ea8
-+#define GDK_acircumflexhook 0x1001ea9
-+#define GDK_Acircumflextilde 0x1001eaa
-+#define GDK_acircumflextilde 0x1001eab
-+#define GDK_Acircumflexbelowdot 0x1001eac
-+#define GDK_acircumflexbelowdot 0x1001ead
-+#define GDK_Abreveacute 0x1001eae
-+#define GDK_abreveacute 0x1001eaf
-+#define GDK_Abrevegrave 0x1001eb0
-+#define GDK_abrevegrave 0x1001eb1
-+#define GDK_Abrevehook 0x1001eb2
-+#define GDK_abrevehook 0x1001eb3
-+#define GDK_Abrevetilde 0x1001eb4
-+#define GDK_abrevetilde 0x1001eb5
-+#define GDK_Abrevebelowdot 0x1001eb6
-+#define GDK_abrevebelowdot 0x1001eb7
-+#define GDK_Ebelowdot 0x1001eb8
-+#define GDK_ebelowdot 0x1001eb9
-+#define GDK_Ehook 0x1001eba
-+#define GDK_ehook 0x1001ebb
-+#define GDK_Etilde 0x1001ebc
-+#define GDK_etilde 0x1001ebd
-+#define GDK_Ecircumflexacute 0x1001ebe
-+#define GDK_ecircumflexacute 0x1001ebf
-+#define GDK_Ecircumflexgrave 0x1001ec0
-+#define GDK_ecircumflexgrave 0x1001ec1
-+#define GDK_Ecircumflexhook 0x1001ec2
-+#define GDK_ecircumflexhook 0x1001ec3
-+#define GDK_Ecircumflextilde 0x1001ec4
-+#define GDK_ecircumflextilde 0x1001ec5
-+#define GDK_Ecircumflexbelowdot 0x1001ec6
-+#define GDK_ecircumflexbelowdot 0x1001ec7
-+#define GDK_Ihook 0x1001ec8
-+#define GDK_ihook 0x1001ec9
-+#define GDK_Ibelowdot 0x1001eca
-+#define GDK_ibelowdot 0x1001ecb
-+#define GDK_Obelowdot 0x1001ecc
-+#define GDK_obelowdot 0x1001ecd
-+#define GDK_Ohook 0x1001ece
-+#define GDK_ohook 0x1001ecf
-+#define GDK_Ocircumflexacute 0x1001ed0
-+#define GDK_ocircumflexacute 0x1001ed1
-+#define GDK_Ocircumflexgrave 0x1001ed2
-+#define GDK_ocircumflexgrave 0x1001ed3
-+#define GDK_Ocircumflexhook 0x1001ed4
-+#define GDK_ocircumflexhook 0x1001ed5
-+#define GDK_Ocircumflextilde 0x1001ed6
-+#define GDK_ocircumflextilde 0x1001ed7
-+#define GDK_Ocircumflexbelowdot 0x1001ed8
-+#define GDK_ocircumflexbelowdot 0x1001ed9
-+#define GDK_Ohornacute 0x1001eda
-+#define GDK_ohornacute 0x1001edb
-+#define GDK_Ohorngrave 0x1001edc
-+#define GDK_ohorngrave 0x1001edd
-+#define GDK_Ohornhook 0x1001ede
-+#define GDK_ohornhook 0x1001edf
-+#define GDK_Ohorntilde 0x1001ee0
-+#define GDK_ohorntilde 0x1001ee1
-+#define GDK_Ohornbelowdot 0x1001ee2
-+#define GDK_ohornbelowdot 0x1001ee3
-+#define GDK_Ubelowdot 0x1001ee4
-+#define GDK_ubelowdot 0x1001ee5
-+#define GDK_Uhook 0x1001ee6
-+#define GDK_uhook 0x1001ee7
-+#define GDK_Uhornacute 0x1001ee8
-+#define GDK_uhornacute 0x1001ee9
-+#define GDK_Uhorngrave 0x1001eea
-+#define GDK_uhorngrave 0x1001eeb
-+#define GDK_Uhornhook 0x1001eec
-+#define GDK_uhornhook 0x1001eed
-+#define GDK_Uhorntilde 0x1001eee
-+#define GDK_uhorntilde 0x1001eef
-+#define GDK_Uhornbelowdot 0x1001ef0
-+#define GDK_uhornbelowdot 0x1001ef1
-+#define GDK_Ybelowdot 0x1001ef4
-+#define GDK_ybelowdot 0x1001ef5
-+#define GDK_Yhook 0x1001ef6
-+#define GDK_yhook 0x1001ef7
-+#define GDK_Ytilde 0x1001ef8
-+#define GDK_ytilde 0x1001ef9
-+#define GDK_Ohorn 0x10001a0
-+#define GDK_ohorn 0x10001a1
-+#define GDK_Uhorn 0x10001af
-+#define GDK_uhorn 0x10001b0
-+#define GDK_EcuSign 0x10020a0
-+#define GDK_ColonSign 0x10020a1
-+#define GDK_CruzeiroSign 0x10020a2
-+#define GDK_FFrancSign 0x10020a3
-+#define GDK_LiraSign 0x10020a4
-+#define GDK_MillSign 0x10020a5
-+#define GDK_NairaSign 0x10020a6
-+#define GDK_PesetaSign 0x10020a7
-+#define GDK_RupeeSign 0x10020a8
-+#define GDK_WonSign 0x10020a9
-+#define GDK_NewSheqelSign 0x10020aa
-+#define GDK_DongSign 0x10020ab
-+#define GDK_EuroSign 0x20ac
-+#define GDK_zerosuperior 0x1002070
-+#define GDK_foursuperior 0x1002074
-+#define GDK_fivesuperior 0x1002075
-+#define GDK_sixsuperior 0x1002076
-+#define GDK_sevensuperior 0x1002077
-+#define GDK_eightsuperior 0x1002078
-+#define GDK_ninesuperior 0x1002079
-+#define GDK_zerosubscript 0x1002080
-+#define GDK_onesubscript 0x1002081
-+#define GDK_twosubscript 0x1002082
-+#define GDK_threesubscript 0x1002083
-+#define GDK_foursubscript 0x1002084
-+#define GDK_fivesubscript 0x1002085
-+#define GDK_sixsubscript 0x1002086
-+#define GDK_sevensubscript 0x1002087
-+#define GDK_eightsubscript 0x1002088
-+#define GDK_ninesubscript 0x1002089
-+#define GDK_partdifferential 0x1002202
-+#define GDK_emptyset 0x1002205
-+#define GDK_elementof 0x1002208
-+#define GDK_notelementof 0x1002209
-+#define GDK_containsas 0x100220b
-+#define GDK_squareroot 0x100221a
-+#define GDK_cuberoot 0x100221b
-+#define GDK_fourthroot 0x100221c
-+#define GDK_dintegral 0x100222c
-+#define GDK_tintegral 0x100222d
-+#define GDK_because 0x1002235
-+#define GDK_approxeq 0x1002248
-+#define GDK_notapproxeq 0x1002247
-+#define GDK_notidentical 0x1002262
-+#define GDK_stricteq 0x1002263
-+#define GDK_braille_dot_1 0xfff1
-+#define GDK_braille_dot_2 0xfff2
-+#define GDK_braille_dot_3 0xfff3
-+#define GDK_braille_dot_4 0xfff4
-+#define GDK_braille_dot_5 0xfff5
-+#define GDK_braille_dot_6 0xfff6
-+#define GDK_braille_dot_7 0xfff7
-+#define GDK_braille_dot_8 0xfff8
-+#define GDK_braille_dot_9 0xfff9
-+#define GDK_braille_dot_10 0xfffa
-+#define GDK_braille_blank 0x1002800
-+#define GDK_braille_dots_1 0x1002801
-+#define GDK_braille_dots_2 0x1002802
-+#define GDK_braille_dots_12 0x1002803
-+#define GDK_braille_dots_3 0x1002804
-+#define GDK_braille_dots_13 0x1002805
-+#define GDK_braille_dots_23 0x1002806
-+#define GDK_braille_dots_123 0x1002807
-+#define GDK_braille_dots_4 0x1002808
-+#define GDK_braille_dots_14 0x1002809
-+#define GDK_braille_dots_24 0x100280a
-+#define GDK_braille_dots_124 0x100280b
-+#define GDK_braille_dots_34 0x100280c
-+#define GDK_braille_dots_134 0x100280d
-+#define GDK_braille_dots_234 0x100280e
-+#define GDK_braille_dots_1234 0x100280f
-+#define GDK_braille_dots_5 0x1002810
-+#define GDK_braille_dots_15 0x1002811
-+#define GDK_braille_dots_25 0x1002812
-+#define GDK_braille_dots_125 0x1002813
-+#define GDK_braille_dots_35 0x1002814
-+#define GDK_braille_dots_135 0x1002815
-+#define GDK_braille_dots_235 0x1002816
-+#define GDK_braille_dots_1235 0x1002817
-+#define GDK_braille_dots_45 0x1002818
-+#define GDK_braille_dots_145 0x1002819
-+#define GDK_braille_dots_245 0x100281a
-+#define GDK_braille_dots_1245 0x100281b
-+#define GDK_braille_dots_345 0x100281c
-+#define GDK_braille_dots_1345 0x100281d
-+#define GDK_braille_dots_2345 0x100281e
-+#define GDK_braille_dots_12345 0x100281f
-+#define GDK_braille_dots_6 0x1002820
-+#define GDK_braille_dots_16 0x1002821
-+#define GDK_braille_dots_26 0x1002822
-+#define GDK_braille_dots_126 0x1002823
-+#define GDK_braille_dots_36 0x1002824
-+#define GDK_braille_dots_136 0x1002825
-+#define GDK_braille_dots_236 0x1002826
-+#define GDK_braille_dots_1236 0x1002827
-+#define GDK_braille_dots_46 0x1002828
-+#define GDK_braille_dots_146 0x1002829
-+#define GDK_braille_dots_246 0x100282a
-+#define GDK_braille_dots_1246 0x100282b
-+#define GDK_braille_dots_346 0x100282c
-+#define GDK_braille_dots_1346 0x100282d
-+#define GDK_braille_dots_2346 0x100282e
-+#define GDK_braille_dots_12346 0x100282f
-+#define GDK_braille_dots_56 0x1002830
-+#define GDK_braille_dots_156 0x1002831
-+#define GDK_braille_dots_256 0x1002832
-+#define GDK_braille_dots_1256 0x1002833
-+#define GDK_braille_dots_356 0x1002834
-+#define GDK_braille_dots_1356 0x1002835
-+#define GDK_braille_dots_2356 0x1002836
-+#define GDK_braille_dots_12356 0x1002837
-+#define GDK_braille_dots_456 0x1002838
-+#define GDK_braille_dots_1456 0x1002839
-+#define GDK_braille_dots_2456 0x100283a
-+#define GDK_braille_dots_12456 0x100283b
-+#define GDK_braille_dots_3456 0x100283c
-+#define GDK_braille_dots_13456 0x100283d
-+#define GDK_braille_dots_23456 0x100283e
-+#define GDK_braille_dots_123456 0x100283f
-+#define GDK_braille_dots_7 0x1002840
-+#define GDK_braille_dots_17 0x1002841
-+#define GDK_braille_dots_27 0x1002842
-+#define GDK_braille_dots_127 0x1002843
-+#define GDK_braille_dots_37 0x1002844
-+#define GDK_braille_dots_137 0x1002845
-+#define GDK_braille_dots_237 0x1002846
-+#define GDK_braille_dots_1237 0x1002847
-+#define GDK_braille_dots_47 0x1002848
-+#define GDK_braille_dots_147 0x1002849
-+#define GDK_braille_dots_247 0x100284a
-+#define GDK_braille_dots_1247 0x100284b
-+#define GDK_braille_dots_347 0x100284c
-+#define GDK_braille_dots_1347 0x100284d
-+#define GDK_braille_dots_2347 0x100284e
-+#define GDK_braille_dots_12347 0x100284f
-+#define GDK_braille_dots_57 0x1002850
-+#define GDK_braille_dots_157 0x1002851
-+#define GDK_braille_dots_257 0x1002852
-+#define GDK_braille_dots_1257 0x1002853
-+#define GDK_braille_dots_357 0x1002854
-+#define GDK_braille_dots_1357 0x1002855
-+#define GDK_braille_dots_2357 0x1002856
-+#define GDK_braille_dots_12357 0x1002857
-+#define GDK_braille_dots_457 0x1002858
-+#define GDK_braille_dots_1457 0x1002859
-+#define GDK_braille_dots_2457 0x100285a
-+#define GDK_braille_dots_12457 0x100285b
-+#define GDK_braille_dots_3457 0x100285c
-+#define GDK_braille_dots_13457 0x100285d
-+#define GDK_braille_dots_23457 0x100285e
-+#define GDK_braille_dots_123457 0x100285f
-+#define GDK_braille_dots_67 0x1002860
-+#define GDK_braille_dots_167 0x1002861
-+#define GDK_braille_dots_267 0x1002862
-+#define GDK_braille_dots_1267 0x1002863
-+#define GDK_braille_dots_367 0x1002864
-+#define GDK_braille_dots_1367 0x1002865
-+#define GDK_braille_dots_2367 0x1002866
-+#define GDK_braille_dots_12367 0x1002867
-+#define GDK_braille_dots_467 0x1002868
-+#define GDK_braille_dots_1467 0x1002869
-+#define GDK_braille_dots_2467 0x100286a
-+#define GDK_braille_dots_12467 0x100286b
-+#define GDK_braille_dots_3467 0x100286c
-+#define GDK_braille_dots_13467 0x100286d
-+#define GDK_braille_dots_23467 0x100286e
-+#define GDK_braille_dots_123467 0x100286f
-+#define GDK_braille_dots_567 0x1002870
-+#define GDK_braille_dots_1567 0x1002871
-+#define GDK_braille_dots_2567 0x1002872
-+#define GDK_braille_dots_12567 0x1002873
-+#define GDK_braille_dots_3567 0x1002874
-+#define GDK_braille_dots_13567 0x1002875
-+#define GDK_braille_dots_23567 0x1002876
-+#define GDK_braille_dots_123567 0x1002877
-+#define GDK_braille_dots_4567 0x1002878
-+#define GDK_braille_dots_14567 0x1002879
-+#define GDK_braille_dots_24567 0x100287a
-+#define GDK_braille_dots_124567 0x100287b
-+#define GDK_braille_dots_34567 0x100287c
-+#define GDK_braille_dots_134567 0x100287d
-+#define GDK_braille_dots_234567 0x100287e
-+#define GDK_braille_dots_1234567 0x100287f
-+#define GDK_braille_dots_8 0x1002880
-+#define GDK_braille_dots_18 0x1002881
-+#define GDK_braille_dots_28 0x1002882
-+#define GDK_braille_dots_128 0x1002883
-+#define GDK_braille_dots_38 0x1002884
-+#define GDK_braille_dots_138 0x1002885
-+#define GDK_braille_dots_238 0x1002886
-+#define GDK_braille_dots_1238 0x1002887
-+#define GDK_braille_dots_48 0x1002888
-+#define GDK_braille_dots_148 0x1002889
-+#define GDK_braille_dots_248 0x100288a
-+#define GDK_braille_dots_1248 0x100288b
-+#define GDK_braille_dots_348 0x100288c
-+#define GDK_braille_dots_1348 0x100288d
-+#define GDK_braille_dots_2348 0x100288e
-+#define GDK_braille_dots_12348 0x100288f
-+#define GDK_braille_dots_58 0x1002890
-+#define GDK_braille_dots_158 0x1002891
-+#define GDK_braille_dots_258 0x1002892
-+#define GDK_braille_dots_1258 0x1002893
-+#define GDK_braille_dots_358 0x1002894
-+#define GDK_braille_dots_1358 0x1002895
-+#define GDK_braille_dots_2358 0x1002896
-+#define GDK_braille_dots_12358 0x1002897
-+#define GDK_braille_dots_458 0x1002898
-+#define GDK_braille_dots_1458 0x1002899
-+#define GDK_braille_dots_2458 0x100289a
-+#define GDK_braille_dots_12458 0x100289b
-+#define GDK_braille_dots_3458 0x100289c
-+#define GDK_braille_dots_13458 0x100289d
-+#define GDK_braille_dots_23458 0x100289e
-+#define GDK_braille_dots_123458 0x100289f
-+#define GDK_braille_dots_68 0x10028a0
-+#define GDK_braille_dots_168 0x10028a1
-+#define GDK_braille_dots_268 0x10028a2
-+#define GDK_braille_dots_1268 0x10028a3
-+#define GDK_braille_dots_368 0x10028a4
-+#define GDK_braille_dots_1368 0x10028a5
-+#define GDK_braille_dots_2368 0x10028a6
-+#define GDK_braille_dots_12368 0x10028a7
-+#define GDK_braille_dots_468 0x10028a8
-+#define GDK_braille_dots_1468 0x10028a9
-+#define GDK_braille_dots_2468 0x10028aa
-+#define GDK_braille_dots_12468 0x10028ab
-+#define GDK_braille_dots_3468 0x10028ac
-+#define GDK_braille_dots_13468 0x10028ad
-+#define GDK_braille_dots_23468 0x10028ae
-+#define GDK_braille_dots_123468 0x10028af
-+#define GDK_braille_dots_568 0x10028b0
-+#define GDK_braille_dots_1568 0x10028b1
-+#define GDK_braille_dots_2568 0x10028b2
-+#define GDK_braille_dots_12568 0x10028b3
-+#define GDK_braille_dots_3568 0x10028b4
-+#define GDK_braille_dots_13568 0x10028b5
-+#define GDK_braille_dots_23568 0x10028b6
-+#define GDK_braille_dots_123568 0x10028b7
-+#define GDK_braille_dots_4568 0x10028b8
-+#define GDK_braille_dots_14568 0x10028b9
-+#define GDK_braille_dots_24568 0x10028ba
-+#define GDK_braille_dots_124568 0x10028bb
-+#define GDK_braille_dots_34568 0x10028bc
-+#define GDK_braille_dots_134568 0x10028bd
-+#define GDK_braille_dots_234568 0x10028be
-+#define GDK_braille_dots_1234568 0x10028bf
-+#define GDK_braille_dots_78 0x10028c0
-+#define GDK_braille_dots_178 0x10028c1
-+#define GDK_braille_dots_278 0x10028c2
-+#define GDK_braille_dots_1278 0x10028c3
-+#define GDK_braille_dots_378 0x10028c4
-+#define GDK_braille_dots_1378 0x10028c5
-+#define GDK_braille_dots_2378 0x10028c6
-+#define GDK_braille_dots_12378 0x10028c7
-+#define GDK_braille_dots_478 0x10028c8
-+#define GDK_braille_dots_1478 0x10028c9
-+#define GDK_braille_dots_2478 0x10028ca
-+#define GDK_braille_dots_12478 0x10028cb
-+#define GDK_braille_dots_3478 0x10028cc
-+#define GDK_braille_dots_13478 0x10028cd
-+#define GDK_braille_dots_23478 0x10028ce
-+#define GDK_braille_dots_123478 0x10028cf
-+#define GDK_braille_dots_578 0x10028d0
-+#define GDK_braille_dots_1578 0x10028d1
-+#define GDK_braille_dots_2578 0x10028d2
-+#define GDK_braille_dots_12578 0x10028d3
-+#define GDK_braille_dots_3578 0x10028d4
-+#define GDK_braille_dots_13578 0x10028d5
-+#define GDK_braille_dots_23578 0x10028d6
-+#define GDK_braille_dots_123578 0x10028d7
-+#define GDK_braille_dots_4578 0x10028d8
-+#define GDK_braille_dots_14578 0x10028d9
-+#define GDK_braille_dots_24578 0x10028da
-+#define GDK_braille_dots_124578 0x10028db
-+#define GDK_braille_dots_34578 0x10028dc
-+#define GDK_braille_dots_134578 0x10028dd
-+#define GDK_braille_dots_234578 0x10028de
-+#define GDK_braille_dots_1234578 0x10028df
-+#define GDK_braille_dots_678 0x10028e0
-+#define GDK_braille_dots_1678 0x10028e1
-+#define GDK_braille_dots_2678 0x10028e2
-+#define GDK_braille_dots_12678 0x10028e3
-+#define GDK_braille_dots_3678 0x10028e4
-+#define GDK_braille_dots_13678 0x10028e5
-+#define GDK_braille_dots_23678 0x10028e6
-+#define GDK_braille_dots_123678 0x10028e7
-+#define GDK_braille_dots_4678 0x10028e8
-+#define GDK_braille_dots_14678 0x10028e9
-+#define GDK_braille_dots_24678 0x10028ea
-+#define GDK_braille_dots_124678 0x10028eb
-+#define GDK_braille_dots_34678 0x10028ec
-+#define GDK_braille_dots_134678 0x10028ed
-+#define GDK_braille_dots_234678 0x10028ee
-+#define GDK_braille_dots_1234678 0x10028ef
-+#define GDK_braille_dots_5678 0x10028f0
-+#define GDK_braille_dots_15678 0x10028f1
-+#define GDK_braille_dots_25678 0x10028f2
-+#define GDK_braille_dots_125678 0x10028f3
-+#define GDK_braille_dots_35678 0x10028f4
-+#define GDK_braille_dots_135678 0x10028f5
-+#define GDK_braille_dots_235678 0x10028f6
-+#define GDK_braille_dots_1235678 0x10028f7
-+#define GDK_braille_dots_45678 0x10028f8
-+#define GDK_braille_dots_145678 0x10028f9
-+#define GDK_braille_dots_245678 0x10028fa
-+#define GDK_braille_dots_1245678 0x10028fb
-+#define GDK_braille_dots_345678 0x10028fc
-+#define GDK_braille_dots_1345678 0x10028fd
-+#define GDK_braille_dots_2345678 0x10028fe
-+#define GDK_braille_dots_12345678 0x10028ff
-+#define GDK_ModeLock 0x1008ff01
-+#define GDK_MonBrightnessUp 0x1008ff02
-+#define GDK_MonBrightnessDown 0x1008ff03
-+#define GDK_KbdLightOnOff 0x1008ff04
-+#define GDK_KbdBrightnessUp 0x1008ff05
-+#define GDK_KbdBrightnessDown 0x1008ff06
-+#define GDK_Standby 0x1008ff10
-+#define GDK_AudioLowerVolume 0x1008ff11
-+#define GDK_AudioMute 0x1008ff12
-+#define GDK_AudioRaiseVolume 0x1008ff13
-+#define GDK_AudioPlay 0x1008ff14
-+#define GDK_AudioStop 0x1008ff15
-+#define GDK_AudioPrev 0x1008ff16
-+#define GDK_AudioNext 0x1008ff17
-+#define GDK_HomePage 0x1008ff18
-+#define GDK_Mail 0x1008ff19
-+#define GDK_Start 0x1008ff1a
-+#define GDK_Search 0x1008ff1b
-+#define GDK_AudioRecord 0x1008ff1c
-+#define GDK_Calculator 0x1008ff1d
-+#define GDK_Memo 0x1008ff1e
-+#define GDK_ToDoList 0x1008ff1f
-+#define GDK_Calendar 0x1008ff20
-+#define GDK_PowerDown 0x1008ff21
-+#define GDK_ContrastAdjust 0x1008ff22
-+#define GDK_RockerUp 0x1008ff23
-+#define GDK_RockerDown 0x1008ff24
-+#define GDK_RockerEnter 0x1008ff25
-+#define GDK_Back 0x1008ff26
-+#define GDK_Forward 0x1008ff27
-+#define GDK_Stop 0x1008ff28
-+#define GDK_Refresh 0x1008ff29
-+#define GDK_PowerOff 0x1008ff2a
-+#define GDK_WakeUp 0x1008ff2b
-+#define GDK_Eject 0x1008ff2c
-+#define GDK_ScreenSaver 0x1008ff2d
-+#define GDK_WWW 0x1008ff2e
-+#define GDK_Sleep 0x1008ff2f
-+#define GDK_Favorites 0x1008ff30
-+#define GDK_AudioPause 0x1008ff31
-+#define GDK_AudioMedia 0x1008ff32
-+#define GDK_MyComputer 0x1008ff33
-+#define GDK_VendorHome 0x1008ff34
-+#define GDK_LightBulb 0x1008ff35
-+#define GDK_Shop 0x1008ff36
-+#define GDK_History 0x1008ff37
-+#define GDK_OpenURL 0x1008ff38
-+#define GDK_AddFavorite 0x1008ff39
-+#define GDK_HotLinks 0x1008ff3a
-+#define GDK_BrightnessAdjust 0x1008ff3b
-+#define GDK_Finance 0x1008ff3c
-+#define GDK_Community 0x1008ff3d
-+#define GDK_AudioRewind 0x1008ff3e
-+#define GDK_BackForward 0x1008ff3f
-+#define GDK_Launch0 0x1008ff40
-+#define GDK_Launch1 0x1008ff41
-+#define GDK_Launch2 0x1008ff42
-+#define GDK_Launch3 0x1008ff43
-+#define GDK_Launch4 0x1008ff44
-+#define GDK_Launch5 0x1008ff45
-+#define GDK_Launch6 0x1008ff46
-+#define GDK_Launch7 0x1008ff47
-+#define GDK_Launch8 0x1008ff48
-+#define GDK_Launch9 0x1008ff49
-+#define GDK_LaunchA 0x1008ff4a
-+#define GDK_LaunchB 0x1008ff4b
-+#define GDK_LaunchC 0x1008ff4c
-+#define GDK_LaunchD 0x1008ff4d
-+#define GDK_LaunchE 0x1008ff4e
-+#define GDK_LaunchF 0x1008ff4f
-+#define GDK_ApplicationLeft 0x1008ff50
-+#define GDK_ApplicationRight 0x1008ff51
-+#define GDK_Book 0x1008ff52
-+#define GDK_CD 0x1008ff53
-+#define GDK_WindowClear 0x1008ff55
-+#define GDK_Close 0x1008ff56
-+#define GDK_Copy 0x1008ff57
-+#define GDK_Cut 0x1008ff58
-+#define GDK_Display 0x1008ff59
-+#define GDK_DOS 0x1008ff5a
-+#define GDK_Documents 0x1008ff5b
-+#define GDK_Excel 0x1008ff5c
-+#define GDK_Explorer 0x1008ff5d
-+#define GDK_Game 0x1008ff5e
-+#define GDK_Go 0x1008ff5f
-+#define GDK_iTouch 0x1008ff60
-+#define GDK_LogOff 0x1008ff61
-+#define GDK_Market 0x1008ff62
-+#define GDK_Meeting 0x1008ff63
-+#define GDK_MenuKB 0x1008ff65
-+#define GDK_MenuPB 0x1008ff66
-+#define GDK_MySites 0x1008ff67
-+#define GDK_New 0x1008ff68
-+#define GDK_News 0x1008ff69
-+#define GDK_OfficeHome 0x1008ff6a
-+#define GDK_Open 0x1008ff6b
-+#define GDK_Option 0x1008ff6c
-+#define GDK_Paste 0x1008ff6d
-+#define GDK_Phone 0x1008ff6e
-+#define GDK_Reply 0x1008ff72
-+#define GDK_Reload 0x1008ff73
-+#define GDK_RotateWindows 0x1008ff74
-+#define GDK_RotationPB 0x1008ff75
-+#define GDK_RotationKB 0x1008ff76
-+#define GDK_Save 0x1008ff77
-+#define GDK_ScrollUp 0x1008ff78
-+#define GDK_ScrollDown 0x1008ff79
-+#define GDK_ScrollClick 0x1008ff7a
-+#define GDK_Send 0x1008ff7b
-+#define GDK_Spell 0x1008ff7c
-+#define GDK_SplitScreen 0x1008ff7d
-+#define GDK_Support 0x1008ff7e
-+#define GDK_TaskPane 0x1008ff7f
-+#define GDK_Terminal 0x1008ff80
-+#define GDK_Tools 0x1008ff81
-+#define GDK_Travel 0x1008ff82
-+#define GDK_UserPB 0x1008ff84
-+#define GDK_User1KB 0x1008ff85
-+#define GDK_User2KB 0x1008ff86
-+#define GDK_Video 0x1008ff87
-+#define GDK_WheelButton 0x1008ff88
-+#define GDK_Word 0x1008ff89
-+#define GDK_Xfer 0x1008ff8a
-+#define GDK_ZoomIn 0x1008ff8b
-+#define GDK_ZoomOut 0x1008ff8c
-+#define GDK_Away 0x1008ff8d
-+#define GDK_Messenger 0x1008ff8e
-+#define GDK_WebCam 0x1008ff8f
-+#define GDK_MailForward 0x1008ff90
-+#define GDK_Pictures 0x1008ff91
-+#define GDK_Music 0x1008ff92
-+#define GDK_Battery 0x1008ff93
-+#define GDK_Bluetooth 0x1008ff94
-+#define GDK_WLAN 0x1008ff95
-+#define GDK_UWB 0x1008ff96
-+#define GDK_AudioForward 0x1008ff97
-+#define GDK_AudioRepeat 0x1008ff98
-+#define GDK_AudioRandomPlay 0x1008ff99
-+#define GDK_Subtitle 0x1008ff9a
-+#define GDK_AudioCycleTrack 0x1008ff9b
-+#define GDK_CycleAngle 0x1008ff9c
-+#define GDK_FrameBack 0x1008ff9d
-+#define GDK_FrameForward 0x1008ff9e
-+#define GDK_Time 0x1008ff9f
-+#define GDK_SelectButton 0x1008ffa0
-+#define GDK_View 0x1008ffa1
-+#define GDK_TopMenu 0x1008ffa2
-+#define GDK_Red 0x1008ffa3
-+#define GDK_Green 0x1008ffa4
-+#define GDK_Yellow 0x1008ffa5
-+#define GDK_Blue 0x1008ffa6
-+#define GDK_Suspend 0x1008ffa7
-+#define GDK_Hibernate 0x1008ffa8
-+#define GDK_TouchpadToggle 0x1008ffa9
-+#define GDK_Switch_VT_1 0x1008fe01
-+#define GDK_Switch_VT_2 0x1008fe02
-+#define GDK_Switch_VT_3 0x1008fe03
-+#define GDK_Switch_VT_4 0x1008fe04
-+#define GDK_Switch_VT_5 0x1008fe05
-+#define GDK_Switch_VT_6 0x1008fe06
-+#define GDK_Switch_VT_7 0x1008fe07
-+#define GDK_Switch_VT_8 0x1008fe08
-+#define GDK_Switch_VT_9 0x1008fe09
-+#define GDK_Switch_VT_10 0x1008fe0a
-+#define GDK_Switch_VT_11 0x1008fe0b
-+#define GDK_Switch_VT_12 0x1008fe0c
-+#define GDK_Ungrab 0x1008fe20
-+#define GDK_ClearGrab 0x1008fe21
-+#define GDK_Next_VMode 0x1008fe22
-+#define GDK_Prev_VMode 0x1008fe23
-+
-+#endif /* __GDK_KEYSYMS_COMPAT_H__ */
-diff -up mozilla-aurora/widget/gtk/nsDeviceContextSpecG.h.build-gtk2 mozilla-aurora/widget/gtk/nsDeviceContextSpecG.h
---- mozilla-aurora/widget/gtk/nsDeviceContextSpecG.h.build-gtk2	2015-12-16 16:47:23.000000000 +0100
-+++ mozilla-aurora/widget/gtk/nsDeviceContextSpecG.h	2016-01-15 17:38:34.978272200 +0100
-@@ -16,7 +16,12 @@
- #include "nsCRT.h" /* should be <limits.h>? */
- 
- #include <gtk/gtk.h>
-+#if (MOZ_WIDGET_GTK == 2)
-+#include <gtk/gtkprinter.h>
-+#include <gtk/gtkprintjob.h>
-+#else
- #include <gtk/gtkunixprint.h>
-+#endif
- 
- #define NS_PORTRAIT  0
- #define NS_LANDSCAPE 1
-diff -up mozilla-aurora/widget/gtk/nsFilePicker.cpp.build-gtk2 mozilla-aurora/widget/gtk/nsFilePicker.cpp
---- mozilla-aurora/widget/gtk/nsFilePicker.cpp.build-gtk2	2015-12-16 16:47:23.000000000 +0100
-+++ mozilla-aurora/widget/gtk/nsFilePicker.cpp	2016-01-15 17:38:34.978272200 +0100
-@@ -125,9 +125,11 @@ UpdateFilePreviewWidget(GtkFileChooser *
-     return;
-   }
- 
-+#if GTK_CHECK_VERSION(2,12,0)
-   GdkPixbuf *preview_pixbuf_temp = preview_pixbuf;
-   preview_pixbuf = gdk_pixbuf_apply_embedded_orientation(preview_pixbuf_temp);
-   g_object_unref(preview_pixbuf_temp);
-+#endif
- 
-   // This is the easiest way to do center alignment without worrying about containers
-   // Minimum 3px padding each side (hence the 6) just to make things nice
-diff -up mozilla-aurora/widget/gtk/nsPrintDialogGTK.cpp.build-gtk2 mozilla-aurora/widget/gtk/nsPrintDialogGTK.cpp
---- mozilla-aurora/widget/gtk/nsPrintDialogGTK.cpp.build-gtk2	2015-12-16 16:47:23.000000000 +0100
-+++ mozilla-aurora/widget/gtk/nsPrintDialogGTK.cpp	2016-01-15 17:38:34.979272199 +0100
-@@ -4,7 +4,13 @@
-  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- 
- #include <gtk/gtk.h>
-+#if (MOZ_WIDGET_GTK == 2)
-+#include <gtk/gtkprinter.h>
-+#include <gtk/gtkprintjob.h>
-+#include <gtk/gtkprintunixdialog.h>
-+#else
- #include <gtk/gtkunixprint.h>
-+#endif
- #include <stdlib.h>
- 
- #include "mozilla/ArrayUtils.h"
-diff -up mozilla-aurora/widget/gtk/nsPrintSettingsGTK.h.build-gtk2 mozilla-aurora/widget/gtk/nsPrintSettingsGTK.h
---- mozilla-aurora/widget/gtk/nsPrintSettingsGTK.h.build-gtk2	2015-12-16 16:47:23.000000000 +0100
-+++ mozilla-aurora/widget/gtk/nsPrintSettingsGTK.h	2016-01-15 17:38:34.979272199 +0100
-@@ -11,7 +11,12 @@
- 
- extern "C" {
- #include <gtk/gtk.h>
-+#if (MOZ_WIDGET_GTK == 2)
-+#include <gtk/gtkprinter.h>
-+#include <gtk/gtkprintjob.h>
-+#else
- #include <gtk/gtkunixprint.h>
-+#endif
- }
- 
- #define NS_PRINTSETTINGSGTK_IID \
-diff -up mozilla-aurora/widget/gtk/nsWindow.cpp.build-gtk2 mozilla-aurora/widget/gtk/nsWindow.cpp
---- mozilla-aurora/widget/gtk/nsWindow.cpp.build-gtk2	2015-12-16 16:47:23.000000000 +0100
-+++ mozilla-aurora/widget/gtk/nsWindow.cpp	2016-01-15 17:38:34.980272198 +0100
-@@ -4895,7 +4895,8 @@ FullscreenTransitionWindow::FullscreenTr
-     bgColor.red = bgColor.green = bgColor.blue = 0;
-     gtk_widget_modify_bg(mWindow, GTK_STATE_NORMAL, &bgColor);
- 
--    gtk_window_set_opacity(gtkWin, 0.0);
-+    // Opacity not supported in gtk 2.10
-+    // gtk_window_set_opacity(gtkWin, 0.0);
-     gtk_widget_show(mWindow);
- }
- 
-@@ -4935,7 +4936,8 @@ FullscreenTransitionData::TimeoutCallbac
-     if (data->mStage == nsIWidget::eAfterFullscreenToggle) {
-         opacity = 1.0 - opacity;
-     }
--    gtk_window_set_opacity(GTK_WINDOW(data->mWindow->mWindow), opacity);
-+    // Opacity not supported in gtk 2.10
-+    // gtk_window_set_opacity(GTK_WINDOW(data->mWindow->mWindow), opacity);
- 
-     if (data->mStep != data->mTotalSteps) {
-         return TRUE;
-diff -up mozilla-aurora/widget/gtk/nsBidiKeyboard.cpp.build-gtk2 mozilla-aurora/widget/gtk/nsBidiKeyboard.cpp
---- mozilla-aurora/widget/gtk/nsBidiKeyboard.cpp.build-gtk2	2016-01-18 09:41:47.302300030 +0100
-+++ mozilla-aurora/widget/gtk/nsBidiKeyboard.cpp	2016-01-18 09:43:50.663288859 +0100
-@@ -10,6 +10,11 @@
- #include "nsBidiKeyboard.h"
- #include <gtk/gtk.h>
- 
-+#if (MOZ_WIDGET_GTK == 2)
-+typedef gboolean (*GdkKeymapHaveBidiLayoutsType)(GdkKeymap *keymap);
-+static GdkKeymapHaveBidiLayoutsType GdkKeymapHaveBidiLayouts = nullptr;
-+#endif
-+
- NS_IMPL_ISUPPORTS(nsBidiKeyboard, nsIBidiKeyboard)
- 
- nsBidiKeyboard::nsBidiKeyboard()
-@@ -20,21 +25,32 @@ nsBidiKeyboard::nsBidiKeyboard()
- NS_IMETHODIMP
- nsBidiKeyboard::Reset()
- {
--    // NB: The default keymap can be null (e.g. in xpcshell). In that case,
--    // simply assume that we don't have bidi keyboards.
--    mHaveBidiKeyboards = false;
-+#if (MOZ_WIDGET_GTK == 2)
-+    PRLibrary *gtklib = nullptr;
-+#if defined(MOZ_X11)
-+    if (!GdkKeymapHaveBidiLayouts) {
-+        GdkKeymapHaveBidiLayouts = (GdkKeymapHaveBidiLayoutsType) 
-+            PR_FindFunctionSymbolAndLibrary("gdk_keymap_have_bidi_layouts",
-+                                            &gtklib);
-+        if (gtklib)
-+            PR_UnloadLibrary(gtklib);
-+    }
-+#endif
- 
--    GdkDisplay *display = gdk_display_get_default();
--    if (!display)
--        return NS_OK;
--
--    GdkKeymap *keymap = gdk_keymap_get_for_display(display);
--    mHaveBidiKeyboards = keymap && gdk_keymap_have_bidi_layouts(keymap);
-+    mHaveBidiKeyboards = false;
-+    if (GdkKeymapHaveBidiLayouts)
-+        mHaveBidiKeyboards = (*GdkKeymapHaveBidiLayouts)(nullptr);
-+#else
-+    mHaveBidiKeyboards = gdk_keymap_have_bidi_layouts(gdk_keymap_get_default());
-+#endif
-     return NS_OK;
- }
- 
- nsBidiKeyboard::~nsBidiKeyboard()
- {
-+#if (MOZ_WIDGET_GTK == 2)
-+    GdkKeymapHaveBidiLayouts = nullptr;
-+#endif
- }
- 
- NS_IMETHODIMP
diff --git a/SOURCES/build-el5-nss.patch b/SOURCES/build-el5-nss.patch
deleted file mode 100644
index 13c6dfd..0000000
--- a/SOURCES/build-el5-nss.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -up mozilla-aurora/config/external/nss/Makefile.in.build-el5-nss mozilla-aurora/config/external/nss/Makefile.in
---- mozilla-aurora/config/external/nss/Makefile.in.build-el5-nss	2016-01-26 10:25:01.770613169 +0100
-+++ mozilla-aurora/config/external/nss/Makefile.in	2016-01-26 10:25:12.824599219 +0100
-@@ -298,7 +298,7 @@ NSS_DIRS += \
- endif
- 
- ifneq (,$(filter %--build-id,$(LDFLAGS)))
--DEFAULT_GMAKE_ENV = LDFLAGS=-Wl,--build-id
-+#DEFAULT_GMAKE_ENV = LDFLAGS=-Wl,--build-id
- endif
- 
- ifdef MOZ_FOLD_LIBS
diff --git a/SOURCES/build-el5-rapl.patch b/SOURCES/build-el5-rapl.patch
deleted file mode 100644
index ec6f0b1..0000000
--- a/SOURCES/build-el5-rapl.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -up mozilla-aurora/tools/power/moz.build.rapl mozilla-aurora/tools/power/moz.build
---- mozilla-aurora/tools/power/moz.build.rapl	2016-01-18 10:55:59.461937398 +0100
-+++ mozilla-aurora/tools/power/moz.build	2016-01-18 10:56:04.483935330 +0100
-@@ -11,7 +11,7 @@ if CONFIG['OS_ARCH'] == 'Darwin' and CON
- 
- if CONFIG['OS_ARCH'] == 'Linux' and CONFIG['OS_TARGET'] != 'Android' and \
-    CONFIG['CPU_ARCH'] in ('x86', 'x86_64'):
--    do_rapl = True
-+    do_rapl = False
- 
- if do_rapl:
-     SimplePrograms([
diff --git a/SOURCES/build-el5-rt-tgsigqueueinfo.patch b/SOURCES/build-el5-rt-tgsigqueueinfo.patch
deleted file mode 100644
index 2ca3218..0000000
--- a/SOURCES/build-el5-rt-tgsigqueueinfo.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-diff -up mozilla-beta/xpcom/threads/ThreadStackHelper.cpp.rt-tgsigqueueinfo mozilla-beta/xpcom/threads/ThreadStackHelper.cpp
---- mozilla-beta/xpcom/threads/ThreadStackHelper.cpp.rt-tgsigqueueinfo	2015-04-16 23:45:29.000000000 +0200
-+++ mozilla-beta/xpcom/threads/ThreadStackHelper.cpp	2015-04-22 09:10:25.291166226 +0200
-@@ -240,10 +240,13 @@ ThreadStackHelper::GetStack(Stack& aStac
-   uinfo.si_pid = getpid();
-   uinfo.si_uid = getuid();
-   uinfo.si_value.sival_ptr = this;
-+#ifdef SYS_rt_tgsigqueueinfo
-   if (::syscall(SYS_rt_tgsigqueueinfo, uinfo.si_pid,
--                mThreadID, sFillStackSignum, &uinfo)) {
-+                mThreadID, sFillStackSignum, &uinfo))
-     // rt_tgsigqueueinfo was added in Linux 2.6.31.
-     // Could have failed because the syscall did not exist.
-+#endif
-+  {
-     return;
-   }
-   MOZ_ALWAYS_TRUE(!::sem_wait(&mSem));
diff --git a/SOURCES/build-el5-sandbox.patch b/SOURCES/build-el5-sandbox.patch
deleted file mode 100644
index 170130d..0000000
--- a/SOURCES/build-el5-sandbox.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-diff -up mozilla-aurora/security/sandbox/linux/broker/SandboxBroker.cpp.build-sandbox mozilla-aurora/security/sandbox/linux/broker/SandboxBroker.cpp
---- mozilla-aurora/security/sandbox/linux/broker/SandboxBroker.cpp.build-sandbox	2015-12-16 16:47:02.000000000 +0100
-+++ mozilla-aurora/security/sandbox/linux/broker/SandboxBroker.cpp	2016-01-21 15:34:59.168878105 +0100
-@@ -201,7 +201,7 @@ AllowAccess(int aReqFlags, int aPerms)
- // on this process.  These shouldn't be relevant to the child process
- // in any case due to the sandboxing restrictions on it.  (See also
- // the use of MSG_CMSG_CLOEXEC in SandboxBrokerCommon.cpp).
--static const int kRequiredOpenFlags = O_CLOEXEC | O_NOCTTY;
-+static const int kRequiredOpenFlags = O_NOCTTY;
- 
- // Linux originally assigned a flag bit to O_SYNC but implemented the
- // semantics standardized as O_DSYNC; later, that bit was renamed and
-@@ -212,7 +212,7 @@ static const int kRequiredOpenFlags = O_
- static const int kAllowedOpenFlags =
-   O_APPEND | O_ASYNC | O_DIRECT | O_DIRECTORY | O_EXCL | O_LARGEFILE
-   | O_NOATIME | O_NOCTTY | O_NOFOLLOW | O_NONBLOCK | O_NDELAY | O_SYNC_NEW
--  | O_TRUNC | O_CLOEXEC | O_CREAT;
-+  | O_TRUNC | O_CREAT;
- #undef O_SYNC_NEW
- 
- static bool
-@@ -358,6 +358,7 @@ SandboxBroker::ThreadMain(void)
-           // new ones).
-           openedFd = open(pathBuf, req.mFlags | kRequiredOpenFlags, 0600);
-           if (openedFd >= 0) {
-+            fcntl(openedFd, F_SETFD, fcntl(openedFd, F_GETFD, 0) | FD_CLOEXEC);
-             resp.mError = 0;
-           } else {
-             resp.mError = errno;
-diff -up mozilla-aurora/security/sandbox/linux/SandboxBrokerClient.cpp.build-sandbox mozilla-aurora/security/sandbox/linux/SandboxBrokerClient.cpp
---- mozilla-aurora/security/sandbox/linux/SandboxBrokerClient.cpp.build-sandbox	2016-01-21 15:48:55.807532739 +0100
-+++ mozilla-aurora/security/sandbox/linux/SandboxBrokerClient.cpp	2016-01-21 15:49:26.163518779 +0100
-@@ -149,9 +149,10 @@ SandboxBrokerClient::Open(const char* aP
-   int maybeFd = DoCall(&req, aPath, nullptr, true);
-   if (maybeFd >= 0) {
-     // NSPR has opinions about file flags.  Fix O_CLOEXEC.
--    if ((aFlags & O_CLOEXEC) == 0) {
--      fcntl(maybeFd, F_SETFD, 0);
--    }
-+    // O_CLOEXEC is not available in RHEL5
-+    //if ((aFlags & O_CLOEXEC) == 0) {
-+    //  fcntl(maybeFd, F_SETFD, 0);
-+    //}
-   }
-   return maybeFd;
- }
diff --git a/SOURCES/build-el5-stdint.patch b/SOURCES/build-el5-stdint.patch
deleted file mode 100644
index d693e5c..0000000
--- a/SOURCES/build-el5-stdint.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-diff -up mozilla-aurora/security/sandbox/linux/LinuxCapabilities.h.build-el5-stdint mozilla-aurora/security/sandbox/linux/LinuxCapabilities.h
---- mozilla-aurora/security/sandbox/linux/LinuxCapabilities.h.build-el5-stdint	2015-12-16 16:47:02.000000000 +0100
-+++ mozilla-aurora/security/sandbox/linux/LinuxCapabilities.h	2016-01-26 15:52:02.557401691 +0100
-@@ -7,7 +7,32 @@
- #ifndef mozilla_LinuxCapabilities_h
- #define mozilla_LinuxCapabilities_h
- 
-+#define int64_t int64_t_linux
-+#define uint64_t uint64_t_linux
-+#define loff_t loff_t_linux
-+#define dev_t dev_t_linux
-+#define timer_t timer_t_linux
-+#define u_int64_t u_int64_t_linux
-+#define fd_set fd_set_linux
-+#define blkcnt_t blkcnt_t_linux
-+#define gid_t gid_t_linux
-+#define mode_t mode_t_linux
-+#define nlink_t nlink_t_linux
-+#define uid_t uid_t_linux
- #include <linux/capability.h>
-+#undef int64_t
-+#undef uint64_t
-+#undef loff_t
-+#undef dev_t
-+#undef timer_t
-+#undef u_int64_t
-+#undef fd_set
-+#undef blkcnt_t
-+#undef gid_t
-+#undef mode_t
-+#undef nlink_t
-+#undef uid_t
-+
- #include <stdint.h>
- 
- #include "mozilla/Assertions.h"
-diff -up mozilla-aurora/security/sandbox/linux/SandboxFilterUtil.cpp.build-el5-stdint mozilla-aurora/security/sandbox/linux/SandboxFilterUtil.cpp
---- mozilla-aurora/security/sandbox/linux/SandboxFilterUtil.cpp.build-el5-stdint	2016-01-25 20:56:57.937678560 +0100
-+++ mozilla-aurora/security/sandbox/linux/SandboxFilterUtil.cpp	2016-01-25 20:58:25.574613828 +0100
-@@ -13,6 +13,7 @@
- 
- #include "mozilla/UniquePtr.h"
- #include "sandbox/linux/bpf_dsl/bpf_dsl.h"
-+#include <asm-generic/ipc.h>
- 
- // Older kernel headers (mostly Android, but also some older desktop
- // distributions) are missing some or all of these:
diff --git a/SOURCES/build-el5-xlib-header.patch b/SOURCES/build-el5-xlib-header.patch
deleted file mode 100644
index 247036c..0000000
--- a/SOURCES/build-el5-xlib-header.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-diff -up mozilla-aurora/media/webrtc/trunk/webrtc/modules/desktop_capture/mouse_cursor_monitor_x11.cc.xlib-swap mozilla-aurora/media/webrtc/trunk/webrtc/modules/desktop_capture/mouse_cursor_monitor_x11.cc
---- mozilla-aurora/media/webrtc/trunk/webrtc/modules/desktop_capture/mouse_cursor_monitor_x11.cc.xlib-swap	2016-01-15 12:50:55.900989372 +0100
-+++ mozilla-aurora/media/webrtc/trunk/webrtc/modules/desktop_capture/mouse_cursor_monitor_x11.cc	2016-01-15 12:51:40.592950518 +0100
-@@ -10,8 +10,8 @@
- 
- #include "webrtc/modules/desktop_capture/mouse_cursor_monitor.h"
- 
--#include <X11/extensions/Xfixes.h>
- #include <X11/Xlib.h>
-+#include <X11/extensions/Xfixes.h>
- #include <X11/Xutil.h>
- 
- #include "webrtc/base/scoped_ptr.h"
-diff -up mozilla-aurora/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_x11.cc.xlib-swap mozilla-aurora/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_x11.cc
---- mozilla-aurora/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_x11.cc.xlib-swap	2016-01-15 12:50:48.652995674 +0100
-+++ mozilla-aurora/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_x11.cc	2016-01-15 12:51:34.005956245 +0100
-@@ -13,9 +13,9 @@
- #include <string.h>
- #include <set>
- 
-+#include <X11/Xlib.h>
- #include <X11/extensions/Xdamage.h>
- #include <X11/extensions/Xfixes.h>
--#include <X11/Xlib.h>
- #include <X11/Xutil.h>
- 
- #include "webrtc/base/scoped_ptr.h"
diff --git a/SOURCES/build-fix-dupes.patch b/SOURCES/build-fix-dupes.patch
new file mode 100644
index 0000000..7782dee
--- /dev/null
+++ b/SOURCES/build-fix-dupes.patch
@@ -0,0 +1,11 @@
+diff -up thunderbird-52.0/mail/installer/Makefile.in.fix-dupes thunderbird-52.0/mail/installer/Makefile.in
+--- thunderbird-52.0/mail/installer/Makefile.in.fix-dupes	2017-04-04 13:06:17.414621079 +0200
++++ thunderbird-52.0/mail/installer/Makefile.in	2017-04-04 13:06:24.397611123 +0200
+@@ -15,6 +15,7 @@ ifndef SYSTEM_LIBXUL
+ MOZ_PKG_FATAL_WARNINGS = 1
+ endif
+ MOZ_PKG_DUPEFLAGS = \
++	-w \
+ 	-f $(srcdir)/allowed-dupes.mn \
+ 	-f $(MOZILLA_DIR)/browser/installer/allowed-dupes.mn \
+ 	$(NULL)
diff --git a/SOURCES/build-icu-big-endian.patch b/SOURCES/build-icu-big-endian.patch
new file mode 100644
index 0000000..68fbea1
--- /dev/null
+++ b/SOURCES/build-icu-big-endian.patch
@@ -0,0 +1,12 @@
+diff -up mozilla-aurora/build/autoconf/icu.m4.icu-endian mozilla-aurora/build/autoconf/icu.m4
+--- mozilla-aurora/build/autoconf/icu.m4.icu-endian	2016-12-09 09:11:01.227317790 +0100
++++ mozilla-aurora/build/autoconf/icu.m4	2016-12-09 09:18:40.608712247 +0100
+@@ -78,7 +78,7 @@ if test -n "$USE_ICU"; then
+     # TODO: the l is actually endian-dependent
+     # We could make this set as 'l' or 'b' for little or big, respectively,
+     # but we'd need to check in a big-endian version of the file.
+-    ICU_DATA_FILE="icudt${version}l.dat"
++    ICU_DATA_FILE="icudt${version}b.dat"
+ 
+     dnl We won't build ICU data as a separate file when building
+     dnl JS standalone so that embedders don't have to deal with it.
diff --git a/SOURCES/build-missing-getrandom.patch b/SOURCES/build-missing-getrandom.patch
new file mode 100644
index 0000000..3a4adde
--- /dev/null
+++ b/SOURCES/build-missing-getrandom.patch
@@ -0,0 +1,21 @@
+diff -up firefox-52.0b8/js/src/jsmath.cpp.missing-getrandom firefox-52.0b8/js/src/jsmath.cpp
+--- firefox-52.0b8/js/src/jsmath.cpp.missing-getrandom	2017-02-22 08:09:21.764353407 +0100
++++ firefox-52.0b8/js/src/jsmath.cpp	2017-02-22 08:10:36.939330775 +0100
+@@ -78,7 +78,7 @@
+ static_assert(GETRANDOM_NR == SYS_getrandom,
+               "GETRANDOM_NR should match the actual SYS_getrandom value");
+ #  endif
+-# else
++# elif defined(GETRANDOM_NR)
+ #  define SYS_getrandom GETRANDOM_NR
+ # endif
+ 
+@@ -721,7 +721,7 @@ js::GenerateRandomSeed()
+     seed = (static_cast<uint64_t>(arc4random()) << 32) | arc4random();
+ #elif defined(XP_UNIX)
+     bool done = false;
+-# if defined(__linux__)
++# if defined(__linux__) && defined(SYS_getrandom)
+     // Try the relatively new getrandom syscall first. It's the preferred way
+     // on Linux as /dev/urandom may not work inside chroots and is harder to
+     // sandbox (see bug 995069).
diff --git a/SOURCES/build-nss-prbool.patch b/SOURCES/build-nss-prbool.patch
new file mode 100644
index 0000000..491b2e1
--- /dev/null
+++ b/SOURCES/build-nss-prbool.patch
@@ -0,0 +1,22 @@
+diff -up firefox-52.0esr/security/certverifier/CTLogVerifier.cpp.nss-prbool firefox-52.0esr/security/certverifier/CTLogVerifier.cpp
+--- firefox-52.0esr/security/certverifier/CTLogVerifier.cpp.nss-prbool	2017-02-28 02:56:03.000000000 +0100
++++ firefox-52.0esr/security/certverifier/CTLogVerifier.cpp	2017-03-01 11:34:15.623577628 +0100
+@@ -7,6 +7,7 @@
+ #include "CTLogVerifier.h"
+ 
+ #include "CTSerialization.h"
++#include "prtypes.h"
+ #include "hasht.h"
+ #include "mozilla/ArrayUtils.h"
+ #include "mozilla/Assertions.h"
+diff -up firefox-52.0esr/security/manager/ssl/nsSSLStatus.cpp.nss-prbool firefox-52.0esr/security/manager/ssl/nsSSLStatus.cpp
+--- firefox-52.0esr/security/manager/ssl/nsSSLStatus.cpp.nss-prbool	2017-03-01 12:09:16.649945106 +0100
++++ firefox-52.0esr/security/manager/ssl/nsSSLStatus.cpp	2017-03-01 12:09:35.749939355 +0100
+@@ -4,6 +4,7 @@
+  * License, v. 2.0. If a copy of the MPL was not distributed with this
+  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+ 
++#include "prtypes.h"
+ #include "mozilla/Casting.h"
+ #include "nsSSLStatus.h"
+ #include "nsIClassInfoImpl.h"
diff --git a/SOURCES/build-nss-version.patch b/SOURCES/build-nss-version.patch
new file mode 100644
index 0000000..36c2632
--- /dev/null
+++ b/SOURCES/build-nss-version.patch
@@ -0,0 +1,12 @@
+diff -up firefox-52.0esr/old-configure.in.nss-ver firefox-52.0esr/old-configure.in
+--- firefox-52.0esr/old-configure.in.nss-ver	2017-03-01 10:12:54.668047060 +0100
++++ firefox-52.0esr/old-configure.in	2017-03-01 10:13:01.733044933 +0100
+@@ -2123,7 +2123,7 @@ MOZ_ARG_WITH_BOOL(system-nss,
+     _USE_SYSTEM_NSS=1 )
+ 
+ if test -n "$_USE_SYSTEM_NSS"; then
+-    AM_PATH_NSS(3.28.4, [MOZ_SYSTEM_NSS=1], [AC_MSG_ERROR([you don't have NSS installed or your version is too old])])
++    AM_PATH_NSS(3.28.1, [MOZ_SYSTEM_NSS=1], [AC_MSG_ERROR([you don't have NSS installed or your version is too old])])
+ fi
+ 
+ if test -n "$MOZ_SYSTEM_NSS"; then
diff --git a/SOURCES/build-nss.patch b/SOURCES/build-nss.patch
deleted file mode 100644
index 7cf5fb6..0000000
--- a/SOURCES/build-nss.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-diff -up firefox-45.0.1esr/configure.in.nss firefox-45.0.1esr/configure.in
---- firefox-45.0.1esr/configure.in.nss	2016-04-06 10:20:01.000000000 +0200
-+++ firefox-45.0.1esr/configure.in	2016-04-06 10:25:56.998285981 +0200
-@@ -53,7 +53,7 @@ dnl ====================================
- MOZJPEG=62
- MOZPNG=10619
- NSPR_VERSION=4
--NSPR_MINVER=4.12
-+NSPR_MINVER=4.11
- NSS_VERSION=3
- 
- dnl Set the minimum version of toolkit libs used by mozilla
-@@ -3451,7 +3451,7 @@ MOZ_ARG_WITH_BOOL(system-nss,
-     _USE_SYSTEM_NSS=1 )
- 
- if test -n "$_USE_SYSTEM_NSS"; then
--    AM_PATH_NSS(3.21.3, [MOZ_NATIVE_NSS=1], [AC_MSG_ERROR([you don't have NSS installed or your version is too old])])
-+    AM_PATH_NSS(3.21.0, [MOZ_NATIVE_NSS=1], [AC_MSG_ERROR([you don't have NSS installed or your version is too old])])
- fi
- 
- if test -n "$MOZ_NATIVE_NSS"; then
diff --git a/SOURCES/build-s390-atomic.patch b/SOURCES/build-s390-atomic.patch
new file mode 100644
index 0000000..3624b98
--- /dev/null
+++ b/SOURCES/build-s390-atomic.patch
@@ -0,0 +1,13 @@
+diff -up mozilla-aurora/js/src/jit/AtomicOperations.h.s390-atomic mozilla-aurora/js/src/jit/AtomicOperations.h
+--- mozilla-aurora/js/src/jit/AtomicOperations.h.s390-atomic	2016-11-15 12:22:38.000000000 +0100
++++ mozilla-aurora/js/src/jit/AtomicOperations.h	2016-12-08 15:36:11.792439891 +0100
+@@ -341,6 +341,9 @@ AtomicOperations::isLockfree(int32_t siz
+ #  include "jit/none/AtomicOperations-ppc.h"
+ # elif defined(__aarch64__)
+ #  include "jit/arm64/AtomicOperations-arm64.h"
++# elif defined(__s390__)
++   // Also works with ppc atomic operations
++#  include "jit/none/AtomicOperations-ppc.h"
+ # else
+ #  include "jit/none/AtomicOperations-none.h" // These MOZ_CRASH() always
+ # endif
diff --git a/SOURCES/build-s390-missing-include.patch b/SOURCES/build-s390-missing-include.patch
new file mode 100644
index 0000000..59157e6
--- /dev/null
+++ b/SOURCES/build-s390-missing-include.patch
@@ -0,0 +1,11 @@
+diff -up firefox-52.1.0esr/dom/filesystem/compat/FileSystemDirectoryReader.h.s390-build-includes-fix firefox-52.1.0esr/dom/filesystem/compat/FileSystemDirectoryReader.h
+--- firefox-52.1.0esr/dom/filesystem/compat/FileSystemDirectoryReader.h.s390-build-includes-fix	2017-04-12 09:31:39.419402551 +0200
++++ firefox-52.1.0esr/dom/filesystem/compat/FileSystemDirectoryReader.h	2017-04-12 09:31:53.392340589 +0200
+@@ -11,6 +11,7 @@
+ #include "mozilla/ErrorResult.h"
+ #include "mozilla/dom/BindingDeclarations.h"
+ #include "nsCycleCollectionParticipant.h"
++#include "mozilla/dom/FileSystemDirectoryEntry.h"
+ #include "nsWrapperCache.h"
+ 
+ namespace mozilla {
diff --git a/SOURCES/mozilla-1005535.patch b/SOURCES/mozilla-1005535.patch
deleted file mode 100644
index d84c913..0000000
--- a/SOURCES/mozilla-1005535.patch
+++ /dev/null
@@ -1,90 +0,0 @@
-# HG changeset patch
-# Parent b7eb1ce0237d6125b75bc8ff1cb3afc328d6e78c
-# User Steve Singer <steve@ssinger.info>
-Bug 1005535 - Get skia GPU building on big endian.
-
-diff -up mozilla-aurora/configure.in.mozbz-1005535 mozilla-aurora/configure.in
---- mozilla-aurora/configure.in.mozbz-1005535	2015-12-18 14:55:09.415983194 +0100
-+++ mozilla-aurora/configure.in	2015-12-18 14:58:46.301911086 +0100
-@@ -8279,12 +8279,12 @@ if test "$MOZ_ENABLE_SKIA"; then
-     AC_DEFINE(SK_BUILD_FOR_ANDROID_NDK)
-   fi
- 
--  if test "${CPU_ARCH}" != "ppc" -a "${CPU_ARCH}" != "ppc64" -a "${CPU_ARCH}" != "sparc" -a -z "$MOZ_DISABLE_SKIA_GPU" ; then
-+#  if test "${CPU_ARCH}" != "ppc" -a "${CPU_ARCH}" != "ppc64" -a "${CPU_ARCH}" != "sparc" -a -z "$MOZ_DISABLE_SKIA_GPU" ; then
-     SKIA_INCLUDES="$SKIA_INCLUDES /gfx/skia/skia/include/gpu /gfx/skia/skia/include/utils"
-     MOZ_ENABLE_SKIA_GPU=1
-     AC_DEFINE(USE_SKIA_GPU)
-     AC_SUBST(MOZ_ENABLE_SKIA_GPU)
--  fi
-+#  fi
- fi
- AC_SUBST(MOZ_ENABLE_SKIA)
- AC_SUBST_LIST(SKIA_INCLUDES)
-diff -up mozilla-aurora/gfx/skia/skia/include/config/SkUserConfig.h.mozbz-1005535 mozilla-aurora/gfx/skia/skia/include/config/SkUserConfig.h
-diff -up mozilla-aurora/gfx/skia/skia/include/core/SkColorPriv.h.mozbz-1005535 mozilla-aurora/gfx/skia/skia/include/core/SkColorPriv.h
---- mozilla-aurora/gfx/skia/skia/include/core/SkColorPriv.h.mozbz-1005535	2015-12-16 16:47:08.000000000 +0100
-+++ mozilla-aurora/gfx/skia/skia/include/core/SkColorPriv.h	2015-12-18 14:55:09.416983194 +0100
-@@ -32,17 +32,7 @@
-  *  Here we enforce this constraint.
-  */
- 
--#ifdef SK_CPU_BENDIAN
--    #define SK_RGBA_R32_SHIFT   24
--    #define SK_RGBA_G32_SHIFT   16
--    #define SK_RGBA_B32_SHIFT   8
--    #define SK_RGBA_A32_SHIFT   0
- 
--    #define SK_BGRA_B32_SHIFT   24
--    #define SK_BGRA_G32_SHIFT   16
--    #define SK_BGRA_R32_SHIFT   8
--    #define SK_BGRA_A32_SHIFT   0
--#else
-     #define SK_RGBA_R32_SHIFT   0
-     #define SK_RGBA_G32_SHIFT   8
-     #define SK_RGBA_B32_SHIFT   16
-@@ -52,7 +42,7 @@
-     #define SK_BGRA_G32_SHIFT   8
-     #define SK_BGRA_R32_SHIFT   16
-     #define SK_BGRA_A32_SHIFT   24
--#endif
-+
- 
- #if defined(SK_PMCOLOR_IS_RGBA) && defined(SK_PMCOLOR_IS_BGRA)
-     #error "can't define PMCOLOR to be RGBA and BGRA"
-diff -up mozilla-aurora/gfx/skia/skia/include/core/SkImageInfo.h.mozbz-1005535 mozilla-aurora/gfx/skia/skia/include/core/SkImageInfo.h
---- mozilla-aurora/gfx/skia/skia/include/core/SkImageInfo.h.mozbz-1005535	2015-12-16 16:47:08.000000000 +0100
-+++ mozilla-aurora/gfx/skia/skia/include/core/SkImageInfo.h	2015-12-18 14:55:09.416983194 +0100
-@@ -88,9 +88,10 @@ enum SkColorType {
- #elif SK_PMCOLOR_BYTE_ORDER(R,G,B,A)
-     kN32_SkColorType = kRGBA_8888_SkColorType,
- #else
--#error "SK_*32_SHFIT values must correspond to BGRA or RGBA byte order"
-+     kN32_SkColorType = kBGRA_8888_SkColorType
- #endif
- 
-+
- #ifdef SK_SUPPORT_LEGACY_N32_NAME
-     kPMColor_SkColorType = kN32_SkColorType
- #endif
-diff -up mozilla-aurora/gfx/skia/skia/include/gpu/GrTypes.h.mozbz-1005535 mozilla-aurora/gfx/skia/skia/include/gpu/GrTypes.h
---- mozilla-aurora/gfx/skia/skia/include/gpu/GrTypes.h.mozbz-1005535	2015-12-16 16:47:08.000000000 +0100
-+++ mozilla-aurora/gfx/skia/skia/include/gpu/GrTypes.h	2015-12-18 14:55:09.416983194 +0100
-@@ -309,15 +309,13 @@ enum GrPixelConfig {
- static const int kGrPixelConfigCnt = kLast_GrPixelConfig + 1;
- 
- // Aliases for pixel configs that match skia's byte order.
--#ifndef SK_CPU_LENDIAN
--    #error "Skia gpu currently assumes little endian"
--#endif
-+
- #if SK_PMCOLOR_BYTE_ORDER(B,G,R,A)
-     static const GrPixelConfig kSkia8888_GrPixelConfig = kBGRA_8888_GrPixelConfig;
- #elif SK_PMCOLOR_BYTE_ORDER(R,G,B,A)
-     static const GrPixelConfig kSkia8888_GrPixelConfig = kRGBA_8888_GrPixelConfig;
- #else
--    #error "SK_*32_SHIFT values must correspond to GL_BGRA or GL_RGBA format."
-+    static const GrPixelConfig kSkia8888_GrPixelConfig = kBGRA_8888_GrPixelConfig;
- #endif
- 
- // Returns true if the pixel config is a GPU-specific compressed format
diff --git a/SOURCES/mozilla-1134537-delete-gnomevfs-extension.patch b/SOURCES/mozilla-1134537-delete-gnomevfs-extension.patch
deleted file mode 100644
index 2803525..0000000
--- a/SOURCES/mozilla-1134537-delete-gnomevfs-extension.patch
+++ /dev/null
@@ -1,1150 +0,0 @@
-diff -up thunderbird-45.0/mozilla/b2g/installer/package-manifest.in.moz-1134537-gnomevfsservice thunderbird-45.0/mozilla/b2g/installer/package-manifest.in
---- thunderbird-45.0/mozilla/b2g/installer/package-manifest.in.moz-1134537-gnomevfsservice	2016-04-07 23:33:14.000000000 +0200
-+++ thunderbird-45.0/mozilla/b2g/installer/package-manifest.in	2016-05-09 13:19:52.317048303 +0200
-@@ -912,6 +912,12 @@ bin/libfreebl_32int64_3.so
- @RESPATH@/crashreporter-override.ini
- #endif
- 
-+; [Extensions]
-+;
-+#ifdef MOZ_ENABLE_GNOMEVFS
-+bin/components/@DLL_PREFIX@nkgnomevfs@DLL_SUFFIX@
-+#endif
-+
- [b2g]
- #ifndef MOZ_WIDGET_GONK
- #ifdef XP_WIN32
-diff -up thunderbird-45.0/mozilla/browser/installer/package-manifest.in.moz-1134537-gnomevfsservice thunderbird-45.0/mozilla/browser/installer/package-manifest.in
---- thunderbird-45.0/mozilla/browser/installer/package-manifest.in.moz-1134537-gnomevfsservice	2016-05-09 13:19:52.318048303 +0200
-+++ thunderbird-45.0/mozilla/browser/installer/package-manifest.in	2016-05-09 13:24:23.525852797 +0200
-@@ -495,6 +495,9 @@
- #ifdef XP_MACOSX
- @RESPATH@/browser/components/SafariProfileMigrator.js
- #endif
-+#ifdef MOZ_ENABLE_GNOMEVFS
-+@RESPATH@/components/@DLL_PREFIX@nkgnomevfs@DLL_SUFFIX@
-+#endif
- @RESPATH@/components/nsINIProcessor.manifest
- @RESPATH@/components/nsINIProcessor.js
- @RESPATH@/components/nsPrompter.manifest
-diff -up thunderbird-45.0/mozilla/config/system-headers.moz-1134537-gnomevfsservice thunderbird-45.0/mozilla/config/system-headers
---- thunderbird-45.0/mozilla/config/system-headers.moz-1134537-gnomevfsservice	2016-05-09 13:19:52.298048317 +0200
-+++ thunderbird-45.0/mozilla/config/system-headers	2016-05-09 13:19:52.318048303 +0200
-@@ -630,6 +630,14 @@ libgnome/libgnome.h
- libgnomeui/gnome-icon-lookup.h
- libgnomeui/gnome-icon-theme.h
- libgnomeui/gnome-ui-init.h
-+libgnomevfs/gnome-vfs-file-info.h
-+libgnomevfs/gnome-vfs.h
-+libgnomevfs/gnome-vfs-init.h
-+libgnomevfs/gnome-vfs-mime.h
-+libgnomevfs/gnome-vfs-mime-handlers.h
-+libgnomevfs/gnome-vfs-mime-utils.h
-+libgnomevfs/gnome-vfs-ops.h
-+libgnomevfs/gnome-vfs-standard-callbacks.h
- lib$routines.h
- limits
- limits.h
-diff -up thunderbird-45.0/mozilla/configure.in.moz-1134537-gnomevfsservice thunderbird-45.0/mozilla/configure.in
---- thunderbird-45.0/mozilla/configure.in.moz-1134537-gnomevfsservice	2016-05-09 13:19:52.299048316 +0200
-+++ thunderbird-45.0/mozilla/configure.in	2016-05-09 13:21:31.457976836 +0200
-@@ -71,6 +71,7 @@ GTK3_VERSION=3.4.0
- GDK_VERSION_MIN_REQUIRED=GDK_VERSION_3_4
- WINDRES_VERSION=2.14.90
- W32API_VERSION=3.14
-+GNOMEVFS_VERSION=2.0
- GNOMEUI_VERSION=2.2.0
- GCONF_VERSION=1.2.1
- STARTUP_NOTIFICATION_VERSION=0.8
-@@ -4632,7 +4633,7 @@ then
- fi
- 
- dnl ========================================================
--dnl = GIO and GConf support module
-+dnl = GnomeVFS, GIO and GConf support module
- dnl ========================================================
- 
- if test "$MOZ_X11"
-@@ -4646,6 +4647,31 @@ then
-     fi
- 
-     dnl ========================================================
-+    dnl = GnomeVFS support module
-+    dnl ========================================================
-+    MOZ_ARG_ENABLE_BOOL(gnomevfs,
-+    [  --enable-gnomevfs       Enable GnomeVFS support (default: disabled)],
-+        MOZ_ENABLE_GNOMEVFS=force,
-+        MOZ_ENABLE_GNOMEVFS=)
-+
-+    if test "$MOZ_ENABLE_GNOMEVFS"
-+    then
-+        PKG_CHECK_MODULES(MOZ_GNOMEVFS, gnome-vfs-2.0 >= $GNOMEVFS_VERSION gnome-vfs-module-2.0 >= $GNOMEVFS_VERSION,[
-+            MOZ_GNOMEVFS_LIBS=`echo $MOZ_GNOMEVFS_LIBS | sed 's/-llinc\>//'`
-+            MOZ_ENABLE_GNOMEVFS=1
-+            AC_DEFINE(MOZ_ENABLE_GNOMEVFS)
-+        ],[
-+            if test "$MOZ_ENABLE_GNOMEVFS" = "force"
-+            then
-+                AC_MSG_ERROR([* * * Could not find gnome-vfs-module-2.0 >= $GNOMEVFS_VERSION])
-+            fi
-+            MOZ_ENABLE_GNOMEVFS=
-+        ])
-+    fi
-+
-+    AC_SUBST(MOZ_ENABLE_GNOMEVFS)
-+
-+    dnl ========================================================
-     dnl = GIO support module
-     dnl ========================================================
-     MOZ_ARG_DISABLE_BOOL(gio,
-@@ -6297,6 +6323,19 @@ MOZ_ARG_ENABLE_STRING(extensions,
- done],
-     MOZ_EXTENSIONS="$MOZ_EXTENSIONS_DEFAULT")
- 
-+if test -z "$MOZ_ENABLE_GNOMEVFS" -a `echo "$MOZ_EXTENSIONS" | grep -c gnomevfs` -ne 0; then
-+    # Suppress warning on non-X11 platforms
-+    if test -n "$MOZ_X11"; then
-+        AC_MSG_WARN([Removing gnomevfs from MOZ_EXTENSIONS due to no --enable-gnomevfs.])
-+    fi
-+    MOZ_EXTENSIONS=`echo $MOZ_EXTENSIONS | sed -e 's|gnomevfs||'`
-+fi
-+
-+dnl Do not build gnomevfs with libxul based apps
-+if test -n "$LIBXUL_SDK_DIR" -a `echo "$MOZ_EXTENSIONS" | grep -c gnomevfs` -ne 0; then
-+    MOZ_EXTENSIONS=`echo $MOZ_EXTENSIONS | sed -e 's|gnomevfs||'`
-+fi
-+
- if test -z "$MOZ_ENABLE_GIO" -a `echo "$MOZ_EXTENSIONS" | grep -c gio` -ne 0; then
-     # Suppress warning on non-X11 platforms
-     if test -n "$MOZ_X11"; then
-diff -up thunderbird-45.0/mozilla/extensions/gnomevfs/moz.build.moz-1134537-gnomevfsservice thunderbird-45.0/mozilla/extensions/gnomevfs/moz.build
---- thunderbird-45.0/mozilla/extensions/gnomevfs/moz.build.moz-1134537-gnomevfsservice	2016-05-09 13:19:52.321048300 +0200
-+++ thunderbird-45.0/mozilla/extensions/gnomevfs/moz.build	2016-05-09 13:19:52.321048300 +0200
-@@ -0,0 +1,19 @@
-+# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
-+# vim: set filetype=python:
-+# This Source Code Form is subject to the terms of the Mozilla Public
-+# License, v. 2.0. If a copy of the MPL was not distributed with this
-+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-+
-+SOURCES += [
-+    'nsGnomeVFSProtocolHandler.cpp',
-+]
-+
-+XPCOMBinaryComponent('nkgnomevfs')
-+
-+# make sure this component is never statically linked into the main
-+# application.  this is necessary since we don't want to force users
-+# to install gnome-vfs2 in order to use the rest of mozilla ;-)
-+
-+CXXFLAGS += CONFIG['MOZ_GNOMEVFS_CFLAGS']
-+
-+OS_LIBS += CONFIG['MOZ_GNOMEVFS_LIBS']
-diff -up thunderbird-45.0/mozilla/extensions/gnomevfs/nsGnomeVFSProtocolHandler.cpp.moz-1134537-gnomevfsservice thunderbird-45.0/mozilla/extensions/gnomevfs/nsGnomeVFSProtocolHandler.cpp
---- thunderbird-45.0/mozilla/extensions/gnomevfs/nsGnomeVFSProtocolHandler.cpp.moz-1134537-gnomevfsservice	2016-05-09 13:19:52.322048300 +0200
-+++ thunderbird-45.0/mozilla/extensions/gnomevfs/nsGnomeVFSProtocolHandler.cpp	2016-05-09 13:19:52.322048300 +0200
-@@ -0,0 +1,988 @@
-+/* vim:set ts=2 sw=2 et cindent: */
-+/* This Source Code Form is subject to the terms of the Mozilla Public
-+ * License, v. 2.0. If a copy of the MPL was not distributed with this
-+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-+
-+// GnomeVFS v2.2.2 is missing G_BEGIN_DECLS in gnome-vfs-module-callback.h
-+extern "C" {
-+#include <libgnomevfs/gnome-vfs.h>
-+#include <libgnomevfs/gnome-vfs-standard-callbacks.h>
-+#include <libgnomevfs/gnome-vfs-mime-utils.h>
-+}
-+
-+#include <algorithm>
-+
-+#include "nsServiceManagerUtils.h"
-+#include "nsComponentManagerUtils.h"
-+#include "mozilla/ModuleUtils.h"
-+#include "nsIInterfaceRequestorUtils.h"
-+#include "nsIPrefService.h"
-+#include "nsIPrefBranch.h"
-+#include "nsIObserver.h"
-+#include "nsThreadUtils.h"
-+#include "nsProxyRelease.h"
-+#include "nsIAuthPrompt.h"
-+#include "nsIStringBundle.h"
-+#include "nsIStandardURL.h"
-+#include "nsIURL.h"
-+#include "nsMimeTypes.h"
-+#include "nsNetUtil.h"
-+#include "nsINetUtil.h"
-+#include "nsAutoPtr.h"
-+#include "nsError.h"
-+#include "prlog.h"
-+#include "prtime.h"
-+#include "prprf.h"
-+#include "plstr.h"
-+#include "mozilla/Attributes.h"
-+
-+#define MOZ_GNOMEVFS_SCHEME              "moz-gnomevfs"
-+#define MOZ_GNOMEVFS_SUPPORTED_PROTOCOLS "network.gnomevfs.supported-protocols"
-+
-+//-----------------------------------------------------------------------------
-+
-+// NSPR_LOG_MODULES=gnomevfs:5
-+#ifdef PR_LOGGING
-+static PRLogModuleInfo *sGnomeVFSLog;
-+#define LOG(args) PR_LOG(sGnomeVFSLog, PR_LOG_DEBUG, args)
-+#else
-+#define LOG(args)
-+#endif
-+
-+//-----------------------------------------------------------------------------
-+
-+static nsresult
-+MapGnomeVFSResult(GnomeVFSResult result)
-+{
-+  switch (result)
-+  {
-+    case GNOME_VFS_OK:                           return NS_OK;
-+    case GNOME_VFS_ERROR_NOT_FOUND:              return NS_ERROR_FILE_NOT_FOUND;
-+    case GNOME_VFS_ERROR_INTERNAL:               return NS_ERROR_UNEXPECTED;
-+    case GNOME_VFS_ERROR_BAD_PARAMETERS:         return NS_ERROR_INVALID_ARG;
-+    case GNOME_VFS_ERROR_NOT_SUPPORTED:          return NS_ERROR_NOT_AVAILABLE;
-+    case GNOME_VFS_ERROR_CORRUPTED_DATA:         return NS_ERROR_FILE_CORRUPTED;
-+    case GNOME_VFS_ERROR_TOO_BIG:                return NS_ERROR_FILE_TOO_BIG;
-+    case GNOME_VFS_ERROR_NO_SPACE:               return NS_ERROR_FILE_NO_DEVICE_SPACE;
-+    case GNOME_VFS_ERROR_READ_ONLY:
-+    case GNOME_VFS_ERROR_READ_ONLY_FILE_SYSTEM:  return NS_ERROR_FILE_READ_ONLY;
-+    case GNOME_VFS_ERROR_INVALID_URI:
-+    case GNOME_VFS_ERROR_INVALID_HOST_NAME:      return NS_ERROR_MALFORMED_URI;
-+    case GNOME_VFS_ERROR_ACCESS_DENIED:
-+    case GNOME_VFS_ERROR_NOT_PERMITTED:
-+    case GNOME_VFS_ERROR_LOGIN_FAILED:           return NS_ERROR_FILE_ACCESS_DENIED;
-+    case GNOME_VFS_ERROR_EOF:                    return NS_BASE_STREAM_CLOSED;
-+    case GNOME_VFS_ERROR_NOT_A_DIRECTORY:        return NS_ERROR_FILE_NOT_DIRECTORY;
-+    case GNOME_VFS_ERROR_IN_PROGRESS:            return NS_ERROR_IN_PROGRESS;
-+    case GNOME_VFS_ERROR_FILE_EXISTS:            return NS_ERROR_FILE_ALREADY_EXISTS;
-+    case GNOME_VFS_ERROR_IS_DIRECTORY:           return NS_ERROR_FILE_IS_DIRECTORY;
-+    case GNOME_VFS_ERROR_NO_MEMORY:              return NS_ERROR_OUT_OF_MEMORY;
-+    case GNOME_VFS_ERROR_HOST_NOT_FOUND:
-+    case GNOME_VFS_ERROR_HOST_HAS_NO_ADDRESS:    return NS_ERROR_UNKNOWN_HOST;
-+    case GNOME_VFS_ERROR_CANCELLED:
-+    case GNOME_VFS_ERROR_INTERRUPTED:            return NS_ERROR_ABORT;
-+    case GNOME_VFS_ERROR_DIRECTORY_NOT_EMPTY:    return NS_ERROR_FILE_DIR_NOT_EMPTY;
-+    case GNOME_VFS_ERROR_NAME_TOO_LONG:          return NS_ERROR_FILE_NAME_TOO_LONG;
-+    case GNOME_VFS_ERROR_SERVICE_NOT_AVAILABLE:  return NS_ERROR_UNKNOWN_PROTOCOL;
-+
-+    /* No special mapping for these error codes...
-+
-+    case GNOME_VFS_ERROR_GENERIC:
-+    case GNOME_VFS_ERROR_IO:
-+    case GNOME_VFS_ERROR_WRONG_FORMAT:
-+    case GNOME_VFS_ERROR_BAD_FILE:
-+    case GNOME_VFS_ERROR_NOT_OPEN:
-+    case GNOME_VFS_ERROR_INVALID_OPEN_MODE:
-+    case GNOME_VFS_ERROR_TOO_MANY_OPEN_FILES:
-+    case GNOME_VFS_ERROR_LOOP:
-+    case GNOME_VFS_ERROR_DIRECTORY_BUSY:
-+    case GNOME_VFS_ERROR_TOO_MANY_LINKS:
-+    case GNOME_VFS_ERROR_NOT_SAME_FILE_SYSTEM:
-+    case GNOME_VFS_ERROR_SERVICE_OBSOLETE:
-+    case GNOME_VFS_ERROR_PROTOCOL_ERROR:
-+    case GNOME_VFS_ERROR_NO_MASTER_BROWSER:
-+
-+    */
-+
-+    // Make GCC happy
-+    default:
-+      return NS_ERROR_FAILURE;
-+  }
-+
-+  return NS_ERROR_FAILURE;
-+}
-+
-+//-----------------------------------------------------------------------------
-+
-+static void
-+ProxiedAuthCallback(gconstpointer in,
-+                    gsize         in_size,
-+                    gpointer      out,
-+                    gsize         out_size,
-+                    gpointer      callback_data)
-+{
-+  GnomeVFSModuleCallbackAuthenticationIn *authIn =
-+      (GnomeVFSModuleCallbackAuthenticationIn *) in;
-+  GnomeVFSModuleCallbackAuthenticationOut *authOut =
-+      (GnomeVFSModuleCallbackAuthenticationOut *) out;
-+
-+  LOG(("gnomevfs: ProxiedAuthCallback [uri=%s]\n", authIn->uri));
-+
-+  // Without a channel, we have no way of getting a prompter.
-+  nsIChannel *channel = (nsIChannel *) callback_data;
-+  if (!channel)
-+    return;
-+
-+  nsCOMPtr<nsIAuthPrompt> prompt;
-+  NS_QueryNotificationCallbacks(channel, prompt);
-+
-+  // If no auth prompt, then give up.  We could failover to using the
-+  // WindowWatcher service, but that might defeat a consumer's purposeful
-+  // attempt to disable authentication (for whatever reason).
-+  if (!prompt)
-+    return;
-+
-+  // Parse out the host and port...
-+  nsCOMPtr<nsIURI> uri;
-+  channel->GetURI(getter_AddRefs(uri));
-+  if (!uri)
-+    return;
-+
-+#ifdef DEBUG
-+  {
-+    //
-+    // Make sure authIn->uri is consistent with the channel's URI.
-+    //
-+    // XXX This check is probably not IDN safe, and it might incorrectly
-+    //     fire as a result of escaping differences.  It's unclear what
-+    //     kind of transforms GnomeVFS might have applied to the URI spec
-+    //     that we originally gave to it.  In spite of the likelihood of
-+    //     false hits, this check is probably still valuable.
-+    //
-+    nsAutoCString spec;
-+    uri->GetSpec(spec);
-+    int uriLen = strlen(authIn->uri);
-+    if (!StringHead(spec, uriLen).Equals(nsDependentCString(authIn->uri, uriLen)))
-+    {
-+      LOG(("gnomevfs: [spec=%s authIn->uri=%s]\n", spec.get(), authIn->uri));
-+      NS_ERROR("URI mismatch");
-+    }
-+  }
-+#endif
-+
-+  nsAutoCString scheme, hostPort;
-+  uri->GetScheme(scheme);
-+  uri->GetHostPort(hostPort);
-+
-+  // It doesn't make sense for either of these strings to be empty.  What kind
-+  // of funky URI is this?
-+  if (scheme.IsEmpty() || hostPort.IsEmpty())
-+    return;
-+
-+  // Construct the single signon key.  Altering the value of this key will
-+  // cause people's remembered passwords to be forgotten.  Think carefully
-+  // before changing the way this key is constructed.
-+  nsAutoString key, realm;
-+
-+  NS_ConvertUTF8toUTF16 dispHost(scheme);
-+  dispHost.AppendLiteral("://");
-+  dispHost.Append(NS_ConvertUTF8toUTF16(hostPort));
-+
-+  key = dispHost;
-+  if (authIn->realm)
-+  {
-+    // We assume the realm string is ASCII.  That might be a bogus assumption,
-+    // but we have no idea what encoding GnomeVFS is using, so for now we'll
-+    // limit ourselves to ISO-Latin-1.  XXX What is a better solution?
-+    realm.Append('"');
-+    realm.Append(NS_ConvertASCIItoUTF16(authIn->realm));
-+    realm.Append('"');
-+    key.Append(' ');
-+    key.Append(realm);
-+  }
-+
-+  // Construct the message string...
-+  //
-+  // We use Necko's string bundle here.  This code really should be encapsulated
-+  // behind some Necko API, after all this code is based closely on the code in
-+  // nsHttpChannel.cpp.
-+
-+  nsCOMPtr<nsIStringBundleService> bundleSvc =
-+      do_GetService(NS_STRINGBUNDLE_CONTRACTID);
-+  if (!bundleSvc)
-+    return;
-+
-+  nsCOMPtr<nsIStringBundle> bundle;
-+  bundleSvc->CreateBundle("chrome://global/locale/commonDialogs.properties",
-+                          getter_AddRefs(bundle));
-+  if (!bundle)
-+    return;
-+
-+  nsString message;
-+  if (!realm.IsEmpty())
-+  {
-+    const char16_t *strings[] = { realm.get(), dispHost.get() };
-+    bundle->FormatStringFromName(MOZ_UTF16("EnterUserPasswordForRealm"),
-+                                 strings, 2, getter_Copies(message));
-+  }
-+  else
-+  {
-+    const char16_t *strings[] = { dispHost.get() };
-+    bundle->FormatStringFromName(MOZ_UTF16("EnterUserPasswordFor"),
-+                                 strings, 1, getter_Copies(message));
-+  }
-+  if (message.IsEmpty())
-+    return;
-+
-+  // Prompt the user...
-+  nsresult rv;
-+  bool retval = false;
-+  char16_t *user = nullptr, *pass = nullptr;
-+
-+  rv = prompt->PromptUsernameAndPassword(nullptr, message.get(),
-+                                         key.get(),
-+                                         nsIAuthPrompt::SAVE_PASSWORD_PERMANENTLY,
-+                                         &user, &pass, &retval);
-+  if (NS_FAILED(rv))
-+    return;
-+  if (!retval || !user || !pass)
-+    return;
-+
-+  // XXX We need to convert the UTF-16 username and password from our dialog to
-+  // strings that GnomeVFS can understand.  It's unclear what encoding GnomeVFS
-+  // expects, so for now we assume 7-bit ASCII.  Hopefully, we can get a better
-+  // solution at some point.
-+
-+  // One copy is never enough...
-+  authOut->username = g_strdup(NS_LossyConvertUTF16toASCII(user).get());
-+  authOut->password = g_strdup(NS_LossyConvertUTF16toASCII(pass).get());
-+
-+  nsMemory::Free(user);
-+  nsMemory::Free(pass);
-+}
-+
-+struct nsGnomeVFSAuthCallbackEvent : public nsRunnable
-+{
-+  gconstpointer in;
-+  gsize         in_size;
-+  gpointer      out;
-+  gsize         out_size;
-+  gpointer      callback_data;
-+
-+  NS_IMETHOD Run() {
-+    ProxiedAuthCallback(in, in_size, out, out_size, callback_data);
-+    return NS_OK;
-+  }
-+};
-+
-+static void
-+AuthCallback(gconstpointer in,
-+             gsize         in_size,
-+             gpointer      out,
-+             gsize         out_size,
-+             gpointer      callback_data)
-+{
-+  // Need to proxy this callback over to the main thread.  Synchronous dispatch
-+  // is required in order to provide data to the GnomeVFS callback.
-+
-+  nsRefPtr<nsGnomeVFSAuthCallbackEvent> ev = new nsGnomeVFSAuthCallbackEvent();
-+  if (!ev)
-+    return;  // OOM
-+
-+  ev->in = in;
-+  ev->in_size = in_size;
-+  ev->out = out;
-+  ev->out_size = out_size;
-+  ev->callback_data = callback_data;
-+
-+  NS_DispatchToMainThread(ev, NS_DISPATCH_SYNC);
-+}
-+
-+//-----------------------------------------------------------------------------
-+
-+static gint
-+FileInfoComparator(gconstpointer a, gconstpointer b)
-+{
-+  const GnomeVFSFileInfo *ia = (const GnomeVFSFileInfo *) a;
-+  const GnomeVFSFileInfo *ib = (const GnomeVFSFileInfo *) b;
-+
-+  return strcasecmp(ia->name, ib->name);
-+}
-+
-+//-----------------------------------------------------------------------------
-+
-+class nsGnomeVFSInputStream : public nsIInputStream
-+{
-+  public:
-+    NS_DECL_THREADSAFE_ISUPPORTS
-+    NS_DECL_NSIINPUTSTREAM
-+
-+    nsGnomeVFSInputStream(const nsCString &uriSpec)
-+      : mSpec(uriSpec)
-+      , mChannel(nullptr)
-+      , mHandle(nullptr)
-+      , mBytesRemaining(UINT64_MAX)
-+      , mStatus(NS_OK)
-+      , mDirList(nullptr)
-+      , mDirListPtr(nullptr)
-+      , mDirBufCursor(0)
-+      , mDirOpen(false) {}
-+
-+   ~nsGnomeVFSInputStream() { Close(); }
-+
-+    void SetChannel(nsIChannel *channel)
-+    {
-+      // We need to hold an owning reference to our channel.  This is done
-+      // so we can access the channel's notification callbacks to acquire
-+      // a reference to a nsIAuthPrompt if we need to handle a GnomeVFS
-+      // authentication callback.
-+      //
-+      // However, the channel can only be accessed on the main thread, so
-+      // we have to be very careful with ownership.  Moreover, it doesn't
-+      // support threadsafe addref/release, so proxying is the answer.
-+      //
-+      // Also, it's important to note that this likely creates a reference
-+      // cycle since the channel likely owns this stream.  This reference
-+      // cycle is broken in our Close method.
-+
-+      NS_ADDREF(mChannel = channel);
-+    }
-+
-+  private:
-+    GnomeVFSResult DoOpen();
-+    GnomeVFSResult DoRead(char *aBuf, uint32_t aCount, uint32_t *aCountRead);
-+    nsresult       SetContentTypeOfChannel(const char *contentType);
-+
-+  private:
-+    nsCString                mSpec;
-+    nsIChannel              *mChannel; // manually refcounted
-+    GnomeVFSHandle          *mHandle;
-+    uint64_t                 mBytesRemaining;
-+    nsresult                 mStatus;
-+    GList                   *mDirList;
-+    GList                   *mDirListPtr;
-+    nsCString                mDirBuf;
-+    uint32_t                 mDirBufCursor;
-+    bool                     mDirOpen;
-+};
-+
-+GnomeVFSResult
-+nsGnomeVFSInputStream::DoOpen()
-+{
-+  GnomeVFSResult rv;
-+
-+  NS_ASSERTION(mHandle == nullptr, "already open");
-+
-+  // Push a callback handler on the stack for this thread, so we can intercept
-+  // authentication requests from GnomeVFS.  We'll use the channel to get a
-+  // nsIAuthPrompt instance.
-+
-+  gnome_vfs_module_callback_push(GNOME_VFS_MODULE_CALLBACK_AUTHENTICATION,
-+                                 AuthCallback, mChannel, nullptr);
-+
-+  // Query the mime type first (this could return nullptr). 
-+  //
-+  // XXX We need to do this up-front in order to determine how to open the URI.
-+  //     Unfortunately, the error code GNOME_VFS_ERROR_IS_DIRECTORY is not
-+  //     always returned by gnome_vfs_open when we pass it a URI to a directory!
-+  //     Otherwise, we could have used that as a way to failover to opening the
-+  //     URI as a directory.  Also, it would have been ideal if
-+  //     gnome_vfs_get_file_info_from_handle were actually implemented by the
-+  //     smb:// module, since that would have allowed us to potentially save a
-+  //     round trip to the server to discover the mime type of the document in
-+  //     the case where gnome_vfs_open would have been used.  (Oh well!  /me
-+  //     throws hands up in the air and moves on...)
-+
-+  GnomeVFSFileInfo info = {0};
-+  rv = gnome_vfs_get_file_info(mSpec.get(), &info, GnomeVFSFileInfoOptions(
-+                               GNOME_VFS_FILE_INFO_DEFAULT |
-+                               GNOME_VFS_FILE_INFO_FOLLOW_LINKS));
-+  if (rv == GNOME_VFS_OK)
-+  {
-+    if (info.type == GNOME_VFS_FILE_TYPE_DIRECTORY)
-+    {
-+      rv = gnome_vfs_directory_list_load(&mDirList, mSpec.get(),
-+                                         GNOME_VFS_FILE_INFO_DEFAULT);
-+
-+      LOG(("gnomevfs: gnome_vfs_directory_list_load returned %d (%s) [spec=\"%s\"]\n",
-+          rv, gnome_vfs_result_to_string(rv), mSpec.get()));
-+    }
-+    else
-+    {
-+      rv = gnome_vfs_open(&mHandle, mSpec.get(), GNOME_VFS_OPEN_READ);
-+
-+      LOG(("gnomevfs: gnome_vfs_open returned %d (%s) [spec=\"%s\"]\n",
-+          rv, gnome_vfs_result_to_string(rv), mSpec.get()));
-+    }
-+  }
-+
-+  gnome_vfs_module_callback_pop(GNOME_VFS_MODULE_CALLBACK_AUTHENTICATION);
-+
-+  if (rv == GNOME_VFS_OK)
-+  {
-+    if (mHandle)
-+    {
-+      // Here we set the content type of the channel to the value of the mime
-+      // type determined by GnomeVFS.  However, if GnomeVFS is telling us that
-+      // the document is binary, we'll ignore that and keep the channel's
-+      // content type unspecified.  That will enable our content type sniffing
-+      // algorithms.  This should provide more consistent mime type handling.
-+
-+      if (info.mime_type && (strcmp(info.mime_type, APPLICATION_OCTET_STREAM) != 0))
-+        SetContentTypeOfChannel(info.mime_type);
-+
-+      mBytesRemaining = info.size;
-+
-+      // Update the content length attribute on the channel.  We do this
-+      // synchronously without proxying.  This hack is not as bad as it looks!
-+      if (mBytesRemaining > INT64_MAX) {
-+        mChannel->SetContentLength(-1);
-+      } else {
-+        mChannel->SetContentLength(mBytesRemaining);
-+      }
-+    }
-+    else
-+    {
-+      mDirOpen = true;
-+
-+      // Sort mDirList
-+      mDirList = g_list_sort(mDirList, FileInfoComparator);
-+      mDirListPtr = mDirList;
-+
-+      // Write base URL (make sure it ends with a '/')
-+      mDirBuf.AppendLiteral("300: ");
-+      mDirBuf.Append(mSpec);
-+      if (mSpec.get()[mSpec.Length() - 1] != '/')
-+        mDirBuf.Append('/');
-+      mDirBuf.Append('\n');
-+
-+      // Write column names
-+      mDirBuf.AppendLiteral("200: filename content-length last-modified file-type\n");
-+
-+      // Write charset (assume UTF-8)
-+      // XXX is this correct?
-+      mDirBuf.AppendLiteral("301: UTF-8\n");
-+
-+      SetContentTypeOfChannel(APPLICATION_HTTP_INDEX_FORMAT);
-+    }
-+  }
-+
-+  gnome_vfs_file_info_clear(&info);
-+  return rv;
-+}
-+
-+GnomeVFSResult
-+nsGnomeVFSInputStream::DoRead(char *aBuf, uint32_t aCount, uint32_t *aCountRead)
-+{
-+  GnomeVFSResult rv;
-+
-+  if (mHandle)
-+  {
-+    GnomeVFSFileSize bytesRead;
-+    rv = gnome_vfs_read(mHandle, aBuf, aCount, &bytesRead);
-+    if (rv == GNOME_VFS_OK)
-+    {
-+      // aCount is 32-bit, so aCountRead is under 32-bit value.
-+      *aCountRead = (uint32_t) bytesRead;
-+      mBytesRemaining -= *aCountRead;
-+    }
-+  }
-+  else if (mDirOpen)
-+  {
-+    rv = GNOME_VFS_OK;
-+
-+    while (aCount && rv != GNOME_VFS_ERROR_EOF)
-+    {
-+      // Copy data out of our buffer
-+      uint32_t bufLen = mDirBuf.Length() - mDirBufCursor;
-+      if (bufLen)
-+      {
-+        uint32_t n = std::min(bufLen, aCount);
-+        memcpy(aBuf, mDirBuf.get() + mDirBufCursor, n);
-+        *aCountRead += n;
-+        aBuf += n;
-+        aCount -= n;
-+        mDirBufCursor += n;
-+      }
-+
-+      if (!mDirListPtr)    // Are we at the end of the directory list?
-+      {
-+        rv = GNOME_VFS_ERROR_EOF;
-+      }
-+      else if (aCount)     // Do we need more data?
-+      {
-+        GnomeVFSFileInfo *info = (GnomeVFSFileInfo *) mDirListPtr->data;
-+
-+        // Prune '.' and '..' from directory listing.
-+        if (info->name[0] == '.' &&
-+               (info->name[1] == '\0' ||
-+                   (info->name[1] == '.' && info->name[2] == '\0')))
-+        {
-+          mDirListPtr = mDirListPtr->next;
-+          continue;
-+        }
-+
-+        mDirBuf.AssignLiteral("201: ");
-+
-+        // The "filename" field
-+        nsCString escName;
-+        nsCOMPtr<nsINetUtil> nu = do_GetService(NS_NETUTIL_CONTRACTID);
-+        if (nu) {
-+          nu->EscapeString(nsDependentCString(info->name),
-+                           nsINetUtil::ESCAPE_URL_PATH, escName);
-+
-+          mDirBuf.Append(escName);
-+          mDirBuf.Append(' ');
-+        }
-+
-+        // The "content-length" field
-+        // XXX truncates size from 64-bit to 32-bit
-+        mDirBuf.AppendInt(int32_t(info->size));
-+        mDirBuf.Append(' ');
-+
-+        // The "last-modified" field
-+        // 
-+        // NSPR promises: PRTime is compatible with time_t
-+        // we just need to convert from seconds to microseconds
-+        PRExplodedTime tm;
-+        PRTime pt = ((PRTime) info->mtime) * 1000000;
-+        PR_ExplodeTime(pt, PR_GMTParameters, &tm);
-+        {
-+          char buf[64];
-+          PR_FormatTimeUSEnglish(buf, sizeof(buf),
-+              "%a,%%20%d%%20%b%%20%Y%%20%H:%M:%S%%20GMT ", &tm);
-+          mDirBuf.Append(buf);
-+        }
-+
-+        // The "file-type" field
-+        switch (info->type)
-+        {
-+          case GNOME_VFS_FILE_TYPE_REGULAR:
-+            mDirBuf.AppendLiteral("FILE ");
-+            break;
-+          case GNOME_VFS_FILE_TYPE_DIRECTORY:
-+            mDirBuf.AppendLiteral("DIRECTORY ");
-+            break;
-+          case GNOME_VFS_FILE_TYPE_SYMBOLIC_LINK:
-+            mDirBuf.AppendLiteral("SYMBOLIC-LINK ");
-+            break;
-+          default:
-+            break;
-+        }
-+
-+        mDirBuf.Append('\n');
-+
-+        mDirBufCursor = 0;
-+        mDirListPtr = mDirListPtr->next;
-+      }
-+    }
-+  }
-+  else
-+  {
-+    NS_NOTREACHED("reading from what?");
-+    rv = GNOME_VFS_ERROR_GENERIC;
-+  }
-+
-+  return rv;
-+}
-+
-+// This class is used to implement SetContentTypeOfChannel.
-+class nsGnomeVFSSetContentTypeEvent : public nsRunnable
-+{
-+  public:
-+    nsGnomeVFSSetContentTypeEvent(nsIChannel *channel, const char *contentType)
-+      : mChannel(channel), mContentType(contentType)
-+    {
-+      // stash channel reference in mChannel.  no AddRef here!  see note
-+      // in SetContentTypeOfchannel.
-+    }
-+
-+    NS_IMETHOD Run()
-+    {
-+      mChannel->SetContentType(mContentType);
-+      return NS_OK;
-+    }
-+
-+  private: 
-+    nsIChannel *mChannel;
-+    nsCString   mContentType;
-+};
-+
-+nsresult
-+nsGnomeVFSInputStream::SetContentTypeOfChannel(const char *contentType)
-+{
-+  // We need to proxy this call over to the main thread.  We post an
-+  // asynchronous event in this case so that we don't delay reading data, and
-+  // we know that this is safe to do since the channel's reference will be
-+  // released asynchronously as well.  We trust the ordering of the main
-+  // thread's event queue to protect us against memory corruption.
-+
-+  nsresult rv;
-+  nsCOMPtr<nsIRunnable> ev =
-+      new nsGnomeVFSSetContentTypeEvent(mChannel, contentType);
-+  if (!ev)
-+  {
-+    rv = NS_ERROR_OUT_OF_MEMORY;
-+  }
-+  else
-+  {
-+    rv = NS_DispatchToMainThread(ev);
-+  }
-+  return rv;
-+}
-+
-+NS_IMPL_ISUPPORTS(nsGnomeVFSInputStream, nsIInputStream)
-+
-+NS_IMETHODIMP
-+nsGnomeVFSInputStream::Close()
-+{
-+  if (mHandle)
-+  {
-+    gnome_vfs_close(mHandle);
-+    mHandle = nullptr;
-+  }
-+
-+  if (mDirList)
-+  {
-+    // Destroy the list of GnomeVFSFileInfo objects...
-+    g_list_foreach(mDirList, (GFunc) gnome_vfs_file_info_unref, nullptr);
-+    g_list_free(mDirList);
-+    mDirList = nullptr;
-+    mDirListPtr = nullptr;
-+  }
-+
-+  if (mChannel)
-+  {
-+    nsresult rv = NS_OK;
-+
-+    nsCOMPtr<nsIThread> thread = do_GetMainThread();
-+    if (thread)
-+      rv = NS_ProxyRelease(thread, mChannel);
-+
-+    NS_ASSERTION(thread && NS_SUCCEEDED(rv), "leaking channel reference");
-+    mChannel = nullptr;
-+  }
-+
-+  mSpec.Truncate(); // free memory
-+
-+  // Prevent future reads from re-opening the handle.
-+  if (NS_SUCCEEDED(mStatus))
-+    mStatus = NS_BASE_STREAM_CLOSED;
-+
-+  return NS_OK;
-+}
-+
-+NS_IMETHODIMP
-+nsGnomeVFSInputStream::Available(uint64_t *aResult)
-+{
-+  if (NS_FAILED(mStatus))
-+    return mStatus;
-+
-+  *aResult = mBytesRemaining;
-+  return NS_OK;
-+}
-+
-+NS_IMETHODIMP
-+nsGnomeVFSInputStream::Read(char *aBuf,
-+                            uint32_t aCount,
-+                            uint32_t *aCountRead)
-+{
-+  *aCountRead = 0;
-+
-+  if (mStatus == NS_BASE_STREAM_CLOSED)
-+    return NS_OK;
-+  if (NS_FAILED(mStatus))
-+    return mStatus;
-+
-+  GnomeVFSResult rv = GNOME_VFS_OK;
-+
-+  // If this is our first-time through here, then open the URI.
-+  if (!mHandle && !mDirOpen)
-+    rv = DoOpen();
-+  
-+  if (rv == GNOME_VFS_OK)
-+    rv = DoRead(aBuf, aCount, aCountRead);
-+
-+  if (rv != GNOME_VFS_OK)
-+  {
-+    // If we reach here, we hit some kind of error.  EOF is not an error.
-+    mStatus = MapGnomeVFSResult(rv);
-+    if (mStatus == NS_BASE_STREAM_CLOSED)
-+      return NS_OK;
-+
-+    LOG(("gnomevfs: result %d [%s] mapped to 0x%x\n",
-+        rv, gnome_vfs_result_to_string(rv), mStatus));
-+  }
-+  return mStatus;
-+}
-+
-+NS_IMETHODIMP
-+nsGnomeVFSInputStream::ReadSegments(nsWriteSegmentFun aWriter,
-+                                    void *aClosure,
-+                                    uint32_t aCount,
-+                                    uint32_t *aResult)
-+{
-+  // There is no way to implement this using GnomeVFS, but fortunately
-+  // that doesn't matter.  Because we are a blocking input stream, Necko
-+  // isn't going to call our ReadSegments method.
-+  NS_NOTREACHED("nsGnomeVFSInputStream::ReadSegments");
-+  return NS_ERROR_NOT_IMPLEMENTED;
-+}
-+
-+NS_IMETHODIMP
-+nsGnomeVFSInputStream::IsNonBlocking(bool *aResult)
-+{
-+  *aResult = false;
-+  return NS_OK;
-+}
-+
-+//-----------------------------------------------------------------------------
-+
-+class nsGnomeVFSProtocolHandler : public nsIProtocolHandler
-+                                , public nsIObserver
-+{
-+  public:
-+    NS_DECL_ISUPPORTS
-+    NS_DECL_NSIPROTOCOLHANDLER
-+    NS_DECL_NSIOBSERVER
-+
-+    nsresult Init();
-+
-+  private:
-+    void   InitSupportedProtocolsPref(nsIPrefBranch *prefs);
-+    bool IsSupportedProtocol(const nsCString &spec);
-+
-+    nsCString mSupportedProtocols;
-+};
-+
-+NS_IMPL_ISUPPORTS(nsGnomeVFSProtocolHandler, nsIProtocolHandler, nsIObserver)
-+
-+nsresult
-+nsGnomeVFSProtocolHandler::Init()
-+{
-+#ifdef PR_LOGGING
-+  sGnomeVFSLog = PR_NewLogModule("gnomevfs");
-+#endif
-+
-+  if (!gnome_vfs_initialized())
-+  {
-+    if (!gnome_vfs_init())
-+    {
-+      NS_WARNING("gnome_vfs_init failed");
-+      return NS_ERROR_UNEXPECTED;
-+    }
-+  }
-+
-+  nsCOMPtr<nsIPrefBranch> prefs = do_GetService(NS_PREFSERVICE_CONTRACTID);
-+  if (prefs)
-+  {
-+    InitSupportedProtocolsPref(prefs);
-+    prefs->AddObserver(MOZ_GNOMEVFS_SUPPORTED_PROTOCOLS, this, false);
-+  }
-+
-+  return NS_OK;
-+}
-+
-+void
-+nsGnomeVFSProtocolHandler::InitSupportedProtocolsPref(nsIPrefBranch *prefs)
-+{
-+  // read preferences
-+  nsresult rv = prefs->GetCharPref(MOZ_GNOMEVFS_SUPPORTED_PROTOCOLS,
-+                                   getter_Copies(mSupportedProtocols));
-+  if (NS_SUCCEEDED(rv)) {
-+    mSupportedProtocols.StripWhitespace();
-+    ToLowerCase(mSupportedProtocols);
-+  }
-+  else
-+    mSupportedProtocols.AssignLiteral("smb:,sftp:"); // use defaults
-+
-+  LOG(("gnomevfs: supported protocols \"%s\"\n", mSupportedProtocols.get()));
-+}
-+
-+bool
-+nsGnomeVFSProtocolHandler::IsSupportedProtocol(const nsCString &aSpec)
-+{
-+  const char *specString = aSpec.get();
-+  const char *colon = strchr(specString, ':');
-+  if (!colon)
-+    return false;
-+
-+  uint32_t length = colon - specString + 1;
-+
-+  // <scheme> + ':'
-+  nsCString scheme(specString, length);
-+
-+  char *found = PL_strcasestr(mSupportedProtocols.get(), scheme.get());
-+  if (!found)
-+    return false;
-+
-+  if (found[length] != ',' && found[length] != '\0')
-+    return false;
-+
-+  return true;
-+}
-+
-+NS_IMETHODIMP
-+nsGnomeVFSProtocolHandler::GetScheme(nsACString &aScheme)
-+{
-+  aScheme.Assign(MOZ_GNOMEVFS_SCHEME);
-+  return NS_OK;
-+}
-+
-+NS_IMETHODIMP
-+nsGnomeVFSProtocolHandler::GetDefaultPort(int32_t *aDefaultPort)
-+{
-+  *aDefaultPort = -1;
-+  return NS_OK;
-+}
-+
-+NS_IMETHODIMP
-+nsGnomeVFSProtocolHandler::GetProtocolFlags(uint32_t *aProtocolFlags)
-+{
-+  // Is URI_STD true of all GnomeVFS URI types?
-+  *aProtocolFlags = URI_STD | URI_DANGEROUS_TO_LOAD;
-+  return NS_OK;
-+}
-+
-+NS_IMETHODIMP
-+nsGnomeVFSProtocolHandler::NewURI(const nsACString &aSpec,
-+                                  const char *aOriginCharset,
-+                                  nsIURI *aBaseURI,
-+                                  nsIURI **aResult)
-+{
-+  const nsCString flatSpec(aSpec);
-+  LOG(("gnomevfs: NewURI [spec=%s]\n", flatSpec.get()));
-+
-+  if (!aBaseURI)
-+  {
-+    //
-+    // XXX This check is used to limit the gnome-vfs protocols we support.  For
-+    //     security reasons, it is best that we limit the protocols we support to
-+    //     those with known characteristics.  We might want to lessen this
-+    //     restriction if it proves to be too heavy handed.  A black list of
-+    //     protocols we don't want to support might be better.  For example, we
-+    //     probably don't want to try to load "start-here:" inside the browser.
-+    //     There are others that fall into this category, which are best handled
-+    //     externally by Nautilus (or another app like it).
-+    //
-+    if (!IsSupportedProtocol(flatSpec))
-+      return NS_ERROR_UNKNOWN_PROTOCOL;
-+
-+    // Verify that GnomeVFS supports this URI scheme.
-+    GnomeVFSURI *uri = gnome_vfs_uri_new(flatSpec.get());
-+    if (!uri)
-+      return NS_ERROR_UNKNOWN_PROTOCOL;
-+  }
-+
-+  //
-+  // XXX Can we really assume that all gnome-vfs URIs can be parsed using
-+  //     nsStandardURL?  We probably really need to implement nsIURI/nsIURL
-+  //     in terms of the gnome_vfs_uri_XXX methods, but at least this works
-+  //     correctly for smb:// URLs ;-)
-+  //
-+  //     Also, it might not be possible to fully implement nsIURI/nsIURL in
-+  //     terms of GnomeVFSURI since some Necko methods have no GnomeVFS
-+  //     equivalent.
-+  //
-+  nsresult rv;
-+  nsCOMPtr<nsIStandardURL> url =
-+      do_CreateInstance(NS_STANDARDURL_CONTRACTID, &rv);
-+  if (NS_FAILED(rv))
-+    return rv;
-+
-+  rv = url->Init(nsIStandardURL::URLTYPE_STANDARD, -1, flatSpec,
-+                 aOriginCharset, aBaseURI);
-+  if (NS_SUCCEEDED(rv))
-+    rv = CallQueryInterface(url, aResult);
-+
-+  return rv;
-+}
-+
-+NS_IMETHODIMP
-+nsGnomeVFSProtocolHandler::NewChannel2(nsIURI* aURI,
-+                                       nsILoadInfo* aLoadInfo,
-+                                       nsIChannel** aResult)
-+{
-+  NS_ENSURE_ARG_POINTER(aURI);
-+  nsresult rv;
-+
-+  nsAutoCString spec;
-+  rv = aURI->GetSpec(spec);
-+  if (NS_FAILED(rv))
-+    return rv;
-+
-+  nsRefPtr<nsGnomeVFSInputStream> stream = new nsGnomeVFSInputStream(spec);
-+  if (!stream)
-+  {
-+    rv = NS_ERROR_OUT_OF_MEMORY;
-+  }
-+  else
-+  {
-+    // start out assuming an unknown content-type.  we'll set the content-type
-+    // to something better once we open the URI.
-+    rv = NS_NewInputStreamChannel(aResult, aURI, stream,
-+                                  NS_LITERAL_CSTRING(UNKNOWN_CONTENT_TYPE));
-+    if (NS_SUCCEEDED(rv))
-+      stream->SetChannel(*aResult);
-+  }
-+  return rv;
-+}
-+
-+NS_IMETHODIMP
-+nsGnomeVFSProtocolHandler::NewChannel(nsIURI *aURI, nsIChannel **aResult)
-+{
-+    return NewChannel2(aURI, nullptr, aResult);
-+}
-+
-+NS_IMETHODIMP
-+nsGnomeVFSProtocolHandler::AllowPort(int32_t aPort,
-+                                     const char *aScheme,
-+                                     bool *aResult)
-+{
-+  // Don't override anything.
-+  *aResult = false; 
-+  return NS_OK;
-+}
-+
-+NS_IMETHODIMP
-+nsGnomeVFSProtocolHandler::Observe(nsISupports *aSubject,
-+                                   const char *aTopic,
-+                                   const char16_t *aData)
-+{
-+  if (strcmp(aTopic, NS_PREFBRANCH_PREFCHANGE_TOPIC_ID) == 0) {
-+    nsCOMPtr<nsIPrefBranch> prefs = do_QueryInterface(aSubject);
-+    InitSupportedProtocolsPref(prefs);
-+  }
-+  return NS_OK;
-+}
-+
-+//-----------------------------------------------------------------------------
-+
-+#define NS_GNOMEVFSPROTOCOLHANDLER_CID               \
-+{ /* 9b6dc177-a2e4-49e1-9c98-0a8384de7f6c */         \
-+    0x9b6dc177,                                      \
-+    0xa2e4,                                          \
-+    0x49e1,                                          \
-+    {0x9c, 0x98, 0x0a, 0x83, 0x84, 0xde, 0x7f, 0x6c} \
-+}
-+
-+NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsGnomeVFSProtocolHandler, Init)
-+NS_DEFINE_NAMED_CID(NS_GNOMEVFSPROTOCOLHANDLER_CID);
-+
-+static const mozilla::Module::CIDEntry kVFSCIDs[] = {
-+  { &kNS_GNOMEVFSPROTOCOLHANDLER_CID, false, nullptr, nsGnomeVFSProtocolHandlerConstructor },
-+  { nullptr }
-+};
-+
-+static const mozilla::Module::ContractIDEntry kVFSContracts[] = {
-+  { NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX MOZ_GNOMEVFS_SCHEME, &kNS_GNOMEVFSPROTOCOLHANDLER_CID },
-+  { nullptr }
-+};
-+
-+static const mozilla::Module kVFSModule = {
-+  mozilla::Module::kVersion,
-+  kVFSCIDs,
-+  kVFSContracts
-+};
-+
-+NSMODULE_DEFN(nsGnomeVFSModule) = &kVFSModule;
-diff -up thunderbird-45.0/mozilla/mobile/android/installer/package-manifest.in.moz-1134537-gnomevfsservice thunderbird-45.0/mozilla/mobile/android/installer/package-manifest.in
---- thunderbird-45.0/mozilla/mobile/android/installer/package-manifest.in.moz-1134537-gnomevfsservice	2016-05-09 13:19:52.322048300 +0200
-+++ thunderbird-45.0/mozilla/mobile/android/installer/package-manifest.in	2016-05-09 13:25:02.680824572 +0200
-@@ -613,6 +613,12 @@ bin/libfreebl_32int64_3.so
- @BINPATH@/crashreporter-override.ini
- #endif
- 
-+; [Extensions]
-+;
-+#ifdef MOZ_ENABLE_GNOMEVFS
-+bin/components/@DLL_PREFIX@nkgnomevfs@DLL_SUFFIX@
-+#endif
-+
- [mobile]
- @BINPATH@/chrome/icons/
- @BINPATH@/chrome/chrome@JAREXT@
diff --git a/SOURCES/mozilla-1134537-delete-nsgnomevfsservice.patch b/SOURCES/mozilla-1134537-delete-nsgnomevfsservice.patch
deleted file mode 100644
index 1fa54f0..0000000
--- a/SOURCES/mozilla-1134537-delete-nsgnomevfsservice.patch
+++ /dev/null
@@ -1,413 +0,0 @@
-diff -up thunderbird-45.0/mozilla/toolkit/system/gnome/moz.build.moz-1134537-delete-nsgnomevfsservice thunderbird-45.0/mozilla/toolkit/system/gnome/moz.build
---- thunderbird-45.0/mozilla/toolkit/system/gnome/moz.build.moz-1134537-delete-nsgnomevfsservice	2016-04-07 23:33:34.000000000 +0200
-+++ thunderbird-45.0/mozilla/toolkit/system/gnome/moz.build	2016-05-11 13:56:15.863034987 +0200
-@@ -15,6 +15,12 @@ if CONFIG['MOZ_ENABLE_GCONF']:
-         'nsGConfService.cpp',
-     ]
- 
-+if CONFIG['MOZ_ENABLE_GNOMEVFS']:
-+    SOURCES += [
-+        'nsGnomeVFSService.cpp',
-+    ]
-+
-+
- if CONFIG['MOZ_ENABLE_GIO']:
-     SOURCES += [
-         'nsGIOService.cpp',
-@@ -29,6 +35,7 @@ LOCAL_INCLUDES += [
- ]
- 
- CXXFLAGS += CONFIG['MOZ_GCONF_CFLAGS']
-+CXXFLAGS += CONFIG['MOZ_GNOMEVFS_CFLAGS']
- CXXFLAGS += CONFIG['MOZ_GIO_CFLAGS']
- CXXFLAGS += CONFIG['GLIB_CFLAGS']
- CXXFLAGS += CONFIG['MOZ_DBUS_GLIB_CFLAGS']
-@@ -38,3 +45,5 @@ if CONFIG['MOZ_ENABLE_GTK']:
- 
- if CONFIG['GNU_CXX']:
-     CXXFLAGS += ['-Wshadow']
-+    
-+OS_LIBS += CONFIG['MOZ_GNOMEVFS_LIBS']
-\ No newline at end of file
-diff -up thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeModule.cpp.moz-1134537-delete-nsgnomevfsservice thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeModule.cpp
---- thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeModule.cpp.moz-1134537-delete-nsgnomevfsservice	2016-04-07 23:33:34.000000000 +0200
-+++ thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeModule.cpp	2016-05-11 13:54:01.306097859 +0200
-@@ -12,6 +12,10 @@
- #include "nsGConfService.h"
- NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsGConfService, Init)
- #endif
-+#ifdef MOZ_ENABLE_GNOMEVFS
-+#include "nsGnomeVFSService.h"
-+NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsGnomeVFSService, Init)
-+#endif
- #ifdef MOZ_ENABLE_GIO
- #include "nsGIOService.h"
- #include "nsGSettingsService.h"
-@@ -26,6 +30,9 @@ NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsSy
- #ifdef MOZ_ENABLE_GCONF
- NS_DEFINE_NAMED_CID(NS_GCONFSERVICE_CID);
- #endif
-+#ifdef MOZ_ENABLE_GNOMEVFS
-+NS_DEFINE_NAMED_CID(NS_GNOMEVFSSERVICE_CID);
-+#endif
- #ifdef MOZ_ENABLE_GIO
- NS_DEFINE_NAMED_CID(NS_GIOSERVICE_CID);
- NS_DEFINE_NAMED_CID(NS_GSETTINGSSERVICE_CID);
-@@ -37,6 +44,9 @@ static const mozilla::Module::CIDEntry k
- #ifdef MOZ_ENABLE_GCONF
-   { &kNS_GCONFSERVICE_CID, false, nullptr, nsGConfServiceConstructor },
- #endif
-+#ifdef MOZ_ENABLE_GNOMEVFS
-+  { &kNS_GNOMEVFSSERVICE_CID, false, nullptr, nsGnomeVFSServiceConstructor },
-+#endif
- #ifdef MOZ_ENABLE_GIO
-   { &kNS_GIOSERVICE_CID, false, nullptr, nsGIOServiceConstructor },
-   { &kNS_GSETTINGSSERVICE_CID, false, nullptr, nsGSettingsServiceConstructor },
-@@ -50,6 +60,9 @@ static const mozilla::Module::ContractID
- #ifdef MOZ_ENABLE_GCONF
-   { NS_GCONFSERVICE_CONTRACTID, &kNS_GCONFSERVICE_CID },
- #endif
-+#ifdef MOZ_ENABLE_GNOMEVFS
-+  { NS_GNOMEVFSSERVICE_CONTRACTID, &kNS_GNOMEVFSSERVICE_CID },
-+#endif
- #ifdef MOZ_ENABLE_GIO
-   { NS_GIOSERVICE_CONTRACTID, &kNS_GIOSERVICE_CID },
-   { NS_GSETTINGSSERVICE_CONTRACTID, &kNS_GSETTINGSSERVICE_CID },
-diff -up thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeVFSService.cpp.moz-1134537-delete-nsgnomevfsservice thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeVFSService.cpp
---- thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeVFSService.cpp.moz-1134537-delete-nsgnomevfsservice	2016-05-11 13:54:01.306097859 +0200
-+++ thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeVFSService.cpp	2016-05-11 13:54:01.306097859 +0200
-@@ -0,0 +1,225 @@
-+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-+/* This Source Code Form is subject to the terms of the Mozilla Public
-+ * License, v. 2.0. If a copy of the MPL was not distributed with this
-+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-+
-+#include "nsGnomeVFSService.h"
-+#include "nsStringGlue.h"
-+#include "nsIURI.h"
-+#include "nsTArray.h"
-+#include "nsIStringEnumerator.h"
-+#include "nsAutoPtr.h"
-+
-+extern "C" {
-+#include <libgnomevfs/gnome-vfs.h>
-+#include <libgnomevfs/gnome-vfs-mime.h>
-+#include <libgnomevfs/gnome-vfs-mime-handlers.h>
-+}
-+
-+class nsGnomeVFSMimeApp : public nsIGnomeVFSMimeApp
-+{
-+public:
-+  NS_DECL_ISUPPORTS
-+  NS_DECL_NSIGNOMEVFSMIMEAPP
-+
-+  nsGnomeVFSMimeApp(GnomeVFSMimeApplication* aApp) : mApp(aApp) {}
-+
-+private:
-+  ~nsGnomeVFSMimeApp() { gnome_vfs_mime_application_free(mApp); }
-+  GnomeVFSMimeApplication *mApp;
-+};
-+
-+NS_IMPL_ISUPPORTS(nsGnomeVFSMimeApp, nsIGnomeVFSMimeApp)
-+
-+NS_IMETHODIMP
-+nsGnomeVFSMimeApp::GetId(nsACString& aId)
-+{
-+  aId.Assign(mApp->id);
-+  return NS_OK;
-+}
-+
-+NS_IMETHODIMP
-+nsGnomeVFSMimeApp::GetName(nsACString& aName)
-+{
-+  aName.Assign(mApp->name);
-+  return NS_OK;
-+}
-+
-+NS_IMETHODIMP
-+nsGnomeVFSMimeApp::GetCommand(nsACString& aCommand)
-+{
-+  aCommand.Assign(mApp->command);
-+  return NS_OK;
-+}
-+
-+NS_IMETHODIMP
-+nsGnomeVFSMimeApp::GetCanOpenMultipleFiles(bool* aCanOpen)
-+{
-+  *aCanOpen = mApp->can_open_multiple_files;
-+  return NS_OK;
-+}
-+
-+NS_IMETHODIMP
-+nsGnomeVFSMimeApp::GetExpectsURIs(int32_t* aExpects)
-+{
-+  *aExpects = mApp->expects_uris;
-+  return NS_OK;
-+}
-+
-+NS_IMETHODIMP
-+nsGnomeVFSMimeApp::Launch(const nsACString &aUri)
-+{
-+  char *uri = gnome_vfs_make_uri_from_input(PromiseFlatCString(aUri).get());
-+
-+  if (! uri)
-+    return NS_ERROR_FAILURE;
-+
-+  GList uris = { 0 };
-+  uris.data = uri;
-+
-+  GnomeVFSResult result = gnome_vfs_mime_application_launch(mApp, &uris);
-+  g_free(uri);
-+
-+  if (result != GNOME_VFS_OK)
-+    return NS_ERROR_FAILURE;
-+
-+  return NS_OK;
-+}
-+
-+class UTF8StringEnumerator : public nsIUTF8StringEnumerator
-+{
-+public:
-+  UTF8StringEnumerator() : mIndex(0) { }
-+private:
-+  ~UTF8StringEnumerator() { }
-+
-+  NS_DECL_ISUPPORTS
-+  NS_DECL_NSIUTF8STRINGENUMERATOR
-+public:
-+  nsTArray<nsCString> mStrings;
-+  uint32_t            mIndex;
-+};
-+
-+NS_IMPL_ISUPPORTS(UTF8StringEnumerator, nsIUTF8StringEnumerator)
-+
-+NS_IMETHODIMP
-+UTF8StringEnumerator::HasMore(bool *aResult)
-+{
-+  *aResult = mIndex < mStrings.Length();
-+  return NS_OK;
-+}
-+
-+NS_IMETHODIMP
-+UTF8StringEnumerator::GetNext(nsACString& aResult)
-+{
-+  if (mIndex >= mStrings.Length())
-+    return NS_ERROR_UNEXPECTED;
-+
-+  aResult.Assign(mStrings[mIndex]);
-+  ++mIndex;
-+  return NS_OK;
-+}
-+
-+NS_IMETHODIMP
-+nsGnomeVFSMimeApp::GetSupportedURISchemes(nsIUTF8StringEnumerator** aSchemes)
-+{
-+  *aSchemes = nullptr;
-+
-+  RefPtr<UTF8StringEnumerator> array = new UTF8StringEnumerator();
-+  NS_ENSURE_TRUE(array, NS_ERROR_OUT_OF_MEMORY);
-+
-+  for (GList *list = mApp->supported_uri_schemes; list; list = list->next) {
-+    if (!array->mStrings.AppendElement((char*) list->data)) {
-+      return NS_ERROR_OUT_OF_MEMORY;
-+    }
-+  }
-+
-+  NS_ADDREF(*aSchemes = array);
-+  return NS_OK;
-+}
-+
-+NS_IMETHODIMP
-+nsGnomeVFSMimeApp::GetRequiresTerminal(bool* aRequires)
-+{
-+  *aRequires = mApp->requires_terminal;
-+  return NS_OK;
-+}
-+
-+nsresult
-+nsGnomeVFSService::Init()
-+{
-+  return gnome_vfs_init() ? NS_OK : NS_ERROR_FAILURE;
-+}
-+
-+NS_IMPL_ISUPPORTS(nsGnomeVFSService, nsIGnomeVFSService)
-+
-+NS_IMETHODIMP
-+nsGnomeVFSService::GetMimeTypeFromExtension(const nsACString &aExtension,
-+                                            nsACString& aMimeType)
-+{
-+  nsAutoCString fileExtToUse(".");
-+  fileExtToUse.Append(aExtension);
-+
-+  const char *mimeType = gnome_vfs_mime_type_from_name(fileExtToUse.get());
-+  aMimeType.Assign(mimeType);
-+
-+  // |mimeType| points to internal gnome-vfs data, so don't free it.
-+
-+  return NS_OK;
-+}
-+
-+NS_IMETHODIMP
-+nsGnomeVFSService::GetAppForMimeType(const nsACString &aMimeType,
-+                                     nsIGnomeVFSMimeApp** aApp)
-+{
-+  *aApp = nullptr;
-+  GnomeVFSMimeApplication *app =
-+   gnome_vfs_mime_get_default_application(PromiseFlatCString(aMimeType).get());
-+
-+  if (app) {
-+    nsGnomeVFSMimeApp *mozApp = new nsGnomeVFSMimeApp(app);
-+    NS_ENSURE_TRUE(mozApp, NS_ERROR_OUT_OF_MEMORY);
-+
-+    NS_ADDREF(*aApp = mozApp);
-+  }
-+
-+  return NS_OK;
-+}
-+
-+NS_IMETHODIMP
-+nsGnomeVFSService::GetDescriptionForMimeType(const nsACString &aMimeType,
-+                                             nsACString& aDescription)
-+{
-+  const char *desc =
-+    gnome_vfs_mime_get_description(PromiseFlatCString(aMimeType).get());
-+  aDescription.Assign(desc);
-+
-+  // |desc| points to internal gnome-vfs data, so don't free it.
-+
-+  return NS_OK;
-+}
-+
-+NS_IMETHODIMP
-+nsGnomeVFSService::ShowURI(nsIURI *aURI)
-+{
-+  nsAutoCString spec;
-+  aURI->GetSpec(spec);
-+
-+  if (gnome_vfs_url_show_with_env(spec.get(), nullptr) == GNOME_VFS_OK)
-+    return NS_OK;
-+
-+  return NS_ERROR_FAILURE;
-+}
-+
-+NS_IMETHODIMP
-+nsGnomeVFSService::ShowURIForInput(const nsACString &aUri)
-+{
-+  char* spec = gnome_vfs_make_uri_from_input(PromiseFlatCString(aUri).get());
-+  nsresult rv = NS_ERROR_FAILURE;
-+
-+  if (gnome_vfs_url_show_with_env(spec, nullptr) == GNOME_VFS_OK)
-+    rv = NS_OK;
-+
-+  g_free(spec);
-+  return rv;
-+}
-diff -up thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeVFSService.h.moz-1134537-delete-nsgnomevfsservice thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeVFSService.h
---- thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeVFSService.h.moz-1134537-delete-nsgnomevfsservice	2016-05-11 13:54:01.307097859 +0200
-+++ thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeVFSService.h	2016-05-11 13:54:01.307097859 +0200
-@@ -0,0 +1,26 @@
-+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-+/* This Source Code Form is subject to the terms of the Mozilla Public
-+ * License, v. 2.0. If a copy of the MPL was not distributed with this
-+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-+
-+#ifndef nsGnomeVFSService_h_
-+#define nsGnomeVFSService_h_
-+
-+#include "nsIGnomeVFSService.h"
-+#include "mozilla/Attributes.h"
-+
-+#define NS_GNOMEVFSSERVICE_CID \
-+{0x5f43022c, 0x6194, 0x4b37, {0xb2, 0x6d, 0xe4, 0x10, 0x24, 0x62, 0x52, 0x64}}
-+
-+class nsGnomeVFSService : public nsIGnomeVFSService
-+{
-+public:
-+  NS_DECL_ISUPPORTS
-+  NS_DECL_NSIGNOMEVFSSERVICE
-+
-+  nsresult Init();
-+private:
-+  ~nsGnomeVFSService() { };
-+};
-+
-+#endif
-diff -up thunderbird-45.0/mozilla/xpcom/system/moz.build.moz-1134537-delete-nsgnomevfsservice thunderbird-45.0/mozilla/xpcom/system/moz.build
---- thunderbird-45.0/mozilla/xpcom/system/moz.build.moz-1134537-delete-nsgnomevfsservice	2016-04-07 23:33:35.000000000 +0200
-+++ thunderbird-45.0/mozilla/xpcom/system/moz.build	2016-05-11 13:54:01.307097859 +0200
-@@ -11,6 +11,7 @@ XPIDL_SOURCES += [
-     'nsIGConfService.idl',
-     'nsIGeolocationProvider.idl',
-     'nsIGIOService.idl',
-+    'nsIGnomeVFSService.idl',
-     'nsIGSettingsService.idl',
-     'nsIHapticFeedback.idl',
-     'nsIPackageKitService.idl',
-diff -up thunderbird-45.0/mozilla/xpcom/system/nsIGnomeVFSService.idl.moz-1134537-delete-nsgnomevfsservice thunderbird-45.0/mozilla/xpcom/system/nsIGnomeVFSService.idl
---- thunderbird-45.0/mozilla/xpcom/system/nsIGnomeVFSService.idl.moz-1134537-delete-nsgnomevfsservice	2016-05-11 13:54:01.307097859 +0200
-+++ thunderbird-45.0/mozilla/xpcom/system/nsIGnomeVFSService.idl	2016-05-11 13:54:01.307097859 +0200
-@@ -0,0 +1,64 @@
-+/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-+/* This Source Code Form is subject to the terms of the Mozilla Public
-+ * License, v. 2.0. If a copy of the MPL was not distributed with this
-+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-+
-+#include "nsISupports.idl"
-+
-+interface nsIUTF8StringEnumerator;
-+interface nsIURI;
-+
-+/* nsIGnomeVFSMimeApp holds information about an application that is looked up
-+   with nsIGnomeVFSService::GetAppForMimeType. */
-+
-+[scriptable, uuid(66009894-9877-405b-9321-bf30420e34e6)]
-+interface nsIGnomeVFSMimeApp : nsISupports
-+{
-+  const long EXPECTS_URIS  = 0;
-+  const long EXPECTS_PATHS = 1;
-+  const long EXPECTS_URIS_FOR_NON_FILES = 2;
-+
-+  readonly attribute AUTF8String         id;
-+  readonly attribute AUTF8String         name;
-+  readonly attribute AUTF8String         command;
-+  readonly attribute boolean             canOpenMultipleFiles;
-+  readonly attribute long                expectsURIs;  // see constants above
-+  readonly attribute nsIUTF8StringEnumerator supportedURISchemes;
-+  readonly attribute boolean             requiresTerminal;
-+
-+  void launch(in AUTF8String uri);
-+};
-+
-+/*
-+ * The VFS service makes use of a registry for information.
-+ *
-+ * The MIME registry holds information about MIME types, such as which
-+ * extensions map to a given MIME type.  The MIME registry also stores the
-+ * id of the application selected to handle each MIME type.
-+ */
-+
-+[scriptable, uuid(d1ac73a6-2ceb-4164-8142-215afe7fe8a6)]
-+interface nsIGnomeVFSService : nsISupports
-+{
-+  /*** MIME registry methods ***/
-+
-+  /* Obtain the MIME type registered for an extension.  The extension
-+     should not include a leading dot. */
-+  AUTF8String        getMimeTypeFromExtension(in AUTF8String extension);
-+
-+  /* Obtain the preferred application for opening a given MIME type */
-+  nsIGnomeVFSMimeApp getAppForMimeType(in AUTF8String mimeType);
-+
-+  /* Obtain a description for the given MIME type */
-+  AUTF8String        getDescriptionForMimeType(in AUTF8String mimeType);
-+
-+  /*** Misc. methods ***/
-+
-+  /* Open the given URI in the default application */
-+  void               showURI(in nsIURI uri);
-+  [noscript] void    showURIForInput(in ACString uri);
-+};
-+
-+%{C++
-+#define NS_GNOMEVFSSERVICE_CONTRACTID "@mozilla.org/gnome-vfs-service;1"
-+%}
diff --git a/SOURCES/mozilla-1134537-only-support-gio-in-nsioservice.patch b/SOURCES/mozilla-1134537-only-support-gio-in-nsioservice.patch
deleted file mode 100644
index 9cba59b..0000000
--- a/SOURCES/mozilla-1134537-only-support-gio-in-nsioservice.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-# HG changeset patch
-# User Alex Henrie <alexhenrie24@gmail.com>
-# Date 1425704794 25200
-#      Fri Mar 06 22:06:34 2015 -0700
-# Node ID 7421abd87f753042bfe4f26c7cff1ebb0d047cef
-# Parent  43fb1f92e8d41f1dc086b336532d9fa5720b6475
-Bug 1134537 - Only support GIO in nsIOService.
-
-diff --git a/netwerk/base/nsIOService.cpp b/netwerk/base/nsIOService.cpp
---- a/netwerk/base/nsIOService.cpp
-+++ b/netwerk/base/nsIOService.cpp
-@@ -434,17 +434,17 @@ nsIOService::GetProtocolHandler(const ch
-         ToLowerCase(contractID);
- 
-         rv = CallGetService(contractID.get(), result);
-         if (NS_SUCCEEDED(rv)) {
-             CacheProtocolHandler(scheme, *result);
-             return rv;
-         }
- 
--#ifdef MOZ_X11
-+#ifdef MOZ_ENABLE_GIO
-         // check to see whether GVFS can handle this URI scheme.  if it can
-         // create a nsIURI for the "scheme:", then we assume it has support for
-         // the requested protocol.  otherwise, we failover to using the default
-         // protocol handler.
- 
-         rv = CallGetService(NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX"moz-gio",
-                             result);
-         if (NS_SUCCEEDED(rv)) {
-@@ -455,40 +455,16 @@ nsIOService::GetProtocolHandler(const ch
-             rv = (*result)->NewURI(spec, nullptr, nullptr, &uri);
-             if (NS_SUCCEEDED(rv)) {
-                 NS_RELEASE(uri);
-                 return rv;
-             }
- 
-             NS_RELEASE(*result);
-         }
--
--        // check to see whether GnomeVFS can handle this URI scheme.  if it can
--        // create a nsIURI for the "scheme:", then we assume it has support for
--        // the requested protocol.  otherwise, we failover to using the default
--        // protocol handler.
--
--        // XXX should this be generalized into something that searches a
--        // category?  (see bug 234714)
--
--        rv = CallGetService(NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX"moz-gnomevfs",
--                            result);
--        if (NS_SUCCEEDED(rv)) {
--            nsAutoCString spec(scheme);
--            spec.Append(':');
--
--            nsIURI *uri;
--            rv = (*result)->NewURI(spec, nullptr, nullptr, &uri);
--            if (NS_SUCCEEDED(rv)) {
--                NS_RELEASE(uri);
--                return rv;
--            }
--
--            NS_RELEASE(*result);
--        }
- #endif
-     }
- 
-     // Okay we don't have a protocol handler to handle this url type, so use
-     // the default protocol handler.  This will cause urls to get dispatched
-     // out to the OS ('cause we can't do anything with them) when we try to
-     // read from a channel created by the default protocol handler.
- 
diff --git a/SOURCES/mozilla-1158578-recursion-fix.patch b/SOURCES/mozilla-1158578-recursion-fix.patch
new file mode 100644
index 0000000..77bc6ef
--- /dev/null
+++ b/SOURCES/mozilla-1158578-recursion-fix.patch
@@ -0,0 +1,147 @@
+# vim: se ft=diff :
+# HG changeset patch
+# User Jan Horak <jhorak>
+# Date 2017-04-26 02:36
+# Parent  540cd06b1aea0bfa6f906b86393f5480914c01c2
+Bug 1158578 - fix crash when compacting IMAP account. r=jorgk
+
+diff --git a/mailnews/base/src/nsMsgFolderCompactor.cpp b/mailnews/base/src/nsMsgFolderCompactor.cpp
+--- a/mailnews/base/src/nsMsgFolderCompactor.cpp
++++ b/mailnews/base/src/nsMsgFolderCompactor.cpp
+@@ -31,16 +31,17 @@
+ #include "nsIMsgStatusFeedback.h"
+ #include "nsMsgBaseCID.h"
+ #include "nsIMsgFolderNotificationService.h"
+ #include "nsIMsgPluggableStore.h"
+ #include "nsMsgFolderCompactor.h"
+ #include <algorithm>
+ #include "nsIOutputStream.h"
+ #include "nsIInputStream.h"
++#include "nsPrintfCString.h"
+ 
+ 
+ //////////////////////////////////////////////////////////////////////////////
+ // nsFolderCompactState
+ //////////////////////////////////////////////////////////////////////////////
+ 
+ NS_IMPL_ISUPPORTS(nsFolderCompactState, nsIMsgFolderCompactor, nsIRequestObserver, nsIStreamListener, nsICopyMessageStreamListener, nsIUrlListener)
+ 
+@@ -1096,16 +1097,24 @@ nsOfflineStoreCompactState::OnStopReques
+   // check for it specifically and don't terminate the compaction.
+   if (NS_FAILED(rv) && rv != NS_MSG_ERROR_MSG_NOT_OFFLINE)
+     goto done;
+   uri = do_QueryInterface(ctxt, &rv);
+   if (NS_FAILED(rv)) goto done;
+   rv = GetMessage(getter_AddRefs(msgHdr));
+   if (NS_FAILED(rv)) goto done;
+ 
++  // This is however an unexpected condition, so let's print a warning.
++  if (rv == NS_MSG_ERROR_MSG_NOT_OFFLINE) {
++    nsAutoCString spec;
++    uri->GetSpec(spec);
++    nsPrintfCString msg("Message expectedly not available offline: %s", spec.get());
++    NS_WARNING(msg.get());
++  }
++
+   if (msgHdr)
+   {
+     if (NS_SUCCEEDED(status))
+     {
+       msgHdr->SetMessageOffset(m_startOfNewMsg);
+       char storeToken[100];
+       PR_snprintf(storeToken, sizeof(storeToken), "%lld", m_startOfNewMsg);
+       msgHdr->SetStringProperty("storeToken", storeToken);
+diff --git a/mailnews/imap/src/nsImapProtocol.cpp b/mailnews/imap/src/nsImapProtocol.cpp
+--- a/mailnews/imap/src/nsImapProtocol.cpp
++++ b/mailnews/imap/src/nsImapProtocol.cpp
+@@ -9500,35 +9500,66 @@ nsresult nsImapMockChannel::ReadFromMemC
+     // Content is modified so return an error so we try to open it the
+     // old fashioned way.
+     rv = NS_ERROR_FAILURE;
+   }
+ 
+   return rv;
+ }
+ 
++class nsReadFromImapConnectionFailure : public mozilla::Runnable
++{
++public:
++  nsReadFromImapConnectionFailure(nsImapMockChannel *aChannel)
++    : mImapMockChannel(aChannel)
++  {}
++
++  NS_IMETHOD Run()
++  {
++    if (mImapMockChannel) {
++      mImapMockChannel->RunOnStopRequestFailure();
++    }
++    return NS_OK;
++  }
++private:
++  RefPtr<nsImapMockChannel> mImapMockChannel;
++};
++
++
++nsresult nsImapMockChannel::RunOnStopRequestFailure()
++{
++  if (m_channelListener) {
++    m_channelListener->OnStopRequest(this, m_channelContext,
++                                     NS_MSG_ERROR_MSG_NOT_OFFLINE);
++  }
++  return NS_OK;
++}
++
+ // the requested url isn't in any of our caches so create an imap connection
+ // to process it.
+ nsresult nsImapMockChannel::ReadFromImapConnection()
+ {
+   nsresult rv = NS_OK;
+   nsCOMPtr<nsIImapUrl> imapUrl = do_QueryInterface(m_url);
+   nsCOMPtr<nsIMsgMailNewsUrl> mailnewsUrl = do_QueryInterface(m_url);
+ 
+   bool localOnly = false;
+   imapUrl->GetLocalFetchOnly(&localOnly);
+   if (localOnly)
+   {
+     // This will cause an OnStartRunningUrl, and the subsequent close
+     // will then cause an OnStopRunningUrl with the cancel status.
+     NotifyStartEndReadFromCache(true);
+     Cancel(NS_MSG_ERROR_MSG_NOT_OFFLINE);
+-    if (m_channelListener)
+-      m_channelListener->OnStopRequest(this, m_channelContext,
+-                                       NS_MSG_ERROR_MSG_NOT_OFFLINE);
++
++    // Dispatch error notification, so ReadFromImapConnection() returns *before*
++    // the error is sent to the listener's OnStopRequest(). This avoids
++    // endless recursion where the caller relies on async execution.
++    nsCOMPtr<nsIRunnable> event = new nsReadFromImapConnectionFailure(this);
++    NS_DispatchToCurrentThread(event);
+     return NS_MSG_ERROR_MSG_NOT_OFFLINE;
+   }
+ 
+   nsCOMPtr <nsILoadGroup> loadGroup;
+   GetLoadGroup(getter_AddRefs(loadGroup));
+   if (!loadGroup) // if we don't have one, the url will snag one from the msg window...
+     mailnewsUrl->GetLoadGroup(getter_AddRefs(loadGroup));
+ 
+diff --git a/mailnews/imap/src/nsImapProtocol.h b/mailnews/imap/src/nsImapProtocol.h
+--- a/mailnews/imap/src/nsImapProtocol.h
++++ b/mailnews/imap/src/nsImapProtocol.h
+@@ -714,16 +714,17 @@ public:
+   NS_DECL_NSIIMAPMOCKCHANNEL
+   NS_DECL_NSICHANNEL
+   NS_DECL_NSIREQUEST
+   NS_DECL_NSICACHEENTRYOPENCALLBACK
+   NS_DECL_NSITRANSPORTEVENTSINK
+ 
+   nsImapMockChannel();
+   static nsresult Create (const nsIID& iid, void **result);
++  nsresult RunOnStopRequestFailure();
+ 
+ protected:
+   virtual ~nsImapMockChannel();
+   nsCOMPtr <nsIURI> m_url;
+ 
+   nsCOMPtr<nsIURI> m_originalUrl;
+   nsCOMPtr<nsILoadGroup> m_loadGroup;
+   nsCOMPtr<nsILoadInfo> m_loadInfo;
diff --git a/SOURCES/mozilla-1253216-disable-ion.patch b/SOURCES/mozilla-1253216-disable-ion.patch
deleted file mode 100644
index 6de0720..0000000
--- a/SOURCES/mozilla-1253216-disable-ion.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -up firefox-45.0/firefox-45.0/js/src/jit/AtomicOperations.h.old firefox-45.0/firefox-45.0/js/src/jit/AtomicOperations.h
---- firefox-45.0/firefox-45.0/js/src/jit/AtomicOperations.h.old	2016-03-01 09:45:01.000000000 +0100
-+++ firefox-45.0/firefox-45.0/js/src/jit/AtomicOperations.h	2016-03-03 13:13:34.915015391 +0100
-@@ -305,7 +305,7 @@ AtomicOperations::isLockfree(int32_t siz
-     || defined(__ppc__) || defined(__PPC__)
- # include "jit/none/AtomicOperations-ppc.h"
- #elif defined(JS_CODEGEN_NONE)
--# include "jit/none/AtomicOperations-none.h"
-+# include "jit/none/AtomicOperations-ppc.h"
- #elif defined(JS_CODEGEN_X86) || defined(JS_CODEGEN_X64)
- # include "jit/x86-shared/AtomicOperations-x86-shared.h"
- #else
diff --git a/SOURCES/mozilla-256180.patch b/SOURCES/mozilla-256180.patch
new file mode 100644
index 0000000..13a1c97
--- /dev/null
+++ b/SOURCES/mozilla-256180.patch
@@ -0,0 +1,11 @@
+--- a/layout/generic/nsIFrame.h.old	2016-07-11 13:41:39.688276559 +0200
++++ b/layout/generic/nsIFrame.h	2016-07-11 13:42:12.791406976 +0200
+@@ -13,7 +13,7 @@
+ #error This header/class should only be used within Mozilla code. It should not be used by extensions.
+ #endif
+ 
+-#define MAX_REFLOW_DEPTH 200
++#define MAX_REFLOW_DEPTH 1000
+ 
+ /* nsIFrame is in the process of being deCOMtaminated, i.e., this file is eventually
+    going to be eliminated, and all callers will use nsFrame instead.  At the moment
diff --git a/SOURCES/mozilla-694870-backout.patch b/SOURCES/mozilla-694870-backout.patch
deleted file mode 100644
index d5dc410..0000000
--- a/SOURCES/mozilla-694870-backout.patch
+++ /dev/null
@@ -1,334 +0,0 @@
-diff -up thunderbird-45.0/mozilla/uriloader/exthandler/unix/nsGNOMERegistry.cpp.moz-694870-backout thunderbird-45.0/mozilla/uriloader/exthandler/unix/nsGNOMERegistry.cpp
---- thunderbird-45.0/mozilla/uriloader/exthandler/unix/nsGNOMERegistry.cpp.moz-694870-backout	2016-04-07 23:33:34.000000000 +0200
-+++ thunderbird-45.0/mozilla/uriloader/exthandler/unix/nsGNOMERegistry.cpp	2016-05-10 15:17:28.973860591 +0200
-@@ -6,50 +6,95 @@
- #include "nsGNOMERegistry.h"
- #include "nsString.h"
- #include "nsIComponentManager.h"
-+#include "nsIFile.h"
- #include "nsMIMEInfoUnix.h"
- #include "nsAutoPtr.h"
-+#include "nsIGConfService.h"
-+#include "nsIGnomeVFSService.h"
- #include "nsIGIOService.h"
- 
-+#ifdef MOZ_WIDGET_GTK
-+#include <glib.h>
-+#include <glib-object.h>
-+#endif
-+
- /* static */ bool
- nsGNOMERegistry::HandlerExists(const char *aProtocolScheme)
- {
-   nsCOMPtr<nsIGIOService> giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID);
--  if (!giovfs) {
--    return false;
--  }
-+  nsCOMPtr<nsIGConfService> gconf = do_GetService(NS_GCONFSERVICE_CONTRACTID);
-+  if (giovfs) {
-+    nsCOMPtr<nsIGIOMimeApp> app;
-+    if (NS_FAILED(giovfs->GetAppForURIScheme(nsDependentCString(aProtocolScheme),
-+                                             getter_AddRefs(app))))
-+      return false;
-+    else
-+      return true;
-+  } else if (gconf) {
-+    bool isEnabled;
-+    nsAutoCString handler;
-+    if (NS_FAILED(gconf->GetAppForProtocol(nsDependentCString(aProtocolScheme), &isEnabled, handler)))
-+      return false;
- 
--  nsCOMPtr<nsIGIOMimeApp> app;
--  return NS_SUCCEEDED(giovfs->GetAppForURIScheme(nsDependentCString(aProtocolScheme),
--                                                 getter_AddRefs(app)));
-+    return isEnabled;
-+  }
-+  return false;
- }
- 
- // XXX Check HandlerExists() before calling LoadURL.
-+//
-+// If there is not a registered handler for the protocol, gnome_url_show()
-+// falls back to using gnomevfs modules.  See bug 389632.  We don't want
-+// this fallback to happen as we are not sure of the safety of all gnomevfs
-+// modules and MIME-default applications.  (gnomevfs should be handled in
-+// nsGnomeVFSProtocolHandler.)
- 
- /* static */ nsresult
- nsGNOMERegistry::LoadURL(nsIURI *aURL)
- {
-   nsCOMPtr<nsIGIOService> giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID);
--  if (!giovfs) {
--    return NS_ERROR_FAILURE;
--  }
-+  if (giovfs)
-+    return giovfs->ShowURI(aURL);
-+  nsCOMPtr<nsIGnomeVFSService> gnomevfs = do_GetService(NS_GNOMEVFSSERVICE_CONTRACTID);
-+  if (gnomevfs)
-+    return gnomevfs->ShowURI(aURL);
- 
--  return giovfs->ShowURI(aURL);
-+  return NS_ERROR_FAILURE;
- }
- 
- /* static */ void
- nsGNOMERegistry::GetAppDescForScheme(const nsACString& aScheme,
-                                      nsAString& aDesc)
- {
-+  nsCOMPtr<nsIGConfService> gconf = do_GetService(NS_GCONFSERVICE_CONTRACTID);
-   nsCOMPtr<nsIGIOService> giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID);
--  if (!giovfs)
-+  if (!gconf && !giovfs)
-     return;
- 
-   nsAutoCString name;
--  nsCOMPtr<nsIGIOMimeApp> app;
--  if (NS_FAILED(giovfs->GetAppForURIScheme(aScheme, getter_AddRefs(app))))
--    return;
--
--  app->GetName(name);
-+  if (giovfs) {
-+    nsCOMPtr<nsIGIOMimeApp> app;
-+    if (NS_FAILED(giovfs->GetAppForURIScheme(aScheme, getter_AddRefs(app))))
-+      return;
-+
-+    app->GetName(name);
-+  } else {
-+    bool isEnabled;
-+    if (NS_FAILED(gconf->GetAppForProtocol(aScheme, &isEnabled, name)))
-+      return;
-+
-+    if (!name.IsEmpty()) {
-+      // Try to only provide the executable name, as it is much simpler than with the path and arguments
-+      int32_t firstSpace = name.FindChar(' ');
-+      if (firstSpace != kNotFound) {
-+        name.Truncate(firstSpace);
-+        int32_t lastSlash = name.RFindChar('/');
-+        if (lastSlash != kNotFound) {
-+          name.Cut(0, lastSlash + 1);
-+        }
-+      }
-+    }
-+  }
- 
-   CopyUTF8toUTF16(name, aDesc);
- }
-@@ -60,15 +105,22 @@ nsGNOMERegistry::GetFromExtension(const
- {
-   nsAutoCString mimeType;
-   nsCOMPtr<nsIGIOService> giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID);
--  if (!giovfs) {
--    return nullptr;
--  }
--
--  // Get the MIME type from the extension, then call GetFromType to
--  // fill in the MIMEInfo.
--  if (NS_FAILED(giovfs->GetMimeTypeFromExtension(aFileExt, mimeType)) ||
--      mimeType.EqualsLiteral("application/octet-stream")) {
--    return nullptr;
-+  if (giovfs) {
-+    // Get the MIME type from the extension, then call GetFromType to
-+    // fill in the MIMEInfo.
-+    if (NS_FAILED(giovfs->GetMimeTypeFromExtension(aFileExt, mimeType)) ||
-+        mimeType.EqualsLiteral("application/octet-stream")) {
-+      return nullptr;
-+    }
-+  } else {
-+    /* Fallback to GnomeVFS */
-+    nsCOMPtr<nsIGnomeVFSService> gnomevfs = do_GetService(NS_GNOMEVFSSERVICE_CONTRACTID);
-+    if (!gnomevfs)
-+      return nullptr;
-+
-+    if (NS_FAILED(gnomevfs->GetMimeTypeFromExtension(aFileExt, mimeType)) ||
-+        mimeType.EqualsLiteral("application/octet-stream"))
-+      return nullptr;
-   }
- 
-   RefPtr<nsMIMEInfoBase> mi = GetFromType(mimeType);
-@@ -89,17 +141,28 @@ nsGNOMERegistry::GetFromType(const nsACS
-   nsAutoCString description;
- 
-   nsCOMPtr<nsIGIOService> giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID);
--  if (!giovfs) {
--    return nullptr;
--  }
--
--  nsCOMPtr<nsIGIOMimeApp> gioHandlerApp;
--  if (NS_FAILED(giovfs->GetAppForMimeType(aMIMEType, getter_AddRefs(gioHandlerApp))) ||
--      !gioHandlerApp) {
--    return nullptr;
-+  if (giovfs) {
-+    nsCOMPtr<nsIGIOMimeApp> gioHandlerApp;
-+    if (NS_FAILED(giovfs->GetAppForMimeType(aMIMEType, getter_AddRefs(gioHandlerApp))) ||
-+        !gioHandlerApp) {
-+      return nullptr;
-+    }
-+    gioHandlerApp->GetName(name);
-+    giovfs->GetDescriptionForMimeType(aMIMEType, description);
-+  } else {
-+    /* Fallback to GnomeVFS*/
-+    nsCOMPtr<nsIGnomeVFSService> gnomevfs = do_GetService(NS_GNOMEVFSSERVICE_CONTRACTID);
-+    if (!gnomevfs)
-+      return nullptr;
-+
-+    nsCOMPtr<nsIGnomeVFSMimeApp> gnomeHandlerApp;
-+    if (NS_FAILED(gnomevfs->GetAppForMimeType(aMIMEType, getter_AddRefs(gnomeHandlerApp))) ||
-+        !gnomeHandlerApp) {
-+      return nullptr;
-+    }
-+    gnomeHandlerApp->GetName(name);
-+    gnomevfs->GetDescriptionForMimeType(aMIMEType, description);
-   }
--  gioHandlerApp->GetName(name);
--  giovfs->GetDescriptionForMimeType(aMIMEType, description);
- 
-   mimeInfo->SetDefaultDescription(NS_ConvertUTF8toUTF16(name));
-   mimeInfo->SetPreferredAction(nsIMIMEInfo::useSystemDefault);
-diff -up thunderbird-45.0/mozilla/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp.moz-694870-backout thunderbird-45.0/mozilla/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp
---- thunderbird-45.0/mozilla/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp.moz-694870-backout	2016-04-07 23:33:34.000000000 +0200
-+++ thunderbird-45.0/mozilla/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp	2016-05-11 08:24:13.869018683 +0200
-@@ -16,6 +16,7 @@
- #include "nsIGIOService.h"
- #include "nsNetCID.h"
- #include "nsIIOService.h"
-+#include "nsIGnomeVFSService.h"
- #include "nsAutoPtr.h"
- #ifdef MOZ_ENABLE_DBUS
- #include "nsDBusHandlerApp.h"
-@@ -103,26 +104,51 @@ nsMIMEInfoUnix::LaunchDefaultWithFile(ns
- #endif
- 
-   nsCOMPtr<nsIGIOService> giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID);
--  if (!giovfs) {
--    return NS_ERROR_FAILURE;
--  }
--
--  // nsGIOMimeApp->Launch wants a URI string instead of local file
--  nsresult rv;
--  nsCOMPtr<nsIIOService> ioservice = do_GetService(NS_IOSERVICE_CONTRACTID, &rv);
--  NS_ENSURE_SUCCESS(rv, rv);
--  nsCOMPtr<nsIURI> uri;
--  rv = ioservice->NewFileURI(aFile, getter_AddRefs(uri));
--  NS_ENSURE_SUCCESS(rv, rv);
-   nsAutoCString uriSpec;
--  uri->GetSpec(uriSpec);
-+  if (giovfs) {
-+    // nsGIOMimeApp->Launch wants a URI string instead of local file
-+    nsresult rv;
-+    nsCOMPtr<nsIIOService> ioservice = do_GetService(NS_IOSERVICE_CONTRACTID, &rv);
-+    NS_ENSURE_SUCCESS(rv, rv);
-+    nsCOMPtr<nsIURI> uri;
-+    rv = ioservice->NewFileURI(aFile, getter_AddRefs(uri));
-+    NS_ENSURE_SUCCESS(rv, rv);
-+    uri->GetSpec(uriSpec);
-+  }
-+
-+  nsCOMPtr<nsIGnomeVFSService> gnomevfs = do_GetService(NS_GNOMEVFSSERVICE_CONTRACTID);
-+  if (giovfs) {
-+    nsCOMPtr<nsIGIOMimeApp> app;
-+    if (NS_SUCCEEDED(giovfs->GetAppForMimeType(mSchemeOrType, getter_AddRefs(app))) && app)
-+      return app->Launch(uriSpec);
-+  } else if (gnomevfs) {
-+    /* Fallback to GnomeVFS */
-+    nsCOMPtr<nsIGnomeVFSMimeApp> app;
-+    if (NS_SUCCEEDED(gnomevfs->GetAppForMimeType(mSchemeOrType, getter_AddRefs(app))) && app)
-+      return app->Launch(nativePath);
-+  }
-+
-+  // If we haven't got an app we try to get a valid one by searching for the
-+  // extension mapped type
-+  RefPtr<nsMIMEInfoBase> mimeInfo = nsGNOMERegistry::GetFromExtension(nativePath);
-+  if (mimeInfo) {
-+    nsAutoCString type;
-+    mimeInfo->GetType(type);
-+    if (giovfs) {
-+      nsCOMPtr<nsIGIOMimeApp> app;
-+      if (NS_SUCCEEDED(giovfs->GetAppForMimeType(type, getter_AddRefs(app))) && app)
-+        return app->Launch(uriSpec);
-+    } else if (gnomevfs) {
-+      nsCOMPtr<nsIGnomeVFSMimeApp> app;
-+      if (NS_SUCCEEDED(gnomevfs->GetAppForMimeType(type, getter_AddRefs(app))) && app)
-+        return app->Launch(nativePath);
-+    }
-+  }
- 
--  nsCOMPtr<nsIGIOMimeApp> app;
--  if (NS_FAILED(giovfs->GetAppForMimeType(mSchemeOrType, getter_AddRefs(app))) || !app) {
-+  if (!mDefaultApplication)
-     return NS_ERROR_FILE_NOT_FOUND;
--  }
- 
--  return app->Launch(uriSpec);
-+  return LaunchWithIProcess(mDefaultApplication, nativePath);
- }
- 
- #if defined(MOZ_ENABLE_CONTENTACTION)
-diff -up thunderbird-45.0/mozilla/uriloader/exthandler/unix/nsOSHelperAppService.cpp.moz-694870-backout thunderbird-45.0/mozilla/uriloader/exthandler/unix/nsOSHelperAppService.cpp
---- thunderbird-45.0/mozilla/uriloader/exthandler/unix/nsOSHelperAppService.cpp.moz-694870-backout	2016-04-07 23:33:34.000000000 +0200
-+++ thunderbird-45.0/mozilla/uriloader/exthandler/unix/nsOSHelperAppService.cpp	2016-05-10 15:17:28.974860591 +0200
-@@ -1150,7 +1150,7 @@ nsresult nsOSHelperAppService::OSProtoco
- #endif
- 
- #ifdef MOZ_WIDGET_GTK
--  // Check the GNOME registry for a protocol handler
-+  // Check the GConf registry for a protocol handler
-   *aHandlerExists = nsGNOMERegistry::HandlerExists(aProtocolScheme);
- #endif
- 
-@@ -1369,6 +1369,22 @@ nsOSHelperAppService::GetFromType(const
-           NS_LossyConvertUTF16toASCII(handler).get(),
-           NS_LossyConvertUTF16toASCII(mailcap_description).get()));
- 
-+#ifdef MOZ_WIDGET_GTK
-+  RefPtr<nsMIMEInfoBase> gnomeInfo;
-+  if (handler.IsEmpty()) {
-+    // No useful data yet.  Check the GNOME registry.  Unfortunately, newer
-+    // GNOME versions no longer have type-to-extension mappings, so we might
-+    // get back a MIMEInfo without any extensions set.  In that case we'll have
-+    // to look in our mime.types files for the extensions.
-+    LOG(("Looking in GNOME registry\n"));
-+    gnomeInfo = nsGNOMERegistry::GetFromType(aMIMEType);
-+    if (gnomeInfo && gnomeInfo->HasExtensions()) {
-+      LOG(("Got MIMEInfo from GNOME registry, and it has extensions set\n"));
-+      return gnomeInfo.forget();
-+    }
-+  }
-+#endif
-+
-   // Now look up our extensions
-   nsAutoString extensions, mime_types_description;
-   LookUpExtensionsAndDescription(majorType,
-@@ -1377,16 +1393,13 @@ nsOSHelperAppService::GetFromType(const
-                                  mime_types_description);
- 
- #ifdef MOZ_WIDGET_GTK
--  if (handler.IsEmpty()) {
--    RefPtr<nsMIMEInfoBase> gnomeInfo = nsGNOMERegistry::GetFromType(aMIMEType);
--    if (gnomeInfo) {
--      LOG(("Got MIMEInfo from GNOME registry without extensions; setting them "
--           "to %s\n", NS_LossyConvertUTF16toASCII(extensions).get()));
--
--      NS_ASSERTION(!gnomeInfo->HasExtensions(), "How'd that happen?");
--      gnomeInfo->SetFileExtensions(NS_ConvertUTF16toUTF8(extensions));
--      return gnomeInfo.forget();
--    }
-+  if (gnomeInfo) {
-+    LOG(("Got MIMEInfo from GNOME registry without extensions; setting them "
-+         "to %s\n", NS_LossyConvertUTF16toASCII(extensions).get()));
-+
-+    NS_ASSERTION(!gnomeInfo->HasExtensions(), "How'd that happen?");
-+    gnomeInfo->SetFileExtensions(NS_ConvertUTF16toUTF8(extensions));
-+    return gnomeInfo.forget();
-   }
- #endif
- 
-@@ -1513,6 +1526,9 @@ nsOSHelperAppService::GetProtocolHandler
- {
-   NS_ASSERTION(!aScheme.IsEmpty(), "No scheme was specified!");
- 
-+  // We must check that a registered handler exists so that gnome_url_show
-+  // doesn't fallback to gnomevfs.
-+  // See nsGNOMERegistry::LoadURL and bug 389632.
-   nsresult rv = OSProtocolHandlerExists(nsPromiseFlatCString(aScheme).get(),
-                                         found);
-   if (NS_FAILED(rv))
diff --git a/SOURCES/rhbz-1150082.patch b/SOURCES/rhbz-1150082.patch
deleted file mode 100644
index 4091cdb..0000000
--- a/SOURCES/rhbz-1150082.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff -up mozilla-esr31/media/webrtc/trunk/Makefile.old mozilla-esr31/media/webrtc/trunk/Makefile
-diff -up mozilla-esr31/toolkit/components/osfile/modules/osfile_unix_front.jsm.old mozilla-esr31/toolkit/components/osfile/modules/osfile_unix_front.jsm
---- mozilla-esr31/toolkit/components/osfile/modules/osfile_unix_front.jsm.old	2014-10-11 17:00:02.000000000 +0200
-+++ mozilla-esr31/toolkit/components/osfile/modules/osfile_unix_front.jsm	2014-11-10 13:28:58.474001916 +0100
-@@ -574,7 +574,7 @@
-        };
- 
-        // Fortunately, under Linux, that pumping function can be optimized.
--       if (UnixFile.splice) {
-+       if (0) {
-          const BUFSIZE = 1 << 17;
- 
-          // An implementation of |pump| using |splice| (for Linux/Android)
diff --git a/SOURCES/rhbz-1414535.patch b/SOURCES/rhbz-1414535.patch
new file mode 100644
index 0000000..f9cc7c2
--- /dev/null
+++ b/SOURCES/rhbz-1414535.patch
@@ -0,0 +1,37 @@
+diff -up ./CertVerifier.cpp.ignoreBuiltinStatus ./CertVerifier.cpp
+--- ./security/certverifier/CertVerifier.cpp.ignoreBuiltinStatus	2016-10-31 21:15:28.000000000 +0100
++++ ./security/certverifier/CertVerifier.cpp	2016-12-16 21:35:32.155105623 +0100
+@@ -65,6 +65,9 @@ InitCertVerifierLog()
+ Result
+ IsCertChainRootBuiltInRoot(const UniqueCERTCertList& chain, bool& result)
+ {
++  result = false;
++  return Success;
++#if 0
+   if (!chain || CERT_LIST_EMPTY(chain)) {
+     return Result::FATAL_ERROR_LIBRARY_FAILURE;
+   }
+@@ -77,12 +80,15 @@ IsCertChainRootBuiltInRoot(const UniqueC
+     return Result::FATAL_ERROR_LIBRARY_FAILURE;
+   }
+   return IsCertBuiltInRoot(root, result);
++#endif
+ }
+ 
+ Result
+ IsCertBuiltInRoot(CERTCertificate* cert, bool& result)
+ {
+   result = false;
++  return Success;
++#if 0
+ #ifdef DEBUG
+   nsCOMPtr<nsINSSComponent> component(do_GetService(PSM_COMPONENT_CONTRACTID));
+   if (!component) {
+@@ -114,6 +120,7 @@ IsCertBuiltInRoot(CERTCertificate* cert,
+     }
+   }
+   return Success;
++#endif
+ }
+ 
+ static Result
diff --git a/SOURCES/rhbz-1423012.patch b/SOURCES/rhbz-1423012.patch
new file mode 100644
index 0000000..f5344c2
--- /dev/null
+++ b/SOURCES/rhbz-1423012.patch
@@ -0,0 +1,15 @@
+diff -up firefox-52.0b8/gfx/2d/HelpersCairo.h.old firefox-52.0b8/gfx/2d/HelpersCairo.h
+--- firefox-52.0b8/gfx/2d/HelpersCairo.h.old	2017-03-02 09:23:01.230766731 -0500
++++ firefox-52.0b8/gfx/2d/HelpersCairo.h	2017-03-02 09:23:49.711930251 -0500
+@@ -239,9 +239,9 @@ CairoFormatToGfxFormat(cairo_format_t fo
+ {
+   switch (format) {
+     case CAIRO_FORMAT_ARGB32:
+-      return SurfaceFormat::A8R8G8B8_UINT32;
++      return SurfaceFormat::B8G8R8A8;
+     case CAIRO_FORMAT_RGB24:
+-      return SurfaceFormat::X8R8G8B8_UINT32;
++      return SurfaceFormat::B8G8R8X8;
+     case CAIRO_FORMAT_A8:
+       return SurfaceFormat::A8;
+     case CAIRO_FORMAT_RGB16_565:
diff --git a/SOURCES/thunderbird-enable-addons.patch b/SOURCES/thunderbird-enable-addons.patch
index 4f78187..349438a 100644
--- a/SOURCES/thunderbird-enable-addons.patch
+++ b/SOURCES/thunderbird-enable-addons.patch
@@ -10,29 +10,3 @@ diff -up comm-esr31/mail/app/profile/all-thunderbird.js.addons comm-esr31/mail/a
  
  // Preferences for AMO integration
  pref("extensions.getAddons.cache.enabled", true);
-diff -up comm-esr31/mozilla/toolkit/mozapps/extensions/internal/XPIProvider.jsm.addons comm-esr31/mozilla/toolkit/mozapps/extensions/internal/XPIProvider.jsm
---- comm-esr31/mozilla/toolkit/mozapps/extensions/internal/XPIProvider.jsm.addons	2014-07-29 15:29:11.951728146 +0200
-+++ comm-esr31/mozilla/toolkit/mozapps/extensions/internal/XPIProvider.jsm	2014-07-29 15:30:51.879030210 +0200
-@@ -2102,11 +2102,7 @@ this.XPIProvider = {
- 
-       AddonManagerPrivate.markProviderSafe(this);
- 
--      if (aAppChanged === undefined) {
--        // For new profiles we will never need to show the add-on selection UI
--        Services.prefs.setBoolPref(PREF_SHOWN_SELECTION_UI, true);
--      }
--      else if (aAppChanged && !this.allAppGlobal &&
-+      if (aAppChanged && !this.allAppGlobal &&
-                Preferences.get(PREF_EM_SHOW_MISMATCH_UI, true)) {
-         if (!Preferences.get(PREF_SHOWN_SELECTION_UI, false)) {
-           // Flip a flag to indicate that we interrupted startup with an interactive prompt
-@@ -2126,6 +2122,9 @@ this.XPIProvider = {
-             flushCaches = true;
-           }
-         }
-+      } else {
-+        // For new profiles we will never need to show the add-on selection UI
-+        Services.prefs.setBoolPref(PREF_SHOWN_SELECTION_UI, true);
-       }
- 
-       if (flushCaches) {
diff --git a/SOURCES/thunderbird-mozconfig b/SOURCES/thunderbird-mozconfig
index b5fc95d..1b4984c 100644
--- a/SOURCES/thunderbird-mozconfig
+++ b/SOURCES/thunderbird-mozconfig
@@ -1,36 +1,24 @@
 mk_add_options MOZ_CO_PROJECT=mail
 ac_add_options --enable-application=mail
-mk_add_options AUTOCONF=autoconf-2.13
-
-ac_add_options --disable-cpp-exceptions
 ac_add_options --disable-crashreporter
-ac_add_options --disable-exact-rooting
-ac_add_options --disable-installer
-ac_add_options --disable-javaxpcom
 ac_add_options --disable-libjpeg-turbo
-ac_add_options --disable-mochitest
 ac_add_options --disable-necko-wifi
 ac_add_options --disable-strip
 ac_add_options --disable-tests
 ac_add_options --disable-updater
-ac_add_options --disable-xprint
 ac_add_options --enable-calendar
-ac_add_options --enable-canvas
 ac_add_options --enable-default-toolkit=cairo-gtk2
-ac_add_options --enable-libnotify
-ac_add_options --enable-pango
 ac_add_options --enable-release
 ac_add_options --enable-safe-browsing
-ac_add_options --enable-skia
 ac_add_options --enable-startup-notification
-ac_add_options --enable-svg
-ac_add_options --enable-xinerama
 ac_add_options --libdir="$LIBDIR"
 ac_add_options --prefix="$PREFIX"
 ac_add_options --with-l10n-base=../../l10n-merged
 ac_add_options --without-system-libvpx
 ac_add_options --with-pthreads
 ac_add_options --with-system-zlib
+ac_add_options --enable-system-hunspell
+ac_add_options --with-system-jpeg
 export BUILD_OFFICIAL=1
 export CFLAGS="$CFLAGS -gdwarf-2"
 export CXXFLAGS="$CXXFLAGS -gdwarf-2"
diff --git a/SOURCES/thunderbird-open-browser.sh b/SOURCES/thunderbird-open-browser.sh
deleted file mode 100644
index c9cefb4..0000000
--- a/SOURCES/thunderbird-open-browser.sh
+++ /dev/null
@@ -1,76 +0,0 @@
-#!/bin/bash
-## Copyright (C) 2004 Warren Togami <wtogami@redhat.com>
-## Contributors:   David Hill <djh[at]ii.net>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; version 2 of the License.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-#
-# open-browser.sh for MozillaThunderbird
-# Release 5
-#
-# This script is called by MozillaThunderbird in order to launch the web 
-# browser specified in gconf key /desktop/gnome/url-handlers/http/command
-#
-
-# Exit with Error Message
-function error_exit() {
-    echo "$1"
-    if [ -a /usr/bin/zenity ]; then
-        /usr/bin/zenity --error --text="$1"
-    else
-        xmessage "$1" &
-    fi
-    exit 1
-}
-
-# No URL specified so set to blank
-url=$1
-if [ -z $url ]; then
-    url=about:blank
-fi
-
-# Use xdg-open if it exists (Gnome 2.6+ only)
-if [ -f /usr/bin/xdg-open ]; then
-    OUTPUT="$(/usr/bin/xdg-open "$url" 2>&1)"
-    if [ $? -ne 0 ]; then
-        error_exit "$OUTPUT"
-    fi
-    exit 0
-fi
-
-# Pull key from gconf, remove %s or "%s", trim leading & trailing spaces
-GCONF=$(gconftool-2 -g /desktop/gnome/url-handlers/http/command 2>/dev/null | sed -e 's/%s//; s/\"\"//; s/^\ *//; s/\ *$//')
-NEEDTERM=$(gconftool-2 -g /desktop/gnome/url-handlers/http/need-terminal 2>/dev/null | sed -e 's/^\ *//; s/\ *$//')
-
-# Check if browser really exists
-which $GCONF 2> /dev/null > /dev/null
-if [ $? -ne 0 ]; then
-    error_exit "ERROR: The browser $GCONF specified in Preferences -> Preferred Applications does not exist."
-fi
-
-# Check if text-mode browser
-if [ "$NEEDTERM" == "true" ]; then
-    PREFTERM=$(gconftool-2 -g /desktop/gnome/applications/terminal/exec 2>/dev/null | sed -e 's/^\ *//; s/\ *$//')
-    TERMARGS=$(gconftool-2 -g /desktop/gnome/applications/terminal/exec_arg 2>/dev/null | sed -e 's/^\ *//; s/\ *$//')
-    # Check if terminal exists
-    which $PREFTERM 2> /dev/null > /dev/null
-    if [ $? -ne 0 ]; then
-        error_exit "ERROR: The terminal $GCONF specified in Preferences -> Preferred Applications does not exist."
-    fi
-    # Execute
-    exec $PREFTERM $TERMARGS $GCONF "$url"
-fi
-
-exec $GCONF "$url"
-
diff --git a/SOURCES/thunderbird-redhat-default-prefs.js.el5 b/SOURCES/thunderbird-redhat-default-prefs.js.el5
deleted file mode 100644
index ac28b82..0000000
--- a/SOURCES/thunderbird-redhat-default-prefs.js.el5
+++ /dev/null
@@ -1,27 +0,0 @@
-pref("app.update.enabled", false);
-pref("app.update.autoInstallEnabled", false);
-# Allow users to set custom colors
-# pref("browser.display.use_system_colors",   true);
-pref("general.useragent.vendor", "CentOS");
-pref("general.useragent.vendorSub", "THUNDERBIRD_RPM_VR");
-pref("intl.locale.matchOS", true);
-pref("mail.shell.checkDefaultClient", false);
-pref("toolkit.networkmanager.disable", false);
-
-# Make hyperlinks work
-pref("network.protocol-handler.app.http", "COMMAND");
-pref("network.protocol-handler.app.https", "COMMAND");
-pref("network.protocol-handler.app.ftp", "COMMAND");
-
-# Disable global indexing by default
-pref("mailnews.database.global.indexer.enabled", false);
-
-# Do not switch to Smart Folders after upgrade to 3.0b4
-pref("mail.folder.views.version", "1")
-
-/* Workaround for rhbz#1134876 */
-pref("javascript.options.baselinejit",      false);
-/* Workaround for rhbz#1110291 */
-pref("network.negotiate-auth.allow-insecure-ntlm-v1", true);
-/* Workaround for mozbz#1063315 */
-pref("security.use_mozillapkix_verification", false);
diff --git a/SOURCES/thunderbird-redhat-default-prefs.js.el6 b/SOURCES/thunderbird-redhat-default-prefs.js.el6
deleted file mode 100644
index 013aa21..0000000
--- a/SOURCES/thunderbird-redhat-default-prefs.js.el6
+++ /dev/null
@@ -1,28 +0,0 @@
-pref("app.update.enabled", false);
-pref("app.update.autoInstallEnabled", false);
-# Allow users to set custom colors
-# pref("browser.display.use_system_colors",   true);
-pref("general.useragent.vendor", "CentOS");
-pref("general.useragent.vendorSub", "THUNDERBIRD_RPM_VR");
-pref("intl.locale.matchOS", true);
-pref("mail.shell.checkDefaultClient", false);
-pref("toolkit.networkmanager.disable", false);
-pref("offline.autoDetect", true);
-
-# Disable global indexing by default
-pref("mailnews.database.global.indexer.enabled", false);
-
-# Do not switch to Smart Folders after upgrade to 3.0b4
-pref("mail.folder.views.version", "1")
-pref("extensions.shownSelectionUI", true);
-pref("extensions.autoDisableScope", 0);
-
-# For rhbz#1024232
-pref("ui.SpellCheckerUnderlineStyle",       1);
-
-/* Workaround for rhbz#1134876 */
-pref("javascript.options.baselinejit",      false);
-/* Workaround for rhbz#1110291 */
-pref("network.negotiate-auth.allow-insecure-ntlm-v1", true);
-/* Workaround for mozbz#1063315 */
-pref("security.use_mozillapkix_verification", false);
diff --git a/SOURCES/thunderbird-redhat-default-prefs.js.el7 b/SOURCES/thunderbird-redhat-default-prefs.js.el7
deleted file mode 100644
index 013aa21..0000000
--- a/SOURCES/thunderbird-redhat-default-prefs.js.el7
+++ /dev/null
@@ -1,28 +0,0 @@
-pref("app.update.enabled", false);
-pref("app.update.autoInstallEnabled", false);
-# Allow users to set custom colors
-# pref("browser.display.use_system_colors",   true);
-pref("general.useragent.vendor", "CentOS");
-pref("general.useragent.vendorSub", "THUNDERBIRD_RPM_VR");
-pref("intl.locale.matchOS", true);
-pref("mail.shell.checkDefaultClient", false);
-pref("toolkit.networkmanager.disable", false);
-pref("offline.autoDetect", true);
-
-# Disable global indexing by default
-pref("mailnews.database.global.indexer.enabled", false);
-
-# Do not switch to Smart Folders after upgrade to 3.0b4
-pref("mail.folder.views.version", "1")
-pref("extensions.shownSelectionUI", true);
-pref("extensions.autoDisableScope", 0);
-
-# For rhbz#1024232
-pref("ui.SpellCheckerUnderlineStyle",       1);
-
-/* Workaround for rhbz#1134876 */
-pref("javascript.options.baselinejit",      false);
-/* Workaround for rhbz#1110291 */
-pref("network.negotiate-auth.allow-insecure-ntlm-v1", true);
-/* Workaround for mozbz#1063315 */
-pref("security.use_mozillapkix_verification", false);
diff --git a/SOURCES/thunderbird-redhat-default-prefs.js.rhel6 b/SOURCES/thunderbird-redhat-default-prefs.js.rhel6
new file mode 100644
index 0000000..af23193
--- /dev/null
+++ b/SOURCES/thunderbird-redhat-default-prefs.js.rhel6
@@ -0,0 +1,28 @@
+pref("app.update.enabled", false);
+pref("app.update.autoInstallEnabled", false);
+# Allow users to set custom colors
+# pref("browser.display.use_system_colors",   true);
+pref("general.useragent.vendor", "Red Hat");
+pref("general.useragent.vendorSub", "THUNDERBIRD_RPM_VR");
+pref("intl.locale.matchOS", true);
+pref("mail.shell.checkDefaultClient", false);
+pref("toolkit.networkmanager.disable", false);
+pref("offline.autoDetect", true);
+
+# Disable global indexing by default
+pref("mailnews.database.global.indexer.enabled", false);
+
+# Do not switch to Smart Folders after upgrade to 3.0b4
+pref("mail.folder.views.version", "1")
+pref("extensions.shownSelectionUI", true);
+pref("extensions.autoDisableScope", 0);
+
+# For rhbz#1024232
+pref("ui.SpellCheckerUnderlineStyle",       1);
+
+/* Workaround for rhbz#1134876 */
+pref("javascript.options.baselinejit",      false);
+/* Workaround for rhbz#1110291 */
+pref("network.negotiate-auth.allow-insecure-ntlm-v1", true);
+/* Workaround for mozbz#1063315 */
+pref("security.use_mozillapkix_verification", false);
diff --git a/SOURCES/thunderbird-redhat-default-prefs.js.rhel7 b/SOURCES/thunderbird-redhat-default-prefs.js.rhel7
new file mode 100644
index 0000000..af23193
--- /dev/null
+++ b/SOURCES/thunderbird-redhat-default-prefs.js.rhel7
@@ -0,0 +1,28 @@
+pref("app.update.enabled", false);
+pref("app.update.autoInstallEnabled", false);
+# Allow users to set custom colors
+# pref("browser.display.use_system_colors",   true);
+pref("general.useragent.vendor", "Red Hat");
+pref("general.useragent.vendorSub", "THUNDERBIRD_RPM_VR");
+pref("intl.locale.matchOS", true);
+pref("mail.shell.checkDefaultClient", false);
+pref("toolkit.networkmanager.disable", false);
+pref("offline.autoDetect", true);
+
+# Disable global indexing by default
+pref("mailnews.database.global.indexer.enabled", false);
+
+# Do not switch to Smart Folders after upgrade to 3.0b4
+pref("mail.folder.views.version", "1")
+pref("extensions.shownSelectionUI", true);
+pref("extensions.autoDisableScope", 0);
+
+# For rhbz#1024232
+pref("ui.SpellCheckerUnderlineStyle",       1);
+
+/* Workaround for rhbz#1134876 */
+pref("javascript.options.baselinejit",      false);
+/* Workaround for rhbz#1110291 */
+pref("network.negotiate-auth.allow-insecure-ntlm-v1", true);
+/* Workaround for mozbz#1063315 */
+pref("security.use_mozillapkix_verification", false);
diff --git a/SOURCES/thunderbird.sh.in.rhel5 b/SOURCES/thunderbird.sh.in.rhel5
deleted file mode 100644
index 940b3aa..0000000
--- a/SOURCES/thunderbird.sh.in.rhel5
+++ /dev/null
@@ -1,148 +0,0 @@
-#!/bin/sh
-#
-# The contents of this file are subject to the Netscape Public
-# License Version 1.1 (the "License"); you may not use this file
-# except in compliance with the License. You may obtain a copy of
-# the License at http://www.mozilla.org/NPL/
-#
-# Software distributed under the License is distributed on an "AS
-# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-# implied. See the License for the specific language governing
-# rights and limitations under the License.
-#
-# The Original Code is mozilla.org code.
-#
-# The Initial Developer of the Original Code is Netscape
-# Communications Corporation.  Portions created by Netscape are
-# Copyright (C) 1998 Netscape Communications Corporation. All
-# Rights Reserved.
-#
-# Contributor(s): 
-#
-
-## 
-## Usage:
-##
-## $ thunderbird
-##
-## This script is meant to run a mozilla program from the mozilla
-## rpm installation.
-##
-## The script will setup all the environment voodoo needed to make
-## mozilla work.
-
-cmdname=`basename $0`
-
-# BEAST fix
-NSS_SSL_CBC_RANDOM_IV=${NSS_SSL_CBC_RANDOM_IV-1}
-export NSS_SSL_CBC_RANDOM_IV
-
-##
-## Variables
-##
-MOZ_ARCH=$(uname -m)
-case $MOZ_ARCH in
-	x86_64 | s390x | sparc64)
-		MOZ_LIB_DIR="/usr/lib64"
-		SECONDARY_LIB_DIR="/usr/lib"
-		;;
-	* )
-		MOZ_LIB_DIR="/usr/lib"
-		SECONDARY_LIB_DIR="/usr/lib64"
-		;;
-esac
-
-if [ ! -x $MOZ_LIB_DIR/thunderbird/thunderbird ]; then
-    if [ ! -x $SECONDARY_LIB_DIR/thunderbird/thunderbird ]; then
-        echo "Error: $MOZ_LIB_DIR/thunderbird/thunderbird not found"
-        if [ -d $SECONDARY_LIB_DIR ]; then
-            echo "       $SECONDARY_LIB_DIR/thunderbird/thunderbird not found"
-        fi
-        exit 1
-    fi
-    MOZ_LIB_DIR="$SECONDARY_LIB_DIR"
-fi
-
-MOZ_DIST_BIN="$MOZ_LIB_DIR/thunderbird"
-MOZ_PROGRAM="$MOZ_DIST_BIN/thunderbird"
-MOZ_LANGPACKS_DIR="$MOZ_DIST_BIN/langpacks"
-MOZ_EXTENSIONS_PROFILE_DIR="$HOME/.mozilla/extensions/{3550f703-e582-4d05-9a08-453d09bdfdc6}"
-
-##
-## Set MOZ_ENABLE_PANGO is no longer used because Pango is enabled by default
-## you may use MOZ_DISABLE_PANGO=1 to force disabling of pango
-##
-#MOZ_DISABLE_PANGO=1
-#export MOZ_DISABLE_PANGO
-
-##
-## Set MOZ_APP_LAUNCHER for gnome-session
-##
-export MOZ_APP_LAUNCHER="/usr/bin/thunderbird"
-
-##
-## Disable the GNOME crash dialog, Moz has it's own
-## 
-GNOME_DISABLE_CRASH_DIALOG=1
-export GNOME_DISABLE_CRASH_DIALOG
-
-##
-## To disable the use of Firefox localization, set MOZ_DISABLE_LANGPACKS=1
-## in your environment before launching Firefox.
-##
-#
-# MOZ_DISABLE_LANGPACKS=1
-# export MOZ_DISABLE_LANGPACKS
-#
-
-##
-## Automatically installed langpacks are tracked by .fedora-langpack-install
-## config file.
-##
-FEDORA_LANGPACK_CONFIG="$MOZ_EXTENSIONS_PROFILE_DIR/.fedora-langpack-install"
-
-# MOZ_DISABLE_LANGPACKS disables language packs completely
-MOZILLA_DOWN=0
-if ! [ $MOZ_DISABLE_LANGPACKS ] || [ $MOZ_DISABLE_LANGPACKS -eq 0 ]; then
-    pidof thunderbird > /dev/null 2>&1
-    MOZILLA_DOWN=$?
-fi
-
-# Modify language pack configuration only when thunderbird is not running 
-# and language packs are not disabled
-if [ $MOZILLA_DOWN -ne 0 ]; then
-
-    # Clear already installed langpacks
-    mkdir -p $MOZ_EXTENSIONS_PROFILE_DIR
-    if [ -f $FEDORA_LANGPACK_CONFIG ]; then
-        rm `cat $FEDORA_LANGPACK_CONFIG` > /dev/null 2>&1
-        rm $FEDORA_LANGPACK_CONFIG > /dev/null 2>&1
-    fi
-
-    # Get locale from system
-    CURRENT_LOCALE=$LC_ALL
-    CURRENT_LOCALE=${CURRENT_LOCALE:-$LC_MESSAGES}
-    CURRENT_LOCALE=${CURRENT_LOCALE:-$LANG}
-    
-    # Try without a local variant first, then with a local variant
-    # So that pt-BR doesn't try to use pt for example
-    SHORTMOZLOCALE=`echo $CURRENT_LOCALE | sed "s|_\([^.]*\).*||g"`
-    MOZLOCALE=`echo $CURRENT_LOCALE | sed "s|_\([^.]*\).*|-\1|g"`
-
-    function create_langpack_link() {
-        local language=$*
-        local langpack=langpack-${language}@thunderbird.mozilla.org.xpi
-        if [ -f $MOZ_LANGPACKS_DIR/$langpack ]; then
-            rm -rf $MOZ_EXTENSIONS_PROFILE_DIR/$langpack
-            ln -s $MOZ_LANGPACKS_DIR/$langpack \
-                  $MOZ_EXTENSIONS_PROFILE_DIR/$langpack
-            echo $MOZ_EXTENSIONS_PROFILE_DIR/$langpack > $FEDORA_LANGPACK_CONFIG
-            return 0
-        fi
-        return 1
-    }
-
-    create_langpack_link $SHORTMOZLOCALE || create_langpack_link $MOZLOCALE || true
-fi
-
-exec $MOZ_PROGRAM "$@"
diff --git a/SOURCES/xulrunner-24.0-jemalloc-ppc.patch b/SOURCES/xulrunner-24.0-jemalloc-ppc.patch
index fe404ca..d0c3d8c 100644
--- a/SOURCES/xulrunner-24.0-jemalloc-ppc.patch
+++ b/SOURCES/xulrunner-24.0-jemalloc-ppc.patch
@@ -1,12 +1,12 @@
-diff -up xulrunner-24.0/mozilla-release/memory/mozjemalloc/jemalloc.c.jemalloc-ppc xulrunner-24.0/mozilla-release/memory/mozjemalloc/jemalloc.c
---- xulrunner-24.0/mozilla-release/memory/mozjemalloc/jemalloc.c.jemalloc-ppc	2013-09-11 01:15:18.000000000 +0200
-+++ xulrunner-24.0/mozilla-release/memory/mozjemalloc/jemalloc.c	2013-09-13 13:36:34.171680919 +0200
-@@ -1104,7 +1104,7 @@ static unsigned		ncpus;
+diff -up mozilla-aurora/memory/mozjemalloc/jemalloc.c.jemalloc-ppc.patch mozilla-aurora/memory/mozjemalloc/jemalloc.c
+--- mozilla-aurora/memory/mozjemalloc/jemalloc.c.jemalloc-ppc.patch	2016-11-18 08:56:32.242742746 +0100
++++ mozilla-aurora/memory/mozjemalloc/jemalloc.c	2016-11-18 08:59:51.809071876 +0100
+@@ -1096,7 +1096,7 @@ static const bool config_recycle = false
   * controlling the malloc behavior are defined as compile-time constants
   * for best performance and cannot be altered at runtime.
   */
--#if !defined(__ia64__) && !defined(__sparc__) && !defined(__mips__)
-+#if !defined(__ia64__) && !defined(__sparc__) && !defined(__mips__) && !(defined(__powerpc__))
+-#if !defined(__ia64__) && !defined(__sparc__) && !defined(__mips__) && !defined(__aarch64__)
++#if !defined(__ia64__) && !defined(__sparc__) && !defined(__mips__) && !defined(__aarch64__) && !defined(__powerpc__)
  #define MALLOC_STATIC_SIZES 1
  #endif
  
diff --git a/SPECS/thunderbird.spec b/SPECS/thunderbird.spec
index d14bd30..7dd7bdd 100644
--- a/SPECS/thunderbird.spec
+++ b/SPECS/thunderbird.spec
@@ -1,8 +1,6 @@
-
-# FIXME: HAVE TO USE SYSTEM NSS IN FINAL RELEASE!!!
 %define system_nss              1
-%global nspr_version            4.11.0
-%global nss_version             3.21.0
+%global nspr_version            4.13.1
+%global nss_version             3.28.2
 %define system_sqlite           0
 %define sqlite_version          3.8.4.2
 %define system_ffi              1
@@ -12,15 +10,10 @@
 %define python_version          2.7.8
 %define use_bundled_gcc         0
 %define gcc_version             4.8.2-16
-%define enable_gstreamer        0
 %define system_cairo            0
 %define cairo_version           1.10.2
 %define freetype_version        2.1.9
-%define system_jpeg             1
-%define system_gio              1
-%define system_hunspell         1
 %define system_libatomic        0
-%define use_baselinejit         1
 %define official_branding       1
 %define libnotify_version       0.4
 %define debug_build             0
@@ -47,31 +40,20 @@
 %define use_bundled_gcc         1
 %define use_bundled_yasm        1
 %define system_ffi              0
-%define enable_gstreamer        0
 %define use_bundled_binutils    1
 %endif
 
-# RHEL5
-%if 0%{?rhel} == 5
-%define use_bundled_python      1
-%define use_bundled_gcc         1
-%define use_bundled_yasm        1
-%define system_ffi              0
-%define enable_gstreamer        0
-%define use_bundled_binutils    1
-%define system_jpeg             0
-%define system_gio              0
-%define system_hunspell         0
-%define enable_gnomevfs         1
-# ppc and ia64 no longer supported (rhbz#1214863, rhbz#1214865)
-ExcludeArch: ppc ia64
-%define system_libatomic        1
-%endif
-
 # Require libatomic for ppc
 %ifarch ppc
 %define system_libatomic        1
 %endif
+# Big endian platforms
+%ifarch ppc ppc64 s390 s390x
+# Javascript Intl API is not supported on big endian platforms right now:
+# https://bugzilla.mozilla.org/show_bug.cgi?id=1322212
+%define with_intl_api           1
+%define big_endian              1
+%endif
 
 # ============================================================================
 
@@ -92,22 +74,19 @@ ExcludeArch: ppc ia64
 
 Summary:        Mozilla Thunderbird mail/newsgroup client
 Name:           thunderbird
-Version:        45.8.0
+Version:        52.1.0
 Release:        1%{?dist}
 URL:            http://www.mozilla.org/projects/thunderbird/
 License:        MPLv1.1 or GPLv2+ or LGPLv2+
 Group:          Applications/Internet
-%if 0%{?rhel} == 5
-ExcludeArch:    ppc ppc64 ia64 s390 s390x
-%endif
 
-%define         tarballdir              thunderbird-45.8.0
+%define         tarballdir              thunderbird-52.1.0
 %define         objdir                  objdir
 
 # From ftp://archive.mozilla.org/pub/thunderbird/releases/%{version}%{?ext_version}/source
 Source0:        https://archive.mozilla.org/pub/thunderbird/releases/%{version}%{?pre_version}/source/thunderbird-%{version}%{?pre_version}.source.tar.xz
 %if %{build_langpacks}
-Source1:        thunderbird-langpacks-%{version}%{?ext_version}-20170307.tar.xz
+Source1:        thunderbird-langpacks-%{version}%{?ext_version}-20170502.tar.xz
 %endif
 # Locales for lightning
 Source2:        l10n-lightning-%{version}.tar.xz
@@ -117,18 +96,15 @@ Source10:       thunderbird-mozconfig
 Source11:       thunderbird-mozconfig-branded
 Source20:       thunderbird.desktop
 Source21:       thunderbird.sh.in
-Source30:       thunderbird-open-browser.sh
 Source100:      find-external-requires
 Source200:      https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz
 Source300:      gcc48-%{gcc_version}.el5.src.rpm
 Source301:      yasm-1.2.0-3.el5.src.rpm
 Source302:      devtoolset-2-binutils-2.23.52.0.1-10.el5.src.rpm
-Source500:      thunderbird.sh.in.rhel5
-Source501:      thunderbird-redhat-default-prefs.js.el5
 Source600:      thunderbird.sh.in.rhel6
-Source601:      thunderbird-redhat-default-prefs.js.el6
+Source601:      thunderbird-redhat-default-prefs.js.rhel6
 Source700:      thunderbird.sh.in.rhel7
-Source701:      thunderbird-redhat-default-prefs.js.el7
+Source701:      thunderbird-redhat-default-prefs.js.rhel7
 
 # Mozilla (XULRunner) patches
 Patch0:         firefox-install-dir.patch
@@ -137,40 +113,31 @@ Patch0:         firefox-install-dir.patch
 Patch5:         xulrunner-24.0-jemalloc-ppc.patch
 Patch6:         webrtc-arch-cpu.patch
 Patch8:         firefox-ppc64le.patch
-Patch16:        mozilla-1253216-disable-ion.patch
-Patch17:        build-nss.patch
+Patch9:         build-s390-missing-include.patch
+Patch20:        build-s390-atomic.patch
+Patch21:        build-icu-big-endian.patch
+Patch22:        build-missing-getrandom.patch
+Patch23:        build-nss-version.patch
+Patch24:        build-nss-prbool.patch
 
 # RHEL patches
 Patch103:       rhbz-966424.patch
-Patch109:       aarch64-fix-skia.patch
 Patch110:       mozilla-1170092-etc-conf.patch
 Patch111:       rhbz-1173156.patch
-Patch112:       rhbz-1150082.patch
+Patch112:       mozilla-256180.patch
+Patch113:       rhbz-1414535.patch
+Patch114:       rhbz-1423012.patch
 
 # Upstream patches
-Patch201:       mozilla-1005535.patch
 # Kaie's patch, we'll most likely need this one
 Patch202:       mozilla-1152515.patch
-
-# RHEL5 patches
-Patch500:       build-el5-build-id.patch
-Patch501:       build-el5-sandbox.patch
-Patch502:       build-el5-gtk2-2.10.patch
-Patch503:       build-el5-xlib-header.patch
-Patch504:       build-el5-rt-tgsigqueueinfo.patch
-Patch505:       build-el5-rapl.patch
-Patch506:       build-el5-fontconfig.patch
-Patch507:       build-el5-stdint.patch
-Patch508:       build-el5-nss.patch
-Patch509:       mozilla-694870-backout.patch
-Patch510:       mozilla-1134537-delete-nsgnomevfsservice.patch
-Patch511:       mozilla-1134537-only-support-gio-in-nsioservice.patch
-Patch512:       mozilla-1134537-delete-gnomevfs-extension.patch
+Patch203:       mozilla-1158578-recursion-fix.patch
 
 # Thunderbird patches
 Patch1000:      thunderbird-objdir.patch
 Patch1001:      lightning-bad-langs.patch
 Patch1002:      thunderbird-enable-addons.patch
+Patch1003:       build-fix-dupes.patch
 
 # ---------------------------------------------------
 BuildRoot:      %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
@@ -222,17 +189,9 @@ Requires:       sqlite >= %{sqlite_build_version}
 BuildRequires:  libffi-devel >= %{ffi_version}
 Requires:       libffi >= %{ffi_version}
 %endif
-%if %{?enable_gstreamer}
-BuildRequires:  gstreamer1-devel
-BuildRequires:  gstreamer1-plugins-base-devel
-%endif
 BuildRequires:  libpng-devel
-%if %{?system_jpeg}
 BuildRequires:  libjpeg-devel
-%endif
-%if %{?system_hunspell}
 BuildRequires:  hunspell-devel
-%endif
 %if %{system_libatomic}
 BuildRequires:  libatomic
 Requires:       libatomic
@@ -256,13 +215,6 @@ Requires:       liberation-fonts-common
 Requires:       liberation-sans-fonts
 %endif
 
-# RHEL5 requires
-%if 0%{?rhel} == 5
-BuildRequires:  libXcomposite-devel
-BuildRequires:  libXdamage-devel
-BuildRequires:  xorg-x11-proto-devel
-%endif
-
 Obsoletes:      thunderbird-lightning
 Obsoletes:      thunderbird-lightning-gdata
 %if %{use_bundled_python}
@@ -399,46 +351,38 @@ cd mozilla
 # Build patches
 # We have to keep original patch backup extension to go thru configure without problems with tests
 %patch0 -p1 -b .orig
-%patch5 -p2 -b .jemalloc-ppc.patch
+%patch5 -p1 -b .jemalloc-ppc.patch
 %patch6 -p1 -b .webrtc-arch-cpu
 %patch8 -p2 -b .ppc64le
-%patch16 -p2 -b .moz-1253216-disable-ion
-%patch17 -p1 -b .build-nss
+%patch9 -p1 -b .s390-missing-include
+%patch20 -p1 -b .s390-atomic
+%patch22 -p1 -b .missing-getrandom
+%patch23 -p1 -b .nss-version
+%patch24 -p1 -b .nss-prbool
 
 # RPM specific patches
 %patch103 -p1 -b .rhbz-966424
-%patch109 -p1 -b .aarch64
 %patch110 -p1 -b .moz-1170092-etc-conf
 %patch111 -p2 -b .rhbz-1173156
-%patch112 -p1 -b .rhbz-1150082
+%patch112 -p1 -b .mozbz-256180
+%patch113 -p1 -b .rhbz-1414535
+%patch114 -p1 -b .rhbz-1423012
 
 # Upstream patches
-%patch201 -p1 -b .mozbz-1005535
-# FIXME: will require this?: by kai
 %patch202 -p1 -b .mozbz-1152515
 
-
-# RHEL5 only patches
-%if 0%{?rhel} == 5
-%patch500 -p1 -b .gnu-build-id
-%patch501 -p1 -b .build-sandbox
-%patch502 -p1 -b .build-gtk2
-%patch503 -p1 -b .build-xlib-swap
-%patch504 -p1 -b .build-rt-tgsigqueueinfo
-%patch505 -p1 -b .build-el5-rapl
-%patch506 -p1 -b .build-el5-fontconfig
-%patch507 -p1 -b .build-el5-stdint
-%patch508 -p1 -b .build-el5-nss
-%patch509 -p2 -b .moz-694870-backout
-%patch510 -p2 -b .moz-1134537-delete-nsgnomevfsservice
-%patch511 -p1 -R -b .moz-1134537-only-support-gio-in-nsioservice
-%patch512 -p2 -b .moz-1134537-gnomevfsservice
+# Patch for big endian platforms only
+%if 0%{?big_endian}
+%patch21 -p1 -b .big-endian-icu
 %endif
+
 cd ..
 
+%patch203 -p1 -b .mozbz-1158578-recursion-fix
 %patch1000 -p2 -b .objdir
 %patch1001 -p1 -b .badlangs
 %patch1002 -p1 -b .addons
+%patch1003 -p1 -b .fix-dupes
 #%patch301 -p1 -b .ppc64le-build # fixme?
 
 
@@ -478,24 +422,11 @@ function add_to_mozconfig() {
  add_to_mozconfig "without-system-nss"
 %endif
 
-%if %{?enable_gstreamer}
- add_to_mozconfig "enable-gstreamer=1.0"
-%else
- add_to_mozconfig "disable-gstreamer"
-%endif
-
-%if %{?system_jpeg}
- add_to_mozconfig "with-system-jpeg"
-%else
- add_to_mozconfig "without-system-jpeg"
-%endif
-%if %{?system_hunspell}
- add_to_mozconfig "enable-system-hunspell"
-%endif
+add_to_mozconfig "with-system-jpeg"
+add_to_mozconfig "enable-system-hunspell"
 
 # RHEL 7 mozconfig changes:
 %if 0%{?rhel} >= 6
- add_to_mozconfig "enable-libnotify"
  add_to_mozconfig "enable-startup-notification"
  add_to_mozconfig "enable-jemalloc"
 %endif
@@ -504,22 +435,19 @@ function add_to_mozconfig() {
 %if 0%{?rhel} == 6
  # Disable dbus, because we're unable to build with its support in brew
  add_to_mozconfig "disable-dbus"
-%endif
-
-%if 0%{?rhel} == 5
- add_to_mozconfig "disable-pulseaudio"
+ # ctypes require system libffi for these platforms and RHEL6 does not have libffi >= 3.0.9 available
+ %ifarch ppc64 ppc64le ppc s390 s390x
+  add_to_mozconfig "disable-ctypes"
+ %endif
 %endif
 
 %ifarch aarch64
  add_to_mozconfig "disable-ion"
 %endif
 
-%if %{system_gio}
- add_to_mozconfig "enable-gio"
- add_to_mozconfig "disable-gnomevfs"
-%else
- add_to_mozconfig "disable-gio"
- add_to_mozconfig "enable-gnomevfs"
+add_to_mozconfig "enable-gio"
+%ifarch aarch64 ppc ppc64 s390 s390x
+ add_to_mozconfig "disable-skia"
 %endif
 
 # Debug build flags
@@ -531,6 +459,8 @@ function add_to_mozconfig() {
  add_to_mozconfig "enable-optimize"
 %endif
 
+add_to_mozconfig "with-intl-api"
+
 #FIXME RTTI?? RHEL5/6
 # ac_add_options --enable-cpp-rtti
 # RHEL7: ac_add_options --with-system-bz2
@@ -607,17 +537,7 @@ function build_bundled_package() {
 # Install local GCC if needed
 # ======================================
 %if %{use_bundled_gcc}
-  %if %{rhel} == 5
-    %ifarch ppc64
-      export STRIP="/bin/true"
-    %endif
-  %endif
   build_bundled_package 'gcc48-%{gcc_version}*.rpm' 'gcc48-*.rpm' '%{SOURCE300}'
-  %if %{rhel} == 5
-    %ifarch ppc64
-      unset STRIP
-    %endif
-  %endif
   export CXX=g++
 %endif
 
@@ -655,6 +575,23 @@ function build_bundled_package() {
 echo "Building Thunderbird"; echo "==============================="
 cd %{tarballdir}
 
+# Hack for missing shell when building in brew on RHEL6 and RHEL5
+%if 0%{?rhel} <= 6
+export SHELL=/bin/sh
+%endif
+
+
+echo "Generate big endian version of config/external/icu/data/icud58l.dat"
+%if 0%{?big_endian}
+  echo "Generate big endian version of config/external/icu/data/icud58l.dat"
+  cd mozilla
+  ./mach python intl/icu_sources_data.py .
+  ls -l config/external/icu/data
+  rm -f config/external/icu/data/icudt*l.dat
+  cd ..
+%endif
+
+
 # 1. Mozilla builds with -Wall with exception of a few warnings which show up
 #    everywhere in the code; so, don't override that.
 # 2. -Werror=format-security causes build failures when -Wno-format is explicitly given
@@ -681,16 +618,6 @@ MOZ_LINK_FLAGS="$MOZ_LINK_FLAGS -Wl,--no-keep-memory -Wl,--reduce-memory-overhea
   %endif
 %endif
 
-%if 0%{?rhel} == 5
-  %if %{system_libatomic}
-    # Force to use ld.bfd linker instead of ld.gold
-    MOZ_LINK_FLAGS="$MOZ_LINK_FLAGS -fuse-ld=bfd -l:libatomic.so.1"
-  %endif
-  %ifarch i386 i686
-    MOZ_OPT_FLAGS=$(echo "$MOZ_OPT_FLAGS" | %{__sed} -e 's/-march=i386/-march=i586/')
-  %endif
-%endif
-
 %if %{?debug_build}
   MOZ_OPT_FLAGS=$(echo "$MOZ_OPT_FLAGS" | %{__sed} -e 's/-O2//')
 %endif
@@ -733,31 +660,24 @@ cd -
 #===============================================================================
 
 %install
+# Hack for missing shell when building in brew on RHEL6 and RHEL5
+%if 0%{?rhel} <= 6
+export SHELL=/bin/sh
+%endif
+
 cd %{tarballdir}
 %{__rm} -rf $RPM_BUILD_ROOT
 
 DESTDIR=$RPM_BUILD_ROOT make -C objdir install
 
-%if 0%{?rhel} == 5
-desktop-file-install --vendor mozilla \
-  --dir $RPM_BUILD_ROOT%{_datadir}/applications \
-  --add-category Network \
-  --add-category Email \
-  %{SOURCE20}
-%else
 desktop-file-install \
   --dir $RPM_BUILD_ROOT%{_datadir}/applications \
   %{SOURCE20}
-%endif
 
 # Set up the thunderbird start script, unfortunatelly it is different for each RHEL
 rm -rf $RPM_BUILD_ROOT%{_bindir}/thunderbird
 THUNDERBIRD_SH_SOURCE=%{SOURCE700}
 THUNDERBIRD_PREF_SOURCE=%{SOURCE701}
-%if 0%{?rhel} == 5
-  THUNDERBIRD_SH_SOURCE=%{SOURCE500}
-  THUNDERBIRD_PREF_SOURCE=%{SOURCE501}
-%endif
 %if 0%{?rhel} == 6
   THUNDERBIRD_SH_SOURCE=%{SOURCE600}
   THUNDERBIRD_PREF_SOURCE=%{SOURCE601}
@@ -773,13 +693,6 @@ cp $THUNDERBIRD_SH_SOURCE $RPM_BUILD_ROOT%{_bindir}/thunderbird
 %{__install} -D $RPM_BUILD_ROOT/rh-default-prefs $RPM_BUILD_ROOT/%{mozappdir}/defaults/pref/all-redhat.js
 %{__rm} $RPM_BUILD_ROOT/rh-default-prefs
 
-# Hyperlink opening script for rhel5
-%if 0%{?rhel} == 5
-  install -Dm755 %{SOURCE30} $RPM_BUILD_ROOT/%{mozappdir}/open-browser.sh
-  %{__sed} -i -e 's|LIBDIR|%{_libdir}|g' $RPM_BUILD_ROOT/%{mozappdir}/open-browser.sh
-%endif
-
-
 # install icons
 for s in 16 22 24 32 48 256; do
     %{__mkdir_p} $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/${s}x${s}/apps
@@ -854,10 +767,8 @@ install -c -m 644 LICENSE $RPM_BUILD_ROOT%{mozappdir}
 cd -
 
 # Use the system dictionaries for system hunspell
-%if %{system_hunspell}
-  %{__rm} -rf ${RPM_BUILD_ROOT}%{mozappdir}/dictionaries
-  ln -s %{_datadir}/myspell ${RPM_BUILD_ROOT}%{mozappdir}/dictionaries
-%endif
+%{__rm} -rf ${RPM_BUILD_ROOT}%{mozappdir}/dictionaries
+ln -s %{_datadir}/myspell ${RPM_BUILD_ROOT}%{mozappdir}/dictionaries
 
 # ghost files
 %{__mkdir_p} $RPM_BUILD_ROOT%{mozappdir}/components
@@ -897,11 +808,7 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
 %files -f %{name}.lang
 %defattr(-,root,root,-)
 %attr(755,root,root) %{_bindir}/thunderbird
-%if 0%{?rhel} == 5
-%attr(644,root,root) %{_datadir}/applications/mozilla-thunderbird.desktop
-%else
 %attr(644,root,root) %{_datadir}/applications/thunderbird.desktop
-%endif
 %dir %{_datadir}/mozilla/extensions/%{thunderbird_app_id}
 %dir %{_libdir}/mozilla/extensions/%{thunderbird_app_id}
 %dir %{mozappdir}
@@ -940,15 +847,23 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
 %exclude %{_includedir}/%{name}-%{version}
 %{mozappdir}/dependentlibs.list
 %{mozappdir}/distribution
-%if 0%{?rhel} < 6
-%{mozappdir}/open-browser.sh
+%if 0%{?big_endian}
+%{mozappdir}/icudt58b.dat
+%else
+%{mozappdir}/icudt58l.dat
 %endif
+%{mozappdir}/chrome.manifest
+%{mozappdir}/fonts/EmojiOneMozilla.ttf
+
 
 #===============================================================================
 
 %changelog
-* Wed Mar 15 2017 Johnny Hughes <johnny@centos.org> - 45.8.0-1
-- Manual CentOS Debranding
+* Tue May  2 2017 Jan Horak <jhorak@redhat.com> - 52.1.0-1
+- Update to 52.1.0
+
+* Thu Apr 13 2017 Jan Horak <jhorak@redhat.com> - 52.0.1-1
+- Update to 52.0.1
 
 * Tue Mar  7 2017 Jan Horak <jhorak@redhat.com> - 45.8.0-1
 - Update to 45.8.0