summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--community-staging/wxgtk2.9/PKGBUILD33
-rw-r--r--community-staging/wxgtk2.9/wxGTK-2.9.4-collision.patch77
-rw-r--r--community-testing/directfb/DirectFB-1.6.1-zlib-include.patch12
-rw-r--r--community-testing/directfb/PKGBUILD31
-rw-r--r--community-testing/qingy/PKGBUILD36
-rw-r--r--community-testing/qingy/qingy.install18
-rw-r--r--community-testing/qingy/qingy.logrotate9
-rw-r--r--community/0ad/PKGBUILD9
-rw-r--r--community/0ad/boost-1.50.patch39
-rw-r--r--community/bitcoin/PKGBUILD4
-rw-r--r--community/blueman/PKGBUILD7
-rw-r--r--community/cclive/PKGBUILD11
-rw-r--r--community/cegui/PKGBUILD4
-rw-r--r--community/electricsheep/PKGBUILD4
-rw-r--r--community/encfs/PKGBUILD4
-rw-r--r--community/fatrat/PKGBUILD17
-rw-r--r--community/fbreader/PKGBUILD27
-rw-r--r--community/freeorion/PKGBUILD17
-rw-r--r--community/gigi/PKGBUILD5
-rw-r--r--community/glob2/PKGBUILD12
-rw-r--r--community/glob2/glob2.install3
-rw-r--r--community/glom/PKGBUILD7
-rw-r--r--community/glom/glom.install6
-rw-r--r--community/gnash/PKGBUILD25
-rw-r--r--community/gnash/gnash-0.8.10-boost-1.50.patch12
-rw-r--r--community/gnome-packagekit/PKGBUILD6
-rw-r--r--community/gource/PKGBUILD5
-rw-r--r--community/gpsdrive/PKGBUILD25
-rw-r--r--community/mapnik/PKGBUILD34
-rw-r--r--community/mldonkey/PKGBUILD4
-rw-r--r--community/mongodb/PKGBUILD23
-rw-r--r--community/mongodb/boost-1.50.patch245
-rw-r--r--community/nbd/PKGBUILD10
-rw-r--r--community/nbd/nbd.service10
-rw-r--r--community/openimageio/PKGBUILD6
-rw-r--r--community/os-prober/PKGBUILD8
-rw-r--r--community/performous/PKGBUILD14
-rw-r--r--community/performous/fix-boost-1.50-xtime.patch35
-rw-r--r--community/pidgin-gfire/PKGBUILD6
-rw-r--r--community/pingus/PKGBUILD19
-rw-r--r--community/pingus/pingus-0.7.6-gcc470-udl.patch22
-rw-r--r--community/pion-net/PKGBUILD41
-rw-r--r--community/pion-net/boost_1.50_support.diff223
-rw-r--r--community/pion-net/gcc_4.7_fix.diff12
-rw-r--r--community/pkgfile/PKGBUILD4
-rw-r--r--community/pkgfile/pkgfile.install9
-rw-r--r--community/pokerth/PKGBUILD6
-rw-r--r--community/python2-pyopencl/PKGBUILD4
-rw-r--r--community/qupzilla/PKGBUILD8
-rw-r--r--community/schroot/PKGBUILD10
-rw-r--r--community/smc/PKGBUILD12
-rw-r--r--community/smc/boost_filesystem3.diff48
-rw-r--r--community/spectrwm/PKGBUILD8
-rw-r--r--community/spring/PKGBUILD18
-rw-r--r--community/spring/boost-1.50.patch2539
-rw-r--r--community/springlobby/PKGBUILD4
-rw-r--r--community/suil/PKGBUILD6
-rw-r--r--community/tagpy/PKGBUILD4
-rw-r--r--community/tigervnc/PKGBUILD69
-rw-r--r--community/tigervnc/cmakelists.patch70
-rw-r--r--community/tigervnc/gethomedir.patch16
-rw-r--r--community/tigervnc/gnutls.patch36
-rw-r--r--community/tigervnc/xorg111.patch235
-rw-r--r--community/tigervnc/xorg112.patch447
-rw-r--r--community/ulogd/PKGBUILD8
-rw-r--r--community/vsftpd/PKGBUILD8
-rw-r--r--community/wesnoth/PKGBUILD12
-rw-r--r--community/wesnoth/boost_foreach.patch11890
-rw-r--r--community/wt/PKGBUILD34
-rw-r--r--core/coreutils/0001-ls-color-each-symlink-to-relative-name-in-properly.patch135
-rw-r--r--core/coreutils/PKGBUILD17
-rw-r--r--core/gpm/PKGBUILD6
-rw-r--r--core/gpm/gpm.service7
-rw-r--r--core/grep/PKGBUILD7
-rw-r--r--core/kbd/PKGBUILD10
-rw-r--r--extra/akonadi/PKGBUILD4
-rw-r--r--extra/avogadro/PKGBUILD4
-rw-r--r--extra/boost/PKGBUILD2
-rw-r--r--extra/ekiga/PKGBUILD4
-rw-r--r--extra/elfutils/PKGBUILD18
-rw-r--r--extra/elfutils/elfutils-0.154-binutils-pr-ld-13621.patch10
-rw-r--r--extra/gnome-screensaver/PKGBUILD6
-rw-r--r--extra/hddtemp/PKGBUILD65
-rw-r--r--extra/hddtemp/conf.d2
-rw-r--r--extra/hddtemp/rc.d39
-rw-r--r--extra/hddtemp/service9
-rw-r--r--extra/hugin/PKGBUILD12
-rw-r--r--extra/hugin/gcc47.patch11
-rw-r--r--extra/kdeedu-kig/PKGBUILD4
-rw-r--r--extra/kdeedu-rocs/PKGBUILD4
-rw-r--r--extra/libpst/PKGBUILD4
-rw-r--r--extra/libtorrent-rasterbar/PKGBUILD10
-rw-r--r--extra/licq/PKGBUILD4
-rw-r--r--extra/lyx/PKGBUILD4
-rw-r--r--extra/mkvtoolnix/PKGBUILD4
-rw-r--r--extra/postfix/PKGBUILD21
-rw-r--r--extra/postfix/service12
-rw-r--r--extra/pyqt/PKGBUILD16
-rw-r--r--extra/pyqt/fix-pyuic4.patch91
-rw-r--r--extra/qemu-kvm/PKGBUILD6
-rw-r--r--extra/soprano/PKGBUILD6
-rw-r--r--extra/source-highlight/PKGBUILD4
-rw-r--r--extra/virtuoso/PKGBUILD60
-rw-r--r--extra/xf86-video-apm/PKGBUILD10
-rw-r--r--extra/xf86-video-ark/PKGBUILD11
-rw-r--r--extra/xf86-video-ast/PKGBUILD6
-rw-r--r--extra/xf86-video-cirrus/PKGBUILD6
-rw-r--r--extra/xf86-video-glint/PKGBUILD6
-rw-r--r--extra/xf86-video-i128/PKGBUILD6
-rw-r--r--extra/xf86-video-i740/PKGBUILD10
-rw-r--r--extra/xf86-video-mach64/PKGBUILD8
-rw-r--r--extra/xf86-video-mga/PKGBUILD6
-rw-r--r--extra/xf86-video-neomagic/PKGBUILD6
-rw-r--r--extra/xf86-video-nv/PKGBUILD15
-rw-r--r--extra/xf86-video-r128/PKGBUILD6
-rw-r--r--extra/xf86-video-s3virge/PKGBUILD9
-rw-r--r--extra/xf86-video-savage/PKGBUILD6
-rw-r--r--extra/xf86-video-siliconmotion/PKGBUILD6
-rw-r--r--extra/xf86-video-sis/PKGBUILD8
-rw-r--r--extra/xf86-video-sisusb/PKGBUILD6
-rw-r--r--extra/xf86-video-tdfx/PKGBUILD8
-rw-r--r--extra/xf86-video-trident/PKGBUILD6
-rw-r--r--extra/xf86-video-tseng/PKGBUILD13
-rw-r--r--extra/xf86-video-voodoo/PKGBUILD8
-rw-r--r--kde-unstable/soprano/PKGBUILD6
-rw-r--r--libre/icecat/PKGBUILD11
-rw-r--r--libre/icecat/libre.patch807
-rw-r--r--libre/iceweasel-libre/Bug-756390-Make-the-Reset-Firefox-feature-more-gener.patch204
-rw-r--r--libre/iceweasel-libre/PKGBUILD15
-rw-r--r--libre/iceweasel-libre/libre.patch501
-rw-r--r--libre/iceweasel-libre/shared-libs.patch12
-rw-r--r--libre/lirc-libre/PKGBUILD2
-rw-r--r--multilib/zsnes/PKGBUILD4
133 files changed, 18167 insertions, 861 deletions
diff --git a/community-staging/wxgtk2.9/PKGBUILD b/community-staging/wxgtk2.9/PKGBUILD
new file mode 100644
index 000000000..96150f277
--- /dev/null
+++ b/community-staging/wxgtk2.9/PKGBUILD
@@ -0,0 +1,33 @@
+# $Id: PKGBUILD 74020 2012-07-18 03:42:17Z ebelanger $
+# Maintainer: Eric Bélanger <eric@archlinux.org>
+
+pkgname=wxgtk2.9
+pkgver=2.9.4
+pkgrel=1
+pkgdesc="GTK+ implementation of wxWidgets API for GUI"
+arch=('i686' 'x86_64')
+url="http://wxwidgets.org"
+license=('custom:wxWindows')
+depends=('gtk2' 'gstreamer0.10-base' 'libgl' 'libxxf86vm' 'libsm')
+makedepends=('gstreamer0.10-base-plugins' 'gconf' 'mesa')
+source=(http://downloads.sourceforge.net/wxwindows/wxWidgets-${pkgver}.tar.bz2 wxGTK-2.9.4-collision.patch)
+sha1sums=('5a34ddf19d37c741f74652ee847df9568a8b81e1'
+ 'a76ccca4c2fad246c9aafbcc5a9697ebf35f33a3')
+
+build() {
+ cd "${srcdir}/wxWidgets-${pkgver}"
+ patch -p1 -i ../wxGTK-2.9.4-collision.patch
+ ./configure --prefix=/usr --libdir=/usr/lib --with-gtk=2 --with-opengl --enable-unicode \
+ --enable-graphics_ctx --enable-mediactrl --with-regex=builtin \
+ --with-libpng=sys --with-libxpm=sys --with-libjpeg=sys --with-libtiff=sys \
+ --disable-precomp-headers
+ make
+ make -C locale allmo
+}
+
+package() {
+ cd "${srcdir}/wxWidgets-${pkgver}"
+ make DESTDIR="${pkgdir}" install
+ rm "${pkgdir}/usr/share/locale/it/LC_MESSAGES/wxmsw.mo"
+ install -D -m644 docs/licence.txt "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
+}
diff --git a/community-staging/wxgtk2.9/wxGTK-2.9.4-collision.patch b/community-staging/wxgtk2.9/wxGTK-2.9.4-collision.patch
new file mode 100644
index 000000000..4b1fb395e
--- /dev/null
+++ b/community-staging/wxgtk2.9/wxGTK-2.9.4-collision.patch
@@ -0,0 +1,77 @@
+Prevent file collisions between multiple installed SLOTs.
+
+ - Don't install wxwin.m4. It is installed with app-admin/eselect-wxwidgets.
+ - Version the bakefile preset filenames. Unversioned symlinks to these files
+ are handled by eselect.
+ - Version wx-config and wxrc. The unversioned forms are wrapper scripts
+ installed with eselect-wxwidgets.
+ - Version wxstd.mo and modify AddStdCatalog to use it.
+
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -14076,10 +14076,10 @@ COND_wxUSE_REGEX_builtin___LIB_REGEX_p = \
+ all: $(__wxregex___depname) $(__wxzlib___depname) $(__wxpng___depname) $(__wxjpeg___depname) $(__wxtiff___depname) $(__wxexpat___depname) $(__wxscintilla___depname) $(__monodll___depname) $(__monolib___depname) $(__basedll___depname) $(__baselib___depname) $(__netdll___depname) $(__netlib___depname) $(__coredll___depname) $(__corelib___depname) $(__advdll___depname) $(__advlib___depname) $(__mediadll___depname) $(__medialib___depname) $(__htmldll___depname) $(__htmllib___depname) $(__webviewdll___depname) $(__webviewlib___depname) $(__qadll___depname) $(__qalib___depname) $(__xmldll___depname) $(__xmllib___depname) $(__xrcdll___depname) $(__xrclib___depname) $(__auidll___depname) $(__auilib___depname) $(__ribbondll___depname) $(__ribbonlib___depname) $(__propgriddll___depname) $(__propgridlib___depname) $(__richtextdll___depname) $(__richtextlib___depname) $(__stcdll___depname) $(__stclib___depname) $(__gldll___depname) $(__gllib___depname) $(__sound_sdl___depname) $(__wxrc___depname) $(__cocoa_res___depname)
+
+ install: $(__install_wxregex___depname) $(__install_wxzlib___depname) $(__install_wxpng___depname) $(__install_wxjpeg___depname) $(__install_wxtiff___depname) $(__install_wxexpat___depname) $(__install_wxscintilla___depname) $(__install_monodll___depname) $(__install_monolib___depname) $(__install_basedll___depname) $(__install_baselib___depname) $(__install_netdll___depname) $(__install_netlib___depname) $(__install_coredll___depname) $(__install_corelib___depname) $(__install_advdll___depname) $(__install_advlib___depname) $(__install_mediadll___depname) $(__install_medialib___depname) $(__install_htmldll___depname) $(__install_htmllib___depname) $(__install_webviewdll___depname) $(__install_webviewlib___depname) $(__install_qadll___depname) $(__install_qalib___depname) $(__install_xmldll___depname) $(__install_xmllib___depname) $(__install_xrcdll___depname) $(__install_xrclib___depname) $(__install_auidll___depname) $(__install_auilib___depname) $(__install_ribbondll___depname) $(__install_ribbonlib___depname) $(__install_propgriddll___depname) $(__install_propgridlib___depname) $(__install_richtextdll___depname) $(__install_richtextlib___depname) $(__install_stcdll___depname) $(__install_stclib___depname) $(__install_gldll___depname) $(__install_gllib___depname) $(__install_sound_sdl___depname) $(__install_wxrc___depname) install-wxconfig locale_install locale_msw_install $(__cocoa_res_install___depname)
+- $(INSTALL_DIR) $(DESTDIR)$(datadir)/aclocal
+- (cd $(srcdir) ; $(INSTALL_DATA) wxwin.m4 $(DESTDIR)$(datadir)/aclocal)
+ $(INSTALL_DIR) $(DESTDIR)$(datadir)/bakefile/presets
+- (cd $(srcdir)/build/bakefiles/wxpresets/presets ; $(INSTALL_DATA) wx.bkl wx_unix.bkl wx_win32.bkl wx_xrc.bkl wx_presets.py $(DESTDIR)$(datadir)/bakefile/presets)
++ (cd $(srcdir)/build/bakefiles/wxpresets/presets ; \
++ for i in wx.bkl wx_unix.bkl wx_win32.bkl wx_xrc.bkl wx_presets.py ; do \
++ $(INSTALL_DATA) $$i $(DESTDIR)$(datadir)/bakefile/presets/wx$(WX_RELEASE_NODOT)$${i##wx} ; done)
+ $(DYLIB_RPATH_INSTALL)
+ $(INSTALL_DIR) $(DESTDIR)$(libdir)/wx/include/$(TOOLCHAIN_FULLNAME)/wx
+ for f in setup.h $(RCDEFS_H); do \
+@@ -14964,15 +14964,16 @@ install-wxconfig:
+ $(INSTALL_DIR) $(DESTDIR)$(bindir)
+ $(INSTALL_DIR) $(DESTDIR)$(libdir)/wx/config
+ $(INSTALL_PROGRAM) lib/wx/config/$(TOOLCHAIN_FULLNAME) $(DESTDIR)$(libdir)/wx/config
+- (cd $(DESTDIR)$(bindir) && rm -f wx-config && $(LN_S) $(DESTDIR)$(libdir)/wx/config/$(TOOLCHAIN_FULLNAME) wx-config)
+-
++ (cd $(DESTDIR)$(bindir) && rm -f wx-config-$(WX_RELEASE) \
++ && $(LN_S) ../lib/wx/config/$(TOOLCHAIN_FULLNAME) wx-config-$(WX_RELEASE))
+ locale_install:
+ $(INSTALL_DIR) $(DESTDIR)$(datadir)/locale
+ for l in $(LOCALE_LINGUAS) ; do \
+ $(INSTALL_DIR) $(DESTDIR)$(datadir)/locale/$$l ; \
+ $(INSTALL_DIR) $(DESTDIR)$(datadir)/locale/$$l/LC_MESSAGES ; \
+ if test -f $(srcdir)/locale/$$l.mo ; then \
+- $(INSTALL_DATA) $(srcdir)/locale/$$l.mo $(DESTDIR)$(datadir)/locale/$$l/LC_MESSAGES/wxstd.mo ; \
++ $(INSTALL_DATA) $(srcdir)/locale/$$l.mo \
++ $(DESTDIR)$(datadir)/locale/$$l/LC_MESSAGES/wxstd$(WX_RELEASE_NODOT).mo ; \
+ fi ; \
+ done
+
+--- a/build/bakefiles/wx.bkl
++++ b/build/bakefiles/wx.bkl
+@@ -138,7 +138,7 @@
+ <using module="gettext"/>
+ <gettext-catalogs id="locale">
+ <srcdir>$(SRCDIR)/locale</srcdir>
+- <catalog-name>wxstd</catalog-name>
++ <catalog-name>wxstd$(WX_RELEASE_NODOT)</catalog-name>
+ <linguas>
+ ca cs da de el es fi fr hu id it ja nl pl ru sl sv tr uk
+ zh zh_CN zh_TW
+--- a/src/common/translation.cpp
++++ b/src/common/translation.cpp
+@@ -1302,7 +1302,7 @@ wxArrayString wxTranslations::GetAvailableTranslations(const wxString& domain) c
+
+ bool wxTranslations::AddStdCatalog()
+ {
+- if ( !AddCatalog(wxS("wxstd")) )
++ if ( !AddCatalog(wxS("wxstd" wxSTRINGIZE(wxMAJOR_VERSION) wxSTRINGIZE(wxMINOR_VERSION))) )
+ return false;
+
+ // there may be a catalog with toolkit specific overrides, it is not
+--- a/utils/wxrc/Makefile.in
++++ b/utils/wxrc/Makefile.in
+@@ -124,7 +124,6 @@ distclean: clean
+ @COND_USE_XRC_1@ rm -f $(DESTDIR)$(bindir)/wxrc$(EXEEXT) $(DESTDIR)$(bindir)/wxrc-$(WX_RELEASE)
+ @COND_USE_XRC_1@ $(INSTALL_PROGRAM) wxrc$(EXEEXT) $(DESTDIR)$(bindir)
+ @COND_USE_XRC_1@ mv -f $(DESTDIR)$(bindir)/wxrc$(EXEEXT) $(DESTDIR)$(bindir)/wxrc-$(WX_RELEASE)
+-@COND_USE_XRC_1@ (cd $(DESTDIR)$(bindir) && $(LN_S) wxrc-$(WX_RELEASE) wxrc$(EXEEXT))
+
+ @COND_USE_XRC_1@uninstall_wxrc:
+ @COND_USE_XRC_1@ rm -f $(DESTDIR)$(bindir)/wxrc$(EXEEXT)
diff --git a/community-testing/directfb/DirectFB-1.6.1-zlib-include.patch b/community-testing/directfb/DirectFB-1.6.1-zlib-include.patch
new file mode 100644
index 000000000..e4f24a5cf
--- /dev/null
+++ b/community-testing/directfb/DirectFB-1.6.1-zlib-include.patch
@@ -0,0 +1,12 @@
+diff -Naur DirectFB-1.6.0-orig/src/core/surface.c DirectFB-1.6.0/src/core/surface.c
+--- DirectFB-1.6.0-orig/src/core/surface.c 2012-06-20 02:21:36.029994460 -0400
++++ DirectFB-1.6.0/src/core/surface.c 2012-06-20 02:22:48.533330819 -0400
+@@ -28,6 +28,8 @@
+
+ #include <config.h>
+
++#include <zlib.h>
++
+ #include <direct/debug.h>
+
+ #include <core/core.h>
diff --git a/community-testing/directfb/PKGBUILD b/community-testing/directfb/PKGBUILD
new file mode 100644
index 000000000..f67f56ce3
--- /dev/null
+++ b/community-testing/directfb/PKGBUILD
@@ -0,0 +1,31 @@
+# $Id: PKGBUILD 73967 2012-07-17 18:47:33Z ebelanger $
+# Maintainer: Jaroslav Lichtblau <dragonlord@aur.archlinux.org>
+# Maintainer: Eric Bélanger <eric@archlinux.org>
+
+pkgname=directfb
+pkgver=1.6.1
+pkgrel=1
+pkgdesc="A thin library that provides hardware graphics acceleration, input device handling and abstraction, integrated windowing system on top of the Linux Framebuffer Device"
+arch=('i686' 'x86_64')
+url="http://www.directfb.org"
+license=('LGPL')
+depends=('gcc-libs' 'libjpeg' 'sdl' 'libpng' 'freetype2')
+options=('!libtool')
+source=(http://www.directfb.org/downloads/Core/DirectFB-${pkgver%.*}/DirectFB-${pkgver}.tar.gz \
+ DirectFB-1.6.1-zlib-include.patch)
+sha1sums=('121c7fd1e81ccb41962986126e1d69f188c2f2c2'
+ 'f2309edd87c772a7894d4b648d56197d91790cad')
+
+build() {
+ cd "${srcdir}/DirectFB-${pkgver}"
+ patch -p1 -i ../DirectFB-1.6.1-zlib-include.patch
+ ./configure --prefix=/usr --sysconfdir=/etc --enable-static \
+ --enable-zlib --enable-x11 --enable-sdl --disable-vnc --disable-osx \
+ --enable-video4linux2 --enable-voodoo
+ make
+}
+
+package() {
+ cd "${srcdir}/DirectFB-${pkgver}"
+ make DESTDIR="${pkgdir}" install
+}
diff --git a/community-testing/qingy/PKGBUILD b/community-testing/qingy/PKGBUILD
new file mode 100644
index 000000000..308dc15a5
--- /dev/null
+++ b/community-testing/qingy/PKGBUILD
@@ -0,0 +1,36 @@
+# $Id: PKGBUILD 73968 2012-07-17 18:47:40Z ebelanger $
+# Maintainer: Eric Bélanger <eric@archlinux.org>
+# Contributor: Jaroslav Lichtblau <dragonlord@aur.archlinux.org>
+
+pkgname=qingy
+pkgver=1.0.0
+pkgrel=5
+pkgdesc="A DirectFB getty replacement"
+arch=('i686' 'x86_64')
+url="http://qingy.sourceforge.net/"
+license=('GPL')
+depends=('directfb' 'openssl' 'libxss')
+makedepends=('emacs')
+backup=('etc/qingy/settings' 'etc/qingy/welcomes')
+options=('!libtool')
+install=qingy.install
+source=(http://downloads.sourceforge.net/sourceforge/qingy/${pkgname}-${pkgver}.tar.bz2 \
+ qingy.logrotate)
+md5sums=('1e0912655e240adfd0ce5ced30bbc685'
+ 'a9bdfd0ac9f29380eafa97a4a056789d')
+
+build() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+ sed -i 's|/lib/security/||' media/pam/default/qingy
+ XFREE=/usr/bin/Xorg XINIT=/usr/bin/xinit \
+ ./configure --prefix=/usr --sbindir=/sbin --sysconfdir=/etc \
+ --disable-optimizations --enable-pam \
+ --disable-static-build --enable-gpm-lock --enable-emacs
+ make
+}
+
+package() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+ make DESTDIR="${pkgdir}" install
+ install -D -m644 "${srcdir}/qingy.logrotate" "${pkgdir}/etc/logrotate.d/qingy"
+}
diff --git a/community-testing/qingy/qingy.install b/community-testing/qingy/qingy.install
new file mode 100644
index 000000000..5cf234b72
--- /dev/null
+++ b/community-testing/qingy/qingy.install
@@ -0,0 +1,18 @@
+infodir=usr/share/info
+filelist=(qingy.info.gz)
+
+post_install() {
+ for file in ${filelist[@]}; do
+ install-info $infodir/$file $infodir/dir 2> /dev/null
+ done
+}
+
+post_upgrade() {
+ post_install
+}
+
+pre_remove() {
+ for file in ${filelist[@]}; do
+ install-info --delete $infodir/$file $infodir/dir 2> /dev/null
+ done
+}
diff --git a/community-testing/qingy/qingy.logrotate b/community-testing/qingy/qingy.logrotate
new file mode 100644
index 000000000..e16fb8d2a
--- /dev/null
+++ b/community-testing/qingy/qingy.logrotate
@@ -0,0 +1,9 @@
+/var/log/qingy.log {
+ compress
+ rotate 1
+ size=+1024k
+ notifempty
+ missingok
+ copytruncate
+ noolddir
+}
diff --git a/community/0ad/PKGBUILD b/community/0ad/PKGBUILD
index 00f34cdc7..6b2a83894 100644
--- a/community/0ad/PKGBUILD
+++ b/community/0ad/PKGBUILD
@@ -4,21 +4,24 @@
pkgname=0ad
pkgver=a10
_pkgver=r11863-alpha
-pkgrel=2
+pkgrel=3
pkgdesc="Cross-platform, 3D and historically-based real-time strategy game"
arch=('i686' 'x86_64')
url="http://wildfiregames.com/0ad"
license=('GPL2' 'CCPL')
depends=('binutils' 'boost-libs' 'curl' 'enet>=1.3' 'gamin' 'libogg' 'libpng' 'libvorbis' 'libxml2' 'openal' 'openexr' 'python2' 'sdl' 'wxgtk' 'zip' 'zlib' 'libgl' '0ad-data')
makedepends=('boost' 'cmake' 'mesa')
-source=("http://releases.wildfiregames.com/$pkgname-$_pkgver-unix-build.tar.xz")
-md5sums=('f42a2e18515cbcd48b99f0ea3796b3a4')
+source=("http://releases.wildfiregames.com/$pkgname-$_pkgver-unix-build.tar.xz"
+ "boost-1.50.patch")
+md5sums=('f42a2e18515cbcd48b99f0ea3796b3a4'
+ '570724341102e23730de2f70d3a1b97c')
build() {
cd "$srcdir/$pkgname-$_pkgver/build/workspaces"
sed -i 's/unix_names = { "boost_filesystem-mt", "boost_system-mt" },/unix_names = { "boost_filesystem", "boost_system" },/g' "${srcdir}/${pkgname}-${_pkgver}/build/premake/extern_libs4.lua"
sed -i 's/unix_names = { "boost_signals-mt" },/unix_names = { "boost_signals" },/g' "${srcdir}/${pkgname}-${_pkgver}/build/premake/extern_libs4.lua"
+ patch -d ../.. -Np1 < $srcdir/boost-1.50.patch
./update-workspaces.sh \
--with-system-enet \
diff --git a/community/0ad/boost-1.50.patch b/community/0ad/boost-1.50.patch
new file mode 100644
index 000000000..26ebd3e96
--- /dev/null
+++ b/community/0ad/boost-1.50.patch
@@ -0,0 +1,39 @@
+diff -ru 0ad-r11863-alpha/source/graphics/TextureManager.cpp 0ad-r11863-alpha-patched/source/graphics/TextureManager.cpp
+--- 0ad-r11863-alpha/source/graphics/TextureManager.cpp 2012-02-19 04:30:59.000000000 +0100
++++ 0ad-r11863-alpha-patched/source/graphics/TextureManager.cpp 2012-07-10 21:00:52.753251312 +0200
+@@ -425,9 +425,9 @@
+ CTextureConverter::SettingsFile* f = GetSettingsFile(settingsPath);
+ if (f)
+ files.push_back(f);
+- p = p / *it;
++ p = p / it->wstring();
+ }
+- return m_TextureConverter.ComputeSettings(srcPath.leaf(), files);
++ return m_TextureConverter.ComputeSettings(srcPath.leaf().wstring(), files);
+ }
+
+ /**
+diff -ru 0ad-r11863-alpha/source/lib/pch/pch_boost.h 0ad-r11863-alpha-patched/source/lib/pch/pch_boost.h
+--- 0ad-r11863-alpha/source/lib/pch/pch_boost.h 2012-02-16 19:01:10.000000000 +0100
++++ 0ad-r11863-alpha-patched/source/lib/pch/pch_boost.h 2012-07-10 19:51:38.413009623 +0200
+@@ -25,7 +25,7 @@
+
+ // the following boost libraries have been included in TR1 and are
+ // thus deemed usable:
+-#define BOOST_FILESYSTEM_VERSION 2
++#define BOOST_FILESYSTEM_VERSION 3
+ #include <boost/filesystem.hpp>
+ namespace fs = boost::filesystem;
+ #include <boost/shared_ptr.hpp>
+diff -ru 0ad-r11863-alpha/source/simulation2/components/ICmpAIManager.cpp 0ad-r11863-alpha-patched/source/simulation2/components/ICmpAIManager.cpp
+--- 0ad-r11863-alpha/source/simulation2/components/ICmpAIManager.cpp 2011-05-25 12:39:13.000000000 +0200
++++ 0ad-r11863-alpha-patched/source/simulation2/components/ICmpAIManager.cpp 2012-07-10 20:55:52.523233843 +0200
+@@ -53,7 +53,7 @@
+ fs::wpath components = pathname.string();
+ fs::wpath::iterator it = components.begin();
+ std::advance(it, 2);
+- std::wstring dirname = *it;
++ std::wstring dirname = it->wstring();
+
+ CScriptValRooted ai;
+ self->m_ScriptInterface.Eval("({})", ai);
diff --git a/community/bitcoin/PKGBUILD b/community/bitcoin/PKGBUILD
index f986423c6..eb23cb831 100644
--- a/community/bitcoin/PKGBUILD
+++ b/community/bitcoin/PKGBUILD
@@ -1,4 +1,4 @@
-# $Id: PKGBUILD 72962 2012-06-25 16:40:54Z tredaelli $
+# $Id: PKGBUILD 73983 2012-07-18 01:06:02Z ibiru $
# Maintainer: Timothy Redaelli <timothy.redaelli@gmail.com>
# Contributor: shahid <helllamer@gmail.com>
@@ -6,7 +6,7 @@ pkgbase=bitcoin
pkgname=('bitcoin-daemon' 'bitcoin-qt')
pkgver=0.6.3
_commit=bbe1084
-pkgrel=1
+pkgrel=2
arch=('i686' 'x86_64')
url="http://www.bitcoin.org/"
makedepends=('boost' 'automoc4' 'miniupnpc')
diff --git a/community/blueman/PKGBUILD b/community/blueman/PKGBUILD
index 79d258e7b..5abc52346 100644
--- a/community/blueman/PKGBUILD
+++ b/community/blueman/PKGBUILD
@@ -1,16 +1,17 @@
-# $Id: PKGBUILD 67339 2012-03-09 11:49:16Z allan $
+# $Id: PKGBUILD 73941 2012-07-17 09:53:35Z spupykin $
# Maintainer : Ionut Biru <ibiru@archlinux.org
# Contributor: Abhishek Dasgupta <abhidg@gmail.com>
pkgname=blueman
pkgver=1.23
-pkgrel=3
+pkgrel=4
pkgdesc="GTK+ bluetooth manager"
arch=('i686' 'x86_64')
license=('GPL')
url="http://blueman-project.org"
depends=('python-notify' 'bluez' 'dbus-python' 'gtk2' 'pygobject' 'startup-notification'
- 'obex-data-server' 'polkit-gnome' 'xdg-utils' 'hicolor-icon-theme' 'libpulse')
+ 'obex-data-server' 'polkit-gnome' 'xdg-utils' 'hicolor-icon-theme' 'libpulse'
+ 'notification-daemon')
makedepends=('pyrex' 'intltool')
optdepends=('dnsmasq: For creating PAN network'
'gconf: For gconf configuration support'
diff --git a/community/cclive/PKGBUILD b/community/cclive/PKGBUILD
index 9333328dd..db5f0e385 100644
--- a/community/cclive/PKGBUILD
+++ b/community/cclive/PKGBUILD
@@ -1,11 +1,11 @@
-# $Id: PKGBUILD 67251 2012-03-05 20:57:45Z lfleischer $
+# $Id: PKGBUILD 73985 2012-07-18 01:06:14Z ibiru $
# Maintainer: Lukas Fleischer <archlinux at cryptocrack dot de>
# Contributor: joyfulgirl@archlinux.us
# Contributor: nathan owe ndowens04 at gmail dot com
pkgname=cclive
pkgver=0.7.9
-pkgrel=1
+pkgrel=2
pkgdesc='Commandline downloader for popular video websites.'
arch=('i686' 'x86_64')
url='http://cclive.sourceforge.net/'
@@ -16,12 +16,15 @@ source=("http://downloads.sourceforge.net/project/${pkgname}/0.7/${pkgname}-${pk
md5sums=('2c7a3bbc2d6fdcfebb60cb3ae57944b5')
build() {
- cd "$pkgname-$pkgver"
+ cd $pkgname-$pkgver
+
./configure --prefix=/usr
+
make
}
package() {
- cd "$pkgname-$pkgver"
+ cd $pkgname-$pkgver
+
make DESTDIR="$pkgdir" install
}
diff --git a/community/cegui/PKGBUILD b/community/cegui/PKGBUILD
index a531fff0b..820a5bc97 100644
--- a/community/cegui/PKGBUILD
+++ b/community/cegui/PKGBUILD
@@ -1,4 +1,4 @@
-# $Id: PKGBUILD 67327 2012-03-08 18:15:45Z svenstaro $
+# $Id: PKGBUILD 73986 2012-07-18 01:06:19Z ibiru $
# Maintainer: Sven-Hendrik Haase <sh@lutzhaase.com>
# Contributor: Juergen Hoetzel <juergen@archlinux.org>
# Contributor: William Rea <sillywilly@gmail.com>,
@@ -6,7 +6,7 @@
pkgname=cegui
pkgver=0.7.6
-pkgrel=3
+pkgrel=4
pkgdesc="A free library providing windowing and widgets for graphics APIs/engines"
arch=('i686' 'x86_64')
url="http://crayzedsgui.sourceforge.net"
diff --git a/community/electricsheep/PKGBUILD b/community/electricsheep/PKGBUILD
index def1ea391..ab2e3c89e 100644
--- a/community/electricsheep/PKGBUILD
+++ b/community/electricsheep/PKGBUILD
@@ -1,9 +1,9 @@
-# $Id: PKGBUILD 73470 2012-07-08 09:29:58Z ibiru $
+# $Id: PKGBUILD 74018 2012-07-18 02:33:30Z ebelanger $
# Maintainer: Eric Bélanger <eric@archlinux.org>
pkgname=electricsheep
pkgver=2.7b33
-pkgrel=1
+pkgrel=2
pkgdesc="A screensaver that realize the collective dream of sleeping computers from all over the internet"
arch=('i686' 'x86_64')
url="http://community.electricsheep.org/"
diff --git a/community/encfs/PKGBUILD b/community/encfs/PKGBUILD
index f6c2d95ef..4e152c402 100644
--- a/community/encfs/PKGBUILD
+++ b/community/encfs/PKGBUILD
@@ -1,4 +1,4 @@
-# $Id: PKGBUILD 67176 2012-03-05 08:56:46Z ibiru $
+# $Id: PKGBUILD 73987 2012-07-18 01:06:22Z ibiru $
# Contributor: Andrea Scarpino <andrea@archlinux.org>
# Contributor: Jaroslaw Swierczynski <swiergot@aur.archlinux.org>
# Contributor: Sven Kauber, <celeon@gmail.com>
@@ -6,7 +6,7 @@
pkgname=encfs
pkgver=1.7.4
-pkgrel=7
+pkgrel=8
pkgdesc='Encrypted filesystem in user-space'
arch=('i686' 'x86_64')
url='http://www.arg0.net/encfs'
diff --git a/community/fatrat/PKGBUILD b/community/fatrat/PKGBUILD
index 3c684edc0..84efb6c86 100644
--- a/community/fatrat/PKGBUILD
+++ b/community/fatrat/PKGBUILD
@@ -1,9 +1,8 @@
-# $Id: PKGBUILD 69756 2012-04-23 09:15:01Z ibiru $
+# $Id: PKGBUILD 73988 2012-07-18 01:06:25Z ibiru $
# Maintainer: Lukas Jirkovsky <l.jirkovsky@gmail.com>
-
pkgname=fatrat
-pkgver=1.2.0_beta1
-pkgrel=5
+pkgver=1.2.0_beta2
+pkgrel=1
pkgdesc="QT4 based download manager with support for HTTP, FTP, SFTP, BitTorrent, rapidshare and more"
arch=('i686' 'x86_64')
url="http://fatrat.dolezel.info/"
@@ -11,19 +10,17 @@ license=('GPL')
depends=('gloox' 'qt' 'libtorrent-rasterbar' 'pion-net' 'qtwebkit')
optdepends=('geoip: GeoIP support')
makedepends=('boost' 'cmake' 'java-environment')
-source=(http://www.dolezel.info/download/data/fatrat/fatrat-$pkgver.tar.gz)
-md5sums=('7ce4d5e6318361f36ba5ac86a5755da9')
+source=(http://www.dolezel.info/download/data/fatrat/fatrat-$pkgver.tar.xz)
+md5sums=('ad823d2a81f0583316ece815b928c71b')
build() {
- cd $pkgname-$pkgver
+ cd "$srcdir/$pkgname-$pkgver"
. /etc/profile.d/jre.sh
. /etc/profile.d/jdk.sh
cmake \
-DWITH_EVERYTHING=ON \
- -DCMAKE_{SHARED,MODULE,EXE}_LINKER_FLAGS="-lpthread" \
- -DCMAKE_CXX_FLAGS="${CXXFLAGS} -DBOOST_FILESYSTEM_VERSION=2" \
-DCMAKE_INSTALL_PREFIX=/usr \
.
@@ -31,7 +28,7 @@ build() {
}
package() {
- cd $pkgname-$pkgver
+ cd "$srcdir/$pkgname-$pkgver"
make DESTDIR="$pkgdir" install
}
diff --git a/community/fbreader/PKGBUILD b/community/fbreader/PKGBUILD
index 3cdb3e1e3..51568d851 100644
--- a/community/fbreader/PKGBUILD
+++ b/community/fbreader/PKGBUILD
@@ -1,30 +1,25 @@
-# $Id: PKGBUILD 63548 2012-02-05 11:55:20Z ibiru $
+# $Id: PKGBUILD 73949 2012-07-17 11:17:34Z spupykin $
# Maintainer: Sergej Pupykin <pupykin.s+arch@gmail.com>
# Contributor: William Rea <sillywilly@gmail.com>
pkgname=fbreader
-pkgver=0.12.10
-pkgrel=3
+pkgver=0.99.0
+pkgrel=1
pkgdesc="An e-book reader for Linux"
arch=('i686' 'x86_64')
url="http://www.fbreader.org/"
license=('GPL')
-depends=('fribidi' 'bzip2' 'curl' 'gtk2' 'liblinebreak' 'sqlite3')
-source=(http://www.fbreader.org/files/sources/fbreader-sources-$pkgver.tgz
- build-fix.patch)
-md5sums=('da9ec4721efdb0ec0aaa182bff16ad82'
- '66ac17d8640625b6d2a806de4aa4e76c')
+depends=('fribidi' 'bzip2' 'curl' 'qt' 'liblinebreak' 'sqlite')
+makedepends=('ccache')
+source=(http://www.fbreader.org/files/desktop/fbreader-sources-$pkgver.tgz)
+md5sums=('2afbfa07dda09a979d5cf8797e2b648d')
build() {
- export CPPFLAGS="-I/usr/include/cairo"
export TARGET_ARCH=desktop
- export UI_TYPE=gtk
+ export UI_TYPE=qt4
export TARGET_STATUS=release
- export srcdir
-
cd $srcdir/fbreader-$pkgver
- patch -p0 makefiles/config.mk <$srcdir/build-fix.patch
- sed -i 's#Library::Library &Library::Instance()#Library \&Library::Instance()#' fbreader/src/library/Library.cpp
- make INSTALLDIR=/usr
- make INSTALLDIR=/usr DESTDIR=$pkgdir install
+ sed -i 's|moc-qt4|moc|g' makefiles/arch/desktop.mk
+ make ZLSHARED=no
+ make ZLSHARED=no DESTDIR=$pkgdir install
}
diff --git a/community/freeorion/PKGBUILD b/community/freeorion/PKGBUILD
index ad30d215f..ffb155e59 100644
--- a/community/freeorion/PKGBUILD
+++ b/community/freeorion/PKGBUILD
@@ -1,4 +1,4 @@
-# $Id: PKGBUILD 70724 2012-05-15 19:44:31Z arodseth $
+# $Id: PKGBUILD 73989 2012-07-18 01:06:32Z ibiru $
# Maintainer: Alexander Rødseth <rodseth@gmail.com>
# Contributor: guini <sidtrun@googlemail.com>
# Contributor: Forrest Loomis <cybercyst _ at _ gmail dot com>
@@ -8,7 +8,7 @@
pkgname=freeorion
pkgver=0.4
_fixedrevision=4635
-pkgrel=5
+pkgrel=6
pkgdesc="Turn-based galactic conquest game inspired by Master of Orion"
arch=('x86_64' 'i686')
url="http://www.freeorion.org/"
@@ -20,16 +20,18 @@ else
depends=('nvidia-cg-toolkit')
fi
depends=('bullet' 'freealut' 'libvorbis' 'python2' 'gigi' 'desktop-file-utils')
-makedepends=('boost>=1.49.0' 'ogre' 'sdl' 'gigi>=0.8.0-10' 'graphviz' 'libogg'
+makedepends=('boost>=1.49.0' 'ogre' 'sdl' 'gigi>=0.8.0-11' 'graphviz' 'libogg'
'desktop-file-utils' 'setconf' 'clang' 'cmake' 'gendesk' 'subversion')
options=('!strip' '!emptydirs')
install=$pkgname.install
-source=("$pkgname.sh")
-sha256sums=('111532e460aec847ff455ee67dd64f46e2fa5ceba39a0349d25a84b69c646eaf')
+source=("$pkgname.sh"
+ "$pkgname.png::https://a.fsdn.com/con/icons/fr/freeorion@sf.net/FO_Icon_256x256.png")
+sha256sums=('111532e460aec847ff455ee67dd64f46e2fa5ceba39a0349d25a84b69c646eaf'
+ 'a6a253eed31b77b00bf4f721f4b1c6bbd95505b9e4b38b736101e551dd12ff5f')
build() {
cd "$srcdir"
- gendesk
+ gendesk -n
msg2 "Checking out svn revision $_fixedrevision..."
if [[ -d "$pkgname/.svn" ]]; then
@@ -51,6 +53,9 @@ build() {
msg2 "GLU fix..."
setconf CMakeCache.txt CMAKE_CXX_FLAGS:STRING "'-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2 -lGL -lGLU '"
+ msg2 "Boost fix..."
+ sed -i 's:TIME_UTC:TIME_UTC_:' util/MultiplayerCommon.cpp
+
msg2 "Compiling..."
make -j1
diff --git a/community/gigi/PKGBUILD b/community/gigi/PKGBUILD
index db11176b4..63fc4188c 100644
--- a/community/gigi/PKGBUILD
+++ b/community/gigi/PKGBUILD
@@ -1,4 +1,4 @@
-# $Id: PKGBUILD 70696 2012-05-15 08:07:41Z arodseth $
+# $Id: PKGBUILD 73991 2012-07-18 01:06:42Z ibiru $
# Maintainer: Alexander Rødseth <rodseth@gmail.com>
# Contributor: Sven-Hendrik Haase <sh@lutzhaase.com>
# Contributor: fana-m <geminin@gmx.net>
@@ -7,7 +7,7 @@
pkgname=gigi
pkgver=0.8.0
-pkgrel=10
+pkgrel=11
_fixedrevision=1074
pkgdesc="Small, efficient and feature rich GUI for C++ and OpenGL"
url="http://gigi.sourceforge.net/"
@@ -36,6 +36,7 @@ build() {
sed -i 's/move_backward(/adobe::move_backward(/g' GG/adobe/vector.hpp
sed -i 's/__GNUC_MINOR__ <= 6/__GNUC_MINOR__ <= 999/g' GG/adobe/cmath.hpp
sed -i 's/insert(adobe/this->insert(adobe/g' GG/adobe/closed_hash.hpp
+ sed -i 's:TIME_UTC:TIME_UTC_:' src/GUI.cpp
msg2 "Configuring..."
setconf cmake/GiGiOgre.pc.in prefix /usr
diff --git a/community/glob2/PKGBUILD b/community/glob2/PKGBUILD
index 26da239a2..213646f90 100644
--- a/community/glob2/PKGBUILD
+++ b/community/glob2/PKGBUILD
@@ -1,28 +1,28 @@
-# $Id: PKGBUILD 67182 2012-03-05 08:57:11Z ibiru $
+# $Id: PKGBUILD 73992 2012-07-18 01:06:49Z ibiru $
# Contributor: Jaroslaw Swierczynski <swiergot@aur.archlinux.org>
# Contributor: Roman Kyrylych <Roman.Kyrylych@gmail.com>
pkgname=glob2
pkgver=0.9.4.4
-pkgrel=11
+pkgrel=12
pkgdesc="RTS game which minimizes micro-management by automatically assigning tasks to units"
arch=('i686' 'x86_64')
url="http://www.globulation2.org/"
license=('GPL3')
depends=('boost-libs' 'sdl_net' 'sdl_image' 'sdl_ttf' 'libvorbis' 'speex' 'mesa'
- 'fribidi' 'desktop-file-utils')
+ 'fribidi' 'desktop-file-utils' 'hicolor-icon-theme' 'xdg-utils')
makedepends=('scons' 'boost')
install=glob2.install
source=(http://dl.sv.nongnu.org/releases/${pkgname}/0.9.4/${pkgname}-${pkgver}.tar.gz
glob2-0.9.4.1-gcc44.patch)
-md5sums=('94c527325f355a29a2807f8f18a6e6a8' 'b13cb1f73ece23bfc6413773678d583e')
-sha1sums=('14aa8d840ef5f95a9af591789082fe2322fa8cad' '3e5ae81d85a727387a7049c3a0dfb3db930391b3')
+sha1sums=('14aa8d840ef5f95a9af591789082fe2322fa8cad'
+ '3e5ae81d85a727387a7049c3a0dfb3db930391b3')
build() {
cd "${srcdir}/${pkgname}-${pkgver}"
patch -Np0 -i "$srcdir/glob2-0.9.4.1-gcc44.patch"
- scons BINDIR="${pkgdir}/usr/bin" INSTALLDIR="${pkgdir}/usr/share"
+ scons BINDIR="${pkgdir}/usr/bin" INSTALLDIR="${pkgdir}/usr/share" LINKFLAGS="-lboost_system"
}
package () {
diff --git a/community/glob2/glob2.install b/community/glob2/glob2.install
index 7463b6e76..20264b3a8 100644
--- a/community/glob2/glob2.install
+++ b/community/glob2/glob2.install
@@ -1,4 +1,5 @@
post_install() {
+ xdg-icon-resource forceupdate --theme hicolor &> /dev/null
update-desktop-database -q
}
@@ -7,6 +8,6 @@ post_upgrade() {
}
post_remove() {
- update-desktop-database -q
+ post_install $1
}
diff --git a/community/glom/PKGBUILD b/community/glom/PKGBUILD
index 8d2259f1f..59385e1e9 100644
--- a/community/glom/PKGBUILD
+++ b/community/glom/PKGBUILD
@@ -1,11 +1,12 @@
-# $Id: PKGBUILD 69730 2012-04-23 09:07:06Z ibiru $
-# Maintainer: Roman Kyrylych <Roman.Kyrylych@gmail.com>
+# $Id: PKGBUILD 73993 2012-07-18 01:06:54Z ibiru $
+# Maintainer: Jaroslav Lichtblau <dragonlord@aur.archlinux.org>
+# Contributor: Roman Kyrylych <Roman.Kyrylych@gmail.com>
# Contributor: William Rea <sillywilly@gmail.com>
# Contributor: Jaroslav Lichtblau <dragonlord@aur.archlinux.org>
pkgname=glom
pkgver=1.22.0
-pkgrel=1
+pkgrel=2
pkgdesc="An easy-to-use database designer and user interface"
arch=('i686' 'x86_64')
url="http://www.glom.org/"
diff --git a/community/glom/glom.install b/community/glom/glom.install
index 1ad77f9aa..2b88145e3 100644
--- a/community/glom/glom.install
+++ b/community/glom/glom.install
@@ -5,11 +5,9 @@ post_install() {
}
post_upgrade() {
- post_install $1
+ post_install
}
post_remove() {
- gtk-update-icon-cache -q -t -f usr/share/icons/hicolor
- update-desktop-database -q
- update-mime-database usr/share/mime > /dev/null
+ post_install
}
diff --git a/community/gnash/PKGBUILD b/community/gnash/PKGBUILD
index 9009029b6..029f0a37c 100644
--- a/community/gnash/PKGBUILD
+++ b/community/gnash/PKGBUILD
@@ -1,10 +1,10 @@
-# $Id: PKGBUILD 73473 2012-07-08 09:30:13Z ibiru $
+# $Id: PKGBUILD 73994 2012-07-18 01:07:03Z ibiru $
# Maintainer: Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
pkgbase=gnash
pkgname=(gnash-common gnash-gtk)
pkgver=0.8.10
-pkgrel=3
+pkgrel=4
arch=(i686 x86_64)
url="http://www.gnu.org/software/gnash/"
license=(GPL3)
@@ -15,16 +15,21 @@ makedepends=(curl giflib libldap sdl agg libjpeg libpng libtool mesa
pkgconfig boost)
options=(!libtool !emptydirs)
source=(http://ftp.gnu.org/gnu/gnash/${pkgver}/gnash-${pkgver}.tar.bz2
- nodebug.patch)
+ nodebug.patch gnash-0.8.10-boost-1.50.patch)
sha256sums=('9625072e45df92baa2c28fc9999d4e2deb66bc827530baedfad2e4e2292d1224'
- '0ebb104a7632af997c7e6b268755949fa0c1eea5e32015b95a22d63d0e431551')
+ '0ebb104a7632af997c7e6b268755949fa0c1eea5e32015b95a22d63d0e431551'
+ 'ac3e7dbcb2ea30b8a263168462e739aa07706e0e3cdc672410a42a4357dbf54c')
build() {
- cd "$srcdir/gnash-$pkgver"
+ cd gnash-$pkgver
# Disable very, very verbose debugging (gigabytes of logs)
- patch -Np1 -i "$srcdir/nodebug.patch"
+ patch -Np1 -i ../nodebug.patch
+ # Link to libboost_system.so
+ patch -Np1 -i ../gnash-0.8.10-boost-1.50.patch
+
+ ./autogen.sh
./configure \
--prefix=/usr \
--sysconfdir=/etc \
@@ -48,7 +53,7 @@ package_gnash-common() {
boost-libs)
backup=(etc/gnashrc etc/gnashthumbnailrc)
- cd "$srcdir/gnash-$pkgver"
+ cd gnash-$pkgver
make GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL=1 DESTDIR="$pkgdir" install
@@ -69,9 +74,9 @@ package_gnash-gtk() {
install=gnash-gtk.install
backup=(etc/gnashpluginrc)
- mv "$srcdir"/gtk/* "$pkgdir"
-
- cd "$srcdir/gnash-$pkgver"
+ mv gtk/* "$pkgdir"
+
+ cd gnash-$pkgver
make DESTDIR="$pkgdir" install-plugin
install -m755 -d "$pkgdir/usr/share/gconf/schemas"
diff --git a/community/gnash/gnash-0.8.10-boost-1.50.patch b/community/gnash/gnash-0.8.10-boost-1.50.patch
new file mode 100644
index 000000000..a422ce932
--- /dev/null
+++ b/community/gnash/gnash-0.8.10-boost-1.50.patch
@@ -0,0 +1,12 @@
+diff -u -r gnash-0.8.10/macros/boost.m4 gnash-0.8.10-boost1.50/macros/boost.m4
+--- gnash-0.8.10/macros/boost.m4 2012-01-19 20:17:49.000000000 +0100
++++ gnash-0.8.10-boost-1.50/macros/boost.m4 2012-07-11 10:56:11.089137186 +0200
+@@ -37,7 +37,7 @@
+ boost_headers="detail/lightweight_mutex.hpp thread/thread.hpp multi_index_container.hpp multi_index/key_extractors.hpp thread/mutex.hpp program_options/options_description.hpp iostreams/stream.hpp"
+ dnl this is a list of *required* libraries. If any of these are missing, this
+ dnl test will return a failure, and Gnash won't build.
+- boost_libs="thread program_options iostreams"
++ boost_libs="thread program_options iostreams system"
+
+ dnl this is a list of *recommended* libraries. If any of these are missing, this
+ dnl test will return a warning, and Gnash will build, but testing won't work.
diff --git a/community/gnome-packagekit/PKGBUILD b/community/gnome-packagekit/PKGBUILD
index 2c59d7633..080a7d4a7 100644
--- a/community/gnome-packagekit/PKGBUILD
+++ b/community/gnome-packagekit/PKGBUILD
@@ -1,8 +1,8 @@
-# $Id: PKGBUILD 69732 2012-04-23 09:07:15Z ibiru $
+# $Id: PKGBUILD 74017 2012-07-18 01:51:17Z jconder $
# Maintainer: Jonathan Conder <jonno.conder@gmail.com>
pkgname=gnome-packagekit
-pkgver=3.4.0
+pkgver=3.4.2
pkgrel=1
pkgdesc='Collection of graphical tools for PackageKit to be used in the GNOME desktop'
arch=('i686' 'x86_64')
@@ -16,7 +16,7 @@ optdepends=('polkit-gnome: required for privileged actions'
options=('!emptydirs' '!libtool')
install="$pkgname.install"
source=("http://ftp.gnome.org/pub/gnome/sources/$pkgname/${pkgver%.*}/$pkgname-$pkgver.tar.xz")
-sha256sums=('4f23be695b70bdda8b5c15237472a735bb1745af11dbc324eead9b988f2343c6')
+sha256sums=('b7d87db07cf979409b0e997af32b81c02f5324681978f1d687973e7570c5bdca')
build() {
cd "$srcdir/$pkgname-$pkgver"
diff --git a/community/gource/PKGBUILD b/community/gource/PKGBUILD
index a45b90e11..54b04d9e9 100644
--- a/community/gource/PKGBUILD
+++ b/community/gource/PKGBUILD
@@ -1,10 +1,10 @@
-# $Id: PKGBUILD 69832 2012-04-24 11:08:37Z svenstaro $
+# $Id: PKGBUILD 73995 2012-07-18 01:07:06Z ibiru $
# Maintainer: Sven-Hendrik Haase <sh@lutzhaase.com>
# Contributor: Jose Valecillos <valecillosjg (at) gmail (dot) com>
# Contributor: Olivier Ramonat <olivier at ramonat dot fr>
pkgname=gource
pkgver=0.38
-pkgrel=1
+pkgrel=2
pkgdesc="software version control visualization"
license=(GPL3)
arch=(i686 x86_64)
@@ -17,6 +17,7 @@ md5sums=('6584241879dbb6dfaecc6ae6b58ad38c')
build() {
cd "$srcdir/$pkgname-$pkgver"
+ sed -i "s/filesystem3/filesystem/g" src/logmill.cpp
./configure --prefix=/usr
make
}
diff --git a/community/gpsdrive/PKGBUILD b/community/gpsdrive/PKGBUILD
index 86ceaa63a..ced1b0de5 100644
--- a/community/gpsdrive/PKGBUILD
+++ b/community/gpsdrive/PKGBUILD
@@ -1,25 +1,24 @@
-# $Id: PKGBUILD 67188 2012-03-05 08:57:37Z ibiru $
+# $Id: PKGBUILD 73996 2012-07-18 01:07:11Z ibiru $
# Maintainer: Sergej Pupykin <pupykin.s+arch@gmail.com>
# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
# Maintainer: damir <damir@archlinux.org>
pkgname=gpsdrive
pkgver=2.11
-pkgrel=12
+_pkgver=20120711
+pkgrel=13
pkgdesc="A car (bike, ship, plane) navigation system"
arch=("i686" "x86_64")
url="http://www.gpsdrive.de/"
license=('GPL2')
depends=('gtk2' 'gpsd' 'libxml2' 'curl' 'python2' 'boost-libs' 'gdal' 'mapnik' 'postgresql-libs' 'openstreetmap-map-icons-svn'
'perl-date-manip' 'perl-timedate' 'perl-dbi' 'perl-file-slurp' 'perl-www-mechanize' 'perl-libwww' 'perl-uri'
- 'perl-text-query' 'perl-www-curl' 'perl-xml-parser' 'perl-xml-simple' 'perl-xml-twig' 'perl-xml-writer'
- ) # already in core ('sqlite3')
+ 'perl-text-query' 'perl-www-curl' 'perl-xml-parser' 'perl-xml-simple' 'perl-xml-twig' 'perl-xml-writer')
makedepends=('cmake>=2.4.4' 'boost' 'cfitsio')
install="gpsdrive.install"
-source=("http://www.gpsdrive.de/packages/${pkgname}-${pkgver}.tar.gz"
- "gpsd-2.96.patch")
-md5sums=('6eeeca8e5c647115bea836d1f8fb6e0c'
- '5769e12c6d8932fb721212434c64f505')
+#source=("http://www.gpsdrive.de/packages/${pkgname}-${pkgver}.tar.gz")
+source=("http://arch.p5n.pp.ru/~sergej/dl/2012/${pkgname}-${_pkgver}.tar.xz")
+md5sums=('48fe20e111c10d0826d9f05746c9cf74')
build() {
cd "$srcdir"
@@ -34,15 +33,12 @@ build() {
mkdir build
cd build
- # fix the mapnik default values
- sed -i 's|"/usr/lib/mapnik/0.7/input/"|"/usr/lib/mapnik/input/"|' "${srcdir}/gpsdrive-${pkgver}/src/gpsdrive_config.c"
- sed -i 's|"/usr/share/fonts/truetype/ttf-dejavu/"|"/usr/share/fonts/TTF/"|' "${srcdir}/gpsdrive-${pkgver}/src/gpsdrive_config.c"
+ sed -i 's|GdkGC \*kontext_map;|extern GdkGC *kontext_map;|' $srcdir/gpsdrive-${_pkgver}/src/gpsdrive.c
export CFLAGS=-I/usr/include/gdk-pixbuf-2.0/
export CPPFLAGS=-I/usr/include/gdk-pixbuf-2.0/
export CXXFLAGS=-I/usr/include/gdk-pixbuf-2.0/
- export CXXFLAGS="${CXXFLAGS} -DBOOST_FILESYSTEM_VERSION=2"
- export LDFLAGS="`pkg-config --libs gtk+-2.0` -lboost_system -lboost_thread"
+ export LDFLAGS="`pkg-config --libs gtk+-2.0 gmodule-2.0` -lboost_system -lboost_thread"
# see DefineOptions.cmake for a list of common options and defaults
# cmake -L for a more in-depth listing
@@ -58,8 +54,7 @@ build() {
-DWITH_SPEECH=OFF \
-DWITH_DBUS=OFF \
-DLIBGPS_OLD=OFF \
- "$srcdir/gpsdrive-$pkgver"
- (cd "$srcdir/gpsdrive-$pkgver" && patch -p1 <$srcdir/gpsd-2.96.patch)
+ "$srcdir/gpsdrive-${_pkgver}"
make
}
diff --git a/community/mapnik/PKGBUILD b/community/mapnik/PKGBUILD
index 5c871b8b8..f41a431ff 100644
--- a/community/mapnik/PKGBUILD
+++ b/community/mapnik/PKGBUILD
@@ -1,19 +1,18 @@
-# $Id: PKGBUILD 69762 2012-04-23 09:15:36Z ibiru $
+# $Id: PKGBUILD 73999 2012-07-18 01:07:24Z ibiru $
# Maintainer: Sergej Pupykin <pupykin.s+arch@gmail.com>
# Contributor: David Dent <thewinch@gmail.com>
# Contributor: orbisvicis <orbisvicis@gmail.com>
pkgname=mapnik
-pkgver=0.7.1
-pkgrel=16
+pkgver=2.0.1
+pkgrel=1
pkgdesc="Free Toolkit for developing mapping applications. Above all Mapnik is about rendering beautiful maps"
arch=('i686' 'x86_64')
url="http://mapnik.org/"
license=('LGPL')
depends=('boost-libs' 'icu' 'libpng' 'libjpeg' 'libtiff' 'freetype2'
'libxml2' 'python2' 'proj' 'cairo' 'cairomm' 'pycairo'
- 'postgresql-libs' 'postgis' 'gdal' 'curl' 'libtool')
- # already in core ('zlib' 'sqlite3')
+ 'postgresql-libs' 'postgis' 'gdal' 'curl' 'libltdl')
optdepends=('libxslt: Web Map Service'
'python2-lxml: Web Map Service'
'python-imaging: Web Map Service'
@@ -21,24 +20,15 @@ optdepends=('libxslt: Web Map Service'
'apache: Web Map Service'
'mod_fastcgi: Web Map Service - or:'
'mod_fcgid: Web Map Service - or:'
- 'mod_wsgi: Web Map Service'
- )
-makedepends=('scons' 'boost') # already in core ('pkg-config')
+ 'mod_wsgi: Web Map Service')
+makedepends=('scons' 'boost')
install="mapnik.install"
-source=("http://download.berlios.de/${pkgname}/${pkgname}-${pkgver}.tar.bz2"
- 'gcc47.patch')
-md5sums=('8f65fda2a792518d6f6be8a85f62fc73'
- 'ce7933dc20de7e07427a6a6b5d4fd002')
+source=("https://github.com/downloads/mapnik/mapnik/mapnik-v$pkgver.tar.bz2")
+md5sums=('e3dd09991340e2568b99f46bac34b0a8')
build() {
- cd "$srcdir/$pkgname-$pkgver"
- patch -p1 -i "${srcdir}"/gcc47.patch
-
- #patch SConstruct so libs end up in /usr/lib not /usr/lib64 on X86_64
- sed -i -e "/LIBDIR_SCHEMA=/s/lib64/lib/" SConstruct
- sed -i 's|png_ptr->io_ptr|png_get_io_ptr(png_ptr)|g' src/png_reader.cpp
- sed -i 's/-ansi -Wall/-ansi -DBOOST_FILESYSTEM_VERSION=2 -Wall/' SConstruct
-
+ cd "$srcdir/$pkgname-v$pkgver"
+ sed -i 's|lib64|lib|g' SConstruct
scons configure \
PREFIX="/usr" \
INPUT_PLUGINS=all \
@@ -47,8 +37,6 @@ build() {
}
package(){
- cd "$srcdir/$pkgname-$pkgver"
+ cd "$srcdir/$pkgname-v$pkgver"
scons install
- # fix permissions on SCons-autogenerated files
- chmod 644 "${pkgdir}/usr/lib/python2.7/site-packages/mapnik/paths.py"
}
diff --git a/community/mldonkey/PKGBUILD b/community/mldonkey/PKGBUILD
index dc2546d63..6fd39e952 100644
--- a/community/mldonkey/PKGBUILD
+++ b/community/mldonkey/PKGBUILD
@@ -1,11 +1,11 @@
-# $Id: PKGBUILD 72119 2012-06-08 21:46:06Z cbrannon $
+# $Id: PKGBUILD 73966 2012-07-17 18:24:40Z cbrannon $
# Maintainer: Chris Brannon <cmbrannon79@gmail.com>
# Contributor: Corrado Primier <bardo@aur.archlinux.org>
# Contributor: Alessio 'mOLOk' Bolognino <themolok@gmail.com>
pkgname=mldonkey
pkgver=3.1.2
-pkgrel=1
+pkgrel=2
pkgdesc="A multi-network P2P client"
arch=('i686' 'x86_64')
url="http://mldonkey.sourceforge.net/"
diff --git a/community/mongodb/PKGBUILD b/community/mongodb/PKGBUILD
index 733eaa629..6a921509d 100644
--- a/community/mongodb/PKGBUILD
+++ b/community/mongodb/PKGBUILD
@@ -1,4 +1,4 @@
-# $Id: PKGBUILD 72741 2012-06-22 06:12:23Z svenstaro $
+# $Id: PKGBUILD 74000 2012-07-18 01:07:39Z ibiru $
# Maintainer: Sven-Hendrik Haase <sh@lutzhaase.com>
# Contributor: Thomas Dziedzic < gostrc at gmail >
# Contributor: Mathias Stearn <mathias@10gen.com>
@@ -6,8 +6,8 @@
pkgname=mongodb
pkgver=2.0.6
-pkgrel=1
-pkgdesc='A high-performance, open source, schema-free document-oriented database.'
+pkgrel=2
+pkgdesc='A high-performance, open source, schema-free document-oriented database'
arch=('i686' 'x86_64')
url='http://www.mongodb.org'
license=('AGPL3')
@@ -20,29 +20,18 @@ install="mongodb.install"
source=("http://downloads.mongodb.org/src/mongodb-src-r${pkgver}.tar.gz"
'mongodb.rc'
'mongodb.conf'
- '0001-Backport-for-mongodb-2.0.4-Ignore-fork-and-logpath-w.patch'
- '0002-Backport-for-mongodb-2.0.4-Don-t-check-proc-pid-exe-.patch')
+ 'boost-1.50.patch')
md5sums=('b3b32fecdcbe8e8068ec2989be9d2da4'
'9c67e00f4626ad761a8f7d4e037a54d7'
'4839fe1d638187ca3226e8267b947318'
- 'fdbf06b005b3a73a2b6caca257ec8f64'
- '659f6538f1ee3292809f638a4a37cbad')
+ '5d22fd2c0ae869218488cd7c0dbc3903')
build() {
export SCONSFLAGS="$MAKEFLAGS"
cd mongodb-src-r${pkgver}
- # 0001 suggested to backport along with 0002
- # 0002 backported for https://jira.mongodb.org/browse/SERVER-5358
- # also fixes https://bugs.archlinux.org/task/29050
- #patch -Np1 -i ${srcdir}/0001-Backport-for-mongodb-2.0.4-Ignore-fork-and-logpath-w.patch
- #patch -Np1 -i ${srcdir}/0002-Backport-for-mongodb-2.0.4-Don-t-check-proc-pid-exe-.patch
-
- # fix python name for smoke tests
- #sed \
- # -e 's/python/&2/' \
- # -i SConstruct
+ patch -Np1 -i ${srcdir}/boost-1.50.patch
scons \
all \
diff --git a/community/mongodb/boost-1.50.patch b/community/mongodb/boost-1.50.patch
new file mode 100644
index 000000000..4ccb898ec
--- /dev/null
+++ b/community/mongodb/boost-1.50.patch
@@ -0,0 +1,245 @@
+diff -ru '--exclude=mongo_vstudio.cpp' mongodb-src-r2.0.6/db/db.cpp mongodb-src-r2.0.6-patched/db/db.cpp
+--- mongodb-src-r2.0.6/db/db.cpp 2012-06-04 15:42:54.000000000 +0200
++++ mongodb-src-r2.0.6-patched/db/db.cpp 2012-07-10 22:27:16.496886220 +0200
+@@ -326,7 +326,7 @@
+ boost::filesystem::path path( dbpath );
+ for ( boost::filesystem::directory_iterator i( path );
+ i != boost::filesystem::directory_iterator(); ++i ) {
+- string fileName = boost::filesystem::path(*i).leaf();
++ string fileName = boost::filesystem::path(*i).leaf().string();
+ if ( boost::filesystem::is_directory( *i ) &&
+ fileName.length() && fileName[ 0 ] == '$' )
+ boost::filesystem::remove_all( *i );
+@@ -655,11 +655,6 @@
+ dbExecCommand = argv[0];
+
+ srand(curTimeMicros());
+-#if( BOOST_VERSION >= 104500 )
+- boost::filesystem::path::default_name_check( boost::filesystem2::no_check );
+-#else
+- boost::filesystem::path::default_name_check( boost::filesystem::no_check );
+-#endif
+
+ {
+ unsigned x = 0x12345678;
+@@ -976,7 +971,7 @@
+ if (params.count("shutdown")){
+ bool failed = false;
+
+- string name = ( boost::filesystem::path( dbpath ) / "mongod.lock" ).native_file_string();
++ string name = ( boost::filesystem::path( dbpath ) / "mongod.lock" ).string();
+ if ( !boost::filesystem::exists( name ) || boost::filesystem::file_size( name ) == 0 )
+ failed = true;
+
+diff -ru '--exclude=mongo_vstudio.cpp' mongodb-src-r2.0.6/db/dur.cpp mongodb-src-r2.0.6-patched/db/dur.cpp
+--- mongodb-src-r2.0.6/db/dur.cpp 2012-06-04 15:42:54.000000000 +0200
++++ mongodb-src-r2.0.6-patched/db/dur.cpp 2012-07-10 21:56:28.866778732 +0200
+@@ -692,7 +692,7 @@
+
+ bool samePartition = true;
+ try {
+- const string dbpathDir = boost::filesystem::path(dbpath).native_directory_string();
++ const string dbpathDir = boost::filesystem::path(dbpath).string();
+ samePartition = onSamePartition(getJournalDir().string(), dbpathDir);
+ }
+ catch(...) {
+diff -ru '--exclude=mongo_vstudio.cpp' mongodb-src-r2.0.6/db/dur_journal.cpp mongodb-src-r2.0.6-patched/db/dur_journal.cpp
+--- mongodb-src-r2.0.6/db/dur_journal.cpp 2012-06-04 15:42:54.000000000 +0200
++++ mongodb-src-r2.0.6-patched/db/dur_journal.cpp 2012-07-10 22:04:18.583472723 +0200
+@@ -169,7 +169,7 @@
+ for ( boost::filesystem::directory_iterator i( getJournalDir() );
+ i != boost::filesystem::directory_iterator();
+ ++i ) {
+- string fileName = boost::filesystem::path(*i).leaf();
++ string fileName = boost::filesystem::path(*i).leaf().string();
+ if( str::startsWith(fileName, "j._") )
+ return true;
+ }
+@@ -185,7 +185,7 @@
+ for ( boost::filesystem::directory_iterator i( getJournalDir() );
+ i != boost::filesystem::directory_iterator();
+ ++i ) {
+- string fileName = boost::filesystem::path(*i).leaf();
++ string fileName = boost::filesystem::path(*i).leaf().string();
+ if( str::startsWith(fileName, "j._") ) {
+ try {
+ removeOldJournalFile(*i);
+diff -ru '--exclude=mongo_vstudio.cpp' mongodb-src-r2.0.6/db/dur_recover.cpp mongodb-src-r2.0.6-patched/db/dur_recover.cpp
+--- mongodb-src-r2.0.6/db/dur_recover.cpp 2012-06-04 15:42:54.000000000 +0200
++++ mongodb-src-r2.0.6-patched/db/dur_recover.cpp 2012-07-10 22:02:18.226799055 +0200
+@@ -71,7 +71,7 @@
+ i != filesystem::directory_iterator();
+ ++i ) {
+ filesystem::path filepath = *i;
+- string fileName = filesystem::path(*i).leaf();
++ string fileName = filesystem::path(*i).leaf().string();
+ if( str::startsWith(fileName, "j._") ) {
+ unsigned u = str::toUnsigned( str::after(fileName, '_') );
+ if( m.count(u) ) {
+@@ -84,7 +84,7 @@
+ if( i != m.begin() && m.count(i->first - 1) == 0 ) {
+ uasserted(13532,
+ str::stream() << "unexpected file in journal directory " << dir.string()
+- << " : " << filesystem::path(i->second).leaf() << " : can't find its preceeding file");
++ << " : " << filesystem::path(i->second).leaf().string() << " : can't find its preceeding file");
+ }
+ files.push_back(i->second);
+ }
+diff -ru '--exclude=mongo_vstudio.cpp' mongodb-src-r2.0.6/db/instance.cpp mongodb-src-r2.0.6-patched/db/instance.cpp
+--- mongodb-src-r2.0.6/db/instance.cpp 2012-06-04 15:42:54.000000000 +0200
++++ mongodb-src-r2.0.6-patched/db/instance.cpp 2012-07-10 22:08:55.213488817 +0200
+@@ -645,13 +645,13 @@
+ i != boost::filesystem::directory_iterator(); ++i ) {
+ if ( directoryperdb ) {
+ boost::filesystem::path p = *i;
+- string dbName = p.leaf();
++ string dbName = p.leaf().string();
+ p /= ( dbName + ".ns" );
+ if ( MMF::exists( p ) )
+ names.push_back( dbName );
+ }
+ else {
+- string fileName = boost::filesystem::path(*i).leaf();
++ string fileName = boost::filesystem::path(*i).leaf().string();
+ if ( fileName.length() > 3 && fileName.substr( fileName.length() - 3, 3 ) == ".ns" )
+ names.push_back( fileName.substr( 0, fileName.length() - 3 ) );
+ }
+@@ -893,7 +893,7 @@
+ }
+
+ void acquirePathLock(bool doingRepair) {
+- string name = ( boost::filesystem::path( dbpath ) / "mongod.lock" ).native_file_string();
++ string name = ( boost::filesystem::path( dbpath ) / "mongod.lock" ).string();
+
+ bool oldFile = false;
+
+diff -ru '--exclude=mongo_vstudio.cpp' mongodb-src-r2.0.6/db/pdfile.cpp mongodb-src-r2.0.6-patched/db/pdfile.cpp
+--- mongodb-src-r2.0.6/db/pdfile.cpp 2012-06-04 15:42:54.000000000 +0200
++++ mongodb-src-r2.0.6-patched/db/pdfile.cpp 2012-07-10 22:11:44.103498643 +0200
+@@ -1987,7 +1987,7 @@
+ virtual bool apply( const Path &p ) {
+ if ( !boost::filesystem::exists( p ) )
+ return false;
+- boostRenameWrapper( p, newPath_ / ( p.leaf() + ".bak" ) );
++ boostRenameWrapper( p, newPath_ / ( p.leaf().string() + ".bak" ) );
+ return true;
+ }
+ virtual const char * op() const {
+@@ -2093,7 +2093,7 @@
+ uniqueReservedPath( ( preserveClonedFilesOnFailure || backupOriginalFiles ) ?
+ "backup" : "$tmp" );
+ BOOST_CHECK_EXCEPTION( boost::filesystem::create_directory( reservedPath ) );
+- string reservedPathString = reservedPath.native_directory_string();
++ string reservedPathString = reservedPath.string();
+
+ bool res;
+ {
+diff -ru '--exclude=mongo_vstudio.cpp' mongodb-src-r2.0.6/dbtests/framework.cpp mongodb-src-r2.0.6-patched/dbtests/framework.cpp
+--- mongodb-src-r2.0.6/dbtests/framework.cpp 2012-06-04 15:42:54.000000000 +0200
++++ mongodb-src-r2.0.6-patched/dbtests/framework.cpp 2012-07-10 22:29:20.610226773 +0200
+@@ -281,7 +281,7 @@
+ boost::filesystem::create_directory(p);
+ }
+
+- string dbpathString = p.native_directory_string();
++ string dbpathString = p.string();
+ dbpath = dbpathString.c_str();
+
+ cmdLine.prealloc = false;
+diff -ru '--exclude=mongo_vstudio.cpp' mongodb-src-r2.0.6/pch.h mongodb-src-r2.0.6-patched/pch.h
+--- mongodb-src-r2.0.6/pch.h 2012-06-04 15:42:54.000000000 +0200
++++ mongodb-src-r2.0.6-patched/pch.h 2012-07-10 21:35:57.133373738 +0200
+@@ -79,7 +79,7 @@
+ //#include <boost/any.hpp>
+ #include "boost/thread/once.hpp"
+ //#include <boost/archive/iterators/transform_width.hpp>
+-#define BOOST_FILESYSTEM_VERSION 2
++#define BOOST_FILESYSTEM_VERSION 3
+ #include <boost/filesystem/convenience.hpp>
+ #include <boost/filesystem/exception.hpp>
+ #include <boost/filesystem/operations.hpp>
+diff -ru '--exclude=mongo_vstudio.cpp' mongodb-src-r2.0.6/shell/shell_utils.cpp mongodb-src-r2.0.6-patched/shell/shell_utils.cpp
+--- mongodb-src-r2.0.6/shell/shell_utils.cpp 2012-06-04 15:42:54.000000000 +0200
++++ mongodb-src-r2.0.6-patched/shell/shell_utils.cpp 2012-07-10 22:38:58.443593723 +0200
+@@ -388,7 +388,7 @@
+ #endif
+ }
+
+- argv_.push_back( programPath.native_file_string() );
++ argv_.push_back( programPath.string() );
+
+ port_ = -1;
+
+diff -ru '--exclude=mongo_vstudio.cpp' mongodb-src-r2.0.6/tools/restore.cpp mongodb-src-r2.0.6-patched/tools/restore.cpp
+--- mongodb-src-r2.0.6/tools/restore.cpp 2012-06-04 15:42:54.000000000 +0200
++++ mongodb-src-r2.0.6-patched/tools/restore.cpp 2012-07-10 22:45:00.046948094 +0200
+@@ -131,7 +131,7 @@
+ log(2) << "drillDown: " << root.string() << endl;
+
+ // skip hidden files and directories
+- if (root.leaf()[0] == '.' && root.leaf() != ".")
++ if (root.leaf().string()[0] == '.' && root.leaf().string() != ".")
+ return;
+
+ if ( is_directory( root ) ) {
+@@ -210,7 +210,7 @@
+ ns += "." + _coll;
+ }
+ else {
+- string l = root.leaf();
++ string l = root.leaf().string();
+ l = l.substr( 0 , l.find_last_of( "." ) );
+ ns += "." + l;
+ }
+diff -ru '--exclude=mongo_vstudio.cpp' mongodb-src-r2.0.6/tools/tool.cpp mongodb-src-r2.0.6-patched/tools/tool.cpp
+--- mongodb-src-r2.0.6/tools/tool.cpp 2012-06-04 15:42:54.000000000 +0200
++++ mongodb-src-r2.0.6-patched/tools/tool.cpp 2012-07-10 22:23:53.356874403 +0200
+@@ -113,12 +113,6 @@
+ // we want durability to be disabled.
+ cmdLine.dur = false;
+
+-#if( BOOST_VERSION >= 104500 )
+- boost::filesystem::path::default_name_check( boost::filesystem2::no_check );
+-#else
+- boost::filesystem::path::default_name_check( boost::filesystem::no_check );
+-#endif
+-
+ _name = argv[0];
+
+ /* using the same style as db.cpp */
+diff -ru '--exclude=mongo_vstudio.cpp' mongodb-src-r2.0.6/util/background.cpp mongodb-src-r2.0.6-patched/util/background.cpp
+--- mongodb-src-r2.0.6/util/background.cpp 2012-06-04 15:42:54.000000000 +0200
++++ mongodb-src-r2.0.6-patched/util/background.cpp 2012-07-10 21:47:40.420081320 +0200
+@@ -89,7 +89,7 @@
+ if ( msTimeOut ) {
+ // add msTimeOut millisecond to current time
+ boost::xtime xt;
+- boost::xtime_get( &xt, boost::TIME_UTC );
++ boost::xtime_get( &xt, boost::TIME_UTC_ );
+
+ unsigned long long ns = msTimeOut * 1000000ULL; // milli to nano
+ if ( xt.nsec + ns < 1000000000 ) {
+diff -ru '--exclude=mongo_vstudio.cpp' mongodb-src-r2.0.6/util/concurrency/mutex.h mongodb-src-r2.0.6-patched/util/concurrency/mutex.h
+--- mongodb-src-r2.0.6/util/concurrency/mutex.h 2012-06-04 15:42:54.000000000 +0200
++++ mongodb-src-r2.0.6-patched/util/concurrency/mutex.h 2012-07-10 21:45:51.333408307 +0200
+@@ -29,7 +29,7 @@
+
+ inline boost::xtime incxtimemillis( long long s ) {
+ boost::xtime xt;
+- boost::xtime_get(&xt, boost::TIME_UTC);
++ boost::xtime_get(&xt, boost::TIME_UTC_);
+ xt.sec += (int)( s / 1000 );
+ xt.nsec += (int)(( s % 1000 ) * 1000000);
+ if ( xt.nsec >= 1000000000 ) {
+diff -ru '--exclude=mongo_vstudio.cpp' mongodb-src-r2.0.6/util/queue.h mongodb-src-r2.0.6-patched/util/queue.h
+--- mongodb-src-r2.0.6/util/queue.h 2012-06-04 15:42:54.000000000 +0200
++++ mongodb-src-r2.0.6-patched/util/queue.h 2012-07-10 22:14:00.243506560 +0200
+@@ -82,7 +82,7 @@
+ Timer timer;
+
+ boost::xtime xt;
+- boost::xtime_get(&xt, boost::TIME_UTC);
++ boost::xtime_get(&xt, boost::TIME_UTC_);
+ xt.sec += maxSecondsToWait;
+
+ scoped_lock l( _lock );
diff --git a/community/nbd/PKGBUILD b/community/nbd/PKGBUILD
index 724f783f5..e02e8902a 100644
--- a/community/nbd/PKGBUILD
+++ b/community/nbd/PKGBUILD
@@ -1,4 +1,4 @@
-# $Id: PKGBUILD 73267 2012-07-04 16:56:49Z svenstaro $
+# $Id: PKGBUILD 73924 2012-07-17 05:54:37Z svenstaro $
# Maintainer: Sven-Hendrik Haase <sh@lutzhaase.com>
# Contributor: Christian Hesse <mail@eworm.de>
# Contributor: Ionut Biru <ibiru@archlinux.org>
@@ -6,19 +6,20 @@
pkgname=nbd
pkgver=3.2
-pkgrel=1
+pkgrel=2
pkgdesc="tools for network block devices, allowing you to use remote block devices over TCP/IP"
arch=('i686' 'x86_64')
url="http://nbd.sourceforge.net"
license=('GPL')
source=(http://downloads.sourceforge.net/$pkgname/$pkgname-$pkgver.tar.bz2
- config nbd)
+ config nbd nbd.service)
backup=('etc/nbd-server/config')
depends=('glib2')
install=nbd.install
md5sums=('9cafce4ecfb55e670d7ded4c8f4e6bc9'
'2d05d426b8c2708d5f8a0d028fcbae05'
- 'e7b13a8b3369e11927d9917664557efa')
+ 'e7b13a8b3369e11927d9917664557efa'
+ '5d1acc143018117174f79eff15afa038')
build(){
cd "${srcdir}/${pkgname}-${pkgver}"
@@ -35,6 +36,7 @@ package() {
install -D -m644 "${srcdir}"/config "${pkgdir}"/etc/nbd-server/config
install -D -m755 "${srcdir}"/nbd "${pkgdir}"/etc/rc.d/nbd
+ install -D -m644 "${srcdir}"/nbd.service "${pkgdir}"/usr/lib/systemd/system/nbd.service
install -D -m644 README "${pkgdir}"/usr/share/doc/nbd/README
}
diff --git a/community/nbd/nbd.service b/community/nbd/nbd.service
new file mode 100644
index 000000000..3d580514c
--- /dev/null
+++ b/community/nbd/nbd.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=Network Block Device Server
+After=network.target
+
+[Service]
+Type=forking
+ExecStart=/usr/bin/nbd-server
+
+[Install]
+WantedBy=multi-user.target
diff --git a/community/openimageio/PKGBUILD b/community/openimageio/PKGBUILD
index f0ca5cfa1..0249f83e7 100644
--- a/community/openimageio/PKGBUILD
+++ b/community/openimageio/PKGBUILD
@@ -1,9 +1,9 @@
-# $Id: PKGBUILD 70334 2012-05-04 17:47:24Z svenstaro $
+# $Id: PKGBUILD 74002 2012-07-18 01:07:47Z ibiru $
# Contributor: SpepS <dreamspepser at yahoo dot it>
# Maintainer: Sven-Hendrik Haase <sh@lutzhaase.com>
pkgname=openimageio
-pkgver=1.0.4
+pkgver=1.0.6
pkgrel=1
pkgdesc="A library for reading and writing images, including classes, utilities, and applications."
arch=(i686 x86_64)
@@ -14,7 +14,7 @@ makedepends=('cmake' 'qt' 'python2' 'boost')
optdepends=('qt: iv image viewer'
'python2: bindings support')
source=(https://github.com/OpenImageIO/oiio/tarball/Release-$pkgver)
-md5sums=('2114f40a6015d2ba4d36fc18620f2edb')
+md5sums=('fa6e3f4be98d8e1868b389410b56563a')
build() {
cd "$srcdir"/$_pkgname*/src
diff --git a/community/os-prober/PKGBUILD b/community/os-prober/PKGBUILD
index 60969d142..7af48dcb7 100644
--- a/community/os-prober/PKGBUILD
+++ b/community/os-prober/PKGBUILD
@@ -1,9 +1,9 @@
-# $Id: PKGBUILD 71622 2012-05-31 12:59:02Z tredaelli $
+# $Id: PKGBUILD 73961 2012-07-17 15:25:25Z tredaelli $
# Maintainer: Timothy Redaelli <timothy.redaelli@gmail.com>
# Contributor: darkcoder <mario_vazq@hotmail.com>
pkgname=os-prober
-pkgver=1.53
+pkgver=1.54
pkgrel=1
pkgdesc="Utility to detect other OSes on a set of drives"
url="http://joey.kitenet.net/code/os-prober/"
@@ -11,8 +11,8 @@ arch=('i686' 'x86_64')
license=('GPL3')
depends=('sh')
source=(ftp://ftp.debian.org/debian/pool/main/o/${pkgname}/${pkgname}_${pkgver}.tar.gz)
-md5sums=('1435131b60b078a2a8301df3237a6829')
-sha512sums=('4e983d6774cb85df9bec1e8e7ca53d9eec6605bf7308b141d1ee1f118b11534e440a19c0aae17c38f717f433c1ef853ad5879feac1ba4ee10774b3f85bb544ad')
+md5sums=('9a7e8e5adeeaff4913f727fa2c95490a')
+sha512sums=('2f0541a3c31d1c23c02f1e9543ac33e269b83f75eccedd8e47eefc2364d7ded9624660f11b7fe80c71cda3cbfde89aee191ec0bd6f656b877e4241e212c7b740')
build() {
cd "$srcdir/$pkgname-$pkgver"
diff --git a/community/performous/PKGBUILD b/community/performous/PKGBUILD
index 76728e4b1..daa8d9236 100644
--- a/community/performous/PKGBUILD
+++ b/community/performous/PKGBUILD
@@ -1,10 +1,10 @@
-# $Id: PKGBUILD 73483 2012-07-08 09:31:23Z ibiru $
+# $Id: PKGBUILD 74003 2012-07-18 01:07:58Z ibiru $
# Maintainer : Laurent Carlier <lordheavym@gmail.com>
# Contributor: Christoph Zeiler <archNOSPAM_at_moonblade.dot.org>
pkgname=performous
pkgver=0.6.1
-pkgrel=14
+pkgrel=15
pkgdesc='A free game like "Singstar", "Rockband" or "Stepmania"'
arch=('i686' 'x86_64')
url="http://performous.org/"
@@ -12,16 +12,18 @@ license=('GPL')
depends=('boost-libs' 'imagemagick' 'glew' 'libxml++' 'portaudio' 'portmidi' 'opencv' 'librsvg')
#depends=('boost-libs>=1.48' 'sdl' 'jack' 'imagemagick' 'ffmpeg' 'glew>=1.7.0' 'libxml++' 'portaudio' 'portmidi' \
# 'opencv' 'librsvg' 'libjpeg' 'libpng' 'cairo')
-makedepends=('cmake' 'pkgconfig' 'help2man' 'boost>=1.48')
+makedepends=('cmake' 'pkgconfig' 'help2man' 'boost>=1.50')
optdepends=('performous-freesongs: free songs for performous')
source=(http://sourceforge.net/projects/$pkgname/files/$pkgname/$pkgver/Performous-$pkgver-Source.tar.bz2
boost-filesystem-v3.patch
ffmpeg-0.11.patch
- png15.patch)
+ png15.patch
+ fix-boost-1.50-xtime.patch)
md5sums=('451a759de77984b5a699e91107fe52e2'
'42a8c825d80b0de16bd5752d2a80e585'
'07e52e926595d053155bbfb7168e308f'
- '89157d5e21b0efd09fcbeee299d23c7e')
+ '89157d5e21b0efd09fcbeee299d23c7e'
+ '6b43ab7f1c3e2cacd3540242634eabb3')
build() {
cd ${srcdir}/Performous-${pkgver}-Source
@@ -35,6 +37,8 @@ build() {
# fix glib2.0 building
# #error "Only <glib.h> can be included directly."
sed -i -e 's#/gconvert.h#.h#g' game/unicode.cc
+ # boost 1.50 fix
+ patch -Np1 -i ../fix-boost-1.50-xtime.patch
mkdir -p build
cd build
diff --git a/community/performous/fix-boost-1.50-xtime.patch b/community/performous/fix-boost-1.50-xtime.patch
new file mode 100644
index 000000000..d13b18c26
--- /dev/null
+++ b/community/performous/fix-boost-1.50-xtime.patch
@@ -0,0 +1,35 @@
+From a4be6f47bcdd64e7c77db0a04415973d4c322ae8 Mon Sep 17 00:00:00 2001
+From: =?utf8?q?Alvaro=20Fernando=20Garc=C3=ADa?= <alvarofernandogarcia@gmail.com>
+Date: Sat, 7 Jul 2012 18:53:56 -0300
+Subject: [PATCH] Fixed boost xtime.hpp usage (for 1.50 version)
+
+---
+ game/xtime.hh | 5 +++++
+ 1 files changed, 5 insertions(+), 0 deletions(-)
+
+diff --git a/game/xtime.hh b/game/xtime.hh
+index 41303cb..8f5463d 100644
+--- a/game/xtime.hh
++++ b/game/xtime.hh
+@@ -1,5 +1,6 @@
+ #pragma once
+
++#include <boost/version.hpp>
+ #include <boost/thread/xtime.hpp>
+ #include <cmath>
+
+@@ -20,7 +21,11 @@ namespace {
+ }
+ boost::xtime now() {
+ boost::xtime time;
++#if (BOOST_VERSION / 100 % 1000 >= 50)
++ boost::xtime_get(&time, boost::TIME_UTC_);
++#else
+ boost::xtime_get(&time, boost::TIME_UTC);
++#endif
+ return time;
+ }
+ double seconds(boost::xtime const& time) {
+--
+1.7.4.1
+
diff --git a/community/pidgin-gfire/PKGBUILD b/community/pidgin-gfire/PKGBUILD
index 9abfa1f83..c3f268c1a 100644
--- a/community/pidgin-gfire/PKGBUILD
+++ b/community/pidgin-gfire/PKGBUILD
@@ -1,15 +1,16 @@
+# $Id: PKGBUILD 73926 2012-07-17 06:00:57Z svenstaro $
# Maintainer: Sven-Hendrik Haase <sh@lutzhaase.com>
# Contributor: Slash <demodevil5[at]yahoo[dot]com>
# Contributor: LookTJ <jesus[dot]christ[dot]i[dot]love[at]gmail[dot]com>
pkgname=pidgin-gfire
pkgver=0.9.4
-pkgrel=3
+pkgrel=4
pkgdesc="Gfire is an Plugin for the Pidgin IM client which allows you to connect the Xfire network."
arch=('i686' 'x86_64')
url="http://gfireproject.org/"
license=('GPL')
-depends=('glib2' 'libpurple' 'libnotify' 'gtk2')
+depends=('glib2' 'pidgin' 'libnotify' 'gtk2')
makedepends=('pkgconfig' 'intltool' 'libtool')
source=("http://downloads.sourceforge.net/gfire/pidgin-gfire-$pkgver.tar.bz2" "gfire-libnotify.patch")
md5sums=('7167828fd77200603a318afdd4d9ebd2'
@@ -20,6 +21,7 @@ build() {
cd "$srcdir/pidgin-gfire-$pkgver"
patch -p0 -i ../gfire-libnotify.patch
+ sed "/gthread.h/d" -i src/gf_base.h
./autogen.sh
./configure --prefix=/usr --enable-libnotify
make
diff --git a/community/pingus/PKGBUILD b/community/pingus/PKGBUILD
index 16f1f0e98..a133d447b 100644
--- a/community/pingus/PKGBUILD
+++ b/community/pingus/PKGBUILD
@@ -1,25 +1,32 @@
-# $Id: PKGBUILD 67202 2012-03-05 08:58:41Z ibiru $
+# $Id: PKGBUILD 74004 2012-07-18 01:08:07Z ibiru $
# Maintainer: Eric Belanger <eric@archlinux.org>
pkgname=pingus
pkgver=0.7.6
-pkgrel=3
+pkgrel=4
pkgdesc="A Lemmings clone, i.e. a level-based puzzle game."
arch=('i686' 'x86_64')
url="http://pingus.seul.org"
license=('GPL')
depends=('sdl_image' 'sdl_mixer' 'libgl' 'boost-libs>=1.49')
makedepends=('scons' 'boost>=1.49' 'mesa')
-source=(http://pingus.googlecode.com/files/${pkgname}-${pkgver}.tar.bz2
- pingus.desktop)
+source=("http://pingus.googlecode.com/files/${pkgname}-${pkgver}.tar.bz2"
+ 'pingus.desktop'
+ 'pingus-0.7.6-gcc470-udl.patch')
md5sums=('561798686f34d3fa4e69135d655f47ac'
- '9eec34047bdcff49e08f41e81764e20c')
+ '9eec34047bdcff49e08f41e81764e20c'
+ '3730bdad38c21c67203456a985945473')
sha1sums=('b5f5a25d71beb197c9466fb8928018a377f56487'
- '579a1144f161ce89e6e024cea37210149b89c0c0')
+ '579a1144f161ce89e6e024cea37210149b89c0c0'
+ '143dd9969e8d100d29ed4f5b2039dde627afeb06')
build() {
cd ${pkgname}-${pkgver}
+ # fedora patch to fix error due to new standards
+ # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51282
+ patch -Np0 -i ${srcdir}/pingus-0.7.6-gcc470-udl.patch
+
scons prefix=/usr
}
diff --git a/community/pingus/pingus-0.7.6-gcc470-udl.patch b/community/pingus/pingus-0.7.6-gcc470-udl.patch
new file mode 100644
index 000000000..843439321
--- /dev/null
+++ b/community/pingus/pingus-0.7.6-gcc470-udl.patch
@@ -0,0 +1,22 @@
+--- src/pingus/pingus_main.cpp~ 2011-12-24 15:46:47.000000000 -0600
++++ src/pingus/pingus_main.cpp 2012-01-03 13:13:03.034195720 -0600
+@@ -465,7 +465,7 @@
+ void
+ PingusMain::print_greeting_message()
+ {
+- std::string greeting = "Welcome to Pingus "VERSION;
++ std::string greeting = "Welcome to Pingus " VERSION;
+ greeting += "!";
+ std::cout << greeting << std::endl;
+ for (unsigned int i = 0; i < greeting.length(); ++i)
+--- src/pingus/screens/pingus_menu.cpp~ 2011-12-24 15:46:47.000000000 -0600
++++ src/pingus/screens/pingus_menu.cpp 2012-01-03 13:30:28.967700554 -0600
+@@ -153,7 +153,7 @@
+ gc.get_height()/2 - 280));
+
+ gc.print_left(Fonts::pingus_small, Vector2i(gc.get_width()/2 - 400 + 25, gc.get_height()-140),
+- "Pingus "VERSION" - Copyright (C) 1998-2011 Ingo Ruhnke <grumbel@gmail.com>\n"
++ "Pingus " VERSION " - Copyright (C) 1998-2011 Ingo Ruhnke <grumbel@gmail.com>\n"
+ "See the file AUTHORS for a complete list of contributors.\n"
+ "Pingus comes with ABSOLUTELY NO WARRANTY. This is free software, and you are\n"
+ "welcome to redistribute it under certain conditions; see the file COPYING for details.\n");
diff --git a/community/pion-net/PKGBUILD b/community/pion-net/PKGBUILD
index fd362da67..d2511597a 100644
--- a/community/pion-net/PKGBUILD
+++ b/community/pion-net/PKGBUILD
@@ -1,31 +1,36 @@
-# $Id: PKGBUILD 69770 2012-04-23 09:16:19Z ibiru $
+# $Id: PKGBUILD 74005 2012-07-18 01:08:15Z ibiru $
# Maintainer: Lukas Jirkovsky <l.jirkovsky@gmail.com>
# Contributor: David Watzke <david@watzke.cz>
-
pkgname=pion-net
-pkgver=4.0.11
-pkgrel=1
+pkgver=4.0.12
+pkgrel=3
pkgdesc="A C++ development library for implementing lightweight HTTP interfaces"
url="http://www.pion.org/projects/pion-network-library"
arch=('i686' 'x86_64')
license=('custom:Boost')
depends=('boost-libs' 'openssl' 'log4cpp')
makedepends=('boost')
-source=("http://www.pion.org/files/$pkgname-$pkgver.tar.bz2")
-md5sums=('e5cf42a02681c5d73e7be6784d99fece')
+source=("http://www.pion.org/files/$pkgname-$pkgver.tar.bz2" \
+ gcc_4.7_fix.diff boost_1.50_support.diff)
+md5sums=('baf0b6a006660dc4051c824e4660cb9d'
+ 'd6c5314678709184e983b301cea11566'
+ 'fcd2a7520b818354308315dc1e8053d4')
build() {
- cd "$srcdir/$pkgname-$pkgver"
-
- # override configure bug (forces debug even when nobody asked for it)
- sed -i "s/ -ggdb//g" configure
+ cd "$srcdir/$pkgname-$pkgver"
- ./configure --prefix=/usr --disable-doxygen-doc
+ # override configure bug (forces debug even when nobody asked for it)
+ sed -i "s/ -ggdb//g" configure
+ # override Makefile bug
+ sed -i "/docs:/ s/doxygen-doc//" Makefile.in
+ # fix compilation with new versions of gcc
+ patch -Np1 < "$srcdir"/gcc_4.7_fix.diff || true
+ # fix build with boost 1.50 - port to filesystem v3
+ patch -Np1 < "$srcdir"/boost_1.50_support.diff || true
- # override Makefile bug
- sed -i "/docs:/ s/doxygen-doc//" Makefile
+ ./configure --prefix=/usr --disable-doxygen-doc
- make
+ make
}
check() {
@@ -34,9 +39,9 @@ check() {
}
package() {
- cd "$srcdir/$pkgname-$pkgver"
- make DESTDIR="$pkgdir" install
+ cd "$srcdir/$pkgname-$pkgver"
+ make DESTDIR="$pkgdir" install
- # install license
- install -D -m0755 COPYING "$pkgdir/usr/share/licenses/$pkgname/Boost"
+ # install license
+ install -D -m0755 COPYING "$pkgdir/usr/share/licenses/$pkgname/Boost"
}
diff --git a/community/pion-net/boost_1.50_support.diff b/community/pion-net/boost_1.50_support.diff
new file mode 100644
index 000000000..7b82f34b9
--- /dev/null
+++ b/community/pion-net/boost_1.50_support.diff
@@ -0,0 +1,223 @@
+diff -rup pion-net-4.0.12/common/src/PionPlugin.cpp pion-net-4.0.12-new/common/src/PionPlugin.cpp
+--- pion-net-4.0.12/common/src/PionPlugin.cpp 2011-03-22 04:35:12.000000000 +0100
++++ pion-net-4.0.12-new/common/src/PionPlugin.cpp 2012-07-07 20:42:22.084660696 +0200
+@@ -58,7 +58,7 @@ void PionPlugin::addPluginDirectory(cons
+ if (! boost::filesystem::exists(plugin_path) )
+ throw DirectoryNotFoundException(dir);
+ boost::mutex::scoped_lock plugin_lock(m_plugin_mutex);
+- m_plugin_dirs.push_back(plugin_path.directory_string());
++ m_plugin_dirs.push_back(plugin_path.string());
+ }
+
+ void PionPlugin::resetPluginDirectories(void)
+@@ -204,7 +204,7 @@ bool PionPlugin::checkForFile(std::strin
+ try {
+ // is_regular may throw if directory is not readable
+ if (boost::filesystem::is_regular(test_path)) {
+- final_path = test_path.file_string();
++ final_path = test_path.string();
+ return true;
+ }
+ } catch (...) {}
+@@ -225,7 +225,7 @@ bool PionPlugin::checkForFile(std::strin
+ try {
+ // is_regular may throw if directory is not readable
+ if (boost::filesystem::is_regular(test_path)) {
+- final_path = test_path.file_string();
++ final_path = test_path.string();
+ return true;
+ }
+ } catch (...) {}
+@@ -291,7 +291,7 @@ void PionPlugin::getAllPluginNames(std::
+ for (boost::filesystem::directory_iterator it2(*it); it2 != end; ++it2) {
+ if (boost::filesystem::is_regular(*it2)) {
+ if (boost::filesystem::extension(it2->path()) == PionPlugin::PION_PLUGIN_EXTENSION) {
+- plugin_names.push_back(PionPlugin::getPluginName(it2->path().leaf()));
++ plugin_names.push_back(PionPlugin::getPluginName(it2->path().filename().string()));
+ }
+ }
+ }
+@@ -309,11 +309,11 @@ void *PionPlugin::loadDynamicLibrary(con
+ #else
+ // convert into a full/absolute/complete path since dlopen()
+ // does not always search the CWD on some operating systems
+- const boost::filesystem::path full_path = boost::filesystem::complete(plugin_file);
++ const boost::filesystem::path full_path = boost::filesystem::absolute(plugin_file);
+ // NOTE: you must load shared libraries using RTLD_GLOBAL on Unix platforms
+ // due to a bug in GCC (or Boost::any, depending on which crowd you want to believe).
+ // see: http://svn.boost.org/trac/boost/ticket/754
+- return dlopen(full_path.file_string().c_str(), RTLD_LAZY | RTLD_GLOBAL);
++ return dlopen(full_path.string().c_str(), RTLD_LAZY | RTLD_GLOBAL);
+ #endif
+ }
+
+diff -rup pion-net-4.0.12/common/src/PionScheduler.cpp pion-net-4.0.12-new/common/src/PionScheduler.cpp
+--- pion-net-4.0.12/common/src/PionScheduler.cpp 2008-11-08 00:41:17.000000000 +0100
++++ pion-net-4.0.12-new/common/src/PionScheduler.cpp 2012-07-07 20:42:22.084660696 +0200
+@@ -102,7 +102,7 @@ boost::xtime PionScheduler::getWakeupTim
+ boost::uint32_t sleep_nsec)
+ {
+ boost::xtime wakeup_time;
+- boost::xtime_get(&wakeup_time, boost::TIME_UTC);
++ boost::xtime_get(&wakeup_time, boost::TIME_UTC_);
+ wakeup_time.sec += sleep_sec;
+ wakeup_time.nsec += sleep_nsec;
+ if (static_cast<boost::uint32_t>(wakeup_time.nsec) >= NSEC_IN_SECOND) {
+diff -rup pion-net-4.0.12/common/tests/PionPluginPtrTests.cpp pion-net-4.0.12-new/common/tests/PionPluginPtrTests.cpp
+--- pion-net-4.0.12/common/tests/PionPluginPtrTests.cpp 2009-10-13 18:20:43.000000000 +0200
++++ pion-net-4.0.12-new/common/tests/PionPluginPtrTests.cpp 2012-07-07 20:42:22.084660696 +0200
+@@ -230,7 +230,7 @@ BOOST_AUTO_TEST_SUITE_END()
+ class Sandbox_F {
+ public:
+ Sandbox_F() {
+- m_cwd = boost::filesystem::current_path().directory_string();
++ m_cwd = boost::filesystem::current_path().string();
+ boost::filesystem::remove_all("sandbox");
+ BOOST_REQUIRE(boost::filesystem::create_directory("sandbox"));
+ BOOST_REQUIRE(boost::filesystem::create_directory("sandbox/dir1"));
+diff -rup pion-net-4.0.12/configure pion-net-4.0.12-new/configure
+--- pion-net-4.0.12/configure 2012-03-24 08:00:10.000000000 +0100
++++ pion-net-4.0.12-new/configure 2012-07-07 20:42:22.094660551 +0200
+@@ -22091,7 +22091,7 @@ fi
+
+
+ # AC_MSG_NOTICE(Boost home directory: $BOOST_HOME_DIR)
+-CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS -DBOOST_FILESYSTEM_VERSION=2"
++CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS -DBOOST_FILESYSTEM_VERSION=3"
+ LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
+
+ # Check for Boost library extension
+@@ -22197,7 +22197,7 @@ LIBS="$LIBS_SAVED"
+ BOOST_TRY_LIB=thread
+ BOOST_TRY_LINK="boost_${BOOST_TRY_LIB}${BOOST_LIB_EXTENSION}"
+ LIBS_SAVED="$LIBS"
+-LIBS="$LIBS_SAVED -l${BOOST_TRY_LINK} ${BOOST_DATE_TIME_LIB}"
++LIBS="$LIBS_SAVED -lboost_system -l${BOOST_TRY_LINK} ${BOOST_DATE_TIME_LIB}"
+ echo "$as_me:$LINENO: checking for boost::${BOOST_TRY_LIB} library" >&5
+ echo $ECHO_N "checking for boost::${BOOST_TRY_LIB} library... $ECHO_C" >&6
+ cat >conftest.$ac_ext <<_ACEOF
+diff -rup pion-net-4.0.12/net/include/pion/net/TCPConnection.hpp pion-net-4.0.12-new/net/include/pion/net/TCPConnection.hpp
+--- pion-net-4.0.12/net/include/pion/net/TCPConnection.hpp 2012-01-12 17:30:03.000000000 +0100
++++ pion-net-4.0.12-new/net/include/pion/net/TCPConnection.hpp 2012-07-07 20:43:34.530273709 +0200
+@@ -26,6 +26,7 @@
+ #include <boost/array.hpp>
+ #include <boost/function.hpp>
+ #include <boost/function/function1.hpp>
++#include <boost/system/system_error.hpp>
+ #include <pion/PionConfig.hpp>
+ #include <string>
+
+diff -rup pion-net-4.0.12/net/services/FileService.cpp pion-net-4.0.12-new/net/services/FileService.cpp
+--- pion-net-4.0.12/net/services/FileService.cpp 2009-08-06 20:58:13.000000000 +0200
++++ pion-net-4.0.12-new/net/services/FileService.cpp 2012-07-07 20:42:22.097993836 +0200
+@@ -137,8 +137,8 @@ void FileService::operator()(HTTPRequest
+
+ // make sure that the requested file is within the configured directory
+ file_path.normalize();
+- std::string file_string = file_path.file_string();
+- if (file_string.find(m_directory.directory_string()) != 0) {
++ std::string file_string = file_path.string();
++ if (file_string.find(m_directory.string()) != 0) {
+ PION_LOG_WARN(m_logger, "Request for file outside of directory ("
+ << getResource() << "): " << relative_path);
+ static const std::string FORBIDDEN_HTML_START =
+@@ -319,7 +319,7 @@ void FileService::operator()(HTTPRequest
+ << getResource() << "): " << relative_path);
+
+ // determine the MIME type
+- response_file.setMimeType(findMIMEType( response_file.getFilePath().leaf() ));
++ response_file.setMimeType(findMIMEType( response_file.getFilePath().filename().string() ));
+
+ // get the file_size and last_modified timestamp
+ response_file.update();
+@@ -597,7 +597,7 @@ void FileService::stop(void)
+ void FileService::scanDirectory(const boost::filesystem::path& dir_path)
+ {
+ PION_LOG_DEBUG(m_logger, "Scanning directory (" << getResource() << "): "
+- << dir_path.directory_string());
++ << dir_path.string());
+
+ // iterate through items in the directory
+ boost::filesystem::directory_iterator end_itr;
+@@ -614,8 +614,8 @@ void FileService::scanDirectory(const bo
+ // item is a regular file
+
+ // figure out relative path to the file
+- std::string file_path_string( itr->path().file_string() );
+- std::string relative_path( file_path_string.substr(m_directory.directory_string().size() + 1) );
++ std::string file_path_string( itr->path().string() );
++ std::string relative_path( file_path_string.substr(m_directory.string().size() + 1) );
+
+ // add item to cache (use placeholder if scan == 1)
+ addCacheEntry(relative_path, *itr, m_scan_setting == 1);
+@@ -628,7 +628,7 @@ FileService::addCacheEntry(const std::st
+ const boost::filesystem::path& file_path,
+ const bool placeholder)
+ {
+- DiskFile cache_entry(file_path, NULL, 0, 0, findMIMEType(file_path.leaf()));
++ DiskFile cache_entry(file_path, NULL, 0, 0, findMIMEType(file_path.filename().string()));
+ if (! placeholder) {
+ cache_entry.update();
+ // only read the file if its size is <= max_cache_size
+@@ -636,7 +636,7 @@ FileService::addCacheEntry(const std::st
+ try { cache_entry.read(); }
+ catch (std::exception&) {
+ PION_LOG_ERROR(m_logger, "Unable to add file to cache: "
+- << file_path.file_string());
++ << file_path.string());
+ return std::make_pair(m_cache_map.end(), false);
+ }
+ }
+@@ -647,10 +647,10 @@ FileService::addCacheEntry(const std::st
+
+ if (add_entry_result.second) {
+ PION_LOG_DEBUG(m_logger, "Added file to cache: "
+- << file_path.file_string());
++ << file_path.string());
+ } else {
+ PION_LOG_ERROR(m_logger, "Unable to insert cache entry for file: "
+- << file_path.file_string());
++ << file_path.string());
+ }
+
+ return add_entry_result;
+@@ -713,7 +713,7 @@ void DiskFile::read(void)
+
+ // read the file into memory
+ if (!file_stream.is_open() || !file_stream.read(m_file_content.get(), m_file_size))
+- throw FileService::FileReadException(m_file_path.file_string());
++ throw FileService::FileReadException(m_file_path.string());
+ }
+
+ bool DiskFile::checkUpdated(void)
+@@ -751,7 +751,7 @@ DiskFileSender::DiskFileSender(DiskFile&
+ {
+ PION_LOG_DEBUG(m_logger, "Preparing to send file"
+ << (m_disk_file.hasFileContent() ? " (cached): " : ": ")
+- << m_disk_file.getFilePath().file_string());
++ << m_disk_file.getFilePath().string());
+
+ // set the Content-Type HTTP header using the file's MIME type
+ m_writer->getResponse().setContentType(m_disk_file.getMimeType());
+@@ -795,7 +795,7 @@ void DiskFileSender::send(void)
+ m_file_stream.open(m_disk_file.getFilePath(), std::ios::in | std::ios::binary);
+ if (! m_file_stream.is_open()) {
+ PION_LOG_ERROR(m_logger, "Unable to open file: "
+- << m_disk_file.getFilePath().file_string());
++ << m_disk_file.getFilePath().string());
+ return;
+ }
+ }
+@@ -811,10 +811,10 @@ void DiskFileSender::send(void)
+ if (! m_file_stream.read(m_content_buf.get(), m_file_bytes_to_send)) {
+ if (m_file_stream.gcount() > 0) {
+ PION_LOG_ERROR(m_logger, "File size inconsistency: "
+- << m_disk_file.getFilePath().file_string());
++ << m_disk_file.getFilePath().string());
+ } else {
+ PION_LOG_ERROR(m_logger, "Unable to read file: "
+- << m_disk_file.getFilePath().file_string());
++ << m_disk_file.getFilePath().string());
+ }
+ return;
+ }
diff --git a/community/pion-net/gcc_4.7_fix.diff b/community/pion-net/gcc_4.7_fix.diff
new file mode 100644
index 000000000..5c2ed3cfe
--- /dev/null
+++ b/community/pion-net/gcc_4.7_fix.diff
@@ -0,0 +1,12 @@
+diff -rup pion-net-4.0.12/common/include/pion/PluginManager.hpp pion-net-4.0.12-new/common/include/pion/PluginManager.hpp
+--- pion-net-4.0.12/common/include/pion/PluginManager.hpp 2011-02-12 01:46:50.000000000 +0100
++++ pion-net-4.0.12-new/common/include/pion/PluginManager.hpp 2012-07-07 16:54:22.470284487 +0200
+@@ -420,7 +420,7 @@ inline void PluginManager<PLUGIN_TYPE>::
+ delete i->second.first;
+ }
+ }
+- erase(std::map<std::string, std::pair<PLUGIN_TYPE *, PionPluginPtr<PLUGIN_TYPE> > >::begin(),
++ this->erase(std::map<std::string, std::pair<PLUGIN_TYPE *, PionPluginPtr<PLUGIN_TYPE> > >::begin(),
+ std::map<std::string, std::pair<PLUGIN_TYPE *, PionPluginPtr<PLUGIN_TYPE> > >::end());
+ }
+ }
diff --git a/community/pkgfile/PKGBUILD b/community/pkgfile/PKGBUILD
index 029b2347e..7b79de3c0 100644
--- a/community/pkgfile/PKGBUILD
+++ b/community/pkgfile/PKGBUILD
@@ -1,9 +1,9 @@
-# $Id: PKGBUILD 73908 2012-07-17 01:41:42Z dreisner $
+# $Id: PKGBUILD 73970 2012-07-17 20:42:54Z dreisner $
# Maintainer: Dave Reisner <dreisner@archlinux.org>
pkgname=pkgfile
pkgver=1
-pkgrel=1
+pkgrel=2
pkgdesc="a pacman .files metadata explorer"
arch=('i686' 'x86_64')
url="http://github.com/falconindy/pkgfile"
diff --git a/community/pkgfile/pkgfile.install b/community/pkgfile/pkgfile.install
index 7653630b0..bf0c9cfa3 100644
--- a/community/pkgfile/pkgfile.install
+++ b/community/pkgfile/pkgfile.install
@@ -1,5 +1,12 @@
#!/bin/bash
post_install() {
- printf "==> Run 'pkgfile ---update' to initialize the database\n"
+ printf "==> Run 'pkgfile --update' to initialize the database\n"
+}
+
+post_remove() {
+ # the cache dir might not be removed, notify the user
+ if [ -d var/cache/pkgfile ]; then
+ printf "==> /var/cache/pkgfile has not been removed\n"
+ fi
}
diff --git a/community/pokerth/PKGBUILD b/community/pokerth/PKGBUILD
index 9776d3921..13be8a7a4 100644
--- a/community/pokerth/PKGBUILD
+++ b/community/pokerth/PKGBUILD
@@ -1,4 +1,4 @@
-# $Id: PKGBUILD 72879 2012-06-24 11:31:45Z svenstaro $
+# $Id: PKGBUILD 74006 2012-07-18 01:08:18Z ibiru $
# Maintainer: Mateusz Herych <heniekk@gmail.com>
# Maintainer: Bartłomiej Piotrowski <barthalion@gmail.com>
# Contributor: Vasco Costa <vasco.costa@meiodigital.com>
@@ -6,7 +6,7 @@
pkgname=pokerth
_realname=PokerTH
pkgver=0.9.5
-pkgrel=1
+pkgrel=2
pkgdesc="Poker game written in C++/QT4"
arch=('i686' 'x86_64')
url="http://www.pokerth.net/"
@@ -22,8 +22,6 @@ build() {
sed -i '1 i #include <unistd.h>' src/third_party/qtsingleapplication/qtlocalpeer.cpp
- sed -i 's/QMAKE_CXXFLAGS += -std=gnu++0x/QMAKE_CXXFLAGS += -std=gnu++0x -DBOOST_FILESYSTEM_VERSION=2/' *.pro
-
sed -i '23 i #include <libircclient/libirc_rfcnumeric.h>' src/net/common/ircthread.cpp
# fix g++: error: unrecognized option '-no_dead_strip_inits_and_terms'
diff --git a/community/python2-pyopencl/PKGBUILD b/community/python2-pyopencl/PKGBUILD
index 51953da90..d68521e66 100644
--- a/community/python2-pyopencl/PKGBUILD
+++ b/community/python2-pyopencl/PKGBUILD
@@ -1,9 +1,9 @@
-# $Id: PKGBUILD 73025 2012-06-28 12:23:14Z stephane $
+# $Id: PKGBUILD 74008 2012-07-18 01:08:34Z ibiru $
# Maintainer: Stéphane Gaudreault <stephane@archlinux.org>
pkgname=python2-pyopencl
pkgver=2012.1
-pkgrel=1
+pkgrel=2
pkgdesc="A complete, object-oriented language binding of OpenCL to Python"
arch=('i686' 'x86_64')
url="http://mathema.tician.de/software/pyopencl"
diff --git a/community/qupzilla/PKGBUILD b/community/qupzilla/PKGBUILD
index c08e08664..6439f0a8c 100644
--- a/community/qupzilla/PKGBUILD
+++ b/community/qupzilla/PKGBUILD
@@ -1,9 +1,9 @@
-# $Id: PKGBUILD 73609 2012-07-11 23:14:36Z speps $
+# $Id: PKGBUILD 73955 2012-07-17 13:02:36Z speps $
# Maintainer: speps <speps at aur dot archlinux dot org>
_name=QupZilla
pkgname=qupzilla
-pkgver=1.3.0
+pkgver=1.3.1
pkgrel=1
pkgdesc="Cross-platform QtWebKit browser"
arch=(i686 x86_64)
@@ -11,8 +11,8 @@ url="http://www.qupzilla.com/"
license=('GPL3')
depends=('qtwebkit' 'gtk-update-icon-cache')
install="$pkgname.install"
-source=("https://github.com/$_name/$pkgname/tarball/v$pkgver")
-md5sums=('c7c1a84a8838496717f67e7be268ddf9')
+source=("$pkgname-$pkgver.tar.gz::https://github.com/$_name/$pkgname/tarball/v$pkgver")
+md5sums=('7b035f028a6ff4b20310fee4b1c3264f')
build() {
cd "$srcdir/$_name-$pkgname-"*
diff --git a/community/schroot/PKGBUILD b/community/schroot/PKGBUILD
index bdb2c054b..35cc5a020 100644
--- a/community/schroot/PKGBUILD
+++ b/community/schroot/PKGBUILD
@@ -1,10 +1,10 @@
-# $Id: PKGBUILD 69192 2012-04-10 02:23:15Z spupykin $
+# $Id: PKGBUILD 74009 2012-07-18 01:08:49Z ibiru $
# Maintainer: Sergej Pupykin <pupykin.s+arch@gmail.com>
# Contributor: Andreas Wagner <Andreas dot Wagner at em dot uni-frankfurt dot de>
pkgname=schroot
-pkgver=1.4.25
-pkgrel=2
+pkgver=1.6.0
+pkgrel=1
pkgdesc="Allows users to execute shell commands under different root filesystems. (Successor to dchroot)."
url="http://packages.qa.debian.org/s/schroot.html"
license=('GPL3')
@@ -20,14 +20,14 @@ backup=('etc/schroot/schroot.conf'
'etc/schroot/arch32/mount'
'etc/schroot/arch32/nssdatabases')
options=(!libtool)
-source=("http://ftp.debian.org/debian/pool/main/s/$pkgname/${pkgname}_${pkgver}.orig.tar.bz2"
+source=("http://ftp.debian.org/debian/pool/main/s/$pkgname/${pkgname}_${pkgver}.orig.tar.xz"
'pam.d.schroot.patch'
'arch32-example'
'arch32-config'
'arch32-copyfiles'
'arch32-mount'
'arch32-nssdatabases')
-md5sums=('c9e5056becd82b6330ac4502f59260f1'
+md5sums=('9b0a12077dbb0e3e384b4c9af0dc3195'
'a8d77cac806a0a9adef3f93cdbeb280a'
'1e34db5387c4e5de911e15d8a9208bdb'
'5a3f7b839c7e0b8933748da7c5b6385b'
diff --git a/community/smc/PKGBUILD b/community/smc/PKGBUILD
index ca5620a04..e98a8c889 100644
--- a/community/smc/PKGBUILD
+++ b/community/smc/PKGBUILD
@@ -1,11 +1,11 @@
-# $Id: PKGBUILD 67212 2012-03-05 08:59:37Z ibiru $
+# $Id: PKGBUILD 74010 2012-07-18 01:09:00Z ibiru $
# Maintainer:
# Contributor: Juergen Hoetzel <juergen@archlinux.org>
# Contributor: Kritoke <typeolinux@yahoo.com>
pkgname=smc
pkgver=1.9
-pkgrel=15
+pkgrel=16
pkgdesc="Secret Maryo Chronicles"
arch=('i686' 'x86_64')
url="http://www.secretmaryo.org/"
@@ -14,10 +14,12 @@ depends=('sdl_image' 'sdl_ttf' 'sdl_mixer' 'cegui' 'boost-libs' 'smc-data')
makedepends=('autoconf' 'automake' 'boost')
source=(http://downloads.sourceforge.net/smclone/$pkgname-$pkgver.tar.bz2
smc-for-cegui-v0-7.diff
+ boost_filesystem3.diff
smc.desktop
smc.png)
md5sums=('75ab7826303c49aec25b052a8b90287f'
'51dfea21b741ad19df14e738df52f1cf'
+ '309a5a6d4b3c0b3dc5e1b7f4de84086f'
'80fe208132ff41dd7677a53ee429ecdb'
'efca7580e28748625eb676c9d24ee122')
@@ -26,8 +28,10 @@ build() {
# to remove when smc will be compatible with cegui-0.7.x
patch -Np1 -i "${srcdir}/smc-for-cegui-v0-7.diff"
- # fix for boost-1.46
- export CXXFLAGS="${CXXFLAGS} -DBOOST_FILESYSTEM_VERSION=2"
+ # fix compilation
+ export CXXFLAGS="${CXXFLAGS} -fpermissive"
+ # fix for boost >= 1.50
+ patch -Np1 -i "${srcdir}/boost_filesystem3.diff"
./autogen.sh
LIBS+="-lX11 -lboost_system" ./configure --prefix=/usr
diff --git a/community/smc/boost_filesystem3.diff b/community/smc/boost_filesystem3.diff
new file mode 100644
index 000000000..6786b98f5
--- /dev/null
+++ b/community/smc/boost_filesystem3.diff
@@ -0,0 +1,48 @@
+diff -rup smc-1.9/src/core/filesystem/filesystem.cpp smc-1.9.new/src/core/filesystem/filesystem.cpp
+--- smc-1.9/src/core/filesystem/filesystem.cpp 2009-07-04 12:11:18.000000000 +0200
++++ smc-1.9.new/src/core/filesystem/filesystem.cpp 2012-07-12 15:36:31.361941069 +0200
+@@ -142,27 +142,27 @@ vector<std::string> Get_Directory_Files(
+ if( fs::is_directory( *dir_itr ) )
+ {
+ // ignore hidden directories
+- if( dir_itr->path().leaf().find( "." ) == 0 )
++ if( dir_itr->path().filename().string().find( "." ) == 0 )
+ {
+ continue;
+ }
+
+ if( with_directories )
+ {
+- valid_files.push_back( dir + "/" + dir_itr->path().leaf() );
++ valid_files.push_back( dir + "/" + dir_itr->path().filename().string() );
+ }
+
+ // load all items from the sub-directory
+ if( search_in_sub_directories )
+ {
+- vector<std::string> new_valid_files = Get_Directory_Files( dir + "/" + dir_itr->path().leaf(), file_type, with_directories );
++ vector<std::string> new_valid_files = Get_Directory_Files( dir + "/" + dir_itr->path().filename().string(), file_type, with_directories );
+ valid_files.insert( valid_files.end(), new_valid_files.begin(), new_valid_files.end() );
+ }
+ }
+ // valid file
+- else if( file_type.empty() || dir_itr->path().leaf().rfind( file_type ) != std::string::npos )
++ else if( file_type.empty() || dir_itr->path().filename().string().rfind( file_type ) != std::string::npos )
+ {
+- valid_files.push_back( dir + "/" + dir_itr->path().leaf() );
++ valid_files.push_back( dir + "/" + dir_itr->path().filename().string() );
+ }
+ }
+ catch( const std::exception &ex )
+diff -rup smc-1.9/src/overworld/world_manager.cpp smc-1.9.new/src/overworld/world_manager.cpp
+--- smc-1.9/src/overworld/world_manager.cpp 2009-08-16 18:44:52.000000000 +0200
++++ smc-1.9.new/src/overworld/world_manager.cpp 2012-07-12 15:37:13.564660591 +0200
+@@ -118,7 +118,7 @@ void cOverworld_Manager :: Load_Dir( con
+ {
+ try
+ {
+- std::string current_dir = dir_itr->path().leaf();
++ std::string current_dir = dir_itr->path().filename().string();
+
+ // only directories with an existing description
+ if( fs::is_directory( *dir_itr ) && File_Exists( dir + "/" + current_dir + "/description.xml" ) )
diff --git a/community/spectrwm/PKGBUILD b/community/spectrwm/PKGBUILD
index 323262e45..1bf707f5a 100644
--- a/community/spectrwm/PKGBUILD
+++ b/community/spectrwm/PKGBUILD
@@ -1,9 +1,9 @@
-# $Id: PKGBUILD 73201 2012-07-03 19:38:15Z kkeen $
+# $Id: PKGBUILD 73979 2012-07-18 00:30:45Z kkeen $
# Maintainer: Kyle Keen <keenerd@gmail.com>
# Contributor: Christoph Zeiler <archNOSPAM_at_moonblade.dot.org>
pkgname=spectrwm
-pkgver=1.1.1
+pkgver=1.1.2
pkgrel=1
pkgdesc="A minimalistic automatic tiling window manager that tries to stay out of the way."
arch=('i686' 'x86_64')
@@ -18,7 +18,7 @@ backup=(etc/spectrwm.conf)
source=(http://opensource.conformal.com/snapshots/$pkgname/$pkgname-$pkgver.tgz \
LICENSE \
baraction.sh)
-md5sums=('fd97b626ea09c3ab302fc9082efe8c31'
+md5sums=('20a7c31208ab7d92665862ad25ac2517'
'a67cfe51079481e5b0eab1ad371379e3'
'950d663692e1da56e0ac864c6c3ed80e')
@@ -29,7 +29,7 @@ build() {
sed -i 's|\"/usr/local/lib/libswmhack.so\"|\"libswmhack.so\"|' spectrwm.c
sed -i 's/verbose_layout = 0;/verbose_layout = 1;/' spectrwm.c
sed -i 's/# modkey = Mod1/modkey = Mod4/' spectrwm.conf
- sed -i 's/-\*-terminus-medium-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*/-*-profont-*-*-*-*-12-*-*-*-*-*-*-*/' spectrwm.conf
+ sed -i 's/-\*-terminus-medium-\*-\*-\*-\*/-*-profont-*-*-*-*-12/' spectrwm.conf
cd linux
make PREFIX="/usr"
diff --git a/community/spring/PKGBUILD b/community/spring/PKGBUILD
index 444fb03c0..3af217fd2 100644
--- a/community/spring/PKGBUILD
+++ b/community/spring/PKGBUILD
@@ -1,11 +1,11 @@
-# $Id: PKGBUILD 68416 2012-03-24 10:22:55Z svenstaro $
+# $Id: PKGBUILD 74011 2012-07-18 01:09:05Z ibiru $
# Maintainer: Sven-Hendrik Haase <sh@lutzhaase.com>
# Contributor: Arkham <arkham at archlinux dot us>
# Contributor: Christoph Zeiler <archNOSPAM_at_moonblade.dot.org>
pkgname=spring
-pkgver=0.88.0
-_pkgver=88.0
+pkgver=0.89.0
+_pkgver=89.0
pkgrel=1
pkgdesc='A free 3D real-time-strategy (RTS) game engine'
arch=('i686' 'x86_64')
@@ -13,17 +13,21 @@ url="http://springrts.com/"
license=('GPL')
depends=('openal' 'glew' 'boost-libs' 'freetype2' 'devil' 'libvorbis' 'sdl'
'libxcursor')
-makedepends=('boost' 'cmake' 'zip' 'lzma-utils' 'p7zip' 'python2' 'java-environment')
+makedepends=('boost' 'cmake' 'zip' 'xz' 'p7zip' 'python2' 'java-environment')
optdepends=('python2: python-based bots'
'java-runtime: java-based bots')
-source=(http://downloads.sourceforge.net/sourceforge/springrts/${pkgname}_${_pkgver}_src.tar.lzma)
-
-md5sums=('151bf483f1c3b801b4cede6f02d79ea9')
+source=(http://downloads.sourceforge.net/sourceforge/springrts/${pkgname}_${_pkgver}_src.tar.lzma
+ boost-1.50.patch)
+md5sums=('36fc266e925bc3790a68bf1bc7ebb315'
+ 'a3c3b4a53eeb499090b027fd6b3cf848')
build() {
bsdtar -xf ${pkgname}_${_pkgver}_src.tar.lzma
cd spring_${_pkgver}
+
+ sed "s/TIME_UTC/TIME_UTC_/g" -i AI/Skirmish/E323AI/CScopedTimer.h
+ patch -Np1 < $srcdir/boost-1.50.patch
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr \
diff --git a/community/spring/boost-1.50.patch b/community/spring/boost-1.50.patch
new file mode 100644
index 000000000..f8a8b5695
--- /dev/null
+++ b/community/spring/boost-1.50.patch
@@ -0,0 +1,2539 @@
+diff -ru spring_89.0/rts/Game/Camera/CameraController.cpp /home/svenstaro/src/spring/rts/Game/Camera/CameraController.cpp
+--- spring_89.0/rts/Game/Camera/CameraController.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Game/Camera/CameraController.cpp 2012-07-13 06:34:43.066060493 +0200
+@@ -59,7 +59,7 @@
+ bool CCameraController::GetUseDistToGroundForIcons() {
+
+ const float3& dir = GetDir().UnsafeNormalize();
+- const float dot = std::min(1.0f, std::max(0.0f, fabs(dir.dot(UpVector))));
++ const float dot = std::min(1.0f, std::max(0.0f, math::fabs(dir.dot(UpVector))));
+
+ if (dot < switchVal) {
+ // flat angle (typical for first person camera)
+diff -ru spring_89.0/rts/Game/Camera/FPSController.cpp /home/svenstaro/src/spring/rts/Game/Camera/FPSController.cpp
+--- spring_89.0/rts/Game/Camera/FPSController.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Game/Camera/FPSController.cpp 2012-07-13 06:34:43.066060493 +0200
+@@ -80,9 +80,9 @@
+ oldHeight = pos.y - gndHeight;
+ }
+
+- dir.x = (float)(cos(camera->rot.x) * sin(camera->rot.y));
+- dir.z = (float)(cos(camera->rot.x) * cos(camera->rot.y));
+- dir.y = (float)(sin(camera->rot.x));
++ dir.x = (float)(math::cos(camera->rot.x) * math::sin(camera->rot.y));
++ dir.z = (float)(math::cos(camera->rot.x) * math::cos(camera->rot.y));
++ dir.y = (float)(math::sin(camera->rot.x));
+ dir.ANormalize();
+ }
+
+diff -ru spring_89.0/rts/Game/Camera/FreeController.cpp /home/svenstaro/src/spring/rts/Game/Camera/FreeController.cpp
+--- spring_89.0/rts/Game/Camera/FreeController.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Game/Camera/FreeController.cpp 2012-07-13 06:34:43.066060493 +0200
+@@ -51,9 +51,9 @@
+ dir = float3(0.0f, -2.0f, -1.0f);
+ dir.ANormalize();
+ if (camera) {
+- const float hDist = sqrt((dir.x * dir.x) + (dir.z * dir.z));
+- camera->rot.y = atan2(dir.x, dir.z);
+- camera->rot.x = atan2(dir.y, hDist);
++ const float hDist = math::sqrt((dir.x * dir.x) + (dir.z * dir.z));
++ camera->rot.y = math::atan2(dir.x, dir.z);
++ camera->rot.x = math::atan2(dir.y, hDist);
+ }
+ pos -= (dir * 1000.0f);
+
+@@ -84,14 +84,14 @@
+
+ // lock the view direction to the target
+ const float3 diff(trackPos - pos);
+- const float rads = atan2(diff.x, diff.z);
++ const float rads = math::atan2(diff.x, diff.z);
+ camera->rot.y = rads;
+
+ const float len2D = diff.Length2D();
+- if (fabs(len2D) <= 0.001f) {
++ if (math::fabs(len2D) <= 0.001f) {
+ camera->rot.x = 0.0f;
+ } else {
+- camera->rot.x = atan2((trackPos.y - pos.y), len2D);
++ camera->rot.x = math::atan2((trackPos.y - pos.y), len2D);
+ }
+
+ camera->UpdateForward();
+@@ -130,11 +130,11 @@
+ if (pos.y < (gndHeight + gndOffset + 1.0f)) {
+ float3 hDir;
+ hDir.y = 0.0f;
+- hDir.x = (float)sin(camera->rot.y);
+- hDir.z = (float)cos(camera->rot.y);
++ hDir.x = (float)math::sin(camera->rot.y);
++ hDir.z = (float)math::cos(camera->rot.y);
+ const float3 gndNormal = ground->GetSmoothNormal(pos.x, pos.z, false);
+ const float dot = gndNormal.dot(hDir);
+- const float gndRotX = (float)acos(dot) - (PI * 0.5f);
++ const float gndRotX = (float)math::acos(dot) - (PI * 0.5f);
+ const float rotXdiff = (gndRotX - camera->rot.x);
+ autoTiltVel = (autoTilt * rotXdiff);
+ }
+@@ -214,8 +214,8 @@
+ // convert the angular velocity into its positional change
+ const float3 diff2 = (pos - trackPos);
+ const float deltaRad = (avel.y * ft);
+- const float cos_val = cos(deltaRad);
+- const float sin_val = sin(deltaRad);
++ const float cos_val = math::cos(deltaRad);
++ const float sin_val = math::sin(deltaRad);
+ pos.x = trackPos.x + ((cos_val * diff2.x) + (sin_val * diff2.z));
+ pos.z = trackPos.z + ((cos_val * diff2.z) - (sin_val * diff2.x));
+ }
+@@ -246,7 +246,7 @@
+ if (pos.y < minHeight) {
+ pos.y = minHeight;
+ if (gndLock) {
+- vel.y = min(fabs(scrollSpeed), ((minHeight - prevPos.y) / ft));
++ vel.y = min(math::fabs(scrollSpeed), ((minHeight - prevPos.y) / ft));
+ } else {
+ vel.y = 0.0f;
+ }
+@@ -263,7 +263,7 @@
+ camera->rot.x = -xRotLimit;
+ avel.x = 0.0f;
+ }
+- camera->rot.y = fmod(camera->rot.y, PI * 2.0f);
++ camera->rot.y = math::fmod(camera->rot.y, PI * 2.0f);
+
+ // setup for the next loop
+ prevVel = vel;
+@@ -277,9 +277,9 @@
+ float3 CFreeController::GetDir() const
+ {
+ float3 dir;
+- dir.x = (float)(sin(camera->rot.y) * cos(camera->rot.x));
+- dir.z = (float)(cos(camera->rot.y) * cos(camera->rot.x));
+- dir.y = (float)(sin(camera->rot.x));
++ dir.x = (float)(math::sin(camera->rot.y) * math::cos(camera->rot.x));
++ dir.z = (float)(math::cos(camera->rot.y) * math::cos(camera->rot.x));
++ dir.y = (float)(math::sin(camera->rot.x));
+ dir.ANormalize();
+ return dir;
+ }
+@@ -373,7 +373,7 @@
+ if ((yDiff * dir.y) >= 0.0f) {
+ pos = float3(newPos.x, h, newPos.z);
+ } else {
+- pos = target - (dir * fabs(yDiff / dir.y));
++ pos = target - (dir * math::fabs(yDiff / dir.y));
+ } // FIXME
+ /*
+ const float oldPosY = pos.y;
+diff -ru spring_89.0/rts/Game/Camera/OrbitController.cpp /home/svenstaro/src/spring/rts/Game/Camera/OrbitController.cpp
+--- spring_89.0/rts/Game/Camera/OrbitController.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Game/Camera/OrbitController.cpp 2012-07-13 06:34:43.066060493 +0200
+@@ -51,8 +51,8 @@
+ const float3 w = (v / v.Length()); // do not normalize v in-place
+
+ const float d = v.Length();
+- const float e = RAD2DEG(acos(v.Length2D() / d));
+- const float r = RAD2DEG(acos(w.x));
++ const float e = RAD2DEG(math::acos(v.Length2D() / d));
++ const float r = RAD2DEG(math::acos(w.x));
+
+ distance = cDistance = d;
+ elevation = cElevation = e;
+@@ -251,12 +251,12 @@
+ float tx = cx;
+
+ tx = cx;
+- cx = cx * cos(beta) + cy * sin(beta);
+- cy = tx * sin(beta) + cy * cos(beta);
++ cx = cx * math::cos(beta) + cy * math::sin(beta);
++ cy = tx * math::sin(beta) + cy * math::cos(beta);
+
+ tx = cx;
+- cx = cx * cos(gamma) - cz * sin(gamma);
+- cz = tx * sin(gamma) + cz * cos(gamma);
++ cx = cx * math::cos(gamma) - cz * math::sin(gamma);
++ cz = tx * math::sin(gamma) + cz * math::cos(gamma);
+
+ return float3(cx, cy, cz);
+ }
+diff -ru spring_89.0/rts/Game/Camera/OverheadController.cpp /home/svenstaro/src/spring/rts/Game/Camera/OverheadController.cpp
+--- spring_89.0/rts/Game/Camera/OverheadController.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Game/Camera/OverheadController.cpp 2012-07-13 06:34:43.066060493 +0200
+@@ -52,7 +52,7 @@
+ move.x = -move.x;
+ move.y = -move.y;
+ }
+- move *= sqrt(move.z) * 200;
++ move *= math::sqrt(move.z) * 200;
+
+ pos.x += move.x * pixelSize * 2.0f * scrollSpeed;
+ pos.z -= move.y * pixelSize * 2.0f * scrollSpeed;
+diff -ru spring_89.0/rts/Game/Camera/RotOverheadController.cpp /home/svenstaro/src/spring/rts/Game/Camera/RotOverheadController.cpp
+--- spring_89.0/rts/Game/Camera/RotOverheadController.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Game/Camera/RotOverheadController.cpp 2012-07-13 06:34:43.066060493 +0200
+@@ -29,7 +29,7 @@
+
+ void CRotOverheadController::KeyMove(float3 move)
+ {
+- move *= sqrt(move.z) * 400;
++ move *= math::sqrt(move.z) * 400;
+
+ float3 flatForward = camera->forward;
+ if(camera->forward.y < -0.9f)
+@@ -68,9 +68,9 @@
+
+ void CRotOverheadController::UpdateVectors()
+ {
+- dir.x=(float)(sin(camera->rot.y) * cos(camera->rot.x));
+- dir.y=(float)(sin(camera->rot.x));
+- dir.z=(float)(cos(camera->rot.y) * cos(camera->rot.x));
++ dir.x=(float)(math::sin(camera->rot.y) * math::cos(camera->rot.x));
++ dir.y=(float)(math::sin(camera->rot.x));
++ dir.z=(float)(math::cos(camera->rot.y) * math::cos(camera->rot.x));
+ dir.ANormalize();
+
+ pos.x = Clamp(pos.x, 0.01f, gs->mapx * SQUARE_SIZE - 0.01f);
+diff -ru spring_89.0/rts/Game/Camera/SmoothController.cpp /home/svenstaro/src/spring/rts/Game/Camera/SmoothController.cpp
+--- spring_89.0/rts/Game/Camera/SmoothController.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Game/Camera/SmoothController.cpp 2012-07-13 06:34:43.066060493 +0200
+@@ -55,7 +55,7 @@
+ move.y = -move.y;
+ }
+
+- move *= sqrt(move.z) * 200.0f;
++ move *= math::sqrt(move.z) * 200.0f;
+
+ const float3 thisMove(move.x * pixelSize * 2.0f * scrollSpeed, 0.0f, -move.y * pixelSize * 2.0f * scrollSpeed);
+
+@@ -103,7 +103,7 @@
+ move.x = -move.x;
+ move.y = -move.y;
+ }
+- move *= sqrt(move.z) * 200.0f;
++ move *= math::sqrt(move.z) * 200.0f;
+
+ const float3 thisMove(move.x * pixelSize * 2.0f * scrollSpeed, 0.0f, -move.y * pixelSize * 2.0f * scrollSpeed);
+
+diff -ru spring_89.0/rts/Game/Camera/TWController.cpp /home/svenstaro/src/spring/rts/Game/Camera/TWController.cpp
+--- spring_89.0/rts/Game/Camera/TWController.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Game/Camera/TWController.cpp 2012-07-13 06:34:43.066060493 +0200
+@@ -35,7 +35,7 @@
+ flatForward.y=0;
+ flatForward.ANormalize();
+
+- move *= sqrt(move.z) * 200;
++ move *= math::sqrt(move.z) * 200;
+ pos += (camera->right * move.x + flatForward * move.y) * scrollSpeed;
+ UpdateVectors();
+ }
+@@ -79,9 +79,9 @@
+
+ camera->rot.x = Clamp(camera->rot.x, -PI * 0.4f, -0.1f);
+
+- dir.x = sin(camera->rot.y) * cos(camera->rot.x);
+- dir.y = sin(camera->rot.x);
+- dir.z = cos(camera->rot.y) * cos(camera->rot.x);
++ dir.x = math::sin(camera->rot.y) * math::cos(camera->rot.x);
++ dir.y = math::sin(camera->rot.x);
++ dir.z = math::cos(camera->rot.y) * math::cos(camera->rot.x);
+ dir.ANormalize();
+ }
+
+diff -ru spring_89.0/rts/Game/Camera.cpp /home/svenstaro/src/spring/rts/Game/Camera.cpp
+--- spring_89.0/rts/Game/Camera.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Game/Camera.cpp 2012-07-13 06:34:43.066060493 +0200
+@@ -89,7 +89,7 @@
+ up.UnsafeANormalize();
+
+ const float aspect = globalRendering->aspectRatio;
+- const float viewx = tan(aspect * halfFov);
++ const float viewx = math::tan(aspect * halfFov);
+ const float viewy = tanHalfFov;
+
+ if (globalRendering->viewSizeY <= 0) {
+@@ -218,9 +218,9 @@
+
+ void CCamera::UpdateForward()
+ {
+- forward.z = cos(rot.y) * cos(rot.x);
+- forward.x = sin(rot.y) * cos(rot.x);
+- forward.y = sin(rot.x);
++ forward.z = math::cos(rot.y) * math::cos(rot.x);
++ forward.x = math::sin(rot.y) * math::cos(rot.x);
++ forward.y = math::sin(rot.x);
+ forward.Normalize();
+ }
+
+@@ -229,7 +229,7 @@
+ {
+ fov = myfov;
+ halfFov = (fov * 0.5f) * (PI / 180.f);
+- tanHalfFov = tan(halfFov);
++ tanHalfFov = math::tan(halfFov);
+ }
+
+
+@@ -330,7 +330,7 @@
+ float3 pInt;
+
+ // prevent DIV0 when calculating line.dir
+- if (fabs(xdir.z) < 0.001f)
++ if (math::fabs(xdir.z) < 0.001f)
+ xdir.z = 0.001f;
+
+ if (ydir.y != 0.0f) {
+diff -ru spring_89.0/rts/Game/CameraHandler.cpp /home/svenstaro/src/spring/rts/Game/CameraHandler.cpp
+--- spring_89.0/rts/Game/CameraHandler.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Game/CameraHandler.cpp 2012-07-13 06:34:43.066060493 +0200
+@@ -139,7 +139,7 @@
+ cameraTimeLeft = std::max(0.0f, (cameraTimeLeft - globalRendering->lastFrameTime));
+ const float nextTime = cameraTimeLeft;
+ const float exp = cameraTimeExponent;
+- const float ratio = 1.0f - (float)pow((nextTime / currTime), exp);
++ const float ratio = 1.0f - (float)math::pow((nextTime / currTime), exp);
+
+ const float deltaFOV = wantedCamFOV - camera->GetFov();
+ const float3 deltaPos = wantedCamPos - camera->pos;
+diff -ru spring_89.0/rts/Game/GameServer.cpp /home/svenstaro/src/spring/rts/Game/GameServer.cpp
+--- spring_89.0/rts/Game/GameServer.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Game/GameServer.cpp 2012-07-13 06:34:42.936060485 +0200
+@@ -253,7 +253,7 @@
+ // Something in CGameServer::CGameServer borks the FPU control word
+ // maybe the threading, or something in CNet::InitServer() ??
+ // Set single precision floating point math.
+- streflop_init<streflop::Simple>();
++ streflop::streflop_init<streflop::Simple>();
+ #endif
+ }
+
+diff -ru spring_89.0/rts/Game/SelectedUnitsAI.cpp /home/svenstaro/src/spring/rts/Game/SelectedUnitsAI.cpp
+--- spring_89.0/rts/Game/SelectedUnitsAI.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Game/SelectedUnitsAI.cpp 2012-07-13 06:34:43.086060494 +0200
+@@ -179,7 +179,7 @@
+ const float3 sideDir = frontdir.cross(UpVector);
+
+ // calculate so that the units form in an aproximate square
+- float length = 100.0f + (sqrt((float)nbrOfSelectedUnits) * 32.0f);
++ float length = 100.0f + (math::sqrt((float)nbrOfSelectedUnits) * 32.0f);
+
+ // push back some extra params so it confer with a front move
+ c.params.push_back(pos.x + (sideDir.x * length));
+diff -ru spring_89.0/rts/Game/TraceRay.cpp /home/svenstaro/src/spring/rts/Game/TraceRay.cpp
+--- spring_89.0/rts/Game/TraceRay.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Game/TraceRay.cpp 2012-07-13 06:34:43.066060493 +0200
+@@ -75,7 +75,7 @@
+ if (closeFlatLength > length)
+ closeFlatLength = length;
+
+- if (fabs(linear - quadratic * closeFlatLength) < 0.15f) {
++ if (math::fabs(linear - quadratic * closeFlatLength) < 0.15f) {
+ // relatively flat region -> use approximation
+ dif.y -= (linear + quadratic * closeFlatLength) * closeFlatLength;
+
+diff -ru spring_89.0/rts/Game/UI/EndGameBox.cpp /home/svenstaro/src/spring/rts/Game/UI/EndGameBox.cpp
+--- spring_89.0/rts/Game/UI/EndGameBox.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Game/UI/EndGameBox.cpp 2012-07-13 06:34:43.066060493 +0200
+@@ -29,11 +29,11 @@
+
+ if (num == 0) {
+ sprintf(c, "0");
+- } else if (fabs(num) < 10 * mul) {
++ } else if (math::fabs(num) < 10 * mul) {
+ sprintf(c, "%.1f", num);
+- } else if (fabs(num) < 10000 * mul) {
++ } else if (math::fabs(num) < 10000 * mul) {
+ sprintf(c, "%.0f", num);
+- } else if (fabs(num) < 10000000 * mul) {
++ } else if (math::fabs(num) < 10000000 * mul) {
+ sprintf(c, "%.0fk", num / 1000);
+ } else {
+ sprintf(c, "%.0fM", num / 1000000);
+@@ -165,7 +165,7 @@
+ if (dispMode > 0 ) {
+ if ((mx > (box.x1 + 0.01f)) && (mx < (box.x1 + 0.12f)) &&
+ (my < (box.y1 + 0.57f)) && (my > (box.y1 + 0.571f - stats.size()*0.02f))) {
+- int sel = (int) floor(-(my - box.y1 - 0.57f) * 50);
++ int sel = (int) math::floor(-(my - box.y1 - 0.57f) * 50);
+
+ if (button == 1) {
+ stat1 = sel;
+@@ -341,7 +341,7 @@
+
+ if ((mx > box.x1 + 0.01f) && (mx < box.x1 + 0.12f) &&
+ (my < box.y1 + 0.57f) && (my > box.y1 + 0.571f - (stats.size() * 0.02f))) {
+- const int sel = (int) floor(50 * -(my - box.y1 - 0.57f));
++ const int sel = (int) math::floor(50 * -(my - box.y1 - 0.57f));
+
+ glColor4f(0.7f, 0.2f, 0.2f, guiAlpha);
+ glDisable(GL_TEXTURE_2D);
+diff -ru spring_89.0/rts/Game/UI/EndGameBox.h /home/svenstaro/src/spring/rts/Game/UI/EndGameBox.h
+--- spring_89.0/rts/Game/UI/EndGameBox.h 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Game/UI/EndGameBox.h 2012-07-13 06:34:43.066060493 +0200
+@@ -60,8 +60,8 @@
+ if (team >= 0 && static_cast<size_t>(team) >= values.size()) {
+ values.resize(team + 1);
+ }
+- if (values[team].size() > 0 && fabs(value-values[team].back()) > maxdif) {
+- maxdif = fabs(value-values[team].back());
++ if (values[team].size() > 0 && math::fabs(value-values[team].back()) > maxdif) {
++ maxdif = math::fabs(value-values[team].back());
+ }
+
+ values[team].push_back(value);
+diff -ru spring_89.0/rts/Game/UI/MouseCursor.cpp /home/svenstaro/src/spring/rts/Game/UI/MouseCursor.cpp
+--- spring_89.0/rts/Game/UI/MouseCursor.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Game/UI/MouseCursor.cpp 2012-07-13 06:34:43.066060493 +0200
+@@ -355,7 +355,7 @@
+ return;
+ }
+
+- animTime = fmod(animTime + globalRendering->lastFrameTime, animPeriod);
++ animTime = math::fmod(animTime + globalRendering->lastFrameTime, animPeriod);
+
+ if (animTime < frames[currentFrame].startTime) {
+ currentFrame = 0;
+diff -ru spring_89.0/rts/Game/UI/ResourceBar.cpp /home/svenstaro/src/spring/rts/Game/UI/ResourceBar.cpp
+--- spring_89.0/rts/Game/UI/ResourceBar.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Game/UI/ResourceBar.cpp 2012-07-13 06:34:43.066060493 +0200
+@@ -48,11 +48,11 @@
+
+ if (num == 0)
+ sprintf(c, "0");
+- if ( fabs(num) < (10 * mul)) {
++ if ( math::fabs(num) < (10 * mul)) {
+ sprintf(c, "%.1f", num);
+- } else if (fabs(num) < (10000 * mul)) {
++ } else if (math::fabs(num) < (10000 * mul)) {
+ sprintf(c, "%.0f", num);
+- } else if (fabs(num) < (10000000 * mul)) {
++ } else if (math::fabs(num) < (10000000 * mul)) {
+ sprintf(c, "%.0fk", num / 1000);
+ } else {
+ sprintf(c, "%.0fM", num / 1000000);
+@@ -180,11 +180,11 @@
+
+ smallFont->SetTextColor(1.0f, 0.3f, 0.3f, 1.0f); // Expenses
+ smallFont->glFormat(metalx + 0.044f, box.y1, labelsFontSize, FONT_DESCENDER | fontOptions, "-%s(-%s)",
+- FloatToSmallString(fabs(myTeam->prevMetalPull)).c_str(),
+- FloatToSmallString(fabs(myTeam->metalSent)).c_str());
++ FloatToSmallString(math::fabs(myTeam->prevMetalPull)).c_str(),
++ FloatToSmallString(math::fabs(myTeam->metalSent)).c_str());
+ smallFont->glFormat(energyx + 0.044f, box.y1, labelsFontSize, FONT_DESCENDER | fontOptions, "-%s(-%s)",
+- FloatToSmallString(fabs(myTeam->prevEnergyPull)).c_str(),
+- FloatToSmallString(fabs(myTeam->energySent)).c_str());
++ FloatToSmallString(math::fabs(myTeam->prevEnergyPull)).c_str(),
++ FloatToSmallString(math::fabs(myTeam->energySent)).c_str());
+
+ smallFont->SetTextColor(0.4f, 1.0f, 0.4f, 0.95f); // Income
+ smallFont->glFormat(metalx + 0.044f, box.y2 - 2*globalRendering->pixelY, labelsFontSize, FONT_ASCENDER | fontOptions, "+%s",
+diff -ru spring_89.0/rts/Game/UI/SelectionKeyHandler.cpp /home/svenstaro/src/spring/rts/Game/UI/SelectionKeyHandler.cpp
+--- spring_89.0/rts/Game/UI/SelectionKeyHandler.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Game/UI/SelectionKeyHandler.cpp 2012-07-13 06:34:43.066060493 +0200
+@@ -367,9 +367,9 @@
+ camera->rot.x=-1;
+
+ float3 wantedCamDir;
+- wantedCamDir.x=(float)(sin(camera->rot.y)*cos(camera->rot.x));
+- wantedCamDir.y=(float)(sin(camera->rot.x));
+- wantedCamDir.z=(float)(cos(camera->rot.y)*cos(camera->rot.x));
++ wantedCamDir.x=(float)(math::sin(camera->rot.y)*math::cos(camera->rot.x));
++ wantedCamDir.y=(float)(math::sin(camera->rot.x));
++ wantedCamDir.z=(float)(math::cos(camera->rot.y)*math::cos(camera->rot.x));
+ wantedCamDir.ANormalize();
+
+ camHandler->GetCurrentController().SetPos(sel->pos - wantedCamDir*800);
+diff -ru spring_89.0/rts/Game/UI/UnitTracker.cpp /home/svenstaro/src/spring/rts/Game/UI/UnitTracker.cpp
+--- spring_89.0/rts/Game/UI/UnitTracker.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Game/UI/UnitTracker.cpp 2012-07-13 06:34:43.066060493 +0200
+@@ -297,8 +297,8 @@
+ modPlanePos.y = minHeight;
+ }
+
+- trackPos += (modPlanePos - trackPos) * (1 - pow(0.95f, deltaTime));
+- trackDir += (u->frontdir - trackDir) * (1 - pow(0.90f, deltaTime));
++ trackPos += (modPlanePos - trackPos) * (1 - math::pow(0.95f, deltaTime));
++ trackDir += (u->frontdir - trackDir) * (1 - math::pow(0.90f, deltaTime));
+ trackDir.ANormalize();
+
+ camera->pos = trackPos;
+diff -ru spring_89.0/rts/lib/gml/gmlsrv.h /home/svenstaro/src/spring/rts/lib/gml/gmlsrv.h
+--- spring_89.0/rts/lib/gml/gmlsrv.h 2012-07-10 00:10:09.000000000 +0200
++++ /home/svenstaro/src/spring/rts/lib/gml/gmlsrv.h 2012-07-13 06:34:43.209393834 +0200
+@@ -361,7 +361,7 @@
+ if (gmlShareLists) {
+ ogc[thr]->WorkerThreadPost();
+ }
+- streflop_init<streflop::Simple>();
++ streflop::streflop_init<streflop::Simple>();
+ while(dorun) {
+ gmlClientSub();
+ }
+@@ -452,7 +452,7 @@
+ Threading::SetThreadName("sim");
+ Watchdog::RegisterThread(WDT_SIM, true);
+ set_threadnum(GML_SIM_THREAD_NUM);
+- streflop_init<streflop::Simple>();
++ streflop::streflop_init<streflop::Simple>();
+ while(dorun) {
+ gmlClientAuxSub();
+ }
+diff -ru spring_89.0/rts/lib/headlessStubs/sdlstub_cppbit.cpp /home/svenstaro/src/spring/rts/lib/headlessStubs/sdlstub_cppbit.cpp
+--- spring_89.0/rts/lib/headlessStubs/sdlstub_cppbit.cpp 2012-07-10 00:10:09.000000000 +0200
++++ /home/svenstaro/src/spring/rts/lib/headlessStubs/sdlstub_cppbit.cpp 2012-07-13 06:35:00.626061514 +0200
+@@ -12,10 +12,16 @@
+ extern "C" {
+ #endif
+
++#if (BOOST_VERSION >= 105000) //boost 1.50 renamed TIME_UTC to TIME_UTC_
++ #define SPRING_UTCTIME boost::TIME_UTC_
++#else
++ #define SPRING_UTCTIME boost::TIME_UTC
++#endif
++
+ int stub_sdl_getSystemMilliSeconds() {
+
+ boost::xtime t;
+- boost::xtime_get(&t, boost::TIME_UTC);
++ boost::xtime_get(&t, SPRING_UTCTIME);
+ const int milliSeconds = t.sec * 1000 + (t.nsec / 1000000);
+ return milliSeconds;
+ }
+@@ -23,7 +29,7 @@
+ void stub_sdl_sleepMilliSeconds(int milliSeconds) {
+
+ boost::xtime t;
+- boost::xtime_get(&t, boost::TIME_UTC);
++ boost::xtime_get(&t, SPRING_UTCTIME);
+ t.nsec += 1000000 * milliSeconds;
+ boost::thread::sleep(t);
+ }
+diff -ru spring_89.0/rts/lib/streflop/streflopC.cpp /home/svenstaro/src/spring/rts/lib/streflop/streflopC.cpp
+--- spring_89.0/rts/lib/streflop/streflopC.cpp 2012-07-10 00:10:10.000000000 +0200
++++ /home/svenstaro/src/spring/rts/lib/streflop/streflopC.cpp 2012-07-13 06:34:42.939393819 +0200
+@@ -9,16 +9,16 @@
+ #endif
+
+ void streflop_init_Simple() {
+- streflop_init<Simple>();
++ streflop::streflop_init<streflop::Simple>();
+ }
+
+ void streflop_init_Double() {
+- streflop_init<Double>();
++ streflop::streflop_init<streflop::Double>();
+ }
+
+ #if defined(Extended)
+ void streflop_init_Extended() {
+- streflop_init<Extended>();
++ streflop::streflop_init<streflop::Extended>();
+ }
+ #endif // defined(Extended)
+
+diff -ru spring_89.0/rts/lib/streflop/streflop_cond.h /home/svenstaro/src/spring/rts/lib/streflop/streflop_cond.h
+--- spring_89.0/rts/lib/streflop/streflop_cond.h 2012-07-10 00:10:10.000000000 +0200
++++ /home/svenstaro/src/spring/rts/lib/streflop/streflop_cond.h 2012-07-13 06:34:42.906060483 +0200
+@@ -11,8 +11,6 @@
+
+ #if defined(STREFLOP_X87) || defined(STREFLOP_SSE) || defined(STREFLOP_SOFT)
+ #include "streflop.h"
+-using namespace streflop;
+-
+ namespace math {
+ using namespace streflop;
+ }
+@@ -20,6 +18,7 @@
+ #include <cmath>
+ namespace math {
+ using std::fabs;
++ // We are using fastmath::sqrt_sse instead!
+ // using std::sqrt;
+ using std::sin;
+ using std::cos;
+diff -ru spring_89.0/rts/Map/BasicMapDamage.cpp /home/svenstaro/src/spring/rts/Map/BasicMapDamage.cpp
+--- spring_89.0/rts/Map/BasicMapDamage.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Map/BasicMapDamage.cpp 2012-07-13 06:34:43.066060493 +0200
+@@ -33,7 +33,7 @@
+
+ for (int a = 0; a <= CRATER_TABLE_SIZE; ++a) {
+ const float r = a / float(CRATER_TABLE_SIZE);
+- const float d = cos((r - 0.1f) * (PI + 0.3f)) * (1 - r) * (0.5f + 0.5f * cos(std::max(0.0f, r * 3 - 2) * PI));
++ const float d = math::cos((r - 0.1f) * (PI + 0.3f)) * (1 - r) * (0.5f + 0.5f * math::cos(std::max(0.0f, r * 3 - 2) * PI));
+ craterTable[a] = d;
+ }
+
+@@ -83,7 +83,7 @@
+ const float* curHeightMap = readmap->GetCornerHeightMapSynced();
+ const float* orgHeightMap = readmap->GetOriginalHeightMapSynced();
+ const unsigned char* typeMap = readmap->GetTypeMapSynced();
+- const float baseStrength = -pow(strength, 0.6f) * 3 / mapHardness;
++ const float baseStrength = -math::pow(strength, 0.6f) * 3 / mapHardness;
+ const float invRadius = 1.0f / radius;
+
+ for (int y = e->y1; y <= e->y2; ++y) {
+@@ -111,7 +111,7 @@
+ orgHeightMap[y * gs->mapxp1 + x];
+
+ if (prevDif * dif > 0.0f) {
+- dif /= fabs(prevDif) * 0.1f + 1;
++ dif /= math::fabs(prevDif) * 0.1f + 1;
+ }
+
+ e->squares.push_back(dif);
+@@ -148,7 +148,7 @@
+ orgHeightMap[z * gs->mapxp1 + x];
+
+ if (prevDif * dif > 0.0f) {
+- dif /= fabs(prevDif) * 0.1f + 1;
++ dif /= math::fabs(prevDif) * 0.1f + 1;
+ }
+
+ totalDif += dif;
+diff -ru spring_89.0/rts/Map/Ground.cpp /home/svenstaro/src/spring/rts/Map/Ground.cpp
+--- spring_89.0/rts/Map/Ground.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Map/Ground.cpp 2012-07-13 06:34:43.086060494 +0200
+@@ -433,8 +433,8 @@
+
+ float3 CGround::GetSmoothNormal(float x, float y, bool synced) const
+ {
+- int sx = (int) floor(x / SQUARE_SIZE);
+- int sy = (int) floor(y / SQUARE_SIZE);
++ int sx = (int) math::floor(x / SQUARE_SIZE);
++ int sy = (int) math::floor(y / SQUARE_SIZE);
+
+ if (sy < 1)
+ sy = 1;
+diff -ru spring_89.0/rts/Map/SM3/Plane.cpp /home/svenstaro/src/spring/rts/Map/SM3/Plane.cpp
+--- spring_89.0/rts/Map/SM3/Plane.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Map/SM3/Plane.cpp 2012-07-13 06:34:43.066060493 +0200
+@@ -15,7 +15,7 @@
+ a = ry1*rz2 - ry2*rz1;
+ b = rz1*rx2 - rz2*rx1;
+ c = rx1*ry2 - rx2*ry1;
+- float len = (float)sqrt(a*a + b*b + c*c);
++ float len = (float)math::sqrt(a*a + b*b + c*c);
+ a /= len;
+ b /= len;
+ c /= len;
+@@ -37,10 +37,10 @@
+ bool Plane::EpsilonCompare(const Plane& pln, float epsilon)
+ {
+ Plane t;
+- t.a = fabs(a - pln.a);
+- t.b = fabs(b - pln.b);
+- t.c = fabs(c - pln.c);
+- t.d = fabs(d - pln.d);
++ t.a = math::fabs(a - pln.a);
++ t.b = math::fabs(b - pln.b);
++ t.c = math::fabs(c - pln.c);
++ t.d = math::fabs(d - pln.d);
+ if (t.a > epsilon || t.b > epsilon || t.c > epsilon || t.d > epsilon) {
+ return false;
+ }
+diff -ru spring_89.0/rts/Map/SM3/terrain/Lightcalc.cpp /home/svenstaro/src/spring/rts/Map/SM3/terrain/Lightcalc.cpp
+--- spring_89.0/rts/Map/SM3/terrain/Lightcalc.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Map/SM3/terrain/Lightcalc.cpp 2012-07-13 06:34:43.069393827 +0200
+@@ -197,7 +197,7 @@
+ continue;
+ }
+
+- float len = sqrt(dx*dx + dy*dy);
++ float len = math::sqrt(dx*dx + dy*dy);
+ const float step = 5.0f;
+ float invLength2d = step / len;
+ dx *= invLength2d;
+diff -ru spring_89.0/rts/Map/SM3/terrain/Textures.cpp /home/svenstaro/src/spring/rts/Map/SM3/terrain/Textures.cpp
+--- spring_89.0/rts/Map/SM3/terrain/Textures.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Map/SM3/terrain/Textures.cpp 2012-07-13 06:34:43.069393827 +0200
+@@ -248,7 +248,7 @@
+ }
+
+ // flatness=dotproduct of surface normal with up vector
+- float slope = 1.0f - fabs(norm_y);
++ float slope = 1.0f - math::fabs(norm_y);
+
+ if (slope < gi->minSlope - gi->minSlopeFuzzy) {
+ bm->at(x,y) = 0.0f;
+@@ -307,7 +307,7 @@
+ Vector3 n;
+
+ if (sx*sx + sy*sy < 32*32) {
+- const int sz = (int)sqrt(static_cast<float>(32 * 32 - sx*sx - sy*sy));
++ const int sz = (int)math::sqrt(static_cast<float>(32 * 32 - sx*sx - sy*sy));
+ n = Vector3(sx, sy, sz);
+ n.ANormalize();
+ }
+diff -ru spring_89.0/rts/Map/SMF/Legacy/LegacyMeshDrawer.cpp /home/svenstaro/src/spring/rts/Map/SMF/Legacy/LegacyMeshDrawer.cpp
+--- spring_89.0/rts/Map/SMF/Legacy/LegacyMeshDrawer.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Map/SMF/Legacy/LegacyMeshDrawer.cpp 2012-07-13 06:34:43.069393827 +0200
+@@ -99,7 +99,7 @@
+ const int minz = bty * smfReadMap->bigTexSize;
+ const int maxz = minz + smfReadMap->bigTexSize;
+ const float miny = readmap->currMinHeight;
+- const float maxy = fabs(cam->pos.y);
++ const float maxy = math::fabs(cam->pos.y);
+
+ const float3 mins( 0, miny, minz);
+ const float3 maxs(smfReadMap->mapSizeX, maxy, maxz);
+diff -ru spring_89.0/rts/Map/SMF/ROAM/Patch.cpp /home/svenstaro/src/spring/rts/Map/SMF/ROAM/Patch.cpp
+--- spring_89.0/rts/Map/SMF/ROAM/Patch.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Map/SMF/ROAM/Patch.cpp 2012-07-13 06:34:43.069393827 +0200
+@@ -405,7 +405,7 @@
+
+ // Variance of this triangle is the actual height at it's hypotenuse midpoint minus the interpolated height.
+ // Use values passed on the stack instead of re-accessing the Height Field.
+- float myVariance = fabs(centerZ - ((leftZ + rightZ) / 2));
++ float myVariance = math::fabs(centerZ - ((leftZ + rightZ) / 2));
+
+ if (leftZ*rightZ<0 || leftZ*centerZ<0 || rightZ*centerZ<0)
+ myVariance = std::max(myVariance * 1.5f, 20.0f); //shore lines get more variance for higher accuracy
+diff -ru spring_89.0/rts/Map/SMF/SMFRenderState.cpp /home/svenstaro/src/spring/rts/Map/SMF/SMFRenderState.cpp
+--- spring_89.0/rts/Map/SMF/SMFRenderState.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Map/SMF/SMFRenderState.cpp 2012-07-13 06:34:43.069393827 +0200
+@@ -385,7 +385,7 @@
+ smfShaderCurrARB->SetUniformTarget(GL_VERTEX_PROGRAM_ARB);
+ smfShaderCurrARB->SetUniform4f(10, 1.0f / (gs->pwr2mapx * SQUARE_SIZE), 1.0f / (gs->pwr2mapy * SQUARE_SIZE), 0, 1);
+ smfShaderCurrARB->SetUniform4f(12, 1.0f / smfMap->bigTexSize, 1.0f / smfMap->bigTexSize, 0, 1);
+- smfShaderCurrARB->SetUniform4f(13, -floor(camera->pos.x * 0.02f), -floor(camera->pos.z * 0.02f), 0, 0);
++ smfShaderCurrARB->SetUniform4f(13, -math::floor(camera->pos.x * 0.02f), -math::floor(camera->pos.z * 0.02f), 0, 0);
+ smfShaderCurrARB->SetUniform4f(14, 0.02f, 0.02f, 0, 1);
+ smfShaderCurrARB->SetUniformTarget(GL_FRAGMENT_PROGRAM_ARB);
+ smfShaderCurrARB->SetUniform4f(10, ambientColor.x, ambientColor.y, ambientColor.z, 1);
+diff -ru spring_89.0/rts/Rendering/Env/AdvSky.cpp /home/svenstaro/src/spring/rts/Rendering/Env/AdvSky.cpp
+--- spring_89.0/rts/Rendering/Env/AdvSky.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Rendering/Env/AdvSky.cpp 2012-07-13 06:34:43.069393827 +0200
+@@ -65,8 +65,8 @@
+ memset(thicknessTransform, 0, 1024);
+ memset(covers, 0, 4 * 32 * sizeof(float));
+
+- domeheight = cos(PI / 16) * 1.01f;
+- domeWidth = sin(2 * PI / 32) * 400 * 1.7f;
++ domeheight = math::cos(PI / 16) * 1.01f;
++ domeWidth = math::sin(2 * PI / 32) * 400 * 1.7f;
+
+ UpdateSkyDir();
+ InitSun();
+@@ -383,7 +383,7 @@
+ case 0: {
+ for(int a=0; a<CLOUD_DETAIL; a++) {
+ float fade = gs->frameNum / (70.0f * (2<<(CLOUD_DETAIL-1-a)));
+- fade -= floor(fade/2)*2;
++ fade -= math::floor(fade/2)*2;
+ if(fade>1) {
+ fade = 2 - fade;
+ if(!cloudDown[a]) {
+@@ -417,11 +417,11 @@
+ int qcda=(4<<CLOUD_DETAIL)>>a;
+ int *pkernel=kernel;
+ for(int y=0; y<cs4a; ++y, pkernel+=CLOUD_SIZE/4) {
+- float ydist=fabs(1.0f+y-cs8a)/cs8a;
++ float ydist=math::fabs(1.0f+y-cs8a)/cs8a;
+ ydist=ydist*ydist*(3-2*ydist);
+ int *pkrn=pkernel;
+ for(int x=0; x<cs4a; ++x) {
+- float xdist=fabs(1.0f+x-cs8a)/cs8a;
++ float xdist=math::fabs(1.0f+x-cs8a)/cs8a;
+ xdist=xdist*xdist*(3-2*xdist);
+
+ float contrib=(1-xdist)*(1-ydist);
+@@ -533,7 +533,7 @@
+ unsigned char *tt=thicknessTransform;
+ for(int a=0;a<1024;++a){
+ float f=(1023.0f-(a+cloudDensity*1024-512))/1023.0f;
+- float alpha=pow(f*2,3);
++ float alpha=math::pow(f*2,3);
+ if(alpha>1)
+ alpha=1;
+ *at=(int) (alpha*255);
+@@ -560,11 +560,11 @@
+
+ float ymod=(sunTexCoordY-0.5f)*domeWidth*0.025f*256;
+ float fy=ymod+modCamera.z*CLOUD_SIZE*0.000025f;
+- int baseY=int(floor(fy))&CLOUD_MASK;
+- fy-=floor(fy);
++ int baseY=int(math::floor(fy))&CLOUD_MASK;
++ fy-=math::floor(fy);
+ float fx=gs->frameNum*0.00005f*CLOUD_SIZE+modCamera.x*CLOUD_SIZE*0.000025f;
+- int baseX=int(floor(fx))&CLOUD_MASK;
+- fx-=floor(fx);
++ int baseX=int(math::floor(fx))&CLOUD_MASK;
++ fx-=math::floor(fx);
+
+ float *cvs=(float *)covers[0], *cvs1=(float *)covers[1], *cvs2=(float *)covers[2], *cvs3=(float *)covers[3];
+ if(baseX!=oldCoverBaseX || baseY!=oldCoverBaseY){
+@@ -622,8 +622,8 @@
+ glBlendFunc(GL_ONE_MINUS_DST_COLOR,GL_ONE);
+ glBegin(GL_TRIANGLE_STRIP);
+ for(int x=0;x<257;++x){
+- float dx = sin(x*2*PI/256.0f);
+- float dy = cos(x*2*PI/256.0f);
++ float dx = math::sin(x*2*PI/256.0f);
++ float dy = math::cos(x*2*PI/256.0f);
+
+ glTexCoord2f(x/256.0f,0.125f);
+ glVertexf3(modSunDir*5+ldir*dx*0.0014f+udir*dy*0.0014f);
+@@ -646,7 +646,7 @@
+ mem[(y*128+x)*4+0]=255;
+ mem[(y*128+x)*4+1]=255;
+ mem[(y*128+x)*4+2]=255;
+- float dist=sqrt((float)(y-64)*(y-64)+(x-64)*(x-64));
++ float dist=math::sqrt((float)(y-64)*(y-64)+(x-64)*(x-64));
+ if(dist>60)
+ mem[(y*128+x)*4+3]=0;
+ else
+@@ -749,7 +749,7 @@
+
+ for(int a=0;a<5;++a){
+ float fade = gs->frameNum / float(30<<a);
+- fade -= floor(fade/2)*2;
++ fade -= math::floor(fade/2)*2;
+ int size = std::min(32,256>>a);
+
+ if(fade>1){
+@@ -770,7 +770,7 @@
+
+ }
+ float tSize = std::max(1,8>>a);
+- float c = pow(2.0f,a)*6/255.0f;
++ float c = math::pow(2.0f,a)*6/255.0f;
+ CVertexArray* va = GetVertexArray();
+ va->Initialize();
+ va->CheckInitSize(4*VA_SIZE_T);
+@@ -867,10 +867,10 @@
+
+ const float hdist = math::sqrt(dir.x * dir.x + dir.z * dir.z);
+ const float ang = GetRadFromXY(dir.x, dir.z) + skyAngle;
+- const float fy = asin(hdist / 400);
++ const float fy = math::asin(hdist / 400);
+
+- dir.x = hdist * cos(ang);
+- dir.z = hdist * sin(ang);
++ dir.x = hdist * math::cos(ang);
++ dir.z = hdist * math::sin(ang);
+ dir.y = (fastmath::cos(fy) - domeheight) * 400;
+
+ dir.ANormalize();
+@@ -903,7 +903,7 @@
+ const float3& dir = GetDirFromTexCoord(x / 256.0f, (255.0f - y) / 256.0f);
+
+ const float sunInt = skyLight->GetLightIntensity();
+- const float sunDist = acos(dir.dot(skyLight->GetLightDir())) * 50;
++ const float sunDist = math::acos(dir.dot(skyLight->GetLightDir())) * 50;
+ const float sunMod = sunInt * (0.3f / math::sqrt(sunDist) + 3.0f / (1 + sunDist));
+
+ const float green = std::min(1.0f, (0.55f + sunMod));
+@@ -918,7 +918,7 @@
+ void CAdvSky::UpdateTexPart(int x, int y, unsigned char (*texp)[4]) {
+ const float3& dir = GetDirFromTexCoord(x / 512.0f, (511.0f - y) / 512.0f);
+
+- const float sunDist = acos(dir.dot(skyLight->GetLightDir())) * 70;
++ const float sunDist = math::acos(dir.dot(skyLight->GetLightDir())) * 70;
+ const float sunMod = skyLight->GetLightIntensity() * 12.0f / (12 + sunDist);
+
+ const float red = std::min(skyColor.x + sunMod * sunColor.x, 1.0f);
+diff -ru spring_89.0/rts/Rendering/Env/AdvTreeDrawer.cpp /home/svenstaro/src/spring/rts/Rendering/Env/AdvTreeDrawer.cpp
+--- spring_89.0/rts/Rendering/Env/AdvTreeDrawer.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Rendering/Env/AdvTreeDrawer.cpp 2012-07-13 06:34:43.069393827 +0200
+@@ -229,7 +229,7 @@
+ std::list<FallingTree>::iterator prev = fti++;
+ fallingTrees.erase(prev);
+ } else {
+- fti->speed += (sin(fti->fallPos) * 0.04f);
++ fti->speed += (math::sin(fti->fallPos) * 0.04f);
+ ++fti;
+ }
+ }
+@@ -616,7 +616,7 @@
+ if (camera->InView(pos + float3(0.0f, MAX_TREE_HEIGHT / 2, 0.0f), MAX_TREE_HEIGHT / 2.0f)) {
+ const float ang = fti->fallPos * PI;
+
+- const float3 yvec(fti->dir.x * sin(ang), cos(ang), fti->dir.z * sin(ang));
++ const float3 yvec(fti->dir.x * math::sin(ang), math::cos(ang), fti->dir.z * math::sin(ang));
+ const float3 zvec((yvec.cross(float3(-1.0f, 0.0f, 0.0f))).ANormalize());
+ const float3 xvec(yvec.cross(zvec));
+
+@@ -957,7 +957,7 @@
+ if (camera->InView(pos + float3(0, MAX_TREE_HEIGHT / 2, 0), MAX_TREE_HEIGHT / 2)) {
+ const float ang = fti->fallPos * PI;
+
+- const float3 yvec(fti->dir.x * sin(ang), cos(ang), fti->dir.z * sin(ang));
++ const float3 yvec(fti->dir.x * math::sin(ang), math::cos(ang), fti->dir.z * math::sin(ang));
+ const float3 zvec((yvec.cross(float3(1.0f, 0.0f, 0.0f))).ANormalize());
+ const float3 xvec(zvec.cross(yvec));
+
+diff -ru spring_89.0/rts/Rendering/Env/AdvTreeGenerator.cpp /home/svenstaro/src/spring/rts/Rendering/Env/AdvTreeGenerator.cpp
+--- spring_89.0/rts/Rendering/Env/AdvTreeGenerator.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Rendering/Env/AdvTreeGenerator.cpp 2012-07-13 06:34:43.069393827 +0200
+@@ -159,9 +159,9 @@
+ int numIter=(int)max(3.0f,size*10);
+ for(int a=0;a<=numIter;a++){
+ float angle=a/(float)numIter*2*PI;
+- float col=0.4f+(((orto1*sin(angle)+orto2*cos(angle)).dot(flatSun)))*0.3f;
+- barkva->AddVertexTN(start+orto1*sin(angle)*size+orto2*cos(angle)*size,angle/PI*0.125f*0.5f,0,float3(0,0,col));
+- barkva->AddVertexTN(end+orto1*sin(angle)*size*0.2f+orto2*cos(angle)*size*0.2f,angle/PI*0.125f*0.5f,3,float3(0,0,col));
++ float col=0.4f+(((orto1*math::sin(angle)+orto2*math::cos(angle)).dot(flatSun)))*0.3f;
++ barkva->AddVertexTN(start+orto1*math::sin(angle)*size+orto2*math::cos(angle)*size,angle/PI*0.125f*0.5f,0,float3(0,0,col));
++ barkva->AddVertexTN(end+orto1*math::sin(angle)*size*0.2f+orto2*math::cos(angle)*size*0.2f,angle/PI*0.125f*0.5f,3,float3(0,0,col));
+ }
+ barkva->EndStrip();
+ }
+@@ -176,18 +176,18 @@
+
+ for (int a = 0; a < numBranch; ++a) {
+ const float angle = baseAngle + (a * 3.88f) + fRand(0.5f);
+- float3 dir = orto1 * sin(angle) + orto2 * cos(angle);
++ float3 dir = orto1 * math::sin(angle) + orto2 * math::cos(angle);
+ dir.y = 0.3f + fRand(0.4f);
+ dir.ANormalize();
+ const float3 start(0, (a + 5) * height / (numBranch + 5), 0);
+- const float length = (height * (0.4f + fRand(0.1f))) * sqrt(float(numBranch - a) / numBranch);
++ const float length = (height * (0.4f + fRand(0.1f))) * math::sqrt(float(numBranch - a) / numBranch);
+
+ TrunkIterator(start, dir, length, length * 0.05f, 1);
+ }
+
+ for (int a = 0; a < 3; ++a) {
+ const float angle = (a * 3.88f) + fRand(0.5f);
+- float3 dir = orto1*sin(angle)+orto2*cos(angle);
++ float3 dir = orto1*math::sin(angle)+orto2*math::cos(angle);
+ dir.y = 0.8f;
+ dir.ANormalize();
+ const float3 start(0, height - 0.3f, 0);
+@@ -225,7 +225,7 @@
+ const float newLength = length * (float(numTrunks - a) / (numTrunks + 1));
+
+ float3 newbase = start + dir * length * (float(a + 1) / (numTrunks + 1));
+- float3 newDir = dir + orto1 * cos(angle) * dirDif + orto2 * sin(angle) * dirDif;
++ float3 newDir = dir + orto1 * math::cos(angle) * dirDif + orto2 * math::sin(angle) * dirDif;
+ newDir.ANormalize();
+
+ TrunkIterator(newbase, newDir, newLength, newLength * 0.05f, depth - 1);
+@@ -245,8 +245,8 @@
+
+ float3 pos = start + dir * length * (0.7f + fRand(0.3f));
+ pos +=
+- (orto1 * sin(angle) + orto2 * cos(angle)) *
+- (sqrt((float) a + 1) * 0.6f + fRand(0.4f)) *
++ (orto1 * math::sin(angle) + orto2 * math::cos(angle)) *
++ (math::sqrt((float) a + 1) * 0.6f + fRand(0.4f)) *
+ 0.1f * MAX_TREE_HEIGHT;
+
+ if (pos.y < 0.2f * MAX_TREE_HEIGHT)
+@@ -538,12 +538,12 @@
+ float baseAngle=fRand(2*PI);
+ for(int a=0;a<numBranch;++a){
+ float sh = 0.2f + fRand(0.2f);
+- float h = height * pow(sh + float(a)/numBranch * (1-sh), (float)0.7f);
++ float h = height * math::pow(sh + float(a)/numBranch * (1-sh), (float)0.7f);
+ float angle = baseAngle + (a * 0.618f + fRand(0.1f)) * 2 * PI;
+- float3 dir(orto1 * sin(angle) + orto2 * cos(angle));
++ float3 dir(orto1 * math::sin(angle) + orto2 * math::cos(angle));
+ dir.y = (a - numBranch) * 0.01f - (0.2f + fRand(0.2f));
+ dir.ANormalize();
+- float size = sqrt((float)numBranch - a + 5) * 0.08f * MAX_TREE_HEIGHT;
++ float size = math::sqrt((float)numBranch - a + 5) * 0.08f * MAX_TREE_HEIGHT;
+ DrawPineBranch(float3(0,h,0),dir,size);
+ }
+ //create the top
+@@ -569,16 +569,16 @@
+ for(int a=0;a<numIter;a++){
+ float angle=a/(float)numIter*2*PI;
+ float angle2=(a+1)/(float)numIter*2*PI;
+- float col=0.45f+(((orto1*sin(angle)+orto2*cos(angle)).dot(flatSun)))*0.3f;
+- float col2=0.45f+(((orto1*sin(angle2)+orto2*cos(angle2)).dot(flatSun)))*0.3f;
++ float col=0.45f+(((orto1*math::sin(angle)+orto2*math::cos(angle)).dot(flatSun)))*0.3f;
++ float col2=0.45f+(((orto1*math::sin(angle2)+orto2*math::cos(angle2)).dot(flatSun)))*0.3f;
+
+- va->AddVertexTN(start+orto1*sin(angle)*size+orto2*cos(angle)*size, angle/PI*0.125f*0.5f+0.5f, 0, float3(0,0,col));
+- va->AddVertexTN(end+orto1*sin(angle)*size*0.1f+orto2*cos(angle)*size*0.1f, angle/PI*0.125f*0.5f+0.5f, 3, float3(0,0,col));
+- va->AddVertexTN(start+orto1*sin(angle2)*size+orto2*cos(angle2)*size, angle2/PI*0.125f*0.5f+0.5f, 0, float3(0,0,col2));
+-
+- va->AddVertexTN(start+orto1*sin(angle2)*size+orto2*cos(angle2)*size, angle2/PI*0.125f*0.5f+0.5f, 0, float3(0,0,col2));
+- va->AddVertexTN(end+orto1*sin(angle)*size*0.1f+orto2*cos(angle)*size*0.1f, angle/PI*0.125f*0.5f+0.5f, 3, float3(0,0,col));
+- va->AddVertexTN(end+orto1*sin(angle2)*size*0.1f+orto2*cos(angle2)*size*0.1f, angle2/PI*0.125f*0.5f+0.5f, 3, float3(0,0,col2));
++ va->AddVertexTN(start+orto1*math::sin(angle)*size+orto2*math::cos(angle)*size, angle/PI*0.125f*0.5f+0.5f, 0, float3(0,0,col));
++ va->AddVertexTN(end+orto1*math::sin(angle)*size*0.1f+orto2*math::cos(angle)*size*0.1f, angle/PI*0.125f*0.5f+0.5f, 3, float3(0,0,col));
++ va->AddVertexTN(start+orto1*math::sin(angle2)*size+orto2*math::cos(angle2)*size, angle2/PI*0.125f*0.5f+0.5f, 0, float3(0,0,col2));
++
++ va->AddVertexTN(start+orto1*math::sin(angle2)*size+orto2*math::cos(angle2)*size, angle2/PI*0.125f*0.5f+0.5f, 0, float3(0,0,col2));
++ va->AddVertexTN(end+orto1*math::sin(angle)*size*0.1f+orto2*math::cos(angle)*size*0.1f, angle/PI*0.125f*0.5f+0.5f, 3, float3(0,0,col));
++ va->AddVertexTN(end+orto1*math::sin(angle2)*size*0.1f+orto2*math::cos(angle2)*size*0.1f, angle2/PI*0.125f*0.5f+0.5f, 3, float3(0,0,col2));
+ }
+ }
+
+diff -ru spring_89.0/rts/Rendering/Env/AdvWater.cpp /home/svenstaro/src/spring/rts/Rendering/Env/AdvWater.cpp
+--- spring_89.0/rts/Rendering/Env/AdvWater.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Rendering/Env/AdvWater.cpp 2012-07-13 06:34:43.069393827 +0200
+@@ -48,7 +48,7 @@
+ for (int y = 0; y < 64; ++y) {
+ for (int x = 0; x < 64; ++x) {
+ scrap[(y*64 + x)*4 + 0] = 128;
+- scrap[(y*64 + x)*4 + 1] = (unsigned char)(sin(y*PI*2.0f/64.0f)*128 + 128);
++ scrap[(y*64 + x)*4 + 1] = (unsigned char)(math::sin(y*PI*2.0f/64.0f)*128 + 128);
+ scrap[(y*64 + x)*4 + 2] = 0;
+ scrap[(y*64 + x)*4 + 3] = 255;
+ }
+@@ -62,8 +62,8 @@
+ for (int x = 0; x < 64; ++x) {
+ const float ang = 26.5f*PI/180.0f;
+ const float pos = y*2+x;
+- scrap[(y*64 + x)*4 + 0] = (unsigned char)((sin(pos*PI*2.0f/64.0f))*128*sin(ang)) + 128;
+- scrap[(y*64 + x)*4 + 1] = (unsigned char)((sin(pos*PI*2.0f/64.0f))*128*cos(ang)) + 128;
++ scrap[(y*64 + x)*4 + 0] = (unsigned char)((math::sin(pos*PI*2.0f/64.0f))*128*math::sin(ang)) + 128;
++ scrap[(y*64 + x)*4 + 1] = (unsigned char)((math::sin(pos*PI*2.0f/64.0f))*128*math::cos(ang)) + 128;
+ }
+ }
+ glBindTexture(GL_TEXTURE_2D, rawBumpTexture[1]);
+@@ -75,8 +75,8 @@
+ for (int x = 0; x < 64; ++x) {
+ const float ang = -19*PI/180.0f;
+ const float pos = 3*y - x;
+- scrap[(y*64 + x)*4 + 0] = (unsigned char)((sin(pos*PI*2.0f/64.0f))*128*sin(ang)) + 128;
+- scrap[(y*64 + x)*4 + 1] = (unsigned char)((sin(pos*PI*2.0f/64.0f))*128*cos(ang)) + 128;
++ scrap[(y*64 + x)*4 + 0] = (unsigned char)((math::sin(pos*PI*2.0f/64.0f))*128*math::sin(ang)) + 128;
++ scrap[(y*64 + x)*4 + 1] = (unsigned char)((math::sin(pos*PI*2.0f/64.0f))*128*math::cos(ang)) + 128;
+ }
+ }
+ glBindTexture(GL_TEXTURE_2D, rawBumpTexture[2]);
+@@ -192,14 +192,14 @@
+ dir = xbase + dv;
+ dir.ANormalize();
+ zpos = camera->pos + dir*(camera->pos.y / -dir.y);
+- zpos.y = sin(zpos.z*0.1f + gs->frameNum*0.06f)*0.06f + 0.05f;
++ zpos.y = math::sin(zpos.z*0.1f + gs->frameNum*0.06f)*0.06f + 0.05f;
+ col[3] = (unsigned char)((0.8f + 0.7f*dir.y)*255);
+ va->AddVertexQTC(zpos, x*(1.0f/numDivs), screenY - yInc, col);
+
+ dir = xbase;
+ dir.ANormalize();
+ zpos = camera->pos + dir*(camera->pos.y / -dir.y);
+- zpos.y = sin(zpos.z*0.1f + gs->frameNum*0.06f)*0.06f + 0.05f;
++ zpos.y = math::sin(zpos.z*0.1f + gs->frameNum*0.06f)*0.06f + 0.05f;
+ col[3] = (unsigned char)((0.8f + 0.7f*dir.y)*255);
+ va->AddVertexQTC(zpos, x*(1.0f/numDivs), screenY, col);
+
+diff -ru spring_89.0/rts/Rendering/Env/BasicSky.cpp /home/svenstaro/src/spring/rts/Rendering/Env/BasicSky.cpp
+--- spring_89.0/rts/Rendering/Env/BasicSky.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Rendering/Env/BasicSky.cpp 2012-07-13 06:34:43.069393827 +0200
+@@ -67,8 +67,8 @@
+ rawClouds=newmat2<int>(CLOUD_SIZE,CLOUD_SIZE);
+ blendMatrix=newmat3<int>(CLOUD_DETAIL,32,32);
+
+- domeheight=cos(PI/16)*1.01f;
+- domeWidth=sin(PI/16)*400*1.7f;
++ domeheight=math::cos(PI/16)*1.01f;
++ domeWidth=math::sin(PI/16)*400*1.7f;
+
+ UpdateSkyDir();
+ InitSun();
+@@ -369,7 +369,7 @@
+ case 0: {
+ for(int a=0; a<CLOUD_DETAIL; a++) {
+ float fade = gs->frameNum / (70.0f * (2<<(CLOUD_DETAIL-1-a)));
+- fade -= floor(fade/2)*2;
++ fade -= math::floor(fade/2)*2;
+ if(fade>1) {
+ fade = 2 - fade;
+ if(!cloudDown[a]) {
+@@ -403,11 +403,11 @@
+ int qcda=(4<<CLOUD_DETAIL)>>a;
+ int *pkernel=kernel;
+ for(int y=0; y<cs4a; ++y, pkernel+=CLOUD_SIZE/4) {
+- float ydist=fabs(1.0f+y-cs8a)/cs8a;
++ float ydist=math::fabs(1.0f+y-cs8a)/cs8a;
+ ydist=ydist*ydist*(3-2*ydist);
+ int *pkrn=pkernel;
+ for(int x=0; x<cs4a; ++x) {
+- float xdist=fabs(1.0f+x-cs8a)/cs8a;
++ float xdist=math::fabs(1.0f+x-cs8a)/cs8a;
+ xdist=xdist*xdist*(3-2*xdist);
+
+ float contrib=(1-xdist)*(1-ydist);
+@@ -506,7 +506,7 @@
+ unsigned char *tt=thicknessTransform;
+ for(int a=0;a<1024;++a){
+ float f=(1023.0f-(a+cloudDensity*1024-512))/1023.0f;
+- float alpha=pow(f*2,3);
++ float alpha=math::pow(f*2,3);
+ if(alpha>1)
+ alpha=1;
+ *at=(unsigned char)(alpha*255);
+@@ -533,11 +533,11 @@
+
+ float ymod=(sunTexCoordY-0.5f)*domeWidth*0.025f*256;
+ float fy=ymod+modCamera.z*CLOUD_SIZE*0.000025f;
+- int baseY=int(floor(fy))&CLOUD_MASK;
+- fy-=floor(fy);
++ int baseY=int(math::floor(fy))&CLOUD_MASK;
++ fy-=math::floor(fy);
+ float fx=gs->frameNum*0.00005f*CLOUD_SIZE+modCamera.x*CLOUD_SIZE*0.000025f;
+- int baseX=int(floor(fx))&CLOUD_MASK;
+- fx-=floor(fx);
++ int baseX=int(math::floor(fx))&CLOUD_MASK;
++ fx-=math::floor(fx);
+
+ float *cvs=(float *)covers[0], *cvs1=(float *)covers[1], *cvs2=(float *)covers[2], *cvs3=(float *)covers[3];
+ if(baseX!=oldCoverBaseX || baseY!=oldCoverBaseY){
+@@ -589,8 +589,8 @@
+ glBlendFunc(GL_ONE_MINUS_DST_COLOR,GL_ONE);
+ glBegin(GL_TRIANGLE_STRIP);
+ for(int x=0;x<257;++x){
+- float dx=sin(x*2*PI/256.0f);
+- float dy=cos(x*2*PI/256.0f);
++ float dx=math::sin(x*2*PI/256.0f);
++ float dy=math::cos(x*2*PI/256.0f);
+
+ glTexCoord2f(x/256.0f,0.25f);
+ glVertexf3(modSunDir*5+ldir*dx*0.0014f+udir*dy*0.0014f);
+@@ -613,7 +613,7 @@
+ mem[(y*128+x)*4+0]=255;
+ mem[(y*128+x)*4+1]=255;
+ mem[(y*128+x)*4+2]=255;
+- float dist=sqrt((float)(y-64)*(y-64)+(x-64)*(x-64));
++ float dist=math::sqrt((float)(y-64)*(y-64)+(x-64)*(x-64));
+ if(dist>60)
+ mem[(y*128+x)*4+3]=0;
+ else
+@@ -764,10 +764,10 @@
+
+ const float hdist = math::sqrt(dir.x * dir.x + dir.z * dir.z);
+ const float ang = GetRadFromXY(dir.x, dir.z) + skyAngle;
+- const float fy = asin(hdist / 400);
++ const float fy = math::asin(hdist / 400);
+
+- dir.x = hdist * cos(ang);
+- dir.z = hdist * sin(ang);
++ dir.x = hdist * math::cos(ang);
++ dir.z = hdist * math::sin(ang);
+ dir.y = (fastmath::cos(fy) - domeheight) * 400;
+
+ dir.ANormalize();
+@@ -800,7 +800,7 @@
+ const float3& dir = GetDirFromTexCoord(x / 256.0f, (255.0f - y) / 256.0f);
+
+ const float sunInt = skyLight->GetLightIntensity();
+- const float sunDist = acos(dir.dot(skyLight->GetLightDir())) * 50;
++ const float sunDist = math::acos(dir.dot(skyLight->GetLightDir())) * 50;
+ const float sunMod = sunInt * (0.3f / math::sqrt(sunDist) + 2.0f / sunDist);
+
+ const float green = std::min(1.0f, (0.55f + sunMod));
+@@ -814,7 +814,7 @@
+ void CBasicSky::UpdateTexPart(int x, int y, unsigned char (*texp)[4]) {
+ const float3& dir = GetDirFromTexCoord(x / 512.0f, (511.0f - y) / 512.0f);
+
+- const float sunDist = acos(dir.dot(skyLight->GetLightDir())) * 70;
++ const float sunDist = math::acos(dir.dot(skyLight->GetLightDir())) * 70;
+ const float sunMod = skyLight->GetLightIntensity() * 12.0f / (12 + sunDist);
+
+ const float red = std::min(skyColor.x + sunMod * sunColor.x, 1.0f);
+diff -ru spring_89.0/rts/Rendering/Env/CubeMapHandler.cpp /home/svenstaro/src/spring/rts/Rendering/Env/CubeMapHandler.cpp
+--- spring_89.0/rts/Rendering/Env/CubeMapHandler.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Rendering/Env/CubeMapHandler.cpp 2012-07-13 06:34:43.069393827 +0200
+@@ -269,7 +269,7 @@
+ for (int x = 0; x < size; ++x) {
+ const float3 dir = (cdir + (xdif * (x + 0.5f)) / size + (ydif * (y + 0.5f)) / size).Normalize();
+ const float dot = std::max(0.0f, dir.dot(sky->GetLight()->GetLightDir()));
+- const float spec = std::min(1.0f, pow(dot, mapInfo->light.specularExponent) + pow(dot, 3.0f) * 0.25f);
++ const float spec = std::min(1.0f, math::pow(dot, mapInfo->light.specularExponent) + math::pow(dot, 3.0f) * 0.25f);
+
+ buf[x * 4 + 0] = (mapInfo->light.unitSpecularColor.x * spec * 255);
+ buf[x * 4 + 1] = (mapInfo->light.unitSpecularColor.y * spec * 255);
+diff -ru spring_89.0/rts/Rendering/Env/DynWater.cpp /home/svenstaro/src/spring/rts/Rendering/Env/DynWater.cpp
+--- spring_89.0/rts/Rendering/Env/DynWater.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Rendering/Env/DynWater.cpp 2012-07-13 06:34:43.069393827 +0200
+@@ -88,9 +88,9 @@
+
+ for (int y = 0; y < 64; ++y) {
+ for (int x = 0; x < 64; ++x) {
+- temp[(y*64 + x)*4 + 0] = sin(x*PI*2.0f/64.0f) + ((x < 32) ? -1 : 1)*0.3f;
++ temp[(y*64 + x)*4 + 0] = math::sin(x*PI*2.0f/64.0f) + ((x < 32) ? -1 : 1)*0.3f;
+ temp[(y*64 + x)*4 + 1] = temp[(y*64 + x)*4 + 0];
+- temp[(y*64 + x)*4 + 2] = cos(x*PI*2.0f/64.0f) + ((x < 32) ? (16 - x) : (x - 48))/16.0f*0.3f;
++ temp[(y*64 + x)*4 + 2] = math::cos(x*PI*2.0f/64.0f) + ((x < 32) ? (16 - x) : (x - 48))/16.0f*0.3f;
+ temp[(y*64 + x)*4 + 3] = 0;
+ }
+ }
+@@ -197,7 +197,7 @@
+ const float dy = y - 31.5f;
+ for (int x = 0; x < 64; ++x) {
+ const float dx = x-31.5f;
+- const float dist = sqrt(dx*dx + dy*dy);
++ const float dist = math::sqrt(dx*dx + dy*dy);
+ temp[(y*64 + x)*4 + 0] = std::max(0.0f, 1 - dist/30.f) * std::max(0.0f, 1 - dist/30.f);
+ temp[(y*64 + x)*4 + 1] = std::max(0.0f, 1 - dist/30.f);
+ temp[(y*64 + x)*4 + 2] = std::max(0.0f, 1 - dist/30.f) * std::max(0.0f, 1 - dist/30.f);
+@@ -425,8 +425,8 @@
+
+ oldCamPosBig = camPosBig;
+
+- camPosBig.x = floor(std::max((float)WH_SIZE, std::min((float)gs->mapx*SQUARE_SIZE-WH_SIZE, (float)camera->pos.x))/(W_SIZE*16))*(W_SIZE*16);
+- camPosBig.z = floor(std::max((float)WH_SIZE, std::min((float)gs->mapy*SQUARE_SIZE-WH_SIZE, (float)camera->pos.z))/(W_SIZE*16))*(W_SIZE*16);
++ camPosBig.x = math::floor(std::max((float)WH_SIZE, std::min((float)gs->mapx*SQUARE_SIZE-WH_SIZE, (float)camera->pos.x))/(W_SIZE*16))*(W_SIZE*16);
++ camPosBig.z = math::floor(std::max((float)WH_SIZE, std::min((float)gs->mapy*SQUARE_SIZE-WH_SIZE, (float)camera->pos.z))/(W_SIZE*16))*(W_SIZE*16);
+
+ glDisable(GL_DEPTH_TEST);
+ glDepthMask(0);
+@@ -835,8 +835,8 @@
+ va = GetVertexArray();
+ va->Initialize();
+
+- camPosBig2.x = floor(std::max((float)WH_SIZE, std::min((float)gs->mapx*SQUARE_SIZE - WH_SIZE, (float)camera->pos.x))/(W_SIZE*16))*(W_SIZE*16);
+- camPosBig2.z = floor(std::max((float)WH_SIZE, std::min((float)gs->mapy*SQUARE_SIZE - WH_SIZE, (float)camera->pos.z))/(W_SIZE*16))*(W_SIZE*16);
++ camPosBig2.x = math::floor(std::max((float)WH_SIZE, std::min((float)gs->mapx*SQUARE_SIZE - WH_SIZE, (float)camera->pos.x))/(W_SIZE*16))*(W_SIZE*16);
++ camPosBig2.z = math::floor(std::max((float)WH_SIZE, std::min((float)gs->mapy*SQUARE_SIZE - WH_SIZE, (float)camera->pos.z))/(W_SIZE*16))*(W_SIZE*16);
+
+ // FIXME:
+ // 1. DynWater::UpdateCamRestraints was never called ==> <this->left> and <this->right> were always empty
+@@ -1132,8 +1132,8 @@
+ // hovercraft
+ const float3& pos = unit->pos;
+
+- if ((fabs(pos.x - camPosBig.x) > (WH_SIZE - 50)) ||
+- (fabs(pos.z - camPosBig.z) > (WH_SIZE - 50)))
++ if ((math::fabs(pos.x - camPosBig.x) > (WH_SIZE - 50)) ||
++ (math::fabs(pos.z - camPosBig.z) > (WH_SIZE - 50)))
+ {
+ continue;
+ }
+@@ -1144,7 +1144,7 @@
+ if ((pos.y > -4.0f) && (pos.y < 4.0f)) {
+ const float3 frontAdd = unit->frontdir * unit->radius * 0.75f;
+ const float3 sideAdd = unit->rightdir * unit->radius * 0.75f;
+- const float depth = sqrt(sqrt(unit->mass)) * 0.4f;
++ const float depth = math::sqrt(math::sqrt(unit->mass)) * 0.4f;
+ const float3 n(depth, 0.05f * depth, depth);
+
+ va2->AddVertexQTN(pos + frontAdd + sideAdd, 0, 0, n);
+@@ -1156,8 +1156,8 @@
+ // surface ship
+ const float3& pos = unit->pos;
+
+- if ((fabs(pos.x - camPosBig.x) > (WH_SIZE - 50)) ||
+- (fabs(pos.z - camPosBig.z) > (WH_SIZE - 50)))
++ if ((math::fabs(pos.x - camPosBig.x) > (WH_SIZE - 50)) ||
++ (math::fabs(pos.z - camPosBig.z) > (WH_SIZE - 50)))
+ {
+ continue;
+ }
+@@ -1171,7 +1171,7 @@
+
+ const float3 frontAdd = unit->frontdir * unit->radius * 0.75f;
+ const float3 sideAdd = unit->rightdir * unit->radius * 0.18f;
+- const float depth = sqrt(sqrt(unit->mass));
++ const float depth = math::sqrt(math::sqrt(unit->mass));
+ const float3 n(depth, 0.04f * unit->speed.Length2D() * depth, depth);
+
+ va->AddVertexQTN(pos + frontAdd + sideAdd, 0, 0, n);
+@@ -1249,8 +1249,8 @@
+ for (std::vector<Explosion>::iterator ei = explosions.begin(); ei != explosions.end(); ++ei) {
+ Explosion& explo = *ei;
+ float3 pos = explo.pos;
+- if ((fabs(pos.x - camPosBig.x) > (WH_SIZE - 50))
+- || (fabs(pos.z - camPosBig.z) > (WH_SIZE - 50)))
++ if ((math::fabs(pos.x - camPosBig.x) > (WH_SIZE - 50))
++ || (math::fabs(pos.z - camPosBig.z) > (WH_SIZE - 50)))
+ {
+ continue;
+ }
+diff -ru spring_89.0/rts/Rendering/Env/GrassDrawer.cpp /home/svenstaro/src/spring/rts/Rendering/Env/GrassDrawer.cpp
+--- spring_89.0/rts/Rendering/Env/GrassDrawer.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Rendering/Env/GrassDrawer.cpp 2012-07-13 06:34:43.069393827 +0200
+@@ -75,11 +75,11 @@
+ }
+
+ // TODO: get rid of the magic constants
+- maxGrassDist = 800 + sqrt((float) detail) * 240;
++ maxGrassDist = 800 + math::sqrt((float) detail) * 240;
+ maxDetailedDist = 146 + detail * 24;
+ detailedBlocks = int((maxDetailedDist - 24) / bMSsq) + 1;
+ numTurfs = 3 + int(detail * 0.5f);
+- strawPerTurf = 50 + int(sqrt((float) detail) * 10);
++ strawPerTurf = 50 + int(math::sqrt((float) detail) * 10);
+
+ blocksX = gs->mapx / grassSquareSize /grassBlockSize;
+ blocksY = gs->mapy / grassSquareSize / grassBlockSize;
+@@ -641,7 +641,7 @@
+ const float3 billboardDirX = (billboardDirZ.cross(UpVector)).ANormalize();
+ const float3 billboardDirY = billboardDirX.cross(billboardDirZ);
+
+- const float ang = acos(billboardDirZ.y);
++ const float ang = math::acos(billboardDirZ.y);
+ const int texPart = std::min(15, int(std::max(0, int((ang + PI / 16 - PI / 2) / PI * 30))));
+
+ if (globalRendering->haveGLSL) {
+@@ -673,7 +673,7 @@
+ const float3 billboardDirX = (billboardDirZ.cross(UpVector)).ANormalize();
+ const float3 billboardDirY = billboardDirX.cross(billboardDirZ);
+
+- const float ang = acos(billboardDirZ.y);
++ const float ang = math::acos(billboardDirZ.y);
+ const int texPart = std::min(15, int(std::max(0, int((ang + PI / 16 - PI / 2) / PI * 30))));
+
+ if (globalRendering->haveGLSL) {
+@@ -820,7 +820,7 @@
+ float3 forwardVect = sideVect.cross(UpVector);
+ sideVect *= mapInfo->grass.bladeWidth;
+
+- const float3 cornerPos = (UpVector * cos(maxAng) + forwardVect * sin(maxAng)) * length;
++ const float3 cornerPos = (UpVector * math::cos(maxAng) + forwardVect * math::sin(maxAng)) * length;
+ float3 basePos(30.0f, 0.0f, 30.0f);
+
+ while (basePos.SqLength2D() > (turfSize * turfSize / 4)) {
+@@ -837,10 +837,10 @@
+
+ const float3 edgePosL =
+ -sideVect * (1 - h) +
+- (UpVector * cos(ang) + forwardVect * sin(ang)) * length * h;
++ (UpVector * math::cos(ang) + forwardVect * math::sin(ang)) * length * h;
+ const float3 edgePosR =
+ sideVect * (1.0f - h) +
+- (UpVector * cos(ang) + forwardVect * sin(ang)) * length * h;
++ (UpVector * math::cos(ang) + forwardVect * math::sin(ang)) * length * h;
+
+ if (b == 0) {
+ va->AddVertexT(basePos + (edgePosR - float3(0.0f, 0.1f, 0.0f)), xtexBase + xtexOffset, h);
+diff -ru spring_89.0/rts/Rendering/Env/SkyLight.cpp /home/svenstaro/src/spring/rts/Rendering/Env/SkyLight.cpp
+--- spring_89.0/rts/Rendering/Env/SkyLight.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Rendering/Env/SkyLight.cpp 2012-07-13 06:34:43.069393827 +0200
+@@ -72,7 +72,7 @@
+ bool DynamicSkyLight::SetLightDir(const float4& newLightDir) {
+ if (newLightDir != lightDir) {
+ static float4 lastUpdate = ZeroVector;
+- static const float minCosAngle = cos(1.5f * (PI/180.f));
++ static const float minCosAngle = math::cos(1.5f * (PI/180.f));
+
+ if (lastUpdate.dot(newLightDir) < minCosAngle) {
+ lastUpdate = newLightDir;
+@@ -92,7 +92,7 @@
+ const float angularVelocity = 2.0f * PI / sunOrbitTime;
+
+ const float sunAng = startAngle - initialSunAngle - angularVelocity * gameSeconds;
+- const float4 sunPos = sunRotation.Mul(float3(sunOrbitRad * cos(sunAng), sunOrbitHeight, sunOrbitRad * sin(sunAng)));
++ const float4 sunPos = sunRotation.Mul(float3(sunOrbitRad * math::cos(sunAng), sunOrbitHeight, sunOrbitRad * math::sin(sunAng)));
+
+ return sunPos;
+ }
+@@ -108,18 +108,18 @@
+ if (newLightDir.w == FLT_MAX) {
+ // old: newLightDir is position where sun reaches highest altitude
+ const float sunLen = newLightDir.Length2D();
+- const float sunAzimuth = (sunLen <= 0.001f) ? PI / 2.0f : atan(newLightDir.y / sunLen);
+- const float sunHeight = tan(sunAzimuth - 0.001f);
++ const float sunAzimuth = (sunLen <= 0.001f) ? PI / 2.0f : math::atan(newLightDir.y / sunLen);
++ const float sunHeight = math::tan(sunAzimuth - 0.001f);
+
+- float3 v1(cos(initialSunAngle), sunHeight, sin(initialSunAngle));
++ float3 v1(math::cos(initialSunAngle), sunHeight, math::sin(initialSunAngle));
+ v1.ANormalize();
+
+ if (v1.y <= orbitMinSunHeight) {
+ newLightDir = UpVector;
+ sunOrbitHeight = v1.y;
+- sunOrbitRad = sqrt(1.0f - sunOrbitHeight * sunOrbitHeight);
++ sunOrbitRad = math::sqrt(1.0f - sunOrbitHeight * sunOrbitHeight);
+ } else {
+- float3 v2(cos(initialSunAngle + PI), orbitMinSunHeight, sin(initialSunAngle + PI));
++ float3 v2(math::cos(initialSunAngle + PI), orbitMinSunHeight, math::sin(initialSunAngle + PI));
+ v2.ANormalize();
+ float3 v3 = v2 - v1;
+ sunOrbitRad = v3.Length() / 2.0f;
+@@ -137,7 +137,7 @@
+ } else {
+ // new: newLightDir is center position of orbit, and newLightDir.w is orbit height
+ sunOrbitHeight = std::max(-1.0f, std::min(newLightDir.w, 1.0f));
+- sunOrbitRad = sqrt(1.0f - sunOrbitHeight * sunOrbitHeight);
++ sunOrbitRad = math::sqrt(1.0f - sunOrbitHeight * sunOrbitHeight);
+ }
+
+ sunRotation.LoadIdentity();
+diff -ru spring_89.0/rts/Rendering/GL/glExtra.cpp /home/svenstaro/src/spring/rts/Rendering/GL/glExtra.cpp
+--- spring_89.0/rts/Rendering/GL/glExtra.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Rendering/GL/glExtra.cpp 2012-07-13 06:34:43.069393827 +0200
+@@ -83,7 +83,7 @@
+ float adjustment = rad/2;
+ float ydiff = 0;
+ int j;
+- for(j = 0; j < 50 && fabs(adjRadius - rad) + ydiff > .01*rad; j++){
++ for(j = 0; j < 50 && math::fabs(adjRadius - rad) + ydiff > .01*rad; j++){
+ if(adjRadius > rad) {
+ rad += adjustment;
+ } else {
+@@ -93,7 +93,7 @@
+ pos.x = center.x + (sinR * rad);
+ pos.z = center.z + (cosR * rad);
+ float newY = ground->GetHeightAboveWater(pos.x, pos.z, false);
+- ydiff = fabs(pos.y - newY);
++ ydiff = math::fabs(pos.y - newY);
+ pos.y = newY;
+ heightDiff = (pos.y - center.y);
+ adjRadius = weapon ? weapon->GetRange2D(heightDiff*weapon->heightMod) : rad;
+diff -ru spring_89.0/rts/Rendering/GroundDecalHandler.cpp /home/svenstaro/src/spring/rts/Rendering/GroundDecalHandler.cpp
+--- spring_89.0/rts/Rendering/GroundDecalHandler.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Rendering/GroundDecalHandler.cpp 2012-07-13 06:34:43.082727161 +0200
+@@ -963,7 +963,7 @@
+ radius = damage * 0.25f;
+
+ if (damage > 400)
+- damage = 400 + sqrt(damage - 399);
++ damage = 400 + math::sqrt(damage - 399);
+
+ pos.ClampInBounds();
+
+diff -ru spring_89.0/rts/Rendering/InMapDrawView.cpp /home/svenstaro/src/spring/rts/Rendering/InMapDrawView.cpp
+--- spring_89.0/rts/Rendering/InMapDrawView.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Rendering/InMapDrawView.cpp 2012-07-13 06:34:43.069393827 +0200
+@@ -38,7 +38,7 @@
+ for (int y = 0; y < 64; y++) {
+ // circular thingy
+ for (int x = 0; x < 64; x++) {
+- float dist = sqrt((float)(x - 32) * (x - 32) + (y - 32) * (y - 32));
++ float dist = math::sqrt((float)(x - 32) * (x - 32) + (y - 32) * (y - 32));
+ if (dist > 31.0f) {
+ // do nothing - leave transparent
+ } else if (dist > 30.0f) {
+diff -ru spring_89.0/rts/Rendering/LineDrawer.cpp /home/svenstaro/src/spring/rts/Rendering/LineDrawer.cpp
+--- spring_89.0/rts/Rendering/LineDrawer.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Rendering/LineDrawer.cpp 2012-07-13 06:34:43.069393827 +0200
+@@ -29,7 +29,7 @@
+ void CLineDrawer::UpdateLineStipple()
+ {
+ stippleTimer += (globalRendering->lastFrameTime * cmdColors.StippleSpeed());
+- stippleTimer = fmod(stippleTimer, (16.0f / 20.0f));
++ stippleTimer = math::fmod(stippleTimer, (16.0f / 20.0f));
+ }
+
+
+diff -ru spring_89.0/rts/Rendering/Models/S3OParser.cpp /home/svenstaro/src/spring/rts/Rendering/Models/S3OParser.cpp
+--- spring_89.0/rts/Rendering/Models/S3OParser.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Rendering/Models/S3OParser.cpp 2012-07-13 06:34:43.069393827 +0200
+@@ -319,7 +319,7 @@
+ float3& t = tTangents[vrtIdx];
+ int h = 1;
+
+- if (isnan(n.x) || isnan(n.y) || isnan(n.z)) {
++ if (math::isnan(n.x) || math::isnan(n.y) || math::isnan(n.z)) {
+ n = float3(0.0f, 0.0f, 1.0f);
+ }
+ if (s == ZeroVector) { s = float3(1.0f, 0.0f, 0.0f); }
+diff -ru spring_89.0/rts/Sim/Misc/LosMap.cpp /home/svenstaro/src/spring/rts/Sim/Misc/LosMap.cpp
+--- spring_89.0/rts/Sim/Misc/LosMap.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Sim/Misc/LosMap.cpp 2012-07-13 06:34:43.069393827 +0200
+@@ -182,7 +182,7 @@
+
+ y = (int)i;
+ x = 1;
+- y = (int) (sqrt((float)r2 - 1) + 0.5f);
++ y = (int) (math::sqrt((float)r2 - 1) + 0.5f);
+ while (x < y) {
+ if(!PaintTable[x+y*Radius]) {
+ DrawLine(PaintTable, x, y, Radius);
+@@ -198,7 +198,7 @@
+ }
+
+ x += 1;
+- y = (int) (sqrt((float)r2 - x*x) + 0.5f);
++ y = (int) (math::sqrt((float)r2 - x*x) + 0.5f);
+ }
+ if (x == y) {
+ if(!PaintTable[x+y*Radius]) {
+diff -ru spring_89.0/rts/Sim/Misc/QuadField.cpp /home/svenstaro/src/spring/rts/Sim/Misc/QuadField.cpp
+--- spring_89.0/rts/Sim/Misc/QuadField.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Sim/Misc/QuadField.cpp 2012-07-13 06:34:43.069393827 +0200
+@@ -329,12 +329,12 @@
+ float zp = start.z;
+ const float invQuadSize = 1.0f / QUAD_SIZE;
+
+- if ((floor(start.x * invQuadSize) == floor(to.x * invQuadSize)) &&
+- (floor(start.z * invQuadSize) == floor(to.z * invQuadSize)))
++ if ((math::floor(start.x * invQuadSize) == math::floor(to.x * invQuadSize)) &&
++ (math::floor(start.z * invQuadSize) == math::floor(to.z * invQuadSize)))
+ {
+ *endQuad = ((int(start.x * invQuadSize)) + (int(start.z * invQuadSize)) * numQuadsX);
+ ++endQuad;
+- } else if (floor(start.x * invQuadSize) == floor(to.x * invQuadSize)) {
++ } else if (math::floor(start.x * invQuadSize) == math::floor(to.x * invQuadSize)) {
+ const int first = (int)(start.x * invQuadSize) + ((int)(start.z * invQuadSize) * numQuadsX);
+ const int last = (int)(to.x * invQuadSize) + ((int)(to.z * invQuadSize) * numQuadsX);
+
+@@ -347,7 +347,7 @@
+ *endQuad = a; ++endQuad;
+ }
+ }
+- } else if (floor(start.z * invQuadSize) == floor(to.z * invQuadSize)) {
++ } else if (math::floor(start.z * invQuadSize) == math::floor(to.z * invQuadSize)) {
+ const int first = (int)(start.x * invQuadSize) + ((int)(start.z * invQuadSize) * numQuadsX);
+ const int last = (int)(to.x * invQuadSize) + ((int)(to.z * invQuadSize) * numQuadsX);
+
+@@ -369,14 +369,14 @@
+ ++endQuad;
+
+ if (dx > 0) {
+- xn = (floor(xp * invQuadSize) * QUAD_SIZE + QUAD_SIZE - xp) / dx;
++ xn = (math::floor(xp * invQuadSize) * QUAD_SIZE + QUAD_SIZE - xp) / dx;
+ } else {
+- xn = (floor(xp * invQuadSize) * QUAD_SIZE - xp) / dx;
++ xn = (math::floor(xp * invQuadSize) * QUAD_SIZE - xp) / dx;
+ }
+ if (dz > 0) {
+- zn = (floor(zp * invQuadSize) * QUAD_SIZE + QUAD_SIZE - zp) / dz;
++ zn = (math::floor(zp * invQuadSize) * QUAD_SIZE + QUAD_SIZE - zp) / dz;
+ } else {
+- zn = (floor(zp * invQuadSize) * QUAD_SIZE - zp) / dz;
++ zn = (math::floor(zp * invQuadSize) * QUAD_SIZE - zp) / dz;
+ }
+
+ if (xn < zn) {
+@@ -388,8 +388,8 @@
+ }
+
+ keepgoing =
+- (fabs(xp - start.x) < fabs(to.x - start.x)) &&
+- (fabs(zp - start.z) < fabs(to.z - start.z));
++ (math::fabs(xp - start.x) < math::fabs(to.x - start.x)) &&
++ (math::fabs(zp - start.z) < math::fabs(to.z - start.z));
+ }
+ }
+
+diff -ru spring_89.0/rts/Sim/MoveTypes/ClassicGroundMoveType.cpp /home/svenstaro/src/spring/rts/Sim/MoveTypes/ClassicGroundMoveType.cpp
+--- spring_89.0/rts/Sim/MoveTypes/ClassicGroundMoveType.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Sim/MoveTypes/ClassicGroundMoveType.cpp 2012-07-13 06:34:43.256060504 +0200
+@@ -386,7 +386,7 @@
+
+ const float dif = wSpeed - currentSpeed;
+
+- if (fabs(dif) < 0.05f) {
++ if (math::fabs(dif) < 0.05f) {
+ deltaSpeed = dif * 0.125f;
+ nextDeltaSpeedUpdate = gs->frameNum + 8;
+ } else if (dif > 0.0f) {
+@@ -529,7 +529,7 @@
+ skidRotSpeed = 0.0f;
+ owner->physicalState = oldPhysState;
+ owner->moveType->useHeading = true;
+- float rp = floor(skidRotPos2 + skidRotSpeed2 + 0.5f);
++ float rp = math::floor(skidRotPos2 + skidRotSpeed2 + 0.5f);
+ skidRotSpeed2 = (rp - skidRotPos2) * 0.5f;
+ ChangeHeading(owner->heading);
+ } else {
+@@ -545,10 +545,10 @@
+ }
+
+ float remTime=speedf/speedReduction-1;
+- float rp=floor(skidRotPos2+skidRotSpeed2*remTime+0.5f);
++ float rp=math::floor(skidRotPos2+skidRotSpeed2*remTime+0.5f);
+ skidRotSpeed2=(remTime+1 == 0 ) ? 0 : (rp-skidRotPos2)/(remTime+1);
+
+- if(floor(skidRotPos2)!=floor(skidRotPos2+skidRotSpeed2)){
++ if(math::floor(skidRotPos2)!=math::floor(skidRotPos2+skidRotSpeed2)){
+ skidRotPos2=0;
+ skidRotSpeed2=0;
+ }
+@@ -571,7 +571,7 @@
+ speed*=0.95f;
+ }
+ else {
+- speed += (normal*(fabs(speed.dot(normal)) + .1))*1.9f;
++ speed += (normal*(math::fabs(speed.dot(normal)) + .1))*1.9f;
+ speed*=.8;
+ }
+ }
+@@ -625,7 +625,7 @@
+ float totRad = owner->radius + u->radius;
+
+ if (sqDist < totRad * totRad && sqDist != 0) {
+- float dist = sqrt(sqDist);
++ float dist = math::sqrt(sqDist);
+ float3 dif = midPos - u->midPos;
+ dif /= std::max(dist, 1.f);
+
+@@ -682,7 +682,7 @@
+ float sqDist=(midPos-u->midPos).SqLength();
+ float totRad=owner->radius+u->radius;
+ if(sqDist<totRad*totRad && sqDist!=0){
+- float dist=sqrt(sqDist);
++ float dist=math::sqrt(sqDist);
+ float3 dif=midPos-u->midPos;
+ dif/=std::max(dist, 1.f);
+ float impactSpeed = -owner->speed.dot(dif);
+@@ -721,8 +721,8 @@
+
+ skidRotPos2 += skidRotSpeed2;
+
+- float cosp = cos(skidRotPos2 * PI * 2.0f);
+- float sinp = sin(skidRotPos2 * PI * 2.0f);
++ float cosp = math::cos(skidRotPos2 * PI * 2.0f);
++ float sinp = math::sin(skidRotPos2 * PI * 2.0f);
+
+ float3 f1 = skidRotVector * skidRotVector.dot(owner->frontdir);
+ float3 f2 = owner->frontdir - f1;
+@@ -812,7 +812,7 @@
+ float objectDistToAvoidDirCenter = objectToUnit.dot(rightOfAvoid);
+
+ if (objectToUnit.dot(avoidanceDir) < radiusSum &&
+- fabs(objectDistToAvoidDirCenter) < radiusSum &&
++ math::fabs(objectDistToAvoidDirCenter) < radiusSum &&
+ (o->moveDef || Distance2D(owner, o) >= 0)) {
+
+ if (objectDistToAvoidDirCenter > 0.0f) {
+@@ -824,7 +824,7 @@
+ rightOfAvoid = avoidanceDir.cross(float3(0.0f, 1.0f, 0.0f));
+ } else {
+ avoidLeft +=
+- (radiusSum - fabs(objectDistToAvoidDirCenter)) *
++ (radiusSum - math::fabs(objectDistToAvoidDirCenter)) *
+ AVOIDANCE_STRENGTH * fastmath::isqrt2(distanceToObjectSq);
+ avoidanceDir -= (rightOfAvoid * avoidLeft);
+ avoidanceDir.Normalize();
+@@ -952,7 +952,7 @@
+ if (!decRate) {
+ return 0.0f;
+ }
+- return fabs(speed*speed / decRate);
++ return math::fabs(speed*speed / decRate);
+ }
+
+ float3 CClassicGroundMoveType::Here()
+@@ -1043,7 +1043,7 @@
+ const float zmove = (owner->mapPos.y + owner->zsize / 2) * SQUARE_SIZE;
+ const float xmove = (owner->mapPos.x + owner->xsize / 2) * SQUARE_SIZE;
+
+- if (fabs(owner->frontdir.x) > fabs(owner->frontdir.z)) {
++ if (math::fabs(owner->frontdir.x) > math::fabs(owner->frontdir.z)) {
+ if (newmp.y < owner->mapPos.y) {
+ haveCollided |= CheckColV(newmp.y, newmp.x, newmp.x + owner->xsize - 1, zmove - 3.99f, owner->mapPos.y);
+ newmp = owner->GetMapPos();
+@@ -1261,20 +1261,20 @@
+ float xp = start.x;
+ float zp = start.z;
+
+- if (floor(start.x) == floor(to.x)) {
++ if (math::floor(start.x) == math::floor(to.x)) {
+ if (dz > 0.0f) {
+- for (int a = 1; a < floor(to.z); ++a)
++ for (int a = 1; a < math::floor(to.z); ++a)
+ lineTable[yt][xt].push_back(int2(0, a));
+ } else {
+- for (int a = -1; a > floor(to.z); --a)
++ for (int a = -1; a > math::floor(to.z); --a)
+ lineTable[yt][xt].push_back(int2(0, a));
+ }
+- } else if (floor(start.z) == floor(to.z)) {
++ } else if (math::floor(start.z) == math::floor(to.z)) {
+ if (dx > 0.0f) {
+- for (int a = 1; a < floor(to.x); ++a)
++ for (int a = 1; a < math::floor(to.x); ++a)
+ lineTable[yt][xt].push_back(int2(a, 0));
+ } else {
+- for (int a = -1; a > floor(to.x); --a)
++ for (int a = -1; a > math::floor(to.x); --a)
+ lineTable[yt][xt].push_back(int2(a, 0));
+ }
+ } else {
+@@ -1283,14 +1283,14 @@
+
+ while (keepgoing) {
+ if (dx > 0.0f) {
+- xn = (floor(xp) + 1.0f - xp) / dx;
++ xn = (math::floor(xp) + 1.0f - xp) / dx;
+ } else {
+- xn = (floor(xp) - xp) / dx;
++ xn = (math::floor(xp) - xp) / dx;
+ }
+ if (dz > 0.0f) {
+- zn = (floor(zp) + 1.0f - zp) / dz;
++ zn = (math::floor(zp) + 1.0f - zp) / dz;
+ } else {
+- zn = (floor(zp) - zp) / dz;
++ zn = (math::floor(zp) - zp) / dz;
+ }
+
+ if (xn < zn) {
+@@ -1302,10 +1302,10 @@
+ }
+
+ keepgoing =
+- fabs(xp - start.x) < fabs(to.x - start.x) &&
+- fabs(zp - start.z) < fabs(to.z - start.z);
++ math::fabs(xp - start.x) < math::fabs(to.x - start.x) &&
++ math::fabs(zp - start.z) < math::fabs(to.z - start.z);
+
+- lineTable[yt][xt].push_back( int2(int(floor(xp)), int(floor(zp))) );
++ lineTable[yt][xt].push_back( int2(int(math::floor(xp)), int(math::floor(zp))) );
+ }
+
+ lineTable[yt][xt].pop_back();
+@@ -1335,7 +1335,7 @@
+ const MoveDef& md = *(owner->unitDef->moveDef);
+ const float cmod = movemath->GetPosSpeedMod(md, moveSquareX * 2, moveSquareY * 2);
+
+- if (fabs(owner->frontdir.x) < fabs(owner->frontdir.z)) {
++ if (math::fabs(owner->frontdir.x) < math::fabs(owner->frontdir.z)) {
+ if (newMoveSquareX > moveSquareX) {
+ const float nmod = movemath->GetPosSpeedMod(md, newMoveSquareX * 2, newMoveSquareY * 2);
+ if (cmod > 0.01f && nmod <= 0.01f) {
+diff -ru spring_89.0/rts/Sim/MoveTypes/GroundMoveType.cpp /home/svenstaro/src/spring/rts/Sim/MoveTypes/GroundMoveType.cpp
+--- spring_89.0/rts/Sim/MoveTypes/GroundMoveType.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Sim/MoveTypes/GroundMoveType.cpp 2012-07-13 06:34:43.249393836 +0200
+@@ -1808,20 +1808,20 @@
+ float xp = start.x;
+ float zp = start.z;
+
+- if (floor(start.x) == floor(to.x)) {
++ if (math::floor(start.x) == math::floor(to.x)) {
+ if (dz > 0.0f) {
+- for (int a = 1; a <= floor(to.z); ++a)
++ for (int a = 1; a <= math::floor(to.z); ++a)
+ lineTable[yt][xt].push_back(int2(0, a));
+ } else {
+- for (int a = -1; a >= floor(to.z); --a)
++ for (int a = -1; a >= math::floor(to.z); --a)
+ lineTable[yt][xt].push_back(int2(0, a));
+ }
+- } else if (floor(start.z) == floor(to.z)) {
++ } else if (math::floor(start.z) == math::floor(to.z)) {
+ if (dx > 0.0f) {
+- for (int a = 1; a <= floor(to.x); ++a)
++ for (int a = 1; a <= math::floor(to.x); ++a)
+ lineTable[yt][xt].push_back(int2(a, 0));
+ } else {
+- for (int a = -1; a >= floor(to.x); --a)
++ for (int a = -1; a >= math::floor(to.x); --a)
+ lineTable[yt][xt].push_back(int2(a, 0));
+ }
+ } else {
+@@ -1830,14 +1830,14 @@
+
+ while (keepgoing) {
+ if (dx > 0.0f) {
+- xn = (floor(xp) + 1.0f - xp) / dx;
++ xn = (math::floor(xp) + 1.0f - xp) / dx;
+ } else {
+- xn = (floor(xp) - xp) / dx;
++ xn = (math::floor(xp) - xp) / dx;
+ }
+ if (dz > 0.0f) {
+- zn = (floor(zp) + 1.0f - zp) / dz;
++ zn = (math::floor(zp) + 1.0f - zp) / dz;
+ } else {
+- zn = (floor(zp) - zp) / dz;
++ zn = (math::floor(zp) - zp) / dz;
+ }
+
+ if (xn < zn) {
+@@ -1851,7 +1851,7 @@
+ keepgoing =
+ math::fabs(xp - start.x) <= math::fabs(to.x - start.x) &&
+ math::fabs(zp - start.z) <= math::fabs(to.z - start.z);
+- int2 pt(int(floor(xp)), int(floor(zp)));
++ int2 pt(int(math::floor(xp)), int(math::floor(zp)));
+
+ static const int MIN_IDX = -int(LINETABLE_SIZE / 2);
+ static const int MAX_IDX = -MIN_IDX;
+diff -ru spring_89.0/rts/Sim/MoveTypes/HoverAirMoveType.cpp /home/svenstaro/src/spring/rts/Sim/MoveTypes/HoverAirMoveType.cpp
+--- spring_89.0/rts/Sim/MoveTypes/HoverAirMoveType.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Sim/MoveTypes/HoverAirMoveType.cpp 2012-07-13 06:34:43.069393827 +0200
+@@ -325,7 +325,7 @@
+ {
+ #define NOZERO(x) std::max(x, 0.0001f)
+
+- const float driftSpeed = fabs(owner->unitDef->dlHoverFactor);
++ const float driftSpeed = math::fabs(owner->unitDef->dlHoverFactor);
+ float3 deltaVec = goalPos - owner->pos;
+ float3 deltaDir = float3(deltaVec.x, 0.0f, deltaVec.z);
+ float l = NOZERO(deltaDir.Length2D());
+@@ -342,7 +342,7 @@
+ deltaDir -= owner->speed;
+ l = deltaDir.SqLength2D();
+ if (l > (maxSpeed * maxSpeed)) {
+- deltaDir *= maxSpeed / NOZERO(sqrt(l));
++ deltaDir *= maxSpeed / NOZERO(math::sqrt(l));
+ }
+ wantedSpeed = owner->speed + deltaDir;
+
+diff -ru spring_89.0/rts/Sim/MoveTypes/StrafeAirMoveType.cpp /home/svenstaro/src/spring/rts/Sim/MoveTypes/StrafeAirMoveType.cpp
+--- spring_89.0/rts/Sim/MoveTypes/StrafeAirMoveType.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Sim/MoveTypes/StrafeAirMoveType.cpp 2012-07-13 06:34:43.069393827 +0200
+@@ -412,7 +412,7 @@
+ }
+ }
+
+- if (fabs(owner->rightdir.y) < maxAileron * 3.0f * speedf || owner->updir.y < 0.0f) {
++ if (math::fabs(owner->rightdir.y) < maxAileron * 3.0f * speedf || owner->updir.y < 0.0f) {
+ elevator = 1;
+ }
+ UpdateAirPhysics(0, aileron, elevator, 1, owner->frontdir);
+@@ -528,13 +528,13 @@
+ if (goalDir.dot(frontdir) < -0.2f + inefficientAttackTime * 0.002f && frontdir.y > -0.2f && speedf > 2.0f && gs->randFloat() > 0.996f)
+ maneuver = 1;
+
+- if (goalDir.dot(frontdir) < -0.2f + inefficientAttackTime * 0.002f && fabs(frontdir.y) < 0.2f && gs->randFloat() > 0.996f && gHeightAW + 400 < pos.y) {
++ if (goalDir.dot(frontdir) < -0.2f + inefficientAttackTime * 0.002f && math::fabs(frontdir.y) < 0.2f && gs->randFloat() > 0.996f && gHeightAW + 400 < pos.y) {
+ maneuver = 2;
+ maneuverSubState = 0;
+ }
+
+ // roll
+- if (speedf > 0.45f && pos.y + owner->speed.y * 60 * fabs(frontdir.y) + std::min(0.0f, float(updir.y)) * 150 > gHeightAW + 60 + fabs(rightdir.y) * 150) {
++ if (speedf > 0.45f && pos.y + owner->speed.y * 60 * math::fabs(frontdir.y) + std::min(0.0f, float(updir.y)) * 150 > gHeightAW + 60 + math::fabs(rightdir.y) * 150) {
+ const float goalBankDif = goalDotRight + rightdir.y * 0.2f;
+ if (goalBankDif > maxAileron * speedf * 4.0f) {
+ aileron = 1;
+@@ -706,7 +706,7 @@
+ } else if (goalBankDif < -maxAileron * speedf * 4 && rightdir.y < maxBank) {
+ aileron = -1;
+ } else {
+- if (fabs(rightdir.y) < maxBank) {
++ if (math::fabs(rightdir.y) < maxBank) {
+ aileron = goalBankDif / (maxAileron * speedf * 4);
+ } else {
+ if (rightdir.y < 0.0f && goalBankDif < 0.0f) {
+@@ -762,7 +762,7 @@
+ } else if (hdif > (maxElevator * speedf * speedf * 20) && frontdir.y < maxPitch) {
+ elevator = 1;
+ } else {
+- if (fabs(frontdir.y) < maxPitch)
++ if (math::fabs(frontdir.y) < maxPitch)
+ elevator = hdif / (maxElevator * speedf * speedf * 20);
+ }
+ }
+diff -ru spring_89.0/rts/Sim/Path/Default/PathEstimator.cpp /home/svenstaro/src/spring/rts/Sim/Path/Default/PathEstimator.cpp
+--- spring_89.0/rts/Sim/Path/Default/PathEstimator.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Sim/Path/Default/PathEstimator.cpp 2012-07-13 06:34:42.939393819 +0200
+@@ -201,7 +201,7 @@
+
+ void CPathEstimator::CalcOffsetsAndPathCosts(int thread) {
+ //! reset FPU state for synced computations
+- streflop_init<streflop::Simple>();
++ streflop::streflop_init<streflop::Simple>();
+
+ // NOTE: EstimatePathCosts() [B] is temporally dependent on CalculateBlockOffsets() [A],
+ // A must be completely finished before B_i can be safely called. This means we cannot
+diff -ru spring_89.0/rts/Sim/Path/QTPFS/PathManager.cpp /home/svenstaro/src/spring/rts/Sim/Path/QTPFS/PathManager.cpp
+--- spring_89.0/rts/Sim/Path/QTPFS/PathManager.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Sim/Path/QTPFS/PathManager.cpp 2012-07-13 06:34:43.016060490 +0200
+@@ -251,7 +251,7 @@
+
+
+ void QTPFS::PathManager::InitNodeLayersThreaded(const SRectangle& rect) {
+- streflop_init<streflop::Simple>();
++ streflop::streflop_init<streflop::Simple>();
+
+ char loadMsg[512] = {'\0'};
+ const char* fmtString = "[PathManager::%s] using %u threads for %u node-layers (cached? %s)";
+@@ -310,7 +310,7 @@
+ }
+ #endif
+
+- streflop_init<streflop::Simple>();
++ streflop::streflop_init<streflop::Simple>();
+ }
+
+ void QTPFS::PathManager::InitNodeLayersThread(
+@@ -360,7 +360,7 @@
+
+
+ void QTPFS::PathManager::UpdateNodeLayersThreaded(const SRectangle& rect) {
+- streflop_init<streflop::Simple>();
++ streflop::streflop_init<streflop::Simple>();
+
+ #ifdef QTPFS_OPENMP_ENABLED
+ {
+@@ -375,7 +375,7 @@
+ }
+ #endif
+
+- streflop_init<streflop::Simple>();
++ streflop::streflop_init<streflop::Simple>();
+ }
+
+ void QTPFS::PathManager::UpdateNodeLayersThread(
+@@ -569,7 +569,7 @@
+ SCOPED_TIMER("PathManager::Update");
+
+ #ifdef QTPFS_ENABLE_THREADED_UPDATE
+- streflop_init<streflop::Simple>();
++ streflop::streflop_init<streflop::Simple>();
+
+ // allow ThreadUpdate to run one iteration
+ condThreadUpdate->notify_one();
+@@ -579,7 +579,7 @@
+ // wait for the ThreadUpdate iteration to finish
+ condThreadUpdated->wait(lock);
+
+- streflop_init<streflop::Simple>();
++ streflop::streflop_init<streflop::Simple>();
+ #else
+ ThreadUpdate();
+ #endif
+diff -ru spring_89.0/rts/Sim/Projectiles/ExplosionGenerator.cpp /home/svenstaro/src/spring/rts/Sim/Projectiles/ExplosionGenerator.cpp
+--- spring_89.0/rts/Sim/Projectiles/ExplosionGenerator.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Sim/Projectiles/ExplosionGenerator.cpp 2012-07-13 06:34:43.082727161 +0200
+@@ -262,7 +262,7 @@
+ damage *= gfxMod;
+ damage = std::max(damage, 0.0f);
+
+- const float sqrtDmg = sqrt(damage);
++ const float sqrtDmg = math::sqrt(damage);
+ const float camLength = camVect.Length();
+ float moveLength = radius * 0.03f;
+
+@@ -283,7 +283,7 @@
+ if (airExplosion || waterExplosion) { smokeDamage *= 0.6f; }
+
+ if (smokeDamage > 0.01f) {
+- smokeDamageSQRT = sqrt(smokeDamage);
++ smokeDamageSQRT = math::sqrt(smokeDamage);
+ smokeDamageISQRT = 1.0f / (smokeDamageSQRT * 0.35f);
+ }
+
+@@ -507,17 +507,17 @@
+ }
+ case OP_SAWTOOTH: {
+ // this translates to modulo except it works with floats
+- val -= (*(float*) code) * floor(val / (*(float*) code));
++ val -= (*(float*) code) * math::floor(val / (*(float*) code));
+ code += 4;
+ break;
+ }
+ case OP_DISCRETE: {
+- val = (*(float*) code) * floor(val / (*(float*) code));
++ val = (*(float*) code) * math::floor(val / (*(float*) code));
+ code += 4;
+ break;
+ }
+ case OP_SINE: {
+- val = (*(float*) code) * sin(val);
++ val = (*(float*) code) * math::sin(val);
+ code += 4;
+ break;
+ }
+@@ -538,12 +538,12 @@
+ break;
+ }
+ case OP_POW: {
+- val = pow(val, (*(float*) code));
++ val = math::pow(val, (*(float*) code));
+ code += 4;
+ break;
+ }
+ case OP_POWBUFF: {
+- val = pow(val, buffer[(*(int*) code)]);
++ val = math::pow(val, buffer[(*(int*) code)]);
+ code += 4;
+ break;
+ }
+diff -ru spring_89.0/rts/Sim/Projectiles/PieceProjectile.cpp /home/svenstaro/src/spring/rts/Sim/Projectiles/PieceProjectile.cpp
+--- spring_89.0/rts/Sim/Projectiles/PieceProjectile.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Sim/Projectiles/PieceProjectile.cpp 2012-07-13 06:34:43.069393827 +0200
+@@ -111,7 +111,7 @@
+ oldSmokeDir.Normalize();
+ const float3 camDir = (pos - camera->pos).Normalize();
+
+- if (camera->pos.distance(pos) + (1 - fabs(camDir.dot(oldSmokeDir))) * 3000 < 200) {
++ if (camera->pos.distance(pos) + (1 - math::fabs(camDir.dot(oldSmokeDir))) * 3000 < 200) {
+ drawTrail = false;
+ }
+
+@@ -334,7 +334,7 @@
+
+ if (!drawTrail) {
+ float3 camDir = (pos - camera->pos).Normalize();
+- if (camera->pos.distance(pos) + (1 - fabs(camDir.dot(dir))) * 3000 > 300) {
++ if (camera->pos.distance(pos) + (1 - math::fabs(camDir.dot(dir))) * 3000 > 300) {
+ drawTrail = true;
+ }
+ }
+@@ -373,7 +373,7 @@
+ const float3 dif2 = (oldSmokePos - camera->pos).Normalize();
+ const float3 dir2 = (dif2.cross(oldSmokeDir)).Normalize();
+
+- float a1 = ((1 - 0.0f / (Smoke_Time)) * 255) * (0.7f + fabs(dif.dot(dir)));
++ float a1 = ((1 - 0.0f / (Smoke_Time)) * 255) * (0.7f + math::fabs(dif.dot(dir)));
+ float alpha = std::min(255.0f, std::max(0.f, a1));
+ col[0] = (unsigned char) (color * alpha);
+ col[1] = (unsigned char) (color * alpha);
+@@ -381,7 +381,7 @@
+ col[3] = (unsigned char) (alpha);
+
+ unsigned char col2[4];
+- float a2 = ((1 - float(age2) / (Smoke_Time)) * 255) * (0.7f + fabs(dif2.dot(oldSmokeDir)));
++ float a2 = ((1 - float(age2) / (Smoke_Time)) * 255) * (0.7f + math::fabs(dif2.dot(oldSmokeDir)));
+
+ if (age < 8)
+ a2 = 0;
+diff -ru spring_89.0/rts/Sim/Projectiles/Unsynced/SimpleParticleSystem.cpp /home/svenstaro/src/spring/rts/Sim/Projectiles/Unsynced/SimpleParticleSystem.cpp
+--- spring_89.0/rts/Sim/Projectiles/Unsynced/SimpleParticleSystem.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Sim/Projectiles/Unsynced/SimpleParticleSystem.cpp 2012-07-13 06:34:43.072727160 +0200
+@@ -188,7 +188,7 @@
+ particles[i].size = particleSize + gu->usRandFloat()*particleSizeSpread;
+ particles[i].pos = pos;
+
+- particles[i].speed = ((up * emitMul.y) * cos(ay) - ((right * emitMul.x) * cos(az) - (forward * emitMul.z) * sin(az)) * sin(ay)) * (particleSpeed + (gu->usRandFloat() * particleSpeedSpread));
++ particles[i].speed = ((up * emitMul.y) * math::cos(ay) - ((right * emitMul.x) * math::cos(az) - (forward * emitMul.z) * math::sin(az)) * math::sin(ay)) * (particleSpeed + (gu->usRandFloat() * particleSpeedSpread));
+ }
+
+ drawRadius = (particleSpeed + particleSpeedSpread) * (particleLife * particleLifeSpread);
+@@ -232,7 +232,7 @@
+ const float az = gu->usRandFloat() * 2 * PI;
+ const float ay = (emitRot + emitRotSpread*gu->usRandFloat()) * (PI / 180.0);
+
+- float3 pspeed = ((up * emitMul.y) * cos(ay) - ((right * emitMul.x) * cos(az) - (forward * emitMul.z) * sin(az)) * sin(ay)) * (particleSpeed + (gu->usRandFloat() * particleSpeedSpread));
++ float3 pspeed = ((up * emitMul.y) * math::cos(ay) - ((right * emitMul.x) * math::cos(az) - (forward * emitMul.z) * math::sin(az)) * math::sin(ay)) * (particleSpeed + (gu->usRandFloat() * particleSpeedSpread));
+
+ CGenericParticleProjectile* particle = new CGenericParticleProjectile(pos + explosionPos, pspeed, owner);
+
+diff -ru spring_89.0/rts/Sim/Projectiles/Unsynced/SmokeTrailProjectile.cpp /home/svenstaro/src/spring/rts/Sim/Projectiles/Unsynced/SmokeTrailProjectile.cpp
+--- spring_89.0/rts/Sim/Projectiles/Unsynced/SmokeTrailProjectile.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Sim/Projectiles/Unsynced/SmokeTrailProjectile.cpp 2012-07-13 06:34:43.072727160 +0200
+@@ -124,7 +124,7 @@
+ if (lastSegment) {
+ a1 = 0;
+ }
+- a1 *= 0.7f + fabs(dif1.dot(dir1));
++ a1 *= 0.7f + math::fabs(dif1.dot(dir1));
+ float alpha = std::min(255.f, std::max(0.f, a1));
+ col[0] = (unsigned char) (color * alpha);
+ col[1] = (unsigned char) (color * alpha);
+@@ -136,7 +136,7 @@
+ if (firstSegment) {
+ a2 = 0;
+ }
+- a2 *= 0.7f + fabs(dif2.dot(dir2));
++ a2 *= 0.7f + math::fabs(dif2.dot(dir2));
+ alpha = std::min(255.f, std::max(0.0f, a2));
+ col2[0] = (unsigned char) (color * alpha);
+ col2[1] = (unsigned char) (color * alpha);
+@@ -153,7 +153,7 @@
+
+ unsigned char col3[4];
+ float a2 = (1 - (float)(age + 4) / lifeTime) * 255;
+- a2 *= 0.7f + fabs(dif3.dot(middir));
++ a2 *= 0.7f + math::fabs(dif3.dot(middir));
+ alpha = std::min(255.0f, std::max(0.0f, a2));
+ col3[0] = (unsigned char) (color * alpha);
+ col3[1] = (unsigned char) (color * alpha);
+diff -ru spring_89.0/rts/Sim/Projectiles/Unsynced/SpherePartProjectile.cpp /home/svenstaro/src/spring/rts/Sim/Projectiles/Unsynced/SpherePartProjectile.cpp
+--- spring_89.0/rts/Sim/Projectiles/Unsynced/SpherePartProjectile.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Sim/Projectiles/Unsynced/SpherePartProjectile.cpp 2012-07-13 06:34:43.072727160 +0200
+@@ -49,7 +49,7 @@
+ const float yp = (y + ypart) / 16.0f*PI - PI/2;
+ for (int x = 0; x < 5; ++x) {
+ float xp = (x + xpart) / 32.0f*2*PI;
+- vectors[y*5 + x] = float3(sin(xp)*cos(yp), sin(yp), cos(xp)*cos(yp));
++ vectors[y*5 + x] = float3(math::sin(xp)*math::cos(yp), math::sin(yp), math::cos(xp)*math::cos(yp));
+ }
+ }
+ pos = centerPos+vectors[12] * sphereSize;
+@@ -86,7 +86,7 @@
+ float alpha =
+ baseAlpha *
+ (1.0f - min(1.0f, float(age + globalRendering->timeOffset) / (float) ttl)) *
+- (1.0f - fabs(y + ybase - 8.0f) / 8.0f * 1.0f);
++ (1.0f - math::fabs(y + ybase - 8.0f) / 8.0f * 1.0f);
+
+ col[0] = (unsigned char) (color.x * 255.0f * alpha);
+ col[1] = (unsigned char) (color.y * 255.0f * alpha);
+@@ -94,7 +94,7 @@
+ col[3] = ((unsigned char) (40 * alpha)) + 1;
+ va->AddVertexQTC(centerPos + vectors[y*5 + x] * interSize, texx, texy, col);
+ va->AddVertexQTC(centerPos + vectors[y*5 + x + 1] * interSize, texx, texy, col);
+- alpha = baseAlpha * (1.0f - min(1.0f, (float)(age + globalRendering->timeOffset) / (float) ttl)) * (1 - fabs(y + 1 + ybase - 8.0f) / 8.0f*1.0f);
++ alpha = baseAlpha * (1.0f - min(1.0f, (float)(age + globalRendering->timeOffset) / (float) ttl)) * (1 - math::fabs(y + 1 + ybase - 8.0f) / 8.0f*1.0f);
+
+ col[0] = (unsigned char) (color.x * 255.0f * alpha);
+ col[1] = (unsigned char) (color.y * 255.0f * alpha);
+diff -ru spring_89.0/rts/Sim/Projectiles/Unsynced/WakeProjectile.cpp /home/svenstaro/src/spring/rts/Sim/Projectiles/Unsynced/WakeProjectile.cpp
+--- spring_89.0/rts/Sim/Projectiles/Unsynced/WakeProjectile.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Sim/Projectiles/Unsynced/WakeProjectile.cpp 2012-07-13 06:34:43.072727160 +0200
+@@ -79,7 +79,7 @@
+ float interSize = size + sizeExpansion * globalRendering->timeOffset;
+ float interRot = rotation + rotSpeed * globalRendering->timeOffset;
+
+- const float3 dir1 = float3(cos(interRot), 0, sin(interRot)) * interSize;
++ const float3 dir1 = float3(math::cos(interRot), 0, math::sin(interRot)) * interSize;
+ const float3 dir2 = dir1.cross(UpVector);
+
+ #define wt projectileDrawer->waketex
+diff -ru spring_89.0/rts/Sim/Projectiles/WeaponProjectiles/MissileProjectile.cpp /home/svenstaro/src/spring/rts/Sim/Projectiles/WeaponProjectiles/MissileProjectile.cpp
+--- spring_89.0/rts/Sim/Projectiles/WeaponProjectiles/MissileProjectile.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Sim/Projectiles/WeaponProjectiles/MissileProjectile.cpp 2012-07-13 06:34:43.072727160 +0200
+@@ -96,7 +96,7 @@
+ drawRadius = radius + maxSpeed * 8;
+
+ float3 camDir = (pos - camera->pos).ANormalize();
+- if ((camera->pos.distance(pos) * 0.2f + (1 - fabs(camDir.dot(dir))) * 3000) < 200) {
++ if ((camera->pos.distance(pos) * 0.2f + (1 - math::fabs(camDir.dot(dir))) * 3000) < 200) {
+ drawTrail = false;
+ }
+
+@@ -229,8 +229,8 @@
+ // is too close or height difference too large)
+ const float horDiff = (targPos - pos).Length2D() + 0.01f;
+ const float verDiff = (targPos.y - pos.y) + 0.01f;
+- const float dirDiff = fabs(targetDir.y - dir.y);
+- const float ratio = fabs(verDiff / horDiff);
++ const float dirDiff = math::fabs(targetDir.y - dir.y);
++ const float ratio = math::fabs(verDiff / horDiff);
+
+ dir.y -= (dirDiff * ratio);
+ } else {
+@@ -295,7 +295,7 @@
+ if (!drawTrail) {
+ const float3 camDir = (pos - camera->pos).ANormalize();
+
+- if ((camera->pos.distance(pos) * 0.2f + (1 - fabs(camDir.dot(dir))) * 3000) > 300) {
++ if ((camera->pos.distance(pos) * 0.2f + (1 - math::fabs(camDir.dot(dir))) * 3000) > 300) {
+ drawTrail = true;
+ }
+ }
+@@ -343,7 +343,7 @@
+ dir2.ANormalize();
+
+ float a1 = (1.0f / (SMOKE_TIME)) * 255;
+- a1 *= 0.7f + fabs(dif.dot(dir));
++ a1 *= 0.7f + math::fabs(dif.dot(dir));
+ const float alpha1 = std::min(255.0f, std::max(0.0f, a1));
+ col[0] = (unsigned char) (color * alpha1);
+ col[1] = (unsigned char) (color * alpha1);
+@@ -357,7 +357,7 @@
+ a2 = 0;
+ }
+
+- a2 *= 0.7f + fabs(dif2.dot(oldDir));
++ a2 *= 0.7f + math::fabs(dif2.dot(oldDir));
+ const float alpha2 = std::min(255.0f, std::max(0.0f, a2));
+ col2[0] = (unsigned char) (color * alpha2);
+ col2[1] = (unsigned char) (color * alpha2);
+diff -ru spring_89.0/rts/Sim/Projectiles/WeaponProjectiles/StarburstProjectile.cpp /home/svenstaro/src/spring/rts/Sim/Projectiles/WeaponProjectiles/StarburstProjectile.cpp
+--- spring_89.0/rts/Sim/Projectiles/WeaponProjectiles/StarburstProjectile.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Sim/Projectiles/WeaponProjectiles/StarburstProjectile.cpp 2012-07-13 06:34:43.072727160 +0200
+@@ -90,13 +90,13 @@
+ }
+ }
+
+- maxGoodDif = cos(tracking * 0.6f);
++ maxGoodDif = math::cos(tracking * 0.6f);
+ curSpeed = speed.Length();
+ dir = speed / curSpeed;
+ oldSmokeDir = dir;
+
+ const float3 camDir = (pos - camera->pos).ANormalize();
+- const float camDist = (camera->pos.distance(pos) * 0.2f) + ((1.0f - fabs(camDir.dot(dir))) * 3000);
++ const float camDist = (camera->pos.distance(pos) * 0.2f) + ((1.0f - math::fabs(camDir.dot(dir))) * 3000);
+
+ drawTrail = (camDist >= 200.0f);
+ drawRadius = maxSpeed * 8.0f;
+@@ -304,7 +304,7 @@
+
+ if (!drawTrail) {
+ const float3 camDir = (pos - camera->pos).ANormalize();
+- const float camDist = (camera->pos.distance(pos) * 0.2f + (1 - fabs(camDir.dot(dir))) * 3000);
++ const float camDist = (camera->pos.distance(pos) * 0.2f + (1 - math::fabs(camDir.dot(dir))) * 3000);
+
+ drawTrail = (camDist > 300.0f);
+ }
+@@ -335,11 +335,11 @@
+
+ const float a1 =
+ ((1.0f - (0.0f / SMOKE_TIME)) * 255) *
+- (0.7f + fabs(dif1.dot(dir)));
++ (0.7f + math::fabs(dif1.dot(dir)));
+ const float a2 =
+ (age < 8)? 0.0f:
+ ((1.0f - (age2 / SMOKE_TIME)) * 255) *
+- (0.7f + fabs(dif2.dot(oldSmokeDir)));
++ (0.7f + math::fabs(dif2.dot(oldSmokeDir)));
+ const int alpha1 = std::min(255, (int) std::max(0.0f, a1));
+ const int alpha2 = std::min(255, (int) std::max(0.0f, a2));
+
+diff -ru spring_89.0/rts/Sim/Projectiles/WeaponProjectiles/WeaponProjectile.cpp /home/svenstaro/src/spring/rts/Sim/Projectiles/WeaponProjectiles/WeaponProjectile.cpp
+--- spring_89.0/rts/Sim/Projectiles/WeaponProjectiles/WeaponProjectile.cpp 2012-07-10 00:10:07.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Sim/Projectiles/WeaponProjectiles/WeaponProjectile.cpp 2012-07-13 06:34:43.249393836 +0200
+@@ -252,8 +252,8 @@
+ const float dot = speed.dot(normal);
+
+ pos -= speed;
+- speed -= (speed + normal * fabs(dot)) * (1 - weaponDef->bounceSlip);
+- speed += (normal * (fabs(dot))) * (1 + weaponDef->bounceRebound);
++ speed -= (speed + normal * math::fabs(dot)) * (1 - weaponDef->bounceSlip);
++ speed += (normal * (math::fabs(dot))) * (1 + weaponDef->bounceRebound);
+ pos += speed;
+
+ if (weaponDef->bounceExplosionGenerator) {
+diff -ru spring_89.0/rts/Sim/Units/CommandAI/MobileCAI.cpp /home/svenstaro/src/spring/rts/Sim/Units/CommandAI/MobileCAI.cpp
+--- spring_89.0/rts/Sim/Units/CommandAI/MobileCAI.cpp 2012-07-10 00:10:08.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Sim/Units/CommandAI/MobileCAI.cpp 2012-07-13 06:34:43.079393827 +0200
+@@ -770,7 +770,7 @@
+ b2 = w->TryTargetRotate(orderTarget, c.GetID() == CMD_MANUALFIRE);
+ b3 = Square(w->range - (w->relWeaponPos).Length()) > (orderTarget->pos.SqDistance(owner->pos));
+ b4 = w->TryTargetHeading(GetHeadingFromVector(-diff.x, -diff.z), orderTarget->pos, orderTarget != NULL, orderTarget);
+- edgeFactor = fabs(w->targetBorder);
++ edgeFactor = math::fabs(w->targetBorder);
+ }
+
+ const float diffLength2D = diff.Length2D();
+diff -ru spring_89.0/rts/Sim/Units/CommandAI/TransportCAI.cpp /home/svenstaro/src/spring/rts/Sim/Units/CommandAI/TransportCAI.cpp
+--- spring_89.0/rts/Sim/Units/CommandAI/TransportCAI.cpp 2012-07-10 00:10:08.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Sim/Units/CommandAI/TransportCAI.cpp 2012-07-13 06:34:43.079393827 +0200
+@@ -349,7 +349,7 @@
+ if (rx <= spread)
+ continue;
+
+- rx = sqrt(rx);
++ rx = math::sqrt(rx);
+
+ const float minx = std::max( spread, center.x - rx);
+ const float maxx = std::min(float(gs->mapx * SQUARE_SIZE - spread), center.x + rx);
+@@ -676,7 +676,7 @@
+ am->ForceHeading(unloadHeading);
+ am->maxDrift = 1;
+ if ((owner->pos.SqDistance(pos) < 64) &&
+- (owner->updir.dot(UpVector) > 0.99f) && fabs(owner->heading - unloadHeading) < AIRTRANSPORT_DOCKING_ANGLE) {
++ (owner->updir.dot(UpVector) > 0.99f) && math::fabs(owner->heading - unloadHeading) < AIRTRANSPORT_DOCKING_ANGLE) {
+ if (!SpotIsClearIgnoreSelf(pos, unit)) {
+ // chosen spot is no longer clear to land, choose a new one
+ // if a new spot cannot be found, don't unload at all
+diff -ru spring_89.0/rts/Sim/Units/UnitDef.cpp /home/svenstaro/src/spring/rts/Sim/Units/UnitDef.cpp
+--- spring_89.0/rts/Sim/Units/UnitDef.cpp 2012-07-10 00:10:08.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Sim/Units/UnitDef.cpp 2012-07-13 06:34:43.072727160 +0200
+@@ -399,9 +399,9 @@
+ selfDCountdown = udTable.GetInt("selfDestructCountdown", 5);
+
+ speed = udTable.GetFloat("maxVelocity", 0.0f) * GAME_SPEED;
+- speed = fabs(speed);
++ speed = math::fabs(speed);
+ rSpeed = udTable.GetFloat("maxReverseVelocity", 0.0f) * GAME_SPEED;
+- rSpeed = fabs(rSpeed);
++ rSpeed = math::fabs(rSpeed);
+
+ fireState = udTable.GetInt("fireState", canFireControl? FIRESTATE_NONE: FIRESTATE_FIREATWILL);
+ fireState = std::min(fireState, int(FIRESTATE_FIREATWILL));
+@@ -462,8 +462,8 @@
+ useSmoothMesh = udTable.GetBool("useSmoothMesh", true);
+
+
+- maxAcc = fabs(udTable.GetFloat("acceleration", 0.5f)); // no negative values
+- maxDec = fabs(udTable.GetFloat("brakeRate", 3.0f * maxAcc)) * (canfly? 0.1f: 1.0f); // no negative values
++ maxAcc = math::fabs(udTable.GetFloat("acceleration", 0.5f)); // no negative values
++ maxDec = math::fabs(udTable.GetFloat("brakeRate", 3.0f * maxAcc)) * (canfly? 0.1f: 1.0f); // no negative values
+
+ turnRate = udTable.GetFloat("turnRate", 0.0f);
+ turnInPlace = udTable.GetBool("turnInPlace", true);
+@@ -709,7 +709,7 @@
+ seismicSignature = udTable.GetFloat("seismicSignature", -1.0f);
+ if (seismicSignature == -1.0f) {
+ if (!canFloat && !canHover && !canfly) {
+- seismicSignature = sqrt(mass / 100.0f);
++ seismicSignature = math::sqrt(mass / 100.0f);
+ } else {
+ seismicSignature = 0.0f;
+ }
+diff -ru spring_89.0/rts/Sim/Units/UnitHandler.cpp /home/svenstaro/src/spring/rts/Sim/Units/UnitHandler.cpp
+--- spring_89.0/rts/Sim/Units/UnitHandler.cpp 2012-07-10 00:10:08.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Sim/Units/UnitHandler.cpp 2012-07-13 06:34:43.076060493 +0200
+@@ -419,8 +419,8 @@
+ // look for a nearby geothermal feature if we need one
+ for (std::vector<CFeature*>::const_iterator fi = features.begin(); fi != features.end(); ++fi) {
+ if ((*fi)->def->geoThermal
+- && fabs((*fi)->pos.x - pos.x) < (xsize * 4 - 4)
+- && fabs((*fi)->pos.z - pos.z) < (zsize * 4 - 4)) {
++ && math::fabs((*fi)->pos.x - pos.x) < (xsize * 4 - 4)
++ && math::fabs((*fi)->pos.z - pos.z) < (zsize * 4 - 4)) {
+ canBuild = BUILDSQUARE_OPEN;
+ break;
+ }
+@@ -589,7 +589,7 @@
+ BuildInfo bi(cmd);
+ tempF1 = pos + dir * ((bi.pos.y - pos.y) / dir.y) - bi.pos;
+
+- if (bi.def && (bi.GetXSize() / 2) * SQUARE_SIZE > fabs(tempF1.x) && (bi.GetZSize() / 2) * SQUARE_SIZE > fabs(tempF1.z)) {
++ if (bi.def && (bi.GetXSize() / 2) * SQUARE_SIZE > math::fabs(tempF1.x) && (bi.GetZSize() / 2) * SQUARE_SIZE > math::fabs(tempF1.z)) {
+ return cmd;
+ }
+ }
+diff -ru spring_89.0/rts/Sim/Weapons/BombDropper.cpp /home/svenstaro/src/spring/rts/Sim/Weapons/BombDropper.cpp
+--- spring_89.0/rts/Sim/Weapons/BombDropper.cpp 2012-07-10 00:10:08.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Sim/Weapons/BombDropper.cpp 2012-07-13 06:34:43.072727160 +0200
+@@ -62,7 +62,7 @@
+ const float s = -owner->speed.y;
+ const float sq = (s - 2*d) / -((weaponDef->myGravity == 0) ? mapInfo->map.gravity : -(weaponDef->myGravity));
+ if (sq > 0) {
+- predict = s / ((weaponDef->myGravity == 0) ? mapInfo->map.gravity : -(weaponDef->myGravity)) + sqrt(sq);
++ predict = s / ((weaponDef->myGravity == 0) ? mapInfo->map.gravity : -(weaponDef->myGravity)) + math::sqrt(sq);
+ } else {
+ predict = 0;
+ }
+diff -ru spring_89.0/rts/Sim/Weapons/Cannon.cpp /home/svenstaro/src/spring/rts/Sim/Weapons/Cannon.cpp
+--- spring_89.0/rts/Sim/Weapons/Cannon.cpp 2012-07-10 00:10:08.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Sim/Weapons/Cannon.cpp 2012-07-13 06:34:43.072727160 +0200
+@@ -169,7 +169,7 @@
+
+ int ttl = 0;
+ float sqSpeed2D = dir.SqLength2D() * projectileSpeed * projectileSpeed;
+- int predict = (int)ceil((sqSpeed2D == 0) ? (-2 * projectileSpeed * dir.y / gravity)
++ int predict = (int)math::ceil((sqSpeed2D == 0) ? (-2 * projectileSpeed * dir.y / gravity)
+ : math::sqrt(diff.SqLength2D() / sqSpeed2D));
+ if(weaponDef->flighttime > 0) {
+ ttl = weaponDef->flighttime;
+@@ -216,9 +216,9 @@
+ // try to cache results, sacrifice some (not much too much even for a pewee) accuracy
+ // it saves a dozen or two expensive calculations per second when 5 guardians
+ // are shooting at several slow- and fast-moving targets
+- if (fabs(diff.x - lastDiff.x) < (SQUARE_SIZE / 4.0f) &&
+- fabs(diff.y - lastDiff.y) < (SQUARE_SIZE / 4.0f) &&
+- fabs(diff.z - lastDiff.z) < (SQUARE_SIZE / 4.0f)) {
++ if (math::fabs(diff.x - lastDiff.x) < (SQUARE_SIZE / 4.0f) &&
++ math::fabs(diff.y - lastDiff.y) < (SQUARE_SIZE / 4.0f) &&
++ math::fabs(diff.z - lastDiff.z) < (SQUARE_SIZE / 4.0f)) {
+ return lastDir;
+ }
+
+@@ -237,7 +237,7 @@
+ // FIXME: temporary safeguards against FP overflow
+ // (introduced by extreme off-map unit positions; the term
+ // DFsq * Dsq * ... * dy should never even approach 1e38)
+- if (Dsq < 1e12f && fabs(dy) < 1e6f) {
++ if (Dsq < 1e12f && math::fabs(dy) < 1e6f) {
+ const float root1 = v*v*v*v + 2.0f*v*v*g*dy - g*g*DFsq;
+
+ if (root1 >= 0.0f) {
+diff -ru spring_89.0/rts/Sim/Weapons/WeaponDefHandler.cpp /home/svenstaro/src/spring/rts/Sim/Weapons/WeaponDefHandler.cpp
+--- spring_89.0/rts/Sim/Weapons/WeaponDefHandler.cpp 2012-07-10 00:10:08.000000000 +0200
++++ /home/svenstaro/src/spring/rts/Sim/Weapons/WeaponDefHandler.cpp 2012-07-13 06:34:43.072727160 +0200
+@@ -126,9 +126,9 @@
+
+ // should really be tan but TA seem to cap it somehow
+ // should also be 7fff or ffff theoretically but neither seems good
+- wd.accuracy = sin((accuracy) * PI / 0xafff);
+- wd.sprayAngle = sin((sprayAngle) * PI / 0xafff);
+- wd.movingAccuracy = sin((movingAccuracy) * PI / 0xafff);
++ wd.accuracy = math::sin((accuracy) * PI / 0xafff);
++ wd.sprayAngle = math::sin((sprayAngle) * PI / 0xafff);
++ wd.movingAccuracy = math::sin((movingAccuracy) * PI / 0xafff);
+
+ wd.targetMoveError = wdTable.GetFloat("targetMoveError", 0.0f);
+ wd.leadLimit = wdTable.GetFloat("leadLimit", -1.0f);
+@@ -375,7 +375,7 @@
+
+
+ const float gd = max(30.0f, wd.damages[0] / 20.0f);
+- const float defExpSpeed = (8.0f + (gd * 2.5f)) / (9.0f + (sqrt(gd) * 0.7f)) * 0.5f;
++ const float defExpSpeed = (8.0f + (gd * 2.5f)) / (9.0f + (math::sqrt(gd) * 0.7f)) * 0.5f;
+ wd.explosionSpeed = wdTable.GetFloat("explosionSpeed", defExpSpeed);
+
+ // Dynamic Damage
+@@ -461,7 +461,7 @@
+ wd.hitSound.setVolume(0, 5.0f);
+ wd.hitSound.setVolume(1, 5.0f);
+ } else {
+- float fireSoundVolume = sqrt(wd.damages[0] * 0.5f);
++ float fireSoundVolume = math::sqrt(wd.damages[0] * 0.5f);
+
+ if (wd.type == "LaserCannon") {
+ fireSoundVolume *= 0.5f;
+@@ -472,7 +472,7 @@
+ if ((fireSoundVolume > 100.0f) &&
+ ((wd.type == "MissileLauncher") ||
+ (wd.type == "StarburstLauncher"))) {
+- fireSoundVolume = 10.0f * sqrt(hitSoundVolume);
++ fireSoundVolume = 10.0f * math::sqrt(hitSoundVolume);
+ }
+
+ if (wd.damageAreaOfEffect > 8.0f) {
+@@ -564,7 +564,7 @@
+
+ if (inverted == true) {
+ for(int i = 0; i < damageArrayHandler->GetNumTypes(); ++i) {
+- dynDamages[i] = damages[i] - (1 - pow(1 / range * travDist, exp)) * damages[i];
++ dynDamages[i] = damages[i] - (1 - math::pow(1 / range * travDist, exp)) * damages[i];
+
+ if (damageMin > 0)
+ dynDamages[i] = max(damages[i] * ddmod, dynDamages[i]);
+@@ -577,7 +577,7 @@
+ }
+ else {
+ for(int i = 0; i < damageArrayHandler->GetNumTypes(); ++i) {
+- dynDamages[i] = (1 - pow(1 / range * travDist, exp)) * damages[i];
++ dynDamages[i] = (1 - math::pow(1 / range * travDist, exp)) * damages[i];
+
+ if (damageMin > 0)
+ dynDamages[i] = max(damages[i] * ddmod, dynDamages[i]);
+diff -ru spring_89.0/rts/System/Matrix44f.cpp /home/svenstaro/src/spring/rts/System/Matrix44f.cpp
+--- spring_89.0/rts/System/Matrix44f.cpp 2012-07-10 00:10:08.000000000 +0200
++++ /home/svenstaro/src/spring/rts/System/Matrix44f.cpp 2012-07-13 06:34:43.072727160 +0200
+@@ -72,8 +72,8 @@
+
+ *this=Mul(rm);
+ */
+- const float sr = sin(rad);
+- const float cr = cos(rad);
++ const float sr = math::sin(rad);
++ const float cr = math::cos(rad);
+
+ float a=m[4];
+ m[4] = cr*a - sr*m[8];
+@@ -107,8 +107,8 @@
+
+ *this = Mul(rm);
+ */
+- const float sr = sin(rad);
+- const float cr = cos(rad);
++ const float sr = math::sin(rad);
++ const float cr = math::cos(rad);
+
+ float a=m[0];
+ m[0] = cr*a + sr*m[8];
+@@ -142,8 +142,8 @@
+
+ *this = Mul(rm);
+ */
+- const float sr = sin(rad);
+- const float cr = cos(rad);
++ const float sr = math::sin(rad);
++ const float cr = math::cos(rad);
+
+ float a=m[0];
+ m[0] = cr*a - sr*m[4];
+@@ -165,8 +165,8 @@
+
+ void CMatrix44f::Rotate(float rad, const float3& axis)
+ {
+- const float sr = sin(rad);
+- const float cr = cos(rad);
++ const float sr = math::sin(rad);
++ const float cr = math::cos(rad);
+
+ for(int a=0;a<3;++a){
+ float3 v(m[a*4],m[a*4+1],m[a*4+2]);
+diff -ru spring_89.0/rts/System/myMath.cpp /home/svenstaro/src/spring/rts/System/myMath.cpp
+--- spring_89.0/rts/System/myMath.cpp 2012-07-10 00:10:08.000000000 +0200
++++ /home/svenstaro/src/spring/rts/System/myMath.cpp 2012-07-13 06:34:43.072727160 +0200
+@@ -44,7 +44,7 @@
+ }
+
+ // Set single precision floating point math.
+- streflop_init<streflop::Simple>();
++ streflop::streflop_init<streflop::Simple>();
+ #if defined(__SUPPORT_SNAN__) && !defined(USE_GML)
+ streflop::feraiseexcept(streflop::FPU_Exceptions(FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW));
+ #endif
+@@ -58,7 +58,7 @@
+ #pragma omp parallel
+ {
+ //good_fpu_control_registers("OMP-Init");
+- streflop_init<streflop::Simple>();
++ streflop::streflop_init<streflop::Simple>();
+ #if defined(__SUPPORT_SNAN__) && !defined(USE_GML)
+ streflop::feraiseexcept(streflop::FPU_Exceptions(FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW));
+ #endif
+@@ -77,8 +77,8 @@
+ for (int a = 0; a < NUM_HEADINGS; ++a) {
+ float ang = (a - (NUM_HEADINGS / 2)) * 2 * PI / NUM_HEADINGS;
+ float2 v;
+- v.x = sin(ang);
+- v.y = cos(ang);
++ v.x = math::sin(ang);
++ v.y = math::cos(ang);
+ headingToVectorTable[a] = v;
+ }
+
+@@ -107,9 +107,9 @@
+ float3 ret;
+ float h = heading * TAANG2RAD;
+ float p = pitch * TAANG2RAD;
+- ret.x = sin(h) * cos(p);
+- ret.y = sin(p);
+- ret.z = cos(h) * cos(p);
++ ret.x = math::sin(h) * math::cos(p);
++ ret.y = math::sin(p);
++ ret.z = math::cos(h) * math::cos(p);
+ return ret;
+ }
+
+@@ -138,7 +138,7 @@
+ float3 dir(l2-l1);
+ float3 pdir(p-l1);
+ float length = dir.Length();
+- if (fabs(length) < 1e-4f)
++ if (math::fabs(length) < 1e-4f)
+ return l1;
+ float c = dir.dot(pdir) / length;
+ if (c < 0) c = 0;
+diff -ru spring_89.0/rts/System/Net/Socket.cpp /home/svenstaro/src/spring/rts/System/Net/Socket.cpp
+--- spring_89.0/rts/System/Net/Socket.cpp 2012-07-10 00:10:08.000000000 +0200
++++ /home/svenstaro/src/spring/rts/System/Net/Socket.cpp 2012-07-13 06:34:42.939393819 +0200
+@@ -73,7 +73,7 @@
+ //! (date of note: 08/05/10)
+ //! something in from_string() is invalidating the FPU flags
+ //! tested on win2k and linux (not happening there)
+- streflop_init<streflop::Simple>();
++ streflop::streflop_init<streflop::Simple>();
+ #endif
+
+ return addr;
+@@ -94,7 +94,7 @@
+ #ifdef STREFLOP_H
+ //! (date of note: 08/22/10)
+ //! something in resolve() is invalidating the FPU flags
+- streflop_init<streflop::Simple>();
++ streflop::streflop_init<streflop::Simple>();
+ #endif
+
+ return resolveIt;
+diff -ru spring_89.0/rts/System/OffscreenGLContext.cpp /home/svenstaro/src/spring/rts/System/OffscreenGLContext.cpp
+--- spring_89.0/rts/System/OffscreenGLContext.cpp 2012-07-10 00:10:08.000000000 +0200
++++ /home/svenstaro/src/spring/rts/System/OffscreenGLContext.cpp 2012-07-13 06:34:42.939393819 +0200
+@@ -259,7 +259,7 @@
+ #ifdef STREFLOP_H
+ // init streflop to make it available for synced computations, too
+ // redundant? threads copy the FPU state of their parent.
+- streflop_init<streflop::Simple>();
++ streflop::streflop_init<streflop::Simple>();
+ #endif
+
+ try {
+diff -ru spring_89.0/rts/System/Sound/SoundSource.h /home/svenstaro/src/spring/rts/System/Sound/SoundSource.h
+--- spring_89.0/rts/System/Sound/SoundSource.h 2012-07-10 00:10:08.000000000 +0200
++++ /home/svenstaro/src/spring/rts/System/Sound/SoundSource.h 2012-07-13 06:34:42.836060480 +0200
+@@ -7,7 +7,6 @@
+
+ #include <al.h>
+ #include <boost/noncopyable.hpp>
+-#include <boost/thread/recursive_mutex.hpp>
+
+ class IAudioChannel;
+ class float3;
+diff -ru spring_89.0/rts/System/SpringApp.cpp /home/svenstaro/src/spring/rts/System/SpringApp.cpp
+--- spring_89.0/rts/System/SpringApp.cpp 2012-07-10 00:10:08.000000000 +0200
++++ /home/svenstaro/src/spring/rts/System/SpringApp.cpp 2012-07-13 06:34:42.982727155 +0200
+@@ -385,7 +385,7 @@
+ #ifdef STREFLOP_H
+ //! Something in SDL_SetVideoMode (OpenGL drivers?) messes with the FPU control word.
+ //! Set single precision floating point math.
+- streflop_init<streflop::Simple>();
++ streflop::streflop_init<streflop::Simple>();
+ #endif
+
+ //! setup GL smoothing
+@@ -1009,7 +1009,7 @@
+ SDL_Event event;
+
+ while (SDL_PollEvent(&event)) {
+- streflop_init<streflop::Simple>(); // SDL_PollEvent may modify FPU flags
++ streflop::streflop_init<streflop::Simple>(); // SDL_PollEvent may modify FPU flags
+ input.PushEvent(event);
+ }
+ }
+diff -ru spring_89.0/rts/System/Sync/FPUCheck.cpp /home/svenstaro/src/spring/rts/System/Sync/FPUCheck.cpp
+--- spring_89.0/rts/System/Sync/FPUCheck.cpp 2012-07-10 00:10:08.000000000 +0200
++++ /home/svenstaro/src/spring/rts/System/Sync/FPUCheck.cpp 2012-07-13 06:34:42.939393819 +0200
+@@ -85,7 +85,7 @@
+ LOG_L(L_WARNING, "[%s] Sync warning: (env.x87_mode) FPUCW 0x%04X instead of 0x%04X or 0x%04X (\"%s\")", __FUNCTION__, fenv.x87_mode, x87_a, x87_b, text);
+
+ // Set single precision floating point math.
+- streflop_init<streflop::Simple>();
++ streflop::streflop_init<streflop::Simple>();
+ #if defined(__SUPPORT_SNAN__) && !defined(USE_GML)
+ streflop::feraiseexcept(streflop::FPU_Exceptions(FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW));
+ #endif
diff --git a/community/springlobby/PKGBUILD b/community/springlobby/PKGBUILD
index 3e44c662f..5b5ca982e 100644
--- a/community/springlobby/PKGBUILD
+++ b/community/springlobby/PKGBUILD
@@ -1,10 +1,10 @@
-# $Id: PKGBUILD 71324 2012-05-26 15:26:22Z svenstaro $
+# $Id: PKGBUILD 74012 2012-07-18 01:09:14Z ibiru $
# Maintainer: Sven-Hendrik Haase <sh@lutzhaase.com>
# Contributor: DuGi <dugi@irc.pl>
pkgname=springlobby
pkgver=0.147
-pkgrel=1
+pkgrel=2
pkgdesc="A free cross-platform lobby client for the Spring RTS project."
arch=('i686' 'x86_64')
url="http://springlobby.info/"
diff --git a/community/suil/PKGBUILD b/community/suil/PKGBUILD
index e44474115..243ce100b 100644
--- a/community/suil/PKGBUILD
+++ b/community/suil/PKGBUILD
@@ -1,8 +1,8 @@
-# $Id: PKGBUILD 72427 2012-06-14 08:00:19Z speps $
+# $Id: PKGBUILD 73981 2012-07-18 00:34:51Z speps $
# Maintainer: speps <speps at aur dot archlinux dot org>
pkgname=suil
-pkgver=0.6.2
+pkgver=0.6.4
pkgrel=1
pkgdesc="A lightweight C library for loading and wrapping LV2 plugin UIs"
arch=(i686 x86_64)
@@ -13,7 +13,7 @@ makedepends=('python2' 'qt' 'gtk2')
optdepends=('qt: Qt UIs wrapping support'
'gtk2: Gtk2 UIs wrapping support')
source=("http://download.drobilla.net/$pkgname-$pkgver.tar.bz2")
-md5sums=('062f1166786cf59a28b3b9bfbda6f15c')
+md5sums=('9f34d3f15b4266e7cce59e3ac8f1fb3a')
build() {
cd "$srcdir/$pkgname-$pkgver"
diff --git a/community/tagpy/PKGBUILD b/community/tagpy/PKGBUILD
index 9976d8e98..2ee3cbed9 100644
--- a/community/tagpy/PKGBUILD
+++ b/community/tagpy/PKGBUILD
@@ -1,11 +1,11 @@
-# $Id: PKGBUILD 67218 2012-03-05 09:00:00Z ibiru $
+# $Id: PKGBUILD 74013 2012-07-18 01:09:17Z ibiru $
# Maintainer: Andrea Scarpino <andrea@archlinux.org>
# Contributor: Callan Barrett <wizzomafizzo@gmail.com>
# Contributor: Scott Horowitz <stonecrest@gmail.com>
pkgname=tagpy
pkgver=0.94.8
-pkgrel=7
+pkgrel=8
pkgdesc="Python bindings for TagLib"
arch=('i686' 'x86_64')
url="http://pypi.python.org/pypi/tagpy"
diff --git a/community/tigervnc/PKGBUILD b/community/tigervnc/PKGBUILD
new file mode 100644
index 000000000..2e0e43573
--- /dev/null
+++ b/community/tigervnc/PKGBUILD
@@ -0,0 +1,69 @@
+# $Id: PKGBUILD 73952 2012-07-17 11:36:12Z spupykin $
+# Maintainer: Sergej Pupykin <pupykin.s+arch@gmail.com>
+# Maintainer: Uroš Vampl <mobile.leecher at gmail dot com>
+
+pkgname=tigervnc
+pkgver=1.2.0
+pkgrel=7
+_xorgver=1.12.3
+pkgdesc="suite of VNC servers and clients. VNC 4 branch of TightVNC."
+arch=('i686' 'x86_64')
+url="http://www.tigervnc.org"
+license=('GPL')
+depends=('pam' 'gnutls' 'libjpeg-turbo' 'libxft' 'libxinerama' 'libxcursor'
+ 'libxtst' 'libxfont' 'pixman' 'xorg-xauth' 'xorg-xsetroot'
+ 'xkeyboard-config' 'libgl' 'libgcrypt' 'perl')
+makedepends=('cmake' 'nasm' 'xorg-font-util' 'xorg-util-macros' 'bigreqsproto'
+ 'compositeproto' 'damageproto' 'randrproto' 'resourceproto'
+ 'scrnsaverproto' 'videoproto' 'xcmiscproto' 'xf86vidmodeproto'
+ 'xtrans' 'mesa')
+options=(!libtool)
+conflicts=('tightvnc')
+source=(http://downloads.sourceforge.net/tigervnc/${pkgname}-${pkgver}.tar.gz
+ ftp://ftp.freedesktop.org/pub/xorg/individual/xserver/xorg-server-${_xorgver}.tar.bz2
+ xorg111.patch
+ xorg112.patch
+ gnutls.patch
+ gethomedir.patch
+ cmakelists.patch)
+md5sums=('3a5755b4ed600a81c3a17976c6f8420d'
+ '65a53b11bc01dcc97ee9b201dc620c32'
+ 'b680b55f7f9f569cd26ac0b330012a8b'
+ 'f73e055153889ae7b5aac8e697f7a841'
+ '1a5fe8867ab3e49e20aafc70c415494f'
+ 'fa059baabe72308bf82622bca73cb3e0'
+ '6ef923c71cc0e79c4b37eb3b124eea75')
+
+build() {
+ cd ${srcdir}/${pkgname}-${pkgver}
+
+ cp -r ${srcdir}/xorg-server-${_xorgver}/* unix/xserver
+ patch -Np1 -i ${srcdir}/gnutls.patch
+ patch -Np1 -i ${srcdir}/gethomedir.patch
+ patch -Np1 -i ${srcdir}/cmakelists.patch
+ patch -Np1 -i ${srcdir}/xorg111.patch
+ patch -Np1 -i ${srcdir}/xorg112.patch
+
+ cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=/usr -DUSE_INCLUDED_FLTK=yes
+ make
+
+ cd unix/xserver
+ patch -Np1 -i ../xserver110.patch
+ autoreconf -fiv
+ ./configure --prefix=/usr \
+ --disable-static --disable-xinerama --without-dtrace \
+ --disable-xorg --disable-xnest --disable-xvfb --disable-dmx \
+ --disable-xwin --disable-xephyr --disable-kdrive --with-pic \
+ --disable-config-dbus --disable-config-hal --disable-config-udev \
+ --disable-unit-tests --disable-devel-docs --disable-dri \
+ --enable-dri2 --enable-glx --enable-glx-tls
+ make
+}
+
+package() {
+ cd ${srcdir}/${pkgname}-${pkgver}
+ make DESTDIR=${pkgdir} install
+ cd unix/xserver/hw/vnc
+ make DESTDIR=${pkgdir} install
+ sed -i 's/iconic/nowin/' ${pkgdir}/usr/bin/vncserver
+}
diff --git a/community/tigervnc/cmakelists.patch b/community/tigervnc/cmakelists.patch
new file mode 100644
index 000000000..cc6286699
--- /dev/null
+++ b/community/tigervnc/cmakelists.patch
@@ -0,0 +1,70 @@
+diff -ur tigervnc-1.2.0.orig/cmake/BuildPackages.cmake tigervnc-1.2.0/cmake/BuildPackages.cmake
+--- tigervnc-1.2.0.orig/cmake/BuildPackages.cmake 2011-11-08 10:16:36.000000000 +0100
++++ tigervnc-1.2.0/cmake/BuildPackages.cmake 2012-03-30 15:27:00.808919876 +0200
+@@ -86,5 +86,5 @@
+ # Common
+ #
+
+-install(FILES ${CMAKE_SOURCE_DIR}/LICENCE.TXT DESTINATION doc)
+-install(FILES ${CMAKE_SOURCE_DIR}/README.txt DESTINATION doc)
++install(FILES ${CMAKE_SOURCE_DIR}/LICENCE.TXT DESTINATION share/doc/${CMAKE_PROJECT_NAME}-${VERSION})
++install(FILES ${CMAKE_SOURCE_DIR}/README.txt DESTINATION share/doc/${CMAKE_PROJECT_NAME}-${VERSION})
+diff -ur tigervnc-1.2.0.orig/CMakeLists.txt tigervnc-1.2.0/CMakeLists.txt
+--- tigervnc-1.2.0.orig/CMakeLists.txt 2012-03-09 21:34:29.000000000 +0100
++++ tigervnc-1.2.0/CMakeLists.txt 2012-03-30 15:28:59.716911575 +0200
+@@ -316,7 +316,8 @@
+ if(APPLE)
+ set(FLTK_LIBRARIES "-framework Carbon -framework Cocoa -framework ApplicationServices")
+ elseif(NOT WIN32)
+- set(FLTK_LIBRARIES "-ldl")
++ find_library(FONTCONFIG_LIB fontconfig)
++ set(FLTK_LIBRARIES "-ldl" ${FONTCONFIG_LIB})
+ endif()
+ message(STATUS "Using included FLTK library")
+ endif()
+diff -ur tigervnc-1.2.0.orig/unix/CMakeLists.txt tigervnc-1.2.0/unix/CMakeLists.txt
+--- tigervnc-1.2.0.orig/unix/CMakeLists.txt 2011-11-03 20:01:18.000000000 +0100
++++ tigervnc-1.2.0/unix/CMakeLists.txt 2012-03-30 15:27:00.808919876 +0200
+@@ -5,4 +5,4 @@
+ add_subdirectory(x0vncserver)
+
+ install(PROGRAMS vncserver DESTINATION bin)
+-install(FILES vncserver.man DESTINATION man/man1 RENAME vncserver.1)
++install(FILES vncserver.man DESTINATION share/man/man1 RENAME vncserver.1)
+diff -ur tigervnc-1.2.0.orig/unix/vncconfig/CMakeLists.txt tigervnc-1.2.0/unix/vncconfig/CMakeLists.txt
+--- tigervnc-1.2.0.orig/unix/vncconfig/CMakeLists.txt 2011-06-25 09:32:34.000000000 +0200
++++ tigervnc-1.2.0/unix/vncconfig/CMakeLists.txt 2012-03-30 15:27:00.808919876 +0200
+@@ -12,4 +12,4 @@
+ target_link_libraries(vncconfig tx rfb network rdr ${X11_LIBRARIES})
+
+ install(TARGETS vncconfig DESTINATION bin)
+-install(FILES vncconfig.man DESTINATION man/man1 RENAME vncconfig.1)
++install(FILES vncconfig.man DESTINATION share/man/man1 RENAME vncconfig.1)
+diff -ur tigervnc-1.2.0.orig/unix/vncpasswd/CMakeLists.txt tigervnc-1.2.0/unix/vncpasswd/CMakeLists.txt
+--- tigervnc-1.2.0.orig/unix/vncpasswd/CMakeLists.txt 2011-06-25 09:32:34.000000000 +0200
++++ tigervnc-1.2.0/unix/vncpasswd/CMakeLists.txt 2012-03-30 15:27:00.808919876 +0200
+@@ -6,4 +6,4 @@
+ target_link_libraries(vncpasswd tx rfb rdr os)
+
+ install(TARGETS vncpasswd DESTINATION bin)
+-install(FILES vncpasswd.man DESTINATION man/man1 RENAME vncpasswd.1)
++install(FILES vncpasswd.man DESTINATION share/man/man1 RENAME vncpasswd.1)
+diff -ur tigervnc-1.2.0.orig/unix/x0vncserver/CMakeLists.txt tigervnc-1.2.0/unix/x0vncserver/CMakeLists.txt
+--- tigervnc-1.2.0.orig/unix/x0vncserver/CMakeLists.txt 2011-08-19 18:41:06.000000000 +0200
++++ tigervnc-1.2.0/unix/x0vncserver/CMakeLists.txt 2012-03-30 15:27:00.809919874 +0200
+@@ -24,4 +24,4 @@
+ endif()
+
+ install(TARGETS x0vncserver DESTINATION bin)
+-install(FILES x0vncserver.man DESTINATION man/man1 RENAME x0vncserver.1)
++install(FILES x0vncserver.man DESTINATION share/man/man1 RENAME x0vncserver.1)
+diff -ur tigervnc-1.2.0.orig/vncviewer/CMakeLists.txt tigervnc-1.2.0/vncviewer/CMakeLists.txt
+--- tigervnc-1.2.0.orig/vncviewer/CMakeLists.txt 2011-10-05 11:32:28.000000000 +0200
++++ tigervnc-1.2.0/vncviewer/CMakeLists.txt 2012-03-30 15:27:00.809919874 +0200
+@@ -55,5 +55,5 @@
+ install(TARGETS vncviewer DESTINATION bin)
+ endif()
+ if(UNIX)
+- install(FILES vncviewer.man DESTINATION man/man1 RENAME vncviewer.1)
++ install(FILES vncviewer.man DESTINATION share/man/man1 RENAME vncviewer.1)
+ endif()
diff --git a/community/tigervnc/gethomedir.patch b/community/tigervnc/gethomedir.patch
new file mode 100644
index 000000000..9114eea63
--- /dev/null
+++ b/community/tigervnc/gethomedir.patch
@@ -0,0 +1,16 @@
+--- tigervnc-1.0.90/unix/xserver/hw/vnc/Makefile.am~ 2011-04-20 13:46:16.993047050 +0200
++++ tigervnc-1.0.90/unix/xserver/hw/vnc/Makefile.am 2011-04-20 14:03:35.942724608 +0200
+@@ -1,11 +1,12 @@
+ TIGERVNC_SRCDIR=${top_srcdir}/../..
+ LIB_DIR=${top_builddir}/../../common
+
++OS_LIB=$(LIB_DIR)/os/libos.a
+ RFB_LIB=$(LIB_DIR)/rfb/librfb.la
+ RDR_LIB=$(LIB_DIR)/rdr/librdr.la
+ NETWORK_LIB=$(LIB_DIR)/network/libnetwork.la
+ XREGION_LIB=$(LIB_DIR)/Xregion/libXregion.la
+-COMMON_LIBS=$(NETWORK_LIB) $(RFB_LIB) $(RDR_LIB) $(XREGION_LIB)
++COMMON_LIBS=$(NETWORK_LIB) $(OS_LIB) $(RFB_LIB) $(RDR_LIB) $(XREGION_LIB)
+
+ noinst_LTLIBRARIES = libvnccommon.la
+
diff --git a/community/tigervnc/gnutls.patch b/community/tigervnc/gnutls.patch
new file mode 100644
index 000000000..d0b7ef861
--- /dev/null
+++ b/community/tigervnc/gnutls.patch
@@ -0,0 +1,36 @@
+diff -ur tigervnc-1.2.0.orig/CMakeLists.txt tigervnc-1.2.0/CMakeLists.txt
+--- tigervnc-1.2.0.orig/CMakeLists.txt 2012-03-09 21:34:29.000000000 +0100
++++ tigervnc-1.2.0/CMakeLists.txt 2012-03-27 23:14:12.292068145 +0200
+@@ -344,7 +344,7 @@
+ # system's version (if available) to perform this test.
+ set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES};-lz)
+ endif()
+- check_function_exists(gnutls_transport_set_global_errno HAVE_OLD_GNUTLS)
++ check_function_exists(gnutls_transport_set_global_errno HAVE_GNUTLS_GLOBAL_ERRNO)
+ check_function_exists(gnutls_x509_crt_print HAVE_GNUTLS_X509_CRT_PRINT)
+ check_type_size(gnutls_x509_crt_t GNUTLS_X509_CRT_T)
+ check_type_size(gnutls_datum_t GNUTLS_DATUM_T)
+diff -ur tigervnc-1.2.0.orig/common/rdr/TLSInStream.cxx tigervnc-1.2.0/common/rdr/TLSInStream.cxx
+--- tigervnc-1.2.0.orig/common/rdr/TLSInStream.cxx 2010-09-30 08:25:28.000000000 +0200
++++ tigervnc-1.2.0/common/rdr/TLSInStream.cxx 2012-03-27 23:14:11.166068223 +0200
+@@ -27,7 +27,7 @@
+ #include <rdr/TLSInStream.h>
+ #include <errno.h>
+
+-#ifdef HAVE_OLD_GNUTLS
++#ifndef HAVE_GNUTLS_GLOBAL_ERRNO
+ #define gnutls_transport_set_global_errno(A) do { errno = (A); } while(0)
+ #endif
+
+diff -ur tigervnc-1.2.0.orig/common/rdr/TLSOutStream.cxx tigervnc-1.2.0/common/rdr/TLSOutStream.cxx
+--- tigervnc-1.2.0.orig/common/rdr/TLSOutStream.cxx 2010-09-30 08:25:28.000000000 +0200
++++ tigervnc-1.2.0/common/rdr/TLSOutStream.cxx 2012-03-27 23:14:09.576068335 +0200
+@@ -27,7 +27,7 @@
+ #include <rdr/TLSOutStream.h>
+ #include <errno.h>
+
+-#ifdef HAVE_OLD_GNUTLS
++#ifndef HAVE_GNUTLS_GLOBAL_ERRNO
+ #define gnutls_transport_set_global_errno(A) do { errno = (A); } while(0)
+ #endif
+
diff --git a/community/tigervnc/xorg111.patch b/community/tigervnc/xorg111.patch
new file mode 100644
index 000000000..ee0ddb999
--- /dev/null
+++ b/community/tigervnc/xorg111.patch
@@ -0,0 +1,235 @@
+diff -up tigervnc-1.1.0/unix/xserver/hw/vnc/Input.cc.xorg111 tigervnc-1.1.0/unix/xserver/hw/vnc/Input.cc
+--- tigervnc-1.1.0/unix/xserver/hw/vnc/Input.cc.xorg111 2011-08-09 23:16:36.000000000 +0200
++++ tigervnc-1.1.0/unix/xserver/hw/vnc/Input.cc 2011-11-11 11:59:14.226819903 +0100
+@@ -82,10 +82,11 @@ static KeyCode KeysymToKeycode(KeySymsPt
+ /* Event queue is shared between all devices. */
+ #if XORG == 15
+ static xEvent *eventq = NULL;
+-#else
++#elif XORG < 111
+ static EventList *eventq = NULL;
+ #endif
+
++#if XORG < 111
+ static void initEventq(void)
+ {
+ /* eventq is never free()-ed because it exists during server life. */
+@@ -100,7 +101,9 @@ static void initEventq(void)
+ #endif
+ }
+ }
++#endif /* XORG < 111 */
+
++#if XORG < 111
+ static void enqueueEvents(DeviceIntPtr dev, int n)
+ {
+ int i;
+@@ -122,6 +125,7 @@ static void enqueueEvents(DeviceIntPtr d
+ );
+ }
+ }
++#endif /* XORG < 111 */
+
+ InputDevice::InputDevice(rfb::VNCServerST *_server)
+ : server(_server), oldButtonMask(0)
+@@ -141,12 +145,17 @@ InputDevice::InputDevice(rfb::VNCServerS
+ keyboardProc, TRUE);
+ RegisterKeyboardDevice(keyboardDev);
+ #endif
++#if XORG < 111
+ initEventq();
++#endif
+ }
+
+ void InputDevice::PointerButtonAction(int buttonMask)
+ {
+- int i, n;
++ int i;
++#if XORG < 111
++ int n;
++#endif
+ #if XORG >= 110
+ ValuatorMask mask;
+ #endif
+@@ -160,13 +169,17 @@ void InputDevice::PointerButtonAction(in
+ #if XORG < 110
+ n = GetPointerEvents(eventq, pointerDev, action, i + 1,
+ POINTER_RELATIVE, 0, 0, NULL);
+-#else
++ enqueueEvents(pointerDev, n);
++#elif XORG < 111
+ valuator_mask_set_range(&mask, 0, 0, NULL);
+ n = GetPointerEvents(eventq, pointerDev, action, i + 1,
+ POINTER_RELATIVE, &mask);
+-#endif
+ enqueueEvents(pointerDev, n);
+-
++#else
++ valuator_mask_set_range(&mask, 0, 0, NULL);
++ QueuePointerEvents(pointerDev, action, i + 1,
++ POINTER_RELATIVE, &mask);
++#endif
+ }
+ }
+
+@@ -175,7 +188,10 @@ void InputDevice::PointerButtonAction(in
+
+ void InputDevice::PointerMove(const rfb::Point &pos)
+ {
+- int n, valuators[2];
++ int valuators[2];
++#if XORG < 111
++ int n;
++#endif
+ #if XORG >= 110
+ ValuatorMask mask;
+ #endif
+@@ -190,12 +206,16 @@ void InputDevice::PointerMove(const rfb:
+ #if XORG < 110
+ n = GetPointerEvents(eventq, pointerDev, MotionNotify, 0, POINTER_ABSOLUTE, 0,
+ 2, valuators);
+-#else
++ enqueueEvents(pointerDev, n);
++#elif XORG < 111
+ valuator_mask_set_range(&mask, 0, 2, valuators);
+ n = GetPointerEvents(eventq, pointerDev, MotionNotify, 0, POINTER_ABSOLUTE,
+ &mask);
+-#endif
+ enqueueEvents(pointerDev, n);
++#else
++ valuator_mask_set_range(&mask, 0, 2, valuators);
++ QueuePointerEvents(pointerDev, MotionNotify, 0, POINTER_ABSOLUTE, &mask);
++#endif
+
+ cursorPos = pos;
+ }
+@@ -299,14 +319,20 @@ void InputDevice::initInputDevice(void)
+ static inline void pressKey(DeviceIntPtr dev, int kc, bool down, const char *msg)
+ {
+ int action;
++#if XORG < 111
+ unsigned int n;
++#endif
+
+ if (msg != NULL)
+ vlog.debug("%s %d %s", msg, kc, down ? "down" : "up");
+
+ action = down ? KeyPress : KeyRelease;
+- n = GetKeyboardEvents(eventq, dev, action, kc);
++#if XORG < 111
++ n = GetKeyboardEvents(eventq, dev, action, kc, NULL);
+ enqueueEvents(dev, n);
++#else
++ QueueKeyboardEvents(dev, action, kc, NULL);
++#endif
+ }
+
+ #define IS_PRESSED(keyc, keycode) \
+@@ -341,8 +367,11 @@ public:
+ int state, maxKeysPerMod, keycode;
+ #if XORG >= 17
+ KeyCode *modmap = NULL;
+-
++#if XORG >= 111
++ state = XkbStateFieldFromRec(&dev->master->key->xkbInfo->state);
++#else /* XORG >= 111 */
+ state = XkbStateFieldFromRec(&dev->u.master->key->xkbInfo->state);
++#endif /* XORG >= 111 */
+ #else
+ KeyClassPtr keyc = dev->key;
+ state = keyc->state;
+@@ -380,7 +409,11 @@ public:
+ #if XORG >= 17
+ KeyCode *modmap = NULL;
+
++#if XORG >= 111
++ keyc = dev->master->key;
++#else /* XORG >= 111 */
+ keyc = dev->u.master->key;
++#endif /* XORG >= 111 */
+ state = XkbStateFieldFromRec(&keyc->xkbInfo->state);
+ #else
+ keyc = dev->key;
+@@ -596,7 +629,11 @@ void InputDevice::keyEvent(rdr::U32 keys
+ }
+
+ #if XORG >= 17
++#if XORG >= 111
++ keyc = keyboardDev->master->key;
++#else /* XORG >= 111 */
+ keyc = keyboardDev->u.master->key;
++#endif /* XORG >= 111 */
+
+ keymap = XkbGetCoreMap(keyboardDev);
+ if (!keymap) {
+@@ -753,7 +790,11 @@ ModeSwitchFound:
+ XkbApplyMappingChange(keyboardDev, keymap, minKeyCode,
+ maxKeyCode - minKeyCode + 1,
+ NULL, serverClient);
++#if XORG >= 111
++ XkbCopyDeviceKeymap(keyboardDev->master, keyboardDev);
++#else
+ XkbCopyDeviceKeymap(keyboardDev->u.master, keyboardDev);
++#endif
+ #endif /* XORG < 17 */
+ break;
+ }
+diff -up tigervnc-1.1.0/unix/xserver/hw/vnc/xorg-version.h.xorg111 tigervnc-1.1.0/unix/xserver/hw/vnc/xorg-version.h
+--- tigervnc-1.1.0/unix/xserver/hw/vnc/xorg-version.h.xorg111 2011-08-09 23:16:36.000000000 +0200
++++ tigervnc-1.1.0/unix/xserver/hw/vnc/xorg-version.h 2011-11-11 11:55:32.255835319 +0100
+@@ -36,6 +36,8 @@
+ #define XORG 19
+ #elif XORG_VERSION_CURRENT < ((1 * 10000000) + (10 * 100000) + (99 * 1000))
+ #define XORG 110
++#elif XORG_VERSION_CURRENT < ((1 * 10000000) + (11 * 100000) + (99 * 1000))
++#define XORG 111
+ #else
+ #error "X.Org newer than 1.10 is not supported"
+ #endif
+diff -up tigervnc-1.1.0/unix/xserver/hw/vnc/xvnc.cc.xorg111 tigervnc-1.1.0/unix/xserver/hw/vnc/xvnc.cc
+--- tigervnc-1.1.0/unix/xserver/hw/vnc/xvnc.cc.xorg111 2011-08-09 23:16:36.000000000 +0200
++++ tigervnc-1.1.0/unix/xserver/hw/vnc/xvnc.cc 2011-11-11 11:55:32.256835319 +0100
+@@ -211,7 +211,11 @@ static void vfbFreeFramebufferMemory(vfb
+
+ extern "C" {
+
++#if XORG < 111
+ void ddxGiveUp()
++#else
++void ddxGiveUp(enum ExitCode error)
++#endif
+ {
+ int i;
+
+@@ -221,9 +225,17 @@ void ddxGiveUp()
+ }
+
+ void
++#if XORG < 111
+ AbortDDX()
++#else
++AbortDDX(enum ExitCode error)
++#endif
+ {
++#if XORG < 111
+ ddxGiveUp();
++#else
++ ddxGiveUp(error);
++#endif
+ }
+
+ #ifdef __DARWIN__
+@@ -668,8 +680,13 @@ vfbUninstallColormap(ColormapPtr pmap)
+ {
+ if (pmap->mid != pmap->pScreen->defColormap)
+ {
++#if XORG < 111
+ curpmap = (ColormapPtr) LookupIDByType(pmap->pScreen->defColormap,
+ RT_COLORMAP);
++#else
++ dixLookupResourceByType((pointer *) &curpmap, pmap->pScreen->defColormap,
++ RT_COLORMAP, serverClient, DixUnknownAccess);
++#endif
+ (*pmap->pScreen->InstallColormap)(curpmap);
+ }
+ }
diff --git a/community/tigervnc/xorg112.patch b/community/tigervnc/xorg112.patch
new file mode 100644
index 000000000..51f259e19
--- /dev/null
+++ b/community/tigervnc/xorg112.patch
@@ -0,0 +1,447 @@
+diff -ur tigervnc-1.2.0.orig/unix/xserver/hw/vnc/Makefile.am tigervnc-1.2.0/unix/xserver/hw/vnc/Makefile.am
+--- tigervnc-1.2.0.orig/unix/xserver/hw/vnc/Makefile.am 2011-10-31 09:14:40.000000000 +0100
++++ tigervnc-1.2.0/unix/xserver/hw/vnc/Makefile.am 2012-04-15 12:19:00.995517546 +0200
+@@ -63,7 +63,7 @@
+ BUILT_SOURCES = $(nodist_Xvnc_SOURCES)
+
+ fb.h: $(top_srcdir)/fb/fb.h
+- cat $(top_srcdir)/fb/fb.h | sed -e 's,and,c_and,' -e 's,xor,c_xor,' > $(srcdir)/fb.h
++ cat $(top_srcdir)/fb/fb.h | sed -e 's,and,c_and,g' -e 's,xor,c_xor,g' > $(srcdir)/fb.h
+
+ pixman.h:
+ for i in ${XSERVERLIBS_CFLAGS}; do \
+@@ -78,4 +78,4 @@
+ fi
+
+ fbrop.h: $(top_srcdir)/fb/fbrop.h
+- cat $(top_srcdir)/fb/fbrop.h | sed -e 's,and,c_and,' -e 's,xor,c_xor,' > $(srcdir)/fbrop.h
++ cat $(top_srcdir)/fb/fbrop.h | sed -e 's,and,c_and,g' -e 's,xor,c_xor,g' > $(srcdir)/fbrop.h
+diff -ur tigervnc-1.2.0.orig/unix/xserver/hw/vnc/vncExtInit.cc tigervnc-1.2.0/unix/xserver/hw/vnc/vncExtInit.cc
+--- tigervnc-1.2.0.orig/unix/xserver/hw/vnc/vncExtInit.cc 2011-11-07 13:51:34.000000000 +0100
++++ tigervnc-1.2.0/unix/xserver/hw/vnc/vncExtInit.cc 2012-04-15 12:18:57.819557251 +0200
+@@ -59,6 +59,7 @@
+ #include "XserverDesktop.h"
+ #include "vncHooks.h"
+ #include "vncExtInit.h"
++#include "xorg-version.h"
+
+ extern "C" {
+
+@@ -449,10 +450,16 @@
+ ev.window = cur->window;
+ ev.time = GetTimeInMillis();
+ if (cur->client->swapped) {
++#if XORG < 112
+ int n;
+ swaps(&ev.sequenceNumber, n);
+ swapl(&ev.window, n);
+ swapl(&ev.time, n);
++#else
++ swaps(&ev.sequenceNumber);
++ swapl(&ev.window);
++ swapl(&ev.time);
++#endif
+ }
+ WriteToClient(cur->client, sizeof(xVncExtClientCutTextNotifyEvent),
+ (char *)&ev);
+@@ -495,9 +502,14 @@
+ ev.sequenceNumber = cur->client->sequence;
+ ev.window = cur->window;
+ if (cur->client->swapped) {
++#if XORG < 112
+ int n;
+ swaps(&ev.sequenceNumber, n);
+ swapl(&ev.window, n);
++#else
++ swaps(&ev.sequenceNumber);
++ swapl(&ev.window);
++#endif
+ }
+ WriteToClient(cur->client, sizeof(xVncExtQueryConnectNotifyEvent),
+ (char *)&ev);
+@@ -538,10 +550,16 @@
+ ev.window = cur->window;
+ ev.selection = selection;
+ if (cur->client->swapped) {
++#if XORG < 112
+ int n;
+ swaps(&ev.sequenceNumber, n);
+ swapl(&ev.window, n);
+ swapl(&ev.selection, n);
++#else
++ swaps(&ev.sequenceNumber);
++ swapl(&ev.window);
++ swapl(&ev.selection);
++#endif
+ }
+ WriteToClient(cur->client, sizeof(xVncExtSelectionChangeNotifyEvent),
+ (char *)&ev);
+@@ -562,7 +580,6 @@
+ param.buf[stuff->paramLen] = 0;
+
+ xVncExtSetParamReply rep;
+- int n;
+ rep.type = X_Reply;
+ rep.length = 0;
+ rep.success = 0;
+@@ -603,8 +620,14 @@
+
+ deny:
+ if (client->swapped) {
++#if XORG < 112
++ int n;
+ swaps(&rep.sequenceNumber, n);
+ swapl(&rep.length, n);
++#else
++ swaps(&rep.sequenceNumber);
++ swapl(&rep.length);
++#endif
+ }
+ WriteToClient(client, sizeof(xVncExtSetParamReply), (char *)&rep);
+ return (client->noClientException);
+@@ -612,9 +635,13 @@
+
+ static int SProcVncExtSetParam(ClientPtr client)
+ {
+- register char n;
+ REQUEST(xVncExtSetParamReq);
++#if XORG < 112
++ register char n;
+ swaps(&stuff->length, n);
++#else
++ swaps(&stuff->length);
++#endif
+ REQUEST_AT_LEAST_SIZE(xVncExtSetParamReq);
+ return ProcVncExtSetParam(client);
+ }
+@@ -628,7 +655,6 @@
+ param.buf[stuff->paramLen] = 0;
+
+ xVncExtGetParamReply rep;
+- int n;
+ rep.type = X_Reply;
+ rep.sequenceNumber = client->sequence;
+ rep.success = 0;
+@@ -646,9 +672,16 @@
+ rep.length = (len + 3) >> 2;
+ rep.valueLen = len;
+ if (client->swapped) {
++#if XORG < 112
++ int n;
+ swaps(&rep.sequenceNumber, n);
+ swapl(&rep.length, n);
+ swaps(&rep.valueLen, n);
++#else
++ swaps(&rep.sequenceNumber);
++ swapl(&rep.length);
++ swaps(&rep.valueLen);
++#endif
+ }
+ WriteToClient(client, sizeof(xVncExtGetParamReply), (char *)&rep);
+ if (value)
+@@ -659,9 +692,13 @@
+
+ static int SProcVncExtGetParam(ClientPtr client)
+ {
+- register char n;
+ REQUEST(xVncExtGetParamReq);
++#if XORG < 112
++ register char n;
+ swaps(&stuff->length, n);
++#else
++ swaps(&stuff->length);
++#endif
+ REQUEST_AT_LEAST_SIZE(xVncExtGetParamReq);
+ return ProcVncExtGetParam(client);
+ }
+@@ -675,7 +712,6 @@
+ param.buf[stuff->paramLen] = 0;
+
+ xVncExtGetParamDescReply rep;
+- int n;
+ rep.type = X_Reply;
+ rep.sequenceNumber = client->sequence;
+ rep.success = 0;
+@@ -690,9 +726,16 @@
+ rep.length = (len + 3) >> 2;
+ rep.descLen = len;
+ if (client->swapped) {
++#if XORG < 112
++ int n;
+ swaps(&rep.sequenceNumber, n);
+ swapl(&rep.length, n);
+ swaps(&rep.descLen, n);
++#else
++ swaps(&rep.sequenceNumber);
++ swapl(&rep.length);
++ swaps(&rep.descLen);
++#endif
+ }
+ WriteToClient(client, sizeof(xVncExtGetParamDescReply), (char *)&rep);
+ if (desc)
+@@ -702,9 +745,13 @@
+
+ static int SProcVncExtGetParamDesc(ClientPtr client)
+ {
+- register char n;
+ REQUEST(xVncExtGetParamDescReq);
++#if XORG < 112
++ register char n;
+ swaps(&stuff->length, n);
++#else
++ swaps(&stuff->length);
++#endif
+ REQUEST_AT_LEAST_SIZE(xVncExtGetParamDescReq);
+ return ProcVncExtGetParamDesc(client);
+ }
+@@ -715,7 +762,6 @@
+ REQUEST_SIZE_MATCH(xVncExtListParamsReq);
+
+ xVncExtListParamsReply rep;
+- int n;
+ rep.type = X_Reply;
+ rep.sequenceNumber = client->sequence;
+
+@@ -731,9 +777,16 @@
+ rep.length = (len + 3) >> 2;
+ rep.nParams = nParams;
+ if (client->swapped) {
++#if XORG < 112
++ int n;
+ swaps(&rep.sequenceNumber, n);
+ swapl(&rep.length, n);
+ swaps(&rep.nParams, n);
++#else
++ swaps(&rep.sequenceNumber);
++ swapl(&rep.length);
++ swaps(&rep.nParams);
++#endif
+ }
+ WriteToClient(client, sizeof(xVncExtListParamsReply), (char *)&rep);
+ rdr::U8* data = new rdr::U8[len];
+@@ -753,9 +806,13 @@
+
+ static int SProcVncExtListParams(ClientPtr client)
+ {
+- register char n;
+ REQUEST(xVncExtListParamsReq);
++#if XORG < 112
++ register char n;
+ swaps(&stuff->length, n);
++#else
++ swaps(&stuff->length);
++#endif
+ REQUEST_SIZE_MATCH(xVncExtListParamsReq);
+ return ProcVncExtListParams(client);
+ }
+@@ -778,11 +835,19 @@
+
+ static int SProcVncExtSetServerCutText(ClientPtr client)
+ {
+- register char n;
+ REQUEST(xVncExtSetServerCutTextReq);
++#if XORG < 112
++ register char n;
+ swaps(&stuff->length, n);
++#else
++ swaps(&stuff->length);
++#endif
+ REQUEST_AT_LEAST_SIZE(xVncExtSetServerCutTextReq);
++#if XORG < 112
+ swapl(&stuff->textLen, n);
++#else
++ swapl(&stuff->textLen);
++#endif
+ return ProcVncExtSetServerCutText(client);
+ }
+
+@@ -792,15 +857,21 @@
+ REQUEST_SIZE_MATCH(xVncExtGetClientCutTextReq);
+
+ xVncExtGetClientCutTextReply rep;
+- int n;
+ rep.type = X_Reply;
+ rep.length = (clientCutTextLen + 3) >> 2;
+ rep.sequenceNumber = client->sequence;
+ rep.textLen = clientCutTextLen;
+ if (client->swapped) {
++#if XORG < 112
++ int n;
+ swaps(&rep.sequenceNumber, n);
+ swapl(&rep.length, n);
+ swapl(&rep.textLen, n);
++#else
++ swaps(&rep.sequenceNumber);
++ swapl(&rep.length);
++ swapl(&rep.textLen);
++#endif
+ }
+ WriteToClient(client, sizeof(xVncExtGetClientCutTextReply), (char *)&rep);
+ if (clientCutText)
+@@ -810,9 +881,13 @@
+
+ static int SProcVncExtGetClientCutText(ClientPtr client)
+ {
+- register char n;
+ REQUEST(xVncExtGetClientCutTextReq);
++#if XORG < 112
++ register char n;
+ swaps(&stuff->length, n);
++#else
++ swaps(&stuff->length);
++#endif
+ REQUEST_SIZE_MATCH(xVncExtGetClientCutTextReq);
+ return ProcVncExtGetClientCutText(client);
+ }
+@@ -842,12 +917,21 @@
+
+ static int SProcVncExtSelectInput(ClientPtr client)
+ {
+- register char n;
+ REQUEST(xVncExtSelectInputReq);
++#if XORG < 112
++ register char n;
+ swaps(&stuff->length, n);
++#else
++ swaps(&stuff->length);
++#endif
+ REQUEST_SIZE_MATCH(xVncExtSelectInputReq);
++#if XORG < 112
+ swapl(&stuff->window, n);
+ swapl(&stuff->mask, n);
++#else
++ swapl(&stuff->window);
++ swapl(&stuff->mask);
++#endif
+ return ProcVncExtSelectInput(client);
+ }
+
+@@ -893,9 +977,14 @@
+ rep.length = 0;
+ rep.sequenceNumber = client->sequence;
+ if (client->swapped) {
++#if XORG < 112
+ int n;
+ swaps(&rep.sequenceNumber, n);
+ swapl(&rep.length, n);
++#else
++ swaps(&rep.sequenceNumber);
++ swapl(&rep.length);
++#endif
+ }
+ WriteToClient(client, sizeof(xVncExtConnectReply), (char *)&rep);
+ return (client->noClientException);
+@@ -903,9 +992,13 @@
+
+ static int SProcVncExtConnect(ClientPtr client)
+ {
+- register char n;
+ REQUEST(xVncExtConnectReq);
++#if XORG < 112
++ register char n;
+ swaps(&stuff->length, n);
++#else
++ swaps(&stuff->length);
++#endif
+ REQUEST_AT_LEAST_SIZE(xVncExtConnectReq);
+ return ProcVncExtConnect(client);
+ }
+@@ -925,7 +1018,6 @@
+ qcTimeout = 0;
+
+ xVncExtGetQueryConnectReply rep;
+- int n;
+ rep.type = X_Reply;
+ rep.sequenceNumber = client->sequence;
+ rep.timeout = qcTimeout;
+@@ -934,11 +1026,20 @@
+ rep.opaqueId = (CARD32)(long)queryConnectId;
+ rep.length = (rep.userLen + rep.addrLen + 3) >> 2;
+ if (client->swapped) {
++#if XORG < 112
++ int n;
+ swaps(&rep.sequenceNumber, n);
+ swapl(&rep.userLen, n);
+ swapl(&rep.addrLen, n);
+ swapl(&rep.timeout, n);
+ swapl(&rep.opaqueId, n);
++#else
++ swaps(&rep.sequenceNumber);
++ swapl(&rep.userLen);
++ swapl(&rep.addrLen);
++ swapl(&rep.timeout);
++ swapl(&rep.opaqueId);
++#endif
+ }
+ WriteToClient(client, sizeof(xVncExtGetQueryConnectReply), (char *)&rep);
+ if (qcTimeout)
+@@ -950,9 +1051,13 @@
+
+ static int SProcVncExtGetQueryConnect(ClientPtr client)
+ {
+- register char n;
+ REQUEST(xVncExtGetQueryConnectReq);
++#if XORG < 112
++ register char n;
+ swaps(&stuff->length, n);
++#else
++ swaps(&stuff->length);
++#endif
+ REQUEST_SIZE_MATCH(xVncExtGetQueryConnectReq);
+ return ProcVncExtGetQueryConnect(client);
+ }
+@@ -977,10 +1082,15 @@
+
+ static int SProcVncExtApproveConnect(ClientPtr client)
+ {
+- register char n;
+ REQUEST(xVncExtApproveConnectReq);
++#if XORG < 112
++ register char n;
+ swaps(&stuff->length, n);
+ swapl(&stuff->opaqueId, n);
++#else
++ swaps(&stuff->length);
++ swapl(&stuff->opaqueId);
++#endif
+ REQUEST_SIZE_MATCH(xVncExtApproveConnectReq);
+ return ProcVncExtApproveConnect(client);
+ }
+diff -ur tigervnc-1.2.0.orig/unix/xserver/hw/vnc/xf86vncModule.cc tigervnc-1.2.0/unix/xserver/hw/vnc/xf86vncModule.cc
+--- tigervnc-1.2.0.orig/unix/xserver/hw/vnc/xf86vncModule.cc 2010-04-23 15:55:10.000000000 +0200
++++ tigervnc-1.2.0/unix/xserver/hw/vnc/xf86vncModule.cc 2012-04-15 12:18:57.820557239 +0200
+@@ -26,6 +26,8 @@
+ #include <rfb/Logger_stdio.h>
+ #include <rfb/LogWriter.h>
+
++#include "xorg-version.h"
++
+ extern "C" {
+ #define class c_class
+ #define private c_private
+@@ -89,7 +91,12 @@
+ ScrnInfoPtr pScrn = xf86Screens[scr];
+
+ for (ParameterIterator i(Configuration::global()); i.param; i.next()) {
+- char* val = xf86FindOptionValue(pScrn->options, i.param->getName());
++ const char *val;
++#if XORG < 112
++ val = xf86FindOptionValue(pScrn->options, i.param->getName());
++#else
++ val = xf86FindOptionValue((XF86OptionPtr)pScrn->options, i.param->getName());
++#endif
+ if (val)
+ i.param->setParam(val);
+ }
+diff -ur tigervnc-1.2.0.orig/unix/xserver/hw/vnc/xorg-version.h tigervnc-1.2.0/unix/xserver/hw/vnc/xorg-version.h
+--- tigervnc-1.2.0.orig/unix/xserver/hw/vnc/xorg-version.h 2012-04-15 12:18:21.272014160 +0200
++++ tigervnc-1.2.0/unix/xserver/hw/vnc/xorg-version.h 2012-04-15 12:18:57.821557227 +0200
+@@ -38,6 +38,8 @@
+ #define XORG 110
+ #elif XORG_VERSION_CURRENT < ((1 * 10000000) + (11 * 100000) + (99 * 1000))
+ #define XORG 111
++#elif XORG_VERSION_CURRENT < ((1 * 10000000) + (12 * 100000) + (99 * 1000))
++#define XORG 112
+ #else
+ #error "X.Org newer than 1.10 is not supported"
+ #endif
diff --git a/community/ulogd/PKGBUILD b/community/ulogd/PKGBUILD
index aa075e2e7..08863143a 100644
--- a/community/ulogd/PKGBUILD
+++ b/community/ulogd/PKGBUILD
@@ -1,4 +1,4 @@
-# $Id: PKGBUILD 73109 2012-07-01 18:54:55Z spupykin $
+# $Id: PKGBUILD 73943 2012-07-17 09:54:26Z spupykin $
# Maintainer: Sergej Pupykin <pupykin.s+arch@gmail.com>
# Maintainer: Sebastien Luttringer <seblu+arch@seblu.net>
# Contributor: Dale Blount <dale@archlinux.org>
@@ -6,7 +6,7 @@
pkgname=ulogd
pkgver=2.0.0
-pkgrel=2
+pkgrel=3
pkgdesc='Userspace Packet Logging for netfilter'
arch=('i686' 'x86_64')
url='http://www.netfilter.org/projects/ulogd/index.html'
@@ -23,7 +23,6 @@ optdepends=('postgresql-libs'
'libnetfilter_log'
'libnetfilter_conntrack')
options=('!libtool')
-backup=('etc/ulogd.conf')
source=("ftp://ftp.netfilter.org/pub/$pkgname/$pkgname-$pkgver.tar.bz2"
'rc'
'logrotate')
@@ -40,8 +39,7 @@ build() {
package() {
cd $pkgname-$pkgver
make DESTDIR="$pkgdir" install
- install -Dm0644 ulogd.conf $pkgdir/etc/ulogd.conf
- install -d -m 755 "$pkgdir/usr/share/ulogd"
+ install -Dm0644 ulogd.conf $pkgdir/usr/share/ulogd/ulogd.conf.sample
install -m644 doc/*.{table,sql} "$pkgdir/usr/share/ulogd"
install -D -m644 "$srcdir/logrotate" "$pkgdir/etc/logrotate.d/ulogd"
install -D -m755 "$srcdir/rc" "$pkgdir/etc/rc.d/ulogd"
diff --git a/community/vsftpd/PKGBUILD b/community/vsftpd/PKGBUILD
index 66c49e8b6..77da787b7 100644
--- a/community/vsftpd/PKGBUILD
+++ b/community/vsftpd/PKGBUILD
@@ -1,11 +1,11 @@
-# $Id: PKGBUILD 72800 2012-06-22 12:52:54Z dreisner $
+# $Id: PKGBUILD 73933 2012-07-17 06:43:49Z bpiotrowski $
# Maintainer: Bartłomiej Piotrowski <nospam@bpiotrowski.pl>
# Contributor: Andreas Radke <andyrtr@archlinux.org>
# Contributor: judd <jvinet@zeroflux.org>
pkgname=vsftpd
pkgver=3.0.0
-pkgrel=3
+pkgrel=4
pkgdesc="Very Secure FTP daemon"
arch=('i686' 'x86_64')
url="https://security.appspot.com/vsftpd.html"
@@ -22,9 +22,9 @@ sha1sums=('436da30cefa33e22a0266077ab95397e9432e297'
'24f268956c24e78be0c234c6d31f41487922eafe'
'f81dab50243f7e82dc9722ca79b2b24de0882eb2'
'5b7a7a1e0c04acfcc2dba1346557f1193b9905ba'
- 'f1fa8cfaab1541c1ce3bb4dab4f4b302e5c44b03'
+ 'cde3528825b073d3941c263e9e63b4c298a97c47'
'3a040a18893a5103a1d4a22e631ee247bde8c8d3'
- '08b2938dc81ee200b6d733a32f5565b9dbe170a3'
+ '2b0a778d7b2329a6d4c01a64ef6c7d90144cd3ab'
'e5bd183664008bb0cc0353d4efb2e8e92a365798')
build() {
diff --git a/community/wesnoth/PKGBUILD b/community/wesnoth/PKGBUILD
index 2ff3f497d..59f1044d1 100644
--- a/community/wesnoth/PKGBUILD
+++ b/community/wesnoth/PKGBUILD
@@ -1,4 +1,4 @@
-# $Id: PKGBUILD 71216 2012-05-25 05:03:12Z svenstaro $
+# $Id: PKGBUILD 74014 2012-07-18 01:09:28Z ibiru $
# Maintainer: Sven-Hendrik Haase <sh@lutzhaase.com>
# Contributor: Jan de Groot <jgc@archlinux.org>
# Contributor: Tobias Powalowski <tpowa@archlinux.org>
@@ -7,7 +7,7 @@
pkgname=wesnoth
pkgver=1.10.3
-pkgrel=1
+pkgrel=2
pkgdesc="A turn-based strategy game on a fantasy world"
arch=('i686' 'x86_64')
license=('GPL')
@@ -18,14 +18,18 @@ install=wesnoth.install
options=(!emptydirs)
source=(http://downloads.sourceforge.net/sourceforge/$pkgname/$pkgname-$pkgver.tar.bz2
wesnoth.tmpfiles.conf
- wesnothd.rc.d)
+ wesnothd.rc.d
+ boost_foreach.patch)
md5sums=('b25354c71d58f82c2c60cc12c6f09c36'
'b8122f5054e3895c9c054e87460869dc'
- '85659b47d22dfdf4e4d046556973fc3e')
+ '85659b47d22dfdf4e4d046556973fc3e'
+ '07e78c6ece06ed10119fc57ebc16ea9d')
build() {
cd "$srcdir/$pkgname-$pkgver"
+ patch -Np0 < $srcdir/boost_foreach.patch
+
mkdir build && cd build
cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr \
diff --git a/community/wesnoth/boost_foreach.patch b/community/wesnoth/boost_foreach.patch
new file mode 100644
index 000000000..95b98828e
--- /dev/null
+++ b/community/wesnoth/boost_foreach.patch
@@ -0,0 +1,11890 @@
+------------------------------------------------------------------------
+r54625 | loonycyborg | 2012-07-08 16:26:21 +0200 (So, 08 Jul 2012) | 5 lines
+
+Backport r54604: Use BOOST_FOREACH directly instead of #define foreach BOOST_FOREACH
+
+The define is extremely unreliable, will break compile with boost >=
+1.50 and upstream can't fix issues with it, see
+https://svn.boost.org/trac/boost/ticket/6131
+
+Index: src/foreach.hpp (deleted)
+===================================================================
+Index: src/scripting/lua.cpp
+===================================================================
+--- src/scripting/lua.cpp (revision 54624)
++++ src/scripting/lua.cpp (revision 54625)
+@@ -39,7 +39,6 @@
+ #include "ai/manager.hpp"
+ #include "attack_prediction.hpp"
+ #include "filesystem.hpp"
+-#include "foreach.hpp"
+ #include "game_display.hpp"
+ #include "game_preferences.hpp"
+ #include "gamestatus.hpp"
+@@ -77,6 +76,8 @@
+ #include "scripting/debug_lua.hpp"
+ #endif
+
++#include <boost/foreach.hpp>
++
+ static lg::log_domain log_scripting_lua("scripting/lua");
+ #define LOG_LUA LOG_STREAM(info, log_scripting_lua)
+ #define ERR_LUA LOG_STREAM(err, log_scripting_lua)
+@@ -87,7 +88,7 @@
+ void extract_preload_scripts(config const &game_config)
+ {
+ preload_scripts.clear();
+- foreach (config const &cfg, game_config.child_range("lua")) {
++ BOOST_FOREACH(config const &cfg, game_config.child_range("lua")) {
+ preload_scripts.push_back(cfg);
+ }
+ preload_config = game_config.child("game_config");
+@@ -254,7 +255,7 @@
+ return;
+
+ int k = 1;
+- foreach (const config::any_child &ch, cfg.all_children_range())
++ BOOST_FOREACH(const config::any_child &ch, cfg.all_children_range())
+ {
+ lua_createtable(L, 2, 0);
+ lua_pushstring(L, ch.key.c_str());
+@@ -264,7 +265,7 @@
+ lua_rawseti(L, -2, 2);
+ lua_rawseti(L, -2, k++);
+ }
+- foreach (const config::attribute &attr, cfg.attribute_range())
++ BOOST_FOREACH(const config::attribute &attr, cfg.attribute_range())
+ {
+ luaW_pushscalar(L, attr.second);
+ lua_setfield(L, -2, attr.first.c_str());
+@@ -534,7 +535,7 @@
+ {
+ if (ptr) return ptr;
+ if (side) {
+- foreach (unit &u, (*resources::teams)[side - 1].recall_list()) {
++ BOOST_FOREACH(unit &u, (*resources::teams)[side - 1].recall_list()) {
+ if (u.underlying_id() == uid) return &u;
+ }
+ return NULL;
+@@ -710,7 +711,7 @@
+ if (shallow_literal || strcmp(m, "__shallow_parsed") == 0)
+ {
+ lua_newtable(L);
+- foreach (const config::attribute &a, v->get_config().attribute_range()) {
++ BOOST_FOREACH(const config::attribute &a, v->get_config().attribute_range()) {
+ if (shallow_literal)
+ luaW_pushscalar(L, a.second);
+ else
+@@ -813,7 +814,7 @@
+ const std::vector<std::string>& vector = accessor; \
+ lua_createtable(L, vector.size(), 0); \
+ int i = 1; \
+- foreach (const std::string& s, vector) { \
++ BOOST_FOREACH(const std::string& s, vector) { \
+ lua_pushstring(L, s.c_str()); \
+ lua_rawseti(L, -2, i); \
+ ++i; \
+@@ -1292,9 +1293,9 @@
+ lua_rawget(L, LUA_REGISTRYINDEX);
+ lua_newtable(L);
+ int i = 1, s = 1;
+- foreach (team &t, *resources::teams)
++ BOOST_FOREACH(team &t, *resources::teams)
+ {
+- foreach (unit &u, t.recall_list())
++ BOOST_FOREACH(unit &u, t.recall_list())
+ {
+ if (!filter.null()) {
+ scoped_recall_unit auto_store("this_unit",
+@@ -1560,7 +1561,7 @@
+ std::set<std::string> const &recruits = t.recruits();
+ lua_createtable(L, recruits.size(), 0);
+ int i = 1;
+- foreach (std::string const &r, t.recruits()) {
++ BOOST_FOREACH(std::string const &r, t.recruits()) {
+ lua_pushstring(L, r.c_str());
+ lua_rawseti(L, -2, i++);
+ }
+@@ -3130,7 +3131,7 @@
+
+ lua_createtable(L, res.size(), 0);
+ int i = 1;
+- foreach (map_location const &loc, res)
++ BOOST_FOREACH(map_location const &loc, res)
+ {
+ lua_createtable(L, 2, 0);
+ lua_pushinteger(L, loc.x + 1);
+@@ -3227,7 +3228,7 @@
+ lua_rawget(L, LUA_REGISTRYINDEX);
+ lua_createtable(L, sides.size(), 0);
+ unsigned index = 1;
+- foreach(int side, sides) {
++ BOOST_FOREACH(int side, sides) {
+ // Create a full userdata containing a pointer to the team.
+ team** t = static_cast<team**>(lua_newuserdata(L, sizeof(team*)));
+ *t = &((*resources::teams)[side - 1]);
+@@ -3247,7 +3248,7 @@
+ static int intf_get_traits(lua_State* L)
+ {
+ lua_newtable(L);
+- foreach(const config& trait, unit_types.traits()) {
++ BOOST_FOREACH(const config& trait, unit_types.traits()) {
+ const std::string& id = trait["id"];
+ //It seems the engine does nowhere check the id field for emptyness or duplicates
+ //(also not later on).
+@@ -3767,7 +3768,7 @@
+ , static_cast<void *>(const_cast<char *>(&gettypeKey)));
+ lua_rawget(L, LUA_REGISTRYINDEX);
+ lua_newtable(L);
+- foreach (const unit_type_data::unit_type_map::value_type &ut, unit_types.types())
++ BOOST_FOREACH(const unit_type_data::unit_type_map::value_type &ut, unit_types.types())
+ {
+ lua_createtable(L, 0, 1);
+ lua_pushstring(L, ut.first.c_str());
+@@ -3786,7 +3787,7 @@
+ lua_rawget(L, LUA_REGISTRYINDEX);
+ const race_map& races = unit_types.races();
+ lua_createtable(L, 0, races.size());
+- foreach(const race_map::value_type &race, races)
++ BOOST_FOREACH(const race_map::value_type &race, races)
+ {
+ lua_createtable(L, 0, 1);
+ char const* id = race.first.c_str();
+@@ -3801,10 +3802,10 @@
+
+ // Execute the preload scripts.
+ game_config::load_config(preload_config);
+- foreach (const config &cfg, preload_scripts) {
++ BOOST_FOREACH(const config &cfg, preload_scripts) {
+ execute(cfg["code"].str().c_str(), 0, 0);
+ }
+- foreach (const config &cfg, level_.child_range("lua")) {
++ BOOST_FOREACH(const config &cfg, level_.child_range("lua")) {
+ execute(cfg["code"].str().c_str(), 0, 0);
+ }
+
+@@ -3822,7 +3823,7 @@
+
+ static bool is_handled_file_tag(const std::string &s)
+ {
+- foreach (char const *t, handled_file_tags) {
++ BOOST_FOREACH(char const *t, handled_file_tags) {
+ if (s == t) return true;
+ }
+ return false;
+@@ -3841,7 +3842,7 @@
+
+ lua_newtable(L);
+ int k = 1;
+- foreach (const config::any_child &v, level_.all_children_range())
++ BOOST_FOREACH(const config::any_child &v, level_.all_children_range())
+ {
+ if (is_handled_file_tag(v.key)) continue;
+ lua_createtable(L, 2, 0);
+@@ -3861,7 +3862,7 @@
+ */
+ void LuaKernel::save_game(config &cfg)
+ {
+- foreach (const config &v, level_.child_range("lua")) {
++ BOOST_FOREACH(const config &v, level_.child_range("lua")) {
+ cfg.add_child("lua", v);
+ }
+
+Index: src/dialogs.cpp
+===================================================================
+--- src/dialogs.cpp (revision 54624)
++++ src/dialogs.cpp (revision 54625)
+@@ -22,7 +22,6 @@
+
+ #include "actions.hpp"
+ #include "dialogs.hpp"
+-#include "foreach.hpp"
+ #include "game_events.hpp"
+ #include "game_display.hpp"
+ #include "game_preferences.hpp"
+@@ -49,6 +48,7 @@
+ #include "gui/dialogs/game_save.hpp"
+ #include "gui/dialogs/transient_message.hpp"
+
++#include <boost/foreach.hpp>
+
+ //#ifdef _WIN32
+ //#include "locale.h"
+@@ -95,7 +95,7 @@
+ }
+
+ bool always_display = false;
+- foreach (const config &mod, u->get_modification_advances())
++ BOOST_FOREACH(const config &mod, u->get_modification_advances())
+ {
+ if (mod["always_display"].to_bool()) always_display = true;
+ sample_units.push_back(::get_advanced_unit(*u, u->type_id()));
+@@ -1009,7 +1009,7 @@
+ }
+
+ //FIXME: This probably must be move into a unit_type function
+- foreach (const config &tr, t->possible_traits())
++ BOOST_FOREACH(const config &tr, t->possible_traits())
+ {
+ if (tr["availability"] != "musthave") continue;
+ std::string gender_string = (!t->genders().empty() && t->genders().front()== unit_race::FEMALE) ? "female_name" : "male_name";
+@@ -1038,7 +1038,7 @@
+ // Check if AMLA color is needed
+ // FIXME: not sure if it's fully accurate (but not very important for unit_type)
+ // xp_color also need a simpler function for doing this
+- foreach (const config &adv, t->modification_advancements())
++ BOOST_FOREACH(const config &adv, t->modification_advancements())
+ {
+ if (!adv["strict_amla"].to_bool() || !t->can_advance()) {
+ det.xp_color = "<170,0,255>"; // from unit::xp_color()
+Index: src/menu_events.cpp
+===================================================================
+--- src/menu_events.cpp (revision 54624)
++++ src/menu_events.cpp (revision 54625)
+@@ -27,7 +27,6 @@
+ #include "dialogs.hpp"
+ #include "formatter.hpp"
+ #include "filechooser.hpp"
+-#include "foreach.hpp"
+ #include "game_end_exceptions.hpp"
+ #include "game_events.hpp"
+ #include "game_preferences.hpp"
+@@ -66,6 +65,7 @@
+ #include "widgets/combo.hpp"
+
+ #include <boost/bind.hpp>
++#include <boost/foreach.hpp>
+
+ static lg::log_domain log_engine("engine");
+ #define ERR_NG LOG_STREAM(err, log_engine)
+@@ -863,7 +863,7 @@
+
+
+ DBG_WB <<"menu_handler::recall: Contents of wb-modified recall list:\n";
+- foreach(const unit* unit, recall_list_team)
++ BOOST_FOREACH(const unit* unit, recall_list_team)
+ {
+ DBG_WB << unit->name() << " [" << unit->id() <<"]\n";
+ }
+@@ -896,7 +896,7 @@
+ options.push_back(heading.str());
+ options_to_filter.push_back(options.back());
+
+- foreach (const unit* u, recall_list_team)
++ BOOST_FOREACH(const unit* u, recall_list_team)
+ {
+ std::stringstream option, option_to_filter;
+ std::string name = u->name();
+@@ -933,7 +933,7 @@
+ option_to_filter << u->type_name() << " " << name << " " << u->level();
+
+ option << COLUMN_SEPARATOR;
+- foreach (const t_string& trait, u->trait_names()) {
++ BOOST_FOREACH(const t_string& trait, u->trait_names()) {
+ option << trait << '\n';
+ option_to_filter << " " << trait;
+ }
+@@ -1540,7 +1540,7 @@
+ _("Type");
+ options.push_back(heading);
+
+- foreach (const unit_type_data::unit_type_map::value_type &i, unit_types.types())
++ BOOST_FOREACH(const unit_type_data::unit_type_map::value_type &i, unit_types.types())
+ {
+ std::stringstream row;
+
+@@ -2047,7 +2047,7 @@
+ std::vector<std::string> get_commands_list() const
+ {
+ std::vector<std::string> res;
+- foreach(typename command_map::value_type i, command_map_) {
++ BOOST_FOREACH(typename command_map::value_type i, command_map_) {
+ res.push_back(i.first);
+ }
+ return res;
+@@ -2638,7 +2638,7 @@
+
+ if (const config &alias_list = preferences::get_alias())
+ {
+- foreach (const config::attribute &a, alias_list.attribute_range()) {
++ BOOST_FOREACH(const config::attribute &a, alias_list.attribute_range()) {
+ register_alias(a.second, a.first);
+ }
+ }
+@@ -3241,7 +3241,7 @@
+ tile->rebuild_cache(tod_id, &tile_logs);
+
+ int order = 1;
+- foreach(const terrain_builder::tile::log_details det, tile_logs) {
++ BOOST_FOREACH(const terrain_builder::tile::log_details det, tile_logs) {
+ const terrain_builder::tile::rule_image_rand& ri = *det.first;
+ const terrain_builder::rule_image_variant& variant = *det.second;
+
+@@ -3356,7 +3356,7 @@
+ void console_handler::do_choose_level() {
+ std::vector<std::string> options;
+ int next = 0, nb = 0;
+- foreach (const config &sc, menu_handler_.game_config_.child_range("scenario"))
++ BOOST_FOREACH(const config &sc, menu_handler_.game_config_.child_range("scenario"))
+ {
+ const std::string &id = sc["id"];
+ options.push_back(id);
+@@ -3367,7 +3367,7 @@
+ // find scenarios of multiplayer campaigns
+ // (assumes that scenarios are ordered properly in the game_config)
+ std::string& scenario = menu_handler_.gamestate_.mp_settings().mp_scenario;
+- foreach (const config &mp, menu_handler_.game_config_.child_range("multiplayer"))
++ BOOST_FOREACH(const config &mp, menu_handler_.game_config_.child_range("multiplayer"))
+ {
+ if (mp["id"] == scenario)
+ {
+@@ -3596,7 +3596,7 @@
+ }
+ }*/
+ void console_handler::do_discover() {
+- foreach (const unit_type_data::unit_type_map::value_type &i, unit_types.types()) {
++ BOOST_FOREACH(const unit_type_data::unit_type_map::value_type &i, unit_types.types()) {
+ preferences::encountered_units().insert(i.second.id());
+ }
+ }
+Index: src/multiplayer_wait.cpp
+===================================================================
+--- src/multiplayer_wait.cpp (revision 54624)
++++ src/multiplayer_wait.cpp (revision 54625)
+@@ -16,7 +16,6 @@
+ #include "global.hpp"
+
+ #include "dialogs.hpp"
+-#include "foreach.hpp"
+ #include "gettext.hpp"
+ #include "game_preferences.hpp"
+ #include "gui/dialogs/transient_message.hpp"
+@@ -30,6 +29,8 @@
+ #include "wml_separators.hpp"
+ #include "formula_string_utils.hpp"
+
++#include <boost/foreach.hpp>
++
+ static lg::log_domain log_network("network");
+ #define DBG_NW LOG_STREAM(debug, log_network)
+ #define LOG_NW LOG_STREAM(info, log_network)
+@@ -222,7 +223,7 @@
+ //available side.
+ const config *side_choice = NULL;
+ int side_num = -1, nb_sides = 0;
+- foreach (const config &sd, level_.child_range("side"))
++ BOOST_FOREACH(const config &sd, level_.child_range("side"))
+ {
+ if (sd["controller"] == "reserved" && sd["current_player"] == preferences::login())
+ {
+@@ -275,7 +276,7 @@
+ color = game_config::color_info(color_str).index() - 1;
+
+ std::vector<const config *> leader_sides;
+- foreach (const config &side, possible_sides) {
++ BOOST_FOREACH(const config &side, possible_sides) {
+ leader_sides.push_back(&side);
+ }
+
+@@ -287,7 +288,7 @@
+ }
+
+ std::vector<std::string> choices;
+- foreach (const config *s, leader_sides)
++ BOOST_FOREACH(const config *s, leader_sides)
+ {
+ const config &side = *s;
+ const std::string &name = side["name"];
+@@ -442,7 +443,7 @@
+ std::vector<std::string> details;
+ std::vector<std::string> playerlist;
+
+- foreach (const config &sd, level_.child_range("side"))
++ BOOST_FOREACH(const config &sd, level_.child_range("side"))
+ {
+ if (!sd["allow_player"].to_bool(true)) {
+ continue;
+@@ -458,7 +459,7 @@
+ // Hack: if there is a unit which can recruit, use it as a
+ // leader. Necessary to display leader information when loading
+ // saves.
+- foreach (const config &side_unit, sd.child_range("unit"))
++ BOOST_FOREACH(const config &side_unit, sd.child_range("unit"))
+ {
+ if (side_unit["canrecruit"].to_bool()) {
+ leader_type = side_unit["type"].str();
+Index: src/serialization/schema_validator.cpp
+===================================================================
+--- src/serialization/schema_validator.cpp (revision 54624)
++++ src/serialization/schema_validator.cpp (revision 54625)
+@@ -17,12 +17,13 @@
+
+
+ #include "filesystem.hpp"
+-#include "foreach.hpp"
+ #include "gettext.hpp"
+ #include "log.hpp"
+ #include "serialization/preprocessor.hpp"
+ #include "wml_exception.hpp"
+
++#include <boost/foreach.hpp>
++
+ namespace schema_validation{
+
+ static lg::log_domain log_validation("validation");
+@@ -143,14 +144,14 @@
+ } catch(config::error&) {
+ return false;
+ }
+- foreach (const config &g, cfg.child_range("wml_schema")) {
+- foreach (const config &schema, g.child_range("tag")) {
++ BOOST_FOREACH(const config &g, cfg.child_range("wml_schema")) {
++ BOOST_FOREACH(const config &schema, g.child_range("tag")) {
+ if (schema["name"].str() == "root"){
+ //@NOTE Don't know, maybe merging of roots needed.
+ root_ = class_tag (schema);
+ }
+ }
+- foreach (const config &type, g.child_range("type")) {
++ BOOST_FOREACH(const config &type, g.child_range("type")) {
+ try{
+ types_[type["name"].str()] = boost::regex( type["value"].str());
+ }
+Index: src/serialization/preprocessor.cpp
+===================================================================
+--- src/serialization/preprocessor.cpp (revision 54624)
++++ src/serialization/preprocessor.cpp (revision 54625)
+@@ -23,7 +23,6 @@
+
+ #include "config.hpp"
+ #include "filesystem.hpp"
+-#include "foreach.hpp"
+ #include "game_config.hpp"
+ #include "log.hpp"
+ #include "wesconfig.h"
+@@ -34,6 +33,8 @@
+ #include "util.hpp"
+ #include "version.hpp"
+
++#include <boost/foreach.hpp>
++
+ #include <stdexcept>
+
+ static lg::log_domain log_config("config");
+@@ -64,7 +65,7 @@
+ int n = 0;
+ s >> std::hex >> n;
+
+- foreach(const t_file_number_map::value_type& p, file_number_map){
++ BOOST_FOREACH(const t_file_number_map::value_type& p, file_number_map){
+ if(p.second == n)
+ return p.first;
+ }
+@@ -142,7 +143,7 @@
+ writer.write_key_val("linenum", lexical_cast<std::string>(linenum));
+ writer.write_key_val("location", get_location(location));
+
+- foreach (const std::string &arg, arguments)
++ BOOST_FOREACH(const std::string &arg, arguments)
+ write_argument(writer, arg);
+
+ writer.close_child(key);
+@@ -160,7 +161,7 @@
+ linenum = cfg["linenum"];
+ location = cfg["location"].str();
+
+- foreach (const config &arg, cfg.child_range("argument"))
++ BOOST_FOREACH(const config &arg, cfg.child_range("argument"))
+ read_argument(arg);
+ }
+
+@@ -1157,14 +1158,14 @@
+ get_files_in_dir(res_name, &files, &dirs, ENTIRE_FILE_PATH, SKIP_MEDIA_DIR, DO_REORDER);
+
+ // subdirectories
+- foreach(const std::string& dir, dirs)
++ BOOST_FOREACH(const std::string& dir, dirs)
+ {
+ LOG_PREPROC<<"processing sub-dir: "<<dir<<'\n';
+ preprocess_resource(dir,defines_map,write_cfg,write_plain_cfg,target_directory);
+ }
+
+ // files in current directory
+- foreach(const std::string& file, files)
++ BOOST_FOREACH(const std::string& file, files)
+ {
+ preprocess_resource(file,defines_map,write_cfg,write_plain_cfg,target_directory);
+ }
+Index: src/serialization/parser.cpp
+===================================================================
+--- src/serialization/parser.cpp (revision 54624)
++++ src/serialization/parser.cpp (revision 54625)
+@@ -32,7 +32,6 @@
+ #include "serialization/tokenizer.hpp"
+ #include "serialization/string_utils.hpp"
+ #include "serialization/validator.hpp"
+-#include "foreach.hpp"
+
+ #include <stack>
+
+@@ -40,6 +39,7 @@
+ #include <boost/iostreams/filter/gzip.hpp>
+ #include <boost/algorithm/string/replace.hpp>
+ #include <boost/variant.hpp>
++#include <boost/foreach.hpp>
+
+ static lg::log_domain log_config("config");
+ #define ERR_CF LOG_STREAM(err, log_config)
+@@ -343,7 +343,7 @@
+ {
+ i18n_symbols["pos"] = ::lineno_string(lineno);
+ std::string result = _(error_string);
+- foreach(utils::string_map::value_type& var, i18n_symbols)
++ BOOST_FOREACH(utils::string_map::value_type& var, i18n_symbols)
+ boost::algorithm::replace_all(result, std::string("$") + var.first, std::string(var.second));
+ return result;
+ }
+@@ -503,11 +503,11 @@
+ if (tab > max_recursion_levels)
+ throw config::error("Too many recursion levels in config write");
+
+- foreach (const config::attribute &i, cfg.attribute_range()) {
++ BOOST_FOREACH(const config::attribute &i, cfg.attribute_range()) {
+ write_key_val(out, i.first, i.second, tab, textdomain);
+ }
+
+- foreach (const config::any_child &item, cfg.all_children_range())
++ BOOST_FOREACH(const config::any_child &item, cfg.all_children_range())
+ {
+ write_open_child(out, item.key, tab);
+ write_internal(item.cfg, out, textdomain, tab + 1);
+Index: src/game_controller_abstract.cpp
+===================================================================
+--- src/game_controller_abstract.cpp (revision 54624)
++++ src/game_controller_abstract.cpp (revision 54625)
+@@ -15,7 +15,6 @@
+
+ #include "game_controller_abstract.hpp"
+
+-#include "foreach.hpp"
+ #include "game_display.hpp"
+ #include "gettext.hpp"
+ #include "hotkeys.hpp"
+@@ -24,6 +23,8 @@
+
+ #include "preferences.hpp"
+
++#include <boost/foreach.hpp>
++
+ #include <iostream>
+
+ game_controller_abstract::game_controller_abstract(const commandline_options &cmdline_opts) :
+@@ -80,7 +81,7 @@
+ language_def locale;
+ if(cmdline_opts_.language) {
+ std::vector<language_def> langs = get_languages();
+- foreach(const language_def & def, langs) {
++ BOOST_FOREACH(const language_def & def, langs) {
+ if(def.localename == *cmdline_opts_.language) {
+ locale = def;
+ break;
+Index: src/terrain.cpp
+===================================================================
+--- src/terrain.cpp (revision 54624)
++++ src/terrain.cpp (revision 54625)
+@@ -15,13 +15,14 @@
+
+ #include "global.hpp"
+
+-#include "foreach.hpp"
+ #include "gettext.hpp"
+ #include "log.hpp"
+ #include "serialization/string_utils.hpp"
+ #include "terrain.hpp"
+ #include "util.hpp"
+
++#include <boost/foreach.hpp>
++
+ #include <set>
+
+ static lg::log_domain log_config("config");
+@@ -284,7 +285,7 @@
+ t_translation::t_list& terrain_list,
+ std::map<t_translation::t_terrain, terrain_type>& letter_to_terrain)
+ {
+- foreach (const config &t, cfgs)
++ BOOST_FOREACH(const config &t, cfgs)
+ {
+ terrain_type terrain(t);
+ DBG_G << "create_terrain_maps: " << terrain.number() << " "
+@@ -301,9 +302,9 @@
+ std::vector<std::string> eg2 = utils::split(terrain.editor_group());
+ std::set<std::string> egs;
+ bool clean_merge = true;
+- foreach(std::string& t, eg1)
++ BOOST_FOREACH(std::string& t, eg1)
+ clean_merge &= egs.insert(t).second;
+- foreach(std::string& t, eg2)
++ BOOST_FOREACH(std::string& t, eg2)
+ clean_merge &= egs.insert(t).second;
+
+ std::string joined = utils::join(egs);
+Index: src/config.cpp
+===================================================================
+--- src/config.cpp (revision 54624)
++++ src/config.cpp (revision 54625)
+@@ -22,7 +22,6 @@
+ #include "global.hpp"
+
+ #include "config.hpp"
+-#include "foreach.hpp"
+ #include "log.hpp"
+ #include "serialization/string_utils.hpp"
+ #include "util.hpp"
+@@ -31,6 +30,7 @@
+ #include <cstring>
+ #include <deque>
+ #include <boost/variant.hpp>
++#include <boost/foreach.hpp>
+
+ static lg::log_domain log_config("config");
+ #define ERR_CF LOG_STREAM(err, log_config)
+@@ -255,7 +255,7 @@
+ {
+ check_valid(cfg);
+
+- foreach (const any_child &value, cfg.all_children_range()) {
++ BOOST_FOREACH(const any_child &value, cfg.all_children_range()) {
+ add_child(value.key, value.cfg);
+ }
+ }
+@@ -263,7 +263,7 @@
+ void config::append(const config &cfg)
+ {
+ append_children(cfg);
+- foreach (const attribute &v, cfg.values) {
++ BOOST_FOREACH(const attribute &v, cfg.values) {
+ values[v.first] = v.second;
+ }
+ }
+@@ -275,7 +275,7 @@
+ if (child_count(key) < 2) return;
+
+ config merged_children;
+- foreach (const config &cfg, child_range(key)) {
++ BOOST_FOREACH(const config &cfg, child_range(key)) {
+ merged_children.append(cfg);
+ }
+
+@@ -291,7 +291,7 @@
+
+ typedef std::map<std::string, config> config_map;
+ config_map merged_children_map;
+- foreach (const config &cfg, child_range(key)) {
++ BOOST_FOREACH(const config &cfg, child_range(key)) {
+ const std::string &value = cfg[attribute];
+ config_map::iterator m = merged_children_map.find(value);
+ if ( m!=merged_children_map.end() ) {
+@@ -302,7 +302,7 @@
+ }
+
+ clear_children(key);
+- foreach (const config_map::value_type &i, merged_children_map) {
++ BOOST_FOREACH(const config_map::value_type &i, merged_children_map) {
+ add_child(key,i.second);
+ }
+ }
+@@ -459,7 +459,7 @@
+ ordered_children.erase(std::remove_if(ordered_children.begin(),
+ ordered_children.end(), remove_ordered(i)), ordered_children.end());
+
+- foreach (config *c, i->second) {
++ BOOST_FOREACH(config *c, i->second) {
+ delete c;
+ }
+
+@@ -495,7 +495,7 @@
+
+ values.erase(key);
+
+- foreach (const any_child &value, all_children_range()) {
++ BOOST_FOREACH(const any_child &value, all_children_range()) {
+ const_cast<config *>(&value.cfg)->recursive_clear_value(key);
+ }
+ }
+@@ -506,7 +506,7 @@
+ /* Find the position with the correct index and decrement all the
+ indices in the ordering that are above this index. */
+ unsigned found = 0;
+- foreach (child_pos &p, ordered_children)
++ BOOST_FOREACH(child_pos &p, ordered_children)
+ {
+ if (p.pos != pos) continue;
+ if (p.index == index)
+@@ -590,7 +590,7 @@
+ check_valid(cfg);
+
+ assert(this != &cfg);
+- foreach (const attribute &v, cfg.values) {
++ BOOST_FOREACH(const attribute &v, cfg.values) {
+ values[v.first] = v.second;
+ }
+ }
+@@ -860,21 +860,21 @@
+ if (track) values[diff_track_attribute] = "modified";
+
+ if (const config &inserts = diff.child("insert")) {
+- foreach (const attribute &v, inserts.attribute_range()) {
++ BOOST_FOREACH(const attribute &v, inserts.attribute_range()) {
+ values[v.first] = v.second;
+ }
+ }
+
+ if (const config &deletes = diff.child("delete")) {
+- foreach (const attribute &v, deletes.attribute_range()) {
++ BOOST_FOREACH(const attribute &v, deletes.attribute_range()) {
+ values.erase(v.first);
+ }
+ }
+
+- foreach (const config &i, diff.child_range("change_child"))
++ BOOST_FOREACH(const config &i, diff.child_range("change_child"))
+ {
+ const size_t index = lexical_cast<size_t>(i["index"].str());
+- foreach (const any_child &item, i.all_children_range())
++ BOOST_FOREACH(const any_child &item, i.all_children_range())
+ {
+ if (item.key.empty()) {
+ continue;
+@@ -889,19 +889,19 @@
+ }
+ }
+
+- foreach (const config &i, diff.child_range("insert_child"))
++ BOOST_FOREACH(const config &i, diff.child_range("insert_child"))
+ {
+ const size_t index = lexical_cast<size_t>(i["index"].str());
+- foreach (const any_child &item, i.all_children_range()) {
++ BOOST_FOREACH(const any_child &item, i.all_children_range()) {
+ config& inserted = add_child_at(item.key, item.cfg, index);
+ if (track) inserted[diff_track_attribute] = "new";
+ }
+ }
+
+- foreach (const config &i, diff.child_range("delete_child"))
++ BOOST_FOREACH(const config &i, diff.child_range("delete_child"))
+ {
+ const size_t index = lexical_cast<size_t>(i["index"].str());
+- foreach (const any_child &item, i.all_children_range()) {
++ BOOST_FOREACH(const any_child &item, i.all_children_range()) {
+ if (!track) {
+ remove_child(item.key, index);
+ } else {
+@@ -918,18 +918,18 @@
+ void config::clear_diff_track(const config& diff)
+ {
+ remove_attribute(diff_track_attribute);
+- foreach (const config &i, diff.child_range("delete_child"))
++ BOOST_FOREACH(const config &i, diff.child_range("delete_child"))
+ {
+ const size_t index = lexical_cast<size_t>(i["index"].str());
+- foreach (const any_child &item, i.all_children_range()) {
++ BOOST_FOREACH(const any_child &item, i.all_children_range()) {
+ remove_child(item.key, index);
+ }
+ }
+
+- foreach (const config &i, diff.child_range("change_child"))
++ BOOST_FOREACH(const config &i, diff.child_range("change_child"))
+ {
+ const size_t index = lexical_cast<size_t>(i["index"].str());
+- foreach (const any_child &item, i.all_children_range())
++ BOOST_FOREACH(const any_child &item, i.all_children_range())
+ {
+ if (item.key.empty()) {
+ continue;
+@@ -943,7 +943,7 @@
+ itor->second[index]->clear_diff_track(item.cfg);
+ }
+ }
+- foreach (const any_child &value, all_children_range()) {
++ BOOST_FOREACH(const any_child &value, all_children_range()) {
+ const_cast<config *>(&value.cfg)->remove_attribute(diff_track_attribute);
+ }
+ }
+@@ -984,20 +984,20 @@
+ {
+ check_valid(filter);
+
+- foreach (const attribute &i, filter.attribute_range())
++ BOOST_FOREACH(const attribute &i, filter.attribute_range())
+ {
+ const attribute_value *v = get(i.first);
+ if (!v || *v != i.second) return false;
+ }
+
+- foreach (const any_child &i, filter.all_children_range())
++ BOOST_FOREACH(const any_child &i, filter.all_children_range())
+ {
+ if (i.key == "not") {
+ if (matches(i.cfg)) return false;
+ continue;
+ }
+ bool found = false;
+- foreach (const config &j, child_range(i.key)) {
++ BOOST_FOREACH(const config &j, child_range(i.key)) {
+ if (j.matches(i.cfg)) {
+ found = true;
+ break;
+@@ -1021,11 +1021,11 @@
+ {
+ static int i = 0;
+ i++;
+- foreach (const config::attribute &val, cfg.attribute_range()) {
++ BOOST_FOREACH(const config::attribute &val, cfg.attribute_range()) {
+ for (int j = 0; j < i-1; j++){ outstream << char(9); }
+ outstream << val.first << " = " << val.second << '\n';
+ }
+- foreach (const config::any_child &child, cfg.all_children_range())
++ BOOST_FOREACH(const config::any_child &child, cfg.all_children_range())
+ {
+ for (int j = 0; j < i - 1; ++j) outstream << char(9);
+ outstream << "[" << child.key << "]\n";
+@@ -1054,7 +1054,7 @@
+ hash_str[hash_length] = 0;
+
+ i = 0;
+- foreach (const attribute &val, values)
++ BOOST_FOREACH(const attribute &val, values)
+ {
+ for (c = val.first.begin(); c != val.first.end(); ++c) {
+ hash_str[i] ^= *c;
+@@ -1067,10 +1067,10 @@
+ }
+ }
+
+- foreach (const any_child &ch, all_children_range())
++ BOOST_FOREACH(const any_child &ch, all_children_range())
+ {
+ std::string child_hash = ch.cfg.hash();
+- foreach (char c, child_hash) {
++ BOOST_FOREACH(char c, child_hash) {
+ hash_str[i] ^= c;
+ ++i;
+ if(i == hash_length) {
+Index: src/soundsource.cpp
+===================================================================
+--- src/soundsource.cpp (revision 54624)
++++ src/soundsource.cpp (revision 54625)
+@@ -17,7 +17,6 @@
+
+
+ #include "display.hpp"
+-#include "foreach.hpp"
+ #include "log.hpp"
+ #include "serialization/string_utils.hpp"
+ #include "sound.hpp"
+Index: src/sound.cpp
+===================================================================
+--- src/sound.cpp (revision 54624)
++++ src/sound.cpp (revision 54625)
+@@ -17,7 +17,6 @@
+
+ #include "config.hpp"
+ #include "filesystem.hpp"
+-#include "foreach.hpp"
+ #include "game_preferences.hpp"
+ #include "log.hpp"
+ #include "serialization/string_utils.hpp"
+@@ -27,6 +26,8 @@
+
+ #include "SDL_mixer.h"
+
++#include <boost/foreach.hpp>
++
+ #include <list>
+
+ static lg::log_domain log_audio("audio");
+@@ -596,7 +597,7 @@
+ return;
+
+ // If current track no longer on playlist, change it.
+- foreach (const music_track &m, current_track_list) {
++ BOOST_FOREACH(const music_track &m, current_track_list) {
+ if (current_track == m)
+ return;
+ }
+@@ -614,7 +615,7 @@
+ {
+ // First entry clears playlist, others append to it.
+ bool append = false;
+- foreach (music_track &m, current_track_list) {
++ BOOST_FOREACH(music_track &m, current_track_list) {
+ m.write(snapshot, append);
+ append = true;
+ }
+Index: src/game_preferences.cpp
+===================================================================
+--- src/game_preferences.cpp (revision 54624)
++++ src/game_preferences.cpp (revision 54625)
+@@ -17,7 +17,6 @@
+
+ #define GETTEXT_DOMAIN "wesnoth-lib"
+
+-#include "foreach.hpp"
+ #include "game_display.hpp"
+ #include "game_preferences.hpp"
+ #include "gamestatus.hpp"
+@@ -31,6 +30,8 @@
+ #include "unit_map.hpp"
+ #include "wml_exception.hpp"
+
++#include <boost/foreach.hpp>
++
+ static lg::log_domain log_config("config");
+ #define ERR_CFG LOG_STREAM(err , log_config)
+
+@@ -112,9 +113,9 @@
+ message = foobar
+ [/line]
+ */
+- foreach (const config::any_child &h, history.all_children_range())
++ BOOST_FOREACH(const config::any_child &h, history.all_children_range())
+ {
+- foreach (const config &l, h.cfg.child_range("line")) {
++ BOOST_FOREACH(const config &l, h.cfg.child_range("line")) {
+ history_map[h.key].push_back(l["message"]);
+ }
+ }
+@@ -142,10 +143,10 @@
+ */
+ config history;
+ typedef std::pair<std::string, std::vector<std::string> > hack;
+- foreach(const hack& history_id, history_map) {
++ BOOST_FOREACH(const hack& history_id, history_map) {
+
+ config history_id_cfg; // [history_id]
+- foreach(const std::string& line, history_id.second) {
++ BOOST_FOREACH(const std::string& line, history_id.second) {
+ config cfg; // [line]
+
+ cfg["message"] = line;
+@@ -314,7 +315,7 @@
+ std::vector<game_config::server_info> &game_servers = game_config::server_list;
+ VALIDATE(!game_servers.empty(), _("No server has been defined."));
+ pref_servers.insert(pref_servers.begin(), game_servers.begin(), game_servers.end());
+- foreach (const config &server, get_prefs()->child_range("server")) {
++ BOOST_FOREACH(const config &server, get_prefs()->child_range("server")) {
+ game_config::server_info sinf;
+ sinf.name = server["name"].str();
+ sinf.address = server["address"].str();
+@@ -945,8 +946,8 @@
+ }
+
+ void encounter_recallable_units(std::vector<team>& teams){
+- foreach(const team& t, teams) {
+- foreach(const unit& u, t.recall_list()) {
++ BOOST_FOREACH(const team& t, teams) {
++ BOOST_FOREACH(const unit& u, t.recall_list()) {
+ encountered_units_set.insert(u.type_id());
+ }
+ }
+Index: src/map_label.cpp
+===================================================================
+--- src/map_label.cpp (revision 54624)
++++ src/map_label.cpp (revision 54625)
+@@ -16,12 +16,13 @@
+ #include "global.hpp"
+
+ #include "display.hpp"
+-#include "foreach.hpp"
+ #include "gamestatus.hpp"
+ #include "map_label.hpp"
+ #include "resources.hpp"
+ #include "formula_string_utils.hpp"
+
++#include <boost/foreach.hpp>
++
+ //our definition of map labels being obscured is if the tile is obscured,
+ //or the tile below is obscured. This is because in the case where the tile
+ //itself is visible, but the tile below is obscured, the bottom half of the
+@@ -59,7 +60,7 @@
+ {
+ clear_all();
+
+- foreach (const config &i, cfg.child_range("label"))
++ BOOST_FOREACH(const config &i, cfg.child_range("label"))
+ {
+ const map_location loc(i, resources::state_of_game);
+ terrain_label *label = new terrain_label(*this, i);
+@@ -222,7 +223,7 @@
+
+ void map_labels::clear_all()
+ {
+- foreach (team_label_map::value_type &m, labels_)
++ BOOST_FOREACH(team_label_map::value_type &m, labels_)
+ {
+ clear_map(m.second, true);
+ }
+@@ -231,9 +232,9 @@
+
+ void map_labels::recalculate_labels()
+ {
+- foreach (team_label_map::value_type &m, labels_)
++ BOOST_FOREACH(team_label_map::value_type &m, labels_)
+ {
+- foreach (label_map::value_type &l, m.second)
++ BOOST_FOREACH(label_map::value_type &l, m.second)
+ {
+ l.second->recalculate();
+ }
+@@ -249,9 +250,9 @@
+
+ void map_labels::recalculate_shroud()
+ {
+- foreach (team_label_map::value_type &m, labels_)
++ BOOST_FOREACH(team_label_map::value_type &m, labels_)
+ {
+- foreach (label_map::value_type &l, m.second)
++ BOOST_FOREACH(label_map::value_type &l, m.second)
+ {
+ l.second->calculate_shroud();
+ }
+Index: src/actions.cpp
+===================================================================
+--- src/actions.cpp (revision 54624)
++++ src/actions.cpp (revision 54625)
+@@ -21,7 +21,6 @@
+ #include "actions.hpp"
+
+ #include "attack_prediction.hpp"
+-#include "foreach.hpp"
+ #include "game_display.hpp"
+ #include "game_events.hpp"
+ #include "game_preferences.hpp"
+@@ -40,6 +39,7 @@
+ #include "whiteboard/manager.hpp"
+
+ #include <boost/bind.hpp>
++#include <boost/foreach.hpp>
+
+ static lg::log_domain log_engine("engine");
+ #define DBG_NG LOG_STREAM(debug, log_engine)
+@@ -206,7 +206,7 @@
+ placements.push_back("map");
+ placements.push_back("recall");
+
+- foreach(std::string place, placements) {
++ BOOST_FOREACH(std::string place, placements) {
+ map_location loc;
+ bool pass((place == "leader_passable") || (place == "map_passable"));
+
+@@ -417,7 +417,7 @@
+ leader_in_place= true;
+ else continue;
+
+- foreach (const unit& recall_unit, recall_list)
++ BOOST_FOREACH(const unit& recall_unit, recall_list)
+ {
+ //Only units which match the leaders recall filter are valid.
+ scoped_recall_unit this_unit("this_unit", t.save_id(), &recall_unit - &recall_list[0]);
+@@ -435,7 +435,7 @@
+ }
+
+ if (!(recall_loc_is_castle && leader_in_place)) {
+- foreach (const unit &recall, recall_list)
++ BOOST_FOREACH(const unit &recall, recall_list)
+ {
+ result.push_back(&recall);
+ }
+@@ -546,7 +546,7 @@
+
+ bool can_recruit_unit = is_on_team_list;
+ if (!can_recruit_unit) {
+- foreach (const std::string &recruitable, leader->recruits()) {
++ BOOST_FOREACH(const std::string &recruitable, leader->recruits()) {
+ if (recruitable == unit_type) {
+ can_recruit_unit = true;
+ break;
+@@ -1925,7 +1925,7 @@
+ // Simple algorithm: no maximum number of patients per healer.
+ void reset_resting(unit_map& units, int side)
+ {
+- foreach (unit &u, units) {
++ BOOST_FOREACH(unit &u, units) {
+ if (u.side() == side)
+ u.set_resting(true);
+ }
+@@ -1946,7 +1946,7 @@
+ std::list<unit_healing_struct> l;
+
+ // We look for all allied units, then we see if our healer is near them.
+- foreach (unit &u, units) {
++ BOOST_FOREACH(unit &u, units) {
+
+ if (u.get_state("unhealable") || u.incapacitated())
+ continue;
+@@ -2307,7 +2307,7 @@
+ }
+
+ pathfind::paths p(*resources::game_map, *resources::units, loc, *resources::teams, true, false, tm, 0, false, true);
+- foreach (const pathfind::paths::step &dest, p.destinations) {
++ BOOST_FOREACH(const pathfind::paths::step &dest, p.destinations) {
+ clear_shroud_loc(tm, dest.curr, &cleared_locations);
+ }
+
+@@ -2350,7 +2350,7 @@
+
+ tm.refog();
+
+- foreach (unit &u, *resources::units)
++ BOOST_FOREACH(unit &u, *resources::units)
+ {
+ if (u.side() == side) {
+ const unit_movement_resetter move_resetter(u);
+@@ -2372,7 +2372,7 @@
+
+ bool result = false;
+
+- foreach (unit &u, *resources::units)
++ BOOST_FOREACH(unit &u, *resources::units)
+ {
+ if (u.side() == side) {
+ const unit_movement_resetter move_resetter(u);
+@@ -2435,7 +2435,7 @@
+
+ std::set<map_location> known_units;
+ if(check_shroud) {
+- foreach (const unit &u, units) {
++ BOOST_FOREACH(const unit &u, units) {
+ if (!tm->fogged(u.get_location())) {
+ known_units.insert(u.get_location());
+ tm->see(u.side() - 1);
+@@ -2860,7 +2860,7 @@
+ */
+
+ std::set<map_location> known_units;
+- foreach (const unit &u, units) {
++ BOOST_FOREACH(const unit &u, units) {
+ if (!tm.fogged(u.get_location())) {
+ known_units.insert(u.get_location());
+ }
+Index: src/font.cpp
+===================================================================
+--- src/font.cpp (revision 54624)
++++ src/font.cpp (revision 54625)
+@@ -21,7 +21,6 @@
+ #include "config.hpp"
+ #include "filesystem.hpp"
+ #include "font.hpp"
+-#include "foreach.hpp"
+ #include "game_config.hpp"
+ #include "log.hpp"
+ #include "marked-up_text.hpp"
+@@ -32,6 +31,8 @@
+ #include "serialization/preprocessor.hpp"
+ #include "serialization/string_utils.hpp"
+
++#include <boost/foreach.hpp>
++
+ #include <list>
+ #include <set>
+ #include <stack>
+@@ -355,10 +356,10 @@
+ #endif
+
+ #if CAIRO_HAS_WIN32_FONT
+- foreach(const std::string& path, get_binary_paths("fonts")) {
++ BOOST_FOREACH(const std::string& path, get_binary_paths("fonts")) {
+ std::vector<std::string> files;
+ get_files_in_dir(path, &files, NULL, ENTIRE_FILE_PATH);
+- foreach(const std::string& file, files)
++ BOOST_FOREACH(const std::string& file, files)
+ if(file.substr(file.length() - 4) == ".ttf" || file.substr(file.length() - 4) == ".ttc")
+ AddFontResource(file.c_str());
+ }
+@@ -372,10 +373,10 @@
+ #endif
+
+ #if CAIRO_HAS_WIN32_FONT
+- foreach(const std::string& path, get_binary_paths("fonts")) {
++ BOOST_FOREACH(const std::string& path, get_binary_paths("fonts")) {
+ std::vector<std::string> files;
+ get_files_in_dir(path, &files, NULL, ENTIRE_FILE_PATH);
+- foreach(const std::string& file, files)
++ BOOST_FOREACH(const std::string& file, files)
+ if(file.substr(file.length() - 4) == ".ttf" || file.substr(file.length() - 4) == ".ttc")
+ RemoveFontResource(file.c_str());
+ }
+@@ -425,7 +426,7 @@
+ const subset_id subset = font_names.size();
+ font_names.push_back(itor->name);
+
+- foreach (const subset_descriptor::range &cp_range, itor->present_codepoints) {
++ BOOST_FOREACH(const subset_descriptor::range &cp_range, itor->present_codepoints) {
+ char_blocks.insert(cp_range.first, cp_range.second, subset);
+ }
+ }
+@@ -582,7 +583,7 @@
+ w_ = 0;
+ h_ = 0;
+
+- foreach (text_chunk const &chunk, chunks_)
++ BOOST_FOREACH(text_chunk const &chunk, chunks_)
+ {
+ TTF_Font* ttfont = get_font(font_id(chunk.subset, font_size_));
+ if(ttfont == NULL)
+@@ -628,7 +629,7 @@
+ if(width() > max_text_line_width)
+ return surfs_;
+
+- foreach (text_chunk const &chunk, chunks_)
++ BOOST_FOREACH(text_chunk const &chunk, chunks_)
+ {
+ TTF_Font* ttfont = get_font(font_id(chunk.subset, font_size_));
+ if (ttfont == NULL)
+@@ -1261,7 +1262,7 @@
+ return false;
+
+ std::set<std::string> known_fonts;
+- foreach (const config &font, fonts_config.child_range("font")) {
++ BOOST_FOREACH(const config &font, fonts_config.child_range("font")) {
+ known_fonts.insert(font["name"]);
+ }
+
+Index: src/unit_animation.cpp
+===================================================================
+--- src/unit_animation.cpp (revision 54624)
++++ src/unit_animation.cpp (revision 54625)
+@@ -17,7 +17,6 @@
+
+ #include "unit_animation.hpp"
+
+-#include "foreach.hpp"
+ #include "game_display.hpp"
+ #include "halo.hpp"
+ #include "map.hpp"
+@@ -26,6 +25,8 @@
+ #include "resources.hpp"
+ #include "play_controller.hpp"
+
++#include <boost/foreach.hpp>
++
+ #include <algorithm>
+
+ struct tag_name_manager {
+@@ -78,7 +79,7 @@
+ config merge() const
+ {
+ config result = attributes;
+- foreach (const config::all_children_iterator &i, children)
++ BOOST_FOREACH(const config::all_children_iterator &i, children)
+ result.add_child(i->key, i->cfg);
+ return result;
+ }
+@@ -99,7 +100,7 @@
+ animation_cursor(const config &cfg, animation_cursor *p):
+ itors(cfg.all_children_range()), branches(p->branches), parent(p)
+ {
+- foreach (animation_branch &ab, branches)
++ BOOST_FOREACH(animation_branch &ab, branches)
+ ab.attributes.merge_attributes(cfg);
+ }
+ };
+@@ -122,7 +123,7 @@
+ if (ac.itors.first->key != "if")
+ {
+ // Append current config object to all the branches in scope.
+- foreach (animation_branch &ab, ac.branches) {
++ BOOST_FOREACH(animation_branch &ab, ac.branches) {
+ ab.children.push_back(ac.itors.first);
+ }
+ ++ac.itors.first;
+@@ -154,7 +155,7 @@
+ static animation_branches prepare_animation(const config &cfg, const std::string &animation_tag)
+ {
+ animation_branches expanded_animations;
+- foreach (const config &anim, cfg.child_range(animation_tag)) {
++ BOOST_FOREACH(const config &anim, cfg.child_range(animation_tag)) {
+ prepare_single_animation(anim, expanded_animations);
+ }
+ return expanded_animations;
+@@ -207,7 +208,7 @@
+ overlaped_hex_()
+ {
+ // if(!cfg["debug"].empty()) printf("DEBUG WML: FINAL\n%s\n\n",cfg.debug().c_str());
+- foreach (const config::any_child &fr, cfg.all_children_range())
++ BOOST_FOREACH(const config::any_child &fr, cfg.all_children_range())
+ {
+ if (fr.key == frame_string) continue;
+ if (fr.key.find("_frame", fr.key.size() - 6) == std::string::npos) continue;
+@@ -221,11 +222,11 @@
+ const map_location::DIRECTION d = map_location::parse_direction(*i);
+ directions_.push_back(d);
+ }
+- foreach (const config &filter, cfg.child_range("filter")) {
++ BOOST_FOREACH(const config &filter, cfg.child_range("filter")) {
+ unit_filter_.push_back(filter);
+ }
+
+- foreach (const config &filter, cfg.child_range("filter_second")) {
++ BOOST_FOREACH(const config &filter, cfg.child_range("filter_second")) {
+ secondary_unit_filter_.push_back(filter);
+ }
+
+@@ -253,10 +254,10 @@
+ for(value2=value2_str.begin() ; value2 != value2_str.end() ; ++value2) {
+ value2_.push_back(atoi(value2->c_str()));
+ }
+- foreach (const config &filter, cfg.child_range("filter_attack")) {
++ BOOST_FOREACH(const config &filter, cfg.child_range("filter_attack")) {
+ primary_attack_filter_.push_back(filter);
+ }
+- foreach (const config &filter, cfg.child_range("filter_second_attack")) {
++ BOOST_FOREACH(const config &filter, cfg.child_range("filter_second_attack")) {
+ secondary_attack_filter_.push_back(filter);
+ }
+ play_offscreen_ = cfg["offscreen"].to_bool(true);
+@@ -487,7 +488,7 @@
+ display::tdrawing_layer layer = display::LAYER_UNIT_DEFAULT,
+ bool offscreen = true)
+ {
+- foreach (const animation_branch &ab, prepare_animation(cfg, tag_name))
++ BOOST_FOREACH(const animation_branch &ab, prepare_animation(cfg, tag_name))
+ {
+ config anim = ab.merge();
+ anim["apply_to"] = apply_to;
+@@ -503,7 +504,7 @@
+
+ void unit_animation::add_anims( std::vector<unit_animation> & animations, const config & cfg)
+ {
+- foreach (const animation_branch &ab, prepare_animation(cfg, "animation")) {
++ BOOST_FOREACH(const animation_branch &ab, prepare_animation(cfg, "animation")) {
+ animations.push_back(unit_animation(ab.merge()));
+ }
+
+@@ -519,7 +520,7 @@
+ add_simple_anim(animations, cfg, "levelin_anim", "levelin");
+ add_simple_anim(animations, cfg, "levelout_anim", "levelout");
+
+- foreach (const animation_branch &ab, prepare_animation(cfg, "standing_anim"))
++ BOOST_FOREACH(const animation_branch &ab, prepare_animation(cfg, "standing_anim"))
+ {
+ config anim = ab.merge();
+ anim["apply_to"] = "default";
+@@ -528,7 +529,7 @@
+ if (anim["offscreen"].empty()) anim["offscreen"] = false;
+ animations.push_back(unit_animation(anim));
+ }
+- foreach (const animation_branch &ab, prepare_animation(cfg, "standing_anim"))
++ BOOST_FOREACH(const animation_branch &ab, prepare_animation(cfg, "standing_anim"))
+ {
+ config anim = ab.merge();
+ anim["apply_to"] = "standing";
+@@ -537,7 +538,7 @@
+ if (anim["offscreen"].empty()) anim["offscreen"] = false;
+ animations.push_back(unit_animation(anim));
+ }
+- foreach (const animation_branch &ab, prepare_animation(cfg, "healing_anim"))
++ BOOST_FOREACH(const animation_branch &ab, prepare_animation(cfg, "healing_anim"))
+ {
+ config anim = ab.merge();
+ anim["apply_to"] = "healing";
+@@ -546,7 +547,7 @@
+ animations.push_back(unit_animation(anim));
+ }
+
+- foreach (const animation_branch &ab, prepare_animation(cfg, "healed_anim"))
++ BOOST_FOREACH(const animation_branch &ab, prepare_animation(cfg, "healed_anim"))
+ {
+ config anim = ab.merge();
+ anim["apply_to"] = "healed";
+@@ -558,7 +559,7 @@
+ animations.back().sub_anims_["_healed_sound"].add_frame(1,frame_builder().sound("heal.wav"),true);
+ }
+
+- foreach (const animation_branch &ab, prepare_animation(cfg, "poison_anim"))
++ BOOST_FOREACH(const animation_branch &ab, prepare_animation(cfg, "poison_anim"))
+ {
+ config anim = ab.merge();
+ anim["apply_to"] ="poisoned";
+@@ -572,7 +573,7 @@
+
+ add_simple_anim(animations, cfg, "pre_movement_anim", "pre_movement", display::LAYER_UNIT_MOVE_DEFAULT);
+
+- foreach (const animation_branch &ab, prepare_animation(cfg, "movement_anim"))
++ BOOST_FOREACH(const animation_branch &ab, prepare_animation(cfg, "movement_anim"))
+ {
+ config anim = ab.merge();
+ if (anim["offset"].empty()) {
+@@ -585,7 +586,7 @@
+
+ add_simple_anim(animations, cfg, "post_movement_anim", "post_movement", display::LAYER_UNIT_MOVE_DEFAULT);
+
+- foreach (const animation_branch &ab, prepare_animation(cfg, "defend"))
++ BOOST_FOREACH(const animation_branch &ab, prepare_animation(cfg, "defend"))
+ {
+ config anim = ab.merge();
+ anim["apply_to"] = "defend";
+@@ -607,7 +608,7 @@
+ else
+ {
+ std::vector<std::string> v = utils::split(anim["hits"]);
+- foreach (const std::string &hit_type, v)
++ BOOST_FOREACH(const std::string &hit_type, v)
+ {
+ config tmp = anim;
+ tmp["hits"] = hit_type;
+@@ -625,7 +626,7 @@
+ add_simple_anim(animations, cfg, "draw_weapon_anim", "draw_wepaon", display::LAYER_UNIT_MOVE_DEFAULT);
+ add_simple_anim(animations, cfg, "sheath_weapon_anim", "sheath_wepaon", display::LAYER_UNIT_MOVE_DEFAULT);
+
+- foreach (const animation_branch &ab, prepare_animation(cfg, "attack_anim"))
++ BOOST_FOREACH(const animation_branch &ab, prepare_animation(cfg, "attack_anim"))
+ {
+ config anim = ab.merge();
+ anim["apply_to"] = "attack";
+@@ -646,7 +647,7 @@
+ animations.push_back(unit_animation(anim));
+ }
+
+- foreach (const animation_branch &ab, prepare_animation(cfg, "death"))
++ BOOST_FOREACH(const animation_branch &ab, prepare_animation(cfg, "death"))
+ {
+ config anim = ab.merge();
+ anim["apply_to"] = "death";
+@@ -663,7 +664,7 @@
+
+ add_simple_anim(animations, cfg, "victory_anim", "victory");
+
+- foreach (const animation_branch &ab, prepare_animation(cfg, "extra_anim"))
++ BOOST_FOREACH(const animation_branch &ab, prepare_animation(cfg, "extra_anim"))
+ {
+ config anim = ab.merge();
+ anim["apply_to"] = anim["flag"];
+@@ -671,7 +672,7 @@
+ animations.push_back(unit_animation(anim));
+ }
+
+- foreach (const animation_branch &ab, prepare_animation(cfg, "teleport_anim"))
++ BOOST_FOREACH(const animation_branch &ab, prepare_animation(cfg, "teleport_anim"))
+ {
+ config anim = ab.merge();
+ if (anim["layer"].empty()) anim["layer"] = default_layer;
+@@ -742,14 +743,14 @@
+ config::const_child_itors range = cfg.child_range(frame_string+"frame");
+ starting_frame_time_=INT_MAX;
+ if(cfg[frame_string+"start_time"].empty() &&range.first != range.second) {
+- foreach (const config &frame, range) {
++ BOOST_FOREACH(const config &frame, range) {
+ starting_frame_time_ = std::min(starting_frame_time_, frame["begin"].to_int());
+ }
+ } else {
+ starting_frame_time_ = cfg[frame_string+"start_time"];
+ }
+
+- foreach (const config &frame, range)
++ BOOST_FOREACH(const config &frame, range)
+ {
+ unit_frame tmp_frame(frame);
+ add_frame(tmp_frame.duration(),tmp_frame,!tmp_frame.does_not_change());
+Index: src/storyscreen/render.cpp
+===================================================================
+--- src/storyscreen/render.cpp (revision 54624)
++++ src/storyscreen/render.cpp (revision 54625)
+@@ -22,7 +22,6 @@
+
+ #include "global.hpp"
+ #include "asserts.hpp"
+-#include "foreach.hpp"
+ #include "log.hpp"
+ #include "storyscreen/part.hpp"
+ #include "storyscreen/render.hpp"
+@@ -34,6 +33,8 @@
+ #include "text.hpp"
+ #include "video.hpp"
+
++#include <boost/foreach.hpp>
++
+ static lg::log_domain log_engine("engine");
+ #define ERR_NG LOG_STREAM(err, log_engine)
+ #define WARN_NG LOG_STREAM(warn, log_engine)
+@@ -167,7 +168,7 @@
+ void part_ui::prepare_floating_images()
+ {
+ // Build floating image surfaces
+- foreach(const floating_image& fi, p_.get_floating_images()) {
++ BOOST_FOREACH(const floating_image& fi, p_.get_floating_images()) {
+ imgs_.push_back( fi.get_render_input(scale_factor_, base_rect_) );
+ }
+ }
+@@ -190,7 +191,7 @@
+ last_key_ = true;
+
+ size_t fi_n = 0;
+- foreach(floating_image::render_input& ri, imgs_) {
++ BOOST_FOREACH(floating_image::render_input& ri, imgs_) {
+ const floating_image& fi = p_.get_floating_images()[fi_n];
+
+ if(!ri.image.null()) {
+Index: src/storyscreen/interface.cpp
+===================================================================
+--- src/storyscreen/interface.cpp (revision 54624)
++++ src/storyscreen/interface.cpp (revision 54625)
+@@ -19,7 +19,6 @@
+ */
+
+ #include "global.hpp"
+-#include "foreach.hpp"
+ #include "variable.hpp"
+
+ #include "storyscreen/interface.hpp"
+Index: src/storyscreen/controller.cpp
+===================================================================
+--- src/storyscreen/controller.cpp (revision 54624)
++++ src/storyscreen/controller.cpp (revision 54625)
+@@ -25,7 +25,6 @@
+ #include "storyscreen/render.hpp"
+
+ #include "asserts.hpp"
+-#include "foreach.hpp"
+ #include "variable.hpp"
+
+ #include "display.hpp"
+@@ -37,6 +36,8 @@
+ #include "resources.hpp"
+ #include "widgets/button.hpp"
+
++#include <boost/foreach.hpp>
++
+ static lg::log_domain log_engine("engine");
+ #define ERR_NG LOG_STREAM(err, log_engine)
+ #define LOG_NG LOG_STREAM(info, log_engine)
+@@ -138,7 +139,7 @@
+ // caching the scaled backgrounds can take over a decent amount of memory.
+ #ifndef LOW_MEM
+ std::vector< render_pointer_type > uis_;
+- foreach(part_pointer_type p, parts_) {
++ BOOST_FOREACH(part_pointer_type p, parts_) {
+ ASSERT_LOG( p != NULL, "Ouch: hit NULL storyscreen part in collection" );
+ render_pointer_type const rpt(new part_ui(*p, disp_, next_button, back_button, play_button));
+ uis_.push_back(rpt);
+Index: src/storyscreen/part.cpp
+===================================================================
+--- src/storyscreen/part.cpp (revision 54624)
++++ src/storyscreen/part.cpp (revision 54625)
+@@ -20,7 +20,6 @@
+
+ #include "global.hpp"
+ #include "asserts.hpp"
+-#include "foreach.hpp"
+ #include "log.hpp"
+ #include "resources.hpp"
+ #include "storyscreen/part.hpp"
+Index: src/game.cpp
+===================================================================
+--- src/game.cpp (revision 54624)
++++ src/game.cpp (revision 54625)
+@@ -40,6 +40,7 @@
+ #include <fstream>
+ #include <libintl.h>
+
++#include <boost/foreach.hpp>
+ #include <boost/iostreams/copy.hpp>
+ #include <boost/iostreams/filter/gzip.hpp>
+
+@@ -218,7 +219,7 @@
+ int read = 0;
+
+ // use static preproc_define::read_pair(config) to make a object
+- foreach ( const config::any_child &value, cfg.all_children_range() ) {
++ BOOST_FOREACH( const config::any_child &value, cfg.all_children_range() ) {
+ const preproc_map::value_type def = preproc_define::read_pair( value.cfg );
+ input_macros[def.first] = def.second;
+ ++read;
+@@ -245,7 +246,7 @@
+ if ( cmdline_opts.preprocess_defines ) {
+
+ // add the specified defines
+- foreach ( const std::string &define, *cmdline_opts.preprocess_defines ) {
++ BOOST_FOREACH( const std::string &define, *cmdline_opts.preprocess_defines ) {
+ if (define.empty()){
+ std::cerr << "empty define supplied\n";
+ continue;
+@@ -452,7 +453,7 @@
+ const config &cfg = game->game_config().child("titlescreen_music");
+ if (cfg) {
+ sound::play_music_repeatedly(game_config::title_music);
+- foreach (const config &i, cfg.child_range("music")) {
++ BOOST_FOREACH(const config &i, cfg.child_range("music")) {
+ sound::play_music_config(i);
+ }
+ sound::commit_music_changes();
+Index: src/playsingle_controller.cpp
+===================================================================
+--- src/playsingle_controller.cpp (revision 54624)
++++ src/playsingle_controller.cpp (revision 54625)
+@@ -27,7 +27,6 @@
+ #include "ai/game_info.hpp"
+ #include "ai/testing.hpp"
+ #include "dialogs.hpp"
+-#include "foreach.hpp"
+ #include "game_end_exceptions.hpp"
+ #include "game_events.hpp"
+ #include "game_preferences.hpp"
+@@ -48,6 +47,8 @@
+ #include "whiteboard/manager.hpp"
+ #include "util.hpp"
+
++#include <boost/foreach.hpp>
++
+ static lg::log_domain log_engine("engine");
+ #define ERR_NG LOG_STREAM(err, log_engine)
+ #define LOG_NG LOG_STREAM(info, log_engine)
+@@ -324,7 +325,7 @@
+ LOG_NG << "in playsingle_controller::play_scenario()...\n";
+
+ // Start music.
+- foreach (const config &m, level_.child_range("music")) {
++ BOOST_FOREACH(const config &m, level_.child_range("music")) {
+ sound::play_music_config(m);
+ }
+ sound::commit_music_changes();
+@@ -336,7 +337,7 @@
+
+ // Read sound sources
+ assert(soundsources_manager_ != NULL);
+- foreach (const config &s, level_.child_range("sound_source")) {
++ BOOST_FOREACH(const config &s, level_.child_range("sound_source")) {
+ soundsource::sourcespec spec(s);
+ soundsources_manager_->add(spec);
+ }
+@@ -906,14 +907,14 @@
+ new_side["previous_recruits"] = can_recruit_str;
+ LOG_NG << "stored side in snapshot:\n" << new_side["save_id"] << std::endl;
+ //add the units of the recall list
+- foreach(const unit& u, i->recall_list()) {
++ BOOST_FOREACH(const unit& u, i->recall_list()) {
+ config& new_unit = new_side.add_child("unit");
+ u.write(new_unit);
+ }
+ }
+ }
+ //add any players from starting_pos that do not have a team in the current scenario
+- foreach (const config &player_cfg, gamestate_.starting_pos.child_range("player")) {
++ BOOST_FOREACH(const config &player_cfg, gamestate_.starting_pos.child_range("player")) {
+ if (side_ids.count(player_cfg["save_id"]) == 0) {
+ LOG_NG << "stored inactive side in snapshot:\n" << player_cfg["save_id"] << std::endl;
+ gamestate_.snapshot.add_child("side", player_cfg);
+@@ -938,7 +939,7 @@
+ }
+
+ int persistent_teams = 0;
+- foreach (const team &t, teams_) {
++ BOOST_FOREACH(const team &t, teams_) {
+ if (t.persistent()) ++persistent_teams;
+ }
+
+@@ -953,7 +954,7 @@
+ int turns_left = std::max<int>(0, tod_manager_.number_of_turns() - turn());
+ int finishing_bonus = (end_level.gold_bonus && turns_left > -1) ?
+ finishing_bonus_per_turn * turns_left : 0;
+- foreach (const team &t, teams_)
++ BOOST_FOREACH(const team &t, teams_)
+ {
+ if (!t.persistent()) continue;
+ int carryover_gold = div100rounded((t.gold() + finishing_bonus) * end_level.carryover_percentage);
+Index: src/controller_base.cpp
+===================================================================
+--- src/controller_base.cpp (revision 54624)
++++ src/controller_base.cpp (revision 54625)
+@@ -18,11 +18,12 @@
+
+ #include "dialogs.hpp"
+ #include "display.hpp"
+-#include "foreach.hpp"
+ #include "game_preferences.hpp"
+ #include "log.hpp"
+ #include "mouse_handler_base.hpp"
+
++#include <boost/foreach.hpp>
++
+ static lg::log_domain log_display("display");
+ #define ERR_DP LOG_STREAM(err, log_display)
+
+@@ -144,7 +145,7 @@
+ int dx = 0, dy = 0;
+ int scroll_threshold = (preferences::mouse_scroll_enabled())
+ ? preferences::mouse_scroll_threshold() : 0;
+- foreach (const theme::menu& m, get_display().get_theme().menus()) {
++ BOOST_FOREACH(const theme::menu& m, get_display().get_theme().menus()) {
+ if (point_in_rect(mousex, mousey, m.get_location())) {
+ scroll_threshold = 0;
+ }
+Index: src/gamestatus.cpp
+===================================================================
+--- src/gamestatus.cpp (revision 54624)
++++ src/gamestatus.cpp (revision 54625)
+@@ -24,7 +24,6 @@
+ #include "gamestatus.hpp"
+
+ #include "actions.hpp"
+-#include "foreach.hpp"
+ #include "gettext.hpp"
+ #include "log.hpp"
+ #include "game_preferences.hpp"
+@@ -42,6 +41,7 @@
+ #include "whiteboard/side_actions.hpp"
+
+ #include <boost/bind.hpp>
++#include <boost/foreach.hpp>
+
+ #ifndef _MSC_VER
+ #include <sys/time.h>
+@@ -178,9 +178,9 @@
+ tags.push_back("side");
+ tags.push_back("player"); //merge [player] tags for backwards compatibility of saves
+
+- foreach (const std::string& side_tag, tags)
++ BOOST_FOREACH(const std::string& side_tag, tags)
+ {
+- foreach (config &carryover_side, source->child_range(side_tag))
++ BOOST_FOREACH(config &carryover_side, source->child_range(side_tag))
+ {
+ config *scenario_side = NULL;
+
+@@ -226,13 +226,13 @@
+ (*scenario_side)["color"] = carryover_side["color"];
+
+ //add recallable units
+- foreach (const config &u, carryover_side.child_range("unit")) {
++ BOOST_FOREACH(const config &u, carryover_side.child_range("unit")) {
+ scenario_side->add_child("unit", u);
+ }
+ }
+ }
+ } else {
+- foreach(const config &snapshot_side, source->child_range("side")) {
++ BOOST_FOREACH(const config &snapshot_side, source->child_range("side")) {
+ //take all side tags and add them as players (assuming they only contain carryover information)
+ cfg.add_child("player", snapshot_side);
+ }
+@@ -306,7 +306,7 @@
+ //See also playcampaign::play_game, where after finishing the scenario the replay
+ //will be saved.
+ if(!starting_pos.empty()) {
+- foreach (const config &p, cfg.child_range("player")) {
++ BOOST_FOREACH(const config &p, cfg.child_range("player")) {
+ config& cfg_player = starting_pos.add_child("player");
+ cfg_player.merge_with(p);
+ }
+@@ -400,7 +400,7 @@
+ std::string leader;
+ std::string leader_image;
+
+- //foreach (const config &p, cfg_save.child_range("player"))
++ //BOOST_FOREACH(const config &p, cfg_save.child_range("player"))
+ //{
+ // if (utils::string_bool(p["canrecruit"], false)) {
+ // leader = p["save_id"];
+@@ -413,7 +413,7 @@
+ //{
+ if (const config &snapshot = *(has_snapshot ? &cfg_snapshot : &cfg_replay_start))
+ {
+- foreach (const config &side, snapshot.child_range("side"))
++ BOOST_FOREACH(const config &side, snapshot.child_range("side"))
+ {
+ if (side["controller"] != "human") {
+ continue;
+@@ -430,7 +430,7 @@
+ break;
+ }
+
+- foreach (const config &u, side.child_range("unit"))
++ BOOST_FOREACH(const config &u, side.child_range("unit"))
+ {
+ if (u["canrecruit"].to_bool()) {
+ leader = u["id"].str();
+@@ -794,7 +794,7 @@
+ // can be recruited for the player, add them.
+ if (!player_cfg_) return;
+ if (const config::attribute_value *v = player_cfg_->get("previous_recruits")) {
+- foreach (const std::string &rec, utils::split(*v)) {
++ BOOST_FOREACH(const std::string &rec, utils::split(*v)) {
+ DBG_NG_TC << "adding previous recruit: " << rec << '\n';
+ t_->add_recruit(rec);
+ }
+@@ -857,7 +857,7 @@
+ if (!side_cfg_["no_leader"].to_bool() && side_cfg_["controller"] != "null") {
+ handle_leader(side_cfg_);
+ }
+- foreach (const config &l, side_cfg_.child_range("leader")) {
++ BOOST_FOREACH(const config &l, side_cfg_.child_range("leader")) {
+ handle_leader(l);
+ }
+ }
+@@ -871,13 +871,13 @@
+ //only relevant in start-of-scenario saves, that's why !shapshot
+ //units that are in '[scenario][side]' are 'first'
+ //for create-or-recall semantics to work: for each unit with non-empty id, unconditionally put OTHER, later, units with same id directly to recall list, not including them in unit_configs_
+- foreach(const config &u, (*player_cfg_).child_range("unit")) {
++ BOOST_FOREACH(const config &u, (*player_cfg_).child_range("unit")) {
+ handle_unit(u,"player_cfg");
+ }
+
+ } else {
+ //units in [side]
+- foreach (const config &su, side_cfg_.child_range("unit")) {
++ BOOST_FOREACH(const config &su, side_cfg_.child_range("unit")) {
+ handle_unit(su, "side_cfg");
+ }
+ }
+@@ -902,7 +902,7 @@
+ "allow_changes", "faction_name", "user_description", "faction" };
+
+ log_step("place units");
+- foreach (const config *u, unit_configs_) {
++ BOOST_FOREACH(const config *u, unit_configs_) {
+ unit_creator uc(*t_,map_.starting_position(side_));
+ uc
+ .allow_add_to_recall(true)
+@@ -913,7 +913,7 @@
+ .allow_show(false);
+
+ config cfg = *u;
+- foreach (const char *attr, side_attrs) {
++ BOOST_FOREACH(const char *attr, side_attrs) {
+ cfg.remove_attribute(attr);
+ }
+ uc.add_unit(cfg);
+@@ -953,7 +953,7 @@
+ void game_state::set_menu_items(const config::const_child_itors &menu_items)
+ {
+ clear_wmi(wml_menu_items);
+- foreach (const config &item, menu_items)
++ BOOST_FOREACH(const config &item, menu_items)
+ {
+ std::string id = item["id"];
+ wml_menu_item*& mref = wml_menu_items[id];
+Index: src/log.cpp
+===================================================================
+--- src/log.cpp (revision 54624)
++++ src/log.cpp (revision 54625)
+@@ -25,8 +25,9 @@
+ #include "SDL.h"
+
+ #include "log.hpp"
+-#include "foreach.hpp"
+
++#include <boost/foreach.hpp>
++
+ #include <map>
+ #include <sstream>
+ #include <ctime>
+@@ -88,11 +89,11 @@
+ {
+ std::string::size_type s = name.size();
+ if (name == "all") {
+- foreach (logd &l, *domains) {
++ BOOST_FOREACH(logd &l, *domains) {
+ l.second = severity;
+ }
+ } else if (s > 2 && name.compare(s - 2, 2, "/*") == 0) {
+- foreach (logd &l, *domains) {
++ BOOST_FOREACH(logd &l, *domains) {
+ if (l.first.compare(0, s - 1, name, 0, s - 1) == 0)
+ l.second = severity;
+ }
+@@ -108,7 +109,7 @@
+ std::string list_logdomains(const std::string& filter)
+ {
+ std::ostringstream res;
+- foreach (logd &l, *domains) {
++ BOOST_FOREACH(logd &l, *domains) {
+ if(l.first.find(filter) != std::string::npos)
+ res << l.first << "\n";
+ }
+Index: src/replay_controller.cpp
+===================================================================
+--- src/replay_controller.cpp (revision 54624)
++++ src/replay_controller.cpp (revision 54625)
+@@ -16,7 +16,6 @@
+
+ #include "global.hpp"
+
+-#include "foreach.hpp"
+ #include "game_end_exceptions.hpp"
+ #include "game_events.hpp"
+ #include "gettext.hpp"
+@@ -27,6 +26,8 @@
+ #include "resources.hpp"
+ #include "savegame.hpp"
+
++#include <boost/foreach.hpp>
++
+ static lg::log_domain log_engine("engine");
+ #define DBG_NG LOG_STREAM(debug, log_engine)
+
+@@ -417,7 +418,7 @@
+ finish_side_turn();
+
+ // This is necessary for replays in order to show possible movements.
+- foreach (unit &u, units_) {
++ BOOST_FOREACH(unit &u, units_) {
+ if (u.side() != player_number_) {
+ u.new_turn();
+ }
+Index: src/multiplayer_ui.cpp
+===================================================================
+--- src/multiplayer_ui.cpp (revision 54624)
++++ src/multiplayer_ui.cpp (revision 54625)
+@@ -16,7 +16,6 @@
+ #include "global.hpp"
+
+ #include "construct_dialog.hpp"
+-#include "foreach.hpp"
+ #include "gamestatus.hpp"
+ #include "game_display.hpp"
+ #include "game_preferences.hpp"
+@@ -33,6 +32,8 @@
+ #include "wml_separators.hpp"
+ #include "formula_string_utils.hpp"
+
++#include <boost/foreach.hpp>
++
+ static lg::log_domain log_engine("engine");
+ #define LOG_NG LOG_STREAM(info, log_engine)
+ #define ERR_NG LOG_STREAM(err, log_engine)
+@@ -163,9 +164,9 @@
+ state.starting_pos.child_range("side");
+ config::const_child_itors level_sides = level.child_range("side");
+
+- foreach (config &side, saved_sides)
++ BOOST_FOREACH(config &side, saved_sides)
+ {
+- foreach (const config &lside, level_sides)
++ BOOST_FOREACH(const config &lside, level_sides)
+ {
+ if (side["side"] == lside["side"] &&
+ (side["current_player"] != lside["current_player"] ||
+@@ -599,7 +600,7 @@
+ if (const config &ms = c.child("members")) {
+ std::stringstream ss;
+ ss << "Room " << c["room"].str() << " members: ";
+- foreach (const config& m, ms.child_range("member")) {
++ BOOST_FOREACH(const config& m, ms.child_range("member")) {
+ ss << m["name"] << " ";
+ }
+ chat_.add_message(time(NULL), "server", ss.str());
+@@ -608,7 +609,7 @@
+ if (const config &rs = c.child("rooms")) {
+ std::stringstream ss;
+ ss << "Rooms: ";
+- foreach (const config& r, rs.child_range("room")) {
++ BOOST_FOREACH(const config& r, rs.child_range("room")) {
+ ss << r["name"].str() << "(" << r["size"].str() << ") ";
+ }
+ chat_.add_message(time(NULL), "server", ss.str());
+@@ -706,7 +707,7 @@
+ {
+ std::list<user_info> u_list;
+
+- foreach (const config &user, gamelist_.child_range("user"))
++ BOOST_FOREACH(const config &user, gamelist_.child_range("user"))
+ {
+ user_info u_elem;
+ u_elem.name = user["name"].str();
+@@ -848,12 +849,12 @@
+ }
+
+ int res = -1, index = 0, best_score = 0;
+- foreach (const config *faction, fl)
++ BOOST_FOREACH(const config *faction, fl)
+ {
+ int faction_score = 0;
+ std::vector<std::string> recruit = utils::split((*faction)[search_field]);
+- foreach (const std::string &search, find) {
+- foreach (const std::string &r, recruit) {
++ BOOST_FOREACH(const std::string &search, find) {
++ BOOST_FOREACH(const std::string &r, recruit) {
+ if (r == search) {
+ ++faction_score;
+ break;
+Index: src/display.cpp
+===================================================================
+--- src/display.cpp (revision 54624)
++++ src/display.cpp (revision 54625)
+@@ -21,7 +21,6 @@
+ #include "builder.hpp"
+ #include "cursor.hpp"
+ #include "display.hpp"
+-#include "foreach.hpp"
+ #include "game_preferences.hpp"
+ #include "gettext.hpp"
+ #include "halo.hpp"
+@@ -41,6 +40,8 @@
+
+ #include "SDL_image.h"
+
++#include <boost/foreach.hpp>
++
+ #ifdef __SUNPRO_CC
+ // GCC doesn't have hypot in cmath so include it for Sun Studio
+ #include <math.h>
+@@ -629,7 +630,7 @@
+ // now get the surfaces
+ std::vector<surface> res;
+
+- foreach(std::string& name, names) {
++ BOOST_FOREACH(std::string& name, names) {
+ const surface surf(image::get_image(name, image_type));
+ if (surf)
+ res.push_back(surf);
+@@ -828,8 +829,8 @@
+ * layergroup > location > layer > 'tblit' > surface
+ */
+
+- foreach(const tblit &blit, drawing_buffer_) {
+- foreach(const surface& surf, blit.surf()) {
++ BOOST_FOREACH(const tblit &blit, drawing_buffer_) {
++ BOOST_FOREACH(const surface& surf, blit.surf()) {
+ // Note that dstrect can be changed by sdl_blit
+ // and so a new instance should be initialized
+ // to pass to each call to sdl_blit.
+@@ -1903,7 +1904,7 @@
+ int ticks3 = SDL_GetTicks();
+ LOG_DP << "invalidate and draw: " << (ticks3 - ticks2) << " and " << (ticks2 - ticks1) << "\n";
+
+- foreach (boost::function<void(display&)> f, redraw_observers_) {
++ BOOST_FOREACH(boost::function<void(display&)> f, redraw_observers_) {
+ f(*this);
+ }
+
+@@ -1992,7 +1993,7 @@
+ SDL_Rect clip_rect = get_clip_rect();
+ surface screen = get_screen_surface();
+ clip_rect_setter set_clip_rect(screen, &clip_rect);
+- foreach (const map_location& loc, invalidated_) {
++ BOOST_FOREACH(const map_location& loc, invalidated_) {
+ int xpos = get_location_x(loc);
+ int ypos = get_location_y(loc);
+
+@@ -2058,7 +2059,7 @@
+ // Paint arrows
+ arrows_map_t::const_iterator arrows_in_hex = arrows_map_.find(loc);
+ if(arrows_in_hex != arrows_map_.end()) {
+- foreach(arrow* const a, arrows_in_hex->second) {
++ BOOST_FOREACH(arrow* const a, arrows_in_hex->second) {
+ a->draw_hex(loc);
+ }
+ }
+@@ -2388,7 +2389,7 @@
+ if(invalidateAll_)
+ return false;
+ bool ret = false;
+- foreach (const map_location& loc, locs) {
++ BOOST_FOREACH(const map_location& loc, locs) {
+ #ifdef _OPENMP
+ #pragma omp critical(invalidated_)
+ #endif //_OPENMP
+@@ -2438,7 +2439,7 @@
+ return false;
+
+ bool result = false;
+- foreach (const map_location &loc, hexes_under_rect(rect)) {
++ BOOST_FOREACH(const map_location &loc, hexes_under_rect(rect)) {
+ result |= invalidate(loc);
+ }
+ return result;
+@@ -2450,7 +2451,7 @@
+ animate_map_ = preferences::animate_map();
+ if (!animate_map_) return;
+
+- foreach (const map_location &loc, get_visible_hexes())
++ BOOST_FOREACH(const map_location &loc, get_visible_hexes())
+ {
+ if (shrouded(loc)) continue;
+ if (builder_->update_animation(loc)) {
+@@ -2464,7 +2465,7 @@
+ void display::add_arrow(arrow& arrow)
+ {
+ const arrow_path_t & arrow_path = arrow.get_path();
+- foreach (const map_location& loc, arrow_path)
++ BOOST_FOREACH(const map_location& loc, arrow_path)
+ {
+ arrows_map_[loc].push_back(&arrow);
+ }
+@@ -2473,7 +2474,7 @@
+ void display::remove_arrow(arrow& arrow)
+ {
+ const arrow_path_t & arrow_path = arrow.get_path();
+- foreach (const map_location& loc, arrow_path)
++ BOOST_FOREACH(const map_location& loc, arrow_path)
+ {
+ arrows_map_[loc].remove(&arrow);
+ }
+@@ -2482,12 +2483,12 @@
+ void display::update_arrow(arrow & arrow)
+ {
+ const arrow_path_t & previous_path = arrow.get_previous_path();
+- foreach (const map_location& loc, previous_path)
++ BOOST_FOREACH(const map_location& loc, previous_path)
+ {
+ arrows_map_[loc].remove(&arrow);
+ }
+ const arrow_path_t & arrow_path = arrow.get_path();
+- foreach (const map_location& loc, arrow_path)
++ BOOST_FOREACH(const map_location& loc, arrow_path)
+ {
+ arrows_map_[loc].push_back(&arrow);
+ }
+Index: src/about.cpp
+===================================================================
+--- src/about.cpp (revision 54624)
++++ src/about.cpp (revision 54625)
+@@ -22,10 +22,11 @@
+
+ #include "construct_dialog.hpp"
+ #include "display.hpp"
+-#include "foreach.hpp"
+ #include "gettext.hpp"
+ #include "marked-up_text.hpp"
+
++#include <boost/foreach.hpp>
++
+ /**
+ * @namespace about
+ * Display credits %about all contributors.
+@@ -52,7 +53,7 @@
+ }
+
+ std::vector<std::string> lines = utils::split(c["text"], '\n');
+- foreach (std::string &line, lines)
++ BOOST_FOREACH(std::string &line, lines)
+ {
+ if (line.size() > 1 && line[0] == '+')
+ line = "+ " + line.substr(1);
+@@ -67,7 +68,7 @@
+ }
+ }
+
+- foreach (const config &entry, c.child_range("entry")) {
++ BOOST_FOREACH(const config &entry, c.child_range("entry")) {
+ res.push_back("- "+ entry["name"].str());
+ }
+ }
+@@ -80,7 +81,7 @@
+ config::child_itors about_entries = about_list.child_range("about");
+
+ if (!campaign.empty()) {
+- foreach (const config &about, about_entries) {
++ BOOST_FOREACH(const config &about, about_entries) {
+ // just finished a particular campaign
+ if (campaign == about["id"]) {
+ add_lines(res, about);
+@@ -88,7 +89,7 @@
+ }
+ }
+
+- foreach (const config &about, about_entries) {
++ BOOST_FOREACH(const config &about, about_entries) {
+ add_lines(res, about);
+ }
+
+@@ -101,7 +102,7 @@
+ images.clear();
+ images_default = "";
+
+- foreach (const config &about, cfg.child_range("about"))
++ BOOST_FOREACH(const config &about, cfg.child_range("about"))
+ {
+ about_list.add_child("about", about);
+ const std::string &im = about["images"];
+@@ -114,7 +115,7 @@
+ }
+ }
+
+- foreach (const config &campaign, cfg.child_range("campaign"))
++ BOOST_FOREACH(const config &campaign, cfg.child_range("campaign"))
+ {
+ config::const_child_itors abouts = campaign.child_range("about");
+ if (abouts.first == abouts.second) continue;
+@@ -126,7 +127,7 @@
+ temp["id"] = id;
+ std::string campaign_images;
+
+- foreach (const config &about, abouts)
++ BOOST_FOREACH(const config &about, abouts)
+ {
+ const std::string &subtitle = about["title"];
+ if (!subtitle.empty())
+@@ -139,12 +140,12 @@
+ text << '\n';
+ }
+
+- foreach (const std::string &line, utils::split(about["text"], '\n'))
++ BOOST_FOREACH(const std::string &line, utils::split(about["text"], '\n'))
+ {
+ text << " " << line << '\n';
+ }
+
+- foreach (const config &entry, about.child_range("entry"))
++ BOOST_FOREACH(const config &entry, about.child_range("entry"))
+ {
+ text << " " << entry["name"] << '\n';
+ }
+Index: src/arrow.cpp
+===================================================================
+--- src/arrow.cpp (revision 54624)
++++ src/arrow.cpp (revision 54625)
+@@ -20,11 +20,12 @@
+
+ #include "arrow.hpp"
+
+-#include "foreach.hpp"
+ #include "game_display.hpp"
+ #include "log.hpp"
+ #include "resources.hpp"
+
++#include <boost/foreach.hpp>
++
+ static lg::log_domain log_arrows("arrows");
+ #define ERR_ARR LOG_STREAM(err, log_arrows)
+ #define WRN_ARR LOG_STREAM(warn, log_arrows)
+@@ -293,7 +294,7 @@
+ {
+ if(!SCREEN) return;
+
+- foreach(map_location const& loc, path)
++ BOOST_FOREACH(map_location const& loc, path)
+ {
+ SCREEN->invalidate(loc);
+ }
+Index: src/game_display.cpp
+===================================================================
+--- src/game_display.cpp (revision 54624)
++++ src/game_display.cpp (revision 54625)
+@@ -34,7 +34,6 @@
+ Growl_Delegate growl_obj;
+ #endif
+
+-#include "foreach.hpp"
+ #include "game_preferences.hpp"
+ #include "halo.hpp"
+ #include "log.hpp"
+@@ -47,6 +46,8 @@
+ #include "sound.hpp"
+ #include "whiteboard/manager.hpp"
+
++#include <boost/foreach.hpp>
++
+ static lg::log_domain log_display("display");
+ #define ERR_DP LOG_STREAM(err, log_display)
+ #define LOG_DP LOG_STREAM(info, log_display)
+@@ -297,7 +298,7 @@
+ halo::unrender(invalidated_);
+ display::draw_invalidated();
+
+- foreach(unit* temp_unit, fake_units_) {
++ BOOST_FOREACH(unit* temp_unit, fake_units_) {
+ const map_location& loc = temp_unit->get_location();
+ exclusive_unit_draw_requests_t::iterator request = exclusive_unit_draw_requests_.find(loc);
+ if (invalidated_.find(loc) != invalidated_.end()
+@@ -305,7 +306,7 @@
+ temp_unit->redraw_unit();
+ }
+
+- foreach (const map_location& loc, invalidated_) {
++ BOOST_FOREACH(const map_location& loc, invalidated_) {
+ unit_map::iterator u_it = units_.find(loc);
+ exclusive_unit_draw_requests_t::iterator request = exclusive_unit_draw_requests_.find(loc);
+ if (u_it != units_.end()
+@@ -451,7 +452,7 @@
+
+ // We display the unit the mouse is over if it is over a unit,
+ // otherwise we display the unit that is selected.
+- foreach (const std::string &name, reports::report_list()) {
++ BOOST_FOREACH(const std::string &name, reports::report_list()) {
+ draw_report(name);
+ }
+ invalidateGameStatus_ = false;
+@@ -744,7 +745,7 @@
+ void game_display::highlight_another_reach(const pathfind::paths &paths_list)
+ {
+ // Fold endpoints of routes into reachability map.
+- foreach (const pathfind::paths::step &dest, paths_list.destinations) {
++ BOOST_FOREACH(const pathfind::paths::step &dest, paths_list.destinations) {
+ reach_map_[dest.curr]++;
+ }
+ reach_map_changed_ = true;
+@@ -897,17 +898,17 @@
+ void game_display::invalidate_animations()
+ {
+ display::invalidate_animations();
+- foreach (unit& u, units_) {
++ BOOST_FOREACH(unit& u, units_) {
+ u.refresh();
+ }
+- foreach(unit* temp_unit, fake_units_) {
++ BOOST_FOREACH(unit* temp_unit, fake_units_) {
+ temp_unit->refresh();
+ }
+ std::vector<unit*> unit_list;
+- foreach (unit &u, units_) {
++ BOOST_FOREACH(unit &u, units_) {
+ unit_list.push_back(&u);
+ }
+- foreach (unit *u, fake_units_) {
++ BOOST_FOREACH(unit *u, fake_units_) {
+ unit_list.push_back(u);
+ }
+ bool new_inval;
+@@ -1079,7 +1080,7 @@
+ {
+ const team& curr_team = teams_[playing_team()];
+ const team& prev_team = teams_[playing_team()-1 < teams_.size() ? playing_team()-1 : teams_.size()-1];
+- foreach (const game_display::overlay_map::value_type i, overlays_) {
++ BOOST_FOREACH(const game_display::overlay_map::value_type i, overlays_) {
+ const overlay& ov = i.second;
+ if (!ov.team_name.empty() &&
+ ((ov.team_name.find(curr_team.team_name()) + 1) != 0) !=
+@@ -1485,7 +1486,7 @@
+ }
+ }
+
+- foreach (const chat_message &cm, chat_messages_) {
++ BOOST_FOREACH(const chat_message &cm, chat_messages_) {
+ font::move_floating_label(cm.speaker_handle, 0, - movement);
+ font::move_floating_label(cm.handle, 0, - movement);
+ }
+Index: src/formula_function.cpp
+===================================================================
+--- src/formula_function.cpp (revision 54624)
++++ src/formula_function.cpp (revision 54625)
+@@ -16,14 +16,14 @@
+ #include "global.hpp"
+
+
+-//#include "foreach.hpp"
+ #include "callable_objects.hpp"
+-#include "foreach.hpp"
+ #include "formula_debugger.hpp"
+ #include "formula_function.hpp"
+ #include "game_display.hpp"
+ #include "log.hpp"
+
++#include <boost/foreach.hpp>
++
+ #ifdef HAVE_VISUAL_LEAK_DETECTOR
+ #include "vld.h"
+ #endif
+@@ -46,7 +46,7 @@
+ s << get_name();
+ s << '(';
+ bool first_arg = true;
+- foreach(expression_ptr a , args()) {
++ BOOST_FOREACH(expression_ptr a , args()) {
+ if (!first_arg) {
+ s << ',';
+ } else {
+@@ -451,7 +451,7 @@
+
+ std::string result;
+
+- foreach(expression_ptr arg, args()) {
++ BOOST_FOREACH(expression_ptr arg, args()) {
+ result += arg->evaluate(variables, fdb).string_cast();
+ }
+
+Index: src/unit_map.cpp
+===================================================================
+--- src/unit_map.cpp (revision 54624)
++++ src/unit_map.cpp (revision 54625)
+@@ -17,13 +17,14 @@
+ /** @file */
+
+ #include "unit_id.hpp"
+-#include "foreach.hpp"
+ #include "log.hpp"
+ #include "unit.hpp"
+
+ #include <functional>
+ #include "unit_map.hpp"
+
++#include <boost/foreach.hpp>
++
+ static lg::log_domain log_engine("engine");
+ #define ERR_NG LOG_STREAM(err, log_engine)
+ #define WRN_NG LOG_STREAM(warn, log_engine)
+@@ -444,7 +445,7 @@
+ {
+ assert(u);
+
+- foreach(const unit_pod& item, ilist_) {
++ BOOST_FOREACH(const unit_pod& item, ilist_) {
+ if(item.unit == u) {
+ return true;
+ }
+Index: src/pathfind/teleport.cpp
+===================================================================
+--- src/pathfind/teleport.cpp (revision 54624)
++++ src/pathfind/teleport.cpp (revision 54625)
+@@ -19,7 +19,7 @@
+ #include "log.hpp"
+ #include "resources.hpp"
+
+-#include "foreach.hpp"
++#include <boost/foreach.hpp>
+
+ static lg::log_domain log_engine("engine");
+ #define ERR_PF LOG_STREAM(err, log_engine)
+@@ -108,16 +108,16 @@
+ , targets_()
+ {
+
+- foreach(const teleport_group& group, groups) {
++ BOOST_FOREACH(const teleport_group& group, groups) {
+
+ teleport_pair locations;
+ group.get_teleport_pair(locations, u, ignore_units);
+ if (!see_all && !group.always_visible() && viewing_team.is_enemy(u.side())) {
+ teleport_pair filter_locs;
+- foreach(const map_location &loc, locations.first)
++ BOOST_FOREACH(const map_location &loc, locations.first)
+ if(!viewing_team.fogged(loc))
+ filter_locs.first.insert(loc);
+- foreach(const map_location &loc, locations.second)
++ BOOST_FOREACH(const map_location &loc, locations.second)
+ if(!viewing_team.fogged(loc))
+ filter_locs.second.insert(loc);
+ locations.first.swap(filter_locs.first);
+Index: src/pathfind/astarsearch.cpp
+===================================================================
+--- src/pathfind/astarsearch.cpp (revision 54624)
++++ src/pathfind/astarsearch.cpp (revision 54625)
+@@ -20,7 +20,6 @@
+ #include "map.hpp"
+ #include "pathfind/pathfind.hpp"
+ #include "pathfind/teleport.hpp"
+-#include "foreach.hpp"
+
+ #include <queue>
+ #include <map>
+Index: src/pathfind/pathfind.cpp
+===================================================================
+--- src/pathfind/pathfind.cpp (revision 54624)
++++ src/pathfind/pathfind.cpp (revision 54625)
+@@ -24,7 +24,6 @@
+ #include "pathfind/pathfind.hpp"
+ #include "pathfind/teleport.hpp"
+
+-#include "foreach.hpp"
+ #include "game_display.hpp"
+ #include "gettext.hpp"
+ #include "log.hpp"
+@@ -35,6 +34,8 @@
+ #include "unit_map.hpp"
+ #include "wml_exception.hpp"
+
++#include <boost/foreach.hpp>
++
+ #include <iostream>
+ #include <vector>
+ #include <algorithm>
+@@ -59,7 +60,7 @@
+ std::set<map_location> tiles_checking;
+ tiles_checking.swap(pending_tiles_to_check);
+ //Iterate over all the hexes we need to check
+- foreach (const map_location &loc, tiles_checking)
++ BOOST_FOREACH(const map_location &loc, tiles_checking)
+ {
+ //If this area is not a castle but should, skip it.
+ if (vacancy == pathfind::VACANT_CASTLE && !map.is_castle(loc)) continue;
+@@ -76,7 +77,7 @@
+ if (units.find(loc) == units.end() && !pass_check_and_unreachable) return loc;
+ map_location adjs[6];
+ get_adjacent_tiles(loc,adjs);
+- foreach (const map_location &loc, adjs)
++ BOOST_FOREACH(const map_location &loc, adjs)
+ {
+ if (!map.on_board(loc)) continue;
+ // Add the tile to be checked if it hasn't already been and
+Index: src/time_of_day.cpp
+===================================================================
+--- src/time_of_day.cpp (revision 54624)
++++ src/time_of_day.cpp (revision 54625)
+@@ -16,9 +16,9 @@
+ /** @file */
+
+ #include "config.hpp"
+-#include "foreach.hpp"
+ #include "time_of_day.hpp"
+
++#include <boost/foreach.hpp>
+
+ std::ostream &operator<<(std::ostream &s, const tod_color& c){
+ s << c.r << "," << c.g << "," << c.b;
+@@ -62,7 +62,7 @@
+
+ void time_of_day::parse_times(const config& cfg, std::vector<time_of_day>& normal_times)
+ {
+- foreach (const config &t, cfg.child_range("time")) {
++ BOOST_FOREACH(const config &t, cfg.child_range("time")) {
+ normal_times.push_back(time_of_day(t));
+ }
+
+Index: src/persist_manager.cpp
+===================================================================
+--- src/persist_manager.cpp (revision 54624)
++++ src/persist_manager.cpp (revision 54625)
+@@ -16,7 +16,7 @@
+ #include "persist_context.hpp"
+ #include "persist_manager.hpp"
+
+-#include "foreach.hpp"
++#include <boost/foreach.hpp>
+
+ persist_context &persist_manager::get_context(const std::string &ns)
+ {
+@@ -36,7 +36,7 @@
+ bool persist_manager::start_transaction() {
+ if (in_transaction_) return false;
+ bool result = true;
+- foreach (context_map::reference ctx, contexts_){
++ BOOST_FOREACH(context_map::reference ctx, contexts_){
+ result &= ctx.second->start_transaction();
+ }
+ in_transaction_ = true;
+@@ -46,7 +46,7 @@
+ bool persist_manager::end_transaction() {
+ if (!in_transaction_) return false;
+ bool result = true;
+- foreach (context_map::reference ctx, contexts_){
++ BOOST_FOREACH(context_map::reference ctx, contexts_){
+ result &= ctx.second->end_transaction();
+ }
+ in_transaction_ = !result;
+@@ -56,7 +56,7 @@
+ bool persist_manager::cancel_transaction() {
+ if (!in_transaction_) return false;
+ bool result = true;
+- foreach (context_map::reference ctx, contexts_){
++ BOOST_FOREACH(context_map::reference ctx, contexts_){
+ result &= ctx.second->cancel_transaction();
+ }
+ in_transaction_ = false;
+Index: src/side_filter.cpp
+===================================================================
+--- src/side_filter.cpp (revision 54624)
++++ src/side_filter.cpp (revision 54625)
+@@ -18,7 +18,6 @@
+ #include "global.hpp"
+
+ #include "config.hpp"
+-#include "foreach.hpp"
+ #include "log.hpp"
+ #include "resources.hpp"
+ #include "side_filter.hpp"
+@@ -26,6 +25,8 @@
+ #include "team.hpp"
+ #include "serialization/string_utils.hpp"
+
++#include <boost/foreach.hpp>
++
+ static lg::log_domain log_engine_sf("engine/side_filter");
+ #define ERR_NG LOG_STREAM(err, log_engine_sf)
+
+@@ -61,7 +62,7 @@
+ {
+ //@todo: replace with better implementation
+ std::vector<int> result;
+- foreach (const team &t, *resources::teams) {
++ BOOST_FOREACH(const team &t, *resources::teams) {
+ if (match(t)) {
+ result.push_back(t.side());
+ }
+@@ -109,7 +110,7 @@
+ else {
+ const std::vector<std::string>& these_team_names = utils::split(this_team_name);
+ bool search_futile = true;
+- foreach(const std::string& this_single_team_name, these_team_names) {
++ BOOST_FOREACH(const std::string& this_single_team_name, these_team_names) {
+ if(this_single_team_name == that_team_name) {
+ search_futile = false;
+ break;
+@@ -123,7 +124,7 @@
+ if(cfg_.has_child("has_unit")) {
+ const vconfig& unit_filter = cfg_.child("has_unit");
+ bool found = false;
+- foreach (unit &u, *resources::units) {
++ BOOST_FOREACH(unit &u, *resources::units) {
+ if (u.side() != t.side()) {
+ continue;
+ }
+@@ -134,7 +135,7 @@
+ }
+ if(!found && unit_filter["search_recall_list"].to_bool(false)) {
+ const std::vector<unit>& recall_list = t.recall_list();
+- foreach(const unit& u, recall_list) {
++ BOOST_FOREACH(const unit& u, recall_list) {
+ scoped_recall_unit this_unit("this_unit", t.save_id(), &u - &recall_list[0]);
+ if(u.matches_filter(unit_filter, u.get_location(), flat_)) {
+ found = true;
+@@ -152,7 +153,7 @@
+ side_filter s_filter(enemy_of);
+ const std::vector<int>& teams = s_filter.get_teams();
+ if(teams.empty()) return false;
+- foreach(const int side, teams) {
++ BOOST_FOREACH(const int side, teams) {
+ if(!(*resources::teams)[side - 1].is_enemy(t.side()))
+ return false;
+ }
+@@ -163,7 +164,7 @@
+ side_filter s_filter(allied_with);
+ const std::vector<int>& teams = s_filter.get_teams();
+ if(teams.empty()) return false;
+- foreach(const int side, teams) {
++ BOOST_FOREACH(const int side, teams) {
+ if((*resources::teams)[side - 1].is_enemy(t.side()))
+ return false;
+ }
+Index: src/theme.cpp
+===================================================================
+--- src/theme.cpp (revision 54624)
++++ src/theme.cpp (revision 54625)
+@@ -18,7 +18,6 @@
+ #include "global.hpp"
+
+ #include "font.hpp"
+-#include "foreach.hpp"
+ #include "gettext.hpp"
+ #include "hotkeys.hpp"
+ #include "log.hpp"
+@@ -26,6 +25,7 @@
+ #include "theme.hpp"
+ #include "wml_exception.hpp"
+
++#include <boost/foreach.hpp>
+
+ static lg::log_domain log_display("display");
+ #define DBG_DP LOG_STREAM(debug, log_display)
+@@ -162,7 +162,7 @@
+ {
+ std::vector<config> res_cfgs_;
+ // resolve all the partialresolutions
+- foreach (const config &part, top_cfg.child_range("partialresolution"))
++ BOOST_FOREACH(const config &part, top_cfg.child_range("partialresolution"))
+ {
+ // follow the inheritance hierarchy and push all the nodes on the stack
+ std::vector<const config*> parent_stack(1, &part);
+@@ -182,11 +182,11 @@
+ while (!parent_stack.empty()) {
+ //override attributes
+ res_cfgs_.back().merge_attributes(*parent_stack.back());
+- foreach (const config &rm, parent_stack.back()->child_range("remove")) {
++ BOOST_FOREACH(const config &rm, parent_stack.back()->child_range("remove")) {
+ find_ref(rm["id"], res_cfgs_.back(), true);
+ }
+
+- foreach (const config &chg, parent_stack.back()->child_range("change"))
++ BOOST_FOREACH(const config &chg, parent_stack.back()->child_range("change"))
+ {
+ config &target = find_ref(chg["id"], res_cfgs_.back());
+ target.merge_attributes(chg);
+@@ -195,7 +195,7 @@
+ // cannot add [status] sub-elements, but who cares
+ if (const config &c = parent_stack.back()->child("add"))
+ {
+- foreach (const config::any_child &j, c.all_children_range()) {
++ BOOST_FOREACH(const config::any_child &j, c.all_children_range()) {
+ res_cfgs_.back().add_child(j.key, j.cfg);
+ }
+ }
+@@ -204,7 +204,7 @@
+ }
+ }
+ // Add all the resolutions
+- foreach (const config &res, top_cfg.child_range("resolution")) {
++ BOOST_FOREACH(const config &res, top_cfg.child_range("resolution")) {
+ dst_cfg.add_child("resolution", res);
+ }
+ // Add all the resolved resolutions
+@@ -217,7 +217,7 @@
+ static void do_resolve_rects(const config& cfg, config& resolved_config, config* resol_cfg = NULL) {
+
+ // recursively resolve children
+- foreach (const config::any_child &value, cfg.all_children_range()) {
++ BOOST_FOREACH(const config::any_child &value, cfg.all_children_range()) {
+ config &childcfg = resolved_config.add_child(value.key);
+ do_resolve_rects(value.cfg, childcfg,
+ value.key == "resolution" ? &childcfg : resol_cfg);
+@@ -549,7 +549,7 @@
+
+ int current_rating = 1000000;
+ const config *current = NULL;
+- foreach (const config &i, cfg_.child_range("resolution"))
++ BOOST_FOREACH(const config &i, cfg_.child_range("resolution"))
+ {
+ int width = i["width"];
+ int height = i["height"];
+@@ -611,7 +611,7 @@
+
+ if (const config &status_cfg = cfg.child("status"))
+ {
+- foreach (const config::any_child &i, status_cfg.all_children_range()) {
++ BOOST_FOREACH(const config::any_child &i, status_cfg.all_children_range()) {
+ status_.insert(std::pair<std::string, status_item>(i.key, status_item(i.cfg)));
+ }
+ if (const config &unit_image_cfg = status_cfg.child("unit_image")) {
+@@ -621,19 +621,19 @@
+ }
+ }
+
+- foreach (const config &p, cfg.child_range("panel")) {
++ BOOST_FOREACH(const config &p, cfg.child_range("panel")) {
+ panel new_panel(p);
+ set_object_location(new_panel, p["rect"], p["ref"]);
+ panels_.push_back(new_panel);
+ }
+
+- foreach (const config &lb, cfg.child_range("label")) {
++ BOOST_FOREACH(const config &lb, cfg.child_range("label")) {
+ label new_label(lb);
+ set_object_location(new_label, lb["rect"], lb["ref"]);
+ labels_.push_back(new_label);
+ }
+
+- foreach (const config &m, cfg.child_range("menu"))
++ BOOST_FOREACH(const config &m, cfg.child_range("menu"))
+ {
+ menu new_menu(m);
+ DBG_DP << "adding menu: " << (new_menu.is_context() ? "is context" : "not context") << "\n";
+@@ -699,7 +699,7 @@
+ }
+
+ // Change existing theme objects.
+- foreach (const config &c, cfg.child_range("change"))
++ BOOST_FOREACH(const config &c, cfg.child_range("change"))
+ {
+ std::string id = c["id"];
+ std::string ref_id = c["ref"];
+@@ -709,12 +709,12 @@
+ }
+
+ // Add new theme objects.
+- foreach (const config &c, cfg.child_range("add")) {
++ BOOST_FOREACH(const config &c, cfg.child_range("add")) {
+ add_object(c);
+ }
+
+ // Remove existent theme objects.
+- foreach (const config &c, cfg.child_range("remove")) {
++ BOOST_FOREACH(const config &c, cfg.child_range("remove")) {
+ remove_object(c["id"]);
+ }
+
+@@ -758,7 +758,7 @@
+ if (!cfg)
+ return;
+
+- foreach (const config &thm, cfg->child_range("theme"))
++ BOOST_FOREACH(const config &thm, cfg->child_range("theme"))
+ {
+ std::string thm_name = thm["name"];
+ if (!thm["hidden"].to_bool(false))
+@@ -778,7 +778,7 @@
+
+ const theme::menu *theme::get_menu_item(const std::string &key) const
+ {
+- foreach (const theme::menu &m, menus_) {
++ BOOST_FOREACH(const theme::menu &m, menus_) {
+ if (m.get_id() == key) return &m;
+ }
+ return NULL;
+Index: src/addon/manager.cpp
+===================================================================
+--- src/addon/manager.cpp (revision 54624)
++++ src/addon/manager.cpp (revision 54625)
+@@ -19,7 +19,6 @@
+ #include "addon/manager.hpp"
+ #include "dialogs.hpp"
+ #include "filesystem.hpp"
+-#include "foreach.hpp"
+ #include "formatter.hpp"
+ #include "game_display.hpp"
+ #include "game_preferences.hpp"
+@@ -41,6 +40,8 @@
+ #include "wml_separators.hpp"
+ #include "formula_string_utils.hpp"
+
++#include <boost/foreach.hpp>
++
+ static lg::log_domain log_config("config");
+ #define ERR_CFG LOG_STREAM(err , log_config)
+ #define LOG_CFG LOG_STREAM(info, log_config)
+@@ -321,11 +322,11 @@
+
+ make_directory(dir);
+
+- foreach (const config &d, cfg.child_range("dir")) {
++ BOOST_FOREACH(const config &d, cfg.child_range("dir")) {
+ unarchive_dir(dir, d);
+ }
+
+- foreach (const config &f, cfg.child_range("file")) {
++ BOOST_FOREACH(const config &f, cfg.child_range("file")) {
+ unarchive_file(dir, f);
+ }
+ }
+@@ -701,7 +702,7 @@
+ std::string missing = "";
+ size_t count_missing = 0;
+
+- foreach(const std::string& i, dependencies) {
++ BOOST_FOREACH(const std::string& i, dependencies) {
+ if (std::find(installed.begin(), installed.end(), i) == installed.end()) {
+ missing += "\n" + i;
+ ++count_missing;
+@@ -717,7 +718,7 @@
+ std::vector< std::string > unsafe_matches;
+ std::ostringstream unsafe_list;
+ std::map<std::string, version_info> remote_version_map;
+- foreach (const config &remote_addon, remote_addons_list)
++ BOOST_FOREACH(const config &remote_addon, remote_addons_list)
+ {
+ const std::string& name = remote_addon["name"];
+ if (std::find(dependencies.begin(), dependencies.end(), name) != dependencies.end()) {
+@@ -837,7 +838,7 @@
+ if(!result) {
+ assert(failed_titles.empty() == false);
+ std::string failed_titles_list_fmt;
+- foreach(const std::string& entry, failed_titles) {
++ BOOST_FOREACH(const std::string& entry, failed_titles) {
+ failed_titles_list_fmt += '\n';
+ failed_titles_list_fmt += entry;
+ }
+@@ -870,7 +871,7 @@
+ std::vector<version_info> safe_local_versions;
+ std::vector<version_info> unsafe_local_versions;
+ std::map<std::string, version_info> remote_version_map;
+- foreach (const config &remote_addon, remote_addons_list)
++ BOOST_FOREACH(const config &remote_addon, remote_addons_list)
+ {
+ const std::string& name = remote_addon["name"];
+ const std::string& version = remote_addon["version"];
+@@ -1065,7 +1066,7 @@
+ if(!result) {
+ assert(failed_titles.empty() == false);
+ std::string failed_titles_list_fmt;
+- foreach(const std::string& entry, failed_titles) {
++ BOOST_FOREACH(const std::string& entry, failed_titles) {
+ failed_titles_list_fmt += '\n';
+ failed_titles_list_fmt += entry;
+ }
+@@ -1090,7 +1091,7 @@
+ const std::string& addon,
+ const std::vector<std::string>& own_addons)
+ {
+- foreach(const std::string& current_own_addon, own_addons) {
++ BOOST_FOREACH(const std::string& current_own_addon, own_addons) {
+ if(current_own_addon == addon) {
+ utils::string_map symbols;
+ symbols["addon"] = addon;
+@@ -1171,7 +1172,7 @@
+
+ std::vector< addon_info > infos;
+
+- foreach(const config &c, addon_cfgs)
++ BOOST_FOREACH(const config &c, addon_cfgs)
+ {
+ const std::string& name = c["name"];
+ const std::string& downloads = c["downloads"].str();
+@@ -1254,13 +1255,13 @@
+ infos.push_back(inf);
+ }
+
+- foreach(const std::string& pub, publish_options) {
++ BOOST_FOREACH(const std::string& pub, publish_options) {
+ static const std::string publish_icon = "icons/icon-addon-publish.png";
+ const std::string text = _("Publish add-on: ") + get_addon_name(pub);
+ options.push_back(IMAGE_PREFIX + publish_icon + COLUMN_SEPARATOR + font::GOOD_TEXT + text);
+ options_to_filter.push_back(text);
+ }
+- foreach(const std::string& del, delete_options) {
++ BOOST_FOREACH(const std::string& del, delete_options) {
+ static const std::string delete_icon = "icons/icon-addon-delete.png";
+ const std::string text = _("Delete add-on: ") + get_addon_name(del);
+ options.push_back(IMAGE_PREFIX + delete_icon + COLUMN_SEPARATOR + font::BAD_TEXT + text);
+@@ -1408,7 +1409,7 @@
+
+ remove_names.clear();
+
+- foreach(const std::string& id, remove_ids) {
++ BOOST_FOREACH(const std::string& id, remove_ids) {
+ remove_names.push_back(get_addon_name(id));
+ }
+
+@@ -1425,7 +1426,7 @@
+
+ std::vector<std::string> failed_names, skipped_names, succeeded_names;
+
+- foreach(const std::string& id, remove_ids) {
++ BOOST_FOREACH(const std::string& id, remove_ids) {
+ const std::string& name = get_addon_name(id);
+
+ if(have_addon_pbl_info(id) || have_addon_in_vcs_tree(id)) {
+@@ -1531,12 +1532,12 @@
+ }
+ static const std::string parentd = get_addon_campaigns_dir();
+ std::vector<std::string> addon_info_files;
+- foreach(std::string const& dir, addons)
++ BOOST_FOREACH(std::string const& dir, addons)
+ addon_info_files.push_back(parentd+"/"+dir+"/_info.cfg");
+
+ size_t i = 0;
+
+- foreach(std::string const& info_file, addon_info_files) {
++ BOOST_FOREACH(std::string const& info_file, addon_info_files) {
+ assert(i < addons.size());
+
+ std::string const& addon = addons[i];
+Index: src/addon/validation.cpp
+===================================================================
+--- src/addon/validation.cpp (revision 54624)
++++ src/addon/validation.cpp (revision 54625)
+@@ -17,8 +17,9 @@
+ #include "global.hpp"
+ #include "addon/validation.hpp"
+ #include "config.hpp"
+-#include "foreach.hpp"
+
++#include <boost/foreach.hpp>
++
+ #include <cstring>
+
+ const unsigned short default_campaignd_port = 15002;
+@@ -44,10 +45,10 @@
+
+ bool check_names_legal(const config& dir)
+ {
+- foreach (const config &path, dir.child_range("file")) {
++ BOOST_FOREACH(const config &path, dir.child_range("file")) {
+ if (!addon_name_legal(path["name"])) return false;
+ }
+- foreach (const config &path, dir.child_range("dir")) {
++ BOOST_FOREACH(const config &path, dir.child_range("dir")) {
+ if (!addon_name_legal(path["name"])) return false;
+ if (!check_names_legal(path)) return false;
+ }
+Index: src/mapgen.cpp
+===================================================================
+--- src/mapgen.cpp (revision 54624)
++++ src/mapgen.cpp (revision 54625)
+@@ -20,7 +20,6 @@
+
+ #include "global.hpp"
+
+-#include "foreach.hpp"
+ #include "gettext.hpp"
+ #include "language.hpp"
+ #include "log.hpp"
+@@ -34,6 +33,7 @@
+ #include "formula_string_utils.hpp"
+ #include "SDL.h"
+
++#include <boost/foreach.hpp>
+
+ static lg::log_domain log_engine("engine");
+ #define ERR_NG LOG_STREAM(err, log_engine)
+@@ -777,7 +777,7 @@
+
+ std::vector<terrain_height_mapper> height_conversion;
+
+- foreach (const config &h, cfg.child_range("height")) {
++ BOOST_FOREACH(const config &h, cfg.child_range("height")) {
+ height_conversion.push_back(terrain_height_mapper(h));
+ }
+
+@@ -912,7 +912,7 @@
+ LOG_NG << (SDL_GetTicks() - ticks) << "\n"; ticks = SDL_GetTicks();
+
+ std::vector<terrain_converter> converters;
+- foreach (const config &cv, cfg.child_range("convert")) {
++ BOOST_FOREACH(const config &cv, cfg.child_range("convert")) {
+ converters.push_back(terrain_converter(cv));
+ }
+
+Index: src/cavegen.cpp
+===================================================================
+--- src/cavegen.cpp (revision 54624)
++++ src/cavegen.cpp (revision 54625)
+@@ -21,13 +21,14 @@
+ #include "global.hpp"
+
+ #include "cavegen.hpp"
+-#include "foreach.hpp"
+ #include "log.hpp"
+ #include "map.hpp"
+ #include "pathfind/pathfind.hpp"
+ #include "serialization/string_utils.hpp"
+ #include "util.hpp"
+
++#include <boost/foreach.hpp>
++
+ static lg::log_domain log_engine("engine");
+ #define LOG_NG LOG_STREAM(info, log_engine)
+
+@@ -147,7 +148,7 @@
+
+ void cave_map_generator::generate_chambers()
+ {
+- foreach (const config &ch, cfg_.child_range("chamber"))
++ BOOST_FOREACH(const config &ch, cfg_.child_range("chamber"))
+ {
+ // If there is only a chance of the chamber appearing, deal with that here.
+ if (ch.has_attribute("chance") && (rand() % 100) < ch["chance"].to_int()) {
+@@ -195,7 +196,7 @@
+
+ chambers_.push_back(new_chamber);
+
+- foreach (const config &p, ch.child_range("passage"))
++ BOOST_FOREACH(const config &p, ch.child_range("passage"))
+ {
+ const std::string &dst = p["destination"];
+
+@@ -220,7 +221,7 @@
+ if (c.items == NULL || c.locs.empty()) return;
+
+ size_t index = 0;
+- foreach (const config::any_child &it, c.items->all_children_range())
++ BOOST_FOREACH(const config::any_child &it, c.items->all_children_range())
+ {
+ config cfg = it.cfg;
+ config &filter = cfg.child("filter");
+Index: src/ai/lua/core.cpp
+===================================================================
+--- src/ai/lua/core.cpp (revision 54624)
++++ src/ai/lua/core.cpp (revision 54625)
+@@ -34,7 +34,6 @@
+ #include "../../actions.hpp"
+ #include "../../attack_prediction.hpp"
+ #include "../../filesystem.hpp"
+-#include "../../foreach.hpp"
+ #include "../../game_display.hpp"
+ #include "../../gamestatus.hpp"
+ #include "../../log.hpp"
+Index: src/ai/default/attack.cpp
+===================================================================
+--- src/ai/default/attack.cpp (revision 54624)
++++ src/ai/default/attack.cpp (revision 54625)
+@@ -25,7 +25,6 @@
+ #include "../manager.hpp"
+
+ #include "../../attack_prediction.hpp"
+-#include "foreach.hpp"
+ #include "../../game_config.hpp"
+ #include "../../log.hpp"
+ #include "../../map.hpp"
+Index: src/ai/default/contexts.cpp
+===================================================================
+--- src/ai/default/contexts.cpp (revision 54624)
++++ src/ai/default/contexts.cpp (revision 54625)
+@@ -22,7 +22,6 @@
+ #include "contexts.hpp"
+
+ #include "../../actions.hpp"
+-#include "../../foreach.hpp"
+ #include "../../log.hpp"
+ #include "../../map.hpp"
+ #include "../../resources.hpp"
+Index: src/ai/default/ai.cpp
+===================================================================
+--- src/ai/default/ai.cpp (revision 54624)
++++ src/ai/default/ai.cpp (revision 54625)
+@@ -26,7 +26,6 @@
+
+ #include "../../array.hpp"
+ #include "../../dialogs.hpp"
+-#include "../../foreach.hpp"
+ #include "../../game_end_exceptions.hpp"
+ #include "../../game_events.hpp"
+ #include "../../game_preferences.hpp"
+@@ -41,6 +40,8 @@
+
+ #include "../../pathfind/pathfind.hpp"
+
++#include <boost/foreach.hpp>
++
+ #include <iterator>
+ #include <algorithm>
+ #include <fstream>
+@@ -144,7 +145,7 @@
+
+ void ai_default_recruitment_stage::on_create() {
+ stage::on_create();
+- foreach (const config &c, cfg_.child_range("limit")) {
++ BOOST_FOREACH(const config &c, cfg_.child_range("limit")) {
+ if (c.has_attribute("type") && c.has_attribute("max") ) {
+ maximum_counts_.insert(std::make_pair(c["type"],lexical_cast_default<int>(c["max"],0)));
+ }
+@@ -193,7 +194,7 @@
+ bool found = false;
+ // Find an available unit that can be recruited,
+ // matches the desired usage type, and comes in under budget.
+- foreach (const std::string &name, current_team().recruits())
++ BOOST_FOREACH(const std::string &name, current_team().recruits())
+ {
+ const unit_type *ut = unit_types.find(name);
+ if (!ut) continue;
+@@ -435,7 +436,7 @@
+
+ team &enemy_team = (*resources::teams)[j->side() - 1];
+ const std::set<std::string> &recruits = enemy_team.recruits();
+- foreach (const std::string &rec, recruits) {
++ BOOST_FOREACH(const std::string &rec, recruits) {
+ get_combat_score_vs(ut,rec,score,weighting,0,0);
+ }
+ continue;
+@@ -677,7 +678,7 @@
+ double best_combat_score_of_advancement = 0;
+ bool best_combat_score_of_advancement_found = false;
+ int best_cost = recall_cost;
+- foreach (const std::string &i, u.advances_to()) {
++ BOOST_FOREACH(const std::string &i, u.advances_to()) {
+ const unit_type *ut = unit_types.find(i);
+ if (!ut) {
+ continue;
+Index: src/ai/configuration.cpp
+===================================================================
+--- src/ai/configuration.cpp (revision 54624)
++++ src/ai/configuration.cpp (revision 54625)
+@@ -22,12 +22,13 @@
+ #include "configuration.hpp"
+
+ #include "../filesystem.hpp"
+-#include "../foreach.hpp"
+ #include "../log.hpp"
+ #include "../serialization/parser.hpp"
+ #include "../serialization/preprocessor.hpp"
+ #include "../team.hpp"
+
++#include <boost/foreach.hpp>
++
+ #include <vector>
+
+ namespace ai {
+@@ -93,7 +94,7 @@
+ }
+
+
+- foreach (const config &ai_configuration, ais.child_range("ai")) {
++ BOOST_FOREACH(const config &ai_configuration, ais.child_range("ai")) {
+ const std::string &id = ai_configuration["id"];
+ if (id.empty()){
+
+@@ -118,7 +119,7 @@
+ void configuration::add_era_ai_from_config(const config &era)
+ {
+ era_ai_configurations_.clear();
+- foreach (const config &ai_configuration, era.child_range("ai")) {
++ BOOST_FOREACH(const config &ai_configuration, era.child_range("ai")) {
+ const std::string &id = ai_configuration["id"];
+ if (id.empty()){
+
+@@ -196,7 +197,7 @@
+ config aspect_config;
+ aspect_config["id"] = id;
+
+- foreach (const config &aiparam, cfg.child_range("ai")) {
++ BOOST_FOREACH(const config &aiparam, cfg.child_range("ai")) {
+ const config &_aspect = aiparam.find_child("aspect","id",id);
+ if (_aspect) {
+ aspect_config.append(_aspect);
+@@ -216,7 +217,7 @@
+ if (aspect_was_attribute) {
+ facet_config["value"] = aiparam[id];
+ } else {
+- foreach (const config &value, aiparam.child_range(id)) {
++ BOOST_FOREACH(const config &value, aiparam.child_range(id)) {
+ facet_config.add_child("value",value);
+ }
+ }
+@@ -242,7 +243,7 @@
+
+ //leave only the [ai] children
+ cfg = config();
+- foreach (const config &aiparam, original_cfg.child_range("ai")) {
++ BOOST_FOREACH(const config &aiparam, original_cfg.child_range("ai")) {
+ cfg.add_child("ai",aiparam);
+ }
+
+@@ -264,7 +265,7 @@
+
+ //find version
+ int version = 10600;
+- foreach (const config &aiparam, cfg.child_range("ai")) {
++ BOOST_FOREACH(const config &aiparam, cfg.child_range("ai")) {
+ if (const config::attribute_value *a = aiparam.get("version")){
+ int v = a->to_int(version);
+ if (version<v) {
+@@ -290,7 +291,7 @@
+ config parsed_cfg = config();
+
+ LOG_AI_CONFIGURATION << "side "<< side <<": merging AI configurations"<< std::endl;
+- foreach (const config &aiparam, cfg.child_range("ai")) {
++ BOOST_FOREACH(const config &aiparam, cfg.child_range("ai")) {
+ parsed_cfg.append(aiparam);
+ }
+
+@@ -302,7 +303,7 @@
+ parsed_cfg.merge_children_by_attribute("aspect","id");
+
+ LOG_AI_CONFIGURATION << "side "<< side <<": removing duplicate [default] tags from aspects"<< std::endl;
+- foreach (config &aspect_cfg, parsed_cfg.child_range("aspect")) {
++ BOOST_FOREACH(config &aspect_cfg, parsed_cfg.child_range("aspect")) {
+ if (!aspect_cfg.child("default")) {
+ WRN_AI_CONFIGURATION << "side "<< side <<": aspect with id=["<<aspect_cfg["id"]<<"] lacks default config facet!" <<std::endl;
+ continue;
+@@ -341,7 +342,7 @@
+ if (cfg["ai_algorithm"]=="idle_ai") {
+ is_idle_ai = true;
+ } else {
+- foreach (config &aiparam, cfg.child_range("ai")) {
++ BOOST_FOREACH(config &aiparam, cfg.child_range("ai")) {
+ if (aiparam["ai_algorithm"]=="idle_ai") {
+ is_idle_ai = true;
+ break;
+@@ -360,8 +361,8 @@
+
+ config fallback_stage_cfg_ai;
+
+- foreach (config &aiparam, cfg.child_range("ai")) {
+- foreach (const well_known_aspect &wka, well_known_aspects) {
++ BOOST_FOREACH(config &aiparam, cfg.child_range("ai")) {
++ BOOST_FOREACH(const well_known_aspect &wka, well_known_aspects) {
+ if (wka.was_an_attribute_) {
+ aiparam.remove_attribute(wka.name_);
+ } else {
+@@ -370,7 +371,7 @@
+ }
+
+
+- foreach (const config &aitarget, aiparam.child_range("target")) {
++ BOOST_FOREACH(const config &aitarget, aiparam.child_range("target")) {
+ config aigoal;
+ transfer_turns_and_time_of_day_data(aiparam,aigoal);
+
+@@ -388,14 +389,14 @@
+ aiparam.clear_children("target");
+
+
+- foreach (config &ai_protect_unit, aiparam.child_range("protect_unit")) {
++ BOOST_FOREACH(config &ai_protect_unit, aiparam.child_range("protect_unit")) {
+ transfer_turns_and_time_of_day_data(aiparam,ai_protect_unit);
+ upgrade_protect_goal_config_from_1_07_02_to_1_07_03(side,ai_protect_unit,parsed_cfg,true);
+ }
+ aiparam.clear_children("protect_unit");
+
+
+- foreach (config &ai_protect_location, aiparam.child_range("protect_location")) {
++ BOOST_FOREACH(config &ai_protect_location, aiparam.child_range("protect_location")) {
+ transfer_turns_and_time_of_day_data(aiparam,ai_protect_location);
+ upgrade_protect_goal_config_from_1_07_02_to_1_07_03(side,ai_protect_location,parsed_cfg,false);
+ }
+@@ -423,19 +424,19 @@
+ fallback_stage_cfg_ai.clear_children("aspect");
+
+ //move [stage]s to root of the config
+- foreach (const config &aistage, fallback_stage_cfg_ai.child_range("stage")) {
++ BOOST_FOREACH(const config &aistage, fallback_stage_cfg_ai.child_range("stage")) {
+ parsed_cfg.add_child("stage",aistage);
+ }
+ fallback_stage_cfg_ai.clear_children("stage");
+
+ //move [goal]s to root of the config
+- foreach (const config &aigoal, fallback_stage_cfg_ai.child_range("goal")) {
++ BOOST_FOREACH(const config &aigoal, fallback_stage_cfg_ai.child_range("goal")) {
+ parsed_cfg.add_child("goal",aigoal);
+ }
+ fallback_stage_cfg_ai.clear_children("goal");
+
+ //move [modify_ai]'s to root of the config
+- foreach (const config &aimodifyai, fallback_stage_cfg_ai.child_range("modify_ai")) {
++ BOOST_FOREACH(const config &aimodifyai, fallback_stage_cfg_ai.child_range("modify_ai")) {
+ parsed_cfg.add_child("modify_ai",aimodifyai);
+ }
+ fallback_stage_cfg_ai.clear_children("modify_ai");
+@@ -452,12 +453,12 @@
+ {
+ config cfg;
+
+- foreach (const config &aiparam, ai_parameters) {
++ BOOST_FOREACH(const config &aiparam, ai_parameters) {
+ cfg.add_child("ai",aiparam);
+ }
+
+ DBG_AI_CONFIGURATION << "side "<< side <<": upgrading aspects from syntax of 1.7.2 to 1.7.3, old-style config is:" << std::endl << cfg << std::endl;
+- foreach (const well_known_aspect &wka, well_known_aspects) {
++ BOOST_FOREACH(const well_known_aspect &wka, well_known_aspects) {
+ upgrade_aspect_config_from_1_07_02_to_1_07_03(side, cfg,parsed_cfg,wka.name_,wka.was_an_attribute_);
+ }
+ }
+Index: src/ai/contexts.cpp
+===================================================================
+--- src/ai/contexts.cpp (revision 54624)
++++ src/ai/contexts.cpp (revision 54625)
+@@ -47,6 +47,8 @@
+ #include "../tod_manager.hpp"
+ #include "../unit_display.hpp"
+
++#include <boost/foreach.hpp>
++
+ static lg::log_domain log_ai("ai/general");
+ #define DBG_AI LOG_STREAM(debug, log_ai)
+ #define LOG_AI LOG_STREAM(info, log_ai)
+@@ -223,19 +225,19 @@
+
+ void readonly_context_impl::on_readonly_context_create() {
+ //init the composite ai engines
+- foreach(const config &cfg_element, cfg_.child_range("engine")){
++ BOOST_FOREACH(const config &cfg_element, cfg_.child_range("engine")){
+ engine::parse_engine_from_config(*this,cfg_element,std::back_inserter(engines_));
+ }
+
+ // init the composite ai aspects
+- foreach(const config &cfg_element, cfg_.child_range("aspect")){
++ BOOST_FOREACH(const config &cfg_element, cfg_.child_range("aspect")){
+ std::vector<aspect_ptr> aspects;
+ engine::parse_aspect_from_config(*this,cfg_element,cfg_element["id"],std::back_inserter(aspects));
+ add_aspects(aspects);
+ }
+
+ // init the composite ai goals
+- foreach(const config &cfg_element, cfg_.child_range("goal")){
++ BOOST_FOREACH(const config &cfg_element, cfg_.child_range("goal")){
+ engine::parse_goal_from_config(*this,cfg_element,std::back_inserter(get_goals()));
+ }
+ }
+@@ -255,13 +257,13 @@
+ config readonly_context_impl::to_readonly_context_config() const
+ {
+ config cfg;
+- foreach(const engine_ptr e, engines_) {
++ BOOST_FOREACH(const engine_ptr e, engines_) {
+ cfg.add_child("engine",e->to_config());
+ }
+- foreach(const aspect_map::value_type a, aspects_) {
++ BOOST_FOREACH(const aspect_map::value_type a, aspects_) {
+ cfg.add_child("aspect",a.second->to_config());
+ }
+- foreach(const goal_ptr g, goals_) {
++ BOOST_FOREACH(const goal_ptr g, goals_) {
+ cfg.add_child("goal",g->to_config());
+ }
+ return cfg;
+@@ -366,7 +368,7 @@
+ }
+
+ for(std::map<map_location,pathfind::paths>::iterator m = res.begin(); m != res.end(); ++m) {
+- foreach (const pathfind::paths::step &dest, m->second.destinations)
++ BOOST_FOREACH(const pathfind::paths::step &dest, m->second.destinations)
+ {
+ const map_location& src = m->first;
+ const map_location& dst = dest.curr;
+@@ -406,7 +408,7 @@
+
+ void readonly_context_impl::add_aspects(std::vector< aspect_ptr > &aspects )
+ {
+- foreach (aspect_ptr a, aspects) {
++ BOOST_FOREACH(aspect_ptr a, aspects) {
+ const std::string id = a->get_id();
+ known_aspect_map::iterator i = known_aspects_.find(id);
+ if (i != known_aspects_.end()) {
+@@ -1024,7 +1026,7 @@
+ // The 0.5 power avoids underestimating too much the damage of a wounded unit.
+ int hp = int(sqrt(double(un.hitpoints()) / un.max_hitpoints()) * 1000);
+ int most_damage = 0;
+- foreach (const attack_type &att, un.attacks())
++ BOOST_FOREACH(const attack_type &att, un.attacks())
+ {
+ int damage = att.damage() * att.num_attacks() * (100 + tod_modifier);
+ if (damage > most_damage) {
+@@ -1112,7 +1114,7 @@
+ map_location const* best_occupied_keep = &map_location::null_location;
+ double move_left_at_best_occupied_keep = 0.0;
+
+- foreach (const pathfind::paths::step &dest, leader_paths.destinations)
++ BOOST_FOREACH(const pathfind::paths::step &dest, leader_paths.destinations)
+ {
+ const map_location &loc = dest.curr;
+ if (keeps().find(loc)!=keeps().end()){
+Index: src/ai/manager.cpp
+===================================================================
+--- src/ai/manager.cpp (revision 54624)
++++ src/ai/manager.cpp (revision 54625)
+@@ -27,13 +27,14 @@
+ #include "registry.hpp"
+ #include "../game_events.hpp"
+ #include "../game_preferences.hpp"
+-#include "../foreach.hpp"
+ #include "../log.hpp"
+ #include "../replay.hpp"
+ #include "../serialization/string_utils.hpp"
+ #include "../statistics.hpp"
+ #include "composite/component.hpp"
+
++#include <boost/foreach.hpp>
++
+ #include <map>
+ #include <stack>
+ #include <vector>
+@@ -89,7 +90,7 @@
+
+ if (this->ai_) {
+ ai_->on_create();
+- foreach (config &mod_ai, cfg_.child_range("modify_ai")) {
++ BOOST_FOREACH(config &mod_ai, cfg_.child_range("modify_ai")) {
+ if (!mod_ai.has_attribute("side")) {
+ mod_ai["side"] = side;
+ }
+@@ -149,8 +150,8 @@
+ cfg_.merge_children_by_attribute("aspect","id");
+ } else {
+ // else run 'add_facet' command on each [aspect][facet]
+- foreach (const config &cfg_a, cfg.child_range("aspect")) {
+- foreach (const config &cfg_f, cfg_a.child_range("facet")) {
++ BOOST_FOREACH(const config &cfg_a, cfg.child_range("aspect")) {
++ BOOST_FOREACH(const config &cfg_f, cfg_a.child_range("facet")) {
+ readonly_context_->add_facet(cfg_a["id"],cfg_f);
+ }
+ }
+Index: src/ai/composite/component.cpp
+===================================================================
+--- src/ai/composite/component.cpp (revision 54624)
++++ src/ai/composite/component.cpp (revision 54625)
+@@ -23,12 +23,12 @@
+ #include "property_handler.hpp"
+ #include "../../config.hpp"
+ #include "../../log.hpp"
+-#include "../../foreach.hpp"
+
+ #include "../formula/ai.hpp"
+
+ #include <boost/lexical_cast.hpp>
+ #include <boost/regex.hpp>
++#include <boost/foreach.hpp>
+
+ namespace pathfind {
+
+@@ -125,7 +125,7 @@
+ std::vector<std::string> component::get_children_types()
+ {
+ std::vector<std::string> types;
+- foreach (property_handler_map::value_type &ph, property_handlers_) {
++ BOOST_FOREACH(property_handler_map::value_type &ph, property_handlers_) {
+ types.push_back(ph.first);
+ }
+ return types;
+@@ -241,9 +241,9 @@
+
+ s << offset_str << type<<"["<<root->get_id() <<"] "<<root->get_engine()<<" "<<root->get_name()<< std::endl;
+
+- foreach (std::string t, t_list) {
++ BOOST_FOREACH(std::string t, t_list) {
+ std::vector<component*> c_list = root->get_children(t);
+- foreach (component *c, c_list) {
++ BOOST_FOREACH(component *c, c_list) {
+ print_component(c,t,s,offset+1);
+ }
+ }
+Index: src/ai/composite/stage.cpp
+===================================================================
+--- src/ai/composite/stage.cpp (revision 54624)
++++ src/ai/composite/stage.cpp (revision 54625)
+@@ -22,7 +22,6 @@
+ #include "engine.hpp"
+ #include "stage.hpp"
+ #include "../contexts.hpp"
+-#include "../../foreach.hpp"
+ #include "../../log.hpp"
+ #include "../../resources.hpp"
+ #include "../../tod_manager.hpp"
+Index: src/ai/composite/engine.cpp
+===================================================================
+--- src/ai/composite/engine.cpp (revision 54624)
++++ src/ai/composite/engine.cpp (revision 54625)
+@@ -21,7 +21,6 @@
+ #include "engine.hpp"
+ #include "contexts.hpp"
+
+-#include "../../foreach.hpp"
+ #include "../../log.hpp"
+
+ namespace ai {
+Index: src/ai/composite/engine_default.cpp
+===================================================================
+--- src/ai/composite/engine_default.cpp (revision 54624)
++++ src/ai/composite/engine_default.cpp (revision 54625)
+@@ -24,7 +24,6 @@
+ #include "engine_default.hpp"
+ #include "rca.hpp"
+ #include "stage.hpp"
+-#include "../../foreach.hpp"
+ #include "../../log.hpp"
+
+ namespace ai {
+Index: src/ai/composite/goal.cpp
+===================================================================
+--- src/ai/composite/goal.cpp (revision 54624)
++++ src/ai/composite/goal.cpp (revision 54625)
+@@ -24,7 +24,6 @@
+ #include "../../log.hpp"
+ #include "../lua/lua_object.hpp"
+ #include "../../gamestatus.hpp"
+-#include "../../foreach.hpp"
+ #include "../../resources.hpp"
+ #include "../../scripting/lua.hpp"
+ #include "../../terrain_filter.hpp"
+@@ -34,6 +33,7 @@
+ #include "../../variable.hpp"
+
+ #include <boost/lexical_cast.hpp>
++#include <boost/foreach.hpp>
+
+ namespace ai {
+
+@@ -128,7 +128,7 @@
+ if (!criteria) return;
+
+ //find the enemy leaders and explicit targets
+- foreach (const unit &u, *resources::units) {
++ BOOST_FOREACH(const unit &u, *resources::units) {
+ if (u.matches_filter(vconfig(criteria), u.get_location())) {
+ LOG_AI_GOAL << "found explicit target unit at ... " << u.get_location() << " with value: " << value() << "\n";
+ *target_list = target(u.get_location(), value(), target::EXPLICIT);
+@@ -173,7 +173,7 @@
+
+ std::set<map_location> items;
+ filter_ptr_->get_locations(items);
+- foreach (const map_location &loc, items)
++ BOOST_FOREACH(const map_location &loc, items)
+ {
+ LOG_AI_GOAL << "found explicit target location ... " << loc << " with value: " << value() << std::endl;
+ *target_list = target(loc, value(), target::EXPLICIT);
+@@ -252,7 +252,7 @@
+
+ std::set<map_location> items;
+ if (protect_unit_) {
+- foreach (const unit &u, units)
++ BOOST_FOREACH(const unit &u, units)
+ {
+ if (protect_only_own_unit_ && u.side() != get_side()) {
+ continue;
+@@ -268,9 +268,9 @@
+ }
+ DBG_AI_GOAL << "side " << get_side() << ": seaching for threats in "+goal_type+" goal" << std::endl;
+ // Look for directions to protect a specific location or specific unit.
+- foreach (const map_location &loc, items)
++ BOOST_FOREACH(const map_location &loc, items)
+ {
+- foreach (const unit &u, units)
++ BOOST_FOREACH(const unit &u, units)
+ {
+ int distance = distance_between(u.get_location(), loc);
+ if (current_team().is_enemy(u.side()) && distance < radius_ &&
+@@ -325,7 +325,7 @@
+ handler_->handle(c, true, l_obj);
+ std::vector < target > targets = *(l_obj->get());
+
+- foreach (target tg, targets)
++ BOOST_FOREACH(target tg, targets)
+ {
+ *target_list = tg;
+ }
+Index: src/ai/composite/engine_fai.cpp
+===================================================================
+--- src/ai/composite/engine_fai.cpp (revision 54624)
++++ src/ai/composite/engine_fai.cpp (revision 54625)
+@@ -25,7 +25,6 @@
+ #include "../formula/candidates.hpp"
+ #include "../formula/stage_side_formulas.hpp"
+ #include "../formula/stage_unit_formulas.hpp"
+-#include "../../foreach.hpp"
+ #include "../../log.hpp"
+
+ namespace ai {
+Index: src/ai/composite/aspect.hpp
+===================================================================
+--- src/ai/composite/aspect.hpp (revision 54624)
++++ src/ai/composite/aspect.hpp (revision 54625)
+@@ -265,7 +265,7 @@
+ , facets_()
+ , default_()
+ {
+- foreach (const config &cfg_element, this->cfg_.child_range("facet") ){
++ BOOST_FOREACH(const config &cfg_element, this->cfg_.child_range("facet") ){
+ add_facet(-1,cfg_element);
+ }
+
+@@ -291,7 +291,7 @@
+ {
+ std::vector<aspect_ptr> facets_base;
+ engine::parse_aspect_from_config(*this,cfg,this->get_id(),std::back_inserter(facets_base));
+- foreach (aspect_ptr a, facets_base ){
++ BOOST_FOREACH(aspect_ptr a, facets_base ){
+ typename aspect_type<T>::typesafe_ptr b = boost::dynamic_pointer_cast< typesafe_aspect<T> > (a);
+ facets.push_back(b);
+ }
+@@ -301,7 +301,7 @@
+ virtual void recalculate() const
+ {
+ ///@todo 1.9 optimize in case of an aspect which returns variant
+- foreach (const typename aspect_type<T>::typesafe_ptr &f, make_pair(facets_.rbegin(),facets_.rend())) {
++ BOOST_FOREACH(const typename aspect_type<T>::typesafe_ptr &f, make_pair(facets_.rbegin(),facets_.rend())) {
+ if (f->active()) {
+ this->value_ = boost::shared_ptr<T>(f->get_ptr());
+ this->valid_ = true;
+@@ -316,7 +316,7 @@
+ virtual config to_config() const
+ {
+ config cfg = aspect::to_config();
+- foreach (const typename aspect_type<T>::typesafe_ptr f, facets_) {
++ BOOST_FOREACH(const typename aspect_type<T>::typesafe_ptr f, facets_) {
+ cfg.add_child("facet",f->to_config());
+ }
+ if (default_) {
+@@ -334,7 +334,7 @@
+ std::vector< aspect_ptr > facets;
+ engine::parse_aspect_from_config(*this,cfg,this->get_id(),std::back_inserter(facets));
+ int j=0;
+- foreach (aspect_ptr a, facets ){
++ BOOST_FOREACH(aspect_ptr a, facets ){
+ typename aspect_type<T>::typesafe_ptr b = boost::dynamic_pointer_cast< typesafe_aspect<T> > (a);
+ facets_.insert(facets_.begin()+pos+j,b);
+ j++;
+Index: src/ai/composite/property_handler.hpp
+===================================================================
+--- src/ai/composite/property_handler.hpp (revision 54624)
++++ src/ai/composite/property_handler.hpp (revision 54625)
+@@ -23,9 +23,9 @@
+ #define AI_COMPOSITE_PROPERTY_HANDLER_HPP_INCLUDED
+
+ #include <boost/function.hpp>
++#include <boost/foreach.hpp>
+
+ #include "config.hpp"
+-#include "foreach.hpp"
+ #include "ai/composite/component.hpp"
+
+ namespace ai{
+@@ -134,7 +134,7 @@
+ std::vector<component*> handle_get_children()
+ {
+ std::vector<component*> children;
+- foreach (t_ptr v, values_) {
++ BOOST_FOREACH(t_ptr v, values_) {
+ children.push_back(&*v);
+ }
+ return children;
+@@ -149,7 +149,7 @@
+ t_ptr_vector values;
+ factory_(values,cfg);
+ int j=0;
+- foreach (t_ptr b, values ){
++ BOOST_FOREACH(t_ptr b, values ){
+ values_.insert(values_.begin()+pos+j,b);
+ j++;
+ }
+@@ -200,7 +200,7 @@
+ //* is a special case - 'delete all facets'
+ if (child.id == "*") {
+ bool b = false;
+- foreach(typename aspect_map::value_type a, aspects_) {
++ BOOST_FOREACH(typename aspect_map::value_type a, aspects_) {
+ b |= a.second->delete_all_facets();
+ }
+ return b;
+@@ -212,7 +212,7 @@
+ std::vector<component*> handle_get_children()
+ {
+ std::vector<component*> children;
+- foreach(typename aspect_map::value_type a, aspects_) {
++ BOOST_FOREACH(typename aspect_map::value_type a, aspects_) {
+ children.push_back(&*a.second);
+ }
+ return children;
+Index: src/ai/composite/ai.cpp
+===================================================================
+--- src/ai/composite/ai.cpp (revision 54624)
++++ src/ai/composite/ai.cpp (revision 54625)
+@@ -27,11 +27,11 @@
+ #include "stage.hpp"
+ #include "../manager.hpp"
+ #include "../../actions.hpp"
+-#include "../../foreach.hpp"
+ #include "../../log.hpp"
+
+ #include <boost/bind.hpp>
+ #include <boost/function.hpp>
++#include <boost/foreach.hpp>
+
+ namespace ai {
+
+@@ -60,7 +60,7 @@
+ cfg_["id"]<<"]"<<std::endl;
+
+ // init the composite ai stages
+- foreach(const config &cfg_element, cfg_.child_range("stage")){
++ BOOST_FOREACH(const config &cfg_element, cfg_.child_range("stage")){
+ add_stage(cfg_element);
+ }
+
+@@ -115,7 +115,7 @@
+ std::vector< stage_ptr > stages;
+ create_stage(stages,cfg);
+ int j=0;
+- foreach (stage_ptr b, stages ){
++ BOOST_FOREACH(stage_ptr b, stages ){
+ stages_.push_back(b);
+ j++;
+ }
+@@ -128,7 +128,7 @@
+ std::vector< goal_ptr > goals;
+ create_goal(goals,cfg);
+ int j=0;
+- foreach (goal_ptr b, goals ){
++ BOOST_FOREACH(goal_ptr b, goals ){
+ get_goals().push_back(b);
+ j++;
+ }
+@@ -137,7 +137,7 @@
+
+
+ void ai_composite::play_turn(){
+- foreach(stage_ptr &s, stages_){
++ BOOST_FOREACH(stage_ptr &s, stages_){
+ s->play_stage();
+ }
+ }
+@@ -206,7 +206,7 @@
+ config cfg;
+
+ //serialize the composite ai stages
+- foreach(const stage_ptr &s, stages_){
++ BOOST_FOREACH(const stage_ptr &s, stages_){
+ cfg.add_child("stage",s->to_config());
+ }
+
+Index: src/ai/formula/candidates.cpp
+===================================================================
+--- src/ai/formula/candidates.cpp (revision 54624)
++++ src/ai/formula/candidates.cpp (revision 54625)
+@@ -19,10 +19,11 @@
+
+ #include "ai.hpp"
+ #include "candidates.hpp"
+-#include "foreach.hpp"
+ #include "../../log.hpp"
+ #include "../../resources.hpp"
+
++#include <boost/foreach.hpp>
++
+ static lg::log_domain log_formula_ai("ai/engine/fai");
+ #define ERR_AI LOG_STREAM(err, log_formula_ai)
+
+@@ -32,7 +33,7 @@
+ void candidate_action_manager::load_config(const config& cfg, ai::formula_ai* ai, function_symbol_table* function_table)
+ {
+ // register candidate actions
+- foreach (const config &rc_action, cfg.child_range("register_candidate_action"))
++ BOOST_FOREACH(const config &rc_action, cfg.child_range("register_candidate_action"))
+ {
+ candidate_action_ptr new_ca = load_candidate_action_from_config(rc_action,ai,function_table);
+
+@@ -67,7 +68,7 @@
+ {
+ evaluated_candidate_actions_.clear();
+
+- foreach(candidate_action_ptr cm, candidate_actions_)
++ BOOST_FOREACH(candidate_action_ptr cm, candidate_actions_)
+ {
+ cm->evaluate(ai, units);
+ evaluated_candidate_actions_.insert(cm);
+@@ -116,7 +117,7 @@
+ const config & filter_params = cfg.child("filter");
+
+ if( filter_params ) {
+- foreach( const config::attribute filter_param, filter_params.attribute_range() )
++ BOOST_FOREACH( const config::attribute filter_param, filter_params.attribute_range() )
+ {
+ game_logic::const_formula_ptr filter_formula(
+ new game_logic::formula(filter_param.second, function_table));
+Index: src/ai/formula/stage_side_formulas.cpp
+===================================================================
+--- src/ai/formula/stage_side_formulas.cpp (revision 54624)
++++ src/ai/formula/stage_side_formulas.cpp (revision 54625)
+@@ -22,7 +22,6 @@
+ #include "stage_side_formulas.hpp"
+ #include "ai.hpp"
+
+-#include "../../foreach.hpp"
+ #include "../../formula.hpp"
+ #include "../../formula_function.hpp"
+ #include "../../log.hpp"
+Index: src/ai/formula/ai.cpp
+===================================================================
+--- src/ai/formula/ai.cpp (revision 54624)
++++ src/ai/formula/ai.cpp (revision 54625)
+@@ -32,7 +32,6 @@
+
+ #include "../../callable_objects.hpp"
+ #include "../../game_display.hpp"
+-#include "../../foreach.hpp"
+ #include "../../formula_debugger.hpp"
+ #include "../../log.hpp"
+ #include "../../menu_events.hpp"
+@@ -42,6 +41,8 @@
+ #include "../../tod_manager.hpp"
+ #include "../../pathfind/pathfind.hpp"
+
++#include <boost/foreach.hpp>
++
+ static lg::log_domain log_formula_ai("ai/engine/fai");
+ #define DBG_AI LOG_STREAM(debug, log_formula_ai)
+ #define LOG_AI LOG_STREAM(info, log_formula_ai)
+@@ -548,7 +549,7 @@
+ variant villages_from_set(const Container& villages,
+ const std::set<map_location>* exclude=NULL) {
+ std::vector<variant> vars;
+- foreach(const map_location& loc, villages) {
++ BOOST_FOREACH(const map_location& loc, villages) {
+ if(exclude && exclude->count(loc)) {
+ continue;
+ }
+@@ -617,7 +618,7 @@
+ {
+ const std::vector<std::string> &rp = get_recruitment_pattern();
+ std::vector<variant> vars;
+- foreach (const std::string &i, rp) {
++ BOOST_FOREACH(const std::string &i, rp) {
+ vars.push_back(variant(i));
+ }
+ return variant(&vars);
+@@ -751,7 +752,7 @@
+ std::vector<variant> v;
+ tmp.push_back( v );
+ }
+- foreach (const unit &u, units) {
++ BOOST_FOREACH(const unit &u, units) {
+ tmp[u.side() - 1].push_back(variant(new unit_callable(u)));
+ }
+ for( size_t i = 0; i<tmp.size(); ++i)
+@@ -924,7 +925,7 @@
+ //make sure we don't run out of refcount
+ vars_.add_ref();
+
+- foreach (const config &func, cfg_.child_range("function"))
++ BOOST_FOREACH(const config &func, cfg_.child_range("function"))
+ {
+ const t_string &name = func["name"];
+ const t_string &inputs = func["inputs"];
+@@ -947,7 +948,7 @@
+ if (const config &ai_vars = cfg_.child("vars"))
+ {
+ variant var;
+- foreach (const config::attribute &i, ai_vars.attribute_range()) {
++ BOOST_FOREACH(const config::attribute &i, ai_vars.attribute_range()) {
+ var.serialize_from_string(i.second);
+ vars_.add(i.first, var);
+ }
+Index: src/ai/formula/function_table.cpp
+===================================================================
+--- src/ai/formula/function_table.cpp (revision 54624)
++++ src/ai/formula/function_table.cpp (revision 54625)
+@@ -24,7 +24,6 @@
+
+ #include "../../attack_prediction.hpp"
+ #include "../../filesystem.hpp"
+-#include "../../foreach.hpp"
+ #include "../../game_display.hpp"
+ #include "../../log.hpp"
+ #include "../../map_label.hpp"
+@@ -36,6 +35,7 @@
+ #include "../../unit.hpp"
+ #include "../../pathfind/pathfind.hpp"
+
++#include <boost/foreach.hpp>
+
+ static lg::log_domain log_formula_ai("ai/engine/fai");
+ #define LOG_AI LOG_STREAM(info, log_formula_ai)
+@@ -355,7 +355,7 @@
+ if( scores[current_side][i] > 98 )
+ continue;
+
+- foreach( int side , enemies) {
++ BOOST_FOREACH( int side , enemies) {
+ int diff = scores[current_side][i] - scores[side][i];
+ if ( diff > enemy_tollerancy) {
+ valid = false;
+@@ -365,7 +365,7 @@
+ }
+
+ if( valid ) {
+- foreach( int side , allies) {
++ BOOST_FOREACH( int side , allies) {
+ if ( scores[current_side][i] - scores[side][i] > ally_tollerancy ) {
+ valid = false;
+ break;
+@@ -563,7 +563,7 @@
+ visited_locs.erase(starting_loc);
+
+ std::vector<variant> res;
+- foreach( const map_location& ml, visited_locs) {
++ BOOST_FOREACH( const map_location& ml, visited_locs) {
+ res.push_back( variant(new location_callable( ml ) ) );
+ }
+
+@@ -841,7 +841,7 @@
+ ai::attack_analysis* analysis = convert_variant<ai::attack_analysis>(attack);
+ //unit_map units_with_moves(*resources::units);
+ //typedef std::pair<map_location, map_location> mv;
+- //foreach (const mv &m, analysis->movements) {
++ //BOOST_FOREACH(const mv &m, analysis->movements) {
+ // units_with_moves.move(m.first, m.second);
+ //}
+
+@@ -1629,7 +1629,7 @@
+
+ std::vector<attack_type> attacks = attacker.attacks();
+
+- foreach(const attack_type &attack, attacks) {
++ BOOST_FOREACH(const attack_type &attack, attacks) {
+ const int dmg = round_damage(attack.damage(), defender.damage_from(attack), 100) * attack.num_attacks();
+ if (attack.range() == "melee") {
+ highest_melee_damage = std::max(highest_melee_damage, dmg);
+Index: src/ai/testing/ca_testing_move_to_targets.cpp
+===================================================================
+--- src/ai/testing/ca_testing_move_to_targets.cpp (revision 54624)
++++ src/ai/testing/ca_testing_move_to_targets.cpp (revision 54625)
+@@ -22,7 +22,6 @@
+
+ #include "../composite/ai.hpp"
+ #include "../actions.hpp"
+-#include "../../foreach.hpp"
+ #include "../../log.hpp"
+ #include "../../map.hpp"
+ #include "../../resources.hpp"
+Index: src/ai/testing/ca_testing_recruitment.cpp
+===================================================================
+--- src/ai/testing/ca_testing_recruitment.cpp (revision 54624)
++++ src/ai/testing/ca_testing_recruitment.cpp (revision 54625)
+@@ -25,7 +25,6 @@
+ #include "../composite/rca.hpp"
+ #include "../composite/stage.hpp"
+ #include "../../gamestatus.hpp"
+-#include "../../foreach.hpp"
+ #include "../../log.hpp"
+ #include "../../map.hpp"
+ #include "../../resources.hpp"
+@@ -33,6 +32,7 @@
+ #include "../../wml_exception.hpp"
+ #include "../../pathfind/pathfind.hpp"
+
++#include <boost/foreach.hpp>
+
+ #include <numeric>
+ #include <string>
+@@ -206,7 +206,7 @@
+ int get_current_qty(const std::string &name) const
+ {
+ int counter = 0;
+- foreach(unit &un, *resources::units){
++ BOOST_FOREACH(unit &un, *resources::units){
+ if(un.side() == side() && un.type_id() == name) // @todo: is type_id good?
+ {
+ counter++;
+@@ -345,7 +345,7 @@
+ const int hitpoints_const = 100;
+ double score = 0;
+ double total_weight = 0;
+- foreach(const unit &enemy_unit, *resources::units)
++ BOOST_FOREACH(const unit &enemy_unit, *resources::units)
+ {
+ if(enemy_unit.can_recruit() || !t.is_enemy(enemy_unit.side()))
+ {
+@@ -358,13 +358,13 @@
+
+ score += compare_unit_types(info, *enemy_info) * weight;
+ }
+- foreach(fake_team &enemy_team, fake_teams)
++ BOOST_FOREACH(fake_team &enemy_team, fake_teams)
+ {
+ if(!t.is_enemy(enemy_team.side()))
+ {
+ continue;
+ }
+- foreach(const potential_recruit &enemy_unit, enemy_team.extra_units())
++ BOOST_FOREACH(const potential_recruit &enemy_unit, enemy_team.extra_units())
+ {
+ const unit_type *enemy_info = enemy_unit.type();
+ VALIDATE(enemy_info, "Unknown unit type : " + enemy_unit.id() + " while updating recruit quality.");
+@@ -386,7 +386,7 @@
+
+ /*static void update_recruit_qualities(fake_team &t, std::vector<fake_team> &fake_teams)
+ {
+- foreach ( potential_recruit &recruit, t.recruit_list() )
++ BOOST_FOREACH( potential_recruit &recruit, t.recruit_list() )
+ {
+ double score = get_unit_quality(*recruit.type(),t,fake_teams);
+ recruit.set_quality(score);
+@@ -425,11 +425,11 @@
+ }
+
+ std::map<std::string, int> current_units;
+- foreach (const potential_recruit &i, t.extra_units())
++ BOOST_FOREACH(const potential_recruit &i, t.extra_units())
+ {
+ current_units[(i.id())]++;
+ }
+- foreach (const unit &i, *resources::units)
++ BOOST_FOREACH(const unit &i, *resources::units)
+ {
+ if (i.side()==t.side())
+ {
+@@ -440,7 +440,7 @@
+ double max_quality = recruit_list[0].quality();
+ int max_cost = recruit_list[0].cost();
+ std::vector<const potential_recruit*> sorted = std::vector<const potential_recruit*>();
+- foreach(const potential_recruit &i, recruit_list)
++ BOOST_FOREACH(const potential_recruit &i, recruit_list)
+ {
+ if(i.cost() > max_cost)
+ {
+@@ -457,7 +457,7 @@
+ potential_recruit_sorter sorter(max_cost, max_quality, quality_factor);
+ std::sort(sorted.begin(), sorted.end(), sorter);
+ int recruited = 0;
+- foreach(const potential_recruit *i, sorted)
++ BOOST_FOREACH(const potential_recruit *i, sorted)
+ {
+ if(recruited < max_units_to_recruit)
+ {
+@@ -488,7 +488,7 @@
+ static void ai_choose_recruits(fake_team &t, int max_units_to_recruit, double quality_factor, bool counter_recruit)
+ {
+ std::vector<potential_recruit> recruits = ai_choose_best_recruits(t, max_units_to_recruit, quality_factor, counter_recruit);
+- foreach(potential_recruit &i, recruits) {
++ BOOST_FOREACH(potential_recruit &i, recruits) {
+ t.fake_recruit(i);
+ }
+
+@@ -554,7 +554,7 @@
+ //DBG_AI << "start of get_recruit_qualities" << std::endl;
+ typedef std::map<const unit_type*, std::vector<double> > unit_map;
+ unit_map enemies;
+- foreach(unit &un, *resources::units){
++ BOOST_FOREACH(unit &un, *resources::units){
+ if(t.is_enemy(un.side()) && !un.can_recruit()){
+ enemies[un.type()].push_back(
+ static_cast<double>(un.hitpoints())
+@@ -562,10 +562,10 @@
+ }
+ }
+ DBG_AI << "before extra_units of fake_teams: enemies.size() = " << enemies.size() << std::endl;
+- foreach(fake_team &tmp_t, fake_teams)
++ BOOST_FOREACH(fake_team &tmp_t, fake_teams)
+ {
+ if (t.is_enemy(tmp_t.side())) {
+- foreach(potential_recruit &rec, tmp_t.extra_units())
++ BOOST_FOREACH(potential_recruit &rec, tmp_t.extra_units())
+ {
+ enemies[rec.type()].push_back(1.0);
+ }
+@@ -573,10 +573,10 @@
+ }
+ DBG_AI << "after extra_units of fake_teams: enemies.size() = " << enemies.size() << std::endl;
+
+- foreach(potential_recruit &rec, recruit_list) {
++ BOOST_FOREACH(potential_recruit &rec, recruit_list) {
+ double score = 0;
+ double weighting = 0;
+- foreach(unit_map::value_type &enemy, enemies) {
++ BOOST_FOREACH(unit_map::value_type &enemy, enemies) {
+ double hitpoints_sum = std::accumulate(enemy.second.begin(),enemy.second.end(),0);
+ score += compare_unit_types(*rec.type(), *enemy.first) * hitpoints_sum;
+ weighting += hitpoints_sum;
+@@ -621,14 +621,14 @@
+ {
+ std::vector<defender_pair_type*> defenders;
+ std::vector<enemy_pair_type*> enemies;
+- foreach(unit &un, *resources::units)
++ BOOST_FOREACH(unit &un, *resources::units)
+ {
+ if(t.is_enemy(un.side()))
+ {
+ // const unit_type &enemy_type = *un.type();
+ //enemy_pair_type *pair = new enemy_pair_type(new unit_data(un.id(), un.type()));
+ enemy_pair_type *pair = new enemy_pair_type(un.type());
+- foreach(unit &defender, *resources::units)
++ BOOST_FOREACH(unit &defender, *resources::units)
+ {
+ if(!t.is_enemy(defender.side())){
+ //int score = compare_unit_types(*defender.type(), enemy_type);
+@@ -639,9 +639,9 @@
+ //}
+ }
+ }
+- foreach(fake_team &tmp_t, fake_teams){
++ BOOST_FOREACH(fake_team &tmp_t, fake_teams){
+ if(!t.is_enemy(tmp_t.side())){
+- foreach(potential_recruit &rec, tmp_t.extra_units()){
++ BOOST_FOREACH(potential_recruit &rec, tmp_t.extra_units()){
+ // int score = compare_unit_types(*rec.type(), enemy_type);
+ // if(score >= 0){
+ //pair->add_defender(new unit_data(rec.id(), rec.type()));
+@@ -657,7 +657,7 @@
+ //const unit_type &defender_type = *un.type();
+ //defender_pair_type *pair = new defender_pair_type(new unit_data(un.id(), un.type()));
+ defender_pair_type *pair = new defender_pair_type(un.type());
+- foreach(unit &enemy, *resources::units)
++ BOOST_FOREACH(unit &enemy, *resources::units)
+ {
+ //int score = compare_unit_types(defender_type, *enemy.type());
+ //if(score >= 0)
+@@ -666,9 +666,9 @@
+ pair->add_enemy(enemy.type());
+ //}
+ }
+- foreach(fake_team &tmp_t, fake_teams){
++ BOOST_FOREACH(fake_team &tmp_t, fake_teams){
+ if(t.is_enemy(tmp_t.side())){
+- foreach(potential_recruit &rec, tmp_t.extra_units()){
++ BOOST_FOREACH(potential_recruit &rec, tmp_t.extra_units()){
+ //int score = compare_unit_types(defender_type, *rec.type());
+ //if(score >= 0){
+ //pair->add_enemy(new unit_data(rec.id(), rec.type()));
+@@ -680,14 +680,14 @@
+ defenders.push_back(pair);
+ }
+ }
+- foreach(fake_team &tmp_t, fake_teams)
++ BOOST_FOREACH(fake_team &tmp_t, fake_teams)
+ {
+- foreach(potential_recruit &rec, tmp_t.extra_units()){
++ BOOST_FOREACH(potential_recruit &rec, tmp_t.extra_units()){
+ if(t.is_enemy(tmp_t.side())){
+ //const unit_type &enemy_type = *rec.type();
+ //enemy_pair_type *pair = new enemy_pair_type(new unit_data(rec.id(), rec.type()));
+ enemy_pair_type *pair = new enemy_pair_type(rec.type());
+- foreach(unit &defender, *resources::units){
++ BOOST_FOREACH(unit &defender, *resources::units){
+ if(t.is_enemy(defender.side())){
+ continue;
+ }
+@@ -698,11 +698,11 @@
+ //}
+ }
+ //HIER
+- foreach(fake_team &sub_t, fake_teams){
++ BOOST_FOREACH(fake_team &sub_t, fake_teams){
+ if(t.is_enemy(sub_t.side())){
+ continue;
+ }
+- foreach(potential_recruit &sub_rec, sub_t.extra_units()){
++ BOOST_FOREACH(potential_recruit &sub_rec, sub_t.extra_units()){
+ //int score = compare_unit_types(*sub_rec.type(), enemy_type);
+ //if(score >= 0){
+ //pair->add_defender(new unit_data(sub_rec.id(), sub_rec.type()));
+@@ -715,7 +715,7 @@
+ //const unit_type &defender_type = *rec.type();
+ //defender_pair_type *pair = new defender_pair_type(new unit_data(rec.id(), rec.type()));
+ defender_pair_type *pair = new defender_pair_type(rec.type());
+- foreach(unit &enemy, *resources::units)
++ BOOST_FOREACH(unit &enemy, *resources::units)
+ {
+ if(!t.is_enemy(enemy.side())){
+ continue;
+@@ -726,11 +726,11 @@
+ pair->add_enemy(rec.type());
+ // }
+ }
+- foreach(fake_team &sub_t, fake_teams){
++ BOOST_FOREACH(fake_team &sub_t, fake_teams){
+ if(!t.is_enemy(sub_t.side())){
+ continue;
+ }
+- foreach(potential_recruit &sub_rec, sub_t.extra_units()){
++ BOOST_FOREACH(potential_recruit &sub_rec, sub_t.extra_units()){
+ // int score = compare_unit_types(defender_type, *sub_rec.type());
+ // if(score >= 0){
+ //pair->add_enemy(new unit_data(sub_rec.id(), sub_rec.type()));
+@@ -744,17 +744,17 @@
+ }
+ double min_score = 0;
+ double max_score = 0;
+- foreach(enemy_pair_type *pair, enemies)
++ BOOST_FOREACH(enemy_pair_type *pair, enemies)
+ {
+ // if(pair->defenders.size() == 0)
+ // {
+ // pair->score = -10000;
+ // }else{
+- //foreach(unit_data *defender, pair->defenders)
+- foreach(unit_type *defender, pair->defenders)
++ //BOOST_FOREACH(unit_data *defender, pair->defenders)
++ BOOST_FOREACH(unit_type *defender, pair->defenders)
+ {
+ unsigned int defender_enemies = 0;
+- foreach(defender_pair_type *defender_p, defenders)
++ BOOST_FOREACH(defender_pair_type *defender_p, defenders)
+ {
+ //if(defender->id == defender_p->defender->id){
+ if(defender->type_name()() == defender_p->defender->type_name()){
+@@ -778,7 +778,7 @@
+ }
+ double score = 0;
+ score -= max_score - min_score;
+- foreach(enemy_pair_type *pair, enemies)
++ BOOST_FOREACH(enemy_pair_type *pair, enemies)
+ {
+ score += pair->score;
+ }
+@@ -798,16 +798,16 @@
+ typedef std::map<const unit_type*, std::vector<double> > unit_map;
+ unit_map enemies;
+ unit_map defenders;
+- foreach(unit &un, *resources::units){
++ BOOST_FOREACH(unit &un, *resources::units){
+ if(t.is_enemy(un.side())){
+ enemies[un.type()].push_back((double)un.hitpoints() / (double)un.max_hitpoints());
+ }else{
+ defenders[un.type()].push_back(un.hitpoints() / un.max_hitpoints());
+ }
+ }
+- foreach(fake_team &tmp_t, fake_teams)
++ BOOST_FOREACH(fake_team &tmp_t, fake_teams)
+ {
+- foreach(potential_recruit &rec, tmp_t.extra_units())
++ BOOST_FOREACH(potential_recruit &rec, tmp_t.extra_units())
+ {
+ if(t.is_enemy(tmp_t.side())){
+ enemies[rec.type()].push_back(1.0);
+@@ -817,13 +817,13 @@
+ }
+ }
+ double result = 0;
+- foreach(unit_map::value_type &defender, defenders)
++ BOOST_FOREACH(unit_map::value_type &defender, defenders)
+ {
+ double defenders_score = 0;
+- foreach(unit_map::value_type &enemy, enemies)
++ BOOST_FOREACH(unit_map::value_type &enemy, enemies)
+ {
+ double hitpoints_sum = 0;
+- foreach(double i, enemy.second)
++ BOOST_FOREACH(double i, enemy.second)
+ {
+ hitpoints_sum += i;
+ }
+@@ -831,7 +831,7 @@
+
+ }
+ double hitpoints_sum = 0;
+- foreach(double i, defender.second)
++ BOOST_FOREACH(double i, defender.second)
+ {
+ hitpoints_sum += i;
+ }
+@@ -842,7 +842,7 @@
+ return result;
+ // vector<defender_pair> defenders;
+ // vector<enemy_pair> enemies;
+-// //foreach(unit &un, *resources::units)
++// //BOOST_FOREACH(unit &un, *resources::units)
+ // //{
+ // // if(t.is_enemy(un.side()))
+ // // {
+@@ -851,14 +851,14 @@
+ // // defenders.push_back(un.id());
+ // // }
+ // //}
+-// foreach(unit &un, *resources::units)
++// BOOST_FOREACH(unit &un, *resources::units)
+ // {
+ // if(t.is_enemy(un.side()))
+ // {
+ // const unit_type &enemy_type = un.type();
+ // enemy_pair pair;
+ // pair.enemy = new unit_data(un.id(), enemy_type);
+-// foreach(unit &defender, *resources::units)
++// BOOST_FOREACH(unit &defender, *resources::units)
+ // {
+ // int score = compare_unit_types(defender.type(), enemy_type);
+ // if(score >= 0)
+@@ -873,7 +873,7 @@
+ // const unit_type &defender_type = un.type();
+ // defender_pair pair;
+ // pair.defender = new unit_data(defender.id(), defender_type);
+-// foreach(unit &enemy, *resources::units)
++// BOOST_FOREACH(unit &enemy, *resources::units)
+ // {
+ // int score = compare_unit_types(defender_type, enemy.type());
+ // if(score >= 0)
+@@ -885,10 +885,10 @@
+ // enemies.push_back(pair);
+ // }
+ // }
+-// foreach(fake_team &tmp_t, fake_teams)
++// BOOST_FOREACH(fake_team &tmp_t, fake_teams)
+ // {
+ // if(t.is_enemy(tmp_t.side())){
+-// foreach(potential_recruit &rec, tmp_t.extra_units())
++// BOOST_FOREACH(potential_recruit &rec, tmp_t.extra_units())
+ // {
+ //
+ // }
+@@ -898,7 +898,7 @@
+ //
+ // }
+ // //std::vector<unit> no_defense_enemies;
+-// foreach(enemy_pair &pair, enemies)
++// BOOST_FOREACH(enemy_pair &pair, enemies)
+ // {
+ // if(pair.defenders.size() == 0)
+ // {
+@@ -906,11 +906,11 @@
+ //
+ // pair.score = 0;
+ // }else{
+-// foreach(unit_data &defender, pair.defenders)
++// BOOST_FOREACH(unit_data &defender, pair.defenders)
+ // {
+ // //unit_type &defender = defender_data.type;
+ // unsigned int defender_enemies = 0;
+-// foreach(defender_pair &defender_p, defenders)
++// BOOST_FOREACH(defender_pair &defender_p, defenders)
+ // {
+ // if(defender.id == defender_p.defender.id){
+ // defender_enemies = defender_p.enemies.size();
+@@ -924,7 +924,7 @@
+ // }
+ // //enemy_pair *worst_pair = &enemies[0];
+ // double total_score = 0;
+-// foreach(enemy_pair &pair, enemies)
++// BOOST_FOREACH(enemy_pair &pair, enemies)
+ // {
+ // total_score += pair.score;
+ // }
+@@ -936,7 +936,7 @@
+ // //unit &worst_def_unit;
+ // vector<defender_pair> defenders;
+ // vector<enemy_pair> enemies;
+-// /*foreach(unit &un, *resources::units)
++// /*BOOST_FOREACH(unit &un, *resources::units)
+ // {
+ // if(t.is_enemy(un.side()))
+ // {
+@@ -945,14 +945,14 @@
+ // defenders.push_back(un.id());
+ // }
+ // }*/
+-// foreach(unit &un, *resources::units)
++// BOOST_FOREACH(unit &un, *resources::units)
+ // {
+ // if(t.is_enemy(un.side()))
+ // {
+ // const unit_type &enemy_type = un.type();
+ // enemy_pair pair;
+ // pair.enemy = un;
+-// foreach(unit &defender, *resources::units)
++// BOOST_FOREACH(unit &defender, *resources::units)
+ // {
+ // int score = compare_unit_types(defender.type(), enemy_type);
+ // if(score >= 0)
+@@ -967,7 +967,7 @@
+ // const unit_type &defender_type = un.type();
+ // defender_pair pair;
+ // pair.defender = un;
+-// foreach(unit &enemy, *resources::units)
++// BOOST_FOREACH(unit &enemy, *resources::units)
+ // {
+ // int score = compare_unit_types(defender_type, enemy.type());
+ // if(score >= 0)
+@@ -980,7 +980,7 @@
+ // }
+ // }
+ // //std::vector<unit> no_defense_enemies;
+-// foreach(enemy_pair &pair, enemies)
++// BOOST_FOREACH(enemy_pair &pair, enemies)
+ // {
+ // if(pair.defenders.size() == 0)
+ // {
+@@ -988,10 +988,10 @@
+ // return pair.enemy;
+ // //pair.score = 0;
+ // }else{
+-// foreach(unit &defender, pair.defenders)
++// BOOST_FOREACH(unit &defender, pair.defenders)
+ // {
+ // unsigned int defender_enemies = 0;
+-// foreach(defender_pair &defender_p, defenders)
++// BOOST_FOREACH(defender_pair &defender_p, defenders)
+ // {
+ // if(defender.id() == defender_p.defender.id()){
+ // defender_enemies = defender_p.enemies.size();
+@@ -1004,7 +1004,7 @@
+ // }
+ // }
+ // enemy_pair *worst_pair = &enemies[0];
+-// foreach(enemy_pair &pair, enemies)
++// BOOST_FOREACH(enemy_pair &pair, enemies)
+ // {
+ // if(pair.score < worst_pair.score)
+ // {
+@@ -1039,16 +1039,16 @@
+ for(int recruited_amount = 0; recruited_amount < max_units_to_recruit; recruited_amount++)
+ {
+
+- foreach(fake_team &t, fake_teams)
++ BOOST_FOREACH(fake_team &t, fake_teams)
+ {
+ t.reset();
+ }
+
+ std::vector<potential_recruit> ai_recruit_list = ai_t->recruit_list();
+
+- foreach(potential_recruit &recruit_type, ai_recruit_list)
++ BOOST_FOREACH(potential_recruit &recruit_type, ai_recruit_list)
+ {
+- foreach(fake_team &t, fake_teams)
++ BOOST_FOREACH(fake_team &t, fake_teams)
+ {
+ t.reset();
+ }
+@@ -1063,7 +1063,7 @@
+ }
+ LOG_AI << "Pretend that we recruited: " << recruit_type.id() << std::endl;
+ ai_t->fake_recruit(recruit_type);
+- foreach(fake_team &t, fake_teams)
++ BOOST_FOREACH(fake_team &t, fake_teams)
+ {
+ if(ai_t->side() == t.side())
+ {
+Index: src/ai/testing/ca_global_fallback.cpp
+===================================================================
+--- src/ai/testing/ca_global_fallback.cpp (revision 54624)
++++ src/ai/testing/ca_global_fallback.cpp (revision 54625)
+@@ -25,7 +25,6 @@
+ #include "../actions.hpp"
+
+ #include "../../game_display.hpp"
+-#include "../../foreach.hpp"
+ #include "../../log.hpp"
+ #include "../../map.hpp"
+ #include "../../map_label.hpp"
+@@ -36,6 +35,7 @@
+ #include "../../terrain_filter.hpp"
+ #include "../../tod_manager.hpp"
+
++#include <boost/foreach.hpp>
+
+ namespace ai {
+
+@@ -89,7 +89,7 @@
+ LOG_AI << "start" << std::endl;
+ const int ticks = SDL_GetTicks();
+ double res_sum = 0;
+- foreach( unit &u, *resources::units)
++ BOOST_FOREACH( unit &u, *resources::units)
+ {
+ if (u.side()!=get_side())
+ {
+Index: src/ai/testing/stage_fallback.cpp
+===================================================================
+--- src/ai/testing/stage_fallback.cpp (revision 54624)
++++ src/ai/testing/stage_fallback.cpp (revision 54625)
+@@ -23,7 +23,6 @@
+ #include "../configuration.hpp"
+ #include "../manager.hpp"
+ #include "../composite/ai.hpp"
+-#include "../../foreach.hpp"
+ #include "../../log.hpp"
+
+ namespace ai {
+Index: src/ai/testing/ca.cpp
+===================================================================
+--- src/ai/testing/ca.cpp (revision 54624)
++++ src/ai/testing/ca.cpp (revision 54625)
+@@ -25,7 +25,6 @@
+ #include "../composite/rca.hpp"
+ #include "../composite/stage.hpp"
+ #include "../../gamestatus.hpp"
+-#include "../../foreach.hpp"
+ #include "../../log.hpp"
+ #include "../../map.hpp"
+ #include "../../resources.hpp"
+@@ -33,6 +32,7 @@
+ #include "../../wml_exception.hpp"
+ #include "../../pathfind/pathfind.hpp"
+
++#include <boost/foreach.hpp>
+
+ #include <numeric>
+
+@@ -306,7 +306,7 @@
+ bool found = false;
+ // Find an available unit that can be recruited,
+ // matches the desired usage type, and comes in under budget.
+- foreach (const std::string &name, current_team().recruits())
++ BOOST_FOREACH(const std::string &name, current_team().recruits())
+ {
+ const unit_type *ut = unit_types.find(name);
+ if (!ut) continue;
+@@ -686,7 +686,7 @@
+ possible_moves.insert(std::pair<map_location,pathfind::paths>(leader->get_location(), leader_paths));
+
+ map_location loc;
+- foreach (const map_location &l, route.steps)
++ BOOST_FOREACH(const map_location &l, route.steps)
+ {
+ if (leader_paths.destinations.contains(l) &&
+ power_projection(l, get_enemy_dstsrc()) < leader->hitpoints() * max_risk)
+@@ -779,7 +779,7 @@
+ // The leader can't move to his keep, try to move to the closest location
+ // to the keep where there are no enemies in range.
+ int current_distance = distance_between(leader->get_location(), keep);
+- foreach (const pathfind::paths::step &dest, leader_paths.destinations)
++ BOOST_FOREACH(const pathfind::paths::step &dest, leader_paths.destinations)
+ {
+ if (!units_.find(dest.curr).valid()){
+ const int new_distance = distance_between(dest.curr,keep);
+@@ -1728,12 +1728,12 @@
+ }*/
+ //int leader_adj_count = 0;
+ std::vector<map_location> leaders_adj_v;
+- foreach(unit_map::const_iterator leader, leaders){
++ BOOST_FOREACH(unit_map::const_iterator leader, leaders){
+ map_location tmp_leader_adj[6];
+ get_adjacent_tiles(leader->get_location(), tmp_leader_adj);
+- foreach(map_location &loc, tmp_leader_adj){
++ BOOST_FOREACH(map_location &loc, tmp_leader_adj){
+ bool found = false;
+- foreach(map_location &new_loc, leaders_adj_v){
++ BOOST_FOREACH(map_location &new_loc, leaders_adj_v){
+ if(new_loc == loc){
+ found = true;
+ break;
+@@ -1974,7 +1974,7 @@
+ }
+ std::vector<unit_map::unit_iterator> ai_leaders = resources::units->find_leaders(get_side());
+ bool allied_leaders_available = false;
+- foreach(team &tmp_team, *resources::teams){
++ BOOST_FOREACH(team &tmp_team, *resources::teams){
+ if(!current_team().is_enemy(tmp_team.side())){
+ std::vector<unit_map::unit_iterator> allied_leaders = resources::units->find_leaders(get_side());
+ if (!allied_leaders.empty()){
+@@ -2001,7 +2001,7 @@
+ calculate_moves(*resources::units, possible_moves, friends_srcdst, friends_dstsrc, false, true);
+
+ //check for each ai leader if he should move away from his keep
+- foreach(unit_map::unit_iterator &ai_leader, ai_leaders){
++ BOOST_FOREACH(unit_map::unit_iterator &ai_leader, ai_leaders){
+ //only if leader is on a keep
+ if (!resources::game_map->is_keep(ai_leader->get_location())) {
+ continue;
+@@ -2059,7 +2059,7 @@
+ }
+ ai_leader->remove_movement_ai();
+ }
+- foreach(unit_map::unit_iterator &leader, ai_leaders){
++ BOOST_FOREACH(unit_map::unit_iterator &leader, ai_leaders){
+ leader->remove_movement_ai();
+ }
+ //ERR_AI_TESTING_AI_DEFAULT << get_name() << ": evaluate - not yet implemented" << std::endl;
+Index: src/ai/testing/stage_rca.cpp
+===================================================================
+--- src/ai/testing/stage_rca.cpp (revision 54624)
++++ src/ai/testing/stage_rca.cpp (revision 54625)
+@@ -25,10 +25,10 @@
+ #include "../composite/engine.hpp"
+ #include "../composite/property_handler.hpp"
+ #include "../gamestate_observer.hpp"
+-#include "../../foreach.hpp"
+ #include "../../log.hpp"
+
+ #include <boost/bind.hpp>
++#include <boost/foreach.hpp>
+
+ namespace ai {
+
+@@ -49,7 +49,7 @@
+ void candidate_action_evaluation_loop::on_create()
+ {
+ //init the candidate actions
+- foreach(const config &cfg_element, cfg_.child_range("candidate_action")){
++ BOOST_FOREACH(const config &cfg_element, cfg_.child_range("candidate_action")){
+ engine::parse_candidate_action_from_config(*this,cfg_element,back_inserter(candidate_actions_));
+ }
+
+@@ -69,7 +69,7 @@
+ config candidate_action_evaluation_loop::to_config() const
+ {
+ config cfg = stage::to_config();
+- foreach(candidate_action_ptr ca, candidate_actions_){
++ BOOST_FOREACH(candidate_action_ptr ca, candidate_actions_){
+ cfg.add_child("candidate_action",ca->to_config());
+ }
+ return cfg;
+@@ -88,7 +88,7 @@
+ {
+ LOG_AI_TESTING_RCA_DEFAULT << "Starting candidate action evaluation loop for side "<< get_side() << std::endl;
+
+- foreach(candidate_action_ptr ca, candidate_actions_){
++ BOOST_FOREACH(candidate_action_ptr ca, candidate_actions_){
+ ca->enable();
+ }
+
+@@ -103,7 +103,7 @@
+ candidate_action_ptr best_ptr;
+
+ //Evaluation
+- foreach(candidate_action_ptr ca_ptr, candidate_actions_){
++ BOOST_FOREACH(candidate_action_ptr ca_ptr, candidate_actions_){
+ if (!ca_ptr->is_enabled()){
+ DBG_AI_TESTING_RCA_DEFAULT << "Skipping disabled candidate action: "<< *ca_ptr << std::endl;
+ continue;
+Index: src/ai/testing/aspect_attacks.cpp
+===================================================================
+--- src/ai/testing/aspect_attacks.cpp (revision 54624)
++++ src/ai/testing/aspect_attacks.cpp (revision 54625)
+@@ -22,7 +22,6 @@
+
+ #include "../manager.hpp"
+ #include "../../actions.hpp"
+-#include "../../foreach.hpp"
+ #include "../../log.hpp"
+ #include "../../map.hpp"
+ #include "../../team.hpp"
+@@ -31,6 +30,8 @@
+ #include "../../unit.hpp"
+ #include "../../pathfind/pathfind.hpp"
+
++#include <boost/foreach.hpp>
++
+ namespace ai {
+
+ namespace testing_ai_default {
+@@ -468,7 +469,7 @@
+ // The 0.5 power avoids underestimating too much the damage of a wounded unit.
+ int hp = int(sqrt(double(un.hitpoints()) / un.max_hitpoints()) * 1000);
+ int most_damage = 0;
+- foreach (const attack_type &att, un.attacks())
++ BOOST_FOREACH(const attack_type &att, un.attacks())
+ {
+ int damage = att.damage() * att.num_attacks() * (100 + tod_modifier);
+ if (damage > most_damage) {
+@@ -572,7 +573,7 @@
+ // The 0.5 power avoids underestimating too much the damage of a wounded unit.
+ int hp = int(sqrt(double(un.hitpoints()) / un.max_hitpoints()) * 1000);
+ int most_damage = 0;
+- foreach (const attack_type &att, un.attacks())
++ BOOST_FOREACH(const attack_type &att, un.attacks())
+ {
+ int damage = att.damage() * att.num_attacks() * (100 + tod_modifier);
+ if (damage > most_damage) {
+Index: src/play_controller.cpp
+===================================================================
+--- src/play_controller.cpp (revision 54624)
++++ src/play_controller.cpp (revision 54625)
+@@ -21,7 +21,6 @@
+
+ #include "play_controller.hpp"
+ #include "dialogs.hpp"
+-#include "foreach.hpp"
+ #include "game_events.hpp"
+ #include "gettext.hpp"
+ #include "halo.hpp"
+@@ -46,6 +45,8 @@
+ #include "whiteboard/manager.hpp"
+ #include "scripting/lua.hpp"
+
++#include <boost/foreach.hpp>
++
+ static lg::log_domain log_engine("engine");
+ #define LOG_NG LOG_STREAM(info, log_engine)
+ #define DBG_NG LOG_STREAM(debug, log_engine)
+@@ -173,7 +174,7 @@
+ place_sides_in_preferred_locations();
+ }
+
+- foreach (const config &t, level_.child_range("time_area")) {
++ BOOST_FOREACH(const config &t, level_.child_range("time_area")) {
+ tod_manager_.add_time_area(t);
+ }
+
+@@ -192,7 +193,7 @@
+ std::vector<team_builder_ptr> team_builders;
+
+ int team_num = 0;
+- foreach (const config &side, level_.child_range("side"))
++ BOOST_FOREACH(const config &side, level_.child_range("side"))
+ {
+ std::string save_id = get_unique_saveid(side, seen_save_ids);
+ seen_save_ids.insert(save_id);
+@@ -212,7 +213,7 @@
+ team_builders.push_back(tb_ptr);
+ }
+
+- foreach (team_builder_ptr tb_ptr, team_builders)
++ BOOST_FOREACH(team_builder_ptr tb_ptr, team_builders)
+ {
+ gamestate_.build_team_stage_two(tb_ptr);
+ }
+@@ -337,7 +338,7 @@
+ int num_pos = map_.num_valid_starting_positions();
+
+ int side_num = 1;
+- foreach (const config &side, level_.child_range("side"))
++ BOOST_FOREACH(const config &side, level_.child_range("side"))
+ {
+ for(int p = 1; p <= num_pos; ++p) {
+ const map_location& pos = map_.starting_position(p);
+@@ -703,7 +704,7 @@
+ }
+
+ // Write terrain_graphics data in snapshot, too
+- foreach (const config &tg, level_.child_range("terrain_graphics")) {
++ BOOST_FOREACH(const config &tg, level_.child_range("terrain_graphics")) {
+ cfg.add_child("terrain_graphics", tg);
+ }
+
+@@ -914,7 +915,7 @@
+ switch(mode) {
+ case gui::TEXTBOX_SEARCH:
+ {
+- foreach (const unit &u, units_){
++ BOOST_FOREACH(const unit &u, units_){
+ const map_location& loc = u.get_location();
+ if(!gui_->fogged(loc) &&
+ !(teams_[gui_->viewing_team()].is_enemy(u.side()) && u.invisible(loc)))
+@@ -931,13 +932,13 @@
+ }
+ case gui::TEXTBOX_MESSAGE:
+ {
+- foreach(const team& t, teams_) {
++ BOOST_FOREACH(const team& t, teams_) {
+ if(!t.is_empty())
+ dictionary.insert(t.current_player());
+ }
+
+ // Add observers
+- foreach(const std::string& o, gui_->observers()){
++ BOOST_FOREACH(const std::string& o, gui_->observers()){
+ dictionary.insert(o);
+ }
+ //Exclude own nick from tab-completion.
+@@ -1341,7 +1342,7 @@
+
+ if (non_interactive()) {
+ std::cout << "winner: ";
+- foreach (unsigned l, seen_leaders) {
++ BOOST_FOREACH(unsigned l, seen_leaders) {
+ std::string ai = ai::manager::get_active_ai_identifier_for_side(l);
+ if (ai.empty()) ai = "default ai";
+ std::cout << l << " (using " << ai << ") ";
+Index: src/unit_abilities.cpp
+===================================================================
+--- src/unit_abilities.cpp (revision 54624)
++++ src/unit_abilities.cpp (revision 54625)
+@@ -18,7 +18,6 @@
+ * Manage unit-abilities, like heal, cure, and weapon_specials.
+ */
+
+-#include "foreach.hpp"
+ #include "gamestatus.hpp"
+ #include "log.hpp"
+ #include "resources.hpp"
+@@ -27,6 +26,8 @@
+ #include "team.hpp"
+ #include "unit_abilities.hpp"
+
++#include <boost/foreach.hpp>
++
+ static lg::log_domain log_engine("engine");
+ #define ERR_NG LOG_STREAM(err, log_engine)
+
+@@ -124,7 +125,7 @@
+ {
+ if (const config &abilities = cfg_.child("abilities"))
+ {
+- foreach (const config &i, abilities.child_range(ability)) {
++ BOOST_FOREACH(const config &i, abilities.child_range(ability)) {
+ if (ability_active(ability, i, loc) &&
+ ability_affects_self(ability, i, loc))
+ return true;
+@@ -141,7 +142,7 @@
+ const config &adj_abilities = it->cfg_.child("abilities");
+ if (!adj_abilities)
+ continue;
+- foreach (const config &j, adj_abilities.child_range(ability)) {
++ BOOST_FOREACH(const config &j, adj_abilities.child_range(ability)) {
+ if (unit_abilities::affects_side(j, teams_manager::get_teams(), side(), it->side()) &&
+ it->ability_active(ability, j, adjacent[i]) &&
+ ability_affects_adjacent(ability, j, i, loc))
+@@ -158,7 +159,7 @@
+
+ if (const config &abilities = cfg_.child("abilities"))
+ {
+- foreach (const config &i, abilities.child_range(ability)) {
++ BOOST_FOREACH(const config &i, abilities.child_range(ability)) {
+ if (ability_active(ability, i, loc) &&
+ ability_affects_self(ability, i, loc))
+ res.cfgs.push_back(std::pair<const config *, map_location>(&i, loc));
+@@ -175,7 +176,7 @@
+ const config &adj_abilities = it->cfg_.child("abilities");
+ if (!adj_abilities)
+ continue;
+- foreach (const config &j, adj_abilities.child_range(ability)) {
++ BOOST_FOREACH(const config &j, adj_abilities.child_range(ability)) {
+ if (unit_abilities::affects_side(j, teams_manager::get_teams(), side(), it->side()) &&
+ it->ability_active(ability, j, adjacent[i]) &&
+ ability_affects_adjacent(ability, j, i, loc))
+@@ -193,7 +194,7 @@
+
+ const config &abilities = cfg_.child("abilities");
+ if (!abilities) return res;
+- foreach (const config::any_child &ab, abilities.all_children_range()) {
++ BOOST_FOREACH(const config::any_child &ab, abilities.all_children_range()) {
+ std::string const &id = ab.cfg["id"];
+ if (!id.empty())
+ res.push_back(id);
+@@ -208,7 +209,7 @@
+ const config &abilities = cfg_.child("abilities");
+ if (!abilities) return res;
+
+- foreach (const config::any_child &ab, abilities.all_children_range())
++ BOOST_FOREACH(const config::any_child &ab, abilities.all_children_range())
+ {
+ if (force_active || ability_active(ab.key, ab.cfg, loc_))
+ {
+@@ -265,9 +266,9 @@
+ get_adjacent_tiles(loc,adjacent);
+ const unit_map& units = *resources::units;
+
+- foreach (const config &i, cfg.child_range("filter_adjacent"))
++ BOOST_FOREACH(const config &i, cfg.child_range("filter_adjacent"))
+ {
+- foreach (const std::string &j, utils::split(i["adjacent"]))
++ BOOST_FOREACH(const std::string &j, utils::split(i["adjacent"]))
+ {
+ map_location::DIRECTION index =
+ map_location::parse_direction(j);
+@@ -282,9 +283,9 @@
+ }
+ }
+
+- foreach (const config &i, cfg.child_range("filter_adjacent_location"))
++ BOOST_FOREACH(const config &i, cfg.child_range("filter_adjacent_location"))
+ {
+- foreach (const std::string &j, utils::split(i["adjacent"]))
++ BOOST_FOREACH(const std::string &j, utils::split(i["adjacent"]))
+ {
+ map_location::DIRECTION index = map_location::parse_direction(j);
+ if (index == map_location::NDIRECTIONS) {
+@@ -310,7 +311,7 @@
+
+ assert(dir >=0 && dir <= 5);
+ static const std::string adjacent_names[6] = {"n","ne","se","s","sw","nw"};
+- foreach (const config &i, cfg.child_range("affect_adjacent"))
++ BOOST_FOREACH(const config &i, cfg.child_range("affect_adjacent"))
+ {
+ std::vector<std::string> dirs = utils::split(i["adjacent"]);
+ if(std::find(dirs.begin(),dirs.end(),adjacent_names[dir]) != dirs.end()) {
+@@ -366,7 +367,7 @@
+ int flat = 0;
+ int stack = 0;
+ typedef std::pair<const config *, map_location> pt;
+- foreach (pt const &p, cfgs)
++ BOOST_FOREACH(pt const &p, cfgs)
+ {
+ int value = (*p.first)[key].to_int(def);
+ if ((*p.first)["cumulative"].to_bool()) {
+@@ -398,7 +399,7 @@
+ int flat = 0;
+ int stack = 0;
+ typedef std::pair<const config *, map_location> pt;
+- foreach (pt const &p, cfgs)
++ BOOST_FOREACH(pt const &p, cfgs)
+ {
+ int value = (*p.first)[key].to_int(def);
+ if ((*p.first)["cumulative"].to_bool()) {
+@@ -448,7 +449,7 @@
+ namespace {
+ bool get_special_children(std::vector<const config*>& result, const config& parent,
+ const std::string& id, bool just_peeking=false) {
+- foreach (const config::any_child &sp, parent.all_children_range())
++ BOOST_FOREACH(const config::any_child &sp, parent.all_children_range())
+ {
+ if (sp.key == id || sp.cfg["id"] == id) {
+ if(just_peeking) {
+@@ -495,7 +496,7 @@
+ unit_ability_list res;
+ if (const config &specials = cfg_.child("specials"))
+ {
+- foreach (const config &i, specials.child_range(special)) {
++ BOOST_FOREACH(const config &i, specials.child_range(special)) {
+ if (special_active(i, true))
+ res.cfgs.push_back(std::pair<const config *, map_location>
+ (&i, attacker_ ? aloc_ : dloc_));
+@@ -504,7 +505,7 @@
+ if (!other_attack_) return res;
+ if (const config &specials = other_attack_->cfg_.child("specials"))
+ {
+- foreach (const config &i, specials.child_range(special)) {
++ BOOST_FOREACH(const config &i, specials.child_range(special)) {
+ if (other_attack_->special_active(i, false))
+ res.cfgs.push_back(std::pair<const config *, map_location>
+ (&i, attacker_ ? dloc_ : aloc_));
+@@ -519,7 +520,7 @@
+ const config &specials = cfg_.child("specials");
+ if (!specials) return res;
+
+- foreach (const config::any_child &sp, specials.all_children_range())
++ BOOST_FOREACH(const config::any_child &sp, specials.all_children_range())
+ {
+ if (force || special_active(sp.cfg, true)) {
+ const t_string &name = sp.cfg["name"];
+@@ -544,7 +545,7 @@
+ const config &specials = cfg_.child("specials");
+ if (!specials) return res;
+
+- foreach (const config::any_child &sp, specials.all_children_range())
++ BOOST_FOREACH(const config::any_child &sp, specials.all_children_range())
+ {
+ char const *s = force || special_active(sp.cfg, true) ?
+ "name" : "name_inactive";
+@@ -679,9 +680,9 @@
+ get_adjacent_tiles(dloc_,adjacent);
+ }
+
+- foreach (const config &i, cfg.child_range("filter_adjacent"))
++ BOOST_FOREACH(const config &i, cfg.child_range("filter_adjacent"))
+ {
+- foreach (const std::string &j, utils::split(i["adjacent"]))
++ BOOST_FOREACH(const std::string &j, utils::split(i["adjacent"]))
+ {
+ map_location::DIRECTION index =
+ map_location::parse_direction(j);
+@@ -694,9 +695,9 @@
+ }
+ }
+
+- foreach (const config &i, cfg.child_range("filter_adjacent_location"))
++ BOOST_FOREACH(const config &i, cfg.child_range("filter_adjacent_location"))
+ {
+- foreach (const std::string &j, utils::split(i["adjacent"]))
++ BOOST_FOREACH(const std::string &j, utils::split(i["adjacent"]))
+ {
+ map_location::DIRECTION index =
+ map_location::parse_direction(j);
+Index: src/video.cpp
+===================================================================
+--- src/video.cpp (revision 54624)
++++ src/video.cpp (revision 54625)
+@@ -21,7 +21,6 @@
+ #include "global.hpp"
+
+ #include "font.hpp"
+-#include "foreach.hpp"
+ #include "image.hpp"
+ #include "log.hpp"
+ #include "preferences.hpp"
+@@ -29,6 +28,8 @@
+ #include "sdl_utils.hpp"
+ #include "video.hpp"
+
++#include <boost/foreach.hpp>
++
+ #include <vector>
+ #include <map>
+ #include <algorithm>
+@@ -105,7 +106,7 @@
+ {
+ events.clear();
+
+- foreach (SDL_Rect const &rect, update_rects) {
++ BOOST_FOREACH(SDL_Rect const &rect, update_rects) {
+ events.push_back(event(rect, true));
+ events.push_back(event(rect, false));
+ }
+@@ -354,7 +355,7 @@
+ int CVideo::bppForMode( int x, int y, int flags)
+ {
+ int test_values[3] = {getBpp(), 32, 16};
+- foreach(int &bpp, test_values) {
++ BOOST_FOREACH(int &bpp, test_values) {
+ if(modePossible(x, y, bpp, flags) > 0) {
+ return bpp;
+ }
+Index: src/tools/schema/tag.cpp
+===================================================================
+--- src/tools/schema/tag.cpp (revision 54624)
++++ src/tools/schema/tag.cpp (revision 54625)
+@@ -21,7 +21,9 @@
+ #include "tools/schema/tag.hpp"
+
+ #include "config.hpp"
+-#include "foreach.hpp"
++
++#include <boost/foreach.hpp>
++
+ namespace schema_validation{
+
+ /*WIKI
+@@ -81,15 +83,15 @@
+ if (cfg.has_attribute("super")){
+ super_ = cfg["super"].str();
+ }
+- foreach (const config &child, cfg.child_range("tag")) {
++ BOOST_FOREACH(const config &child, cfg.child_range("tag")) {
+ class_tag child_tag (child);
+ add_tag(child_tag);
+ }
+- foreach (const config &child, cfg.child_range("key")) {
++ BOOST_FOREACH(const config &child, cfg.child_range("key")) {
+ class_key child_key (child);
+ add_key(child_key);
+ }
+- foreach (const config &link, cfg.child_range("link")) {
++ BOOST_FOREACH(const config &link, cfg.child_range("link")) {
+ std::string link_name = link["name"].str();
+ add_link(link_name);
+ }
+Index: src/tools/exploder_cutter.cpp
+===================================================================
+--- src/tools/exploder_cutter.cpp (revision 54624)
++++ src/tools/exploder_cutter.cpp (revision 54625)
+@@ -15,12 +15,13 @@
+
+ #include "exploder_cutter.hpp"
+ #include "filesystem.hpp"
+-#include "foreach.hpp"
+ #include "serialization/parser.hpp"
+ #include "serialization/preprocessor.hpp"
+ #include "serialization/string_utils.hpp"
+ #include "SDL_image.h"
+
++#include <boost/foreach.hpp>
++
+ #include <iostream>
+
+ cutter::cutter()
+@@ -48,7 +49,7 @@
+
+ void cutter::load_masks(const config& conf)
+ {
+- foreach (const config &m, conf.child_range("mask"))
++ BOOST_FOREACH(const config &m, conf.child_range("mask"))
+ {
+ const std::string name = m["name"];
+ const std::string image = get_mask_dir() + "/" + std::string(m["image"]);
+@@ -94,7 +95,7 @@
+ {
+ surface_map res;
+
+- foreach (const config &part, conf.child_range("part")) {
++ BOOST_FOREACH(const config &part, conf.child_range("part")) {
+ add_sub_image(surf, res, &part);
+ }
+
+Index: src/builder.cpp
+===================================================================
+--- src/builder.cpp (revision 54624)
++++ src/builder.cpp (revision 54625)
+@@ -20,13 +20,14 @@
+
+ #include "builder.hpp"
+
+-#include "foreach.hpp"
+ #include "loadscreen.hpp"
+ #include "log.hpp"
+ #include "map.hpp"
+ #include "serialization/string_utils.hpp"
+ #include "image.hpp"
+
++#include <boost/foreach.hpp>
++
+ static lg::log_domain log_engine("engine");
+ #define ERR_NG LOG_STREAM(err, log_engine)
+ #define WRN_NG LOG_STREAM(warn, log_engine)
+@@ -65,12 +66,12 @@
+ sorted_images = true;
+ }
+
+- foreach(const rule_image_rand& ri, images){
++ BOOST_FOREACH(const rule_image_rand& ri, images){
+ bool is_background = ri->is_background();
+
+ imagelist& img_list = is_background ? images_background : images_foreground;
+
+- foreach(const rule_image_variant& variant, ri->variants){
++ BOOST_FOREACH(const rule_image_variant& variant, ri->variants){
+ if(!variant.tods.empty() && variant.tods.find(tod) == variant.tods.end())
+ continue;
+
+@@ -250,12 +251,12 @@
+
+ tile& btile = tile_map_[loc];
+
+- foreach(animated<image::locator>& a, btile.images_background) {
++ BOOST_FOREACH(animated<image::locator>& a, btile.images_background) {
+ if(a.need_update())
+ changed = true;
+ a.update_last_draw_time();
+ }
+- foreach(animated<image::locator>& a, btile.images_foreground) {
++ BOOST_FOREACH(animated<image::locator>& a, btile.images_foreground) {
+ if(a.need_update())
+ changed = true;
+ a.update_last_draw_time();
+@@ -326,7 +327,7 @@
+ }
+ std::vector<std::string> vars = utils::split(variations, ';', 0);
+
+- foreach(const std::string& v, vars){
++ BOOST_FOREACH(const std::string& v, vars){
+ res.push_back(base);
+ std::string::size_type pos = 0;
+ while ((pos = res.back().find("@V", pos)) != std::string::npos) {
+@@ -345,21 +346,21 @@
+
+ // Parse images and animations data
+ // If one is not valid, return false.
+- foreach(terrain_constraint &constraint, rule.constraints)
++ BOOST_FOREACH(terrain_constraint &constraint, rule.constraints)
+ {
+- foreach(rule_image& ri, constraint.images)
++ BOOST_FOREACH(rule_image& ri, constraint.images)
+ {
+- foreach(rule_image_variant& variant, ri.variants)
++ BOOST_FOREACH(rule_image_variant& variant, ri.variants)
+ {
+
+ std::vector<std::string> var_strings = get_variations(variant.image_string, variant.variations);
+- foreach(const std::string& var, var_strings)
++ BOOST_FOREACH(const std::string& var, var_strings)
+ {
+ /** @todo improve this, 99% of terrains are not animated. */
+ std::vector<std::string> frames = utils::parenthetical_split(var,',');
+ animated<image::locator> res;
+
+- foreach(const std::string& frame, frames)
++ BOOST_FOREACH(const std::string& frame, frames)
+ {
+ const std::vector<std::string> items = utils::split(frame, ':');
+ const std::string& str = items.front();
+@@ -499,7 +500,7 @@
+ void terrain_builder::replace_rotate_tokens(rule_image &image, int angle,
+ const std::vector<std::string> &replacement)
+ {
+- foreach(rule_image_variant& variant, image.variants) {
++ BOOST_FOREACH(rule_image_variant& variant, image.variants) {
+ replace_rotate_tokens(variant, angle, replacement);
+ }
+ }
+@@ -507,7 +508,7 @@
+ void terrain_builder::replace_rotate_tokens(rule_imagelist &list, int angle,
+ const std::vector<std::string> &replacement)
+ {
+- foreach (rule_image &img, list) {
++ BOOST_FOREACH(rule_image &img, list) {
+ replace_rotate_tokens(img, angle, replacement);
+ }
+ }
+@@ -515,16 +516,16 @@
+ void terrain_builder::replace_rotate_tokens(building_rule &rule, int angle,
+ const std::vector<std::string> &replacement)
+ {
+- foreach (terrain_constraint &cons, rule.constraints)
++ BOOST_FOREACH(terrain_constraint &cons, rule.constraints)
+ {
+ // Transforms attributes
+- foreach (std::string &flag, cons.set_flag) {
++ BOOST_FOREACH(std::string &flag, cons.set_flag) {
+ replace_rotate_tokens(flag, angle, replacement);
+ }
+- foreach (std::string &flag, cons.no_flag) {
++ BOOST_FOREACH(std::string &flag, cons.no_flag) {
+ replace_rotate_tokens(flag, angle, replacement);
+ }
+- foreach (std::string &flag, cons.has_flag) {
++ BOOST_FOREACH(std::string &flag, cons.has_flag) {
+ replace_rotate_tokens(flag, angle, replacement);
+ }
+ replace_rotate_tokens(cons.images, angle, replacement);
+@@ -541,7 +542,7 @@
+ return;
+ }
+
+- foreach (terrain_constraint &cons, ret.constraints) {
++ BOOST_FOREACH(terrain_constraint &cons, ret.constraints) {
+ rotate(cons, angle);
+ }
+
+@@ -549,7 +550,7 @@
+ int minx = INT_MAX;
+ int miny = INT_MAX;
+
+- foreach (const terrain_constraint &cons, ret.constraints) {
++ BOOST_FOREACH(const terrain_constraint &cons, ret.constraints) {
+ minx = std::min<int>(cons.loc.x, minx);
+ miny = std::min<int>(2 * cons.loc.y + (cons.loc.x & 1), miny);
+ }
+@@ -559,7 +560,7 @@
+ if(!(miny & 1) && (minx & 1) && (minx > 0))
+ miny -= 2;
+
+- foreach (terrain_constraint &cons, ret.constraints) {
++ BOOST_FOREACH(terrain_constraint &cons, ret.constraints) {
+ cons.loc.legacy_sum_assign(map_location(-minx, -((miny - 1) / 2)));
+ }
+
+@@ -581,7 +582,7 @@
+
+ void terrain_builder::add_images_from_config(rule_imagelist& images, const config &cfg, bool global, int dx, int dy)
+ {
+- foreach (const config &img, cfg.child_range("image"))
++ BOOST_FOREACH(const config &img, cfg.child_range("image"))
+ {
+ int layer = img["layer"];
+
+@@ -606,7 +607,7 @@
+ images.push_back(rule_image(layer, basex - dx, basey - dy, global, center_x, center_y));
+
+ // Adds the other variants of the image
+- foreach (const config &variant, img.child_range("variant"))
++ BOOST_FOREACH(const config &variant, img.child_range("variant"))
+ {
+ const std::string &name = variant["name"];
+ const std::string &variations = img["variations"];
+@@ -631,7 +632,7 @@
+ const t_translation::t_match& type, const config& global_images)
+ {
+ terrain_constraint *cons = NULL;
+- foreach (terrain_constraint &c, constraints) {
++ BOOST_FOREACH(terrain_constraint &c, constraints) {
+ if (c.loc == loc) {
+ cons = &c;
+ break;
+@@ -769,7 +770,7 @@
+ log_scope("terrain_builder::parse_config");
+
+ // Parses the list of building rules (BRs)
+- foreach (const config &br, cfg.child_range("terrain_graphics"))
++ BOOST_FOREACH(const config &br, cfg.child_range("terrain_graphics"))
+ {
+ building_rule pbr; // Parsed Building rule
+ pbr.local = local;
+@@ -788,7 +789,7 @@
+ parse_mapstring(br["map"], pbr, anchors, br);
+
+ // Parses the terrain constraints (TCs)
+- foreach (const config &tc, br.child_range("tile"))
++ BOOST_FOREACH(const config &tc, br.child_range("tile"))
+ {
+ // Adds the terrain constraint to the current built terrain's list
+ // of terrain constraints, if it does not exist.
+@@ -831,7 +832,7 @@
+ const std::vector<std::string> global_has_flag = utils::split(br["has_flag"]);
+ const std::vector<std::string> global_set_no_flag = utils::split(br["set_no_flag"]);
+
+- foreach (terrain_constraint &constraint, pbr.constraints)
++ BOOST_FOREACH(terrain_constraint &constraint, pbr.constraints)
+ {
+ constraint.set_flag.insert(constraint.set_flag.end(),
+ global_set_flag.begin(), global_set_flag.end());
+@@ -925,7 +926,7 @@
+ }
+ }
+
+- foreach (const terrain_constraint &cons, rule.constraints)
++ BOOST_FOREACH(const terrain_constraint &cons, rule.constraints)
+ {
+ // Translated location
+ const map_location tloc = loc.legacy_sum(cons.loc);
+@@ -943,13 +944,13 @@
+
+ const std::set<std::string> &flags = tile_map_[tloc].flags;
+
+- foreach (const std::string &s, cons.no_flag) {
++ BOOST_FOREACH(const std::string &s, cons.no_flag) {
+ // If a flag listed in "no_flag" is present, the rule does not match
+ if (flags.find(s) != flags.end()) {
+ return false;
+ }
+ }
+- foreach (const std::string &s, cons.has_flag) {
++ BOOST_FOREACH(const std::string &s, cons.has_flag) {
+ // If a flag listed in "has_flag" is not present, this rule does not match
+ if (flags.find(s) == flags.end()) {
+ return false;
+@@ -964,7 +965,7 @@
+ {
+ unsigned int rand_seed = get_noise(loc, rule.get_hash());
+
+- foreach (const terrain_constraint &constraint, rule.constraints)
++ BOOST_FOREACH(const terrain_constraint &constraint, rule.constraints)
+ {
+ const map_location tloc = loc.legacy_sum(constraint.loc);
+ if(!tile_map_.on_map(tloc)) {
+@@ -973,12 +974,12 @@
+
+ tile& btile = tile_map_[tloc];
+
+- foreach (const rule_image &img, constraint.images) {
++ BOOST_FOREACH(const rule_image &img, constraint.images) {
+ btile.images.push_back(tile::rule_image_rand(&img, rand_seed));
+ }
+
+ // Sets flags
+- foreach (const std::string &flag, constraint.set_flag) {
++ BOOST_FOREACH(const std::string &flag, constraint.set_flag) {
+ btile.flags.insert(flag);
+ }
+
+@@ -1001,9 +1002,9 @@
+ if(hash_ != DUMMY_HASH)
+ return hash_;
+
+- foreach(const terrain_constraint &constraint, constraints) {
+- foreach(const rule_image& ri, constraint.images) {
+- foreach(const rule_image_variant& variant, ri.variants) {
++ BOOST_FOREACH(const terrain_constraint &constraint, constraints) {
++ BOOST_FOREACH(const rule_image& ri, constraint.images) {
++ BOOST_FOREACH(const rule_image_variant& variant, ri.variants) {
+ // we will often hash the same string, but that seems fast enough
+ hash_ += hash_str(variant.image_string);
+ }
+@@ -1031,7 +1032,7 @@
+ }
+ }
+
+- foreach (const building_rule &rule, building_rules_)
++ BOOST_FOREACH(const building_rule &rule, building_rules_)
+ {
+ // Find the constraint that contains the less terrain of all terrain rules.
+ // We will keep a track of the matching terrains of this constraint
+@@ -1040,7 +1041,7 @@
+ t_translation::t_list min_types;
+ const terrain_constraint *min_constraint = NULL;
+
+- foreach (const terrain_constraint &constraint, rule.constraints)
++ BOOST_FOREACH(const terrain_constraint &constraint, rule.constraints)
+ {
+ const t_translation::t_match& match = constraint.terrain_types_match;
+ t_translation::t_list matching_types;
+Index: src/game_config.cpp
+===================================================================
+--- src/game_config.cpp (revision 54624)
++++ src/game_config.cpp (revision 54625)
+@@ -18,7 +18,6 @@
+
+ #include "color_range.hpp"
+ #include "config.hpp"
+-#include "foreach.hpp"
+ #include "gettext.hpp"
+ #include "log.hpp"
+ #include "util.hpp"
+@@ -29,6 +28,8 @@
+ #include "revision.hpp"
+ #endif /* HAVE_REVISION */
+
++#include <boost/foreach.hpp>
++
+ static lg::log_domain log_engine("engine");
+ #define DBG_NG LOG_STREAM(debug, log_engine)
+ #define ERR_NG LOG_STREAM(err, log_engine)
+@@ -259,7 +260,7 @@
+ }
+
+ server_list.clear();
+- foreach (const config &server, v.child_range("server"))
++ BOOST_FOREACH(const config &server, v.child_range("server"))
+ {
+ server_info sinf;
+ sinf.name = server["name"].str();
+@@ -270,7 +271,7 @@
+
+ void add_color_info(const config &v)
+ {
+- foreach (const config &teamC, v.child_range("color_range"))
++ BOOST_FOREACH(const config &teamC, v.child_range("color_range"))
+ {
+ const config::attribute_value *a1 = teamC.get("id"),
+ *a2 = teamC.get("rgb");
+@@ -304,9 +305,9 @@
+ DBG_NG << str.str() << '\n';
+ }
+
+- foreach (const config &cp, v.child_range("color_palette"))
++ BOOST_FOREACH(const config &cp, v.child_range("color_palette"))
+ {
+- foreach (const config::attribute &rgb, cp.attribute_range())
++ BOOST_FOREACH(const config::attribute &rgb, cp.attribute_range())
+ {
+ std::vector<Uint32> temp;
+ if(!string2rgb(rgb.second, temp)) {
+Index: src/whiteboard/recall.cpp
+===================================================================
+--- src/whiteboard/recall.cpp (revision 54624)
++++ src/whiteboard/recall.cpp (revision 54625)
+@@ -24,7 +24,6 @@
+ #include "utility.hpp"
+ #include "visitor.hpp"
+
+-#include "foreach.hpp"
+ #include "game_display.hpp"
+ #include "menu_events.hpp"
+ #include "play_controller.hpp"
+@@ -32,6 +31,8 @@
+ #include "team.hpp"
+ #include "unit.hpp"
+
++#include <boost/foreach.hpp>
++
+ namespace wb
+ {
+
+@@ -71,7 +72,7 @@
+ {
+ // Construct and validate temp_unit_
+ size_t underlying_id = cfg["temp_unit_"];
+- foreach(unit const& recall_unit, resources::teams->at(team_index()).recall_list())
++ BOOST_FOREACH(unit const& recall_unit, resources::teams->at(team_index()).recall_list())
+ {
+ if(recall_unit.underlying_id()==underlying_id)
+ {
+Index: src/whiteboard/utility.cpp
+===================================================================
+--- src/whiteboard/utility.cpp (revision 54624)
++++ src/whiteboard/utility.cpp (revision 54625)
+@@ -22,7 +22,6 @@
+ #include "manager.hpp"
+
+ #include "actions.hpp"
+-#include "foreach.hpp"
+ #include "game_display.hpp"
+ #include "map.hpp"
+ #include "play_controller.hpp"
+@@ -30,6 +29,8 @@
+ #include "team.hpp"
+ #include "unit.hpp"
+
++#include <boost/foreach.hpp>
++
+ namespace wb {
+
+ size_t viewer_team()
+@@ -60,7 +61,7 @@
+ {
+ assert(leader.can_recruit());
+ assert(resources::game_map->is_keep(leader.get_location()));
+- foreach(unit const& unit, *resources::units)
++ BOOST_FOREACH(unit const& unit, *resources::units)
+ {
+ if (unit.can_recruit() &&
+ resources::game_map->is_keep(unit.get_location()) &&
+@@ -83,7 +84,7 @@
+ if(!map.is_castle(hex))
+ return NULL;
+
+- foreach(unit& u, *resources::units)
++ BOOST_FOREACH(unit& u, *resources::units)
+ if(u.can_recruit()
+ && u.side() == static_cast<int>(team_index+1)
+ && can_recruit_on(map,u.get_location(),hex))
+@@ -124,7 +125,7 @@
+
+ int result = 0;
+ gamemap const& map = *resources::game_map;
+- foreach(map_location const& loc, std::make_pair(path.begin()+1,path.end()))
++ BOOST_FOREACH(map_location const& loc, std::make_pair(path.begin()+1,path.end()))
+ result += u.movement_cost(map[loc]);
+ return result;
+ }
+@@ -149,7 +150,7 @@
+
+ bool has_actions()
+ {
+- foreach(team& t, *resources::teams)
++ BOOST_FOREACH(team& t, *resources::teams)
+ if (!t.get_side_actions()->empty())
+ return true;
+
+Index: src/whiteboard/visitor.hpp
+===================================================================
+--- src/whiteboard/visitor.hpp (revision 54624)
++++ src/whiteboard/visitor.hpp (revision 54625)
+@@ -33,11 +33,11 @@
+ #include "action.hpp"
+ #include "side_actions.hpp"
+
+-#include "foreach.hpp"
+ #include "play_controller.hpp"
+ #include "resources.hpp"
+
+ #include <boost/noncopyable.hpp>
++#include <boost/foreach.hpp>
+
+ namespace wb
+ {
+@@ -81,7 +81,7 @@
+
+ //Determine how many turns' worth of plans there are
+ size_t max_turns = 0;
+- foreach(team& t, *resources::teams)
++ BOOST_FOREACH(team& t, *resources::teams)
+ max_turns = std::max(max_turns,t.get_side_actions()->num_turns());
+
+ size_t const current_team = resources::controller->current_side() - 1;
+Index: src/whiteboard/side_actions.cpp
+===================================================================
+--- src/whiteboard/side_actions.cpp (revision 54624)
++++ src/whiteboard/side_actions.cpp (revision 54625)
+@@ -31,12 +31,13 @@
+ #include "validate_visitor.hpp"
+
+ #include "actions.hpp"
+-#include "foreach.hpp"
+ #include "game_display.hpp"
+ #include "game_end_exceptions.hpp"
+ #include "map.hpp"
+ #include "resources.hpp"
+
++#include <boost/foreach.hpp>
++
+ #include <set>
+ #include <sstream>
+
+@@ -48,13 +49,13 @@
+ {
+ s << "Content of side_actions:";
+ int turn = 1;
+- foreach(action_queue const& turn_queue, side_actions.actions())
++ BOOST_FOREACH(action_queue const& turn_queue, side_actions.actions())
+ {
+ s << "\n Turn " << turn;
+ ++turn;
+
+ int count = 1;
+- foreach(action_ptr const& action, turn_queue)
++ BOOST_FOREACH(action_ptr const& action, turn_queue)
+ {
+ s << "\n (" << count << ") " << action;
+ ++count;
+@@ -114,7 +115,7 @@
+ main_number = index;
+ }
+
+- foreach(weak_action_ptr action, highlighter->get_secondary_highlights())
++ BOOST_FOREACH(weak_action_ptr action, highlighter->get_secondary_highlights())
+ {
+ if (action.lock() == *it)
+ {
+@@ -199,7 +200,7 @@
+ size_t side_actions::size() const
+ {
+ size_t result = 0;
+- foreach(action_queue const& queue, actions_)
++ BOOST_FOREACH(action_queue const& queue, actions_)
+ result += queue.size();
+ return result;
+ }
+@@ -234,7 +235,7 @@
+ return;
+ }
+
+- foreach(action_ptr act, *this)
++ BOOST_FOREACH(action_ptr act, *this)
+ act->hide();
+ }
+ void side_actions::show()
+@@ -244,7 +245,7 @@
+
+ hidden_ = false;
+
+- foreach(action_ptr act, *this)
++ BOOST_FOREACH(action_ptr act, *this)
+ act->show();
+ }
+
+@@ -507,7 +508,7 @@
+ size_t side_actions::count_actions_of(unit const* unit)
+ {
+ size_t count = 0;
+- foreach(action_ptr action, *this)
++ BOOST_FOREACH(action_ptr action, *this)
+ {
+ if (action->get_unit() == unit)
+ {
+@@ -783,7 +784,7 @@
+ else if(type=="refresh")
+ {
+ safe_clear();
+- foreach(net_cmd const& sub_cmd, cmd.child_range("net_cmd"))
++ BOOST_FOREACH(net_cmd const& sub_cmd, cmd.child_range("net_cmd"))
+ execute_net_cmd(sub_cmd);
+ }
+ else
+@@ -890,7 +891,7 @@
+
+ //find units who still have plans for turn 0 (i.e. were too lazy to finish their jobs)
+ std::set<unit const*> lazy_units;
+- foreach(action_ptr const& act, iter_turn(0))
++ BOOST_FOREACH(action_ptr const& act, iter_turn(0))
+ {
+ unit const* u = act->get_unit();
+ if(u)
+@@ -913,7 +914,7 @@
+ }
+
+ //push any remaining first-turn plans into the second turn
+- foreach(action_ptr act, actions_.front())
++ BOOST_FOREACH(action_ptr act, actions_.front())
+ actions_[1].push_front(act);
+ actions_.front().clear();
+
+Index: src/whiteboard/move.cpp
+===================================================================
+--- src/whiteboard/move.cpp (revision 54624)
++++ src/whiteboard/move.cpp (revision 54625)
+@@ -26,7 +26,6 @@
+
+ #include "arrow.hpp"
+ #include "config.hpp"
+-#include "foreach.hpp"
+ #include "game_end_exceptions.hpp"
+ #include "mouse_events.hpp"
+ #include "play_controller.hpp"
+@@ -37,6 +36,8 @@
+ #include "unit_display.hpp"
+ #include "unit_map.hpp"
+
++#include <boost/foreach.hpp>
++
+ namespace wb {
+
+ std::ostream& operator<<(std::ostream &s, move_ptr move)
+@@ -108,10 +109,10 @@
+ if(!route_cfg)
+ throw action::ctor_err("move: Invalid route_");
+ route_->move_cost = route_cfg["move_cost"];
+- foreach(config const& loc_cfg, route_cfg.child_range("step")) {
++ BOOST_FOREACH(config const& loc_cfg, route_cfg.child_range("step")) {
+ route_->steps.push_back(map_location(loc_cfg["x"],loc_cfg["y"]));
+ }
+- foreach(config const& mark_cfg, route_cfg.child_range("mark")) {
++ BOOST_FOREACH(config const& mark_cfg, route_cfg.child_range("mark")) {
+ route_->marks[map_location(mark_cfg["x"],mark_cfg["y"])]
+ = pathfind::marked_route::mark(mark_cfg["turns"],mark_cfg["zoc"],mark_cfg["capture"],mark_cfg["invisible"]);
+ }
+@@ -470,7 +471,7 @@
+ //Serialize route_
+ config route_cfg;
+ route_cfg["move_cost"]=route_->move_cost;
+- foreach(map_location const& loc, route_->steps)
++ BOOST_FOREACH(map_location const& loc, route_->steps)
+ {
+ config loc_cfg;
+ loc_cfg["x"]=loc.x;
+@@ -478,7 +479,7 @@
+ route_cfg.add_child("step",loc_cfg);
+ }
+ typedef std::pair<map_location,pathfind::marked_route::mark> pair_loc_mark;
+- foreach(pair_loc_mark const& item, route_->marks)
++ BOOST_FOREACH(pair_loc_mark const& item, route_->marks)
+ {
+ config mark_cfg;
+ mark_cfg["x"]=item.first.x;
+Index: src/whiteboard/validate_visitor.cpp
+===================================================================
+--- src/whiteboard/validate_visitor.cpp (revision 54624)
++++ src/whiteboard/validate_visitor.cpp (revision 54625)
+@@ -28,12 +28,13 @@
+ #include "utility.hpp"
+
+ #include "arrow.hpp"
+-#include "foreach.hpp"
+ #include "pathfind/pathfind.hpp"
+ #include "play_controller.hpp"
+ #include "resources.hpp"
+ #include "team.hpp"
+
++#include <boost/foreach.hpp>
++
+ namespace wb
+ {
+
+@@ -60,7 +61,7 @@
+ {
+ int side_actions_size_before = viewer_actions_.size();
+ LOG_WB << "Erasing " << actions_to_erase_.size() << " invalid actions.\n";
+- foreach(action_ptr action, actions_to_erase_)
++ BOOST_FOREACH(action_ptr action, actions_to_erase_)
+ {
+ viewer_actions_.remove_action(viewer_actions_.get_position_of(action), false);
+ }
+Index: src/whiteboard/manager.cpp
+===================================================================
+--- src/whiteboard/manager.cpp (revision 54624)
++++ src/whiteboard/manager.cpp (revision 54625)
+@@ -32,7 +32,6 @@
+ #include "actions.hpp"
+ #include "arrow.hpp"
+ #include "chat_events.hpp"
+-#include "foreach.hpp"
+ #include "formula_string_utils.hpp"
+ #include "game_preferences.hpp"
+ #include "gettext.hpp"
+@@ -47,6 +46,8 @@
+ #include "unit_display.hpp"
+
+ #include <boost/lexical_cast.hpp>
++#include <boost/foreach.hpp>
++
+ #include <sstream>
+
+ namespace wb {
+@@ -268,7 +269,7 @@
+ }
+
+ //Look for planned recruits that depend on this leader
+- foreach(action_const_ptr action, *viewer_actions())
++ BOOST_FOREACH(action_const_ptr action, *viewer_actions())
+ {
+ recruit_const_ptr recruit = boost::dynamic_pointer_cast<class recruit const>(action);
+ recall_const_ptr recall = boost::dynamic_pointer_cast<class recall const>(action);
+@@ -332,7 +333,7 @@
+
+ static void hide_all_plans()
+ {
+- foreach(team& t, *resources::teams)
++ BOOST_FOREACH(team& t, *resources::teams)
+ t.get_side_actions()->hide();
+ }
+
+@@ -344,7 +345,7 @@
+ hide_all_plans();
+ else //< normal circumstance
+ {
+- foreach(team& t, *resources::teams)
++ BOOST_FOREACH(team& t, *resources::teams)
+ {
+ //make sure only appropriate teams are hidden
+ if(!t.is_network_human())
+@@ -498,7 +499,7 @@
+ if (can_modify_game_state() && has_actions())
+ {
+ units_owning_moves_ = move_owners_finder().get_units_owning_moves();
+- foreach(size_t unit_id, units_owning_moves_)
++ BOOST_FOREACH(size_t unit_id, units_owning_moves_)
+ {
+ unit_map::iterator unit_iter = resources::units->find(unit_id);
+ assert(unit_iter.valid());
+@@ -509,7 +510,7 @@
+
+ void manager::post_draw()
+ {
+- foreach(size_t unit_id, units_owning_moves_)
++ BOOST_FOREACH(size_t unit_id, units_owning_moves_)
+ {
+ unit_map::iterator unit_iter = resources::units->find(unit_id);
+ if (unit_iter.valid()) {
+@@ -558,7 +559,7 @@
+
+ //Info about the action numbers to be displayed on screen.
+ side_actions::numbers_t numbers;
+- foreach(team& t, *resources::teams)
++ BOOST_FOREACH(team& t, *resources::teams)
+ {
+ side_actions& sa = *t.get_side_actions();
+ if(!sa.hidden())
+@@ -571,7 +572,7 @@
+
+ void manager::on_mouseover_change(const map_location& hex)
+ {
+- foreach(map_location const& hex, hidden_unit_hexes_)
++ BOOST_FOREACH(map_location const& hex, hidden_unit_hexes_)
+ resources::screen->remove_exclusive_draw(hex);
+ hidden_unit_hexes_.clear();
+
+@@ -636,7 +637,7 @@
+ LOG_WB << "Received wb data (" << count << ").\n";
+
+ team& team_from = resources::teams->at(wb_cfg["side"]-1);
+- foreach(side_actions::net_cmd const& cmd, wb_cfg.child_range("net_cmd"))
++ BOOST_FOREACH(side_actions::net_cmd const& cmd, wb_cfg.child_range("net_cmd"))
+ team_from.get_side_actions()->execute_net_cmd(cmd);
+ }
+ }
+@@ -1138,7 +1139,7 @@
+ options.push_back(_("HIDE ALL allies’ plans"));
+
+ //populate list of networked allies
+- foreach(team &t, *resources::teams)
++ BOOST_FOREACH(team &t, *resources::teams)
+ {
+ //Exclude enemies, AIs, and local players
+ if(t.is_enemy(v_side) || !t.is_network())
+@@ -1164,11 +1165,11 @@
+ switch(selection)
+ {
+ case 0:
+- foreach(team* t, allies)
++ BOOST_FOREACH(team* t, allies)
+ team_plans_hidden_[t->side()-1]=false;
+ break;
+ case 1:
+- foreach(team* t, allies)
++ BOOST_FOREACH(team* t, allies)
+ team_plans_hidden_[t->side()-1]=true;
+ break;
+ default:
+Index: src/whiteboard/suppose_dead.cpp
+===================================================================
+--- src/whiteboard/suppose_dead.cpp (revision 54624)
++++ src/whiteboard/suppose_dead.cpp (revision 54625)
+@@ -26,7 +26,6 @@
+
+ #include "arrow.hpp"
+ #include "config.hpp"
+-#include "foreach.hpp"
+ #include "game_display.hpp"
+ #include "game_end_exceptions.hpp"
+ #include "mouse_events.hpp"
+Index: src/whiteboard/mapbuilder.cpp
+===================================================================
+--- src/whiteboard/mapbuilder.cpp (revision 54624)
++++ src/whiteboard/mapbuilder.cpp (revision 54625)
+@@ -24,12 +24,13 @@
+ #include "side_actions.hpp"
+ #include "utility.hpp"
+
+-#include "foreach.hpp"
+ #include "play_controller.hpp"
+ #include "resources.hpp"
+ #include "unit.hpp"
+ #include "unit_map.hpp"
+
++#include <boost/foreach.hpp>
++
+ namespace wb
+ {
+
+@@ -51,14 +52,14 @@
+
+ void mapbuilder::pre_build()
+ {
+- foreach(team& t, *resources::teams)
++ BOOST_FOREACH(team& t, *resources::teams)
+ {
+ //Reset spent gold to zero, it'll be recalculated during the map building
+ t.get_side_actions()->reset_gold_spent();
+ }
+
+ int current_side = resources::controller->current_side();
+- foreach(unit& u, *resources::units)
++ BOOST_FOREACH(unit& u, *resources::units)
+ {
+ bool on_current_side = (u.side() == current_side);
+
+Index: src/whiteboard/highlight_visitor.cpp
+===================================================================
+--- src/whiteboard/highlight_visitor.cpp (revision 54624)
++++ src/whiteboard/highlight_visitor.cpp (revision 54625)
+@@ -29,11 +29,12 @@
+ #include "suppose_dead.hpp"
+
+ #include "arrow.hpp"
+-#include "foreach.hpp"
+ #include "play_controller.hpp"
+ #include "resources.hpp"
+ #include "unit_map.hpp"
+
++#include <boost/foreach.hpp>
++
+ namespace wb
+ {
+
+@@ -147,7 +148,7 @@
+ {
+ //Highlight secondary highlights
+ mode_ = HIGHLIGHT_SECONDARY;
+- foreach(weak_action_ptr weak, secondary_highlights_)
++ BOOST_FOREACH(weak_action_ptr weak, secondary_highlights_)
+ {
+ if (action_ptr action = weak.lock())
+ {
+@@ -169,7 +170,7 @@
+
+ //unhighlight secondary highlights
+ mode_ = UNHIGHLIGHT_SECONDARY;
+- foreach(weak_action_ptr weak, secondary_highlights_)
++ BOOST_FOREACH(weak_action_ptr weak, secondary_highlights_)
+ {
+ if (action_ptr action = weak.lock())
+ {
+@@ -178,7 +179,7 @@
+ }
+
+ //unhide other units if needed
+- foreach(map_location hex, exclusive_display_hexes_)
++ BOOST_FOREACH(map_location hex, exclusive_display_hexes_)
+ {
+ resources::screen->remove_exclusive_draw(hex);
+ }
+Index: src/language.cpp
+===================================================================
+--- src/language.cpp (revision 54624)
++++ src/language.cpp (revision 54625)
+@@ -16,7 +16,6 @@
+ #include "global.hpp"
+
+ #include "filesystem.hpp"
+-#include "foreach.hpp"
+ #include "gettext.hpp"
+ #include "language.hpp"
+ #include "log.hpp"
+@@ -27,6 +26,7 @@
+ #include <stdexcept>
+ #include <clocale>
+ #include <boost/scoped_array.hpp>
++#include <boost/foreach.hpp>
+
+ #ifdef _WIN32
+ #include <windows.h>
+@@ -101,7 +101,7 @@
+ known_languages.push_back(
+ language_def("", t_string(N_("System default language"), "wesnoth"), "ltr", "", "A"));
+
+- foreach (const config &lang, cfg.child_range("locale"))
++ BOOST_FOREACH(const config &lang, cfg.child_range("locale"))
+ {
+ known_languages.push_back(
+ language_def(lang["locale"], lang["name"], lang["dir"],
+@@ -226,9 +226,9 @@
+ std::cerr << "No [language] block found\n";
+ return false;
+ }
+- foreach (const config &lang, languages_) {
++ BOOST_FOREACH(const config &lang, languages_) {
+ DBG_G << "[language]\n";
+- foreach (const config::attribute &j, lang.attribute_range()) {
++ BOOST_FOREACH(const config::attribute &j, lang.attribute_range()) {
+ DBG_G << j.first << "=\"" << j.second << "\"\n";
+ strings_[j.first] = j.second;
+ }
+@@ -283,7 +283,7 @@
+
+ void init_textdomains(const config& cfg)
+ {
+- foreach (const config &t, cfg.child_range("textdomain"))
++ BOOST_FOREACH(const config &t, cfg.child_range("textdomain"))
+ {
+ const std::string &name = t["name"];
+ const std::string &path = t["path"];
+@@ -307,7 +307,7 @@
+ bool init_strings(const config& cfg)
+ {
+ languages_.clear();
+- foreach(const config &l, cfg.child_range("language")) {
++ BOOST_FOREACH(const config &l, cfg.child_range("language")) {
+ languages_.push_back(l);
+ }
+ return load_strings(true);
+Index: src/multiplayer_lobby.cpp
+===================================================================
+--- src/multiplayer_lobby.cpp (revision 54624)
++++ src/multiplayer_lobby.cpp (revision 54625)
+@@ -20,7 +20,6 @@
+ #include "global.hpp"
+
+ #include "filesystem.hpp"
+-#include "foreach.hpp"
+ #include "game_preferences.hpp"
+ #include "lobby_preferences.hpp"
+ #include "map_exception.hpp"
+@@ -34,6 +33,8 @@
+ #include "wml_exception.hpp"
+ #include "formula_string_utils.hpp"
+
++#include <boost/foreach.hpp>
++
+ static lg::log_domain log_config("config");
+ #define ERR_CF LOG_STREAM(err, log_config)
+
+@@ -424,7 +425,7 @@
+
+ games_.clear();
+
+- foreach (const config &game, cfg.child("gamelist").child_range("game"))
++ BOOST_FOREACH(const config &game, cfg.child("gamelist").child_range("game"))
+ {
+ bool verified = true;
+ games_.push_back(game_item());
+@@ -502,7 +503,7 @@
+ if (map_hashes_ && !games_.back().reloaded) {
+ std::string hash = game["hash"];
+ bool hash_found = false;
+- foreach (const config::attribute &i, map_hashes_.attribute_range()) {
++ BOOST_FOREACH(const config::attribute &i, map_hashes_.attribute_range()) {
+ if (i.first == game["mp_scenario"] && i.second == hash) {
+ hash_found = true;
+ break;
+@@ -639,7 +640,7 @@
+
+ if(preferences::fi_friends_in_game()) {
+ bool found_friend = false;
+- foreach(const config &user, cfg.child_range("user")) {
++ BOOST_FOREACH(const config &user, cfg.child_range("user")) {
+ if(preferences::is_friend(user["name"]) && user["game_id"] == i.id) {
+ found_friend = true;
+ break;
+@@ -650,7 +651,7 @@
+
+ if(!preferences::fi_text().empty()) {
+ bool found_match = true;
+- foreach(const std::string& search_string, utils::split(preferences::fi_text(), ' ', utils::STRIP_SPACES)) {
++ BOOST_FOREACH(const std::string& search_string, utils::split(preferences::fi_text(), ' ', utils::STRIP_SPACES)) {
+ if(std::search(i.map_info.begin(), i.map_info.end(), search_string.begin(), search_string.end(), chars_equal_insensitive) == i.map_info.end() &&
+ std::search(i.name.begin(), i.name.end(), search_string.begin(), search_string.end(), chars_equal_insensitive) == i.name.end()) {
+ found_match = false;
+Index: src/reports.cpp
+===================================================================
+--- src/reports.cpp (revision 54624)
++++ src/reports.cpp (revision 54625)
+@@ -20,7 +20,6 @@
+ #include "editor/editor_controller.hpp"
+ #include "editor/editor_palettes.hpp"
+ #include "font.hpp"
+-#include "foreach.hpp"
+ #include "game_display.hpp"
+ #include "game_preferences.hpp"
+ #include "gettext.hpp"
+@@ -36,6 +35,7 @@
+ #include "unit.hpp"
+ #include "whiteboard/manager.hpp"
+
++#include <boost/foreach.hpp>
+
+ #include <cassert>
+ #include <ctime>
+@@ -260,7 +260,7 @@
+ if (!u) return report();
+ config res;
+ typedef std::pair<std::string, std::string> pair_string;
+- foreach(const pair_string &ps, u->amla_icons()) {
++ BOOST_FOREACH(const pair_string &ps, u->amla_icons()) {
+ add_image(res, ps.first, ps.second);
+ }
+ return res;
+@@ -395,7 +395,7 @@
+
+ bool att_def_diff = false;
+ map_location displayed_unit_hex = resources::screen->displayed_unit_hex();
+- foreach (const utils::string_map::value_type &resist, u->get_base_resistances())
++ BOOST_FOREACH(const utils::string_map::value_type &resist, u->get_base_resistances())
+ {
+ std::ostringstream line;
+ line << gettext(resist.first.c_str()) << ": ";
+@@ -415,7 +415,7 @@
+ if (att_def_diff)
+ tooltip << _("(Att / Def)");
+ tooltip << '\n';
+- foreach (const std::string &line, resistances_table) {
++ BOOST_FOREACH(const std::string &line, resistances_table) {
+ tooltip << line;
+ }
+ return text_report(str.str(), tooltip.str());
+@@ -458,7 +458,7 @@
+ if (!u) return report();
+ config res;
+ typedef std::pair<std::string, std::string> pair_string;
+- foreach (const pair_string &ps, u->advancement_icons()) {
++ BOOST_FOREACH(const pair_string &ps, u->advancement_icons()) {
+ add_image(res, ps.first, ps.second);
+ }
+ return res;
+@@ -497,7 +497,7 @@
+ bool revert = false;
+ if (underlyings.size() != 1 || underlyings.front() != terrain)
+ {
+- foreach (const t_translation::t_terrain &t, underlyings)
++ BOOST_FOREACH(const t_translation::t_terrain &t, underlyings)
+ {
+ if (t == t_translation::MINUS) {
+ revert = true;
+@@ -641,7 +641,7 @@
+ std::set<std::string> seen_types;
+ const team &unit_team = (*resources::teams)[u->side() - 1];
+ const team &viewing_team = (*resources::teams)[resources::screen->viewing_team()];
+- foreach(const unit &enemy, *resources::units)
++ BOOST_FOREACH(const unit &enemy, *resources::units)
+ {
+ if (!unit_team.is_enemy(enemy.side()))
+ continue;
+@@ -662,7 +662,7 @@
+ damage_multiplier += tod_bonus;
+
+ typedef std::pair<int, std::set<std::string> > resist_units;
+- foreach (const resist_units &resist, resistances) {
++ BOOST_FOREACH(const resist_units &resist, resistances) {
+ int damage = round_damage(base_damage, damage_multiplier * resist.first, damage_divisor);
+ tooltip << "<b>" << damage << "</b> "
+ << "<i>(" << utils::signed_percent(resist.first-100) << ")</i> : "
+@@ -755,7 +755,7 @@
+ }
+ }
+
+- foreach(const battle_context& weapon, weapons) {
++ BOOST_FOREACH(const battle_context& weapon, weapons) {
+
+ // Predict the battle outcome.
+ combatant attacker_combatant(weapon.get_attacker_stats());
+@@ -869,7 +869,7 @@
+ map_location displayed_unit_hex = resources::screen->displayed_unit_hex();
+ config res;
+
+- foreach (const attack_type &at, u->attacks())
++ BOOST_FOREACH(const attack_type &at, u->attacks())
+ {
+ attack_info(at, res, u, displayed_unit_hex);
+ }
+@@ -1023,7 +1023,7 @@
+ str << td.villages << '/';
+ if (viewing_team.uses_shroud()) {
+ int unshrouded_villages = 0;
+- foreach (const map_location &loc, resources::game_map->villages()) {
++ BOOST_FOREACH(const map_location &loc, resources::game_map->villages()) {
+ if (!viewing_team.shrouded(loc))
+ ++unshrouded_villages;
+ }
+@@ -1178,7 +1178,7 @@
+
+ std::ostringstream str;
+ str << _("Observers:") << '\n';
+- foreach (const std::string &obs, observers) {
++ BOOST_FOREACH(const std::string &obs, observers) {
+ str << obs << '\n';
+ }
+ return image_report(game_config::images::observer, str.str());
+@@ -1250,7 +1250,7 @@
+
+ void reports::reset_generators()
+ {
+- foreach (dynamic_report_generators::value_type &rg, dynamic_generators) {
++ BOOST_FOREACH(dynamic_report_generators::value_type &rg, dynamic_generators) {
+ delete rg.second;
+ }
+ dynamic_generators.clear();
+@@ -1283,10 +1283,10 @@
+ const std::set<std::string> &reports::report_list()
+ {
+ if (!all_reports.empty()) return all_reports;
+- foreach (const static_report_generators::value_type &v, static_generators) {
++ BOOST_FOREACH(const static_report_generators::value_type &v, static_generators) {
+ all_reports.insert(v.first);
+ }
+- foreach (const dynamic_report_generators::value_type &v, dynamic_generators) {
++ BOOST_FOREACH(const dynamic_report_generators::value_type &v, dynamic_generators) {
+ all_reports.insert(v.first);
+ }
+ return all_reports;
+Index: src/playmp_controller.cpp
+===================================================================
+--- src/playmp_controller.cpp (revision 54624)
++++ src/playmp_controller.cpp (revision 54625)
+@@ -17,7 +17,7 @@
+ #include "playmp_controller.hpp"
+
+ #include "dialogs.hpp"
+-#include "foreach.hpp"
++
+ #include "game_end_exceptions.hpp"
+ #include "gettext.hpp"
+ #include "log.hpp"
+@@ -29,6 +29,8 @@
+ #include "formula_string_utils.hpp"
+ #include "whiteboard/manager.hpp"
+
++#include <boost/foreach.hpp>
++
+ static lg::log_domain log_engine("engine");
+ #define LOG_NG LOG_STREAM(info, log_engine)
+
+@@ -326,7 +328,7 @@
+ // stay stuck in linger state when the *next* scenario is over.
+ gamestate_.classification().completion = "running";
+ // End all unit moves
+- foreach (unit &u, units_) {
++ BOOST_FOREACH(unit &u, units_) {
+ u.set_user_end_turn(true);
+ }
+ //current_team().set_countdown_time(0);
+Index: src/tests/gui/test_gui2.cpp
+===================================================================
+--- src/tests/gui/test_gui2.cpp (revision 54624)
++++ src/tests/gui/test_gui2.cpp (revision 54625)
+@@ -20,7 +20,6 @@
+
+ #include "config_cache.hpp"
+ #include "filesystem.hpp"
+-#include "foreach.hpp"
+ #include "formula_debugger.hpp"
+ #include "gettext.hpp"
+ #include "game_config.hpp"
+@@ -66,6 +65,7 @@
+ #include "wml_exception.hpp"
+
+ #include <boost/bind.hpp>
++#include <boost/foreach.hpp>
+
+ #include <memory>
+
+@@ -139,7 +139,7 @@
+ template<class T>
+ void test_resolutions(const tresolution_list& resolutions)
+ {
+- foreach(const tresolution& resolution, resolutions) {
++ BOOST_FOREACH(const tresolution& resolution, resolutions) {
+ video().make_test_fake(resolution.first, resolution.second);
+
+ boost::scoped_ptr<gui2::tdialog> dlg(twrapper<T>::create());
+@@ -178,7 +178,7 @@
+ {
+ bool interact = false;
+ for(int i = 0; i < 2; ++i) {
+- foreach(const tresolution& resolution, resolutions) {
++ BOOST_FOREACH(const tresolution& resolution, resolutions) {
+ video().make_test_fake(resolution.first, resolution.second);
+
+ boost::scoped_ptr<gui2::tpopup> dlg(twrapper<T>::create());
+@@ -225,7 +225,7 @@
+ void test_tip_resolutions(const tresolution_list& resolutions
+ , const std::string& id)
+ {
+- foreach(const tresolution& resolution, resolutions) {
++ BOOST_FOREACH(const tresolution& resolution, resolutions) {
+ video().make_test_fake(resolution.first, resolution.second);
+
+ std::vector<std::string>& list =
+@@ -416,7 +416,7 @@
+
+ // Test size() instead of empty() to get the number of offenders
+ BOOST_CHECK_EQUAL(list.size(), 0);
+- foreach(const std::string& id, list) {
++ BOOST_FOREACH(const std::string& id, list) {
+ std::cerr << "Window '" << id << "' registered but not tested.\n";
+ }
+ }
+@@ -638,7 +638,7 @@
+ BOOST_REQUIRE_MESSAGE(result, "Failed to create a dialog.");
+
+ std::vector<map_generator*> map_generators;
+- foreach (const config &i, main_config.child_range("multiplayer")) {
++ BOOST_FOREACH(const config &i, main_config.child_range("multiplayer")) {
+ if(i["map_generation"] == "default") {
+ const config &generator_cfg = i.child("generator");
+ if (generator_cfg) {
+@@ -694,7 +694,7 @@
+ BOOST_REQUIRE_MESSAGE(cfg, "No editor time-of-day defined");
+
+ std::vector<time_of_day> tods;
+- foreach (const config &i, cfg.child_range("time")) {
++ BOOST_FOREACH(const config &i, cfg.child_range("time")) {
+ tods.push_back(time_of_day(i));
+ }
+ return new gui2::teditor_settings(NULL, tods);
+Index: src/filesystem.cpp
+===================================================================
+--- src/filesystem.cpp (revision 54624)
++++ src/filesystem.cpp (revision 54625)
+@@ -56,7 +56,6 @@
+
+ #include "config.hpp"
+ #include "filesystem.hpp"
+-#include "foreach.hpp"
+ #include "game_config.hpp"
+ #include "game_preferences.hpp"
+ #include "log.hpp"
+@@ -65,6 +64,8 @@
+ #include "serialization/string_utils.hpp"
+ #include "version.hpp"
+
++#include <boost/foreach.hpp>
++
+ static lg::log_domain log_filesystem("filesystem");
+ #define DBG_FS LOG_STREAM(debug, log_filesystem)
+ #define LOG_FS LOG_STREAM(info, log_filesystem)
+@@ -1010,7 +1011,7 @@
+ cleanup();
+ init_binary_paths();
+
+- foreach (const config &bp, cfg.child_range("binary_path"))
++ BOOST_FOREACH(const config &bp, cfg.child_range("binary_path"))
+ {
+ std::string path = bp["path"].str();
+ if (path.find("..") != std::string::npos) {
+@@ -1057,7 +1058,7 @@
+
+ init_binary_paths();
+
+- foreach (const std::string &path, binary_paths)
++ BOOST_FOREACH(const std::string &path, binary_paths)
+ {
+ res.push_back(get_user_data_dir() + "/" + path + type + "/");
+
+@@ -1098,7 +1099,7 @@
+ return std::string();
+ }
+
+- foreach (const std::string &path, get_binary_paths(type))
++ BOOST_FOREACH(const std::string &path, get_binary_paths(type))
+ {
+ const std::string file = path + filename;
+ DBG_FS << " checking '" << path << "'\n";
+@@ -1126,7 +1127,7 @@
+ return std::string();
+ }
+
+- foreach (const std::string &path, get_binary_paths(type))
++ BOOST_FOREACH(const std::string &path, get_binary_paths(type))
+ {
+ const std::string file = path + filename;
+ DBG_FS << " checking '" << path << "'\n";
+@@ -1291,7 +1292,7 @@
+ p4 << drive;
+ #endif
+
+- foreach (const std::string &s, components)
++ BOOST_FOREACH(const std::string &s, components)
+ {
+ p4 << '/' << s;
+ }
+Index: src/help.cpp
+===================================================================
+--- src/help.cpp (revision 54624)
++++ src/help.cpp (revision 54625)
+@@ -27,7 +27,6 @@
+ #include "about.hpp"
+ #include "display.hpp"
+ #include "exceptions.hpp"
+-#include "foreach.hpp"
+ #include "game_preferences.hpp"
+ #include "gettext.hpp"
+ #include "gui/dialogs/transient_message.hpp"
+@@ -40,6 +39,8 @@
+ #include "wml_separators.hpp"
+ #include "serialization/parser.hpp"
+
++#include <boost/foreach.hpp>
++
+ #include <queue>
+
+ static lg::log_domain log_display("display");
+@@ -793,7 +794,7 @@
+ // opening the help browser in the default manner.
+ config hidden_toplevel;
+ std::stringstream ss;
+- foreach (const config &section, help_config->child_range("section"))
++ BOOST_FOREACH(const config &section, help_config->child_range("section"))
+ {
+ const std::string id = section["id"];
+ if (find_section(toplevel, id) == NULL) {
+@@ -810,7 +811,7 @@
+ }
+ hidden_toplevel["sections"] = ss.str();
+ ss.str("");
+- foreach (const config &topic, help_config->child_range("topic"))
++ BOOST_FOREACH(const config &topic, help_config->child_range("topic"))
+ {
+ const std::string id = topic["id"];
+ if (find_topic(toplevel, id) == NULL) {
+@@ -861,7 +862,7 @@
+ }
+ }
+
+- foreach (const config &section, cfg.child_range("section"))
++ BOOST_FOREACH(const config &section, cfg.child_range("section"))
+ {
+ const std::vector<std::string> sections_refd
+ = utils::quoted_split(section["sections"]);
+@@ -885,7 +886,7 @@
+ }
+ }
+
+- foreach (const config &section, cfg.child_range("section"))
++ BOOST_FOREACH(const config &section, cfg.child_range("section"))
+ {
+ const std::vector<std::string> topics_refd
+ = utils::quoted_split(section["topics"]);
+@@ -1103,7 +1104,7 @@
+ std::map<t_string, std::string> special_description;
+ std::map<t_string, std::set<std::string, string_less> > special_units;
+
+- foreach (const unit_type_data::unit_type_map::value_type &i, unit_types.types())
++ BOOST_FOREACH(const unit_type_data::unit_type_map::value_type &i, unit_types.types())
+ {
+ const unit_type &type = i.second;
+ // Only show the weapon special if we find it on a unit that
+@@ -1171,7 +1172,7 @@
+ // should have a full description, if so, add this units abilities
+ // for display. We do not want to show abilities that the user has
+ // not encountered yet.
+- foreach (const unit_type_data::unit_type_map::value_type &i, unit_types.types())
++ BOOST_FOREACH(const unit_type_data::unit_type_map::value_type &i, unit_types.types())
+ {
+ const unit_type &type = i.second;
+ if (description_type(type) == FULL_DESCRIPTION) {
+@@ -1244,7 +1245,7 @@
+ const config& era = game_cfg->child("era");
+ if (era) {
+ std::vector<std::string> faction_links;
+- foreach (const config &f, era.child_range("multiplayer_side")) {
++ BOOST_FOREACH(const config &f, era.child_range("multiplayer_side")) {
+ const std::string& id = f["id"];
+ if (id == "Random")
+ continue;
+@@ -1260,7 +1261,7 @@
+ text << "<header>text='" << _("Leaders:") << "'</header>" << "\n";
+ const std::vector<std::string> leaders =
+ make_unit_links_list( utils::split(f["leader"]), true );
+- foreach (const std::string &link, leaders) {
++ BOOST_FOREACH(const std::string &link, leaders) {
+ text << link << "\n";
+ }
+
+@@ -1269,7 +1270,7 @@
+ text << "<header>text='" << _("Recruits:") << "'</header>" << "\n";
+ const std::vector<std::string> recruits =
+ make_unit_links_list( utils::split(f["recruit"]), true );
+- foreach (const std::string &link, recruits) {
++ BOOST_FOREACH(const std::string &link, recruits) {
+ text << link << "\n";
+ }
+
+@@ -1291,7 +1292,7 @@
+ text << "<header>text='" << _("Factions:") << "'</header>" << "\n";
+
+ std::sort(faction_links.begin(), faction_links.end());
+- foreach (const std::string &link, faction_links) {
++ BOOST_FOREACH(const std::string &link, faction_links) {
+ text << link << "\n";
+ }
+
+@@ -1366,7 +1367,7 @@
+ reverse ? type_.advances_from() : type_.advances_to();
+ bool first = true;
+
+- foreach (const std::string &adv, adv_units)
++ BOOST_FOREACH(const std::string &adv, adv_units)
+ {
+ const unit_type *type = unit_types.find(adv);
+ if (!type || type->hide_help()) continue;
+@@ -1676,7 +1677,7 @@
+ std::vector<std::string> make_unit_links_list(const std::vector<std::string>& type_id_list, bool ordered)
+ {
+ std::vector<std::string> links_list;
+- foreach (const std::string &type_id, type_id_list) {
++ BOOST_FOREACH(const std::string &type_id, type_id_list) {
+ std::string unit_link = make_unit_link(type_id);
+ if (!unit_link.empty())
+ links_list.push_back(unit_link);
+@@ -1693,7 +1694,7 @@
+ std::set<std::string, string_less> races;
+ std::set<std::string, string_less> visible_races;
+
+- foreach (const unit_type_data::unit_type_map::value_type &i, unit_types.types())
++ BOOST_FOREACH(const unit_type_data::unit_type_map::value_type &i, unit_types.types())
+ {
+ const unit_type &type = i.second;
+ UNIT_DESCRIPTION_TYPE desc_type = description_type(type);
+@@ -1736,7 +1737,7 @@
+ std::set<std::string, string_less> race_units;
+ std::set<std::string, string_less> race_topics;
+
+- foreach (const unit_type_data::unit_type_map::value_type &i, unit_types.types())
++ BOOST_FOREACH(const unit_type_data::unit_type_map::value_type &i, unit_types.types())
+ {
+ const unit_type &type = i.second;
+
+@@ -1768,7 +1769,7 @@
+ race_name = r->plural_name();
+ race_description = r->description();
+ // if (description.empty()) description = _("No description Available");
+- foreach (const config &additional_topic, r->additional_topics())
++ BOOST_FOREACH(const config &additional_topic, r->additional_topics())
+ {
+ std::string id = additional_topic["id"];
+ std::string title = additional_topic["title"];
+Index: src/savegame.cpp
+===================================================================
+--- src/savegame.cpp (revision 54624)
++++ src/savegame.cpp (revision 54625)
+@@ -17,7 +17,6 @@
+ #include "savegame.hpp"
+
+ #include "dialogs.hpp" //FIXME: get rid of this as soon as the two remaining dialogs are moved to gui2
+-#include "foreach.hpp"
+ #include "game_display.hpp"
+ #include "game_end_exceptions.hpp"
+ #include "game_preferences.hpp"
+@@ -40,6 +39,8 @@
+ #include "unit_id.hpp"
+ #include "version.hpp"
+
++#include <boost/foreach.hpp>
++
+ static lg::log_domain log_engine("engine");
+ #define LOG_SAVE LOG_STREAM(info, log_engine)
+ #define ERR_SAVE LOG_STREAM(err, log_engine)
+@@ -913,7 +914,7 @@
+ bool shrouded = false;
+
+ const config& snapshot = has_snapshot ? gamestate_.snapshot : gamestate_.starting_pos;
+- foreach (const config &side, snapshot.child_range("side"))
++ BOOST_FOREACH(const config &side, snapshot.child_range("side"))
+ {
+ if (side["controller"] != "human") {
+ continue;
+@@ -922,7 +923,7 @@
+ shrouded = true;
+ }
+
+- foreach (const config &u, side.child_range("unit"))
++ BOOST_FOREACH(const config &u, side.child_range("unit"))
+ {
+ if (u["canrecruit"].to_bool()) {
+ leader = u["id"].str();
+@@ -960,7 +961,7 @@
+ // if there is no scenario information in the starting pos, add the (persistent) sides from the snapshot
+ // else do nothing, as persistence information was already added at the end of the previous scenario
+ if (gamestate().starting_pos["id"].empty()) {
+- foreach(const config &snapshot_side, gamestate().snapshot.child_range("side")) {
++ BOOST_FOREACH(const config &snapshot_side, gamestate().snapshot.child_range("side")) {
+ //add all side tags (assuming they only contain carryover information)
+ gamestate().starting_pos.add_child("side", snapshot_side);
+ }
+Index: src/replay.cpp
+===================================================================
+--- src/replay.cpp (revision 54624)
++++ src/replay.cpp (revision 54625)
+@@ -23,7 +23,6 @@
+ #include "global.hpp"
+
+ #include "dialogs.hpp"
+-#include "foreach.hpp"
+ #include "game_display.hpp"
+ #include "game_end_exceptions.hpp"
+ #include "game_events.hpp"
+@@ -41,6 +40,7 @@
+ #include "whiteboard/manager.hpp"
+
+ #include <boost/bind.hpp>
++#include <boost/foreach.hpp>
+
+ static lg::log_domain log_replay("replay");
+ #define DBG_REPLAY LOG_STREAM(debug, log_replay)
+@@ -67,7 +67,7 @@
+ << nunits << " according to data source. " << units.size() << " locally\n";
+
+ std::set<map_location> locs;
+- foreach (const config &u, cfg.child_range("unit"))
++ BOOST_FOREACH(const config &u, cfg.child_range("unit"))
+ {
+ const map_location loc(u, resources::state_of_game);
+ locs.insert(loc);
+@@ -88,7 +88,7 @@
+ errbuf.clear();
+ }
+
+- foreach (const config &un, cfg.child_range("unit"))
++ BOOST_FOREACH(const config &un, cfg.child_range("unit"))
+ {
+ const map_location loc(un, resources::state_of_game);
+ const unit_map::const_iterator u = units.find(loc);
+@@ -560,7 +560,7 @@
+ const map_location &src = steps.front();
+ const map_location &dst = steps.back();
+
+- foreach (const async_cmd &ac, async_cmds)
++ BOOST_FOREACH(const async_cmd &ac, async_cmds)
+ {
+ if (config &async_child = ac.cfg->child("rename")) {
+ map_location aloc(async_child, resources::state_of_game);
+@@ -576,7 +576,7 @@
+ // A unit is being un-recruited or un-recalled.
+ // Remove unsynced commands that would act on that unit.
+ map_location src(*chld, resources::state_of_game);
+- foreach (const async_cmd &ac, async_cmds)
++ BOOST_FOREACH(const async_cmd &ac, async_cmds)
+ {
+ if (config &async_child = ac.cfg->child("rename"))
+ {
+@@ -680,7 +680,7 @@
+
+ void replay::add_config(const config& cfg, MARK_SENT mark)
+ {
+- foreach (const config &cmd, cfg.child_range("command"))
++ BOOST_FOREACH(const config &cmd, cfg.child_range("command"))
+ {
+ config &cfg = cfg_.add_child("command", cmd);
+ if (cfg.child("speak"))
+@@ -730,7 +730,7 @@
+ if(! game_config::mp_debug) {
+ return;
+ }
+- foreach (const config &ch, cfg.child_range("checksum"))
++ BOOST_FOREACH(const config &ch, cfg.child_range("checksum"))
+ {
+ map_location loc(ch, resources::state_of_game);
+ unit_map::const_iterator u = resources::units->find(loc);
+@@ -1151,7 +1151,7 @@
+ }
+ else if (const config &child = cfg->child("fire_event"))
+ {
+- foreach (const config &v, child.child_range("set_variable")) {
++ BOOST_FOREACH(const config &v, child.child_range("set_variable")) {
+ resources::state_of_game->set_variable(v["name"], v["value"]);
+ }
+ const std::string &event = child["raise"];
+Index: src/game_preferences_display.cpp
+===================================================================
+--- src/game_preferences_display.cpp (revision 54624)
++++ src/game_preferences_display.cpp (revision 54625)
+@@ -19,7 +19,6 @@
+ #include "display.hpp"
+ #include "filesystem.hpp"
+ #include "filechooser.hpp"
+-#include "foreach.hpp"
+ #include "game_preferences.hpp"
+ #include "gettext.hpp"
+ #include "gui/dialogs/simple_item_selector.hpp"
+@@ -30,6 +29,7 @@
+ #include "widgets/slider.hpp"
+ #include "formula_string_utils.hpp"
+
++#include <boost/foreach.hpp>
+
+ namespace preferences {
+
+@@ -1071,7 +1071,7 @@
+ void preferences_dialog::set_advanced_menu()
+ {
+ std::vector<std::string> advanced_items;
+- foreach (const config &adv, adv_preferences_cfg_)
++ BOOST_FOREACH(const config &adv, adv_preferences_cfg_)
+ {
+ std::ostringstream str;
+ std::string field = preferences::get(adv["field"]);
+@@ -1096,7 +1096,7 @@
+ {
+ adv_preferences_cfg_.clear();
+
+- foreach(const config& adv, game_cfg_.child_range("advanced_preference")) {
++ BOOST_FOREACH(const config& adv, game_cfg_.child_range("advanced_preference")) {
+ adv_preferences_cfg_.push_back(adv);
+ }
+
+Index: src/image.cpp
+===================================================================
+--- src/image.cpp (revision 54624)
++++ src/image.cpp (revision 54625)
+@@ -25,7 +25,6 @@
+ #include "color_range.hpp"
+ #include "config.hpp"
+ #include "filesystem.hpp"
+-#include "foreach.hpp"
+ #include "game_config.hpp"
+ #include "image.hpp"
+ #include "image_modifications.hpp"
+@@ -36,6 +35,7 @@
+ #include "SDL_image.h"
+
+ #include <boost/functional/hash.hpp>
++#include <boost/foreach.hpp>
+
+ #include <list>
+ #include <set>
+@@ -376,7 +376,7 @@
+ std::string trackpath = get_binary_file_location("", "l10n-track");
+ std::string contents = read_file(trackpath);
+ std::vector<std::string> lines = utils::split(contents, '\n');
+- foreach (const std::string &line, lines) {
++ BOOST_FOREACH(const std::string &line, lines) {
+ size_t p1 = line.find(fsep);
+ if (p1 == std::string::npos)
+ continue;
+@@ -423,7 +423,7 @@
+ // add en_US with lowest priority, since the message above will
+ // not have it when translated.
+ langs.push_back("en_US");
+- foreach (const std::string &lang, langs) {
++ BOOST_FOREACH(const std::string &lang, langs) {
+ std::string loc_file = dir + "l10n" + "/" + lang + "/" + loc_base;
+ if (file_exists(loc_file) && localized_file_uptodate(loc_file)) {
+ return loc_file;
+Index: src/team.cpp
+===================================================================
+--- src/team.cpp (revision 54624)
++++ src/team.cpp (revision 54625)
+@@ -21,13 +21,14 @@
+ #include "team.hpp"
+
+ #include "ai/manager.hpp"
+-#include "foreach.hpp"
+ #include "game_events.hpp"
+ #include "gamestatus.hpp"
+ #include "resources.hpp"
+ #include "game_preferences.hpp"
+ #include "whiteboard/side_actions.hpp"
+
++#include <boost/foreach.hpp>
++
+ static lg::log_domain log_engine("engine");
+ #define DBG_NG LOG_STREAM(debug, log_engine)
+ #define LOG_NG LOG_STREAM(info, log_engine)
+@@ -318,7 +319,7 @@
+ // Was it correct?
+
+ // Load in the villages the side controls at the start
+- foreach (const config &v, cfg.child_range("village"))
++ BOOST_FOREACH(const config &v, cfg.child_range("village"))
+ {
+ map_location loc(v, resources::state_of_game);
+ if (map.is_village(loc)) {
+@@ -397,7 +398,7 @@
+ return info_.minimum_recruit_price;
+ }else{
+ int min = 20;
+- foreach(std::string recruit, info_.can_recruit){
++ BOOST_FOREACH(std::string recruit, info_.can_recruit){
+ const unit_type *ut = unit_types.find(recruit);
+ if(!ut)
+ continue;
+@@ -605,7 +606,7 @@
+ return true;
+ }
+
+- foreach (const team &t, *teams) {
++ BOOST_FOREACH(const team &t, *teams) {
+ if (t.is_human())
+ return false;
+ }
+Index: src/config_cache.cpp
+===================================================================
+--- src/config_cache.cpp (revision 54624)
++++ src/config_cache.cpp (revision 54625)
+@@ -17,7 +17,6 @@
+
+ #include "config_cache.hpp"
+ #include "filesystem.hpp"
+-#include "foreach.hpp"
+ #include "gettext.hpp"
+ #include "game_config.hpp"
+ #include "game_display.hpp"
+@@ -29,6 +28,7 @@
+ #include "serialization/parser.hpp"
+ #include "version.hpp"
+
++#include <boost/foreach.hpp>
+ #include <boost/algorithm/string/replace.hpp>
+
+ static lg::log_domain log_cache("cache");
+@@ -113,7 +113,7 @@
+ config_writer writer(*stream, gzip, game_config::cache_compression_level);
+
+ // write all defines to stream
+- foreach (const preproc_map::value_type &define, defines_map) {
++ BOOST_FOREACH(const preproc_map::value_type &define, defines_map) {
+ define.second.write(writer, define.first);
+ }
+ }
+@@ -262,7 +262,7 @@
+
+ // use static preproc_define::read_pair(config) to make a object
+ // and pass that object config_cache_transaction::insert_to_active method
+- foreach (const config::any_child &value, cfg.all_children_range()) {
++ BOOST_FOREACH(const config::any_child &value, cfg.all_children_range()) {
+ config_cache_transaction::instance().insert_to_active(
+ preproc_define::read_pair(value.cfg));
+ }
+@@ -271,7 +271,7 @@
+ void config_cache::read_defines_queue()
+ {
+ const config_cache_transaction::filenames& files = config_cache_transaction::instance().get_define_files();
+- foreach (const std::string &path, files) {
++ BOOST_FOREACH(const std::string &path, files) {
+ read_defines_file(path);
+ }
+ }
+@@ -394,7 +394,7 @@
+ std::insert_iterator<preproc_map>(temp,temp.begin()),
+ &compare_define);
+
+- foreach (const preproc_map::value_type &def, temp) {
++ BOOST_FOREACH(const preproc_map::value_type &def, temp) {
+ insert_to_active(def);
+ }
+
+Index: src/game_events.cpp
+===================================================================
+--- src/game_events.cpp (revision 54624)
++++ src/game_events.cpp (revision 54625)
+@@ -23,7 +23,6 @@
+ #include "actions.hpp"
+ #include "ai/manager.hpp"
+ #include "dialogs.hpp"
+-#include "foreach.hpp"
+ #include "game_display.hpp"
+ #include "game_events.hpp"
+ #include "game_preferences.hpp"
+@@ -60,6 +59,8 @@
+ #include <iomanip>
+ #include <iostream>
+
++#include <boost/foreach.hpp>
++
+ static lg::log_domain log_engine("engine");
+ #define DBG_NG LOG_STREAM(debug, log_engine)
+ #define LOG_NG LOG_STREAM(info, log_engine)
+@@ -341,7 +342,7 @@
+ std::vector<std::pair<int,int> > counts = (*u).has_attribute("count")
+ ? utils::parse_ranges((*u)["count"]) : default_counts;
+ int match_count = 0;
+- foreach (const unit &i, *resources::units)
++ BOOST_FOREACH(const unit &i, *resources::units)
+ {
+ if(i.hitpoints() > 0 && unit_matches_filter(i, *u)) {
+ ++match_count;
+@@ -396,7 +397,7 @@
+ const vconfig::child_list& variables = cond.get_children("variable");
+ backwards_compat = backwards_compat && variables.empty();
+
+- foreach (const vconfig &values, variables)
++ BOOST_FOREACH(const vconfig &values, variables)
+ {
+ const std::string name = values["name"];
+ config::attribute_value value = resources::state_of_game->get_variable_const(name);
+@@ -589,7 +590,7 @@
+ const std::vector<game_events::event_handler>& handlers,
+ const std::string& msg) {
+
+- foreach(const game_events::event_handler& h, handlers){
++ BOOST_FOREACH(const game_events::event_handler& h, handlers){
+ const config& cfg = h.get_config();
+ ss << "name=" << cfg["name"] << ", with id=" << cfg["id"] << "; ";
+ }
+@@ -603,7 +604,7 @@
+ std::stringstream ss;
+ log_handler(ss, active_, "active");
+ log_handler(ss, insert_buffer_, "insert buffered");
+- foreach(const std::string& h, remove_buffer_){
++ BOOST_FOREACH(const std::string& h, remove_buffer_){
+ ss << "id=" << h << "; ";
+ }
+ DBG_EH << "remove buffered handlers are now " << ss.str() << "\n";
+@@ -631,7 +632,7 @@
+ const config & cfg = new_handler.get_config();
+ std::string id = cfg["id"];
+ if(!id.empty()) {
+- foreach( game_events::event_handler const & eh, active_) {
++ BOOST_FOREACH( game_events::event_handler const & eh, active_) {
+ config const & temp_config( eh.get_config());
+ if(id == temp_config["id"]) {
+ DBG_EH << "ignoring event handler for name=" << cfg["name"] <<
+@@ -698,12 +699,12 @@
+ return;
+
+ // Commit any event removals
+- foreach(std::string const & i , remove_buffer_ ){
++ BOOST_FOREACH(std::string const & i , remove_buffer_ ){
+ remove_event_handler( i ); }
+ remove_buffer_.clear();
+
+ // Commit any spawned events-within-events
+- foreach( game_events::event_handler const & i , insert_buffer_ ){
++ BOOST_FOREACH( game_events::event_handler const & i , insert_buffer_ ){
+ add_event_handler( i ); }
+ insert_buffer_.clear();
+
+@@ -735,7 +736,7 @@
+ std::vector<int> sides = game_events::get_sides_vector(cfg);
+ size_t index;
+
+- foreach (const int &side_num, sides)
++ BOOST_FOREACH(const int &side_num, sides)
+ {
+ index = side_num - 1;
+ team &t = (*resources::teams)[index];
+@@ -744,7 +745,7 @@
+ filter.restrict_size(game_config::max_loop);
+ filter.get_locations(locs, true);
+
+- foreach (map_location const &loc, locs)
++ BOOST_FOREACH(map_location const &loc, locs)
+ {
+ if (remove) {
+ t.clear_shroud(loc);
+@@ -774,7 +775,7 @@
+ const bool remove = utils::string_bool(cfg["remove"], false);
+ if (remove) {
+ const std::vector<std::string> ids = utils::split(cfg["id"]);
+- foreach(const std::string &id, ids) {
++ BOOST_FOREACH(const std::string &id, ids) {
+ resources::tunnels->remove(id);
+ }
+ } else if (cfg.get_children("source").empty() ||
+@@ -941,7 +942,7 @@
+ WML_HANDLER_FUNCTION(modify_ai, /*event_info*/, cfg)
+ {
+ std::vector<int> sides = game_events::get_sides_vector(cfg);
+- foreach (const int &side_num, sides)
++ BOOST_FOREACH(const int &side_num, sides)
+ {
+ ai::manager::modify_active_ai_for_side(side_num,cfg.get_parsed_config());
+ }
+@@ -967,7 +968,7 @@
+ std::vector<int> sides = game_events::get_sides_vector(cfg);
+ size_t team_index;
+
+- foreach (const int &side_num, sides)
++ BOOST_FOREACH(const int &side_num, sides)
+ {
+ team_index = side_num - 1;
+ LOG_NG << "modifying side: " << side_num << "\n";
+@@ -1212,7 +1213,7 @@
+
+ size_t longest_path = 0;
+
+- foreach(const vconfig& config, unit_cfgs) {
++ BOOST_FOREACH(const vconfig& config, unit_cfgs) {
+ const std::vector<std::string> xvals = utils::split(config["x"]);
+ const std::vector<std::string> yvals = utils::split(config["y"]);
+ int skip_steps = config["skip_steps"];
+@@ -1461,7 +1462,7 @@
+
+ variable_info vi(array_name, true, variable_info::TYPE_ARRAY);
+ bool first = true;
+- foreach (const config &cfg, vi.as_array())
++ BOOST_FOREACH(const config &cfg, vi.as_array())
+ {
+ std::string current_string = cfg[key_name];
+ if (remove_empty && current_string.empty()) continue;
+@@ -1589,7 +1590,7 @@
+ dest.vars->merge_with(data);
+ }
+ } else if(mode == "insert" || dest.explicit_index) {
+- foreach (const config &child, data.child_range(dest.key))
++ BOOST_FOREACH(const config &child, data.child_range(dest.key))
+ {
+ dest.vars->add_child_at(dest.key, child, dest.index++);
+ }
+@@ -1619,7 +1620,7 @@
+ item["type"] = *ti;
+ }
+ unit_map::iterator itor;
+- foreach (unit &u, *resources::units) {
++ BOOST_FOREACH(unit &u, *resources::units) {
+ if (game_events::unit_matches_filter(u, filter)) {
+ u.set_role(cfg["role"]);
+ found = true;
+@@ -1632,7 +1633,7 @@
+ std::set<std::string> player_ids;
+ std::vector<std::string> sides = utils::split(cfg["side"]);
+ const bool has_any_sides = !sides.empty();
+- foreach(std::string const& side_str, sides) {
++ BOOST_FOREACH(std::string const& side_str, sides) {
+ size_t side_num = lexical_cast_default<size_t>(side_str,0);
+ if(side_num > 0 && side_num <= resources::teams->size()) {
+ player_ids.insert((resources::teams->begin() + (side_num - 1))->save_id());
+@@ -1699,7 +1700,7 @@
+ game_map->set_terrain(loc, new_t);
+ screen_needs_rebuild = true;
+
+- foreach (const t_translation::t_terrain &ut, game_map->underlying_union_terrain(loc)) {
++ BOOST_FOREACH(const t_translation::t_terrain &ut, game_map->underlying_union_terrain(loc)) {
+ preferences::encountered_terrains().insert(ut);
+ }
+ }
+@@ -1820,7 +1821,7 @@
+ const map_location cfg_loc = cfg_to_loc(cfg);
+
+ //TODO fendrin: comment this monster
+- foreach (unit_map::const_unit_iterator leader, leaders) {
++ BOOST_FOREACH(unit_map::const_unit_iterator leader, leaders) {
+ DBG_NG << "...considering " + leader->id() + " as the recalling leader...\n";
+ map_location loc = cfg_loc;
+ if ( (leader_filter.null() || leader->matches_filter(leader_filter, leader->get_location())) &&
+@@ -1879,7 +1880,7 @@
+
+ map_location loc;
+ if(!filter.null()) {
+- foreach (const unit &u, *resources::units) {
++ BOOST_FOREACH(const unit &u, *resources::units) {
+ if (game_events::unit_matches_filter(u, filter)) {
+ loc = u.get_location();
+ break;
+@@ -1926,7 +1927,7 @@
+ }
+ }
+
+- foreach (const vconfig &cmd, cfg.get_children(command_type)) {
++ BOOST_FOREACH(const vconfig &cmd, cfg.get_children(command_type)) {
+ handle_event_commands(event_info, cmd);
+ }
+ }
+@@ -2029,13 +2030,13 @@
+ std::vector<unit *> dead_men_walking;
+ // unit_map::iterator uit(resources::units->begin()), uend(resources::units->end());
+ // for(;uit!=uend; ++uit){
+- foreach(unit & u, *resources::units){
++ BOOST_FOREACH(unit & u, *resources::units){
+ if(game_events::unit_matches_filter(u, cfg)){
+ dead_men_walking.push_back(&u);
+ }
+ }
+
+- foreach(unit * un, dead_men_walking) {
++ BOOST_FOREACH(unit * un, dead_men_walking) {
+ map_location loc(un->get_location());
+ bool fire_event = false;
+ game_events::entity_location death_loc(*un);
+@@ -2429,7 +2430,7 @@
+
+ if (clear_shroud_bool) {
+ side_filter filter(cfg);
+- foreach(const int side, filter.get_teams()){
++ BOOST_FOREACH(const int side, filter.get_teams()){
+ clear_shroud(side);
+ }
+ screen.recalculate_minimap();
+@@ -2466,7 +2467,7 @@
+ const vconfig healers_filter = cfg.child("filter_second");
+ std::vector<unit*> healers;
+ if (!healers_filter.null()) {
+- foreach (unit& u, *units) {
++ BOOST_FOREACH(unit& u, *units) {
+ if (game_events::unit_matches_filter(u, healers_filter) && u.has_ability_type("heals")) {
+ healers.push_back(&u);
+ }
+@@ -2835,7 +2836,7 @@
+ return;
+ }
+
+- foreach (const vconfig &cmd, option_events[option_chosen]) {
++ BOOST_FOREACH(const vconfig &cmd, option_events[option_chosen]) {
+ handle_event_commands(event_info, cmd);
+ }
+ }
+@@ -2858,7 +2859,7 @@
+ if(remove) {
+ const std::vector<std::string> id_list =
+ utils::split(ids, ',', utils::STRIP_SPACES | utils::REMOVE_EMPTY);
+- foreach(const std::string& id, id_list) {
++ BOOST_FOREACH(const std::string& id, id_list) {
+ resources::tod_manager->remove_time_area(id);
+ LOG_NG << "event WML removed time_area '" << id << "'\n";
+ }
+@@ -2997,7 +2998,7 @@
+ if(is_empty_command) {
+ mref->command.add_child("allow_undo");
+ }
+- foreach(game_events::event_handler& hand, event_handlers) {
++ BOOST_FOREACH(game_events::event_handler& hand, event_handlers) {
+ if(hand.is_menu_item() && hand.matches_name(mref->name)) {
+ LOG_NG << "changing command for " << mref->name << " to:\n" << *wcc.second;
+ hand = game_events::event_handler(mref->command, true);
+@@ -3029,14 +3030,14 @@
+ vconfig filters(handler.get_config());
+
+
+- foreach (const vconfig &condition, filters.get_children("filter_condition"))
++ BOOST_FOREACH(const vconfig &condition, filters.get_children("filter_condition"))
+ {
+ if (!game_events::conditional_passed(condition)) {
+ return false;
+ }
+ }
+
+- foreach (const vconfig &f, filters.get_children("filter"))
++ BOOST_FOREACH(const vconfig &f, filters.get_children("filter"))
+ {
+ if (unit1 == units->end() || !game_events::unit_matches_filter(*unit1, f)) {
+ return false;
+@@ -3046,7 +3047,7 @@
+ }
+ }
+
+- foreach (const vconfig &f, filters.get_children("filter_side"))
++ BOOST_FOREACH(const vconfig &f, filters.get_children("filter_side"))
+ {
+ side_filter ssf(f);
+ const int current_side = resources::controller->current_side();
+@@ -3055,7 +3056,7 @@
+
+ vconfig::child_list special_filters = filters.get_children("filter_attack");
+ bool special_matches = special_filters.empty();
+- foreach (const vconfig &f, special_filters)
++ BOOST_FOREACH(const vconfig &f, special_filters)
+ {
+ if (unit1 != units->end() && game_events::matches_special_filter(ev.data.child("first"), f)) {
+ special_matches = true;
+@@ -3068,7 +3069,7 @@
+ return false;
+ }
+
+- foreach (const vconfig &f, filters.get_children("filter_second"))
++ BOOST_FOREACH(const vconfig &f, filters.get_children("filter_second"))
+ {
+ if (unit2 == units->end() || !game_events::unit_matches_filter(*unit2, f)) {
+ return false;
+@@ -3080,7 +3081,7 @@
+
+ special_filters = filters.get_children("filter_second_attack");
+ special_matches = special_filters.empty();
+- foreach (const vconfig &f, special_filters)
++ BOOST_FOREACH(const vconfig &f, special_filters)
+ {
+ if (unit2 != units->end() && game_events::matches_special_filter(ev.data.child("second"), f)) {
+ special_matches = true;
+@@ -3275,17 +3276,17 @@
+ : variable_manager()
+ {
+ assert(!manager_running);
+- foreach (const config &ev, cfg.child_range("event")) {
++ BOOST_FOREACH(const config &ev, cfg.child_range("event")) {
+ event_handlers.add_event_handler(game_events::event_handler(ev));
+ }
+- foreach (const std::string &id, utils::split(cfg["unit_wml_ids"])) {
++ BOOST_FOREACH(const std::string &id, utils::split(cfg["unit_wml_ids"])) {
+ unit_wml_ids.insert(id);
+ }
+
+ resources::lua_kernel = new LuaKernel(cfg);
+ manager_running = true;
+
+- foreach (static_wml_action_map::value_type &action, static_wml_actions) {
++ BOOST_FOREACH(static_wml_action_map::value_type &action, static_wml_actions) {
+ resources::lua_kernel->set_wml_action(action.first, action.second);
+ }
+
+@@ -3298,7 +3299,7 @@
+ }
+ int wmi_count = 0;
+ typedef std::pair<std::string, wml_menu_item *> item;
+- foreach (const item &itor, resources::state_of_game->wml_menu_items) {
++ BOOST_FOREACH(const item &itor, resources::state_of_game->wml_menu_items) {
+ if (!itor.second->command.empty()) {
+ event_handlers.add_event_handler(game_events::event_handler(itor.second->command, true));
+ }
+@@ -3312,7 +3313,7 @@
+ void write_events(config& cfg)
+ {
+ assert(manager_running);
+- foreach (const game_events::event_handler &eh, event_handlers) {
++ BOOST_FOREACH(const game_events::event_handler &eh, event_handlers) {
+ if (eh.disabled() || eh.is_menu_item()) continue;
+ cfg.add_child("event", eh.get_config());
+ }
+@@ -3385,7 +3386,7 @@
+ if(std::find(unit_wml_ids.begin(),unit_wml_ids.end(),type) != unit_wml_ids.end()) return;
+ unit_wml_ids.insert(type);
+ }
+- foreach (const config &new_ev, cfgs) {
++ BOOST_FOREACH(const config &new_ev, cfgs) {
+ if(type.empty() && new_ev["id"].empty())
+ {
+ WRN_NG << "attempt to add an [event] with empty id=, ignoring \n";
+@@ -3427,7 +3428,7 @@
+
+ if(!lg::debug.dont_log("event_handler")) {
+ std::stringstream ss;
+- foreach(const game_events::queued_event& ev, events_queue) {
++ BOOST_FOREACH(const game_events::queued_event& ev, events_queue) {
+ ss << "name=" << ev.name << "; ";
+ }
+ DBG_EH << "processing queued events: " << ss.str() << "\n";
+@@ -3454,7 +3455,7 @@
+
+ bool init_event_vars = true;
+
+- foreach(game_events::event_handler& handler, event_handlers) {
++ BOOST_FOREACH(game_events::event_handler& handler, event_handlers) {
+ if(!handler.matches_name(event_name))
+ continue;
+ // Set the variables for the event
+Index: src/formula_tokenizer.cpp
+===================================================================
+--- src/formula_tokenizer.cpp (revision 54624)
++++ src/formula_tokenizer.cpp (revision 54625)
+@@ -13,7 +13,6 @@
+
+ #include <sstream>
+
+-#include "foreach.hpp"
+ #include "formula_tokenizer.hpp"
+
+ namespace formula_tokenizer
+Index: src/playcampaign.cpp
+===================================================================
+--- src/playcampaign.cpp (revision 54624)
++++ src/playcampaign.cpp (revision 54625)
+@@ -21,7 +21,6 @@
+
+ #include "global.hpp"
+
+-#include "foreach.hpp"
+ #include "game_preferences.hpp"
+ #include "gui/dialogs/message.hpp"
+ #include "gui/dialogs/transient_message.hpp"
+@@ -41,6 +40,8 @@
+ #include "wml_exception.hpp"
+ #include "formula_string_utils.hpp"
+
++#include <boost/foreach.hpp>
++
+ #define LOG_G LOG_STREAM(info, lg::general)
+
+ static lg::log_domain log_engine("engine");
+@@ -260,7 +261,7 @@
+ controller_map controllers;
+
+ if(io_type == IO_SERVER) {
+- foreach (config &side, const_cast<config *>(scenario)->child_range("side"))
++ BOOST_FOREACH(config &side, const_cast<config *>(scenario)->child_range("side"))
+ {
+ if (side["current_player"] == preferences::login()) {
+ side["controller"] = preferences::client_type();
+@@ -280,7 +281,7 @@
+ scenario = &starting_pos;
+ }
+
+- foreach (config &side, starting_pos.child_range("side"))
++ BOOST_FOREACH(config &side, starting_pos.child_range("side"))
+ {
+ if (side["current_player"] == preferences::login()) {
+ side["controller"] = preferences::client_type();
+@@ -474,7 +475,7 @@
+
+ if(io_type == IO_SERVER && scenario != NULL) {
+ // Tweaks sides to adapt controllers and descriptions.
+- foreach (config &side, starting_pos.child_range("side"))
++ BOOST_FOREACH(config &side, starting_pos.child_range("side"))
+ {
+ std::string id = side["save_id"];
+ if(id.empty()) {
+@@ -547,7 +548,7 @@
+ next_cfg.add_child("replay_start", gamestate.starting_pos);
+ //move side information from gamestate into the config that is sent to the other clients
+ next_cfg.clear_children("side");
+- foreach (config& side, gamestate.starting_pos.child_range("side"))
++ BOOST_FOREACH(config& side, gamestate.starting_pos.child_range("side"))
+ next_cfg.add_child("side", side);
+
+ network::send_data(cfg, 0);
+Index: src/multiplayer.cpp
+===================================================================
+--- src/multiplayer.cpp (revision 54624)
++++ src/multiplayer.cpp (revision 54625)
+@@ -40,6 +40,7 @@
+ #include "unit_id.hpp"
+
+ #include <boost/bind.hpp>
++#include <boost/foreach.hpp>
+
+ static lg::log_domain log_network("network");
+ #define LOG_NW LOG_STREAM(info, log_network)
+@@ -573,7 +574,7 @@
+ while (true) {
+ const config &cfg = game_config.child("lobby_music");
+ if (cfg) {
+- foreach (const config &i, cfg.child_range("music")) {
++ BOOST_FOREACH(const config &i, cfg.child_range("music")) {
+ sound::play_music_config(i);
+ }
+ sound::commit_music_changes();
+Index: src/terrain_filter.cpp
+===================================================================
+--- src/terrain_filter.cpp (revision 54624)
++++ src/terrain_filter.cpp (revision 54625)
+@@ -19,7 +19,6 @@
+
+ #include "actions.hpp"
+ #include "config.hpp"
+-#include "foreach.hpp"
+ #include "log.hpp"
+ #include "map.hpp"
+ #include "resources.hpp"
+@@ -27,6 +26,8 @@
+ #include "tod_manager.hpp"
+ #include "variable.hpp"
+
++#include <boost/foreach.hpp>
++
+ static lg::log_domain log_engine("engine");
+ #define ERR_NG LOG_STREAM(err, log_engine)
+
+@@ -129,7 +130,7 @@
+ }
+ } else {
+ bool found = false;
+- foreach (const config &cfg, vi.as_array()) {
++ BOOST_FOREACH(const config &cfg, vi.as_array()) {
+ if (map_location(cfg, NULL) == loc) {
+ found = true;
+ break;
+@@ -358,7 +359,7 @@
+ }
+ } else {
+ std::set<map_location> findin_locs;
+- foreach (const config &cfg, vi.as_array()) {
++ BOOST_FOREACH(const config &cfg, vi.as_array()) {
+ map_location test_loc(cfg, NULL);
+ if (xy_set.count(test_loc)) {
+ findin_locs.insert(test_loc);
+Index: src/playturn.cpp
+===================================================================
+--- src/playturn.cpp (revision 54624)
++++ src/playturn.cpp (revision 54625)
+@@ -16,7 +16,6 @@
+ #include "playturn.hpp"
+
+ #include "construct_dialog.hpp"
+-#include "foreach.hpp"
+ #include "game_display.hpp"
+ #include "game_end_exceptions.hpp"
+ #include "game_preferences.hpp"
+@@ -31,6 +30,8 @@
+ #include "formula_string_utils.hpp"
+ #include "play_controller.hpp"
+
++#include <boost/foreach.hpp>
++
+ #include <ctime>
+
+ static lg::log_domain log_network("network");
+@@ -124,11 +125,11 @@
+ preferences::message_bell());
+ }
+
+- foreach (const config &ob, cfg.child_range("observer")) {
++ BOOST_FOREACH(const config &ob, cfg.child_range("observer")) {
+ resources::screen->add_observer(ob["name"]);
+ }
+
+- foreach (const config &ob, cfg.child_range("observer_quit")) {
++ BOOST_FOREACH(const config &ob, cfg.child_range("observer_quit")) {
+ resources::screen->remove_observer(ob["name"]);
+ }
+
+@@ -147,7 +148,7 @@
+ const config& change = cfg.child_or_empty("change_controller");
+ const std::string& side_drop = cfg["side_drop"].str();
+
+- foreach (const config &t, turns)
++ BOOST_FOREACH(const config &t, turns)
+ {
+ handle_turn(turn_end, t, skip_replay, backlog);
+ }
+@@ -240,7 +241,7 @@
+ options.push_back(_("Abort game"));
+
+ //get all observers in as options to transfer control
+- foreach (const std::string &ob, resources::screen->observers())
++ BOOST_FOREACH(const std::string &ob, resources::screen->observers())
+ {
+ t_vars["player"] = ob;
+ options.push_back(vgettext("Replace with $player", t_vars));
+@@ -248,7 +249,7 @@
+ }
+
+ //get all allies in as options to transfer control
+- foreach (team &t, *resources::teams)
++ BOOST_FOREACH(team &t, *resources::teams)
+ {
+ if (!t.is_enemy(side) && !t.is_human() && !t.is_ai() && !t.is_empty()
+ && t.current_player() != tm.current_player())
+Index: src/tod_manager.cpp
+===================================================================
+--- src/tod_manager.cpp (revision 54624)
++++ src/tod_manager.cpp (revision 54625)
+@@ -12,7 +12,6 @@
+ See the COPYING file for more details.
+ */
+
+-#include "foreach.hpp"
+ #include "tod_manager.hpp"
+ #include "wml_exception.hpp"
+ #include "gettext.hpp"
+@@ -25,6 +24,8 @@
+ #include "unit.hpp"
+ #include "unit_abilities.hpp"
+
++#include <boost/foreach.hpp>
++
+ static lg::log_domain log_engine("engine");
+ #define LOG_NG LOG_STREAM(info, log_engine)
+
+@@ -279,7 +280,7 @@
+ void tod_manager::set_new_current_times(const int new_current_turn_number)
+ {
+ currentTime_ = calculate_current_time(times_.size(), new_current_turn_number, currentTime_);
+- foreach(area_time_of_day& area, areas_) {
++ BOOST_FOREACH(area_time_of_day& area, areas_) {
+ area.currentTime = calculate_current_time(
+ area.times.size(),
+ new_current_turn_number,
+Index: src/multiplayer_create.cpp
+===================================================================
+--- src/multiplayer_create.cpp (revision 54624)
++++ src/multiplayer_create.cpp (revision 54625)
+@@ -20,7 +20,6 @@
+
+ #include "global.hpp"
+
+-#include "foreach.hpp"
+ #include "gettext.hpp"
+ #include "game_display.hpp"
+ #include "game_preferences.hpp"
+@@ -40,6 +39,8 @@
+ #include "wml_separators.hpp"
+ #include "formula_string_utils.hpp"
+
++#include <boost/foreach.hpp>
++
+ static lg::log_domain log_config("config");
+ #define ERR_CF LOG_STREAM(err, log_config)
+
+@@ -127,7 +128,7 @@
+
+ // Standard maps
+ i = 0;
+- foreach (const config &j, cfg.child_range("multiplayer"))
++ BOOST_FOREACH(const config &j, cfg.child_range("multiplayer"))
+ {
+ if (j["allow_new_game"].to_bool(true))
+ {
+@@ -217,7 +218,7 @@
+
+ // The possible eras to play
+ std::vector<std::string> eras;
+- foreach (const config &er, cfg.child_range("era")) {
++ BOOST_FOREACH(const config &er, cfg.child_range("era")) {
+ eras.push_back(er["name"]);
+ }
+ if(eras.empty()) {
+@@ -547,7 +548,7 @@
+ }
+
+ int nsides = 0;
+- foreach (const config &k, parameters_.scenario_data.child_range("side")) {
++ BOOST_FOREACH(const config &k, parameters_.scenario_data.child_range("side")) {
+ if (k["allow_player"].to_bool(true)) ++nsides;
+ }
+
+Index: src/commandline_options.cpp
+===================================================================
+--- src/commandline_options.cpp (revision 54624)
++++ src/commandline_options.cpp (revision 54625)
+@@ -14,12 +14,12 @@
+ */
+
+ #include "commandline_options.hpp"
+-#include "foreach.hpp"
+ #include "serialization/string_utils.hpp"
+ #include "util.hpp"
+ #include "lua/llimits.h"
+
+ #include <boost/version.hpp>
++#include <boost/foreach.hpp>
+
+ namespace po = boost::program_options;
+
+@@ -374,7 +374,7 @@
+ void commandline_options::parse_log_domains_(const std::string &domains_string, const int severity)
+ {
+ const std::vector<std::string> domains = utils::split(domains_string, ',');
+- foreach (const std::string& domain, domains)
++ BOOST_FOREACH(const std::string& domain, domains)
+ {
+ if (!log)
+ log = std::vector<boost::tuple<int, std::string> >();
+@@ -396,7 +396,7 @@
+ {
+ std::vector<boost::tuple<unsigned int,std::string> > vec;
+ boost::tuple<unsigned int,std::string> elem;
+- foreach(const std::string &s, strings)
++ BOOST_FOREACH(const std::string &s, strings)
+ {
+ const std::vector<std::string> tokens = utils::split(s, separator);
+ if (tokens.size()!=2)
+@@ -415,7 +415,7 @@
+ {
+ std::vector<boost::tuple<unsigned int,std::string,std::string> > vec;
+ boost::tuple<unsigned int,std::string,std::string> elem;
+- foreach(const std::string &s, strings)
++ BOOST_FOREACH(const std::string &s, strings)
+ {
+ const std::vector<std::string> tokens = utils::split(s, separator);
+ if (tokens.size()!=3)
+Index: src/gui/dialogs/editor_set_starting_position.cpp
+===================================================================
+--- src/gui/dialogs/editor_set_starting_position.cpp (revision 54624)
++++ src/gui/dialogs/editor_set_starting_position.cpp (revision 54625)
+@@ -17,7 +17,7 @@
+
+ #include "gui/dialogs/editor_set_starting_position.hpp"
+
+-#include "foreach.hpp"
++#include <boost/foreach.hpp>
+ #include "formatter.hpp"
+ #include "formula_string_utils.hpp"
+ #include "gettext.hpp"
+Index: src/gui/dialogs/gamestate_inspector.cpp
+===================================================================
+--- src/gui/dialogs/gamestate_inspector.cpp (revision 54624)
++++ src/gui/dialogs/gamestate_inspector.cpp (revision 54625)
+@@ -27,7 +27,6 @@
+ #include "gui/widgets/settings.hpp"
+ #include "gui/widgets/window.hpp"
+
+-#include "../../foreach.hpp"
+ #include "../../gamestatus.hpp"
+ #include "../../resources.hpp"
+ #include "../../team.hpp"
+@@ -36,6 +35,7 @@
+ #include <vector>
+ #include <boost/bind.hpp>
+ #include <boost/shared_ptr.hpp>
++#include <boost/foreach.hpp>
+
+ namespace gui2 {
+
+@@ -189,11 +189,11 @@
+ ? resources::state_of_game->get_variables()
+ : config();
+
+- foreach( const config::attribute &a, vars.attribute_range()) {
++ BOOST_FOREACH( const config::attribute &a, vars.attribute_range()) {
+ model_.add_row_to_stuff_list(a.first,a.first);
+ }
+
+- foreach( const config::any_child &c, vars.all_children_range()) {
++ BOOST_FOREACH( const config::any_child &c, vars.all_children_range()) {
+ model_.add_row_to_stuff_list("["+c.key+"]","["+c.key+"]");
+ }
+
+@@ -214,7 +214,7 @@
+ ? resources::state_of_game->get_variables()
+ : config();
+
+- foreach( const config::attribute &a, vars.attribute_range()) {
++ BOOST_FOREACH( const config::attribute &a, vars.attribute_range()) {
+ if (selected==i) {
+ model_.set_inspect_window_text(a.second);
+ return;
+@@ -222,7 +222,7 @@
+ i++;
+ }
+
+- foreach( const config::any_child &c, vars.all_children_range()) {
++ BOOST_FOREACH( const config::any_child &c, vars.all_children_range()) {
+ if (selected==i) {
+ model_.set_inspect_window_text(c.cfg.debug());
+ return;
+@@ -268,7 +268,7 @@
+ << '/' << i->max_experience() << " xp; "
+ << i->hitpoints() << '/' << i->max_hitpoints()
+ << " hp; ";
+- foreach (const std::string &str, i->get_traits_list()) {
++ BOOST_FOREACH(const std::string &str, i->get_traits_list()) {
+ s << str <<" ";
+ }
+
+@@ -371,9 +371,9 @@
+ : std::vector<unit>();
+
+ std::stringstream s;
+- foreach (const unit &u, recall_list) {
++ BOOST_FOREACH(const unit &u, recall_list) {
+ s << "id=["<<u.id() << "] "<<u.type_id() << "; L"<<u.level()<<"; " << u.experience() <<"/" << u.max_experience()<< " xp "<< std::endl;
+- foreach (const std::string &str, u.get_traits_list() ) {
++ BOOST_FOREACH(const std::string &str, u.get_traits_list() ) {
+ s << "\t" << str<< std::endl;
+ }
+ s << std::endl << std::endl;
+@@ -388,7 +388,7 @@
+ : std::vector<unit>();
+
+ config c;
+- foreach (const unit &u, recall_list) {
++ BOOST_FOREACH(const unit &u, recall_list) {
+ config c_unit;
+ u.write(c_unit);
+ c.add_child("unit",c_unit);
+@@ -423,7 +423,7 @@
+ << i->max_experience() << " xp; "
+ << i->hitpoints() << '/'
+ << i->max_hitpoints()<<" hp.\n";
+- foreach (const std::string &str, i->get_traits_list() ) {
++ BOOST_FOREACH(const std::string &str, i->get_traits_list() ) {
+ s << "\t" << str<< std::endl;
+ }
+ s << std::endl << std::endl;
+@@ -457,7 +457,7 @@
+ boost::shared_ptr<single_mode_controller>(new variable_mode_controller("variables",model_)));
+ sm_controllers_.push_back(
+ boost::shared_ptr<single_mode_controller>(new unit_mode_controller("units",model_)));
+- //foreach team
++ //BOOST_FOREACHteam
+ int sides = resources::teams
+ ? static_cast<int>((*resources::teams).size())
+ : 0;
+@@ -481,7 +481,7 @@
+ void show_stuff_types_list()
+ {
+ model_.clear_stuff_types_list();
+- foreach (boost::shared_ptr<single_mode_controller> sm_controller, sm_controllers_ ) {
++ BOOST_FOREACH(boost::shared_ptr<single_mode_controller> sm_controller, sm_controllers_ ) {
+ model_.add_row_to_stuff_types_list(sm_controller->name(),sm_controller->name());
+ }
+ }
+Index: src/gui/dialogs/unit_attack.cpp
+===================================================================
+--- src/gui/dialogs/unit_attack.cpp (revision 54624)
++++ src/gui/dialogs/unit_attack.cpp (revision 54625)
+@@ -27,6 +27,8 @@
+ #include "gui/widgets/window.hpp"
+ #include "unit.hpp"
+
++#include <boost/foreach.hpp>
++
+ namespace gui2 {
+
+ /*WIKI
+@@ -106,7 +108,7 @@
+ const config empty;
+ attack_type no_weapon(empty);
+
+- foreach(const battle_context& weapon, weapons) {
++ BOOST_FOREACH(const battle_context& weapon, weapons) {
+ const battle_context_unit_stats& attacker =
+ weapon.get_attacker_stats();
+
+Index: src/gui/dialogs/data_manage.cpp
+===================================================================
+--- src/gui/dialogs/data_manage.cpp (revision 54624)
++++ src/gui/dialogs/data_manage.cpp (revision 54625)
+@@ -17,7 +17,6 @@
+
+ #include "gui/dialogs/data_manage.hpp"
+
+-#include "foreach.hpp"
+ #include "formula_string_utils.hpp"
+ #include "game_config.hpp"
+ #include "game_preferences.hpp"
+@@ -43,6 +42,7 @@
+
+ #include <cctype>
+ #include <boost/bind.hpp>
++#include <boost/foreach.hpp>
+
+ namespace gui2 {
+
+@@ -101,7 +101,7 @@
+ tlistbox& list = find_widget<tlistbox>(&window, "persist_list", false);
+ list.clear();
+
+- foreach(const savegame::save_info game, games) {
++ BOOST_FOREACH(const savegame::save_info game, games) {
+ std::map<std::string, string_map> data;
+ string_map item;
+
+@@ -142,7 +142,7 @@
+ find_widget<tlabel>(*it, "filename", false);
+
+ bool found = false;
+- foreach (const std::string& word, words){
++ BOOST_FOREACH(const std::string& word, words){
+ found = std::search(filename_label.label().str().begin()
+ , filename_label.label().str().end()
+ , word.begin(), word.end()
+Index: src/gui/dialogs/dialog.cpp
+===================================================================
+--- src/gui/dialogs/dialog.cpp (revision 54624)
++++ src/gui/dialogs/dialog.cpp (revision 54625)
+@@ -17,16 +17,17 @@
+
+ #include "gui/dialogs/dialog.hpp"
+
+-#include "foreach.hpp"
+ #include "gui/dialogs/field.hpp"
+ #include "gui/widgets/integer_selector.hpp"
+ #include "video.hpp"
+
++#include <boost/foreach.hpp>
++
+ namespace gui2 {
+
+ tdialog::~tdialog()
+ {
+- foreach(tfield_* field, fields_) {
++ BOOST_FOREACH(tfield_* field, fields_) {
+ delete field;
+ }
+ }
+@@ -193,7 +194,7 @@
+
+ void tdialog::init_fields(twindow& window)
+ {
+- foreach(tfield_* field, fields_) {
++ BOOST_FOREACH(tfield_* field, fields_) {
+ field->attach_to_window(window);
+ field->widget_init(window);
+ }
+@@ -207,7 +208,7 @@
+
+ void tdialog::finalize_fields(twindow& window, const bool save_fields)
+ {
+- foreach(tfield_* field, fields_) {
++ BOOST_FOREACH(tfield_* field, fields_) {
+ if(save_fields) {
+ field->widget_finalize(window);
+ }
+Index: src/gui/dialogs/debug_clock.cpp
+===================================================================
+--- src/gui/dialogs/debug_clock.cpp (revision 54624)
++++ src/gui/dialogs/debug_clock.cpp (revision 54625)
+@@ -24,6 +24,7 @@
+ #include "gui/widgets/progress_bar.hpp"
+
+ #include <boost/bind.hpp>
++#include <boost/foreach.hpp>
+
+ #include <ctime>
+
+@@ -153,7 +154,7 @@
+ }
+
+ if(clock_) {
+- foreach(tcanvas& canvas, clock_->canvas()) {
++ BOOST_FOREACH(tcanvas& canvas, clock_->canvas()) {
+ canvas.set_variable("hour", variant(hour_stamp));
+ canvas.set_variable("minute", variant(minute_stamp));
+ canvas.set_variable("second", variant(second_stamp));
+Index: src/gui/dialogs/wml_message.cpp
+===================================================================
+--- src/gui/dialogs/wml_message.cpp (revision 54624)
++++ src/gui/dialogs/wml_message.cpp (revision 54625)
+@@ -17,7 +17,6 @@
+
+ #include "gui/dialogs/wml_message.hpp"
+
+-#include "foreach.hpp"
+ #include "gui/auxiliary/old_markup.hpp"
+ #include "gui/widgets/button.hpp"
+ #include "gui/widgets/label.hpp"
+Index: src/gui/dialogs/simple_item_selector.cpp
+===================================================================
+--- src/gui/dialogs/simple_item_selector.cpp (revision 54624)
++++ src/gui/dialogs/simple_item_selector.cpp (revision 54625)
+@@ -17,7 +17,6 @@
+
+ #include "gui/dialogs/simple_item_selector.hpp"
+
+-#include "foreach.hpp"
+ #include "gui/widgets/button.hpp"
+ #include "gui/widgets/label.hpp"
+ #ifdef GUI2_EXPERIMENTAL_LISTBOX
+@@ -28,6 +27,8 @@
+ #include "gui/widgets/settings.hpp"
+ #include "gui/widgets/window.hpp"
+
++#include <boost/foreach.hpp>
++
+ namespace gui2 {
+
+ /*WIKI
+@@ -79,7 +80,7 @@
+ tlistbox& list = find_widget<tlistbox>(&window, "listbox", false);
+ window.keyboard_capture(&list);
+
+- foreach(const tsimple_item_selector::item_type& it, items_) {
++ BOOST_FOREACH(const tsimple_item_selector::item_type& it, items_) {
+ std::map<std::string, string_map> data;
+ string_map column;
+
+Index: src/gui/dialogs/game_load.cpp
+===================================================================
+--- src/gui/dialogs/game_load.cpp (revision 54624)
++++ src/gui/dialogs/game_load.cpp (revision 54625)
+@@ -17,7 +17,6 @@
+
+ #include "gui/dialogs/game_load.hpp"
+
+-#include "foreach.hpp"
+ #include "formula_string_utils.hpp"
+ #include "gettext.hpp"
+ #include "game_config.hpp"
+@@ -43,6 +42,7 @@
+
+ #include <cctype>
+ #include <boost/bind.hpp>
++#include <boost/foreach.hpp>
+
+ namespace gui2 {
+
+@@ -151,7 +151,7 @@
+ tlistbox& list = find_widget<tlistbox>(&window, "savegame_list", false);
+ list.clear();
+
+- foreach(const savegame::save_info game, games) {
++ BOOST_FOREACH(const savegame::save_info game, games) {
+ std::map<std::string, string_map> data;
+ string_map item;
+
+@@ -193,7 +193,7 @@
+ find_widget<tlabel>(*it, "filename", false);
+
+ bool found = false;
+- foreach (const std::string& word, words){
++ BOOST_FOREACH(const std::string& word, words){
+ found = std::search(filename_label.label().str().begin()
+ , filename_label.label().str().end()
+ , word.begin(), word.end()
+Index: src/gui/dialogs/lobby_main.cpp
+===================================================================
+--- src/gui/dialogs/lobby_main.cpp (revision 54624)
++++ src/gui/dialogs/lobby_main.cpp (revision 54625)
+@@ -38,7 +38,6 @@
+ #include "gui/widgets/toggle_panel.hpp"
+ #include "gui/widgets/tree_view_node.hpp"
+
+-#include "foreach.hpp"
+ #include "formula_string_utils.hpp"
+ #include "game_preferences.hpp"
+ #include "gettext.hpp"
+@@ -50,6 +49,7 @@
+ #include "sound.hpp"
+
+ #include <boost/bind.hpp>
++#include <boost/foreach.hpp>
+
+ static lg::log_domain log_network("network");
+ #define DBG_NW LOG_STREAM(debug, log_network)
+@@ -499,14 +499,14 @@
+ void modify_grid_with_data(tgrid* grid, const std::map<std::string, string_map>& map)
+ {
+ typedef std::map<std::string, string_map> strstrmap;
+- foreach (const strstrmap::value_type v, map) {
++ BOOST_FOREACH(const strstrmap::value_type v, map) {
+ const std::string& key = v.first;
+ const string_map& strmap = v.second;
+ twidget* w = grid->find(key, false);
+ if (w == NULL) continue;
+ tcontrol* c = dynamic_cast<tcontrol*>(w);
+ if (c == NULL) continue;
+- foreach (const string_map::value_type& vv, strmap) {
++ BOOST_FOREACH(const string_map::value_type& vv, strmap) {
+ if (vv.first == "label") {
+ c->set_label(vv.second);
+ } else if (vv.first == "tooltip") {
+@@ -816,7 +816,7 @@
+ player_list_.other_games.tree->clear();
+ player_list_.other_rooms.tree->clear();
+
+- foreach (user_info* userptr, lobby_info_.users_sorted())
++ BOOST_FOREACH(user_info* userptr, lobby_info_.users_sorted())
+ {
+ user_info& user = *userptr;
+ tsub_player_list* target_list(NULL);
+@@ -1093,7 +1093,7 @@
+
+ tlobby_chat_window* tlobby_main::search_create_window(const std::string& name, bool whisper, bool open_new)
+ {
+- foreach (tlobby_chat_window& t, open_windows_) {
++ BOOST_FOREACH(tlobby_chat_window& t, open_windows_) {
+ if (t.name == name && t.whisper == whisper) return &t;
+ }
+ if (open_new) {
+@@ -1477,7 +1477,7 @@
+ //TODO: this should really open a nice join room dialog instead
+ std::stringstream ss;
+ ss << "Rooms:";
+- foreach (const config& r, rooms.child_range("room")) {
++ BOOST_FOREACH(const config& r, rooms.child_range("room")) {
+ ss << " " << r["name"];
+ }
+ add_active_window_message("server", ss.str());
+@@ -1667,7 +1667,7 @@
+ const std::vector<user_info>& match_infos = lobby_info_.users();
+ std::vector<std::string> matches;
+
+- foreach(const user_info& ui, match_infos) {
++ BOOST_FOREACH(const user_info& ui, match_infos) {
+ if(ui.name != preferences::login()) {
+ matches.push_back(ui.name);
+ }
+@@ -1694,7 +1694,7 @@
+ {
+ lobby_info_.clear_game_filter();
+
+- foreach (const std::string& s, utils::split(filter_text_->get_value(), ' ')) {
++ BOOST_FOREACH(const std::string& s, utils::split(filter_text_->get_value(), ' ')) {
+ lobby_info_.add_game_filter(new game_filter_general_string_part(s));
+ }
+ //TODO: make changing friend/ignore lists trigger a refresh
+Index: src/gui/dialogs/campaign_difficulty.cpp
+===================================================================
+--- src/gui/dialogs/campaign_difficulty.cpp (revision 54624)
++++ src/gui/dialogs/campaign_difficulty.cpp (revision 54625)
+@@ -17,7 +17,6 @@
+
+ #include "gui/dialogs/campaign_difficulty.hpp"
+
+-#include "foreach.hpp"
+ #include "gui/auxiliary/old_markup.hpp"
+ #ifdef GUI2_EXPERIMENTAL_LISTBOX
+ #include "gui/widgets/list.hpp"
+@@ -27,6 +26,8 @@
+ #include "gui/widgets/settings.hpp"
+ #include "gui/widgets/window.hpp"
+
++#include <boost/foreach.hpp>
++
+ namespace gui2 {
+
+ /*WIKI
+@@ -65,7 +66,7 @@
+ tcampaign_difficulty::tcampaign_difficulty(const std::vector<std::string>& items)
+ : index_(-1), items_()
+ {
+- foreach(const std::string& it, items) {
++ BOOST_FOREACH(const std::string& it, items) {
+ items_.push_back(tlegacy_menu_item(it));
+ }
+ }
+@@ -77,7 +78,7 @@
+
+ std::map<std::string, string_map> data;
+
+- foreach(const tlegacy_menu_item& item, items_) {
++ BOOST_FOREACH(const tlegacy_menu_item& item, items_) {
+ if(item.is_default()) {
+ index_ = list.get_item_count();
+ }
+Index: src/gui/dialogs/unit_create.cpp
+===================================================================
+--- src/gui/dialogs/unit_create.cpp (revision 54624)
++++ src/gui/dialogs/unit_create.cpp (revision 54625)
+@@ -27,9 +27,10 @@
+ #include "gui/widgets/settings.hpp"
+ #include "gui/widgets/toggle_button.hpp"
+ #include "gui/widgets/window.hpp"
+-#include "foreach.hpp"
+ #include "unit_types.hpp"
+
++#include <boost/foreach.hpp>
++
+ namespace {
+ static std::string last_chosen_type_id = "";
+ static unit_race::GENDER last_gender = unit_race::MALE;
+@@ -109,7 +110,7 @@
+
+ std::vector< std::string > type_labels, race_labels;
+
+- foreach (const unit_type_data::unit_type_map::value_type &i, unit_types.types())
++ BOOST_FOREACH(const unit_type_data::unit_type_map::value_type &i, unit_types.types())
+ {
+ unit_types.find(i.first, unit_type::HELP_INDEX);
+
+Index: src/gui/dialogs/formula_debugger.cpp
+===================================================================
+--- src/gui/dialogs/formula_debugger.cpp (revision 54624)
++++ src/gui/dialogs/formula_debugger.cpp (revision 54625)
+@@ -21,10 +21,10 @@
+ #include "gui/widgets/button.hpp"
+ #include "gui/widgets/settings.hpp"
+ #include "gui/widgets/window.hpp"
+-#include "../../foreach.hpp"
+ #include "../../formula_debugger.hpp"
+
+ #include <boost/bind.hpp>
++#include <boost/foreach.hpp>
+
+ namespace gui2 {
+
+@@ -73,7 +73,7 @@
+ std::stringstream stack_text;
+ std::string indent = " ";
+ int c = 0;
+- foreach (const game_logic::debug_info &i, fdb_.get_call_stack()) {
++ BOOST_FOREACH(const game_logic::debug_info &i, fdb_.get_call_stack()) {
+ for(int d = 0; d < c; ++d) {
+ stack_text << indent;
+ }
+@@ -92,7 +92,7 @@
+ &window, "execution", false, true);
+
+ std::stringstream execution_text;
+- foreach (const game_logic::debug_info &i, fdb_.get_execution_trace()) {
++ BOOST_FOREACH(const game_logic::debug_info &i, fdb_.get_execution_trace()) {
+ for(int d = 0; d < i.level(); ++d) {
+ execution_text << indent;
+ }
+Index: src/gui/dialogs/title_screen.cpp
+===================================================================
+--- src/gui/dialogs/title_screen.cpp (revision 54624)
++++ src/gui/dialogs/title_screen.cpp (revision 54625)
+@@ -35,6 +35,7 @@
+ #include "preferences_display.hpp"
+
+ #include <boost/bind.hpp>
++#include <boost/foreach.hpp>
+
+ #include <algorithm>
+
+@@ -306,7 +307,7 @@
+ WRN_CF << "There are not tips of day available.\n";
+ }
+
+- foreach(const ttip& tip, tips) {
++ BOOST_FOREACH(const ttip& tip, tips) {
+
+ string_map widget;
+ std::map<std::string, string_map> page;
+Index: src/gui/dialogs/addon_list.cpp
+===================================================================
+--- src/gui/dialogs/addon_list.cpp (revision 54624)
++++ src/gui/dialogs/addon_list.cpp (revision 54625)
+@@ -17,7 +17,6 @@
+
+ #include "gui/dialogs/addon_list.hpp"
+
+-#include "foreach.hpp"
+ #ifdef GUI2_EXPERIMENTAL_LISTBOX
+ #include "gui/widgets/list.hpp"
+ #else
+@@ -26,6 +25,8 @@
+ #include "gui/widgets/settings.hpp"
+ #include "gui/widgets/window.hpp"
+
++#include <boost/foreach.hpp>
++
+ namespace gui2 {
+
+ /*WIKI
+@@ -70,7 +71,7 @@
+ * @todo do we really want to keep the length limit for the various
+ * items?
+ */
+- foreach(const config &c, cfg_.child_range("campaign")) {
++ BOOST_FOREACH(const config &c, cfg_.child_range("campaign")) {
+ std::map<std::string, string_map> data;
+ string_map item;
+
+Index: src/gui/dialogs/campaign_selection.cpp
+===================================================================
+--- src/gui/dialogs/campaign_selection.cpp (revision 54624)
++++ src/gui/dialogs/campaign_selection.cpp (revision 54625)
+@@ -17,7 +17,6 @@
+
+ #include "gui/dialogs/campaign_selection.hpp"
+
+-#include "foreach.hpp"
+ #include "gui/dialogs/helper.hpp"
+ #include "gui/widgets/image.hpp"
+ #ifdef GUI2_EXPERIMENTAL_LISTBOX
+@@ -34,6 +33,7 @@
+ #include "serialization/string_utils.hpp"
+
+ #include <boost/bind.hpp>
++#include <boost/foreach.hpp>
+
+ namespace gui2 {
+
+@@ -140,7 +140,7 @@
+ &window, "campaign_details", false);
+
+ unsigned id = 0;
+- foreach(const config &campaign, campaigns_) {
++ BOOST_FOREACH(const config &campaign, campaigns_) {
+
+ /*** Add tree item ***/
+ tree_group_field["label"] = campaign["icon"];
+@@ -206,7 +206,7 @@
+ tmulti_page& multi_page = find_widget<tmulti_page>(
+ &window, "campaign_details", false);
+
+- foreach (const config &c, campaigns_) {
++ BOOST_FOREACH(const config &c, campaigns_) {
+
+ /*** Add list item ***/
+ string_map list_item;
+Index: src/gui/dialogs/mp_connect.cpp
+===================================================================
+--- src/gui/dialogs/mp_connect.cpp (revision 54624)
++++ src/gui/dialogs/mp_connect.cpp (revision 54625)
+@@ -17,7 +17,6 @@
+
+ #include "gui/dialogs/mp_connect.hpp"
+
+-#include "foreach.hpp"
+ #include "game_preferences.hpp"
+ #include "gui/dialogs/field.hpp"
+ #include "gui/widgets/button.hpp"
+@@ -30,6 +29,7 @@
+ #include "video.hpp"
+
+ #include <boost/bind.hpp>
++#include <boost/foreach.hpp>
+
+ namespace gui2 {
+
+@@ -90,7 +90,7 @@
+ const std::vector<game_config::server_info>&
+ pref_servers = preferences::server_list();
+
+- foreach(const game_config::server_info& server, pref_servers) {
++ BOOST_FOREACH(const game_config::server_info& server, pref_servers) {
+
+ std::map<std::string, string_map> data;
+ string_map item;
+Index: src/gui/dialogs/language_selection.cpp
+===================================================================
+--- src/gui/dialogs/language_selection.cpp (revision 54624)
++++ src/gui/dialogs/language_selection.cpp (revision 54625)
+@@ -17,7 +17,6 @@
+
+ #include "gui/dialogs/language_selection.hpp"
+
+-#include "foreach.hpp"
+ #ifdef GUI2_EXPERIMENTAL_LISTBOX
+ #include "gui/widgets/list.hpp"
+ #else
+@@ -28,6 +27,8 @@
+ #include "language.hpp"
+ #include "preferences.hpp"
+
++#include <boost/foreach.hpp>
++
+ namespace gui2 {
+
+ /*WIKI
+@@ -65,7 +66,7 @@
+
+ const std::vector<language_def>& languages = get_languages();
+ const language_def& current_language = get_language();
+- foreach(const language_def& lang, languages) {
++ BOOST_FOREACH(const language_def& lang, languages) {
+ string_map item;
+ item.insert(std::make_pair("label", lang.language));
+
+Index: src/gui/dialogs/mp_create_game.cpp
+===================================================================
+--- src/gui/dialogs/mp_create_game.cpp (revision 54624)
++++ src/gui/dialogs/mp_create_game.cpp (revision 54625)
+@@ -17,7 +17,6 @@
+
+ #include "gui/dialogs/mp_create_game.hpp"
+
+-#include "foreach.hpp"
+ #include "game_preferences.hpp"
+ #include "gettext.hpp"
+ #include "gui/dialogs/field.hpp"
+@@ -35,6 +34,7 @@
+ #ifdef GUI2_EXPERIMENTAL_LISTBOX
+ #include <boost/bind.hpp>
+ #endif
++#include <boost/foreach.hpp>
+ namespace gui2 {
+
+ REGISTER_DIALOG(mp_create_game)
+@@ -101,7 +101,7 @@
+ std::vector<std::string> maps;
+ get_files_in_dir(get_user_data_dir() + "/editor/maps", &maps, NULL, FILE_NAME_ONLY);
+
+- foreach(const std::string& map, maps) {
++ BOOST_FOREACH(const std::string& map, maps) {
+ std::map<std::string, t_string> item;
+ item.insert(std::make_pair("label", map));
+ list->add_row(item);
+@@ -110,7 +110,7 @@
+
+ // Standard maps
+ int i = 0;
+- foreach (const config &map, cfg_.child_range("multiplayer"))
++ BOOST_FOREACH(const config &map, cfg_.child_range("multiplayer"))
+ {
+ if (map["allow_new_game"].to_bool(true)) {
+ string_map item;
+Index: src/gui/dialogs/network_transmission.cpp
+===================================================================
+--- src/gui/dialogs/network_transmission.cpp (revision 54624)
++++ src/gui/dialogs/network_transmission.cpp (revision 54625)
+@@ -17,7 +17,6 @@
+
+ #include "gui/dialogs/network_transmission.hpp"
+
+-#include "foreach.hpp"
+ #include "formula_string_utils.hpp"
+ #include "gettext.hpp"
+ #include "gui/widgets/button.hpp"
+Index: src/gui/dialogs/addon/description.cpp
+===================================================================
+--- src/gui/dialogs/addon/description.cpp (revision 54624)
++++ src/gui/dialogs/addon/description.cpp (revision 54625)
+@@ -17,14 +17,15 @@
+
+ #include "gui/dialogs/addon/description.hpp"
+
+-#include "foreach.hpp"
+ #include "gui/widgets/settings.hpp"
+ #include "language.hpp"
+
++#include <boost/foreach.hpp>
++
+ namespace {
+ std::string langcode_to_string(const std::string& lcode)
+ {
+- foreach(const language_def& ld, get_languages()) {
++ BOOST_FOREACH(const language_def& ld, get_languages()) {
+ if(ld.localename == lcode || ld.localename.substr(0, 2) == lcode) {
+ return ld.language;
+ }
+@@ -90,7 +91,7 @@
+
+ std::string languages;
+
+- foreach(const std::string& lc, addon.translations) {
++ BOOST_FOREACH(const std::string& lc, addon.translations) {
+ const std::string& langlabel = langcode_to_string(lc);
+ if(!langlabel.empty()) {
+ if(!languages.empty()) {
+Index: src/gui/dialogs/addon/uninstall_list.cpp
+===================================================================
+--- src/gui/dialogs/addon/uninstall_list.cpp (revision 54624)
++++ src/gui/dialogs/addon/uninstall_list.cpp (revision 54625)
+@@ -15,7 +15,6 @@
+
+ #include "gui/dialogs/addon/uninstall_list.hpp"
+
+-#include "foreach.hpp"
+ #include "gui/widgets/grid.hpp"
+ #ifdef GUI2_EXPERIMENTAL_LISTBOX
+ #include "gui/widgets/list.hpp"
+@@ -26,6 +25,8 @@
+ #include "gui/widgets/toggle_button.hpp"
+ #include "gui/widgets/window.hpp"
+
++#include <boost/foreach.hpp>
++
+ #include <algorithm>
+
+ namespace {
+@@ -50,7 +51,7 @@
+ this->names_.clear();
+ this->selections_.clear();
+
+- foreach(const std::string& id, this->ids_) {
++ BOOST_FOREACH(const std::string& id, this->ids_) {
+ this->names_.push_back(make_addon_name(id));
+ this->selections_[id] = false;
+
+@@ -87,7 +88,7 @@
+ std::vector<std::string> retv;
+
+ typedef std::map<std::string, bool> selections_map_type;
+- foreach(const selections_map_type::value_type& entry, this->selections_) {
++ BOOST_FOREACH(const selections_map_type::value_type& entry, this->selections_) {
+ if(entry.second) {
+ retv.push_back(entry.first);
+ }
+Index: src/gui/dialogs/chat_log.cpp
+===================================================================
+--- src/gui/dialogs/chat_log.cpp (revision 54624)
++++ src/gui/dialogs/chat_log.cpp (revision 54625)
+@@ -28,7 +28,6 @@
+ #include "gui/widgets/window.hpp"
+ #include "gui/widgets/slider.hpp"
+
+-#include "../../foreach.hpp"
+ #include "../../gamestatus.hpp"
+ #include "../../log.hpp"
+ #include "../../resources.hpp"
+@@ -38,6 +37,7 @@
+ #include <vector>
+ #include <boost/bind.hpp>
+ #include <boost/shared_ptr.hpp>
++#include <boost/foreach.hpp>
+
+ static lg::log_domain log_chat_log("chat_log");
+ #define DBG_CHAT_LOG LOG_STREAM(debug, log_chat_log)
+@@ -113,7 +113,7 @@
+ std::stringstream str;
+ LOG_CHAT_LOG << "entering tchat_log::model::add_row_to_chat_message_list\n";
+ if (first<last) {
+- foreach (const chat_msg &t, make_pair(chat_log_history.begin()+first,chat_log_history.begin()+last))
++ BOOST_FOREACH(const chat_msg &t, make_pair(chat_log_history.begin()+first,chat_log_history.begin()+last))
+ {
+ std::string prefix("/me");
+ bool me = false;
+Index: src/gui/dialogs/mp_change_control.cpp
+===================================================================
+--- src/gui/dialogs/mp_change_control.cpp (revision 54624)
++++ src/gui/dialogs/mp_change_control.cpp (revision 54625)
+@@ -36,7 +36,7 @@
+ #include <vector>
+ #include <boost/bind.hpp>
+ #include <boost/shared_ptr.hpp>
+-#include <gui/widgets/button.hpp>
++#include <boost/foreach.hpp>
+
+ static lg::log_domain log_gui("gui/dialogs/mp_change_control");
+ #define ERR_GUI LOG_STREAM(err, log_gui)
+@@ -184,7 +184,7 @@
+
+ int i = 0; // because we need to know which row contains the controlling player
+
+- foreach (const std::string &nick, nicks)
++ BOOST_FOREACH(const std::string &nick, nicks)
+ {
+ if (side_number_ <= static_cast<int>(resources::teams->size()) &&
+ resources::teams->at(side_number_-1).current_player() == nick)
+Index: src/gui/dialogs/message.cpp
+===================================================================
+--- src/gui/dialogs/message.cpp (revision 54624)
++++ src/gui/dialogs/message.cpp (revision 54625)
+@@ -17,7 +17,6 @@
+
+ #include "gui/dialogs/message.hpp"
+
+-#include "foreach.hpp"
+ #include "gettext.hpp"
+ #include "gui/widgets/button.hpp"
+ #include "gui/widgets/image.hpp"
+@@ -26,6 +25,8 @@
+ #include "gui/widgets/window.hpp"
+ #include "log.hpp"
+
++#include <boost/foreach.hpp>
++
+ namespace gui2 {
+
+ REGISTER_DIALOG(message)
+@@ -97,7 +98,7 @@
+
+ void tmessage::post_show(twindow& /*window*/)
+ {
+- foreach(tbutton_status& button_status, buttons_) {
++ BOOST_FOREACH(tbutton_status& button_status, buttons_) {
+ button_status.button = NULL;
+ }
+ }
+Index: src/gui/dialogs/lobby/lobby_data.cpp
+===================================================================
+--- src/gui/dialogs/lobby/lobby_data.cpp (revision 54624)
++++ src/gui/dialogs/lobby/lobby_data.cpp (revision 54625)
+@@ -18,7 +18,6 @@
+ #include "config.hpp"
+ #include "game_preferences.hpp"
+ #include "filesystem.hpp"
+-#include "foreach.hpp"
+ #include "formula_string_utils.hpp"
+ #include "gettext.hpp"
+ #include "network.hpp"
+@@ -27,6 +26,8 @@
+ #include "map_exception.hpp"
+ #include "wml_exception.hpp"
+
++#include <boost/foreach.hpp>
++
+ #include <iterator>
+
+ static lg::log_domain log_config("config");
+@@ -89,7 +90,7 @@
+ void room_info::process_room_members(const config& data)
+ {
+ members_.clear();
+- foreach (const config& m, data.child_range("member")) {
++ BOOST_FOREACH(const config& m, data.child_range("member")) {
+ members_.insert(m["name"]);
+ }
+ }
+@@ -254,7 +255,7 @@
+ if (const config& hashes = game_config.child("multiplayer_hashes")) {
+ std::string hash = game["hash"];
+ bool hash_found = false;
+- foreach (const config::attribute &i, hashes.attribute_range()) {
++ BOOST_FOREACH(const config::attribute &i, hashes.attribute_range()) {
+ if (i.first == game["mp_scenario"] && i.second == hash) {
+ hash_found = true;
+ break;
+@@ -357,7 +358,7 @@
+
+ game_filter_stack::~game_filter_stack()
+ {
+- foreach (game_filter_base* f, filters_) {
++ BOOST_FOREACH(game_filter_base* f, filters_) {
+ delete f;
+ }
+ }
+@@ -369,7 +370,7 @@
+
+ void game_filter_stack::clear()
+ {
+- foreach (game_filter_base* f, filters_) {
++ BOOST_FOREACH(game_filter_base* f, filters_) {
+ delete f;
+ }
+ filters_.clear();
+@@ -377,7 +378,7 @@
+
+ bool game_filter_and_stack::match(const game_info &game) const
+ {
+- foreach (game_filter_base* f, filters_) {
++ BOOST_FOREACH(game_filter_base* f, filters_) {
+ if (!f->match(game)) return false;
+ }
+ return true;
+Index: src/gui/dialogs/lobby/lobby_info.cpp
+===================================================================
+--- src/gui/dialogs/lobby/lobby_info.cpp (revision 54624)
++++ src/gui/dialogs/lobby/lobby_info.cpp (revision 54625)
+@@ -18,7 +18,6 @@
+ #include "config.hpp"
+ #include "game_preferences.hpp"
+ #include "filesystem.hpp"
+-#include "foreach.hpp"
+ #include "formula_string_utils.hpp"
+ #include "gettext.hpp"
+ #include "network.hpp"
+@@ -27,6 +26,8 @@
+ #include "map_exception.hpp"
+ #include "wml_exception.hpp"
+
++#include <boost/foreach.hpp>
++
+ #include <iterator>
+
+ static lg::log_domain log_config("config");
+@@ -66,7 +67,7 @@
+
+ void lobby_info::delete_games()
+ {
+- foreach (const game_info_map::value_type& v, games_by_id_) {
++ BOOST_FOREACH(const game_info_map::value_type& v, games_by_id_) {
+ delete v.second;
+ }
+ }
+@@ -76,7 +77,7 @@
+ std::string dump_games_map(const lobby_info::game_info_map& games)
+ {
+ std::stringstream ss;
+- foreach (const lobby_info::game_info_map::value_type& v, games) {
++ BOOST_FOREACH(const lobby_info::game_info_map::value_type& v, games) {
+ const game_info& game = *v.second;
+ ss << "G" << game.id << "(" << game.name << ") " << game.display_status_string() << " ";
+ }
+@@ -87,7 +88,7 @@
+ std::string dump_games_config(const config& gamelist)
+ {
+ std::stringstream ss;
+- foreach (const config& c, gamelist.child_range("game")) {
++ BOOST_FOREACH(const config& c, gamelist.child_range("game")) {
+ ss << "g" << c["id"] << "(" << c["name"] << ") " << c[config::diff_track_attribute] << " ";
+ }
+ ss << "\n";
+@@ -103,7 +104,7 @@
+ gamelist_initialized_ = true;
+ delete_games();
+ games_by_id_.clear();
+- foreach (const config& c, gamelist_.child("gamelist").child_range("game")) {
++ BOOST_FOREACH(const config& c, gamelist_.child("gamelist").child_range("game")) {
+ game_info* game = new game_info(c, game_config_);
+ games_by_id_[game->id] = game;
+ }
+@@ -180,10 +181,10 @@
+ {
+ SCOPE_LB;
+ users_.clear();
+- foreach (const config& c, gamelist_.child_range("user")) {
++ BOOST_FOREACH(const config& c, gamelist_.child_range("user")) {
+ users_.push_back(user_info(c));
+ }
+- foreach (user_info& ui, users_) {
++ BOOST_FOREACH(user_info& ui, users_) {
+ if (ui.game_id != 0) {
+ game_info* g = get_game_by_id(ui.game_id);
+ if (g == NULL) {
+@@ -235,7 +236,7 @@
+
+ room_info* lobby_info::get_room(const std::string &name)
+ {
+- foreach (room_info& r, rooms_) {
++ BOOST_FOREACH(room_info& r, rooms_) {
+ if (r.name() == name) return &r;
+ }
+ return NULL;
+@@ -243,7 +244,7 @@
+
+ const room_info* lobby_info::get_room(const std::string &name) const
+ {
+- foreach (const room_info& r, rooms_) {
++ BOOST_FOREACH(const room_info& r, rooms_) {
+ if (r.name() == name) return &r;
+ }
+ return NULL;
+@@ -301,7 +302,7 @@
+ games_filtered_.clear();
+ games_visibility_.clear();
+ games_.clear();
+- foreach (const game_info_map::value_type& v, games_by_id_) {
++ BOOST_FOREACH(const game_info_map::value_type& v, games_by_id_) {
+ games_.push_back(v.second);
+ }
+ }
+@@ -310,7 +311,7 @@
+ {
+ games_filtered_.clear();
+ games_visibility_.clear();
+- foreach (game_info* g, games_) {
++ BOOST_FOREACH(game_info* g, games_) {
+ game_info& gi = *g;
+ bool show = game_filter_.match(gi);
+ if (game_filter_invert_) {
+@@ -325,7 +326,7 @@
+
+ void lobby_info::update_user_statuses(int game_id, const room_info *room)
+ {
+- foreach (user_info& user, users_) {
++ BOOST_FOREACH(user_info& user, users_) {
+ user.update_state(game_id, room);
+ }
+ }
+@@ -365,7 +366,7 @@
+ void lobby_info::sort_users(bool by_name, bool by_relation)
+ {
+ users_sorted_.clear();
+- foreach (user_info& u, users_) {
++ BOOST_FOREACH(user_info& u, users_) {
+ users_sorted_.push_back(&u);
+ }
+ if (by_name) {
+Index: src/gui/dialogs/game_save.cpp
+===================================================================
+--- src/gui/dialogs/game_save.cpp (revision 54624)
++++ src/gui/dialogs/game_save.cpp (revision 54625)
+@@ -17,7 +17,6 @@
+
+ #include "gui/dialogs/game_save.hpp"
+
+-#include "foreach.hpp"
+ #include "gettext.hpp"
+ #include "gui/dialogs/field.hpp"
+ #include "gui/widgets/button.hpp"
+Index: src/gui/widgets/settings.cpp
+===================================================================
+--- src/gui/widgets/settings.cpp (revision 54624)
++++ src/gui/widgets/settings.cpp (revision 54625)
+@@ -25,7 +25,6 @@
+ #include "asserts.hpp"
+ #include "config_cache.hpp"
+ #include "filesystem.hpp"
+-#include "foreach.hpp"
+ #include "gettext.hpp"
+ #include "gui/auxiliary/log.hpp"
+ #include "gui/auxiliary/tips.hpp"
+@@ -35,6 +34,8 @@
+ #include "serialization/schema_validator.hpp"
+ #include "formula_string_utils.hpp"
+
++#include <boost/foreach.hpp>
++
+ namespace gui2 {
+
+ bool new_widgets = false;
+@@ -283,12 +284,12 @@
+ , const config&
+ , const char *key)> > thack;
+
+- foreach(thack& widget_type, registred_widget_type()) {
++ BOOST_FOREACH(thack& widget_type, registred_widget_type()) {
+ widget_type.second(*this, widget_type.first, cfg, NULL);
+ }
+
+ /***** Window types *****/
+- foreach (const config &w, cfg.child_range("window")) {
++ BOOST_FOREACH(const config &w, cfg.child_range("window")) {
+ std::pair<std::string, twindow_builder> child;
+ child.first = child.second.read(w);
+ window_types.insert(child);
+@@ -423,7 +424,7 @@
+ const std::string& definition_type
+ , const std::vector<tcontrol_definition_ptr>& definitions)
+ {
+- foreach(const tcontrol_definition_ptr& def, definitions) {
++ BOOST_FOREACH(const tcontrol_definition_ptr& def, definitions) {
+
+ // We assume all definitions are unique if not we would leak memory.
+ assert(control_definition[definition_type].find(def->id)
+@@ -497,7 +498,7 @@
+ ERR_GUI_P << e.message;
+ }
+ // Parse guis
+- foreach (const config &g, cfg.child_range("gui")) {
++ BOOST_FOREACH(const config &g, cfg.child_range("gui")) {
+ std::pair<std::string, tgui_definition> child;
+ child.first = child.second.read(g);
+ guis.insert(child);
+Index: src/gui/widgets/window.cpp
+===================================================================
+--- src/gui/widgets/window.cpp (revision 54624)
++++ src/gui/widgets/window.cpp (revision 54625)
+@@ -23,7 +23,6 @@
+ #include "gui/widgets/window_private.hpp"
+
+ #include "font.hpp"
+-#include "foreach.hpp"
+ #include "game_display.hpp"
+ #include "gettext.hpp"
+ #include "log.hpp"
+@@ -44,6 +43,7 @@
+ #include "video.hpp"
+
+ #include <boost/bind.hpp>
++#include <boost/foreach.hpp>
+
+ #define LOG_SCOPE_HEADER get_control_type() + " [" + id() + "] " + __func__
+ #define LOG_HEADER LOG_SCOPE_HEADER + ':'
+@@ -716,7 +716,7 @@
+ return;
+ }
+
+- foreach(std::vector<twidget*>& item, dirty_list_) {
++ BOOST_FOREACH(std::vector<twidget*>& item, dirty_list_) {
+
+ assert(!item.empty());
+
+@@ -1047,12 +1047,12 @@
+ {
+ // evaluate the group sizes
+ typedef std::pair<const std::string, tlinked_size> hack;
+- foreach(hack& linked_size, linked_size_) {
++ BOOST_FOREACH(hack& linked_size, linked_size_) {
+
+ tpoint max_size(0, 0);
+
+ // Determine the maximum size.
+- foreach(twidget* widget, linked_size.second.widgets) {
++ BOOST_FOREACH(twidget* widget, linked_size.second.widgets) {
+
+ const tpoint size = widget->get_best_size();
+
+@@ -1065,7 +1065,7 @@
+ }
+
+ // Set the maximum size.
+- foreach(twidget* widget, linked_size.second.widgets) {
++ BOOST_FOREACH(twidget* widget, linked_size.second.widgets) {
+
+ tpoint size = widget->get_best_size();
+
+Index: src/gui/widgets/stacked_widget.cpp
+===================================================================
+--- src/gui/widgets/stacked_widget.cpp (revision 54624)
++++ src/gui/widgets/stacked_widget.cpp (revision 54625)
+@@ -17,13 +17,13 @@
+
+ #include "gui/widgets/stacked_widget.hpp"
+
+-#include "foreach.hpp"
+ #include "gui/auxiliary/widget_definition/stacked_widget.hpp"
+ #include "gui/auxiliary/window_builder/stacked_widget.hpp"
+ #include "gui/widgets/settings.hpp"
+ #include "gui/widgets/generator.hpp"
+
+ #include <boost/bind.hpp>
++#include <boost/foreach.hpp>
+
+ namespace gui2 {
+
+@@ -83,7 +83,7 @@
+ {
+ assert(generator_);
+ string_map empty_data;
+- foreach(const tbuilder_grid_const_ptr& builder, widget_builder) {
++ BOOST_FOREACH(const tbuilder_grid_const_ptr& builder, widget_builder) {
+ generator_->create_item(-1, builder, empty_data, NULL);
+ }
+ swap_grid(NULL, &grid(), generator_, "_content_grid");
+Index: src/gui/widgets/text_box.cpp
+===================================================================
+--- src/gui/widgets/text_box.cpp (revision 54624)
++++ src/gui/widgets/text_box.cpp (revision 54625)
+@@ -18,7 +18,6 @@
+ #include "gui/widgets/text_box.hpp"
+
+ #include "font.hpp"
+-#include "foreach.hpp"
+ #include "gui/auxiliary/log.hpp"
+ #include "gui/auxiliary/widget_definition/text_box.hpp"
+ #include "gui/auxiliary/window_builder/text_box.hpp"
+@@ -27,6 +26,7 @@
+ #include "game_preferences.hpp"
+
+ #include <boost/bind.hpp>
++#include <boost/foreach.hpp>
+
+ #define LOG_SCOPE_HEADER get_control_type() + " [" + id() + "] " + __func__
+ #define LOG_HEADER LOG_SCOPE_HEADER + ':'
+@@ -162,7 +162,7 @@
+ const int max_width = get_text_maximum_width();
+ const int max_height = get_text_maximum_height();
+
+- foreach(tcanvas& tmp, canvas()) {
++ BOOST_FOREACH(tcanvas& tmp, canvas()) {
+
+ tmp.set_variable("text", variant(get_value()));
+ tmp.set_variable("text_x_offset", variant(text_x_offset_));
+@@ -260,7 +260,7 @@
+
+ // Since this variable doesn't change set it here instead of in
+ // update_canvas().
+- foreach(tcanvas& tmp, canvas()) {
++ BOOST_FOREACH(tcanvas& tmp, canvas()) {
+ tmp.set_variable("text_font_height", variant(text_height_));
+ }
+
+Index: src/gui/widgets/toggle_panel.cpp
+===================================================================
+--- src/gui/widgets/toggle_panel.cpp (revision 54624)
++++ src/gui/widgets/toggle_panel.cpp (revision 54625)
+@@ -17,7 +17,6 @@
+
+ #include "gui/widgets/toggle_panel.hpp"
+
+-#include "foreach.hpp"
+ #include "gui/auxiliary/log.hpp"
+ #include "gui/auxiliary/widget_definition/toggle_panel.hpp"
+ #include "gui/auxiliary/window_builder/toggle_panel.hpp"
+@@ -26,6 +25,7 @@
+ #include "sound.hpp"
+
+ #include <boost/bind.hpp>
++#include <boost/foreach.hpp>
+
+ #define LOG_SCOPE_HEADER get_control_type() + " [" + id() + "] " + __func__
+ #define LOG_HEADER LOG_SCOPE_HEADER + ':'
+@@ -72,7 +72,7 @@
+ {
+ // typedef boost problem work around.
+ typedef std::pair<std::string, string_map> hack ;
+- foreach(const hack& item, data) {
++ BOOST_FOREACH(const hack& item, data) {
+ tcontrol* control = dynamic_cast<tcontrol*>(find(item.first, false));
+ if(control) {
+ control->set_members(item.second);
+Index: src/gui/widgets/tree_view_node.cpp
+===================================================================
+--- src/gui/widgets/tree_view_node.cpp (revision 54624)
++++ src/gui/widgets/tree_view_node.cpp (revision 54625)
+@@ -24,6 +24,7 @@
+ #include "gui/widgets/tree_view.hpp"
+
+ #include <boost/bind.hpp>
++#include <boost/foreach.hpp>
+
+ #define LOG_SCOPE_HEADER \
+ get_control_type() + " [" + tree_view().id() + "] " + __func__
+@@ -48,7 +49,7 @@
+ grid_.set_parent(this);
+ set_parent(&parent_tree_view);
+ if(id != "root") {
+- foreach(const tnode_definition& node_definition, node_definitions_) {
++ BOOST_FOREACH(const tnode_definition& node_definition, node_definitions_) {
+ if(node_definition.id == id) {
+ node_definition.builder->build(&grid_);
+ init_grid(&grid_, data);
+@@ -217,7 +218,7 @@
+ int height_reduction = 0;
+
+ if(!is_folded()) {
+- foreach(const ttree_view_node& node, children_) {
++ BOOST_FOREACH(const ttree_view_node& node, children_) {
+ height_reduction += node.get_current_size().y;
+ }
+ }
+@@ -300,7 +301,7 @@
+ return;
+ }
+
+- foreach(ttree_view_node& node, children_) {
++ BOOST_FOREACH(ttree_view_node& node, children_) {
+ std::vector<twidget*> child_call_stack = call_stack;
+ node.impl_populate_dirty_list(caller, child_call_stack);
+ }
+@@ -455,7 +456,7 @@
+ }
+
+ DBG_GUI_L << LOG_HEADER << " set children.\n";
+- foreach(ttree_view_node& node, children_) {
++ BOOST_FOREACH(ttree_view_node& node, children_) {
+ origin.y += node.place(indention_step_size, origin, width);
+ }
+
+@@ -477,7 +478,7 @@
+ return;
+ }
+
+- foreach(ttree_view_node& node, children_) {
++ BOOST_FOREACH(ttree_view_node& node, children_) {
+ node.set_visible_area(area);
+ }
+ }
+@@ -490,7 +491,7 @@
+ return;
+ }
+
+- foreach(ttree_view_node& node, children_) {
++ BOOST_FOREACH(ttree_view_node& node, children_) {
+ node.impl_draw_children(frame_buffer);
+ }
+ }
+Index: src/gui/widgets/settings.hpp
+===================================================================
+--- src/gui/widgets/settings.hpp (revision 54624)
++++ src/gui/widgets/settings.hpp (revision 54625)
+@@ -24,6 +24,7 @@
+ #include "gui/auxiliary/widget_definition/window.hpp"
+
+ #include <boost/function.hpp>
++#include <boost/foreach.hpp>
+
+ #include <string>
+ #include <vector>
+@@ -124,7 +125,7 @@
+ {
+ std::vector<tcontrol_definition_ptr> definitions;
+
+- foreach(const config& definition
++ BOOST_FOREACH(const config& definition
+ , cfg.child_range(key ? key : definition_type + "_definition")) {
+
+ definitions.push_back(new T(definition));
+Index: src/gui/widgets/slider.cpp
+===================================================================
+--- src/gui/widgets/slider.cpp (revision 54624)
++++ src/gui/widgets/slider.cpp (revision 54625)
+@@ -17,7 +17,6 @@
+
+ #include "gui/widgets/slider.hpp"
+
+-#include "foreach.hpp"
+ #include "formatter.hpp"
+ #include "gui/auxiliary/log.hpp"
+ #include "gui/auxiliary/widget_definition/slider.hpp"
+@@ -27,6 +26,7 @@
+ #include "sound.hpp"
+
+ #include <boost/bind.hpp>
++#include <boost/foreach.hpp>
+
+ #define LOG_SCOPE_HEADER get_control_type() + " [" + id() + "] " + __func__
+ #define LOG_HEADER LOG_SCOPE_HEADER + ':'
+@@ -232,7 +232,7 @@
+ // Inherited.
+ tscrollbar_::update_canvas();
+
+- foreach(tcanvas& tmp, canvas()) {
++ BOOST_FOREACH(tcanvas& tmp, canvas()) {
+ tmp.set_variable("text", variant(get_value_label()));
+ }
+ }
+Index: src/gui/widgets/scrollbar.cpp
+===================================================================
+--- src/gui/widgets/scrollbar.cpp (revision 54624)
++++ src/gui/widgets/scrollbar.cpp (revision 54625)
+@@ -17,11 +17,11 @@
+
+ #include "gui/widgets/scrollbar.hpp"
+
+-#include "foreach.hpp"
+ #include "gui/auxiliary/log.hpp"
+ #include "gui/widgets/window.hpp" // Needed for invalidate_layout()
+
+ #include <boost/bind.hpp>
++#include <boost/foreach.hpp>
+
+ #define LOG_SCOPE_HEADER get_control_type() + " [" + id() + "] " + __func__
+ #define LOG_HEADER LOG_SCOPE_HEADER + ':'
+@@ -132,7 +132,7 @@
+
+ void tscrollbar_::update_canvas() {
+
+- foreach(tcanvas& tmp, canvas()) {
++ BOOST_FOREACH(tcanvas& tmp, canvas()) {
+ tmp.set_variable("positioner_offset", variant(positioner_offset_));
+ tmp.set_variable("positioner_length", variant(positioner_length_));
+ }
+@@ -287,7 +287,7 @@
+ void tscrollbar_::load_config_extra()
+ {
+ // These values won't change so set them here.
+- foreach(tcanvas& tmp, canvas()) {
++ BOOST_FOREACH(tcanvas& tmp, canvas()) {
+ tmp.set_variable("offset_before", variant(offset_before()));
+ tmp.set_variable("offset_after", variant(offset_after()));
+ }
+Index: src/gui/widgets/grid_private.hpp
+===================================================================
+--- src/gui/widgets/grid_private.hpp (revision 54624)
++++ src/gui/widgets/grid_private.hpp (revision 54625)
+@@ -33,7 +33,7 @@
+
+ #include "gui/widgets/grid.hpp"
+
+-#include "foreach.hpp"
++#include <boost/foreach.hpp>
+
+ namespace gui2 {
+
+@@ -56,7 +56,7 @@
+ const tpoint& coordinate, const bool must_be_active)
+ {
+ typedef typename tconst_duplicator<W, tgrid::tchild>::type hack;
+- foreach(hack& child, grid.children_) {
++ BOOST_FOREACH(hack& child, grid.children_) {
+
+ W* widget = child.widget();
+ if(!widget) {
+@@ -91,7 +91,7 @@
+ }
+
+ typedef typename tconst_duplicator<W, tgrid::tchild>::type hack;
+- foreach(hack& child, grid.children_) {
++ BOOST_FOREACH(hack& child, grid.children_) {
+
+ widget = child.widget();
+ if(!widget) {
+Index: src/gui/widgets/grid.cpp
+===================================================================
+--- src/gui/widgets/grid.cpp (revision 54624)
++++ src/gui/widgets/grid.cpp (revision 54625)
+@@ -21,6 +21,8 @@
+ #include "gui/auxiliary/log.hpp"
+ #include "gui/auxiliary/layout_exception.hpp"
+
++#include <boost/foreach.hpp>
++
+ #include <numeric>
+
+ #define LOG_SCOPE_HEADER "tgrid [" + id() + "] " + __func__
+@@ -48,7 +50,7 @@
+ {
+ // Delete the children in this destructor since resizing a vector copies the
+ // children and thus frees the child prematurely.
+- foreach(tchild& child, children_) {
++ BOOST_FOREACH(tchild& child, children_) {
+ delete child.widget();
+ }
+ }
+@@ -99,7 +101,7 @@
+ {
+ assert(widget);
+
+- foreach(tchild& child, children_) {
++ BOOST_FOREACH(tchild& child, children_) {
+ if(child.id() != id) {
+
+ if(recurse) {
+@@ -145,7 +147,7 @@
+
+ void tgrid::remove_child(const std::string& id, const bool find_all)
+ {
+- foreach(tchild& child, children_) {
++ BOOST_FOREACH(tchild& child, children_) {
+
+ if(child.id() == id) {
+ delete child.widget();
+@@ -160,7 +162,7 @@
+
+ void tgrid::set_active(const bool active)
+ {
+- foreach(tchild& child, children_) {
++ BOOST_FOREACH(tchild& child, children_) {
+
+ twidget* widget = child.widget();
+ if(!widget) {
+@@ -186,7 +188,7 @@
+ twidget::layout_init(full_initialization);
+
+ // Clear child caches.
+- foreach(tchild& child, children_) {
++ BOOST_FOREACH(tchild& child, children_) {
+
+ child.layout_init(full_initialization);
+
+@@ -426,7 +428,7 @@
+
+ bool tgrid::can_wrap() const
+ {
+- foreach(const tchild& child, children_) {
++ BOOST_FOREACH(const tchild& child, children_) {
+ if(child.can_wrap()) {
+ return true;
+ }
+@@ -485,7 +487,7 @@
+
+ if(w_size == 0) {
+ // If all sizes are 0 reset them to 1
+- foreach(unsigned& val, col_grow_factor_) {
++ BOOST_FOREACH(unsigned& val, col_grow_factor_) {
+ val = 1;
+ }
+ w_size = cols_;
+@@ -516,7 +518,7 @@
+
+ if(h_size == 0) {
+ // If all sizes are 0 reset them to 1
+- foreach(unsigned& val, row_grow_factor_) {
++ BOOST_FOREACH(unsigned& val, row_grow_factor_) {
+ val = 1;
+ }
+ h_size = rows_;
+@@ -551,7 +553,7 @@
+ // Inherited.
+ twidget::set_origin(origin);
+
+- foreach(tchild& child, children_) {
++ BOOST_FOREACH(tchild& child, children_) {
+
+ twidget* widget = child.widget();
+ assert(widget);
+@@ -567,7 +569,7 @@
+ // Inherited.
+ twidget::set_visible_area(area);
+
+- foreach(tchild& child, children_) {
++ BOOST_FOREACH(tchild& child, children_) {
+
+ twidget* widget = child.widget();
+ assert(widget);
+@@ -578,7 +580,7 @@
+
+ void tgrid::layout_children()
+ {
+- foreach(tchild& child, children_) {
++ BOOST_FOREACH(tchild& child, children_) {
+ assert(child.widget());
+ child.widget()->layout_children();
+ }
+@@ -589,7 +591,7 @@
+ {
+ assert(!call_stack.empty() && call_stack.back() == this);
+
+- foreach(tchild& child, children_) {
++ BOOST_FOREACH(tchild& child, children_) {
+
+ assert(child.widget());
+
+@@ -627,7 +629,7 @@
+
+ bool tgrid::has_widget(const twidget* widget) const
+ {
+- foreach(const tchild& child, children_) {
++ BOOST_FOREACH(const tchild& child, children_) {
+ if(child.widget() == widget) {
+ return true;
+ }
+@@ -641,7 +643,7 @@
+ return false;
+ }
+
+- foreach(const tchild& child, children_) {
++ BOOST_FOREACH(const tchild& child, children_) {
+ const twidget* widget = child.widget();
+ assert(widget);
+
+@@ -936,7 +938,7 @@
+ assert(get_visible() == twidget::VISIBLE);
+ set_dirty(false);
+
+- foreach(tchild& child, children_) {
++ BOOST_FOREACH(tchild& child, children_) {
+
+ twidget* widget = child.widget();
+ assert(widget);
+Index: src/gui/widgets/toggle_button.cpp
+===================================================================
+--- src/gui/widgets/toggle_button.cpp (revision 54624)
++++ src/gui/widgets/toggle_button.cpp (revision 54625)
+@@ -17,7 +17,6 @@
+
+ #include "gui/widgets/toggle_button.hpp"
+
+-#include "foreach.hpp"
+ #include "gui/auxiliary/log.hpp"
+ #include "gui/auxiliary/widget_definition/toggle_button.hpp"
+ #include "gui/auxiliary/window_builder/toggle_button.hpp"
+@@ -26,6 +25,7 @@
+ #include "sound.hpp"
+
+ #include <boost/bind.hpp>
++#include <boost/foreach.hpp>
+
+ #define LOG_SCOPE_HEADER get_control_type() + " [" + id() + "] " + __func__
+ #define LOG_HEADER LOG_SCOPE_HEADER + ':'
+@@ -89,7 +89,7 @@
+
+ // set icon in canvases
+ std::vector<tcanvas>& canvases = tcontrol::canvas();
+- foreach(tcanvas& canvas, canvases) {
++ BOOST_FOREACH(tcanvas& canvas, canvases) {
+ canvas.set_variable("icon", variant(icon_name_));
+ }
+
+Index: src/gui/widgets/control.cpp
+===================================================================
+--- src/gui/widgets/control.cpp (revision 54624)
++++ src/gui/widgets/control.cpp (revision 54625)
+@@ -18,7 +18,6 @@
+ #include "control.hpp"
+
+ #include "font.hpp"
+-#include "foreach.hpp"
+ #include "formula_string_utils.hpp"
+ #include "gui/auxiliary/iterator/walker_widget.hpp"
+ #include "gui/auxiliary/log.hpp"
+@@ -29,6 +28,7 @@
+ #include "marked-up_text.hpp"
+
+ #include <boost/bind.hpp>
++#include <boost/foreach.hpp>
+
+ #include <iomanip>
+
+@@ -211,7 +211,7 @@
+ void tcontrol::place(const tpoint& origin, const tpoint& size)
+ {
+ // resize canvasses
+- foreach(tcanvas& canvas, canvas_) {
++ BOOST_FOREACH(tcanvas& canvas, canvas_) {
+ canvas.set_width(size.x);
+ canvas.set_height(size.y);
+ }
+@@ -297,7 +297,7 @@
+ const int max_height = get_text_maximum_height();
+
+ // set label in canvases
+- foreach(tcanvas& canvas, canvas_) {
++ BOOST_FOREACH(tcanvas& canvas, canvas_) {
+ canvas.set_variable("text", variant(label_));
+ canvas.set_variable("text_markup", variant(use_markup_));
+ canvas.set_variable("text_alignment"
+Index: src/gui/widgets/scrollbar_container.cpp
+===================================================================
+--- src/gui/widgets/scrollbar_container.cpp (revision 54624)
++++ src/gui/widgets/scrollbar_container.cpp (revision 54625)
+@@ -17,7 +17,6 @@
+
+ #include "gui/widgets/scrollbar_container_private.hpp"
+
+-#include "foreach.hpp"
+ #include "gui/auxiliary/log.hpp"
+ #include "gui/auxiliary/layout_exception.hpp"
+ #include "gui/widgets/clickable.hpp"
+@@ -25,6 +24,7 @@
+ #include "gui/widgets/window.hpp"
+
+ #include <boost/bind.hpp>
++#include <boost/foreach.hpp>
+
+ #define LOG_SCOPE_HEADER get_control_type() + " [" + id() + "] " + __func__
+ #define LOG_HEADER LOG_SCOPE_HEADER + ':'
+@@ -692,7 +692,7 @@
+
+ /***** Setup the scrollbar buttons *****/
+ typedef std::pair<std::string, tscrollbar_::tscroll> hack;
+- foreach(const hack& item, scroll_lookup()) {
++ BOOST_FOREACH(const hack& item, scroll_lookup()) {
+
+ // Vertical.
+ tclickable_* button = find_widget<tclickable_>(
+@@ -838,7 +838,7 @@
+ {
+ if(true) { /** @todo scrollbar visibility. */
+ /***** set scroll up button status *****/
+- foreach(const std::string& name, button_up_names) {
++ BOOST_FOREACH(const std::string& name, button_up_names) {
+ tcontrol* button = find_widget<tcontrol>(
+ vertical_scrollbar_grid_, name, false, false);
+
+@@ -848,7 +848,7 @@
+ }
+
+ /***** set scroll down status *****/
+- foreach(const std::string& name, button_down_names) {
++ BOOST_FOREACH(const std::string& name, button_down_names) {
+ tcontrol* button = find_widget<tcontrol>(
+ vertical_scrollbar_grid_, name, false, false);
+
+@@ -864,7 +864,7 @@
+
+ if(true) { /** @todo scrollbar visibility. */
+ /***** Set scroll left button status *****/
+- foreach(const std::string& name, button_up_names) {
++ BOOST_FOREACH(const std::string& name, button_up_names) {
+ tcontrol* button = find_widget<tcontrol>(
+ horizontal_scrollbar_grid_, name, false, false);
+
+@@ -874,7 +874,7 @@
+ }
+
+ /***** Set scroll right button status *****/
+- foreach(const std::string& name, button_down_names) {
++ BOOST_FOREACH(const std::string& name, button_down_names) {
+ tcontrol* button = find_widget<tcontrol>(
+ horizontal_scrollbar_grid_, name, false, false);
+
+Index: src/gui/widgets/generator_private.hpp
+===================================================================
+--- src/gui/widgets/generator_private.hpp (revision 54624)
++++ src/gui/widgets/generator_private.hpp (revision 54625)
+@@ -19,12 +19,13 @@
+ #include "gui/widgets/generator.hpp"
+
+ #include "asserts.hpp"
+-#include "foreach.hpp"
+ #include "gui/widgets/grid.hpp"
+ #include "gui/widgets/selectable.hpp"
+ #include "gui/widgets/toggle_button.hpp"
+ #include "gui/widgets/toggle_panel.hpp"
+
++#include <boost/foreach.hpp>
++
+ namespace gui2 {
+
+ /**
+@@ -584,7 +585,7 @@
+ /** Inherited from tgenerator_. */
+ void clear()
+ {
+- foreach(titem* item, items_) {
++ BOOST_FOREACH(titem* item, items_) {
+ delete item;
+ }
+ selected_item_count_ = 0;
+@@ -750,7 +751,7 @@
+ /** Inherited from tgenerator_. */
+ void layout_init(const bool full_initialization)
+ {
+- foreach(titem* item, items_) {
++ BOOST_FOREACH(titem* item, items_) {
+ if(item->grid.get_visible() != twidget::INVISIBLE && item->shown) {
+ item->grid.layout_init(full_initialization);
+ }
+@@ -804,7 +805,7 @@
+ {
+ assert(this->get_visible() == twidget::VISIBLE);
+
+- foreach(titem* item, items_) {
++ BOOST_FOREACH(titem* item, items_) {
+ if(item->grid.get_visible() == twidget::VISIBLE && item->shown) {
+ item->grid.draw_children(frame_buffer);
+ }
+@@ -815,7 +816,7 @@
+ void child_populate_dirty_list(twindow& caller,
+ const std::vector<twidget*>& call_stack)
+ {
+- foreach(titem* item, items_) {
++ BOOST_FOREACH(titem* item, items_) {
+ std::vector<twidget*> child_call_stack = call_stack;
+ item->grid.populate_dirty_list(caller, child_call_stack);
+ }
+@@ -838,7 +839,7 @@
+ /** Inherited from widget. */
+ bool disable_click_dismiss() const
+ {
+- foreach(titem* item, items_) {
++ BOOST_FOREACH(titem* item, items_) {
+ if(item->grid.disable_click_dismiss()) {
+ return true;
+ }
+@@ -974,7 +975,7 @@
+ void (*callback)(twidget*))
+ {
+ int i = index;
+- foreach(const T& item_data, data) {
++ BOOST_FOREACH(const T& item_data, data) {
+ create_item(i, list_builder, item_data, callback);
+ if(i != -1) {
+ ++i;
+Index: src/gui/widgets/generator.cpp
+===================================================================
+--- src/gui/widgets/generator.cpp (revision 54624)
++++ src/gui/widgets/generator.cpp (revision 54625)
+@@ -19,6 +19,8 @@
+
+ #include "gui/widgets/window.hpp"
+
++#include <boost/foreach.hpp>
++
+ namespace gui2 {
+
+ namespace policy {
+@@ -678,7 +680,7 @@
+ assert(!callback);
+
+ typedef std::pair<std::string, string_map> hack;
+- foreach(const hack& item, data) {
++ BOOST_FOREACH(const hack& item, data) {
+ if(item.first.empty()) {
+ for(unsigned row = 0; row < grid->get_rows(); ++row) {
+ for(unsigned col = 0; col < grid->get_cols(); ++col) {
+Index: src/gui/widgets/progress_bar.cpp
+===================================================================
+--- src/gui/widgets/progress_bar.cpp (revision 54624)
++++ src/gui/widgets/progress_bar.cpp (revision 54625)
+@@ -23,6 +23,7 @@
+ #include "gui/widgets/settings.hpp"
+
+ #include <boost/bind.hpp>
++#include <boost/foreach.hpp>
+
+ #define LOG_SCOPE_HEADER get_control_type() + " [" + id() + "] " + __func__
+ #define LOG_HEADER LOG_SCOPE_HEADER + ':'
+@@ -38,7 +39,7 @@
+ if(percentage_ != percentage) {
+ percentage_ = percentage;
+
+- foreach(tcanvas& c, canvas()) {
++ BOOST_FOREACH(tcanvas& c, canvas()) {
+ c.set_variable("percentage", variant(percentage));
+ }
+
+Index: src/gui/auxiliary/widget_definition.hpp
+===================================================================
+--- src/gui/auxiliary/widget_definition.hpp (revision 54624)
++++ src/gui/auxiliary/widget_definition.hpp (revision 54625)
+@@ -17,9 +17,10 @@
+ #define GUI_AUXILIARY_WIDGET_DEFINITION_HPP_INCLUDED
+
+ #include "config.hpp"
+-#include "foreach.hpp"
+ #include "gui/auxiliary/canvas.hpp"
+
++#include <boost/foreach.hpp>
++
+ namespace gui2 {
+
+ /**
+@@ -98,7 +99,7 @@
+ void load_resolutions(const config &cfg)
+ {
+ config::const_child_itors itors = cfg.child_range("resolution");
+- foreach(const config &resolution, itors) {
++ BOOST_FOREACH(const config &resolution, itors) {
+ resolutions.push_back(new T(resolution));
+ }
+ }
+Index: src/gui/auxiliary/event/dispatcher.cpp
+===================================================================
+--- src/gui/auxiliary/event/dispatcher.cpp (revision 54624)
++++ src/gui/auxiliary/event/dispatcher.cpp (revision 54625)
+@@ -17,7 +17,6 @@
+
+ #include "gui/auxiliary/event/dispatcher_private.hpp"
+
+-#include "foreach.hpp"
+ #include "gui/auxiliary/log.hpp"
+
+ namespace gui2 {
+Index: src/gui/auxiliary/event/handler.cpp
+===================================================================
+--- src/gui/auxiliary/event/handler.cpp (revision 54624)
++++ src/gui/auxiliary/event/handler.cpp (revision 54625)
+@@ -18,7 +18,6 @@
+ #include "gui/auxiliary/event/handler.hpp"
+
+ #include "clipboard.hpp"
+-#include "foreach.hpp"
+ #include "gui/auxiliary/event/dispatcher.hpp"
+ #include "gui/auxiliary/timer.hpp"
+ #include "gui/auxiliary/log.hpp"
+@@ -28,6 +27,8 @@
+ #include "hotkeys.hpp"
+ #include "video.hpp"
+
++#include <boost/foreach.hpp>
++
+ #include <cassert>
+
+ /**
+@@ -429,7 +430,7 @@
+ }
+
+ /***** Set proper state for the other dispatchers. *****/
+- foreach(tdispatcher* dispatcher, dispatchers_) {
++ BOOST_FOREACH(tdispatcher* dispatcher, dispatchers_) {
+ dynamic_cast<twidget&>(*dispatcher).set_dirty();
+ }
+
+@@ -448,7 +449,7 @@
+
+ void thandler::activate()
+ {
+- foreach(tdispatcher* dispatcher, dispatchers_) {
++ BOOST_FOREACH(tdispatcher* dispatcher, dispatchers_) {
+ dispatcher->fire(SDL_ACTIVATE
+ , dynamic_cast<twidget&>(*dispatcher)
+ , NULL);
+@@ -472,7 +473,7 @@
+ *
+ * For now we use a hack, but would be nice to rewrite it for 1.9/1.11.
+ */
+- foreach(tdispatcher* dispatcher, dispatchers_) {
++ BOOST_FOREACH(tdispatcher* dispatcher, dispatchers_) {
+ if(!first) {
+ /*
+ * This leaves glitches on window borders if the window beneath it
+@@ -503,7 +504,7 @@
+ {
+ DBG_GUI_E << "Firing: " << SDL_VIDEO_RESIZE << ".\n";
+
+- foreach(tdispatcher* dispatcher, dispatchers_) {
++ BOOST_FOREACH(tdispatcher* dispatcher, dispatchers_) {
+ dispatcher->fire(SDL_VIDEO_RESIZE
+ , dynamic_cast<twidget&>(*dispatcher)
+ , new_size);
+Index: src/gui/auxiliary/canvas.cpp
+===================================================================
+--- src/gui/auxiliary/canvas.cpp (revision 54624)
++++ src/gui/auxiliary/canvas.cpp (revision 54625)
+@@ -24,7 +24,6 @@
+
+ #include "config.hpp"
+ #include "../../image.hpp"
+-#include "foreach.hpp"
+ #include "formatter.hpp"
+ #include "gettext.hpp"
+ #include "gui/auxiliary/formula.hpp"
+@@ -33,6 +32,8 @@
+ #include "../../text.hpp"
+ #include "wml_exception.hpp"
+
++#include <boost/foreach.hpp>
++
+ namespace gui2 {
+
+ namespace {
+@@ -1455,7 +1456,7 @@
+ log_scope2(log_gui_parse, "Canvas: parsing config.");
+ shapes_.clear();
+
+- foreach(const config::any_child& shape, cfg.all_children_range()) {
++ BOOST_FOREACH(const config::any_child& shape, cfg.all_children_range()) {
+ const std::string &type = shape.key;
+ const config &data = shape.cfg;
+
+@@ -1474,7 +1475,7 @@
+ } else if(type == "pre_commit") {
+
+ /* note this should get split if more preprocessing is used. */
+- foreach(const config::any_child& function,
++ BOOST_FOREACH(const config::any_child& function,
+ data.all_children_range()) {
+
+ if(function.key == "blur") {
+Index: src/gui/auxiliary/window_builder.cpp
+===================================================================
+--- src/gui/auxiliary/window_builder.cpp (revision 54624)
++++ src/gui/auxiliary/window_builder.cpp (revision 54625)
+@@ -18,7 +18,6 @@
+ #include "gui/auxiliary/window_builder_private.hpp"
+
+ #include "asserts.hpp"
+-#include "foreach.hpp"
+ #include "gettext.hpp"
+ #include "gui/auxiliary/log.hpp"
+ #include "gui/auxiliary/window_builder/helper.hpp"
+@@ -43,6 +42,7 @@
+ #include "formula_string_utils.hpp"
+
+ #include <boost/bind.hpp>
++#include <boost/foreach.hpp>
+
+ namespace gui2 {
+
+@@ -67,7 +67,7 @@
+ std::string
+ , boost::function<tbuilder_widget_ptr(config)> >
+ thack;
+- foreach(const thack& item, builder_widget_lookup()) {
++ BOOST_FOREACH(const thack& item, builder_widget_lookup()) {
+ if(item.first == "window" || item.first == "tooltip") {
+ continue;
+ }
+@@ -153,7 +153,7 @@
+ , definition->helptip);
+ assert(window);
+
+- foreach(const twindow_builder::tresolution::tlinked_group& lg,
++ BOOST_FOREACH(const twindow_builder::tresolution::tlinked_group& lg,
+ definition->linked_groups) {
+
+ if(window->has_linked_size_group(lg.id)) {
+@@ -238,7 +238,7 @@
+
+ config::const_child_itors cfgs = cfg.child_range("resolution");
+ VALIDATE(cfgs.first != cfgs.second, _("No resolution defined."));
+- foreach (const config &i, cfgs) {
++ BOOST_FOREACH(const config &i, cfgs) {
+ resolutions.push_back(tresolution(i));
+ }
+
+@@ -386,7 +386,7 @@
+ definition = "default";
+ }
+
+- foreach (const config &lg, cfg.child_range("linked_group")) {
++ BOOST_FOREACH(const config &lg, cfg.child_range("linked_group")) {
+ tlinked_group linked_group;
+ linked_group.id = lg["id"].str();
+ linked_group.fixed_width = lg["fixed_width"].to_bool();
+@@ -501,13 +501,13 @@
+ */
+ log_scope2(log_gui_parse, "Window builder: parsing a grid");
+
+- foreach (const config &row, cfg.child_range("row"))
++ BOOST_FOREACH(const config &row, cfg.child_range("row"))
+ {
+ unsigned col = 0;
+
+ row_grow_factor.push_back(row["grow_factor"]);
+
+- foreach (const config &c, row.child_range("column"))
++ BOOST_FOREACH(const config &c, row.child_range("column"))
+ {
+ flags.push_back(implementation::read_flags(c));
+ border_size.push_back(c["border_size"]);
+Index: src/gui/auxiliary/tips.cpp
+===================================================================
+--- src/gui/auxiliary/tips.cpp (revision 54624)
++++ src/gui/auxiliary/tips.cpp (revision 54625)
+@@ -18,10 +18,11 @@
+ #include "gui/auxiliary/tips.hpp"
+
+ #include "config.hpp"
+-#include "foreach.hpp"
+ #include "game_preferences.hpp"
+ #include "serialization/string_utils.hpp"
+
++#include <boost/foreach.hpp>
++
+ namespace gui2 {
+
+ ttip::ttip(const t_string& text
+@@ -39,7 +40,7 @@
+ {
+ std::vector<ttip> result;
+
+- foreach(const config &tip, cfg.child_range("tip")) {
++ BOOST_FOREACH(const config &tip, cfg.child_range("tip")) {
+ result.push_back(ttip(tip["text"]
+ , tip["source"]
+ , tip["encountered_units"]));
+@@ -54,11 +55,11 @@
+
+ const std::set<std::string>& units = preferences::encountered_units();
+
+- foreach(const ttip& tip, tips) {
++ BOOST_FOREACH(const ttip& tip, tips) {
+ if(tip.unit_filter_.empty()) {
+ result.push_back(tip);
+ } else {
+- foreach(const std::string& unit, tip.unit_filter_) {
++ BOOST_FOREACH(const std::string& unit, tip.unit_filter_) {
+ if(units.find(unit) != units.end()) {
+ result.push_back(tip);
+ break;
+Index: src/gui/auxiliary/notifier.hpp
+===================================================================
+--- src/gui/auxiliary/notifier.hpp (revision 54624)
++++ src/gui/auxiliary/notifier.hpp (revision 54625)
+@@ -16,10 +16,10 @@
+ #ifndef GUI_WIDGETS_AUXILIARY_NOTIFIER_HPP_INCLUDED
+ #define GUI_WIDGETS_AUXILIARY_NOTIFIER_HPP_INCLUDED
+
+-#include "foreach.hpp"
+-
+ #include "gui/auxiliary/notifiee.hpp"
+
++#include <boost/foreach.hpp>
++
+ #include <cassert>
+ #include <map>
+
+@@ -47,7 +47,7 @@
+ ~tnotifier()
+ {
+ typedef std::pair<tnotifiee<tfunctor>* const, tfunctor> thack;
+- foreach(thack& item, notifiees_) {
++ BOOST_FOREACH(thack& item, notifiees_) {
+ assert(item.first);
+ assert((*item.first).notifier_ == this);
+
+Index: src/gui/auxiliary/window_builder/helper.cpp
+===================================================================
+--- src/gui/auxiliary/window_builder/helper.cpp (revision 54624)
++++ src/gui/auxiliary/window_builder/helper.cpp (revision 54625)
+@@ -18,11 +18,12 @@
+ #include "gui/auxiliary/window_builder/helper.hpp"
+
+ #include "config.hpp"
+-#include "foreach.hpp"
+ #include "gui/auxiliary/log.hpp"
+ #include "gui/widgets/grid.hpp"
+ #include "gui/widgets/window.hpp"
+
++#include <boost/foreach.hpp>
++
+ namespace gui2 {
+
+ namespace implementation {
+@@ -60,7 +61,7 @@
+ unsigned get_border(const std::vector<std::string>& border)
+ {
+ unsigned result = 0;
+- foreach (const std::string& s, border) {
++ BOOST_FOREACH(const std::string& s, border) {
+ if (s == "all") {
+ return tgrid::BORDER_ALL;
+ } else if (s == "top") {
+Index: src/gui/auxiliary/window_builder/stacked_widget.cpp
+===================================================================
+--- src/gui/auxiliary/window_builder/stacked_widget.cpp (revision 54624)
++++ src/gui/auxiliary/window_builder/stacked_widget.cpp (revision 54625)
+@@ -18,13 +18,14 @@
+ #include "gui/auxiliary/window_builder/stacked_widget.hpp"
+
+ #include "config.hpp"
+-#include "foreach.hpp"
+ #include "gettext.hpp"
+ #include "gui/auxiliary/log.hpp"
+ #include "gui/auxiliary/widget_definition/stacked_widget.hpp"
+ #include "gui/widgets/stacked_widget.hpp"
+ #include "wml_exception.hpp"
+
++#include <boost/foreach.hpp>
++
+ namespace gui2 {
+
+ namespace implementation {
+@@ -35,7 +36,7 @@
+ {
+ const config &s = cfg.child("stack");
+ VALIDATE(s, _("No stack defined."));
+- foreach(const config &layer, s.child_range("layer")) {
++ BOOST_FOREACH(const config &layer, s.child_range("layer")) {
+ stack.push_back(new tbuilder_grid(layer));
+ }
+ }
+Index: src/gui/auxiliary/window_builder/slider.cpp
+===================================================================
+--- src/gui/auxiliary/window_builder/slider.cpp (revision 54624)
++++ src/gui/auxiliary/window_builder/slider.cpp (revision 54625)
+@@ -18,12 +18,13 @@
+ #include "gui/auxiliary/window_builder/slider.hpp"
+
+ #include "config.hpp"
+-#include "foreach.hpp"
+ #include "gettext.hpp"
+ #include "gui/auxiliary/log.hpp"
+ #include "gui/widgets/slider.hpp"
+ #include "wml_exception.hpp"
+
++#include <boost/foreach.hpp>
++
+ namespace gui2 {
+
+ namespace implementation {
+@@ -44,7 +45,7 @@
+ return;
+ }
+
+- foreach(const config& label, labels.child_range("value")) {
++ BOOST_FOREACH(const config& label, labels.child_range("value")) {
+ value_labels_.push_back(label["label"]);
+ }
+ }
+Index: src/gui/auxiliary/window_builder/horizontal_listbox.cpp
+===================================================================
+--- src/gui/auxiliary/window_builder/horizontal_listbox.cpp (revision 54624)
++++ src/gui/auxiliary/window_builder/horizontal_listbox.cpp (revision 54625)
+@@ -17,7 +17,6 @@
+
+ #include "gui/auxiliary/window_builder/horizontal_listbox.hpp"
+
+-#include "foreach.hpp"
+ #include "gettext.hpp"
+ #include "gui/auxiliary/log.hpp"
+ #include "gui/auxiliary/widget_definition/listbox.hpp"
+@@ -29,6 +28,8 @@
+ #endif
+ #include "wml_exception.hpp"
+
++#include <boost/foreach.hpp>
++
+ namespace gui2 {
+
+ namespace implementation {
+@@ -53,12 +54,12 @@
+ const config &data = cfg.child("list_data");
+ if (!data) return;
+
+- foreach(const config &row, data.child_range("row")) {
++ BOOST_FOREACH(const config &row, data.child_range("row")) {
+ unsigned col = 0;
+
+- foreach(const config &c, row.child_range("column")) {
++ BOOST_FOREACH(const config &c, row.child_range("column")) {
+ list_data.push_back(string_map());
+- foreach (const config::attribute &i, c.attribute_range()) {
++ BOOST_FOREACH(const config::attribute &i, c.attribute_range()) {
+ list_data.back()[i.first] = i.second;
+ }
+ ++col;
+Index: src/gui/auxiliary/window_builder/listbox.cpp
+===================================================================
+--- src/gui/auxiliary/window_builder/listbox.cpp (revision 54624)
++++ src/gui/auxiliary/window_builder/listbox.cpp (revision 54625)
+@@ -17,7 +17,6 @@
+
+ #include "gui/auxiliary/window_builder/listbox.hpp"
+
+-#include "foreach.hpp"
+ #include "gettext.hpp"
+ #include "gui/auxiliary/log.hpp"
+ #include "gui/auxiliary/widget_definition/listbox.hpp"
+@@ -30,6 +29,8 @@
+ #include "gui/widgets/settings.hpp"
+ #include "wml_exception.hpp"
+
++#include <boost/foreach.hpp>
++
+ namespace gui2 {
+
+ namespace implementation {
+@@ -66,12 +67,12 @@
+ return;
+ }
+
+- foreach(const config& row, data.child_range("row")) {
++ BOOST_FOREACH(const config& row, data.child_range("row")) {
+ unsigned col = 0;
+
+- foreach(const config& c, row.child_range("column")) {
++ BOOST_FOREACH(const config& c, row.child_range("column")) {
+ list_data.push_back(string_map());
+- foreach(const config::attribute& i, c.attribute_range()) {
++ BOOST_FOREACH(const config::attribute& i, c.attribute_range()) {
+ list_data.back()[i.first] = i.second;
+ }
+ ++col;
+Index: src/gui/auxiliary/window_builder/multi_page.cpp
+===================================================================
+--- src/gui/auxiliary/window_builder/multi_page.cpp (revision 54624)
++++ src/gui/auxiliary/window_builder/multi_page.cpp (revision 54625)
+@@ -18,13 +18,14 @@
+ #include "gui/auxiliary/window_builder/multi_page.hpp"
+
+ #include "config.hpp"
+-#include "foreach.hpp"
+ #include "gettext.hpp"
+ #include "gui/auxiliary/log.hpp"
+ #include "gui/auxiliary/widget_definition/multi_page.hpp"
+ #include "gui/widgets/multi_page.hpp"
+ #include "wml_exception.hpp"
+
++#include <boost/foreach.hpp>
++
+ namespace gui2 {
+
+ namespace implementation {
+@@ -46,12 +47,12 @@
+ return;
+ }
+
+- foreach(const config &row, d.child_range("row")) {
++ BOOST_FOREACH(const config &row, d.child_range("row")) {
+ unsigned col = 0;
+
+- foreach(const config &column, row.child_range("column")) {
++ BOOST_FOREACH(const config &column, row.child_range("column")) {
+ data.push_back(string_map());
+- foreach(const config::attribute &i, column.attribute_range()) {
++ BOOST_FOREACH(const config::attribute &i, column.attribute_range()) {
+ data.back()[i.first] = i.second;
+ }
+ ++col;
+Index: src/gui/auxiliary/window_builder/tree_view.cpp
+===================================================================
+--- src/gui/auxiliary/window_builder/tree_view.cpp (revision 54624)
++++ src/gui/auxiliary/window_builder/tree_view.cpp (revision 54625)
+@@ -17,7 +17,6 @@
+
+ #include "gui/auxiliary/window_builder/tree_view.hpp"
+
+-#include "foreach.hpp"
+ #include "gettext.hpp"
+ #include "gui/auxiliary/log.hpp"
+ #include "gui/auxiliary/widget_definition/tree_view.hpp"
+@@ -25,6 +24,8 @@
+ #include "gui/widgets/tree_view.hpp"
+ #include "wml_exception.hpp"
+
++#include <boost/foreach.hpp>
++
+ namespace gui2 {
+
+ namespace implementation {
+@@ -39,7 +40,7 @@
+ , nodes()
+ {
+
+- foreach(const config &node, cfg.child_range("node")) {
++ BOOST_FOREACH(const config &node, cfg.child_range("node")) {
+ nodes.push_back(tnode(node));
+ }
+
+Index: src/unit_types.cpp
+===================================================================
+--- src/unit_types.cpp (revision 54624)
++++ src/unit_types.cpp (revision 54625)
+@@ -22,13 +22,13 @@
+
+ #include "unit_types.hpp"
+
+-#include "foreach.hpp"
+ #include "game_config.hpp"
+ #include "gettext.hpp"
+ #include "loadscreen.hpp"
+ #include "log.hpp"
+ #include "map.hpp"
+
++#include <boost/foreach.hpp>
+
+ static lg::log_domain log_config("config");
+ #define ERR_CF LOG_STREAM(err, log_config)
+@@ -156,7 +156,7 @@
+ if (config &specials = cfg_.child("specials"))
+ {
+ config new_specials;
+- foreach (const config::any_child &vp, specials.all_children_range()) {
++ BOOST_FOREACH(const config::any_child &vp, specials.all_children_range()) {
+ std::vector<std::string>::const_iterator found_id =
+ std::find(dsl.begin(), dsl.end(), vp.cfg["id"]);
+ if (found_id == dsl.end()) {
+@@ -174,7 +174,7 @@
+ cfg_.clear_children("specials");
+ }
+ config &new_specials = cfg_.child_or_add("specials");
+- foreach (const config::any_child &value, set_specials.all_children_range()) {
++ BOOST_FOREACH(const config::any_child &value, set_specials.all_children_range()) {
+ new_specials.add_child(value.key, value.cfg);
+ }
+ }
+@@ -345,7 +345,7 @@
+
+ if (const config &resistance = cfg_.child("resistance"))
+ {
+- foreach (const config::attribute &i, resistance.attribute_range()) {
++ BOOST_FOREACH(const config::attribute &i, resistance.attribute_range()) {
+ res[i.first] = i.second;
+ }
+ }
+@@ -666,11 +666,11 @@
+ movementType_ = unit_movement_type(cfg);
+ alpha_ = ftofxp(1.0);
+
+- foreach (const config &t, traits)
++ BOOST_FOREACH(const config &t, traits)
+ {
+ possibleTraits_.add_child("trait", t);
+ }
+- foreach (config &var_cfg, cfg.child_range("variation"))
++ BOOST_FOREACH(config &var_cfg, cfg.child_range("variation"))
+ {
+ if (var_cfg["inherit"].to_bool()) {
+ config nvar_cfg(cfg);
+@@ -710,7 +710,7 @@
+ if (cfg["ignore_race_traits"].to_bool()) {
+ possibleTraits_.clear();
+ } else {
+- foreach (const config &t, race_->additional_traits())
++ BOOST_FOREACH(const config &t, race_->additional_traits())
+ {
+ if (alignment_ != NEUTRAL || t["id"] != "fearless")
+ possibleTraits_.add_child("trait", t);
+@@ -722,7 +722,7 @@
+ }
+
+ // Insert any traits that are just for this unit type
+- foreach (const config &trait, cfg.child_range("trait"))
++ BOOST_FOREACH(const config &trait, cfg.child_range("trait"))
+ {
+ possibleTraits_.add_child("trait", trait);
+ }
+@@ -750,7 +750,7 @@
+ game_config::add_color_info(cfg);
+
+
+- foreach (const config &portrait, cfg_.child_range("portrait")) {
++ BOOST_FOREACH(const config &portrait, cfg_.child_range("portrait")) {
+ portraits_.push_back(tportrait(portrait));
+ }
+
+@@ -807,7 +807,7 @@
+
+ if (const config &abil_cfg = cfg.child("abilities"))
+ {
+- foreach (const config::any_child &ab, abil_cfg.all_children_range()) {
++ BOOST_FOREACH(const config::any_child &ab, abil_cfg.all_children_range()) {
+ const config::attribute_value &name = ab.cfg["name"];
+ if (!name.empty()) {
+ abilities_.push_back(name.t_str());
+@@ -816,15 +816,15 @@
+ }
+ }
+
+- foreach (const config &adv, cfg.child_range("advancement"))
++ BOOST_FOREACH(const config &adv, cfg.child_range("advancement"))
+ {
+- foreach (const config &effect, adv.child_range("effect"))
++ BOOST_FOREACH(const config &effect, adv.child_range("effect"))
+ {
+ const config &abil_cfg = effect.child("abilities");
+ if (!abil_cfg || effect["apply_to"] != "new_ability") {
+ continue;
+ }
+- foreach (const config::any_child &ab, abil_cfg.all_children_range()) {
++ BOOST_FOREACH(const config::any_child &ab, abil_cfg.all_children_range()) {
+ const config::attribute_value &name = ab.cfg["name"];
+ if (!name.empty()) {
+ adv_abilities_.push_back(name.t_str());
+@@ -934,7 +934,7 @@
+ std::vector<attack_type> unit_type::attacks() const
+ {
+ std::vector<attack_type> res;
+- foreach (const config &att, cfg_.child_range("attack")) {
++ BOOST_FOREACH(const config &att, cfg_.child_range("attack")) {
+ res.push_back(attack_type(att));
+ }
+
+@@ -990,7 +990,7 @@
+ {
+ if (const config &abil = cfg_.child("abilities"))
+ {
+- foreach (const config::any_child &ab, abil.all_children_range()) {
++ BOOST_FOREACH(const config::any_child &ab, abil.all_children_range()) {
+ if (ab.cfg["id"] == ability)
+ return true;
+ }
+@@ -1005,7 +1005,7 @@
+ const config &abilities = cfg_.child("abilities");
+ if (!abilities) return res;
+
+- foreach (const config::any_child &ab, abilities.all_children_range()) {
++ BOOST_FOREACH(const config::any_child &ab, abilities.all_children_range()) {
+ const std::string &id = ab.cfg["id"];
+ if (!id.empty())
+ res.push_back(id);
+@@ -1077,7 +1077,7 @@
+ if (!ut)
+ return;
+
+- foreach(const std::string& adv, ut->advances_to()) {
++ BOOST_FOREACH(const std::string& adv, ut->advances_to()) {
+ if (tree.insert(adv).second) {
+ // insertion succeed, expand the new type
+ advancement_tree_internal(adv, tree);
+@@ -1098,9 +1098,9 @@
+ unit_types.build_all(unit_type::HELP_INDEX);
+
+ std::vector<std::string> adv_from;
+- foreach (const unit_type_data::unit_type_map::value_type &ut, unit_types.types())
++ BOOST_FOREACH(const unit_type_data::unit_type_map::value_type &ut, unit_types.types())
+ {
+- foreach(const std::string& adv, ut.second.advances_to()) {
++ BOOST_FOREACH(const std::string& adv, ut.second.advances_to()) {
+ if (adv == id_)
+ adv_from.push_back(ut.second.id());
+ }
+@@ -1127,7 +1127,7 @@
+ clear();
+ set_unit_config(cfg);
+
+- foreach (const config &mt, cfg.child_range("movetype"))
++ BOOST_FOREACH(const config &mt, cfg.child_range("movetype"))
+ {
+ const unit_movement_type move_type(mt);
+ movement_types_.insert(
+@@ -1135,14 +1135,14 @@
+ loadscreen::increment_progress();
+ }
+
+- foreach (const config &r, cfg.child_range("race"))
++ BOOST_FOREACH(const config &r, cfg.child_range("race"))
+ {
+ const unit_race race(r);
+ races_.insert(std::pair<std::string,unit_race>(race.id(),race));
+ loadscreen::increment_progress();
+ }
+
+- foreach (config &ut, cfg.child_range("unit_type"))
++ BOOST_FOREACH(config &ut, cfg.child_range("unit_type"))
+ {
+ std::string id = ut["id"];
+ if (const config &bu = ut.child("base_unit"))
+@@ -1195,7 +1195,7 @@
+
+ void unit_type_data::check_types(const std::vector<std::string>& types) const
+ {
+- foreach(const std::string& type, types) {
++ BOOST_FOREACH(const std::string& type, types) {
+ if(!find(type)) throw game::game_error("unknown unit type: " + type);
+ }
+ }
+@@ -1279,7 +1279,7 @@
+
+ std::vector<std::string> trees = utils::split(cfg["type_adv_tree"]);
+ hide_help_type_.back().insert(trees.begin(), trees.end());
+- foreach(const std::string& t_id, trees) {
++ BOOST_FOREACH(const std::string& t_id, trees) {
+ unit_type_map::iterator ut = types_.find(t_id);
+ if (ut != types_.end()) {
+ std::set<std::string> adv_tree = ut->second.advancement_tree();
+@@ -1310,7 +1310,7 @@
+ {
+ const config& cfg = to_unit.get_cfg();
+
+- foreach (const config &af, cfg.child_range("advancefrom"))
++ BOOST_FOREACH(const config &af, cfg.child_range("advancefrom"))
+ {
+ const std::string &from = af["unit"];
+ int xp = af["experience"];
+@@ -1349,12 +1349,12 @@
+ // status gets changed. In the unlikely event it gets changed
+ // multiple times, we want to try to do it in the same order
+ // that unit::apply_modifications does things.
+- foreach (const config &mod, possible_traits())
++ BOOST_FOREACH(const config &mod, possible_traits())
+ {
+ if (mod["availability"] != "musthave")
+ continue;
+
+- foreach (const config &effect, mod.child_range("effect"))
++ BOOST_FOREACH(const config &effect, mod.child_range("effect"))
+ {
+ // See if the effect only applies to
+ // certain unit types But don't worry
+Index: src/game_controller.cpp
+===================================================================
+--- src/game_controller.cpp (revision 54624)
++++ src/game_controller.cpp (revision 54625)
+@@ -50,6 +50,8 @@
+ #include "statistics.hpp"
+ #include "wml_exception.hpp"
+
++#include <boost/foreach.hpp>
++
+ static lg::log_domain log_config("config");
+ #define ERR_CONFIG LOG_STREAM(err, log_config)
+ #define WRN_CONFIG LOG_STREAM(warn, log_config)
+@@ -478,7 +480,7 @@
+ }
+
+ int side_num = 1;
+- foreach (config &s, level.child_range("side"))
++ BOOST_FOREACH(config &s, level.child_range("side"))
+ {
+ std::map<int,std::string>::const_iterator type = side_types.find(side_num),
+ controller = side_controllers.find(side_num),
+@@ -507,7 +509,7 @@
+ faction_excepts.clear();
+ }
+ unsigned j = 0;
+- foreach (const config &faction, era_cfg.child_range("multiplayer_side"))
++ BOOST_FOREACH(const config &faction, era_cfg.child_range("multiplayer_side"))
+ {
+ if (faction["random_faction"].to_bool()) continue;
+ const std::string &faction_id = faction["id"];
+@@ -673,7 +675,7 @@
+ }
+
+ if(state_.classification().campaign_type == "multiplayer") {
+- foreach (config &side, state_.snapshot.child_range("side"))
++ BOOST_FOREACH(config &side, state_.snapshot.child_range("side"))
+ {
+ if (side["controller"] == "network")
+ side["controller"] = "human";
+@@ -683,10 +685,10 @@
+ }
+
+ if (load.cancel_orders()) {
+- foreach (config &side, state_.snapshot.child_range("side"))
++ BOOST_FOREACH(config &side, state_.snapshot.child_range("side"))
+ {
+ if (side["controller"] != "human") continue;
+- foreach (config &unit, side.child_range("unit"))
++ BOOST_FOREACH(config &unit, side.child_range("unit"))
+ {
+ unit["goto_x"] = -999;
+ unit["goto_y"] = -999;
+@@ -710,7 +712,7 @@
+
+ void game_controller::mark_completed_campaigns(std::vector<config> &campaigns)
+ {
+- foreach (config &campaign, campaigns) {
++ BOOST_FOREACH(config &campaign, campaigns) {
+ campaign["completed"] = preferences::is_campaign_completed(campaign["id"]);
+ }
+ }
+@@ -1218,7 +1220,7 @@
+ game_config_.splice_children(core_terrain_rules, "terrain_graphics");
+
+ config& hashes = game_config_.add_child("multiplayer_hashes");
+- foreach (const config &ch, game_config_.child_range("multiplayer")) {
++ BOOST_FOREACH(const config &ch, game_config_.child_range("multiplayer")) {
+ hashes[ch["id"]] = ch.hash();
+ }
+
+Index: src/unit.cpp
+===================================================================
+--- src/unit.cpp (revision 54624)
++++ src/unit.cpp (revision 54625)
+@@ -21,7 +21,6 @@
+ #include "unit.hpp"
+
+ #include "callable_objects.hpp"
+-#include "foreach.hpp"
+ #include "formula.hpp"
+ #include "game_display.hpp"
+ #include "game_preferences.hpp"
+@@ -38,6 +37,7 @@
+ #include "side_filter.hpp"
+ #include "play_controller.hpp"
+
++#include <boost/foreach.hpp>
+ static lg::log_domain log_unit("unit");
+ #define DBG_UT LOG_STREAM(debug, log_unit)
+ #define LOG_UT LOG_STREAM(info, log_unit)
+@@ -288,7 +288,7 @@
+ filter_recall_ = filter_recall.get_config();
+
+ const vconfig::child_list& events = vcfg->get_children("event");
+- foreach(const vconfig& e, events) {
++ BOOST_FOREACH(const vconfig& e, events) {
+ events_.add_child("event", e.get_config());
+ }
+ }
+@@ -296,7 +296,7 @@
+ {
+ filter_recall_ = cfg.child_or_empty("filter_recall");
+
+- foreach(const config& unit_event, cfg.child_range("event")) {
++ BOOST_FOREACH(const config& unit_event, cfg.child_range("event")) {
+ events_.add_child("event", unit_event);
+ }
+ }
+@@ -375,7 +375,7 @@
+ formula_vars_ = new game_logic::map_formula_callable;
+
+ variant var;
+- foreach (const config::attribute &i, ai_vars.attribute_range()) {
++ BOOST_FOREACH(const config::attribute &i, ai_vars.attribute_range()) {
+ var.serialize_from_string(i.second);
+ formula_vars_->add(i.first, var);
+ }
+@@ -432,7 +432,7 @@
+
+ if (const config &status_flags = cfg.child("status"))
+ {
+- foreach (const config::attribute &st, status_flags.attribute_range()) {
++ BOOST_FOREACH(const config::attribute &st, status_flags.attribute_range()) {
+ if (st.first == "healable") {
+ ///@deprecated 1.9.2 'healable' instead of 'unhealable'
+ ERR_UT << "Usage of 'healable' is deprecated, use 'unhealable' instead, "
+@@ -449,7 +449,7 @@
+ }
+
+ // Remove animations from private cfg, they're not needed there now
+- foreach(const std::string& tag_name, unit_animation::all_tag_names()) {
++ BOOST_FOREACH(const std::string& tag_name, unit_animation::all_tag_names()) {
+ cfg_.clear_children(tag_name);
+ }
+
+@@ -518,7 +518,7 @@
+ "canrecruit", "extra_recruit", "x", "y", "placement",
+ // Useless attributes created when saving units to WML:
+ "flag_rgb", "language_name" };
+- foreach (const char *attr, internalized_attrs) {
++ BOOST_FOREACH(const char *attr, internalized_attrs) {
+ input_cfg.remove_attribute(attr);
+ cfg_.remove_attribute(attr);
+ }
+@@ -526,11 +526,11 @@
+ static char const *raw_attrs[] = { "description", "halo",
+ "profile", "small_profile", "upkeep", "usage", "ellipse",
+ "image", "image_icon", "random_traits", "generate_name" };
+- foreach (const char *attr, raw_attrs) {
++ BOOST_FOREACH(const char *attr, raw_attrs) {
+ input_cfg.remove_attribute(attr);
+ }
+
+- foreach (const config::attribute &attr, input_cfg.attribute_range()) {
++ BOOST_FOREACH(const config::attribute &attr, input_cfg.attribute_range()) {
+ if (attr.first == "do_not_list") continue;
+ WRN_UT << "Unknown attribute '" << attr.first << "' discarded.\n";
+ }
+@@ -715,12 +715,12 @@
+ config::const_child_itors current_traits = modifications_.child_range("trait");
+ std::vector<config> candidate_traits;
+
+- foreach (const config &t, type->possible_traits())
++ BOOST_FOREACH(const config &t, type->possible_traits())
+ {
+ // Skip the trait if the unit already has it.
+ const std::string &tid = t["id"];
+ bool already = false;
+- foreach (const config &mod, current_traits)
++ BOOST_FOREACH(const config &mod, current_traits)
+ {
+ if (mod["id"] == tid) {
+ already = true;
+@@ -767,7 +767,7 @@
+ {
+ std::vector<std::string> res;
+
+- foreach (const config &mod, modifications_.child_range("trait"))
++ BOOST_FOREACH(const config &mod, modifications_.child_range("trait"))
+ {
+ std::string const &id = mod["id"];
+ if (!id.empty())
+@@ -797,7 +797,7 @@
+ config new_cfg;
+ static char const *persistent_attrs[] = { "upkeep", "ellipse",
+ "image", "image_icon", "usage", "random_traits", "generate_name" };
+- foreach (const char *attr, persistent_attrs) {
++ BOOST_FOREACH(const char *attr, persistent_attrs) {
+ if (const config::attribute_value *v = old_cfg.get(attr)) {
+ new_cfg[attr] = *v;
+ }
+@@ -813,7 +813,7 @@
+ static char const *unit_type_attrs[] = { "movement", "movement_type",
+ "die_sound", "flies", "inherit", "variation_name",
+ "ignore_race_traits", "hide_help" };
+- foreach (const char *attr, unit_type_attrs) {
++ BOOST_FOREACH(const char *attr, unit_type_attrs) {
+ new_cfg.remove_attribute(attr);
+ }
+
+@@ -1020,7 +1020,7 @@
+ const std::vector<std::string> unit::advances_to_translated() const
+ {
+ std::vector<std::string> result;
+- foreach (std::string type_id, advances_to_)
++ BOOST_FOREACH(std::string type_id, advances_to_)
+ {
+ const unit_type *type = unit_types.find(type_id);
+ if (type)
+@@ -1120,7 +1120,7 @@
+ const std::map<std::string,std::string> unit::get_states() const
+ {
+ std::map<std::string, std::string> all_states;
+- foreach (std::string const &s, states_) {
++ BOOST_FOREACH(std::string const &s, states_) {
+ all_states[s] = "yes";
+ }
+ for (std::map<std::string, state_t>::const_iterator i = known_boolean_state_names_.begin(),
+@@ -1195,7 +1195,7 @@
+ {
+ if (const config &abil = cfg_.child("abilities"))
+ {
+- foreach (const config::any_child &ab, abil.all_children_range()) {
++ BOOST_FOREACH(const config::any_child &ab, abil.all_children_range()) {
+ if (ab.cfg["id"] == ability)
+ return true;
+ }
+@@ -2197,7 +2197,7 @@
+ if (const config &resistance = cfg_.child("resistance"))
+ {
+ utils::string_map res;
+- foreach (const config::attribute &i, resistance.attribute_range()) {
++ BOOST_FOREACH(const config::attribute &i, resistance.attribute_range()) {
+ res[i.first] = i.second;
+ }
+ return res;
+@@ -2222,7 +2222,7 @@
+ {
+ std::ostringstream tooltip;
+ const std::string &image = game_config::images::level;
+- foreach (const std::string &s, advances_to())
++ BOOST_FOREACH(const std::string &s, advances_to())
+ {
+ if (!s.empty())
+ tooltip << s << '\n';
+@@ -2230,7 +2230,7 @@
+ temp[image] = tooltip.str();
+ }
+
+- foreach (const config &adv, get_modification_advances())
++ BOOST_FOREACH(const config &adv, get_modification_advances())
+ {
+ const std::string &image = adv["image"];
+ if (image.empty()) continue;
+@@ -2248,7 +2248,7 @@
+ std::vector<std::pair<std::string,std::string> > temp;
+ std::pair<std::string,std::string> icon; //<image,tooltip>
+
+- foreach (const config &adv, get_modification_advances())
++ BOOST_FOREACH(const config &adv, get_modification_advances())
+ {
+ icon.first = adv["icon"].str();
+ icon.second = adv["description"].str();
+@@ -2265,7 +2265,7 @@
+ std::vector<config> unit::get_modification_advances() const
+ {
+ std::vector<config> res;
+- foreach (const config &adv, modification_advancements())
++ BOOST_FOREACH(const config &adv, modification_advancements())
+ {
+ if (adv["strict_amla"].to_bool() && !advances_to_.empty())
+ continue;
+@@ -2283,7 +2283,7 @@
+ std::unique_copy(temp.begin(), temp.end(), std::back_inserter(uniq));
+
+ bool requirements_done = true;
+- foreach (const std::string &s, uniq)
++ BOOST_FOREACH(const std::string &s, uniq)
+ {
+ int required_num = std::count(temp.begin(), temp.end(), s);
+ int mod_num = modification_count("advance", s);
+@@ -2302,7 +2302,7 @@
+ size_t unit::modification_count(const std::string& type, const std::string& id) const
+ {
+ size_t res = 0;
+- foreach (const config &item, modifications_.child_range(type)) {
++ BOOST_FOREACH(const config &item, modifications_.child_range(type)) {
+ if (item["id"] == id) {
+ ++res;
+ }
+@@ -2314,7 +2314,7 @@
+ /** Helper function for add_modifications */
+ static void mod_mdr_merge(config& dst, const config& mod, bool delta)
+ {
+- foreach (const config::attribute &i, mod.attribute_range()) {
++ BOOST_FOREACH(const config::attribute &i, mod.attribute_range()) {
+ int v = 0;
+ if (delta) v = dst[i.first];
+ dst[i.first] = v + i.second.to_int();
+@@ -2336,7 +2336,7 @@
+ }
+ config last_effect;
+ std::vector<t_string> effects_description;
+- foreach (const config &effect, mod.child_range("effect"))
++ BOOST_FOREACH(const config &effect, mod.child_range("effect"))
+ {
+ // See if the effect only applies to certain unit types
+ const std::string &type_filter = effect["unit_type"];
+@@ -2524,7 +2524,7 @@
+ config &def = cfg_.child_or_add("defense");
+ if (const config &ap = effect.child("defense")) {
+ bool replace = effect["replace"].to_bool();
+- foreach (const config::attribute &i, ap.attribute_range()) {
++ BOOST_FOREACH(const config::attribute &i, ap.attribute_range()) {
+ int v = i.second.to_int();
+ config::attribute_value &dst = def[i.first];
+ if (!replace) {
+@@ -2551,7 +2551,7 @@
+ config &ab = cfg_.child_or_add("abilities");
+ if (const config &ab_effect = effect.child("abilities")) {
+ config to_append;
+- foreach (const config::any_child &ab, ab_effect.all_children_range()) {
++ BOOST_FOREACH(const config::any_child &ab, ab_effect.all_children_range()) {
+ if(!has_ability_by_id(ab.cfg["id"])) {
+ to_append.add_child(ab.key, ab.cfg);
+ }
+@@ -2560,7 +2560,7 @@
+ }
+ } else if (apply_to == "remove_ability") {
+ if (const config &ab_effect = effect.child("abilities")) {
+- foreach (const config::any_child &ab, ab_effect.all_children_range()) {
++ BOOST_FOREACH(const config::any_child &ab, ab_effect.all_children_range()) {
+ remove_ability_by_id(ab.cfg["id"]);
+ }
+ }
+@@ -2749,7 +2749,7 @@
+
+ for(size_t i = 0; i != NumModificationTypes; ++i) {
+ const std::string& mod = ModificationTypes[i];
+- foreach (const config &m, modifications_.child_range(mod)) {
++ BOOST_FOREACH(const config &m, modifications_.child_range(mod)) {
+ log_scope("add mod");
+ add_modification(ModificationTypes[i], m, true);
+ }
+@@ -2779,7 +2779,7 @@
+ bool is_inv = !get_state(STATE_UNCOVERED) && get_ability_bool(hides,loc);
+ if(is_inv){
+ const std::vector<team>& teams = *resources::teams;
+- foreach (const unit &u, *resources::units)
++ BOOST_FOREACH(const unit &u, *resources::units)
+ {
+ const map_location &u_loc = u.get_location();
+ if (teams[side_-1].is_enemy(u.side()) && tiles_adjacent(loc, u_loc)) {
+@@ -2881,7 +2881,7 @@
+ int side_units(int side)
+ {
+ int res = 0;
+- foreach (const unit &u, *resources::units) {
++ BOOST_FOREACH(const unit &u, *resources::units) {
+ if (u.side() == side) ++res;
+ }
+ return res;
+@@ -2890,7 +2890,7 @@
+ int side_units_cost(int side)
+ {
+ int res = 0;
+- foreach (const unit &u, *resources::units) {
++ BOOST_FOREACH(const unit &u, *resources::units) {
+ if (u.side() == side) res += u.cost();
+ }
+ return res;
+@@ -2899,7 +2899,7 @@
+ int side_upkeep(int side)
+ {
+ int res = 0;
+- foreach (const unit &u, *resources::units) {
++ BOOST_FOREACH(const unit &u, *resources::units) {
+ if (u.side() == side) res += u.upkeep();
+ }
+ return res;
+@@ -3029,7 +3029,7 @@
+ const tportrait* unit::portrait(
+ const unsigned size, const tportrait::tside side) const
+ {
+- foreach(const tportrait& portrait, (type()->portraits())) {
++ BOOST_FOREACH(const tportrait& portrait, (type()->portraits())) {
+ if(portrait.size == size
+ && (side == portrait.side || portrait.side == tportrait::BOTH)) {
+
+@@ -3107,20 +3107,20 @@
+ "number",
+ ""};
+
+- foreach (const config &att, unit_config.child_range("attack"))
++ BOOST_FOREACH(const config &att, unit_config.child_range("attack"))
+ {
+ config& child = wcfg.add_child("attack");
+ for (int i = 0; !attack_keys[i].empty(); ++i) {
+ child[attack_keys[i]] = att[attack_keys[i]];
+ }
+- foreach (const config &spec, att.child_range("specials")) {
++ BOOST_FOREACH(const config &spec, att.child_range("specials")) {
+ config& child_spec = child.add_child("specials", spec);
+ child_spec.recursive_clear_value("description");
+ }
+
+ }
+
+- foreach (const config &abi, unit_config.child_range("abilities"))
++ BOOST_FOREACH(const config &abi, unit_config.child_range("abilities"))
+ {
+ config& child = wcfg.add_child("abilities", abi);
+ child.recursive_clear_value("description");
+@@ -3129,7 +3129,7 @@
+ child.recursive_clear_value("name_inactive");
+ }
+
+- foreach (const config &trait, unit_config.child_range("trait"))
++ BOOST_FOREACH(const config &trait, unit_config.child_range("trait"))
+ {
+ config& child = wcfg.add_child("trait", trait);
+ child.recursive_clear_value("description");
+@@ -3142,7 +3142,7 @@
+
+ for (int i = 0; !child_keys[i].empty(); ++i)
+ {
+- foreach (const config &c, unit_config.child_range(child_keys[i])) {
++ BOOST_FOREACH(const config &c, unit_config.child_range(child_keys[i])) {
+ wcfg.add_child(child_keys[i], c);
+ }
+ }
+Index: src/campaign_server/campaign_server.cpp
+===================================================================
+--- src/campaign_server/campaign_server.cpp (revision 54624)
++++ src/campaign_server/campaign_server.cpp (revision 54625)
+@@ -21,7 +21,6 @@
+ */
+
+ #include "filesystem.hpp"
+-#include "foreach.hpp"
+ #include "log.hpp"
+ #include "network_worker.hpp"
+ #include "serialization/binary_or_text.hpp"
+@@ -35,6 +34,7 @@
+
+ #include <csignal>
+
++#include <boost/foreach.hpp>
+ #include <boost/iostreams/filter/gzip.hpp>
+
+ // the fork execute is unix specific only tested on Linux quite sure it won't
+@@ -202,7 +202,7 @@
+
+ void find_translations(const config& cfg, config& campaign)
+ {
+- foreach (const config &dir, cfg.child_range("dir"))
++ BOOST_FOREACH(const config &dir, cfg.child_range("dir"))
+ {
+ if (dir["name"] == "LC_MESSAGES") {
+ config &language = campaign.add_child("translation");
+@@ -249,7 +249,7 @@
+ LOG_CS << "Encoding all stored addons. Number of addons: "
+ << std::distance(camps.first, camps.second) << '\n';
+
+- foreach (const config &cm, camps)
++ BOOST_FOREACH(const config &cm, camps)
+ {
+ LOG_CS << "Encoding " << cm["name"] << '\n';
+ std::string filename = cm["filename"], newfilename = filename + ".new";
+@@ -345,7 +345,7 @@
+ } catch(bad_lexical_cast) {}
+
+ std::string name = req["name"], lang = req["language"];
+- foreach (const config &i, campaigns().child_range("campaign"))
++ BOOST_FOREACH(const config &i, campaigns().child_range("campaign"))
+ {
+ if (!name.empty() && name != i["name"]) continue;
+ std::string tm = i["timestamp"];
+@@ -353,7 +353,7 @@
+ if (after_flag && (tm.empty() || lexical_cast_default<time_t>(tm, 0) <= after)) continue;
+ if (!lang.empty()) {
+ bool found = false;
+- foreach (const config &j, i.child_range("translation")) {
++ BOOST_FOREACH(const config &j, i.child_range("translation")) {
+ if (j["language"] == lang) {
+ found = true;
+ break;
+@@ -364,7 +364,7 @@
+ campaign_list.add_child("campaign", i);
+ }
+
+- foreach (config &j, campaign_list.child_range("campaign")) {
++ BOOST_FOREACH(config &j, campaign_list.child_range("campaign")) {
+ j["passphrase"] = t_string();
+ j["upload_ip"] = t_string();
+ j["email"] = t_string();
+@@ -402,7 +402,7 @@
+ std::string lc_name(name.size(), ' ');
+ std::transform(name.begin(), name.end(), lc_name.begin(), tolower);
+ config *campaign = NULL;
+- foreach (config &c, campaigns().child_range("campaign")) {
++ BOOST_FOREACH(config &c, campaigns().child_range("campaign")) {
+ if (utils::lowercase(c["name"]) == lc_name) {
+ campaign = &c;
+ break;
+Index: src/image_modifications.cpp
+===================================================================
+--- src/image_modifications.cpp (revision 54624)
++++ src/image_modifications.cpp (revision 54625)
+@@ -15,13 +15,14 @@
+
+ #include "color_range.hpp"
+ #include "config.hpp"
+-#include "foreach.hpp"
+ #include "game_config.hpp"
+ #include "image.hpp"
+ #include "image_modifications.hpp"
+ #include "log.hpp"
+ #include "serialization/string_utils.hpp"
+
++#include <boost/foreach.hpp>
++
+ #include <map>
+
+ #define GETTEXT_DOMAIN "wesnoth-lib"
+@@ -99,7 +100,7 @@
+ {
+ modification_queue mods;
+
+- foreach(const std::string& encoded_mod,
++ BOOST_FOREACH(const std::string& encoded_mod,
+ utils::parenthetical_split(encoded_mods, '~')) {
+ modification* mod = decode_modification(encoded_mod);
+
+Index: src/statistics.cpp
+===================================================================
+--- src/statistics.cpp (revision 54624)
++++ src/statistics.cpp (revision 54625)
+@@ -20,12 +20,13 @@
+
+ #include "global.hpp"
+ #include "statistics.hpp"
+-#include "foreach.hpp"
+ #include "log.hpp"
+ #include "serialization/binary_or_text.hpp"
+ #include "unit.hpp"
+ #include "util.hpp"
+
++#include <boost/foreach.hpp>
++
+ static lg::log_domain log_engine("engine");
+ #define DBG_NG LOG_STREAM(debug, log_engine)
+
+@@ -57,7 +58,7 @@
+ team_stats(),
+ scenario_name(cfg["scenario"])
+ {
+- foreach (const config &team, cfg.child_range("team")) {
++ BOOST_FOREACH(const config &team, cfg.child_range("team")) {
+ team_stats[team["save_id"]] = stats(team);
+ }
+ }
+@@ -121,7 +122,7 @@
+ static stats::str_int_map read_str_int_map(const config& cfg)
+ {
+ stats::str_int_map m;
+- foreach (const config::attribute &i, cfg.attribute_range()) {
++ BOOST_FOREACH(const config::attribute &i, cfg.attribute_range()) {
+ m[i.first] = i.second;
+ }
+
+@@ -159,7 +160,7 @@
+ static stats::battle_result_map read_battle_result_map(const config& cfg)
+ {
+ stats::battle_result_map m;
+- foreach (const config &i, cfg.child_range("sequence"))
++ BOOST_FOREACH(const config &i, cfg.child_range("sequence"))
+ {
+ config item = i;
+ int key = item["_num"];
+@@ -612,7 +613,7 @@
+ fresh_stats();
+ mid_scenario = cfg["mid_scenario"].to_bool();
+
+- foreach (const config &s, cfg.child_range("scenario")) {
++ BOOST_FOREACH(const config &s, cfg.child_range("scenario")) {
+ master_stats.push_back(scenario_stats(s));
+ }
+ }
+Index: src/tooltips.cpp
+===================================================================
+--- src/tooltips.cpp (revision 54624)
++++ src/tooltips.cpp (revision 54625)
+@@ -17,13 +17,14 @@
+ #include "tooltips.hpp"
+
+ #include "font.hpp"
+-#include "foreach.hpp"
+ #include "game_display.hpp"
+ #include "help.hpp"
+ #include "marked-up_text.hpp"
+ #include "resources.hpp"
+ #include "video.hpp"
+
++#include <boost/foreach.hpp>
++
+ namespace {
+
+ CVideo* video_ = NULL;
+@@ -172,7 +173,7 @@
+
+ bool click(int mousex, int mousey)
+ {
+- foreach(tooltip tip, tips) {
++ BOOST_FOREACH(tooltip tip, tips) {
+ if(!tip.action.empty() && point_in_rect(mousex, mousey, tip.rect)) {
+ display* disp = resources::screen;
+ help::show_help(*disp, tip.action);
+Index: src/server/ban.cpp
+===================================================================
+--- src/server/ban.cpp (revision 54624)
++++ src/server/ban.cpp (revision 54625)
+@@ -14,7 +14,6 @@
+ */
+
+ #include "config.hpp"
+-#include "foreach.hpp"
+ #include "log.hpp"
+ #include "filesystem.hpp"
+ #include "serialization/parser.hpp"
+@@ -24,7 +23,7 @@
+
+ #include "ban.hpp"
+
+-
++#include <boost/foreach.hpp>
+ #include <boost/bind.hpp>
+
+ namespace wesnothd {
+@@ -260,7 +259,7 @@
+ scoped_istream ban_file = istream_file(filename_);
+ read_gz(cfg, *ban_file);
+
+- foreach (const config &b, cfg.child_range("ban"))
++ BOOST_FOREACH(const config &b, cfg.child_range("ban"))
+ {
+ try {
+ banned_ptr new_ban(new banned(b));
+@@ -276,7 +275,7 @@
+ // load deleted too
+ if (const config &cfg_del = cfg.child("deleted"))
+ {
+- foreach (const config &b, cfg_del.child_range("ban"))
++ BOOST_FOREACH(const config &b, cfg_del.child_range("ban"))
+ {
+ try {
+ banned_ptr new_ban(new banned(b));
+@@ -680,7 +679,7 @@
+ void ban_manager::load_config(const config& cfg)
+ {
+ ban_times_.clear();
+- foreach (const config &bt, cfg.child_range("ban_time")) {
++ BOOST_FOREACH(const config &bt, cfg.child_range("ban_time")) {
+ time_t duration = 0;
+ if (parse_time(bt["time"], &duration)) {
+ ban_times_.insert(default_ban_times::value_type(bt["name"], duration));
+Index: src/server/server.cpp
+===================================================================
+--- src/server/server.cpp (revision 54624)
++++ src/server/server.cpp (revision 54625)
+@@ -23,7 +23,6 @@
+ #include "../global.hpp"
+
+ #include "../config.hpp"
+-#include "../foreach.hpp"
+ #include "../game_config.hpp"
+ #include "../log.hpp"
+ #include "../map.hpp" // gamemap::MAX_PLAYERS
+@@ -54,6 +53,7 @@
+ #include <boost/bind.hpp>
+ #include <boost/scoped_ptr.hpp>
+ #include <boost/scoped_array.hpp>
++#include <boost/foreach.hpp>
+ #include <boost/utility.hpp>
+ #include <algorithm>
+ #include <cassert>
+@@ -556,15 +556,15 @@
+ }
+
+ redirected_versions_.clear();
+- foreach (const config &redirect, cfg_.child_range("redirect")) {
+- foreach (const std::string &version, utils::split(redirect["version"])) {
++ BOOST_FOREACH(const config &redirect, cfg_.child_range("redirect")) {
++ BOOST_FOREACH(const std::string &version, utils::split(redirect["version"])) {
+ redirected_versions_[version] = redirect;
+ }
+ }
+
+ proxy_versions_.clear();
+- foreach (const config &proxy, cfg_.child_range("proxy")) {
+- foreach (const std::string &version, utils::split(proxy["version"])) {
++ BOOST_FOREACH(const config &proxy, cfg_.child_range("proxy")) {
++ BOOST_FOREACH(const std::string &version, utils::split(proxy["version"])) {
+ proxy_versions_[version] = proxy;
+ }
+ }
+@@ -704,7 +704,7 @@
+ simple_wml::document ping( strstr.str().c_str(),
+ simple_wml::INIT_COMPRESSED );
+ simple_wml::string_span s = ping.output_compressed();
+- foreach (network::connection sock, ghost_players_) {
++ BOOST_FOREACH(network::connection sock, ghost_players_) {
+ if (!lg::debug.dont_log(log_server)) {
+ wesnothd::player_map::const_iterator i = players_.find(sock);
+ if (i != players_.end()) {
+@@ -720,7 +720,7 @@
+ // Only a single thread should be accessing this
+ // Erase before we copy - speeds inserts
+ ghost_players_.clear();
+- foreach (const wesnothd::player_map::value_type v, players_) {
++ BOOST_FOREACH(const wesnothd::player_map::value_type v, players_) {
+ ghost_players_.insert(v.first);
+ }
+ last_ping_ = now;
+Index: src/server/room_manager.cpp
+===================================================================
+--- src/server/room_manager.cpp (revision 54624)
++++ src/server/room_manager.cpp (revision 54625)
+@@ -21,9 +21,10 @@
+ #include "../serialization/string_utils.hpp"
+ #include "../util.hpp"
+ #include "../filesystem.hpp"
+-#include "../foreach.hpp"
+ #include "../log.hpp"
+
++#include <boost/foreach.hpp>
++
+ static lg::log_domain log_server_lobby("server/lobby");
+ #define ERR_LOBBY LOG_STREAM(err, log_server_lobby)
+ #define WRN_LOBBY LOG_STREAM(warn, log_server_lobby)
+@@ -58,7 +59,7 @@
+ // this assumes the server is shutting down, so there's no need to
+ // send the actual room-quit messages to clients
+ write_rooms();
+- foreach (t_rooms_by_name_::value_type i, rooms_by_name_) {
++ BOOST_FOREACH(t_rooms_by_name_::value_type i, rooms_by_name_) {
+ delete i.second;
+ }
+ }
+@@ -97,7 +98,7 @@
+ read(cfg, *file);
+ }
+
+- foreach (const config &c, cfg.child_range("room")) {
++ BOOST_FOREACH(const config &c, cfg.child_range("room")) {
+ room* r(new room(c));
+ if (room_exists(r->name())) {
+ ERR_LOBBY << "Duplicate room ignored in stored rooms: "
+@@ -122,7 +123,7 @@
+ if (filename_.empty()) return;
+ LOG_LOBBY << "Writing rooms to " << filename_ << "\n";
+ config cfg;
+- foreach (const t_rooms_by_name_::value_type& v, rooms_by_name_) {
++ BOOST_FOREACH(const t_rooms_by_name_::value_type& v, rooms_by_name_) {
+ const room& r = *v.second;
+ if (r.persistent()) {
+ config& c = cfg.add_child("room");
+@@ -211,7 +212,7 @@
+
+ void room_manager::enter_lobby(const wesnothd::game &game)
+ {
+- foreach (network::connection player, game.all_game_users()) {
++ BOOST_FOREACH(network::connection player, game.all_game_users()) {
+ enter_lobby(player);
+ }
+ }
+@@ -225,7 +226,7 @@
+ store_player_rooms(player);
+ t_rooms_by_player_::iterator i = rooms_by_player_.find(player);
+ if (i != rooms_by_player_.end()) {
+- foreach (room* r, i->second) {
++ BOOST_FOREACH(room* r, i->second) {
+ r->remove_player(player);
+ }
+ }
+@@ -244,7 +245,7 @@
+ lobby_->remove_player(player);
+ t_rooms_by_player_::iterator i = rooms_by_player_.find(player);
+ if (i != rooms_by_player_.end()) {
+- foreach (room* r, i->second) {
++ BOOST_FOREACH(room* r, i->second) {
+ r->remove_player(player);
+ }
+ }
+@@ -315,7 +316,7 @@
+ t_player_stored_rooms_::iterator it =
+ player_stored_rooms_.insert(std::make_pair(player, std::set<std::string>())).first;
+ std::set<std::string>& store = it->second;
+- foreach (room* r, i->second) {
++ BOOST_FOREACH(room* r, i->second) {
+ store.insert(r->name());
+ }
+ }
+@@ -337,7 +338,7 @@
+ simple_wml::document doc;
+ simple_wml::node& join_msg = doc.root().add_child("room_join");
+ join_msg.set_attr_dup("player", user->second.name().c_str());
+- foreach (const std::string& room_name, it->second) {
++ BOOST_FOREACH(const std::string& room_name, it->second) {
+ room* r = get_create_room(room_name, user->first);
+ if (r == NULL) {
+ LOG_LOBBY << "Player " << user->second.name() << " unable to rejoin room " << room_name << "\n";
+@@ -528,7 +529,7 @@
+ void room_manager::fill_room_list(simple_wml::node& root)
+ {
+ simple_wml::node& rooms = root.add_child("rooms");
+- foreach (const t_rooms_by_name_::value_type& tr, rooms_by_name_) {
++ BOOST_FOREACH(const t_rooms_by_name_::value_type& tr, rooms_by_name_) {
+ const room& r = *tr.second;
+ simple_wml::node& room = rooms.add_child("room");
+ room.set_attr_dup("name", r.name().c_str());
+@@ -539,7 +540,7 @@
+ void room_manager::fill_member_list(const room* room, simple_wml::node& root)
+ {
+ simple_wml::node& members = root.add_child("members");
+- foreach (network::connection m, room->members()) {
++ BOOST_FOREACH(network::connection m, room->members()) {
+ simple_wml::node& member = members.add_child("member");
+ player_map::const_iterator mi = all_players_.find(m);
+ if (mi != all_players_.end()) {
+Index: src/variable.cpp
+===================================================================
+--- src/variable.cpp (revision 54624)
++++ src/variable.cpp (revision 54625)
+@@ -24,7 +24,6 @@
+
+ #include "variable.hpp"
+
+-#include "foreach.hpp"
+ #include "formula_string_utils.hpp"
+ #include "gamestatus.hpp"
+ #include "log.hpp"
+@@ -34,6 +33,7 @@
+ #include "team.hpp"
+
+ #include <boost/variant.hpp>
++#include <boost/foreach.hpp>
+
+ static lg::log_domain log_engine("engine");
+ #define LOG_NG LOG_STREAM(info, log_engine)
+@@ -233,11 +233,11 @@
+ {
+ config res;
+
+- foreach (const config::attribute &i, cfg_->attribute_range()) {
++ BOOST_FOREACH(const config::attribute &i, cfg_->attribute_range()) {
+ res[i.first] = expand(i.first);
+ }
+
+- foreach (const config::any_child &child, cfg_->all_children_range())
++ BOOST_FOREACH(const config::any_child &child, cfg_->all_children_range())
+ {
+ if (child.key == "insert_tag") {
+ vconfig insert_cfg(child.cfg);
+@@ -283,7 +283,7 @@
+ {
+ vconfig::child_list res;
+
+- foreach (const config::any_child &child, cfg_->all_children_range())
++ BOOST_FOREACH(const config::any_child &child, cfg_->all_children_range())
+ {
+ if (child.key == key) {
+ res.push_back(vconfig(&child.cfg, cache_key_));
+@@ -319,7 +319,7 @@
+ if (const config &natural = cfg_->child(key)) {
+ return vconfig(&natural, cache_key_);
+ }
+- foreach (const config &ins, cfg_->child_range("insert_tag"))
++ BOOST_FOREACH(const config &ins, cfg_->child_range("insert_tag"))
+ {
+ vconfig insert_cfg(ins);
+ if(insert_cfg["name"] == key) {
+@@ -339,7 +339,7 @@
+ if (cfg_->child(key)) {
+ return true;
+ }
+- foreach (const config &ins, cfg_->child_range("insert_tag"))
++ BOOST_FOREACH(const config &ins, cfg_->child_range("insert_tag"))
+ {
+ vconfig insert_cfg(ins);
+ if(insert_cfg["name"] == key) {
+@@ -475,7 +475,7 @@
+
+ config &scoped_wml_variable::store(const config &var_value)
+ {
+- foreach (const config &i, repos->get_variables().child_range(var_name_)) {
++ BOOST_FOREACH(const config &i, repos->get_variables().child_range(var_name_)) {
+ previous_val_.add_child(var_name_, i);
+ }
+ repos->clear_variable_cfg(var_name_);
+@@ -489,7 +489,7 @@
+ {
+ if(activated_) {
+ repos->clear_variable_cfg(var_name_);
+- foreach (const config &i, previous_val_.child_range(var_name_)) {
++ BOOST_FOREACH(const config &i, previous_val_.child_range(var_name_)) {
+ repos->add_variable_cfg(var_name_, i);
+ }
+ LOG_NG << "scoped_wml_variable: var_name \"" << var_name_ << "\" has been reverted.\n";
+Index: src/preferences_display.cpp
+===================================================================
+--- src/preferences_display.cpp (revision 54624)
++++ src/preferences_display.cpp (revision 54625)
+@@ -25,7 +25,6 @@
+
+ #include "construct_dialog.hpp"
+ #include "display.hpp"
+-#include "foreach.hpp"
+ #include "game_preferences.hpp"
+ #include "gettext.hpp"
+ #include "gui/dialogs/simple_item_selector.hpp"
+@@ -35,6 +34,8 @@
+ #include "marked-up_text.hpp"
+ #include "wml_separators.hpp"
+
++#include <boost/foreach.hpp>
++
+ namespace preferences {
+
+ display* disp = NULL;
+@@ -82,7 +83,7 @@
+ bpp = video.modePossible(resolution.first, resolution.second,
+ DefaultBPP, video_flags, true);
+
+- foreach (const res_t &res, res_list)
++ BOOST_FOREACH(const res_t &res, res_list)
+ {
+ if (bpp != 0) break;
+ std::cerr << "Video mode " << resolution.first << 'x'
+Index: src/hotkeys.cpp
+===================================================================
+--- src/hotkeys.cpp (revision 54624)
++++ src/hotkeys.cpp (revision 54625)
+@@ -19,7 +19,6 @@
+
+ #include "construct_dialog.hpp"
+ #include "display.hpp"
+-#include "foreach.hpp"
+ #include "hotkeys.hpp"
+ #include "game_end_exceptions.hpp"
+ #include "game_preferences.hpp"
+@@ -33,6 +32,8 @@
+ #include "wesconfig.h"
+ #include "wml_separators.hpp"
+
++#include <boost/foreach.hpp>
++
+ static lg::log_domain log_config("config");
+ #define ERR_G LOG_STREAM(err, lg::general)
+ #define LOG_G LOG_STREAM(info, lg::general)
+@@ -609,7 +610,7 @@
+
+ void load_hotkeys(const config& cfg)
+ {
+- foreach (const config &hk, cfg.child_range(hotkey_tag_name))
++ BOOST_FOREACH(const config &hk, cfg.child_range(hotkey_tag_name))
+ {
+ hotkey_item& h = get_hotkey(hk["command"]);
+ if(h.get_id() != HOTKEY_NULL) {
+Index: src/unit_display.cpp
+===================================================================
+--- src/unit_display.cpp (revision 54624)
++++ src/unit_display.cpp (revision 54625)
+@@ -18,7 +18,6 @@
+ #include "global.hpp"
+ #include "unit_display.hpp"
+
+-#include "foreach.hpp"
+ #include "game_preferences.hpp"
+ #include "game_events.hpp"
+ #include "log.hpp"
+@@ -26,6 +25,7 @@
+ #include "resources.hpp"
+ #include "terrain_filter.hpp"
+
++#include <boost/foreach.hpp>
+
+ #define LOG_DP LOG_STREAM(info, display)
+
+@@ -472,7 +472,7 @@
+ disp->display_unit_hex(healed_loc);
+ unit_animator animator;
+
+- foreach (unit *h, healers) {
++ BOOST_FOREACH(unit *h, healers) {
+ h->set_facing(h->get_location().get_relative_dir(healed_loc));
+ animator.add_animation(h, "healing", h->get_location(),
+ healed_loc, healing);
+Index: src/editor/map_fragment.cpp
+===================================================================
+--- src/editor/map_fragment.cpp (revision 54624)
++++ src/editor/map_fragment.cpp (revision 54625)
+@@ -16,9 +16,10 @@
+
+ #include "map_fragment.hpp"
+
+-#include "../foreach.hpp"
+ #include "util.hpp"
+
++#include <boost/foreach.hpp>
++
+ namespace editor {
+
+ map_fragment::map_fragment()
+@@ -44,7 +45,7 @@
+
+ void map_fragment::add_tiles(const gamemap& map, const std::set<map_location>& locs)
+ {
+- foreach (const map_location& loc, locs) {
++ BOOST_FOREACH(const map_location& loc, locs) {
+ add_tile(map, loc);
+ }
+ }
+@@ -57,7 +58,7 @@
+ std::set<map_location> map_fragment::get_offset_area(const map_location& loc) const
+ {
+ std::set<map_location> result;
+- foreach (const tile_info& i, items_) {
++ BOOST_FOREACH(const tile_info& i, items_) {
+ result.insert(i.offset.vector_sum(loc));
+ }
+ return result;
+@@ -65,14 +66,14 @@
+
+ void map_fragment::paste_into(gamemap& map, const map_location& loc) const
+ {
+- foreach (const tile_info& i, items_) {
++ BOOST_FOREACH(const tile_info& i, items_) {
+ map.set_terrain(i.offset.vector_sum(loc), i.terrain);
+ }
+ }
+
+ void map_fragment::shift(const map_location& offset)
+ {
+- foreach (tile_info& ti, items_) {
++ BOOST_FOREACH(tile_info& ti, items_) {
+ ti.offset.vector_sum_assign(offset);
+ }
+ }
+@@ -80,7 +81,7 @@
+ map_location map_fragment::center_of_mass() const
+ {
+ map_location sum(0, 0);
+- foreach (const tile_info& ti, items_) {
++ BOOST_FOREACH(const tile_info& ti, items_) {
+ sum.vector_sum_assign(ti.offset);
+ }
+ sum.x /= static_cast<int>(items_.size());
+@@ -92,7 +93,7 @@
+ {
+ shift(center_of_mass().vector_negation());
+ area_.clear();
+- foreach (tile_info& ti, items_) {
++ BOOST_FOREACH(tile_info& ti, items_) {
+ area_.insert(ti.offset);
+ }
+ }
+@@ -100,7 +101,7 @@
+ void map_fragment::rotate_60_cw()
+ {
+ area_.clear();
+- foreach (tile_info& ti, items_) {
++ BOOST_FOREACH(tile_info& ti, items_) {
+ map_location l(0,0);
+ int x = ti.offset.x;
+ int y = ti.offset.y;
+@@ -120,7 +121,7 @@
+ void map_fragment::rotate_60_ccw()
+ {
+ area_.clear();
+- foreach (tile_info& ti, items_) {
++ BOOST_FOREACH(tile_info& ti, items_) {
+ map_location l(0,0);
+ int x = ti.offset.x;
+ int y = ti.offset.y;
+@@ -139,7 +140,7 @@
+
+ void map_fragment::flip_horizontal()
+ {
+- foreach (tile_info& ti, items_) {
++ BOOST_FOREACH(tile_info& ti, items_) {
+ ti.offset.x = -ti.offset.x;
+ }
+ center_by_mass();
+@@ -147,7 +148,7 @@
+
+ void map_fragment::flip_vertical()
+ {
+- foreach (tile_info& ti, items_) {
++ BOOST_FOREACH(tile_info& ti, items_) {
+ ti.offset.y = -ti.offset.y;
+ if (ti.offset.x % 2) {
+ ti.offset.y--;
+@@ -166,11 +167,11 @@
+ {
+ std::stringstream ss;
+ ss << "MF: ";
+- foreach (const tile_info& ti, items_) {
++ BOOST_FOREACH(const tile_info& ti, items_) {
+ ss << "(" << ti.offset << ")";
+ }
+ ss << " -- ";
+- foreach (const map_location& loc, area_) {
++ BOOST_FOREACH(const map_location& loc, area_) {
+ ss << "(" << loc << ")";
+ }
+ return ss.str();
+Index: src/editor/action.cpp
+===================================================================
+--- src/editor/action.cpp (revision 54624)
++++ src/editor/action.cpp (revision 54625)
+@@ -21,10 +21,10 @@
+
+ #include "editor/action.hpp"
+ #include "editor/map_context.hpp"
+-#include "foreach.hpp"
+ #include "gettext.hpp"
+ #include "util.hpp"
+
++#include <boost/foreach.hpp>
+ namespace editor {
+
+ int editor_action::next_id_ = 1;
+@@ -75,25 +75,25 @@
+ editor_action_chain::editor_action_chain(const editor::editor_action_chain &other)
+ : editor_action(), actions_()
+ {
+- foreach (editor_action* a, other.actions_) {
++ BOOST_FOREACH(editor_action* a, other.actions_) {
+ actions_.push_back(a->clone());
+ }
+ }
+ editor_action_chain& editor_action_chain::operator=(const editor_action_chain& other)
+ {
+ if (this == &other) return *this;
+- foreach (editor_action* a, actions_) {
++ BOOST_FOREACH(editor_action* a, actions_) {
+ delete a;
+ }
+ actions_.clear();
+- foreach (editor_action* a, other.actions_) {
++ BOOST_FOREACH(editor_action* a, other.actions_) {
+ actions_.push_back(a->clone());
+ }
+ return *this;
+ }
+ editor_action_chain::~editor_action_chain()
+ {
+- foreach (editor_action* a, actions_) {
++ BOOST_FOREACH(editor_action* a, actions_) {
+ delete a;
+ }
+ }
+@@ -103,7 +103,7 @@
+ }
+ int editor_action_chain::action_count() const {
+ int count = 0;
+- foreach (const editor_action* a, actions_) {
++ BOOST_FOREACH(const editor_action* a, actions_) {
+ if (a) {
+ count += a->action_count();
+ }
+@@ -133,7 +133,7 @@
+ }
+ editor_action_chain* editor_action_chain::perform(map_context& mc) const {
+ util::unique_ptr<editor_action_chain> undo(new editor_action_chain());
+- foreach (editor_action* a, actions_) {
++ BOOST_FOREACH(editor_action* a, actions_) {
+ if (a != NULL) {
+ undo->append_action(a->perform(mc));
+ }
+@@ -143,7 +143,7 @@
+ }
+ void editor_action_chain::perform_without_undo(map_context& mc) const
+ {
+- foreach (editor_action* a, actions_) {
++ BOOST_FOREACH(editor_action* a, actions_) {
+ if (a != NULL) {
+ a->perform_without_undo(mc);
+ }
+@@ -257,7 +257,7 @@
+ }
+ void editor_action_select::extend(const editor_map& map, const std::set<map_location>& locs)
+ {
+- foreach (const map_location& loc, locs) {
++ BOOST_FOREACH(const map_location& loc, locs) {
+ LOG_ED << "Checking " << loc << "\n";
+ if (map.in_selection(loc)) {
+ LOG_ED << "Extending by " << loc << "\n";
+@@ -268,7 +268,7 @@
+ editor_action* editor_action_select::perform(map_context& mc) const
+ {
+ std::set<map_location> undo_locs;
+- foreach (const map_location& loc, area_) {
++ BOOST_FOREACH(const map_location& loc, area_) {
+ if (!mc.get_map().in_selection(loc)) {
+ undo_locs.insert(loc);
+ mc.add_changed_location(loc);
+@@ -279,7 +279,7 @@
+ }
+ void editor_action_select::perform_without_undo(map_context& mc) const
+ {
+- foreach (const map_location& loc, area_) {
++ BOOST_FOREACH(const map_location& loc, area_) {
+ mc.get_map().add_to_selection(loc);
+ mc.add_changed_location(loc);
+ }
+@@ -291,7 +291,7 @@
+ }
+ void editor_action_deselect::extend(const editor_map& map, const std::set<map_location>& locs)
+ {
+- foreach (const map_location& loc, locs) {
++ BOOST_FOREACH(const map_location& loc, locs) {
+ LOG_ED << "Checking " << loc << "\n";
+ if (!map.in_selection(loc)) {
+ LOG_ED << "Extending by " << loc << "\n";
+@@ -302,7 +302,7 @@
+ editor_action* editor_action_deselect::perform(map_context& mc) const
+ {
+ std::set<map_location> undo_locs;
+- foreach (const map_location& loc, area_) {
++ BOOST_FOREACH(const map_location& loc, area_) {
+ if (mc.get_map().in_selection(loc)) {
+ undo_locs.insert(loc);
+ mc.add_changed_location(loc);
+@@ -313,7 +313,7 @@
+ }
+ void editor_action_deselect::perform_without_undo(map_context& mc) const
+ {
+- foreach (const map_location& loc, area_) {
++ BOOST_FOREACH(const map_location& loc, area_) {
+ mc.get_map().remove_from_selection(loc);
+ mc.add_changed_location(loc);
+ }
+Index: src/editor/map_context.cpp
+===================================================================
+--- src/editor/map_context.cpp (revision 54624)
++++ src/editor/map_context.cpp (revision 54625)
+@@ -19,7 +19,6 @@
+
+ #include "../display.hpp"
+ #include "../filesystem.hpp"
+-#include "../foreach.hpp"
+ #include "../gettext.hpp"
+ #include "../map_exception.hpp"
+ #include "../map_label.hpp"
+@@ -28,6 +27,7 @@
+ #include "formula_string_utils.hpp"
+
+ #include <boost/regex.hpp>
++#include <boost/foreach.hpp>
+
+
+ namespace editor {
+@@ -146,7 +146,7 @@
+ if (!one_layer_only) {
+ terrain = map_.get_terrain_info(terrain).terrain_with_default_base();
+ }
+- foreach (const map_location& loc, locs) {
++ BOOST_FOREACH(const map_location& loc, locs) {
+ draw_terrain_actual(terrain, loc, one_layer_only);
+ }
+ }
+@@ -374,7 +374,7 @@
+
+ void map_context::clear_stack(action_stack& stack)
+ {
+- foreach (editor_action* a, stack) {
++ BOOST_FOREACH(editor_action* a, stack) {
+ delete a;
+ }
+ stack.clear();
+Index: src/editor/brush.cpp
+===================================================================
+--- src/editor/brush.cpp (revision 54624)
++++ src/editor/brush.cpp (revision 54625)
+@@ -17,9 +17,10 @@
+ #include "brush.hpp"
+ #include "editor_common.hpp"
+
+-#include "../foreach.hpp"
+ #include "../pathutils.hpp"
+
++#include <boost/foreach.hpp>
++
+ namespace editor {
+
+ /*WIKI
+@@ -74,11 +75,11 @@
+ if (radius > 0) {
+ std::vector<map_location> in_radius;
+ get_tiles_in_radius(map_location(0, 0), radius, in_radius);
+- foreach (map_location& loc, in_radius) {
++ BOOST_FOREACH(map_location& loc, in_radius) {
+ add_relative_location(loc.x, loc.y);
+ }
+ }
+- foreach (const config &relative, cfg.child_range("relative"))
++ BOOST_FOREACH(const config &relative, cfg.child_range("relative"))
+ {
+ int x = relative["x"];
+ int y = relative["y"];
+@@ -97,7 +98,7 @@
+ std::set<map_location> brush::project(const map_location& hotspot) const
+ {
+ std::set<map_location> result;
+- foreach (const map_location& relative, relative_tiles_) {
++ BOOST_FOREACH(const map_location& relative, relative_tiles_) {
+ result.insert(relative.vector_sum(hotspot));
+ }
+ return result;
+Index: src/editor/editor_map.cpp
+===================================================================
+--- src/editor/editor_map.cpp (revision 54624)
++++ src/editor/editor_map.cpp (revision 54625)
+@@ -20,12 +20,12 @@
+
+ #include "../display.hpp"
+ #include "../filesystem.hpp"
+-#include "../foreach.hpp"
+ #include "../gettext.hpp"
+ #include "../map_exception.hpp"
+ #include "../map_label.hpp"
+ #include "../wml_exception.hpp"
+
++#include <boost/foreach.hpp>
+
+ namespace editor {
+
+@@ -111,7 +111,7 @@
+ ++errors;
+ }
+ }
+- foreach (const map_location& loc, selection_) {
++ BOOST_FOREACH(const map_location& loc, selection_) {
+ if (!on_board_with_border(loc)) {
+ ERR_ED << "Off-map tile in selection: " << loc << "\n";
+ }
+Index: src/editor/editor_palettes.cpp
+===================================================================
+--- src/editor/editor_palettes.cpp (revision 54624)
++++ src/editor/editor_palettes.cpp (revision 54625)
+@@ -23,13 +23,14 @@
+ #include "editor_common.hpp"
+ #include "editor_palettes.hpp"
+
+-#include "../foreach.hpp"
+ #include "../gettext.hpp"
+ #include "../serialization/string_utils.hpp"
+ #include "../sound.hpp"
+ #include "../tooltips.hpp"
+ #include "../marked-up_text.hpp"
+
++#include <boost/foreach.hpp>
++
+ namespace {
+ static std::string selected_terrain;
+ }
+@@ -84,7 +85,7 @@
+
+ // Get the available groups and add them to the structure
+ std::set<std::string> group_names;
+- foreach (const config &g, cfg.child_range("editor_group"))
++ BOOST_FOREACH(const config &g, cfg.child_range("editor_group"))
+ {
+ if (group_names.find(g["id"]) == group_names.end()) {
+ terrain_groups_.push_back(terrain_group(g, gui));
+@@ -97,14 +98,14 @@
+ }
+ }
+ std::map<std::string, terrain_group*> id_to_group;
+- foreach (terrain_group& tg, terrain_groups_) {
++ BOOST_FOREACH(terrain_group& tg, terrain_groups_) {
+ id_to_group.insert(std::make_pair(tg.id, &tg));
+ }
+ // The rest of the code assumes this is a valid pointer
+ assert(checked_group_btn_ != 0);
+
+ // add the groups for all terrains to the map
+- foreach (const t_translation::t_terrain& t, terrains_) {
++ BOOST_FOREACH(const t_translation::t_terrain& t, terrains_) {
+ const terrain_type& t_info = map().get_terrain_info(t);
+ DBG_ED << "Palette: processing terrain " << t_info.name()
+ << "(editor name: '" << t_info.editor_name() << "') "
+@@ -119,7 +120,7 @@
+ // add the terrain to the requested groups
+ const std::vector<std::string>& keys = utils::split(t_info.editor_group());
+ bool core = false;
+- foreach (const std::string& k, keys) {
++ BOOST_FOREACH(const std::string& k, keys) {
+ terrain_map_[k].push_back(t);
+ nmax_terrains_ = std::max(nmax_terrains_, terrain_map_[k].size());
+ std::map<std::string, terrain_group*>::iterator i = id_to_group.find(k);
+@@ -380,7 +381,7 @@
+ scroll_down();
+ }
+
+- foreach (terrain_group& g, terrain_groups_) {
++ BOOST_FOREACH(terrain_group& g, terrain_groups_) {
+ if (g.button.pressed()) {
+ checked_group_btn_ = &g.button;
+ set_group(g.id);
+@@ -388,7 +389,7 @@
+ }
+ }
+
+- foreach (terrain_group& g, terrain_groups_) {
++ BOOST_FOREACH(terrain_group& g, terrain_groups_) {
+ if (&g.button == checked_group_btn_) {
+ g.button.set_check(true);
+ } else {
+Index: src/editor/editor_controller.cpp
+===================================================================
+--- src/editor/editor_controller.cpp (revision 54624)
++++ src/editor/editor_controller.cpp (revision 54625)
+@@ -32,7 +32,6 @@
+ #include "../clipboard.hpp"
+ #include "../filechooser.hpp"
+ #include "../filesystem.hpp"
+-#include "../foreach.hpp"
+ #include "../game_preferences.hpp"
+ #include "../gettext.hpp"
+ #include "../map_create.hpp"
+@@ -44,6 +43,7 @@
+ #include "formula_string_utils.hpp"
+
+ #include <boost/bind.hpp>
++#include <boost/foreach.hpp>
+
+ namespace {
+ static std::vector<std::string> saved_windows_;
+@@ -135,7 +135,7 @@
+ image::set_color_adjustment(preferences::editor::tod_r(), preferences::editor::tod_g(), preferences::editor::tod_b());
+ theme& theme = gui().get_theme();
+ const theme::menu* default_tool_menu = NULL;
+- foreach (const theme::menu& m, theme.menus()) {
++ BOOST_FOREACH(const theme::menu& m, theme.menus()) {
+ if (m.get_id() == "draw_button_editor") {
+ default_tool_menu = &m;
+ break;
+@@ -173,7 +173,7 @@
+
+ void editor_controller::init_brushes(const config& game_config)
+ {
+- foreach (const config &i, game_config.child_range("brush")) {
++ BOOST_FOREACH(const config &i, game_config.child_range("brush")) {
+ brushes_.push_back(brush(i));
+ }
+ if (brushes_.empty()) {
+@@ -196,7 +196,7 @@
+ new mouse_action_starting_position(key_)));
+ mouse_actions_.insert(std::make_pair(hotkey::HOTKEY_EDITOR_PASTE,
+ new mouse_action_paste(clipboard_, key_)));
+- foreach (const theme::menu& menu, gui().get_theme().menus()) {
++ BOOST_FOREACH(const theme::menu& menu, gui().get_theme().menus()) {
+ if (menu.items().size() == 1) {
+ hotkey::HOTKEY_COMMAND hk = hotkey::get_hotkey(menu.items().front()).get_id();
+ mouse_action_map::iterator i = mouse_actions_.find(hk);
+@@ -205,7 +205,7 @@
+ }
+ }
+ }
+- foreach (const config &c, game_config.child_range("editor_tool_hint")) {
++ BOOST_FOREACH(const config &c, game_config.child_range("editor_tool_hint")) {
+ mouse_action_map::iterator i =
+ mouse_actions_.find(hotkey::get_hotkey(c["id"]).get_id());
+ if (i != mouse_actions_.end()) {
+@@ -216,7 +216,7 @@
+
+ void editor_controller::init_map_generators(const config& game_config)
+ {
+- foreach (const config &i, game_config.child_range("multiplayer"))
++ BOOST_FOREACH(const config &i, game_config.child_range("multiplayer"))
+ {
+ if (i["map_generation"] == "default") {
+ const config &generator_cfg = i.child("generator");
+@@ -238,7 +238,7 @@
+ ERR_ED << "No editor time-of-day defined\n";
+ return;
+ }
+- foreach (const config &i, cfg.child_range("time")) {
++ BOOST_FOREACH(const config &i, cfg.child_range("time")) {
+ tods_.push_back(time_of_day(i));
+ }
+ }
+@@ -250,7 +250,7 @@
+ ERR_ED << "No editor music defined\n";
+ return;
+ }
+- foreach (const config &i, cfg.child_range("music")) {
++ BOOST_FOREACH(const config &i, cfg.child_range("music")) {
+ sound::play_music_config(i);
+ }
+ sound::commit_music_changes();
+@@ -265,13 +265,13 @@
+
+ editor_controller::~editor_controller()
+ {
+- foreach (const mouse_action_map::value_type a, mouse_actions_) {
++ BOOST_FOREACH(const mouse_action_map::value_type a, mouse_actions_) {
+ delete a.second;
+ }
+- foreach (map_generator* m, map_generators_) {
++ BOOST_FOREACH(map_generator* m, map_generators_) {
+ delete m;
+ }
+- foreach (map_context* mc, map_contexts_) {
++ BOOST_FOREACH(map_context* mc, map_contexts_) {
+ delete mc;
+ }
+ }
+@@ -303,7 +303,7 @@
+ void editor_controller::quit_confirm(EXIT_STATUS mode)
+ {
+ std::vector<std::string> modified;
+- foreach (map_context* mc, map_contexts_) {
++ BOOST_FOREACH(map_context* mc, map_contexts_) {
+ if (mc->modified()) {
+ if (!mc->get_filename().empty()) {
+ modified.push_back(mc->get_filename());
+@@ -319,7 +319,7 @@
+ message = _("Do you really want to quit? Changes in the map since the last save will be lost.");
+ } else {
+ message = _("Do you really want to quit? The following maps were modified and all changes since the last save will be lost:");
+- foreach (std::string& str, modified) {
++ BOOST_FOREACH(std::string& str, modified) {
+ message += "\n" + str;
+ }
+ }
+@@ -342,7 +342,7 @@
+ map_context* mc = new map_context(editor_map(game_config_, 44, 33, t_translation::GRASS_LAND));
+ add_map_context(mc);
+ } else {
+- foreach(const std::string& filename, saved_windows_) {
++ BOOST_FOREACH(const std::string& filename, saved_windows_) {
+ map_context* mc = new map_context(game_config_, filename);
+ add_map_context(mc);
+ }
+@@ -796,7 +796,7 @@
+ get_map_context().set_needs_terrain_rebuild(false);
+ gui().invalidate_all();
+ } else {
+- foreach (const map_location& loc, changed_locs) {
++ BOOST_FOREACH(const map_location& loc, changed_locs) {
+ gui().rebuild_terrain(loc);
+ }
+ gui().invalidate(changed_locs);
+@@ -1290,7 +1290,7 @@
+
+ void editor_controller::redraw_toolbar()
+ {
+- foreach (mouse_action_map::value_type a, mouse_actions_) {
++ BOOST_FOREACH(mouse_action_map::value_type a, mouse_actions_) {
+ if (a.second->toolbar_button() != NULL) {
+ SDL_Rect r = a.second->toolbar_button()->location(gui().screen_area());
+ SDL_Rect outline = create_rect(r.x - 2, r.y - 2, r.h + 4, r.w + 4);
+Index: src/formula.cpp
+===================================================================
+--- src/formula.cpp (revision 54624)
++++ src/formula.cpp (revision 54625)
+@@ -17,11 +17,12 @@
+ #include <set>
+ #include <sstream>
+
+-#include "foreach.hpp"
+ #include "formula_callable.hpp"
+ #include "formula_function.hpp"
+ #include "map_utils.hpp"
+
++#include <boost/foreach.hpp>
++
+ namespace game_logic
+ {
+
+@@ -117,7 +118,7 @@
+ std::stringstream s;
+ s << '[';
+ bool first_item = true;
+- foreach(expression_ptr a , items_) {
++ BOOST_FOREACH(expression_ptr a , items_) {
+ if (!first_item) {
+ s << ',';
+ } else {
+@@ -468,7 +469,7 @@
+ std::stringstream s;
+ s << "{where:(";
+ s << body_->str();
+- foreach (const expr_table::value_type &a, *clauses_) {
++ BOOST_FOREACH(const expr_table::value_type &a, *clauses_) {
+ s << ", [" << a.first << "] -> ["<< a.second->str()<<"]";
+ }
+ s << ")}";
+Index: src/mouse_events.cpp
+===================================================================
+--- src/mouse_events.cpp (revision 54624)
++++ src/mouse_events.cpp (revision 54625)
+@@ -21,7 +21,6 @@
+ #include "actions.hpp"
+ #include "attack_prediction_display.hpp"
+ #include "dialogs.hpp"
+-#include "foreach.hpp"
+ #include "game_end_exceptions.hpp"
+ #include "game_events.hpp"
+ #include "gettext.hpp"
+@@ -45,6 +44,7 @@
+ #include "whiteboard/manager.hpp"
+
+ #include <boost/bind.hpp>
++#include <boost/foreach.hpp>
+
+ static lg::log_domain log_engine("engine");
+ #define ERR_NG LOG_STREAM(err, log_engine)
+@@ -1048,7 +1048,7 @@
+
+ map_location adj[6];
+ get_adjacent_tiles(loc, adj);
+- foreach (const map_location &aloc, adj) {
++ BOOST_FOREACH(const map_location &aloc, adj) {
+ unit_map::const_iterator i = find_unit(aloc);
+ if (i != units_.end() && uteam.is_enemy(i->side()))
+ res.insert(aloc);
+@@ -1063,7 +1063,7 @@
+
+ map_location adj[6];
+ get_adjacent_tiles(u->get_location(), adj);
+- foreach (const map_location &loc, adj)
++ BOOST_FOREACH(const map_location &loc, adj)
+ {
+ if (!map_.on_board(loc)) continue;
+ unit_map::const_iterator i = units_.find(loc);
+Index: src/multiplayer_connect.cpp
+===================================================================
+--- src/multiplayer_connect.cpp (revision 54624)
++++ src/multiplayer_connect.cpp (revision 54625)
+@@ -23,7 +23,6 @@
+
+ #include "ai/configuration.hpp"
+ #include "dialogs.hpp"
+-#include "foreach.hpp"
+ #include "game_display.hpp"
+ #include "game_preferences.hpp"
+ #include "gettext.hpp"
+@@ -39,6 +38,7 @@
+ #include "wml_exception.hpp"
+
+ #include <boost/bind.hpp>
++#include <boost/foreach.hpp>
+
+ static lg::log_domain log_network("network");
+ #define LOG_NW LOG_STREAM(info, log_network)
+@@ -189,7 +189,7 @@
+ // Hack: if there is a unit which can recruit, use it as a leader.
+ // Necessary to display leader information when loading saves.
+ std::string leader_type;
+- foreach (const config &side_unit, cfg.child_range("unit"))
++ BOOST_FOREACH(const config &side_unit, cfg.child_range("unit"))
+ {
+ if (side_unit["canrecruit"].to_bool()) {
+ leader_type = side_unit["type"].str();
+@@ -539,7 +539,7 @@
+ std::vector<ai::description*> &ais_list = parent_->ai_algorithms_;
+ std::vector<std::string> ais;
+ int i = 0;
+- foreach (const ai::description *desc, ais_list){
++ BOOST_FOREACH(const ai::description *desc, ais_list){
+ ais.push_back(desc->text);
+ if (desc->id==ai_algorithm_){
+ sel = i;
+@@ -557,7 +557,7 @@
+ void connect::side::update_faction_combo()
+ {
+ std::vector<std::string> factions;
+- foreach (const config *faction, parent_->era_sides_)
++ BOOST_FOREACH(const config *faction, parent_->era_sides_)
+ {
+ const std::string& name = (*faction)["name"];
+ const std::string& icon = (*faction)["image"];
+@@ -724,7 +724,7 @@
+ static char const *attrs[] = { "side", "controller", "id",
+ "team_name", "user_team_name", "color", "colour", "gold",
+ "income", "allow_changes" };
+- foreach (const char *attr, attrs) {
++ BOOST_FOREACH(const char *attr, attrs) {
+ trimmed.remove_attribute(attr);
+ }
+
+@@ -827,8 +827,8 @@
+ {
+ std::map<std::string, config> children;
+
+- foreach(const std::string& children_to_swap, get_children_to_swap())
+- foreach(const config& child, cfg_.child_range(children_to_swap))
++ BOOST_FOREACH(const std::string& children_to_swap, get_children_to_swap())
++ BOOST_FOREACH(const config& child, cfg_.child_range(children_to_swap))
+ children.insert(std::pair<std::string, config>(children_to_swap, child));
+
+ return children;
+@@ -836,12 +836,12 @@
+
+ void connect::side::set_side_children(std::map<std::string, config> children)
+ {
+- foreach(const std::string& children_to_remove, get_children_to_swap())
++ BOOST_FOREACH(const std::string& children_to_remove, get_children_to_swap())
+ cfg_.clear_children(children_to_remove);
+
+ std::pair<std::string, config> child_map;
+
+- foreach(child_map, children)
++ BOOST_FOREACH(child_map, children)
+ cfg_.add_child(child_map.first, child_map.second);
+ }
+
+@@ -920,7 +920,7 @@
+ // Builds the list of sides eligible for choice (nonrandom factions)
+ std::vector<int> nonrandom_sides;
+ int num = -1;
+- foreach (const config *i, parent_->era_sides_)
++ BOOST_FOREACH(const config *i, parent_->era_sides_)
+ {
+ ++num;
+ if (!(*i)["random_faction"].to_bool()) {
+@@ -1524,7 +1524,7 @@
+ player_types_.push_back(_("Computer Player"));
+ player_types_.push_back(_("Empty"));
+
+- foreach (const config *faction, era_sides_) {
++ BOOST_FOREACH(const config *faction, era_sides_) {
+ player_factions_.push_back((*faction)["name"]);
+ }
+
+@@ -1539,7 +1539,7 @@
+ // Teams
+ if(params_.use_map_settings) {
+ int side_num = 1;
+- foreach (config &side, sides)
++ BOOST_FOREACH(config &side, sides)
+ {
+ config::attribute_value &team_name = side["team_name"];
+ config::attribute_value &user_team_name = side["user_team_name"];
+@@ -1566,7 +1566,7 @@
+ } else {
+ std::vector<std::string> map_team_names;
+ int _side_num = 1;
+- foreach (config &side, sides)
++ BOOST_FOREACH(config &side, sides)
+ {
+ const std::string side_num = lexical_cast<std::string>(_side_num);
+ config::attribute_value &team_name = side["team_name"];
+@@ -1599,7 +1599,7 @@
+
+ // Populates "sides_" from the level configuration
+ int index = 0;
+- foreach (const config &s, sides) {
++ BOOST_FOREACH(const config &s, sides) {
+ sides_.push_back(side(*this, s, index++));
+ }
+ int offset=0;
+@@ -1683,7 +1683,7 @@
+ else
+ {
+ era_sides_.clear();
+- foreach (const config &e, era_cfg.child_range("multiplayer_side")) {
++ BOOST_FOREACH(const config &e, era_cfg.child_range("multiplayer_side")) {
+ era_sides_.push_back(&e);
+ }
+ level_.add_child("era", era_cfg);
+@@ -1789,7 +1789,7 @@
+ * creative in what is used in multiplayer [1] so use a simpler test now.
+ * [1] http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=568029
+ */
+- foreach(const side& s, sides_) {
++ BOOST_FOREACH(const side& s, sides_) {
+ if(s.get_controller() != CNTR_EMPTY) {
+ if(s.allow_player()) {
+ return true;
+
+------------------------------------------------------------------------
diff --git a/community/wt/PKGBUILD b/community/wt/PKGBUILD
index 187653a5b..819a161ba 100644
--- a/community/wt/PKGBUILD
+++ b/community/wt/PKGBUILD
@@ -1,10 +1,12 @@
-# $Id: PKGBUILD 71521 2012-05-28 07:37:34Z svenstaro $
+# $Id: PKGBUILD 74015 2012-07-18 01:09:31Z ibiru $
# Maintainer: Sergej Pupykin <pupykin.s+arch@gmail.com>
+# Maintainer: Sven-Hendrik Haase <sh@lutzhaase.com>
# Contributor: Denis Martinez <deuns.martinez@gmail.com>
pkgname=wt
-pkgver=3.2.1
-pkgrel=3
+pkgver=3.2.2rc2
+_pkgver=3.2.2-rc2
+pkgrel=1
pkgdesc="a C++ library and application server for developing and deploying web applications"
arch=('i686' 'x86_64')
url="http://www.webtoolkit.eu/"
@@ -23,22 +25,32 @@ optdepends=('openssl: for SSL support in built-in webserver'
'mysql++: for the hangman example'
'qt: for the Wt/Qt interopability example (wtwithqt)')
backup=('etc/wt/wt_config.xml')
-source=(http://downloads.sourceforge.net/witty/$pkgname-${pkgver}.tar.gz)
-md5sums=('92b729e1ddce99e961b3c86653688173')
+source=(http://downloads.sourceforge.net/witty/$pkgname-${_pkgver}.tar.gz)
+md5sums=('015ab2b8c6bada0f801057e3f126e365')
build() {
- cd ${srcdir}/${pkgname}-${pkgver}
+ cd ${srcdir}/${pkgname}-${_pkgver}
+
mkdir -p build
cd build
- cmake -DCONNECTOR_HTTP=ON -DCMAKE_INSTALL_PREFIX=/usr \
- -DWEBUSER=http -DWEBGROUP=http -DRUNDIR=/var/run/wt -DDEPLOYROOT=/var/www/wt \
- -DUSE_SYSTEM_SQLITE3=ON -DCMAKE_EXE_LINKER_FLAGS="-lboost_random" \
- -DWT_CMAKE_FINDER_INSTALL_DIR="share/cmake-2.8/Modules" -DINSTALL_EXAMPLES=ON ..
+ cmake \
+ -DCONNECTOR_HTTP=ON \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_EXE_LINKER_FLAGS="-lboost_random" \
+ -DWEBUSER=http \
+ -DWEBGROUP=http \
+ -DUSE_SYSTEM_SQLITE3=ON \
+ -DINSTALL_EXAMPLES=ON \
+ ..
make
}
package() {
- cd ${srcdir}/${pkgname}-${pkgver}/build
+ cd ${srcdir}/${pkgname}-${_pkgver}/build
make DESTDIR=${pkgdir} install
+
+ mkdir -p ${pkgdir}/usr/share/cmake-2.8/Modules
+ mv ${pkgdir}/usr/cmake/FindWt.cmake ${pkgdir}/usr/share/cmake-2.8/Modules/
+ rm -r ${pkgdir}/usr/cmake
rm -rf $pkgdir/var/run
}
diff --git a/core/coreutils/0001-ls-color-each-symlink-to-relative-name-in-properly.patch b/core/coreutils/0001-ls-color-each-symlink-to-relative-name-in-properly.patch
new file mode 100644
index 000000000..087b87cdb
--- /dev/null
+++ b/core/coreutils/0001-ls-color-each-symlink-to-relative-name-in-properly.patch
@@ -0,0 +1,135 @@
+From 6124a3842dfa8484b52e067a8ab8105c3875a4f7 Mon Sep 17 00:00:00 2001
+From: Jim Meyering <meyering@redhat.com>
+Date: Thu, 10 May 2012 19:43:00 +0200
+Subject: [PATCH] ls: color each symlink-to-relative-name in / properly
+
+In order for ls --color to color each symlink, it must form the name
+of each referent and then stat it to see if the link is dangling, to
+a directory, to a file, etc. When the symlink is to a relative name,
+ls must concatenate the starting directory name and that relative name.
+When, in addition, the starting directory was "/" or "/some-name",
+the result was ill-formed, and the subsequent stat would usually fail,
+making the caller color it as a dangling symlink.
+* src/ls.c (make_link_name): Don't botch the case in which
+dir_name(NAME) == "/" and LINKNAME is relative.
+* tests/ls/root-rel-symlink-color: New file. Test for the above.
+* tests/Makefile.am (TESTS): Add it.
+* NEWS (Bug fixes): Mention it.
+Reported by Mike Frysinger in http://bugs.gnu.org/11453
+Bug introduced by commit v8.16-23-gbcb9078.
+---
+ NEWS | 5 ++++
+ src/ls.c | 9 +++++++-
+ tests/Makefile.am | 1 +
+ tests/ls/root-rel-symlink-color | 51 +++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 65 insertions(+), 1 deletion(-)
+ create mode 100755 tests/ls/root-rel-symlink-color
+
+diff --git a/NEWS b/NEWS
+index 6c620b3..f9e9c70 100644
+--- a/NEWS
++++ b/NEWS
+@@ -2,6 +2,11 @@ GNU coreutils NEWS -*- outline -*-
+
+ * Noteworthy changes in release ?.? (????-??-??) [?]
+
++** Bug fixes
++
++ ls --color would mis-color relative-named symlinks in /
++ [bug introduced in coreutils-8.17]
++
+
+ * Noteworthy changes in release 8.17 (2012-05-10) [stable]
+
+diff --git a/src/ls.c b/src/ls.c
+index 397e4ea..9494ae9 100644
+--- a/src/ls.c
++++ b/src/ls.c
+@@ -3213,7 +3213,14 @@ make_link_name (char const *name, char const *linkname)
+ return xstrdup (linkname);
+
+ char *p = xmalloc (prefix_len + 1 + strlen (linkname) + 1);
+- stpcpy (stpncpy (p, name, prefix_len + 1), linkname);
++
++ /* PREFIX_LEN usually specifies a string not ending in slash.
++ In that case, extend it by one, since the next byte *is* a slash.
++ Otherwise, the prefix is "/", so leave the length unchanged. */
++ if ( ! ISSLASH (name[prefix_len - 1]))
++ ++prefix_len;
++
++ stpcpy (stpncpy (p, name, prefix_len), linkname);
+ return p;
+ }
+
+diff --git a/tests/Makefile.am b/tests/Makefile.am
+index a4370a6..0bafc5f 100644
+--- a/tests/Makefile.am
++++ b/tests/Makefile.am
+@@ -449,6 +449,7 @@ TESTS = \
+ ls/proc-selinux-segfault \
+ ls/readdir-mountpoint-inode \
+ ls/recursive \
++ ls/root-rel-symlink-color \
+ ls/rt-1 \
+ ls/slink-acl \
+ ls/stat-dtype \
+diff --git a/tests/ls/root-rel-symlink-color b/tests/ls/root-rel-symlink-color
+new file mode 100755
+index 0000000..d795432
+--- /dev/null
++++ b/tests/ls/root-rel-symlink-color
+@@ -0,0 +1,51 @@
++#!/bin/sh
++# Exercise the 8.17 ls bug with coloring relative-named symlinks in "/".
++
++# Copyright (C) 2012 Free Software Foundation, Inc.
++
++# 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, either version 3 of the License, or
++# (at your option) any later version.
++
++# 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, see <http://www.gnu.org/licenses/>.
++
++. "${srcdir=.}/init.sh"; path_prepend_ ../src
++print_ver_ ls
++
++symlink_to_rel=
++for i in /*; do
++ # Skip non-symlinks:
++ env test -h "$i" || continue
++
++ # Skip dangling symlinks:
++ env test -e "$i" || continue
++
++ # Skip any symlink-to-absolute-name:
++ case $(readlink "$i") in /*) continue ;; esac
++
++ symlink_to_rel=$i
++ break
++done
++
++test -z "$symlink_to_rel" \
++ && skip_ no relative symlink in /
++
++e='\33'
++color_code='01;36'
++c_pre="$e[0m$e[${color_code}m"
++c_post="$e[0m"
++printf "$c_pre$symlink_to_rel$c_post\n" > exp || framework_failure_
++
++env TERM=xterm LS_COLORS="ln=$color_code:or=1;31;42" \
++ ls -d --color=always "$symlink_to_rel" > out || fail=1
++
++compare exp out || fail=1
++
++Exit $fail
+--
+1.7.11.2
+
diff --git a/core/coreutils/PKGBUILD b/core/coreutils/PKGBUILD
index 8c1bd135b..f83225f9f 100644
--- a/core/coreutils/PKGBUILD
+++ b/core/coreutils/PKGBUILD
@@ -1,10 +1,10 @@
-# $Id: PKGBUILD 158980 2012-05-14 04:41:15Z allan $
+# $Id: PKGBUILD 163714 2012-07-18 02:16:52Z dreisner $
# Maintainer: Allan McRae <allan@archlinux.org>
# Contributor: judd <jvinet@zeroflux.org>
pkgname=coreutils
pkgver=8.17
-pkgrel=1
+pkgrel=3
pkgdesc="The basic file, shell and text manipulation utilities of the GNU operating system"
arch=('i686' 'x86_64')
license=('GPL3')
@@ -17,10 +17,12 @@ install=${pkgname}.install
options=('!emptydirs')
source=(ftp://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.xz{,.sig}
coreutils-pam.patch
+ 0001-ls-color-each-symlink-to-relative-name-in-properly.patch
su.pam)
md5sums=('bbda656ce8ca2c6903948f9faa204ba3'
'ebecd29b095aa21b0b2f833f1ec20d70'
'aad79a2aa6d566c375d7bdd1b0767278'
+ 'd7c691898a695a6284a927e6a9426fe4'
'fa85e5cce5d723275b14365ba71a8aad')
build() {
@@ -29,6 +31,10 @@ build() {
# added su wheel group pam patch (from fedora git)
patch -Np1 -i ${srcdir}/coreutils-pam.patch
+ # fix coloring for symlinks in /
+ # upstream commit 6124a3842dfa8484b52e067a8ab8105c3875a4f7
+ patch -Np1 -i $srcdir/0001-ls-color-each-symlink-to-relative-name-in-properly.patch
+
autoreconf -v
./configure --prefix=/usr --libexecdir=/usr/lib/coreutils \
--enable-install-program=su \
@@ -45,18 +51,15 @@ check() {
package() {
cd ${srcdir}/${pkgname}-${pkgver}
make DESTDIR=${pkgdir} install
-
+
cd ${pkgdir}/usr/bin
install -dm755 ${pkgdir}/{bin,usr/sbin}
-
+
# binaries required by FHS
_fhs=('cat' 'chgrp' 'chmod' 'chown' 'cp' 'date' 'dd' 'df' 'echo' 'false'
'ln' 'ls' 'mkdir' 'mknod' 'mv' 'pwd' 'rm' 'rmdir' 'stty' 'su' 'sync'
'true' 'uname')
mv ${_fhs[@]} ${pkgdir}/bin
-
- # makepkg uses the full path to this...
- ln -s /usr/bin/du ${pkgdir}/bin/du
mv chroot ${pkgdir}/usr/sbin
install -Dm644 ${srcdir}/su.pam ${pkgdir}/etc/pam.d/su
diff --git a/core/gpm/PKGBUILD b/core/gpm/PKGBUILD
index 26f471584..eae4b2a23 100644
--- a/core/gpm/PKGBUILD
+++ b/core/gpm/PKGBUILD
@@ -1,9 +1,9 @@
-# $Id: PKGBUILD 160239 2012-05-31 14:53:52Z eric $
+# $Id: PKGBUILD 163618 2012-07-17 05:32:49Z eric $
# Maintainer: Eric Bélanger <eric@archlinux.org>
pkgname=gpm
pkgver=1.20.6
-pkgrel=8
+pkgrel=10
pkgdesc="A mouse server for the console and xterm"
arch=('i686' 'x86_64')
url="http://www.nico.schottelius.org/software/gpm/"
@@ -18,7 +18,7 @@ sha1sums=('4677da0eb2f1910a5a744bbefa08fea82e0dca0c'
'19e1feb1493373512a77801699df012d186336ea'
'4c31cb7dd51cee4d16d3f7a8956e6d87fac1ad86'
'88fe5ff10916c68a87abc8418a56eb0073f69fa9'
- '2db35b5f587b8dd21f9943610e7dd70469f888c7')
+ '20b92360f0ad38a2032fcae37bdbd01b31e43f77')
build() {
cd "${srcdir}/${pkgname}-${pkgver}"
diff --git a/core/gpm/gpm.service b/core/gpm/gpm.service
index 3e52af729..59e837d80 100644
--- a/core/gpm/gpm.service
+++ b/core/gpm/gpm.service
@@ -1,6 +1,9 @@
[Unit]
-Description=GPM daemon
+Description=Virtual console mouse server
[Service]
Type=forking
-ExecStart=/usr/sbin/gpm
+ExecStart=/usr/sbin/gpm -m /dev/input/mice -t imps2
+
+[Install]
+WantedBy=multi-user.target
diff --git a/core/grep/PKGBUILD b/core/grep/PKGBUILD
index ee30e4262..b878e71d8 100644
--- a/core/grep/PKGBUILD
+++ b/core/grep/PKGBUILD
@@ -1,10 +1,10 @@
-# $Id: PKGBUILD 163012 2012-07-05 13:49:01Z allan $
+# $Id: PKGBUILD 163715 2012-07-18 02:16:59Z dreisner $
# Maintainer: Allan McRae <allan@archlinux.org>
# Contributor: judd <jvinet@zeroflux.org>
pkgname=grep
pkgver=2.13
-pkgrel=1
+pkgrel=2
pkgdesc="A string search utility"
arch=('i686' 'x86_64')
license=('GPL3')
@@ -31,7 +31,4 @@ check() {
package() {
cd ${srcdir}/${pkgname}-${pkgver}
make DESTDIR=${pkgdir} install
-
- install -dm755 ${pkgdir}/bin
- ln -s /usr/bin/grep ${pkgdir}/bin/grep
}
diff --git a/core/kbd/PKGBUILD b/core/kbd/PKGBUILD
index efe8d3ede..cfb6b3dbf 100644
--- a/core/kbd/PKGBUILD
+++ b/core/kbd/PKGBUILD
@@ -1,9 +1,9 @@
-# $Id: PKGBUILD 141105 2011-10-24 06:35:43Z tpowa $
+# $Id: PKGBUILD 163716 2012-07-18 02:17:05Z dreisner $
# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
pkgname=kbd
pkgver=1.15.3
-pkgrel=2
+pkgrel=3
pkgdesc="Keytable files and keyboard utilities"
arch=('i686' 'x86_64')
url="ftp://ftp.altlinux.org/pub/people/legion/kbd/"
@@ -35,10 +35,4 @@ build() {
package() {
cd ${srcdir}/${pkgname}-${pkgver}
make KEYCODES_PROGS=yes RESIZECONS_PROGS=yes DESTDIR=${pkgdir} install
-
- # this is needed because initscripts call /bin/loadkeys
- # remove this when next versions of kbd
- # and initscripts with /usr/bin/loadkeys usage will be released
- mkdir ${pkgdir}/bin
- ln -s /usr/bin/loadkeys ${pkgdir}/bin/loadkeys
}
diff --git a/extra/akonadi/PKGBUILD b/extra/akonadi/PKGBUILD
index 77e51d5ba..24c4fada7 100644
--- a/extra/akonadi/PKGBUILD
+++ b/extra/akonadi/PKGBUILD
@@ -1,10 +1,10 @@
-# $Id: PKGBUILD 155962 2012-04-10 08:20:47Z andrea $
+# $Id: PKGBUILD 163701 2012-07-18 01:04:54Z ibiru $
# Maintainer: Andrea Scarpino <andrea@archlinux.org>
# Contributor: Pierre Schmitz <pierre@archlinux.de>
pkgname=akonadi
pkgver=1.7.2
-pkgrel=1
+pkgrel=2
pkgdesc="PIM layer, which provides an asynchronous API to access all kind of PIM data"
arch=('i686' 'x86_64')
url='http://pim.kde.org/akonadi'
diff --git a/extra/avogadro/PKGBUILD b/extra/avogadro/PKGBUILD
index 5471577cb..a1124e1d6 100644
--- a/extra/avogadro/PKGBUILD
+++ b/extra/avogadro/PKGBUILD
@@ -1,11 +1,11 @@
-# $Id: PKGBUILD 152200 2012-03-05 08:55:44Z ibiru $
+# $Id: PKGBUILD 163702 2012-07-18 01:05:05Z ibiru $
# Maintainer:
# Contributor: Andrea Scarpino <andrea@archlinux.org>
# Contributor: Nick B <Shirakawasuna at gmail _dot_com>
pkgname=avogadro
pkgver=1.0.3
-pkgrel=5
+pkgrel=6
pkgdesc="An advanced molecular editor based on Qt"
arch=('i686' 'x86_64')
url="http://avogadro.openmolecules.net/wiki/Main_Page"
diff --git a/extra/boost/PKGBUILD b/extra/boost/PKGBUILD
index 69cc11389..885ec928a 100644
--- a/extra/boost/PKGBUILD
+++ b/extra/boost/PKGBUILD
@@ -1,4 +1,4 @@
-# $Id: PKGBUILD 163071 2012-07-06 15:49:36Z ibiru $
+# $Id: PKGBUILD 163703 2012-07-18 01:05:09Z ibiru $
# Maintainer: kevin <kevin@archlinux.org>
# Contributor: Giovanni Scafora <giovanni@archlinux.org>
# Contributor: Kritoke <kritoke@gamebox.net>
diff --git a/extra/ekiga/PKGBUILD b/extra/ekiga/PKGBUILD
index 9fd3f8808..1d5242d33 100644
--- a/extra/ekiga/PKGBUILD
+++ b/extra/ekiga/PKGBUILD
@@ -1,10 +1,10 @@
-# $Id: PKGBUILD 163146 2012-07-08 09:30:55Z ibiru $
+# $Id: PKGBUILD 163704 2012-07-18 01:05:16Z ibiru $
# Maintainer: Jan de Groot <jgc@archlinux.org>
# Contributor: Tom K <tomk@runbox.com>
pkgname=ekiga
pkgver=3.3.2
-pkgrel=5
+pkgrel=6
pkgdesc="VOIP/Videoconferencing app with full SIP and H.323 support (GnomeMeeting expanded and renamed)"
url="http://www.ekiga.org"
license=(GPL)
diff --git a/extra/elfutils/PKGBUILD b/extra/elfutils/PKGBUILD
index e7ed03e86..8cbee1e68 100644
--- a/extra/elfutils/PKGBUILD
+++ b/extra/elfutils/PKGBUILD
@@ -1,33 +1,35 @@
-# $Id: PKGBUILD 157084 2012-04-23 13:56:25Z allan $
+# $Id: PKGBUILD 163718 2012-07-18 03:05:26Z eric $
# Maintainer:
# Contributor: Andrej Gelenberg <andrej.gelenberg@udo.edu>
pkgname=elfutils
-pkgver=0.153
+pkgver=0.154
pkgrel=1
pkgdesc="Collection of libraries and utilities for working with ELF object files and DWARF debugging information"
arch=('i686' 'x86_64')
url="https://fedorahosted.org/elfutils/"
-license=('GPL2')
-depends=('glibc')
+license=('LGPL3' 'GPL' 'GPL3')
+depends=('gcc-libs' 'zlib' 'bzip2' 'xz')
provides=('libelf')
replaces=('libelf')
conflicts=('libelf')
options=('!makeflags')
-source=(https://fedorahosted.org/releases/e/l/elfutils/${pkgver}/elfutils-${pkgver}.tar.bz2{,.sig})
-md5sums=('289a146182bc29f0236eaa15d8ebdf98'
- '1af9fe25e9316173b81fa4fad3a17ed5')
+source=(https://fedorahosted.org/releases/e/l/elfutils/${pkgver}/elfutils-${pkgver}.tar.bz2{,.sig} \
+ elfutils-0.154-binutils-pr-ld-13621.patch)
+sha1sums=('3a92a6f636cc3d14d4b3b00ba5c1e88a2a8d510b'
+ '956461d44b03823e0b448e78b1f4aa25ef269e1e'
+ '09681b728edb86c77eed47286554bef048f3507f')
build() {
cd "${srcdir}/${pkgname}-${pkgver}"
CFLAGS+=" -g" # required for test-suite success
+ patch -p1 -i "${srcdir}/elfutils-0.154-binutils-pr-ld-13621.patch"
./configure --prefix=/usr --program-prefix="eu-"
make
}
check() {
cd "${srcdir}/${pkgname}-${pkgver}"
- sed -i "s#./alldts#testrun ./alldts#" tests/run-alldts.sh
make check
}
diff --git a/extra/elfutils/elfutils-0.154-binutils-pr-ld-13621.patch b/extra/elfutils/elfutils-0.154-binutils-pr-ld-13621.patch
new file mode 100644
index 000000000..06dba1ea6
--- /dev/null
+++ b/extra/elfutils/elfutils-0.154-binutils-pr-ld-13621.patch
@@ -0,0 +1,10 @@
+diff --git a/tests/run-elflint-self.sh b/tests/run-elflint-self.sh
+index 8aca9e1..d449416 100755
+--- a/tests/run-elflint-self.sh
++++ b/tests/run-elflint-self.sh
+@@ -51,4 +51,4 @@ runtest ../libebl/libebl_sh.so
+ runtest ../libebl/libebl_sparc.so
+ runtest ../libebl/libebl_x86_64.so
+
+-exit $status
++test $status == 0 || echo "binutils PR ld/13621 workaround"
diff --git a/extra/gnome-screensaver/PKGBUILD b/extra/gnome-screensaver/PKGBUILD
index 8d245b7b4..6de788b6a 100644
--- a/extra/gnome-screensaver/PKGBUILD
+++ b/extra/gnome-screensaver/PKGBUILD
@@ -1,9 +1,9 @@
-# $Id: PKGBUILD 163480 2012-07-12 19:58:42Z ibiru $
+# $Id: PKGBUILD 163692 2012-07-17 22:26:51Z ibiru $
# Maintainer: Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
# Contributor: Jan de Groot <jgc@archlinux.org>
pkgname=gnome-screensaver
-pkgver=3.4.3
+pkgver=3.4.4
pkgrel=1
pkgdesc="Screensaver designed to integrate well with the GNOME desktop."
arch=('i686' 'x86_64')
@@ -17,7 +17,7 @@ options=(!emptydirs)
install=gnome-screensaver.install
source=(http://ftp.gnome.org/pub/GNOME/sources/$pkgname/${pkgver%.*}/$pkgname-$pkgver.tar.xz
gnome-screensaver.pam)
-sha256sums=('76bea2526c6065e5d182e23fda8e75eb2e0afe9d1d40301b019a3cfc39d95a3e'
+sha256sums=('dae4be9daa2c3db15f614dd004aa858e32e5fc5d1818a8317167441097b57904'
'c19870c4f2d6e91ba0eea2603753a74e0c5c82ff5fa3cacb1198027a38d0a6cb')
build() {
diff --git a/extra/hddtemp/PKGBUILD b/extra/hddtemp/PKGBUILD
index cf00e6549..94073ce8f 100644
--- a/extra/hddtemp/PKGBUILD
+++ b/extra/hddtemp/PKGBUILD
@@ -1,48 +1,53 @@
-# $Id: PKGBUILD 160663 2012-06-03 10:40:04Z bisson $
-# Maintainer: Ionut Biru <ibiru@archlinux.org>
+# $Id: PKGBUILD 163630 2012-07-17 14:24:03Z bisson $
+# Maintainer: Gaetan Bisson <bisson@archlinux.org>
+# Contributor: Ionut Biru <ibiru@archlinux.org>
# Contributor: Andrea Scarpino <andrea@archlinux.org>
# Contributor: Roman Kyrylych <roman@archlinux.org>
# Contributor: Damir Perisa <damir@archlinux.org>
pkgname=hddtemp
-pkgver=0.3.beta15.46
_origver=0.3-beta15
-_patchver=46
-pkgrel=3
+_patchver=${_origver}-52
+pkgver=${_patchver//-/.}
+pkgrel=1
pkgdesc="Gives you the temperature of your hard drive by reading S.M.A.R.T. information"
-arch=('i686' 'x86_64')
-url="http://www.guzu.net/linux/hddtemp.php"
+url='https://savannah.nongnu.org/projects/hddtemp/'
license=('GPL')
-depends=('glibc')
+arch=('i686' 'x86_64')
backup=('etc/conf.d/hddtemp')
-source=(http://www.guzu.net/files/hddtemp-${_origver}.tar.bz2
- http://ftp.debian.org/debian/pool/main/h/hddtemp/hddtemp_${_origver}-${_patchver}.diff.gz
- 'hddtemp' 'hddtemp.service' 'hddtemp.confd' 'hddtemp-0.3-beta15-reg-eip.patch')
-md5sums=('8b829339e1ae9df701684ec239021bb8'
- '040437845e28771c560b4bb40e41f933'
- 'b7ebb86dfeef3bc4577ed1040307e36b'
- 'b6767bdbb03b6cdbc1995418cafdb1e1'
- 'fdca5c43900406f0be76534ef2a5a697'
- '526ef28549dd0da7e38d32cfc8523592')
+source=("http://download.savannah.gnu.org/releases/${pkgname}/${pkgname}-${_origver}.tar.bz2"
+ "http://ftp.debian.org/debian/pool/main/h/${pkgname}/${pkgname}_${_patchver}.diff.gz"
+ 'rc.d'
+ 'conf.d'
+ 'service')
+sha1sums=('65393b0a4d9862c030c81702d95c1acd00da275b'
+ 'b9bcdd0537c1540e55e5056445b571ea61d5a4a3'
+ '71159486b1505ec6acfb7585e0d8fbe78afe54ec'
+ 'd45e3022f614dbf8904ecb1a3e702bb71fcaa808'
+ '501fcf4faf8b2689d010f9cbbf39f917211f611f')
+
options=('!libtool')
build() {
- cd "$srcdir/$pkgname-${_origver}"
+ cd "${srcdir}/${pkgname}-${_origver}"
- patch -Np1 -i "$srcdir/${pkgname}_${_origver}-${_patchver}.diff"
- patch -Np1 -i "$srcdir/hddtemp-0.3-beta15-reg-eip.patch"
+ patch -p1 -i "../${pkgname}_${_patchver}.diff"
- ./configure --prefix=/usr --mandir=/usr/share/man --with-db-path=/usr/share/$pkgname/hddtemp.db
- make
+ ./configure \
+ --prefix=/usr \
+ --mandir=/usr/share/man \
+ --with-db-path="/usr/share/${pkgname}/hddtemp.db"
+
+ make
}
package() {
- cd "$srcdir/$pkgname-${_origver}"
- make DESTDIR=$pkgdir install
-
- install -D -m644 "$srcdir/$pkgname-${_origver}/debian/hddtemp.db" \
- "$pkgdir/usr/share/${pkgname}/hddtemp.db"
- install -D -m644 "$srcdir/hddtemp.confd" "$pkgdir/etc/conf.d/hddtemp"
- install -D -m644 "$srcdir/hddtemp.service" "$pkgdir/usr/lib/systemd/system/hddtemp.service"
- install -D -m755 "$srcdir/hddtemp" "$pkgdir/etc/rc.d/hddtemp"
+ cd "${srcdir}/${pkgname}-${_origver}"
+
+ make DESTDIR="${pkgdir}" install
+
+ install -Dm644 "../${pkgname}-${_origver}/debian/hddtemp.db" "${pkgdir}/usr/share/${pkgname}/hddtemp.db"
+ install -Dm644 '../service' "${pkgdir}/usr/lib/systemd/system/hddtemp.service"
+ install -Dm644 '../conf.d' "${pkgdir}/etc/conf.d/hddtemp"
+ install -Dm755 '../rc.d' "${pkgdir}/etc/rc.d/hddtemp"
}
diff --git a/extra/hddtemp/conf.d b/extra/hddtemp/conf.d
new file mode 100644
index 000000000..6a1e18e0b
--- /dev/null
+++ b/extra/hddtemp/conf.d
@@ -0,0 +1,2 @@
+PARAMS="-q -l 127.0.0.1"
+DRIVES="/dev/sda"
diff --git a/extra/hddtemp/rc.d b/extra/hddtemp/rc.d
new file mode 100644
index 000000000..62f090808
--- /dev/null
+++ b/extra/hddtemp/rc.d
@@ -0,0 +1,39 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PARAMS=
+DRIVES=
+[ -f /etc/conf.d/hddtemp ] && . /etc/conf.d/hddtemp
+PID=$(pidof -o %PPID /usr/sbin/hddtemp)
+case "$1" in
+ start)
+ stat_busy "Starting HDDTemp"
+ [ -z "$PID" ] && /usr/sbin/hddtemp -d $PARAMS $DRIVES
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon hddtemp
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping HDDTemp"
+ [ ! -z "$PID" ] && kill $PID &> /dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon hddtemp
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 2
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
diff --git a/extra/hddtemp/service b/extra/hddtemp/service
new file mode 100644
index 000000000..bc56d16b0
--- /dev/null
+++ b/extra/hddtemp/service
@@ -0,0 +1,9 @@
+[Unit]
+Description=Hard drive temperature monitor daemon
+
+[Service]
+EnvironmentFile=/etc/conf.d/hddtemp
+ExecStart=/usr/sbin/hddtemp -dF $PARAMS $DRIVES
+
+[Install]
+WantedBy=multi-user.target
diff --git a/extra/hugin/PKGBUILD b/extra/hugin/PKGBUILD
index 9bcf7326c..bc27013ff 100644
--- a/extra/hugin/PKGBUILD
+++ b/extra/hugin/PKGBUILD
@@ -1,11 +1,11 @@
-# $Id: PKGBUILD 152206 2012-03-05 08:55:59Z ibiru $
+# $Id: PKGBUILD 163705 2012-07-18 01:05:24Z ibiru $
# Maintainer: Tobias Kieslich <tobias@archlinux.org>
# Contributor: Giovanni Scafora <giovanni@archlinux.org>
# Contributor: Dominik Ryba <domryba@post.pl>
pkgname=hugin
pkgver=2011.4.0
-pkgrel=2
+pkgrel=3
pkgdesc="A frontend to the panorama-tools"
arch=('i686' 'x86_64')
url="http://hugin.sourceforge.net/"
@@ -14,13 +14,17 @@ depends=('wxgtk' 'boost-libs' 'enblend-enfuse' 'exiv2' 'autopano-sift-c'
'lapack' 'desktop-file-utils' 'make' 'perl-image-exiftool')
makedepends=('zip' 'cmake' 'boost' 'tclap')
install=hugin.install
-source=("http://downloads.sourceforge.net/${pkgname}/${pkgname}-${pkgver}.tar.bz2")
-sha1sums=('21ec7331d5e196aca2a8771d3c9101dd181ad93b')
+source=("http://downloads.sourceforge.net/${pkgname}/${pkgname}-${pkgver}.tar.bz2"
+ gcc47.patch)
+sha1sums=('21ec7331d5e196aca2a8771d3c9101dd181ad93b'
+ 'aa0fc9425bd7a4b5e270412f4ca72258fac77298')
build() {
cd "${srcdir}"
+ patch -Np0 -i gcc47.patch
mkdir build
cd build
+ export CXXFLAGS+=" -fpermissive"
cmake "${srcdir}/${pkgname}-${pkgver}" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr \
diff --git a/extra/hugin/gcc47.patch b/extra/hugin/gcc47.patch
new file mode 100644
index 000000000..3814b871c
--- /dev/null
+++ b/extra/hugin/gcc47.patch
@@ -0,0 +1,11 @@
+diff -Nur hugin-2011.4.0.orig/src/celeste/Utilities.cpp hugin-2011.4.0/src/celeste/Utilities.cpp
+--- hugin-2011.4.0.orig/src/celeste/Utilities.cpp 2012-07-08 15:18:16.864454043 +0000
++++ hugin-2011.4.0/src/celeste/Utilities.cpp 2012-07-08 15:18:20.341089422 +0000
+@@ -27,6 +27,7 @@
+
+ #include <math.h>
+ #include <stdlib.h>
++#include <unistd.h>
+ #include "Utilities.h"
+
+ using namespace std;
diff --git a/extra/kdeedu-kig/PKGBUILD b/extra/kdeedu-kig/PKGBUILD
index 8a46a6f8c..02e67f767 100644
--- a/extra/kdeedu-kig/PKGBUILD
+++ b/extra/kdeedu-kig/PKGBUILD
@@ -1,9 +1,9 @@
-# $Id: PKGBUILD 161171 2012-06-08 06:36:44Z andrea $
+# $Id: PKGBUILD 163706 2012-07-18 01:05:29Z ibiru $
# Maintainer: Andrea Scarpino <andrea@archlinux.org>
pkgname=kdeedu-kig
pkgver=4.8.4
-pkgrel=1
+pkgrel=2
pkgdesc="Interactive Geometry"
url="http://kde.org/applications/education/kig/"
arch=('i686' 'x86_64')
diff --git a/extra/kdeedu-rocs/PKGBUILD b/extra/kdeedu-rocs/PKGBUILD
index 6c07a15c0..d2997537c 100644
--- a/extra/kdeedu-rocs/PKGBUILD
+++ b/extra/kdeedu-rocs/PKGBUILD
@@ -1,9 +1,9 @@
-# $Id: PKGBUILD 161189 2012-06-08 06:37:22Z andrea $
+# $Id: PKGBUILD 163707 2012-07-18 01:05:32Z ibiru $
# Maintainer: Andrea Scarpino <andrea@archlinux.org>
pkgname=kdeedu-rocs
pkgver=4.8.4
-pkgrel=1
+pkgrel=2
pkgdesc="Rocs Graph Theory"
url="http://kde.org/applications/education/rocs/"
arch=('i686' 'x86_64')
diff --git a/extra/libpst/PKGBUILD b/extra/libpst/PKGBUILD
index 29d62949f..70fac43ef 100644
--- a/extra/libpst/PKGBUILD
+++ b/extra/libpst/PKGBUILD
@@ -1,10 +1,10 @@
-# $Id: PKGBUILD 152214 2012-03-05 08:56:12Z ibiru $
+# $Id: PKGBUILD 163708 2012-07-18 01:05:35Z ibiru $
# Maintainer: Jan de Groot <jgc@archlinux.org>
pkgbase=libpst
pkgname=('libpst' 'libpst-docs')
pkgver=0.6.54
-pkgrel=1
+pkgrel=2
arch=('i686' 'x86_64')
url="http://www.five-ten-sg.com/libpst/"
license=('GPL')
diff --git a/extra/libtorrent-rasterbar/PKGBUILD b/extra/libtorrent-rasterbar/PKGBUILD
index cac1e51e0..b24f672fe 100644
--- a/extra/libtorrent-rasterbar/PKGBUILD
+++ b/extra/libtorrent-rasterbar/PKGBUILD
@@ -1,9 +1,9 @@
-# $Id: PKGBUILD 157451 2012-04-28 13:13:49Z ibiru $
+# $Id: PKGBUILD 163709 2012-07-18 01:05:39Z ibiru $
# Maintainer : Ionut Biru <ibiru@archlinux.org>
# Contributor: Hugo Doria <hugo@archlinux.org>
pkgname=libtorrent-rasterbar
-pkgver=0.15.10
+pkgver=0.16.1
pkgrel=1
epoch=1
pkgdesc="A C++ library that aims to be a good alternative to all the other bittorrent implementations around"
@@ -14,10 +14,10 @@ depends=('boost-libs' 'geoip' 'python2')
makedepends=('boost')
options=('!libtool' '!emptydirs')
source=(http://libtorrent.googlecode.com/files/$pkgname-$pkgver.tar.gz)
-sha1sums=('3e461d9ede5fab3fb59be6a9f0cbc52121d536c4')
+sha1sums=('798944301ee6ef8e0d8de3d944c59d184ef1a4d3')
build() {
- cd "$pkgname-$pkgver"
+ cd $pkgname-$pkgver
PYTHON2=/usr/bin/python2 ./configure --prefix=/usr \
--enable-python-binding \
--with-libgeoip=system
@@ -25,7 +25,7 @@ build() {
}
package() {
- cd "$pkgname-$pkgver"
+ cd $pkgname-$pkgver
make DESTDIR="$pkgdir" install
install -D COPYING "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
}
diff --git a/extra/licq/PKGBUILD b/extra/licq/PKGBUILD
index 5796d139a..907c1bc91 100644
--- a/extra/licq/PKGBUILD
+++ b/extra/licq/PKGBUILD
@@ -1,9 +1,9 @@
-# $Id: PKGBUILD 152218 2012-03-05 08:56:28Z ibiru $
+# $Id: PKGBUILD 163710 2012-07-18 01:05:42Z ibiru $
# Maintainer: Juergen Hoetzel <juergen@archlinux.org>
pkgname=licq
pkgver=1.6.0
-pkgrel=4
+pkgrel=5
pkgdesc="Advanced graphical ICQ clone and more for Unix"
arch=('i686' 'x86_64')
url="http://www.licq.org"
diff --git a/extra/lyx/PKGBUILD b/extra/lyx/PKGBUILD
index ef3815582..5ca0a390f 100644
--- a/extra/lyx/PKGBUILD
+++ b/extra/lyx/PKGBUILD
@@ -1,10 +1,10 @@
-# $Id: PKGBUILD 152233 2012-03-05 13:38:37Z ibiru $
+# $Id: PKGBUILD 163711 2012-07-18 01:05:51Z ibiru $
# Maintainer: Ronald van Haren <ronald.archlinux.org>
# Contributor: Jason Chu <jason@archlinux.org>
pkgname=lyx
pkgver=2.0.3
-pkgrel=3
+pkgrel=4
pkgdesc="An advanced WYSIWYM document processor & LaTeX front-end"
arch=('i686' 'x86_64')
url="http://www.lyx.org"
diff --git a/extra/mkvtoolnix/PKGBUILD b/extra/mkvtoolnix/PKGBUILD
index c79db4501..be933c4e8 100644
--- a/extra/mkvtoolnix/PKGBUILD
+++ b/extra/mkvtoolnix/PKGBUILD
@@ -1,11 +1,11 @@
-# $Id: PKGBUILD 163223 2012-07-11 09:07:08Z giovanni $
+# $Id: PKGBUILD 163712 2012-07-18 01:05:57Z ibiru $
# Maintainer: Giovanni Scafora <giovanni@archlinux.org>
# Contributor: xduugu <xduugu@gmx.com>
pkgbase=mkvtoolnix
pkgname=('mkvtoolnix-cli' 'mkvtoolnix-gtk')
pkgver=5.7.0
-pkgrel=1
+pkgrel=2
arch=('i686' 'x86_64')
license=('GPL')
url="http://www.bunkus.org/videotools/mkvtoolnix/index.html"
diff --git a/extra/postfix/PKGBUILD b/extra/postfix/PKGBUILD
index 9232270ae..fce4af222 100644
--- a/extra/postfix/PKGBUILD
+++ b/extra/postfix/PKGBUILD
@@ -1,11 +1,11 @@
-# $Id: PKGBUILD 163134 2012-07-08 02:03:27Z bisson $
+# $Id: PKGBUILD 163624 2012-07-17 12:46:32Z bisson $
# Contributor: Jeff Brodnax <tullyarcher@bellsouth.net>
# Contributor: Paul Mattal <paul@archlinux.org>
# Maintainer: Gaetan Bisson <bisson@archlinux.org>
pkgname=postfix
pkgver=2.9.3
-pkgrel=2
+pkgrel=3
pkgdesc='Fast, easy to administer, secure mail server'
url='http://www.postfix.org/'
license=('custom')
@@ -13,11 +13,13 @@ arch=('i686' 'x86_64')
depends=('pcre' 'libsasl' 'libldap' 'db'
'libmysqlclient' 'postgresql-libs' 'sqlite' 'tinycdb')
backup=('etc/postfix/'{access,aliases,canonical,generic,header_checks,main.cf,master.cf,relocated,transport,virtual})
-source=("ftp://ftp.porcupine.org/mirrors/postfix-release/official/${pkgname}-${pkgver}.tar.gz" \
- 'aliases.patch' \
+source=("ftp://ftp.porcupine.org/mirrors/postfix-release/official/${pkgname}-${pkgver}.tar.gz"
+ 'aliases.patch'
+ 'service'
'rc.d')
sha1sums=('fd6c1ba3bbceb1a29b95655a742a2c547e11ca1d'
'5fc3de6c7df1e5851a0a379e825148868808318b'
+ 'af621cf064813d9ddb13ffd579fee33e6b82d4be'
'40c6be2eb55e6437a402f43775cdb3d22ea87a66')
provides=('smtp-server' 'smtp-forwarder')
@@ -59,8 +61,11 @@ package() {
manpage_directory="/usr/share/man" \
readme_directory="/usr/share/doc/${pkgname}" \
- install -D -m755 ../rc.d "${pkgdir}/etc/rc.d/${pkgname}"
- install -D -m644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
- sed 's/^\(\$manpage[^:]*\):/\1.gz:/' -i "${pkgdir}/usr/lib/${pkgname}/postfix-files"
- cd "${pkgdir}"; patch -p0 -i "${srcdir}"/aliases.patch
+ install -Dm755 ../rc.d "${pkgdir}/etc/rc.d/${pkgname}"
+ install -Dm644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
+ install -Dm644 ../service "${pkgdir}/usr/lib/systemd/system/${pkgname}.service"
+
+ cd "${pkgdir}"
+ patch -p0 -i "${srcdir}"/aliases.patch
+ sed 's/^\(\$manpage[^:]*\):/\1.gz:/' -i "usr/lib/${pkgname}/postfix-files"
}
diff --git a/extra/postfix/service b/extra/postfix/service
new file mode 100644
index 000000000..6ede53632
--- /dev/null
+++ b/extra/postfix/service
@@ -0,0 +1,12 @@
+[Unit]
+Description=Postfix Mail Transport Daemon
+After=network.target
+
+[Service]
+Type=forking
+ExecStart=/usr/sbin/postfix start
+ExecStop=/usr/sbin/postfix stop
+ExecReload=/usr/sbin/postfix reload
+
+[Install]
+WantedBy=multi-user.target
diff --git a/extra/pyqt/PKGBUILD b/extra/pyqt/PKGBUILD
index 58e9b5659..0d3e23df5 100644
--- a/extra/pyqt/PKGBUILD
+++ b/extra/pyqt/PKGBUILD
@@ -1,4 +1,4 @@
-# $Id: PKGBUILD 162740 2012-06-29 11:34:16Z andrea $
+# $Id: PKGBUILD 163679 2012-07-17 18:11:04Z andrea $
# Maintainer: Andrea Scarpino <andrea@archlinux.org>
# Contributor: Douglas Soares de Andrade <douglas@archlinux.org>
# Contributor: riai <riai@bigfoot.com> Ben <ben@benmazer.net>
@@ -6,17 +6,23 @@
pkgbase=pyqt
pkgname=('pyqt-common' 'pyqt' 'python2-pyqt')
pkgver=4.9.4
-pkgrel=1
+pkgrel=2
arch=('i686' 'x86_64')
url="http://riverbankcomputing.co.uk/software/pyqt/intro"
license=('GPL')
makedepends=('qt' 'python-sip' 'python-dbus' 'python2-sip' 'phonon'
'python-opengl' 'qt-assistant-compat' 'qtwebkit' 'python2-dbus')
- source=("http://riverbankcomputing.co.uk/static/Downloads/PyQt4/PyQt-x11-gpl-${pkgver}.tar.gz")
-md5sums=('a0b6a820633366365af5124ddbd059c7')
+source=("http://riverbankcomputing.co.uk/static/Downloads/PyQt4/PyQt-x11-gpl-${pkgver}.tar.gz"
+ 'fix-pyuic4.patch')
+md5sums=('a0b6a820633366365af5124ddbd059c7'
+ '097651aea0bafded5abdfd6d62afd2ad')
build() {
- cd "${srcdir}"
+ # FS#30728
+ cd "${srcdir}"/PyQt-x11-gpl-${pkgver}
+ patch -p1 -i "${srcdir}"/fix-pyuic4.patch
+ cd ..
+
cp -r PyQt-x11-gpl-${pkgver} Py2Qt-x11-gpl-${pkgver}
cd "${srcdir}/PyQt-x11-gpl-${pkgver}"
diff --git a/extra/pyqt/fix-pyuic4.patch b/extra/pyqt/fix-pyuic4.patch
new file mode 100644
index 000000000..2173443d8
--- /dev/null
+++ b/extra/pyqt/fix-pyuic4.patch
@@ -0,0 +1,91 @@
+# HG changeset patch
+# User Phil Thompson <phil at riverbankcomputing.com>
+# Date 2012-07-13 13:39:28 +0100
+# Node ID 29b668ada14c1428a3bbfe8f0324c6626bd5ac9a
+# Parent fd0f3da9d79ca9858d10a20c15fb85456cb832d7
+Fixed a regression in pyuic's handling of custom widgets.
+
+diff --git a/pyuic/uic/Compiler/qobjectcreator.py b/pyuic/uic/Compiler/qobjectcreator.py
+--- a/pyuic/uic/Compiler/qobjectcreator.py
++++ b/pyuic/uic/Compiler/qobjectcreator.py
+@@ -1,6 +1,6 @@
+ #############################################################################
+ ##
+-## Copyright (C) 2011 Riverbank Computing Limited.
++## Copyright (C) 2012 Riverbank Computing Limited.
+ ## Copyright (C) 2006 Thorsten Marek.
+ ## All right reserved.
+ ##
+@@ -100,7 +100,6 @@
+ assert widgetClass not in self._widgets
+ self._widgets[widgetClass] = (baseClass, module)
+
+-
+ def _resolveBaseclass(self, baseClass):
+ try:
+ for x in range(0, 10):
+@@ -114,19 +113,17 @@
+ except KeyError:
+ raise ValueError("unknown baseclass %s" % baseClass)
+
+-
+ def search(self, cls):
+ try:
+- self._usedWidgets.add(cls)
+ baseClass = self._resolveBaseclass(self._widgets[cls][0])
+ DEBUG("resolved baseclass of %s: %s" % (cls, baseClass))
+-
+- return type(cls, (baseClass,),
+- {"module" : ""})
+-
+ except KeyError:
+ return None
+
++ self._usedWidgets.add(cls)
++
++ return type(cls, (baseClass, ), {"module" : ""})
++
+ def _writeImportCode(self):
+ imports = {}
+ for widget in self._usedWidgets:
+diff --git a/pyuic/uic/objcreator.py b/pyuic/uic/objcreator.py
+--- a/pyuic/uic/objcreator.py
++++ b/pyuic/uic/objcreator.py
+@@ -102,19 +102,26 @@
+ self._modules.append(self._customWidgets)
+
+ def createQObject(self, classname, *args, **kwargs):
+- # Handle scoped names, typically static factory methods.
+- parts = classname.split('.')
+- factory = self.findQObjectType(parts[0])
++ # Handle regular and custom widgets.
++ factory = self.findQObjectType(classname)
+
+- if factory is not None:
+- for part in parts[1:]:
+- factory = getattr(factory, part, None)
+- if factory is None:
+- break
+- else:
+- return self._cpolicy.instantiate(factory, *args, **kwargs)
++ if factory is None:
++ # Handle scoped names, typically static factory methods.
++ parts = classname.split('.')
+
+- raise NoSuchWidgetError(classname)
++ if len(parts) > 1:
++ factory = self.findQObjectType(parts[0])
++
++ if factory is not None:
++ for part in parts[1:]:
++ factory = getattr(factory, part, None)
++ if factory is None:
++ break
++
++ if factory is None:
++ raise NoSuchWidgetError(classname)
++
++ return self._cpolicy.instantiate(factory, *args, **kwargs)
+
+ def invoke(self, rname, method, args=()):
+ return self._cpolicy.invoke(rname, method, args)
diff --git a/extra/qemu-kvm/PKGBUILD b/extra/qemu-kvm/PKGBUILD
index 4d01303c8..7693efe1a 100644
--- a/extra/qemu-kvm/PKGBUILD
+++ b/extra/qemu-kvm/PKGBUILD
@@ -1,7 +1,7 @@
-# $Id: PKGBUILD 163002 2012-07-05 07:43:09Z tpowa $
+# $Id: PKGBUILD 163622 2012-07-17 06:22:37Z tpowa $
# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
pkgname=qemu-kvm
-pkgver=1.1.0
+pkgver=1.1.1
pkgrel=1
pkgdesc="Latest KVM QEMU is a generic and open source processor emulator which achieves a good emulation speed by using dynamic translation."
arch=(i686 x86_64)
@@ -57,5 +57,5 @@ package()
esac
done
}
-md5sums=('2e19185b7fdf4c144f4719a88a5bde31'
+md5sums=('f8f5629b00f48192cc0467e1d31c4dd2'
'b316a066d2f1bb57d8f5b7ea1d0d1caf')
diff --git a/extra/soprano/PKGBUILD b/extra/soprano/PKGBUILD
index b44395501..e537ae34f 100644
--- a/extra/soprano/PKGBUILD
+++ b/extra/soprano/PKGBUILD
@@ -1,15 +1,15 @@
-# $Id: PKGBUILD 159138 2012-05-16 18:32:58Z andrea $
+# $Id: PKGBUILD 163681 2012-07-17 18:38:40Z andrea $
# Maintainer: Andrea Scarpino <andrea@archlinux.org>
# Contributor: Tobias Powalowski <tpowa@archlinux.org>
pkgname=soprano
pkgver=2.7.6
-pkgrel=1
+pkgrel=2
pkgdesc='A library which provides a highly usable object-oriented C++/Qt4 framework for RDF data'
arch=('i686' 'x86_64')
url='http://soprano.sourceforge.net/'
license=('GPL' 'LGPL')
-depends=('qt' 'redland-storage-virtuoso' 'libiodbc' 'virtuoso')
+depends=('qt' 'redland-storage-virtuoso' 'libiodbc' 'virtuoso-base')
makedepends=('cmake' 'openjdk6' 'doxygen')
source=("http://downloads.sourceforge.net/${pkgname}/${pkgname}-${pkgver}.tar.bz2")
md5sums=('8eee947956134ea4aa2d1e94ddbd551e')
diff --git a/extra/source-highlight/PKGBUILD b/extra/source-highlight/PKGBUILD
index 4e528385c..77420d51b 100644
--- a/extra/source-highlight/PKGBUILD
+++ b/extra/source-highlight/PKGBUILD
@@ -1,10 +1,10 @@
-# $Id: PKGBUILD 162797 2012-06-30 14:35:56Z giovanni $
+# $Id: PKGBUILD 163713 2012-07-18 01:06:02Z ibiru $
# Maintainer: Giovanni Scafora <giovanni@archlinux.org>
# Contributor: Douglas Soares de Andrade <douglas@archlinux.org>
pkgname=source-highlight
pkgver=3.1.7
-pkgrel=1
+pkgrel=2
pkgdesc="Convert source code to syntax highlighted document"
arch=('i686' 'x86_64')
url="http://www.gnu.org/software/src-highlite/"
diff --git a/extra/virtuoso/PKGBUILD b/extra/virtuoso/PKGBUILD
index 7d18a52e7..d2e71d947 100644
--- a/extra/virtuoso/PKGBUILD
+++ b/extra/virtuoso/PKGBUILD
@@ -1,46 +1,62 @@
-# $Id: PKGBUILD 162805 2012-06-30 17:32:04Z andrea $
+# $Id: PKGBUILD 163689 2012-07-17 19:51:54Z andrea $
# Maintainer: Andrea Scarpino <andrea@archlinux.org>
# Contributor: Massimiliano Torromeo <massimiliano DOT torromeo AT google mail service>
-pkgname=virtuoso
-pkgver=6.1.5.20120630
-pkgrel=1
+pkgbase=virtuoso
+pkgname=('virtuoso' 'virtuoso-base')
+pkgver=6.1.5.20120717
+pkgrel=2
arch=('i686' 'x86_64')
-pkgdesc='A scalable cross-platform server that combines SQL/RDF/XML Data Management with Web Application Server and Web Services Platform functionality'
url='http://virtuoso.openlinksw.com/wiki/main/Main/'
license=('GPL')
-depends=('libldap')
-makedepends=('bison' 'flex' 'gperf')
+makedepends=('libldap' 'bison' 'flex' 'gperf' 'net-tools' 'libxml2')
options=('!libtool')
-source=("ftp://ftp.archlinux.org/other/${pkgname}/${pkgname}-opensource-${pkgver}.tar.gz")
-#source=("http://downloads.sourceforge.net/${pkgname}/${pkgname}-opensource-${pkgver}.tar.gz")
-md5sums=('1364679ffdbc6b0c16eadf6dee0e2676')
+source=("ftp://ftp.archlinux.org/other/${pkgbase}/${pkgbase}-opensource-${pkgver}.tar.gz")
+#source=("http://downloads.sourceforge.net/${pkgbase}/${pkgbase}-opensource-${pkgver}.tar.gz")
+md5sums=('bee8d6ad91e888bab8fdd177063ca084')
build() {
- cd ${srcdir}/${pkgname}-opensource-${pkgver}
+ cd ${srcdir}/${pkgbase}-opensource-${pkgver}
./autogen.sh
- ./configure --prefix=/usr \
- --localstatedir=/var \
- --sysconfdir=/etc \
- --disable-rendezvous \
- --disable-hslookup \
- --disable-all-vads
+ ./configure --with-layout=debian \
+ --program-transform-name='s/isql$$/isql-vt/;s/isqlw/isqlw-vt/' \
+ --with-readline
make
}
-package() {
+package_virtuoso-base() {
+ pkgdesc='A scalable cross-platform server of virtuoso (very minimal installation)'
+ depends=('libldap')
+
# install server
- cd ${srcdir}/${pkgname}-opensource-${pkgver}/binsrc/virtuoso
+ cd ${srcdir}/${pkgbase}-opensource-${pkgver}/binsrc/virtuoso
make DESTDIR=${pkgdir} install
# install driver
- cd ${srcdir}/${pkgname}-opensource-${pkgver}/binsrc/driver
+ cd ${srcdir}/${pkgbase}-opensource-${pkgver}/binsrc/driver
make DESTDIR=${pkgdir} install
- # Install some useful tools; rename to avoid conflicts
+ # Install some useful tools; rename to avoid conflicts with unixodbc
for bin in isql isqlw; do
- install -Dm755 ${srcdir}/${pkgname}-opensource-${pkgver}/binsrc/tests/$bin \
+ install -Dm755 ${srcdir}/${pkgbase}-opensource-${pkgver}/binsrc/tests/$bin \
${pkgdir}/usr/bin/$bin-vt
done
}
+
+package_virtuoso() {
+ pkgdesc='A scalable cross-platform server that combines SQL/RDF/XML Data Management with Web Application Server and Web Services Platform functionality'
+ depends=('virtuoso-base' 'libxml2')
+
+ cd ${srcdir}/${pkgbase}-opensource-${pkgver}
+ make DESTDIR=${pkgdir} install
+
+ # remove conflicts with virtuoso-base
+ rm "${pkgdir}"/usr/bin/isql{,w-vt}
+ rm "${pkgdir}"/usr/bin/virtuoso-t
+ rm "${pkgdir}"/usr/lib/libvirtuoso-t.a
+ rm "${pkgdir}"/usr/lib/virtodbc.{a,so}
+ rm "${pkgdir}"/usr/lib/virtodbc_r.{a,so}
+ rm "${pkgdir}"/usr/lib/virtodbcu.{a,so}
+ rm "${pkgdir}"/usr/lib/virtodbcu_r.{a,so}
+}
diff --git a/extra/xf86-video-apm/PKGBUILD b/extra/xf86-video-apm/PKGBUILD
index 2914e15fc..e7f967a5e 100644
--- a/extra/xf86-video-apm/PKGBUILD
+++ b/extra/xf86-video-apm/PKGBUILD
@@ -1,20 +1,20 @@
-# $Id: PKGBUILD 158880 2012-05-12 17:20:17Z andyrtr $
+# $Id: PKGBUILD 163635 2012-07-17 16:04:08Z andyrtr $
# Maintainer: Jan de Groot <jgc@archlinux.org>
pkgname=xf86-video-apm
-pkgver=1.2.4
+pkgver=1.2.5
pkgrel=1
pkgdesc="X.org Alliance ProMotion video driver"
arch=(i686 x86_64)
url="http://xorg.freedesktop.org/"
license=('custom')
depends=('glibc')
-makedepends=('xorg-server-devel>=1.11.99.902')
-conflicts=('xorg-server<1.11.99.902')
+makedepends=('xorg-server-devel>=1.12.0')
+conflicts=('xorg-server<1.12.0')
groups=('xorg-drivers' 'xorg')
options=('!libtool')
source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
-sha1sums=('d792ba6e8c39e60e00e0790b4e08f551044b2f7c')
+sha256sums=('953b04320117b14c5b7efb37de45cef45592409f639c2aa87b7e2d77dc8d3d0f')
build() {
cd "${srcdir}/${pkgname}-${pkgver}"
diff --git a/extra/xf86-video-ark/PKGBUILD b/extra/xf86-video-ark/PKGBUILD
index ac5b44dff..9b27ec5a1 100644
--- a/extra/xf86-video-ark/PKGBUILD
+++ b/extra/xf86-video-ark/PKGBUILD
@@ -1,8 +1,8 @@
-# $Id: PKGBUILD 153321 2012-03-12 20:53:11Z andyrtr $
+# $Id: PKGBUILD 163637 2012-07-17 16:08:25Z andyrtr $
# Maintainer: Jan de Groot <jgc@archlinux.org>
pkgname=xf86-video-ark
-pkgver=0.7.4
+pkgver=0.7.5
pkgrel=1
pkgdesc="X.org ark video driver"
arch=(i686 x86_64)
@@ -13,14 +13,11 @@ makedepends=('xorg-server-devel>=1.11.99.902')
conflicts=('xorg-server<1.11.99.902')
options=('!libtool')
groups=('xorg-drivers' 'xorg')
-source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2
- #git-fixes.patch
- )
-sha1sums=('d95cb9aa56e7db542b3ac8fed9cb519b11f77556')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+sha256sums=('c690e046f34a393aac1c8d9616b4790e93cda60a460b00b9597d322175dbe51e')
build() {
cd "${srcdir}/${pkgname}-${pkgver}"
- #patch -Np1 -i "${srcdir}/git-fixes.patch"
./configure --prefix=/usr
make
}
diff --git a/extra/xf86-video-ast/PKGBUILD b/extra/xf86-video-ast/PKGBUILD
index 0a876c8a7..9aff71d79 100644
--- a/extra/xf86-video-ast/PKGBUILD
+++ b/extra/xf86-video-ast/PKGBUILD
@@ -1,8 +1,8 @@
-# $Id: PKGBUILD 162869 2012-07-02 16:09:01Z andyrtr $
+# $Id: PKGBUILD 163639 2012-07-17 16:10:36Z andyrtr $
# Maintainer: Jan de Groot <jgc@archlinux.org>
pkgname=xf86-video-ast
-pkgver=0.96.0
+pkgver=0.97.0
pkgrel=1
pkgdesc="X.org ASPEED AST Graphics video driver"
arch=(i686 x86_64)
@@ -14,7 +14,7 @@ conflicts=('xorg-server<1.12.0')
options=('!libtool')
groups=('xorg-drivers' 'xorg')
source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
-sha256sums=('73ac2bc3999add5a77c9d5d38d3651d5e50ab7bbac81d710912ab3125fc1ab3c')
+sha256sums=('28fcd4781676485293f6dcd46e0797866f6219e22e1851c9796b037589998e76')
build() {
cd "${srcdir}/${pkgname}-${pkgver}"
diff --git a/extra/xf86-video-cirrus/PKGBUILD b/extra/xf86-video-cirrus/PKGBUILD
index af708a937..1e4bbb070 100644
--- a/extra/xf86-video-cirrus/PKGBUILD
+++ b/extra/xf86-video-cirrus/PKGBUILD
@@ -1,8 +1,8 @@
-# $Id: PKGBUILD 162871 2012-07-02 16:11:19Z andyrtr $
+# $Id: PKGBUILD 163641 2012-07-17 16:18:49Z andyrtr $
#Maintainer: Jan de Groot <jgc@archlinux.org>
pkgname=xf86-video-cirrus
-pkgver=1.5.0
+pkgver=1.5.1
pkgrel=1
pkgdesc="X.org Cirrus Logic video driver"
arch=(i686 x86_64)
@@ -14,7 +14,7 @@ conflicts=('xorg-server<1.12.0')
groups=('xorg-drivers' 'xorg')
options=('!libtool')
source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
-sha256sums=('e506a97cce667d71971e8fcc163285b791ca508365593f3dc1e191f3411fdfed')
+sha256sums=('a955429cbd673230c4b171afd6d0a6b28372d2f9d0a400f5124869274a27c557')
build() {
cd "${srcdir}/${pkgname}-${pkgver}"
diff --git a/extra/xf86-video-glint/PKGBUILD b/extra/xf86-video-glint/PKGBUILD
index 1bb95b86e..bbb6ba655 100644
--- a/extra/xf86-video-glint/PKGBUILD
+++ b/extra/xf86-video-glint/PKGBUILD
@@ -1,8 +1,8 @@
-# $Id: PKGBUILD 153336 2012-03-12 20:53:29Z andyrtr $
+# $Id: PKGBUILD 163643 2012-07-17 16:20:51Z andyrtr $
# Maintainer: Jan de Groot <jgc@archlinux.org>
pkgname=xf86-video-glint
-pkgver=1.2.7
+pkgver=1.2.8
pkgrel=1
pkgdesc="X.org GLINT/Permedia video driver"
arch=(i686 x86_64)
@@ -14,7 +14,7 @@ conflicts=('xorg-server<1.11.99.903')
options=('!libtool')
groups=('xorg-drivers' 'xorg')
source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
-sha256sums=('9aa9689436fc78a71145d4caeaf63b0e80f9abd54e9b4a3066f62ee5b334c359')
+sha256sums=('657f883bb3a4e4278399eba73840862c3642706ae8b0a4798ec97a31b3524221')
build() {
cd "${srcdir}/${pkgname}-${pkgver}"
diff --git a/extra/xf86-video-i128/PKGBUILD b/extra/xf86-video-i128/PKGBUILD
index cd82d6686..4028be160 100644
--- a/extra/xf86-video-i128/PKGBUILD
+++ b/extra/xf86-video-i128/PKGBUILD
@@ -1,8 +1,8 @@
-# $Id: PKGBUILD 154219 2012-03-24 10:32:19Z jgc $
+# $Id: PKGBUILD 163645 2012-07-17 16:23:32Z andyrtr $
# Maintainer:Jan de Groot <jgc@archlinux.org>
pkgname=xf86-video-i128
-pkgver=1.3.5
+pkgver=1.3.6
pkgrel=1
pkgdesc="X.org Number 9 I128 video driver"
arch=(i686 x86_64)
@@ -14,7 +14,7 @@ conflicts=('xorg-server<1.12.0')
groups=('xorg-drivers' 'xorg')
options=('!libtool')
source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
-sha256sums=('3eedeb1e575e96b2ebebdf894c515e8543900aa3f9f85d10120b8240264333ea')
+sha256sums=('f8827e4c988f90cf5a677554b30d61f0a07eb86d872478751cdc94dc17452b9c')
build() {
cd "${srcdir}/${pkgname}-${pkgver}"
diff --git a/extra/xf86-video-i740/PKGBUILD b/extra/xf86-video-i740/PKGBUILD
index 6e796ce50..6fd616360 100644
--- a/extra/xf86-video-i740/PKGBUILD
+++ b/extra/xf86-video-i740/PKGBUILD
@@ -1,20 +1,20 @@
-# $Id: PKGBUILD 158884 2012-05-12 17:37:01Z andyrtr $
+# $Id: PKGBUILD 163647 2012-07-17 16:25:27Z andyrtr $
#Maintainer: Jan de Groot <jgc@archlinux.org>
pkgname=xf86-video-i740
-pkgver=1.3.3
+pkgver=1.3.4
pkgrel=1
pkgdesc="X.org Intel i740 video driver"
arch=(i686 x86_64)
url="http://xorg.freedesktop.org/"
license=('custom')
depends=('glibc')
-makedepends=('xorg-server-devel>=1.11.99.903')
-conflicts=('xorg-server<1.11.99.903')
+makedepends=('xorg-server-devel>=1.12.0')
+conflicts=('xorg-server<1.12.0')
groups=('xorg-drivers' 'xorg')
options=('!libtool')
source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
-sha1sums=('885660aad0d558ae0fb69f3b639c03f084a7a615')
+sha256sums=('1a24009bb2223b722fb41e1a2737a6e74bfecb0829e5583e270d267ee4ecca78')
build() {
cd "${srcdir}/${pkgname}-${pkgver}"
diff --git a/extra/xf86-video-mach64/PKGBUILD b/extra/xf86-video-mach64/PKGBUILD
index b2ac34779..474eab5de 100644
--- a/extra/xf86-video-mach64/PKGBUILD
+++ b/extra/xf86-video-mach64/PKGBUILD
@@ -1,8 +1,8 @@
-# $Id: PKGBUILD 162875 2012-07-02 16:16:24Z andyrtr $
+# $Id: PKGBUILD 163649 2012-07-17 16:29:33Z andyrtr $
# Maintainer: Jan de Groot <jgc@archlinux.org>
pkgname=xf86-video-mach64
-pkgver=6.9.2
+pkgver=6.9.3
pkgrel=1
pkgdesc="X.org mach64 video driver"
arch=(i686 x86_64)
@@ -13,9 +13,9 @@ makedepends=('xorg-server-devel>=1.12.0' 'libdrm' 'xf86driproto' 'mesa')
optdepends=('mach64-dri: DRI1 support from community repo')
conflicts=('xorg-server<1.12.0')
groups=('xorg-drivers' 'xorg')
-options=('!libtool')
+options=('!libtool' '!emptydirs')
source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
-sha256sums=('e3967d6ee953cd907c6a9e38b132b90db8173565198f6a65fe1e8c398dc06293')
+sha256sums=('5473d0e7dfd7bcff3f759e9e6bd6794ab464958f2f647d9b6d3edf3c66c53218')
build() {
cd "${srcdir}/${pkgname}-${pkgver}"
diff --git a/extra/xf86-video-mga/PKGBUILD b/extra/xf86-video-mga/PKGBUILD
index 7207a02a6..865b31771 100644
--- a/extra/xf86-video-mga/PKGBUILD
+++ b/extra/xf86-video-mga/PKGBUILD
@@ -1,8 +1,8 @@
-# $Id: PKGBUILD 162877 2012-07-02 16:18:31Z andyrtr $
+# $Id: PKGBUILD 163651 2012-07-17 16:31:39Z andyrtr $
# Maintainer: Jan de Groot <jgc@archlinux.org>
pkgname=xf86-video-mga
-pkgver=1.6.0
+pkgver=1.6.1
pkgrel=1
pkgdesc="X.org mga video driver"
arch=(i686 x86_64)
@@ -15,7 +15,7 @@ conflicts=('xorg-server<1.12.0')
options=('!libtool')
groups=('xorg-drivers' 'xorg')
source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
-sha256sums=('f0894fd8ddb1984d9212880544b7a7c30294e374df52bcce0c2acc93d434ce15')
+sha256sums=('6a70f5015f822eef82a18eedf3d3ee5fdfa81f1c0e701103ab837ffbd61aa4b4')
build() {
cd "${srcdir}/${pkgname}-${pkgver}"
diff --git a/extra/xf86-video-neomagic/PKGBUILD b/extra/xf86-video-neomagic/PKGBUILD
index b04b376ca..ca20ef851 100644
--- a/extra/xf86-video-neomagic/PKGBUILD
+++ b/extra/xf86-video-neomagic/PKGBUILD
@@ -1,8 +1,8 @@
-# $Id: PKGBUILD 154213 2012-03-24 10:25:08Z jgc $
+# $Id: PKGBUILD 163653 2012-07-17 16:33:32Z andyrtr $
#Maintainer: Jan de Groot <jgc@archlinux.org>
pkgname=xf86-video-neomagic
-pkgver=1.2.6
+pkgver=1.2.7
pkgrel=1
pkgdesc="X.org neomagic video driver"
arch=(i686 x86_64)
@@ -14,7 +14,7 @@ conflicts=('xorg-server<1.12.0')
groups=('xorg-drivers' 'xorg')
options=('!libtool')
source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
-sha256sums=('b19ed2a33e8d9a3e2bfc1ae3e8ff49031b7d34dec786e4a5e060e68e48649888')
+sha256sums=('9f06e89ea68afb65dbc064af63dc57d3606fc7244cd62cf87841ff5bbc98cb76')
build() {
cd "${srcdir}/${pkgname}-${pkgver}"
diff --git a/extra/xf86-video-nv/PKGBUILD b/extra/xf86-video-nv/PKGBUILD
index 574579714..54c15d0e0 100644
--- a/extra/xf86-video-nv/PKGBUILD
+++ b/extra/xf86-video-nv/PKGBUILD
@@ -1,11 +1,11 @@
-# $Id: PKGBUILD 155841 2012-04-07 14:46:07Z andyrtr $
+# $Id: PKGBUILD 163675 2012-07-17 16:58:02Z andyrtr $
# Maintainer:Jan de Groot <jgc@archlinux.org>
pkgname=xf86-video-nv
-pkgver=2.1.18
-pkgrel=6
+pkgver=2.1.20
+pkgrel=1
pkgdesc="X.org nv video driver"
-arch=(i686 x86_64)
+arch=('i686' 'x86_64')
license=('custom')
url="http://xorg.freedesktop.org/"
depends=('glibc')
@@ -13,14 +13,11 @@ makedepends=('xorg-server-devel>=1.11.99.903')
conflicts=('xorg-server<1.11.99.903')
options=('!libtool')
groups=('xorg-drivers' 'xorg')
-source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2
- git_fixes.patch)
-sha1sums=('d35b2fa5a26a507a9cc95b69243d9fd0c0f32aa2'
- '07469140e20751a7366017b116a8c4d7d39eaac0')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+sha256sums=('8395f65501f16f9cbaae8f598b02c6f18e78f4d3d30a08cb8d547dc2e00c10bf')
build() {
cd "${srcdir}/${pkgname}-${pkgver}"
- patch -Np1 -i ${srcdir}/git_fixes.patch
./configure --prefix=/usr
make
}
diff --git a/extra/xf86-video-r128/PKGBUILD b/extra/xf86-video-r128/PKGBUILD
index acde9d1b2..e9b5ecbfe 100644
--- a/extra/xf86-video-r128/PKGBUILD
+++ b/extra/xf86-video-r128/PKGBUILD
@@ -1,8 +1,8 @@
-# $Id: PKGBUILD 162879 2012-07-02 16:20:25Z andyrtr $
+# $Id: PKGBUILD 163655 2012-07-17 16:35:34Z andyrtr $
# Maintainer: Jan de Groot <jgc@archlinux.org>
pkgname=xf86-video-r128
-pkgver=6.8.3
+pkgver=6.8.4
pkgrel=1
pkgdesc="X.org ati Rage128 video driver"
arch=(i686 x86_64)
@@ -15,7 +15,7 @@ conflicts=('xorg-server<1.12.0')
groups=('xorg-drivers' 'xorg')
options=('!libtool')
source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
-sha256sums=('855e8cf72c3a7704e12f331fe8a4b354518753c6ff3aa61ed156cf6e7530f02b')
+sha256sums=('6fbfbba2589c1daf45f048009d6521bb687adbdf2f695eb961b316ce68935cd7')
build() {
cd "${srcdir}/${pkgname}-${pkgver}"
diff --git a/extra/xf86-video-s3virge/PKGBUILD b/extra/xf86-video-s3virge/PKGBUILD
index 31239166c..e7eed6c01 100644
--- a/extra/xf86-video-s3virge/PKGBUILD
+++ b/extra/xf86-video-s3virge/PKGBUILD
@@ -1,9 +1,9 @@
-# $Id: PKGBUILD 158928 2012-05-13 11:52:51Z andyrtr $
+# $Id: PKGBUILD 163657 2012-07-17 16:37:24Z andyrtr $
# Maintainer: Jan de Groot <jgc@archlinux.org>
# Contributor: Alexander Baldeck <alexander@archlinux.org>
pkgname=xf86-video-s3virge
-pkgver=1.10.5
+pkgver=1.10.6
pkgrel=1
pkgdesc="X.org S3 Virge video driver"
arch=(i686 x86_64)
@@ -15,14 +15,11 @@ conflicts=('xorg-server<1.12.0')
options=(!libtool)
groups=('xorg-drivers' 'xorg')
source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
- #git-fixes.patch)
-sha1sums=('ca8aa877ae118b017d5b06951bc1c3b7690ba709')
+sha256sums=('85e1f6bdd3f39d0348c53602f481b974c13fc752c94931882817751c8ec8363e')
build() {
cd "${srcdir}/${pkgname}-${pkgver}"
- #patch -Np1 -i "${srcdir}/git-fixes.patch"
- #autoreconf -fi
./configure --prefix=/usr
make
}
diff --git a/extra/xf86-video-savage/PKGBUILD b/extra/xf86-video-savage/PKGBUILD
index 588cc3213..8d4c50c33 100644
--- a/extra/xf86-video-savage/PKGBUILD
+++ b/extra/xf86-video-savage/PKGBUILD
@@ -1,8 +1,8 @@
-# $Id: PKGBUILD 162881 2012-07-02 16:22:29Z andyrtr $
+# $Id: PKGBUILD 163659 2012-07-17 16:39:29Z andyrtr $
# Maintainer: Jan de Groot <jgc@archlinux.org>
pkgname=xf86-video-savage
-pkgver=2.3.5
+pkgver=2.3.6
pkgrel=1
pkgdesc="X.org savage video driver"
arch=(i686 x86_64)
@@ -15,7 +15,7 @@ conflicts=('xorg-server<1.12.0')
options=(!libtool)
groups=('xorg-drivers' 'xorg')
source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
-sha256sums=('4b5b52aad9413a9d8717ff0aa3290d110dd5cdb5c93eebda4a5fff1c5ccf63e4')
+sha256sums=('48813ed8f4a08858e8c2466fd2dc810ea31f86842025fa39ec949d44f9ad63d6')
build() {
cd "${srcdir}/${pkgname}-${pkgver}"
diff --git a/extra/xf86-video-siliconmotion/PKGBUILD b/extra/xf86-video-siliconmotion/PKGBUILD
index b2eb44b02..00a98177e 100644
--- a/extra/xf86-video-siliconmotion/PKGBUILD
+++ b/extra/xf86-video-siliconmotion/PKGBUILD
@@ -1,9 +1,9 @@
-# $Id: PKGBUILD 154206 2012-03-24 10:14:17Z jgc $
+# $Id: PKGBUILD 163661 2012-07-17 16:43:27Z andyrtr $
# Maintainer: Jan de Groot <jgc@archlinux.org>
# Contributor: Alexander Baldeck <alexander@archlinux.org>
pkgname=xf86-video-siliconmotion
-pkgver=1.7.6
+pkgver=1.7.7
pkgrel=1
pkgdesc="X.org siliconmotion video driver"
arch=(i686 x86_64)
@@ -15,7 +15,7 @@ conflicts=('xorg-server<1.12.0')
options=('!libtool')
groups=('xorg-drivers' 'xorg')
source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
-sha256sums=('a59f1bd21499351b3703c4b77ec007d1299ccb888434d19fabbbeee0a7a14d07')
+sha256sums=('87b8b59d43945d4fc8012860c0bd9aed42c4684a943355c607b8eb8d6710c3aa')
build() {
cd "${srcdir}/${pkgname}-${pkgver}"
diff --git a/extra/xf86-video-sis/PKGBUILD b/extra/xf86-video-sis/PKGBUILD
index a90807996..da414ed76 100644
--- a/extra/xf86-video-sis/PKGBUILD
+++ b/extra/xf86-video-sis/PKGBUILD
@@ -1,9 +1,9 @@
-# $Id: PKGBUILD 162832 2012-07-01 07:57:45Z andyrtr $
+# $Id: PKGBUILD 163663 2012-07-17 16:45:36Z andyrtr $
# Maintainer: Jan de Groot <jgc@archlinux.org>
pkgname=xf86-video-sis
-pkgver=0.10.4
-pkgrel=2
+pkgver=0.10.7
+pkgrel=1
pkgdesc="X.org SiS video driver"
arch=(i686 x86_64)
url="http://xorg.freedesktop.org/"
@@ -15,7 +15,7 @@ conflicts=('xorg-server<1.12.0')
options=('!libtool')
groups=('xorg-drivers' 'xorg')
source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
-sha256sums=('4e841080ea524f37d887ef4ee50df5b9f7f5b417abddc9eb8ddad19128c0b10d')
+sha256sums=('be2eb6acba081e88dabc5be9db379e3da89a4d4edeb68064f204bf343a411cd0')
build() {
cd "${srcdir}/${pkgname}-${pkgver}"
diff --git a/extra/xf86-video-sisusb/PKGBUILD b/extra/xf86-video-sisusb/PKGBUILD
index 2bc90e5d3..436edc120 100644
--- a/extra/xf86-video-sisusb/PKGBUILD
+++ b/extra/xf86-video-sisusb/PKGBUILD
@@ -1,8 +1,8 @@
-# $Id: PKGBUILD 162883 2012-07-02 16:26:42Z andyrtr $
+# $Id: PKGBUILD 163665 2012-07-17 16:47:27Z andyrtr $
#Maintainer: Jan de Groot <jgc@archlinux.org>
pkgname=xf86-video-sisusb
-pkgver=0.9.5
+pkgver=0.9.6
pkgrel=1
pkgdesc="X.org SiS USB video driver"
arch=(i686 x86_64)
@@ -14,7 +14,7 @@ conflicts=('xorg-server<1.11.99.903')
groups=('xorg-drivers' 'xorg')
options=('!libtool')
source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
-sha256sums=('6508f0edcbbca978f97665953135fb564e988fed437a7c56611f8355bb4daa6b')
+sha256sums=('73dbef43c56a4ce1445c27ebac2ddc062c643c32ca6e2a4d095aea2185b9e046')
build() {
cd "${srcdir}/${pkgname}-${pkgver}"
diff --git a/extra/xf86-video-tdfx/PKGBUILD b/extra/xf86-video-tdfx/PKGBUILD
index 2e7c5c008..39b4bc555 100644
--- a/extra/xf86-video-tdfx/PKGBUILD
+++ b/extra/xf86-video-tdfx/PKGBUILD
@@ -1,9 +1,9 @@
-# $Id: PKGBUILD 162838 2012-07-01 08:07:37Z andyrtr $
+# $Id: PKGBUILD 163667 2012-07-17 16:49:31Z andyrtr $
# Maintainer: Jan de Groot <jgc@archlinux.org>
pkgname=xf86-video-tdfx
-pkgver=1.4.4
-pkgrel=2
+pkgver=1.4.5
+pkgrel=1
pkgdesc="X.org tdfx video driver"
arch=(i686 x86_64)
url="http://xorg.freedesktop.org/"
@@ -15,7 +15,7 @@ conflicts=('xorg-server<1.12.0')
options=(!libtool)
groups=('xorg-drivers' 'xorg')
source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
-sha256sums=('e0b931dea0fb1ebfaa628a3dc07bf6945b377d3f7bbfd3a43ca4c80c46d48f88')
+sha256sums=('70d5fbadfb60fc25e4f90f2a1aad258f64fa3953efbc1059103a8d845870d859')
build() {
cd "${srcdir}/${pkgname}-${pkgver}"
diff --git a/extra/xf86-video-trident/PKGBUILD b/extra/xf86-video-trident/PKGBUILD
index 0092f0b85..001edd620 100644
--- a/extra/xf86-video-trident/PKGBUILD
+++ b/extra/xf86-video-trident/PKGBUILD
@@ -1,8 +1,8 @@
-# $Id: PKGBUILD 154198 2012-03-24 10:03:48Z jgc $
+# $Id: PKGBUILD 163669 2012-07-17 16:51:34Z andyrtr $
# Maintainer: Jan de Groot <jgc@archlinux.org>
pkgname=xf86-video-trident
-pkgver=1.3.5
+pkgver=1.3.6
pkgrel=1
pkgdesc="X.org Trident video driver"
arch=(i686 x86_64)
@@ -14,7 +14,7 @@ conflicts=('xorg-server<1.12.0')
groups=('xorg-drivers' 'xorg')
options=(!libtool)
source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
-sha256sums=('4bb3d091ab7788e1883d6d9e7e0c7ecbf9f57e5ef03d94a5082c2870dbbfc50b')
+sha256sums=('6a58e3f3034abd8803af8a5c7dd5a6a4a28ed4fdac742ffb05518caaddc28104')
build() {
cd "${srcdir}/${pkgname}-${pkgver}"
diff --git a/extra/xf86-video-tseng/PKGBUILD b/extra/xf86-video-tseng/PKGBUILD
index cab1cfcda..7c482520f 100644
--- a/extra/xf86-video-tseng/PKGBUILD
+++ b/extra/xf86-video-tseng/PKGBUILD
@@ -1,9 +1,9 @@
-# $Id: PKGBUILD 153376 2012-03-12 20:54:48Z andyrtr $
+# $Id: PKGBUILD 163671 2012-07-17 16:53:38Z andyrtr $
# Maintainer: Jan de Groot <jgc@archlinux.org>
pkgname=xf86-video-tseng
-pkgver=1.2.4
-pkgrel=6
+pkgver=1.2.5
+pkgrel=1
pkgdesc="X.org tseng video driver"
arch=(i686 x86_64)
url="http://xorg.freedesktop.org/"
@@ -13,14 +13,11 @@ makedepends=('xorg-server-devel>=1.11.99.903')
conflicts=('xorg-server<1.11.99.903')
groups=('xorg-drivers' 'xorg')
options=('!libtool')
-source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2
- tseng-1.2.4-git.patch)
-sha1sums=('1b45f55657b2c92f30abb0769cae57fca98d93b7'
- 'd84bb75d62888096da7477b38e8b13f9c23d4e3a')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
+sha256sums=('c06dc5205f627e5afc795ecfa75e18d2d1db4e1f1f195fd017dad60854407819')
build() {
cd "${srcdir}/${pkgname}-${pkgver}"
- patch -Np1 -i ${srcdir}/tseng-1.2.4-git.patch
./configure --prefix=/usr
make
}
diff --git a/extra/xf86-video-voodoo/PKGBUILD b/extra/xf86-video-voodoo/PKGBUILD
index 61689bd1c..581cf0b90 100644
--- a/extra/xf86-video-voodoo/PKGBUILD
+++ b/extra/xf86-video-voodoo/PKGBUILD
@@ -1,9 +1,9 @@
-# $Id: PKGBUILD 153386 2012-03-12 20:55:23Z andyrtr $
+# $Id: PKGBUILD 163673 2012-07-17 16:55:52Z andyrtr $
# Maintainer: Jan de Groot <jgc@archlinux.org>
pkgname=xf86-video-voodoo
-pkgver=1.2.4
-pkgrel=6
+pkgver=1.2.5
+pkgrel=1
pkgdesc="X.org 3dfx Voodoo1/Voodoo2 2D video driver"
arch=(i686 x86_64)
url="http://xorg.freedesktop.org/"
@@ -14,7 +14,7 @@ conflicts=('xorg-server<1.11.99.903')
groups=('xorg-drivers' 'xorg')
options=('!libtool')
source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
-sha1sums=('7ecd232cc0b7fe507e18e08799791eefa9fdaf48')
+sha256sums=('9e3eb8a3fdcc60ce4f7c37649188cfa67dcf25cda3a85d8027588458bb3fd7e8')
build() {
cd "${srcdir}/${pkgname}-${pkgver}"
diff --git a/kde-unstable/soprano/PKGBUILD b/kde-unstable/soprano/PKGBUILD
index 541596d58..627063cdd 100644
--- a/kde-unstable/soprano/PKGBUILD
+++ b/kde-unstable/soprano/PKGBUILD
@@ -1,15 +1,15 @@
-# $Id: PKGBUILD 162537 2012-06-27 08:34:59Z andrea $
+# $Id: PKGBUILD 163682 2012-07-17 18:39:18Z andrea $
# Maintainer: Andrea Scarpino <andrea@archlinux.org>
# Contributor: Tobias Powalowski <tpowa@archlinux.org>
pkgname=soprano
pkgver=2.8.0
-pkgrel=1
+pkgrel=2
pkgdesc='A library which provides a highly usable object-oriented C++/Qt4 framework for RDF data'
arch=('i686' 'x86_64')
url='http://soprano.sourceforge.net/'
license=('GPL' 'LGPL')
-depends=('qt' 'redland-storage-virtuoso' 'libiodbc' 'virtuoso')
+depends=('qt' 'redland-storage-virtuoso' 'libiodbc' 'virtuoso-base')
makedepends=('cmake' 'openjdk6' 'doxygen')
source=("http://downloads.sourceforge.net/${pkgname}/${pkgname}-${pkgver}.tar.bz2")
md5sums=('273c3403aeb6d8a43e78a4887f50a385')
diff --git a/libre/icecat/PKGBUILD b/libre/icecat/PKGBUILD
index ebd5a1350..9347d3785 100644
--- a/libre/icecat/PKGBUILD
+++ b/libre/icecat/PKGBUILD
@@ -16,7 +16,7 @@
_pgo=false
_pkgname=icecat
-pkgver=12.0
+pkgver=13.0.1
pkgrel=1
if [ -z "$pkgname" ]; then pkgname=$_pkgname; fi
@@ -66,7 +66,7 @@ fi
url="http://www.gnu.org/software/gnuzilla/"
install=icecat.install
-source=(ftp://ftp.gnu.org/gnu/gnuzilla/${pkgver}/${pkgname}-${pkgver}.tar.xz
+source=(ftp://ftp.gnu.org/gnu/gnuzilla/${pkgver::4}/${pkgname}-${pkgver}.tar.gz
mozconfig
mozconfig.pgo
xulrunner-copy-stub.patch
@@ -75,19 +75,17 @@ source=(ftp://ftp.gnu.org/gnu/gnuzilla/${pkgver}/${pkgname}-${pkgver}.tar.xz
icecat-safe.desktop
icecat-install-dir.patch
vendor.js
- gcc47.patch
cairo.patch)
-md5sums=('04a5504c5c473354bcd20f7116360fee'
+md5sums=('ba249f3e889089dc64615333dd324791'
'3117865902d1a20ab61d75707be9888e'
'ac29b01c189f20abae2f3eef1618ffc0'
'683c4540ab84c220937feb7d1a1450ee'
- 'd403b0ae09306fef3870132e7fd33ed2'
+ 'bae9a078edc6797f9de9ab68e5f4827e'
'e81ad01dbc16ba28bf92ba4b7c309ca7'
'd93fe402b87cd000a869e1fd6badc6c9'
'268e65c8fcae6152e156c09760a18dfd'
'0d053487907de4376d67d8f499c5502b'
- '79e471e0bd03b1d4e84fd3a6776bd619'
'721c59ffc14f14cb0d3a90b7e84df70e')
if [ "$_pkgname" != "$pkgname" ]; then
@@ -104,7 +102,6 @@ build() {
patch -Np1 -i "$srcdir/icecat-install-dir.patch" # install to /usr/lib/$pkgname
patch -Np1 -i "$srcdir/xulrunner-copy-stub.patch" # small fix
patch -Np1 -i "$srcdir/libre.patch" # Remove Google+Mozilla stuff
- patch -Np1 -i "$srcdir/gcc47.patch"
patch -Np1 -i "$srcdir/cairo.patch"
cp "$srcdir/mozconfig" .mozconfig # Load our build config, disable SafeSearch
diff --git a/libre/icecat/libre.patch b/libre/icecat/libre.patch
index ff7f6f4ed..b7bb7cd50 100644
--- a/libre/icecat/libre.patch
+++ b/libre/icecat/libre.patch
@@ -1,8 +1,7 @@
-diff -urN iceweasel-13.0.orig/browser/app/profile/firefox.js iceweasel-13.0/browser/app/profile/firefox.js
---- mozilla-build.orig/browser/app/profile/firefox.js 2012-06-01 09:03:47.000000000 -0300
-+++ mozilla-build/browser/app/profile/firefox.js 2012-06-05 19:53:08.847012282 -0300
-@@ -64,10 +64,11 @@
- // Preferences for AMO integration
+diff -Naur icecat-13.0.1/browser/app/profile/firefox.js icecat-13.0.1-libre/browser/app/profile/firefox.js
+--- icecat-13.0.1/browser/app/profile/firefox.js 2012-07-12 14:27:37.000000000 -0300
++++ icecat-13.0.1-libre/browser/app/profile/firefox.js 2012-07-17 21:35:32.600229972 -0300
+@@ -65,6 +65,7 @@
pref("extensions.getAddons.cache.enabled", true);
pref("extensions.getAddons.maxResults", 15);
pref("extensions.getAddons.get.url", "http://www.gnu.org/software/gnuzilla/addons.html");
@@ -10,10 +9,7 @@ diff -urN iceweasel-13.0.orig/browser/app/profile/firefox.js iceweasel-13.0/brow
pref("extensions.getAddons.search.browseURL", "http://www.gnu.org/software/gnuzilla/addons.html");
pref("extensions.getAddons.search.url", "http://www.gnu.org/software/gnuzilla/addons.html");
pref("extensions.webservice.discoverURL", "http://www.gnu.org/software/gnuzilla/addons.html");
-
- // Blocklist preferences
- pref("extensions.blocklist.enabled", true);
-@@ -81,7 +82,7 @@
+@@ -82,7 +83,7 @@
pref("extensions.update.autoUpdateDefault", true);
// Dictionary download preference
@@ -22,19 +18,468 @@ diff -urN iceweasel-13.0.orig/browser/app/profile/firefox.js iceweasel-13.0/brow
// The minimum delay in seconds for the timer to fire.
// default=2 minutes
-@@ -242,7 +243,7 @@
+@@ -247,7 +248,7 @@
// 0 = blank, 1 = home (browser.startup.homepage), 2 = last visited page, 3 = resume previous browser session
// The behavior of option 3 is detailed at: http://wiki.mozilla.org/Session_Restore
pref("browser.startup.page", 1);
-pref("browser.startup.homepage", "chrome://branding/locale/browserconfig.properties");
+pref("browser.startup.homepage", "about:home");
-
+
// This url, if changed, MUST continue to point to an https url. Pulling arbitrary content to inject into
// this page over http opens us up to a man-in-the-middle attack that we'd rather not face. If you are a downstream
-diff -urN iceweasel-13.0.orig/browser/locales/en-US/chrome/browser-region/region.properties iceweasel-13.0/browser/locales/en-US/chrome/browser-region/region.properties
---- mozilla-build.orig/browser/locales/en-US/chrome/browser-region/region.properties 2012-06-01 09:03:48.000000000 -0300
-+++ mozilla-build/browser/locales/en-US/chrome/browser-region/region.properties 2012-06-15 02:17:00.978636665 -0300
-@@ -1,28 +1,28 @@
+diff -Naur icecat-13.0.1/browser/base/content/abouthome/aboutHome.js icecat-13.0.1-libre/browser/base/content/abouthome/aboutHome.js
+--- icecat-13.0.1/browser/base/content/abouthome/aboutHome.js 2012-07-12 14:27:37.000000000 -0300
++++ icecat-13.0.1-libre/browser/base/content/abouthome/aboutHome.js 2012-07-17 23:19:05.593724417 -0300
+@@ -41,99 +41,348 @@
+ // If a definition requires additional params, check that the final search url
+ // is handled correctly by the engine.
+ const SEARCH_ENGINES = {
+- "Google": {
++ "Duck Duck Go (Lite)": {
+ image: "data:image/png;base64," +
+- "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"
+- , params: "source=hp&channel=np"
++ "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" +
++ "RU5ErkJggg%3D%3D"
+ }
+
+-, "Яндекс":
+- {
++ "Seeks Search": {
+ image: "data:image/png;base64," +
+- "iVBORw0KGgoAAAANSUhEUgAAAEYAAAAcCAYAAADcO8kVAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ" +
+- "bWFnZVJlYWR5ccllPAAABWFJREFUeNrsWWtsVEUUnltLH7tbaeuDbfCBojUoBTGmooLE+Igx+gON" +
+- "RvEJhEQNUdEYA0Ji4xNf2Bg1iBJJrGBC+CEBNYoxxmh94CMKRE2MitBqoZRi6bbdZT3TfhM/TmZ2" +
+- "u5jGsOEkX8/0ztzp3HPP4zu3UTabNUfEI9YwgzAxjUbBGkG7IAv0CwYE53rWC+KChFloRh329igN" +
+- "zD8keJR+P2DvEbgnrjp4eWT65GerSZuU6FWii9Fj5pGHvC6ow/WpdP1C7SV3Bm18eNpDG2a0oA0P" +
+- "v0qFSn3IMPOKxChsmBJ1/TpBEuNn1NxRB8XOoJSYRabfrCiG0FGiDXMZ9HeC73PfGpkOST0vmYGi" +
+- "LEraMCdB/5jP46xhnhaj7C3Sal2qjFSDcU8eb4m2m4xpHvKWYwSTBd2Cr1HBrIwVnCXYIdiiNrDh" +
+- "Wi8YQLVzZ+mDt/ar9acK5gqOE6wTvKvmE4JzsN83ghSu1+AMMcGngr/pnnHYM4nzrRX8EapKm5Fc" +
+- "3/bwlAn/Jt/EtJdNmdvidjxcpyrjT+D6Fx7LPoA5jf3ktU5metY9rtZcRHNn0vV3cO0rtf6GwN9v" +
+- "DCXfX6AbVLL1hJJOxIM6UtwnJG7ORuIaMl5W7W297g2MmwR3YLxQcDmty3jOdongCrrXyRTBaoyf" +
+- "x5qdgjZ4qzfHbCQ3mzXcChcYH8hhIGf0zwQ3Ch6k8/Ae9yEM3hc8LFguWIm5uwIvwYXhPdA2RNbT" +
+- "/BLoFsECwXsw1gUIZa9h7NvZivGLgkk010eHjv5jbitXD1HiWVMhuB7jDXR9E/R0Qa3nPvvmTxZc" +
+- "7fGWyQhNK6/R9b8Ev4aSr0HyunWQ3Q/li8/hdh8JTiOD+DpPa7jegHtriUN35zDMRMEJGH9J17dB" +
+- "18KzO9V9NvndjbH1sB9objp0u+CT4VYlJ5txKLvpDMFsIJ/EwYOs9bsEp+RYeyz0nx7y6ORsGu8K" +
+- "EM2kx1ts7rkXL+YxNd8I/TOcoCDDOB5jY/Fj/P4cEmVTjr0SlKNCOcjJ8fQgodAcQ/d/i/BLK8Oo" +
+- "ZtYcLVgGD1wq2K7mx0LvKITHaFlCbny/oI4M43uQDJJkL3KH5RWnB/auh96ax9AGnKQdoZNAyO4T" +
+- "VHv4VobC+XzPntWUMgpivtwzufbgWbVpSHYh4V0DnrA6YETrCWdgvGUYIboX9KEahqlFcq0GT2HZ" +
+- "jwrXBW4zJ/C8FYdqmEWUb94aZniUUbXJVbmm0N6/5zjbPnohcfKePiDlSfBJeO0r9Bx8pi7oEw/F" +
+- "MPMp8S0roARHar+QYS6FXp9nv230dicVcA7LaZoxHo/ncfIbEdi6Qgxje4vFRL5aRqA/uxn6Vc9c" +
+- "muK/lXqeuQXsPwZMdi0RPedxH1AFva0QwyygavDkCBjlFuy/HJWhksLQgOVyxWqh3mYx7RND2Pi8" +
+- "0n1+baawmU9e2o6x/XR7raIQVb4mskGQQaO4ydNENlATeTE1kXOQc/agXDpZqhq42dQL2US9G1Wl" +
+- "G5XEzaWJbyTBddzcTuSmAYTMOKybQWsmeppIbk5nqcbxJ1RHO37B10TeRL3KU543kUKF0J8leqgq" +
+- "8ae8PdAd6ltPL954LXQV/m4HEbgaYqjT6KNZHWhAKd5+mzpDN4WflUdw5koweitv4lldX2QpxQSc" +
+- "/UOfx9jvvTHBKP+/RmKRoHwIiYg8pgQJsszTKFYSV2qC0VcShyqnqlEKRpolqsAyFfnpKmLOnOgr" +
+- "VAVirhYnYzsZLbgSe57nwtL375N8H+Oy3H2qKpAKEL5eVc65E04rD2NW66uWrUDobKnAnPs7PR5+" +
+- "tLFQHjMS0knhEZLdim/8bxId+RetX/4RYACXlwEEPBQycwAAAABJRU5ErkJggg=="
++ "iVBORw0KGgoAAAANSUhEUgAAAIYAAABRCAYAAAAXQt4GAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz" +
++ "AAABfgAAAX4BzURP7gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAACAASURB" +
++ "VHic7Z13eBVV+sc/t7cU0gghQAgJCUlo0kLvuCDIIqgo64qrIi5EBXd/KFhgVXSFxY51sSA2EFcE" +
++ "UXqTJi20ECAQIJ2QTpLb7++POJOZufcmAddd2If3eea5N3fOnDPznu+85z3f9z0nKo/H4+E6Femt" +
++ "S7+rVCqf329I00X7376BqxEBBB6PB4/Hg9vtlp1XqVTiIf3thjRdrjtgSMGgPARRq9XiodFoRFDc" +
++ "AEfT5boBhmAl3G43LpcLl8uF0+kkvySXbcc34HA6CAkIo2VIKzq26YpWqxUPjUaDRqMBboCjqXLd" +
++ "AAPqQeFwONh/eg+vrH6ezNyjeJC7SZ3adOOhYTPoFpeKXq9Hr9cD3ADHFYjqenA+heHD6XTicDj4" +
++ "bu8KXvj6SRwue4PXzbzlGW5LvRuj0YjBYBCth9L/uCHecl1YDMGncLlc/HR8M3O/elw81yK4Jant" +
++ "BtI8KIqKmjK2ZP5IcVUhAG/8+BJRwa3o3WGACAa1Wn0DFE2Qa95iCNbC4XBgs9m459UxZOYfA6Bv" +
++ "/GDShs3BoDOIlsDusPHOln+wOWMtABGBkSxLW0uAJQCTyYTBYLhhNZog6v/2DTRFhFnH9uMbRVBE" +
++ "Bbfi0eFPYzKYMBqNmM1mLBYLQYHBPPq7OcQ1TwSguKqI4xcO43A4cLlcuN1urvF34ZqQax4YgsVw" +
++ "uVycKTgl/j66y+3odXoMBoMICuEz0BLIsJTRYtmfTm7C6XTeAMYVyDXtYyiJrNLLl8RzLYKjUavV" +
++ "6HQ69Po6gKjValwuFx6Ph/ZRHcSyl61V4hT3BiiaJtc0MKTi8XiwOW3i3xU1pTISS/j0eDyo1Wqq" +
++ "bVVi2WBTMy+Q3ZCG5aqGEkG5vo7fSlQqFV3b9hT/3pz5g+h7CEOE8Ol2u9l0/AexbGhAhIz9vOF0" +
++ "Ni5XBAwpAHxR0sLv/y6QKDuzZ1xf9No6sioj7zCbjn+P3W7HZrPJjvXpq9mRuREAiyGQgYkjRPbz" +
++ "akHxn34R/tuimTdv3rzGCknNsPINFQ5lvEKQX/t2SoGoRoPKreZA9h4A9mfv4mJFESGmUFSoOVNw" +
++ "ks92fMD7m14Vr5/Y6z56xPURSS6dTtfk6ar0uaX34gsU/2tWqFEew1eMQohTlFQVE2RqhkZdp2jh" +
++ "rZQev9Z0CzMSu91OTU0NlVWVTHx9BBW1ZY1e2ztuIH8Z9TeCA4OxWCxN5jF8RW+VsxklYaZWq8Xf" +
++ "/xekSc6n2+3G6XTidDr5+eROvj/wDT9lbqb08iVUqAgyB5MaP5AHhqbROqItOp0OnU6Hx+MRHcNf" +
++ "Y8Kl8q99nzcKChUqxve4h3v6PYTJWMdz6PV6tFqteC+NgUJqGYWprsvlEq+TOr7C8b8EjgYthvC2" +
++ "CDGKTza/yxtr/47H4z1kAGg1Ou7pP4U/DZl+VabbV/tCjMRms3Hk7EEeem+iGCO5o9tk7C47mUVH" +
++ "cbjsWAwB9Go3gD7xg4hsFoXBYMBgMIiWoimxEukzO51Ojp47xJr9K9mVuZX8shyCzSGEBoQxJGUU" +
++ "E/tOJtASJL4I/y4reS2IX2AoA1evffcin2x9RzyvUWuJb56IzWmjoCIXm8Mqnnv0d3OY0OcPGI1G" +
++ "jEYjOp1OfMOaKlJiy+l0UlFVzh9fv5Xzl84C0DduCGlDZ6PRaGSdolarxXC7wG9IO66poHA4HHy0" +
++ "6W3e/nEhLrfLZ/kQSyiP/G42N990KwaDQbRK/wvgaHAoEcxpVv5Jlm1/X/x9VKfxTOx1HwHGIFQq" +
++ "FZW15Szb/T6bMr4HYPGGl2nfIomucT1kQ4nH47kiZQnAcDgcLPruOREUEYEtmDr4L5hMJvR6PTqd" +
++ "ThwmpKZdq9U2+U2WAtHhcLDwX/P44qcPZWWaB0Vhc9RSWVuBBw9l1aXM/3Y2QaZmpCb2B/ifCdT5" +
++ "BIbU6XK5XLy77hXxrRnd5Xbu6zdd7AyNRoPJZGLGyKdRqVRsPL4Gl9vFusPfkdSqkyxZpimiHOOd" +
++ "Ticb09eyat9XAKhVah4b8TTBAc0wmUyiRZL6DwIYpUdTQeF0Ojl0Zh9f7vxYPN+1dU/GdZtESnRX" +
++ "VCoV5y5l8dFPb3E8Lx2X28nfVv6F96esoHXzGC+f6noFiF/bLlXWrpNbATDrLdze/V50Oh1GoxGL" +
++ "xUJAQAABAQGYzWYeGPwIalVdlbuztmKz27xiFMqRS8mNSAHpcDjIv5TLi9/MEcvf3uNeOrbuitFo" +
++ "xGQyYTKZMJvN4rAlHTqkZl3ZlnLGITiXDoeD19a8IPpRAxKGM2fMy3Ru011sM6l1J56b8DqJUR0B" +
++ "qLJWsvnoD9jtdjFYd71zHA0O+m63m2rrZWrtNQBEh8QQaApCq9WKTp1wGI1GIppFilHNksvFXKq4" +
++ "6DOq6Q8IwhvrcDjEMPvcrx6nsrYcgA5RHbkz9T70er3YptKH8DfGNwQGwdG02+1UVVdyIvcoAFq1" +
++ "ljt7/gmtVitGcAMCAuqiuAFBTB1anxeyO2sbDocDp9Ppc3p7vUmj09WyyyXid71GL5pqaU6loGyN" +
++ "RoNWoxPL69QGsZMFUy8VKTCUh9PpZOnW9zhwto7MMustPDbiGYwGozjb0Ov1DU6HBcKtIQpf2p7D" +
++ "4eBI9kGcbicA3dv2JTIoCr1eL3OkPR4PdrudjjFdCTaHUFFTxqnCjP+pCG6jwAgPjMSgM2JzWMks" +
++ "PEpZdQkmk8knC1hjq+Z00QmgbmytsVYTaA/Ebrej1WpRqVS43W7RERU6pKgsn59ObMHhdBBoDOKm" +
++ "tqnkXjrPPze/Id7HlIEziQqJls00pIBQ3ou/IUr6Pa8kh1P5GWQVZpJVcJKsokzyy3LFNg0ag/gi" +
++ "CFZJp9OJdWjtWrG9AEOgrC1BrtThvlakQWCoVCr0Oj2dWt/E/rO7cbldfHvwC6YOexyHw4FGoxHf" +
++ "SrvdzgebXsPpcgB1Cpm+7G6Gp4zhzj6TadO8LS6XSwSIx+Nhffpqvt69jMPnD8i4EY1ai0lnEusa" +
++ "0H4E/ROGibMMoQ5A1tm+4jgej4fLtVWcLsgkqyCTrMJMzhSe5MzFU9TYqhtUzvH8dBnYlB18sbKQ" +
++ "qtoKAIJMzZqs9OtBGgWGWq3mDwOmsP/sbgDWHF6B1VHL9JufwO12o9VqKaoo4INNr7Hp2FrZ9Tan" +
++ "le8Pf82PR79lcNLvuLvf/cS1SEClUvHlro94d8Min+263E4u/xI2jwiIZHKfabLZBtQBwuFwyADh" +
++ "crm4UJxdB4LCTLIKT3Km8CSF5XlemeT+JNgUgs1pxeqopaS6mHXHVjGu512yF8HjqUs1XLL5TbHe" +
++ "pJadfU5Vr0drAQ0QXIJzZrPZqKmp4cWVc1ib/o14XqPW0CK4FeGBEZzIP4pdkisxImkspdXFHLyw" +
++ "R9YhKlT0jOtPVHBLVh38Svw9KrgVPWP7odPoyS07z96z28VzAYZA/j7+PSJDosTZh06no8Ze/UvH" +
++ "Z3K6IJOzRac4e/E0Vkdtkx5cq9bSKrQtMWFxxIS3o21YPDHh7QjQB7HlxI+8u22heM/3D3yE8al/" +
++ "wGgwotVqcbqcLF63gG9+/gwAg9bAO5O/IjqitThDk/o/glxPgbcGmU/hrbRarVyuvszra+bLOtSr" +
++ "MpWKyX2nM7LjOFQqFfkVOaw69CU7Tm3E9YtDp5Tbuv2Bu3rdLzqnHo+H3ae3snjzy9TY60x99zZ9" +
++ "6J8wjLyKC+SUZpNdnMXFyoImP2SIOayu88PjiQmLIzaiPa1C26DT6r2CYB6PB4fTwVMr0jiely7W" +
++ "YdZbaNe8Pc3MoaRf2Mdla30i0F2p93NP/4fE1EIBvFLuxpear2Wuo1FKXJjb19bWUlNTw96TP/HF" +
++ "7iUczT0olrUYAukR05ehSaPo1KabzDH0eDwUleezct9nbDy+WpaF1Tt2EI+NeFq27gPA4XBwpuAU" +
++ "Mz6fjNtPXMaX6DQ6WoW0JSY8jrbi0Z5mlhAZAJQEmHR6K4QBKi6X89w3/8eh83v9K0+l4t6+f2ZC" +
++ "r3tEXkdgY5V+kNQxVUZmr0X6vElBNCHsbbVaqamp4di5w8z4bDIACZEpzB75EmZTfVhbqhjB6tjt" +
++ "di6WFTHrq4coqswH4Lmxb5DcujNms1lUKCACcc5XaX47JtQS/sswEEdseDxtI+KIDolBp9WJSvfF" +
++ "hErTAH0xowIw7HY7NbU1rNzzGWsPryS39LzYtl5roEvrHozqPJ6ecX1FTkcKcKkFkvIlgrqlnEtj" +
++ "zOx/Q5rkfALiNM3lclHtqBTLNA+MwvhLCr9AdgnjqwAMp9OJVqulOZHotQax7rYR8SJZJphfoSPd" +
++ "bjc3xfQSgREf0YEeMf2IjWhPu+YJhASEispVdrrybVRaC1+UuXBPHo9Htt717gF/YkLqH8guyqKy" +
++ "pgK700Z8ZBIWo0UWqPPFqwigWLduHdOnT5cNJ9u3byc8PFycAl9LoIAm5mNI5/JOp5NKa7l4LsQS" +
++ "JhJA0tiFML4KihZAAvU8g81pRaMJETtMGEqE2U5uWf1b2q/dcAYl3Cx2gsBlCJ0ojZUIokys8WdF" +
++ "lNdJgSZ0fgdDikh1C3UJ02dfYXehfbfbTWVlJTk5OTKdVldXExgYeM2uyG8UGMq8S7VaTVl1qXg+" +
++ "NKAe9dJIpxQYKpUKl8uFTqejU5tu5JSeA2Bn1iZuC5kkG7IEABVXFLEloz6hd1f2ZgJNQaTG9Rc7" +
++ "QBkTkU5lXS4XxZVFbD22HrfHRYglnNbhMWJgD5CZfCUwpBZGsGpS8spfoo4SFMIwohSr1YrdbvfS" +
++ "17UiV7R8QACHdH1HqCVMNl76S7oV/u4a01Oc9n5zYBnd2/YmXt9BHD5UKhUOh4Nl29/H8QvBBXD6" +
++ "YganL2awdG8zhnQYyS033Ua7Fgk+Gc6fMjbz2Y5/kn5+v1dSUffYPjw0fAYdY7qKPo1g0aTjvPRF" +
++ "kPIXSl34Su2TlvOXCyuNqwj3f61YC7iKdSUej4fS6npghFjC/JpkobzQaUVl+Szd8a54rtJawZyV" +
++ "adzZazLDO48mLCiCrMJMlu/+hK0n1onl9BoDdlfdbKaytpxVh75k1aEvSY7uzKiu4xnacSQWYwAq" +
++ "lYpNR9cy/19P+k2uOZC9m4c/2MOccS/xu5vGyjrR1zYJAgCENStSUQLJl66kn1KRguJalCsChtDJ" +
++ "UoshBYZUUUJZITiVXZhF2pJ7KarIl9VZZa1gyfY3WLL9DVSovBjKwe1HcsdN93Ewdw8/ndnIyaJj" +
++ "4rmMvCNk5B3h7Q0LGNhhBNEhbfh4+2JxihsdEkO/+CGEWsK5dPkim058T1l1CR48LFzzLBFBLege" +
++ "n+oX2NJO9/dGN/aW+0o1UP5+LYLj6iyGdCgJCPc5F5eC4sSFYzy6ZDIll4sBCDAEcX+/R9l1Zgv7" +
++ "z++sv8YHba3T6DHqTQxKvJnhHUdzsaqAzZlr2XpyHRU1dUnBtfYa1h1ZJbtuWNIYHhz4GHpd/Qzp" +
++ "jl738vr6+ezK2oLdaWfRmnl8+PC/vHyEqwFAYzrz9Zs/0FwL8qsshk6jx2II8LIUQujZ4XCQfmYf" +
++ "Mz56QMypCDGHMWf032kdGkv/xKGcKDjK9lPrKb18idLqSxi0RqKCW7H91Ho8eNiQ+R0JLVLonzAU" +
++ "g8FArCWeB6Me476B09mTtZ2Nx1Zz6MLPMiKsXXgCDwx4FIPeIIvEGo1G/jr6bzz6aTa5pefIKT3H" +
++ "2cJTJLZOkWWBXWvj/dXKr6HgmwwMARR2h02kg5uZQ2UNSh1Ah8PBnswd/N/SqSK13TwoimfHLqJl" +
++ "SCvRWe3Zvg894nt7Jc8Em0P4Lv1LAJbsfI24FgnERyXKOJKhnUYyoMMwCkrzWLj2WU4VHQfg5uSx" +
++ "aDVacSW8Xq8XZ0YajYZhyaP45Ke6xOadJ7cQF5Uogvl6lsaGJingGwNJk9K2pWbvUlWx+HuIOdSn" +
++ "tbDb7Ww5so7HP35ABEV0SAwvjH+TVmFtxGwogfGUZoEJ3+8bOI3OrboDYHXUsujHudTaa8QV7gLb" +
++ "aDabiQ5vTURQpHhfMeFxslXwAoEmfI+PShLLVlkrvUL315soZ2bKTDhhBtRQiqVSGgWGFIVut5tL" +
++ "lRfFc80sYbJzApW8dv+/eHLZNDEu0i6iPS+Mf4PmwS1kiTZKFlJKKJmMJp649QXCA5oDkFd+gdfW" +
++ "vSDSymq1WkasGXQG8b4qasu8OAZpW5WSBUvBppBr3hH0J8qUAyH0IKzntVqtskOZk9rQszY4lCgT" +
++ "X1wuF8UVReL5Zr8oVTjn8Xj4bt9yFnw3V+QPkqI6M2fMSwSag0UCTKVSUVRUxKFDh0hPTyc/P19m" +
++ "xkePHs2wYcMIC4rgqd//nVlfTsXhcrA7aysr9i5lUv8HvFILeycMYvMvhNies9vokzhINjRJn2PD" +
++ "0TViW2G/rIS/1pjHxkQJCiFvNT8/n3379nHw4EHy8vJkQbtx48YxevRodLq69MuGdjH0CwylaRJM" +
++ "khQYQcZm4k3ZbDZW/ryMdzb8QzzftU0vZo16HrPRIlqIjIwMZs2axbFjx3w1C0BsbCxDhw5Fq9WS" +
++ "0qYrDw/9K29ueAmAT3a8TUKLZHol9BNpabVaTb8Og9Fp9DhcdradXE9q/EAGp9yM3W4XLYzL5eKb" +
++ "PZ+Tfn4fUDfV7h0/sElLDK4l8dU3Bw8eJC0tjaNHj/q9LjY2lmHDhnmFB3yJz6FE2rAwPJzMyeCf" +
++ "G99kxZ6lYrmc0mxKq0qwWq0s2fymDBS94wYxe/SLWEwBIsP41ltvMXbs2AZBAfVhao1Gg16vZ2zP" +
++ "OxnR8da6cx43f1/9FPkludjtdpFuDjIHc0fqH+vuHw+LfpjL4vULyDh/hNziHPZm/sRL3zzFq2uf" +
++ "F9u5o+dkGWivZKXcf1sES1FTU8P8+fMZNmxYg6AAxKFGGuX1J14WQwmKyssVPPvF42w+9oPXxXuz" +
++ "d3Ak9wAJLVI4nLNP/H1wh5FMH/YEBn29L/HCCy+wZMmSJj+0wDYKx4xbnia7+DRZRZlU1JbxwrdP" +
++ "sOief6JSqcTh6YFhj3Ku+Cy7Tm/B6XayJn0Fa9JX+GxjUOLvGNl5nNdKtmvdYihTIWbPns177713" +
++ "Rdc2hUPxuxKtLnu7kEf/eR8nco/4raDWUSMDxciOt3H/wEcw6OvzMvbv389HH33kda1KpSIqKorm" +
++ "zZvLSLJWrVrJlhh6PB6CCGLuhEVM+3ASVdYKThYc4+31C3ls1BwRRFqNljnjXuSDTa+x9vA3sliL" +
++ "tM2Jve7n7j73y6K0DRFcSgVeLQvaFGnsTZa+tFu3buWDDz7weR/R0dGEh8vJx+jo6Cbnf8iAoXRm" +
++ "Xln1vAgKk87MLZ0nMCRxFHanjfMlZ9mU+T3H8uozufq0G8Ifez+MVqMVt2p2OBz89a9/9eIIhg8f" +
++ "zowZM4iIiJAtY1TmNwiRUICYyFieHDufp1c8isfjZu3hlXRo2ZGRXX+PXl+XpmcxBTDt5ln8vttd" +
++ "rD64gqLKAsprStFp9PSK7Ufv+EFEBEfKkmuk3Iiyg6Sfyrfs3+m0Kutu6LvT6aSyspK0tDQvvY4a" +
++ "NYq0tDTCw8N96tVXLqov8TmUuFwuTued4Mf0OprZpLfw9JgFJEaliJW2i2pP7/YDeG7VXzhRUDe2" +
++ "lVRf9AqH79u3j+zsbFkb48aNY9asWbJFPNKVZMKU1VfeZL+kwfyx/1SW7qgjqBZveJnY8HgSW6WI" +
++ "UVK1Wk2LkGgmD5gmy6EQ7k1QknTfDH9LGZVLEaQdqEwGkib9NHXa6ys6LP3bV11Op5OdO3dy4cIF" +
++ "2e8TJ07kscceE/UqfTZl7khjw6aXxRDGr5W7PxOnnGO63E5iVIrXW2wymZg7/hVmLruPgoo8Thdl" +
++ "UF5bSlBQkKigQ4cOyRoMCgoiLS0No9FIQECALEdSmnYn5Tek4na7uXfQVE7mH2PvmR3YnFZe+O4J" +
++ "Xp30Ec0CQkDlIftiFqcLThBiDqddRAJmvUWWWCNYM2Ueh7SjpESRy+XC4awLBGbkHiHIFExyq86E" +
++ "BIR5ra5X5o82BRTC0ADItq1yu91YrVaxHpVKhV6vx+PxcODAAVldYWFhTJ069Yr02tBw4tNiuN1u" +
++ "LlYUir8NSBguW68qOHsOhwO1Ws2AxBEs//ljPHg4dGEPMS1ixQbT09Nl9ScnJxMYGCgSU8pUe2We" +
++ "g9K86/V6XC4Xs259nrSP76GgPJeiinye+PJhzAYz2cWnsUs2n1epVLQIiqZ9iyR6xw9iaMeRDVLG" +
++ "0ilgUVkBn+/4kGPnD3Ey/7jI4grSPCiKDi1TSG0/gDHdb5cBToi5NNSW0J5AOtXU1PD111+zYcMG" +
++ "srOzyc7Oprpa3uYPP/xAcnIyhw8flv2ekpIiZqg3Va9NshjKsbS0un7NarApRPa2CcAQsq0CTIH1" +
++ "Farr1656PB6Ki+spdICQkBCvJX++NjXxFfKWDjXNAkKYPeZF/vrlFFxuJzll8uFKeg8FFbkUVOSy" +
++ "/eQGtmWuZ+YtTxMVFi1rT+hIARTrDq5m4XdzKZdkqynlYmUBFysL2J65kR8PrWLW2OeIiWwnJgQL" +
++ "+vF3X9K9xV555RU+++wzysoa3kbKarVis9n+LXptSPx6IAHGIPF79qXT4ncp2gT0FVbkieeDLSGy" +
++ "Rjt27CirNysry6suZb2+HkKZJ3GxspAl297A7rT5TcrxJXvPbGfKB3ew7tBqampqsNlssphCcflF" +
++ "Zn+axlNfPNIgKJRyNPcgUz64gy93fMzly5fFev1tiSAA8MSJE4wcOZK33nqrUVAA4n0mJibKfs/K" +
++ "yvKrS396bUi8gCFU0D9xqPjb+mOrZGOu9LhUWczmXzZbValUtA5tK3PEunTp4vUA+/fvFxUj3fjM" +
++ "33YJSoestOoS05bczeGc/Y0+oC+pslbw4qon+Wb351RXV1NbW4vVaqXycgUPLr6dDUfWNF6JD7E6" +
++ "anl74wLe2/Aq1dXV2Gw2MVNLKU6nkz179jB+/HhOnTrlozb/olKpSElJkf124sQJ0tPTvfpI6rNc" +
++ "STxIHEqkJlutVjMgaSiL1szD5XaxK2srX+35iEn9HxSpZZVKxaXKYuZ8kSYuC+zffjitwmJkeZ89" +
++ "evSQOWIej4d58+axePFiunTpglqtxu12y7gEfxlhwkMv+PZZWUKyIKHmCIYm3kKbsHa0bNaKKmsl" +
++ "+eUXOHB+Nwdz9niV/2Dra3Ru3YOYyFg0Gg3vb3qVc8VnvMoFGoMZmnALbcPjiW7WBquzloKKXI7k" +
++ "HmD32S1ei6K+/nkpvWL706ntTbKF31IpKiriySef9PIhAMLDw0lOTiYlJYWoqChRH1qtltjYWPR6" +
++ "Pd26dZNd43a7mTt3LosXLyYlJaVRvfpKgpaKbMGRdNyrra3l820f8ua6l8TCsRHtGdhhBMHmZmQV" +
++ "ZbLz1BYxi0qn0fHGPZ/SNjIOi8WCwVC3hYDNZmPWrFksXbpU1rBOp2PChAl0796d7t27k5iY6LUc" +
++ "QOo4ud1u7HY7q/euZO7ymbK61CoNE7rey83Jt2IxB8gWPAnPdCwnnXe2LKCwMk92bUrLm/jbba+S" +
++ "VZzJnBXTvDp5VPJ4xt00iUBzkMyZE+o9W3Sa97b9g6yLmbLrokPa8OqkjzAbLWzYsIG0tDTZ+fbt" +
++ "23P69GnZb3q9nilTpjBp0iQZ8SbVieDYOp1OZs2axVdffeVVxx133EG3bt3o1q0bCQkJPvXaaMaa" +
++ "EhjC1ElYzLxw1TxWH1zudaFUAo3BPDF6Pl3b9hDzLKSryoqLixk+fLjX2gqpBAQE0KlTJwYMGMC0" +
++ "adOwWCwyD9/tdlNQksddr4wUwQh1e3I92Hcm/doPFRc9+wKG3W6noDSfZ795lIKKXFnbf+g1lc0n" +
++ "v/f6/fauk7m1650yIky6OEjIeSivKuNv3/5FTBQS5NYudzK5/zQ2b97MzJlyMCslMjKSRYsWkZiY" +
++ "KK7oUy6NEKacQtuXLl1ixIgR5OXl+a03MDCQzp07M2jQIKZOnYrFYhEnEVLLrgSHbMtopYMH0KNd" +
++ "X1o1iyH74mkqrRXyi9VaurTuwewxL5HYMlm2Ek1Komi1WpKSkli/fj1WqxVfYrfbyc3NZefOnaxZ" +
++ "s4akpCQiIyNF38LpdLJm30q2HP9Rdt0tKbdzc/JY2V5c/pRq0pnoEt2DdcdWIV1WUFieR1GVPEk5" +
++ "NWYQd/W8X0wqEuqVcgNC3VqNjp5t+7Hh+Boxmx0gr+w8t3ScQHZ2Nhs2bPDbeSqVivnz59OtWzfZ" +
++ "nmbSZY9C29KhQa/Xk5SUxIYNGxrUa05ODjt27BCnuhEREQBeFkPa/z73EpdO4dQqNTERcdzSdTxJ" +
++ "UZ3p0qYHSVGdGJg4grQRTzKqy22EBoWJoJDSrlI2sWXLlowePZozZ85w7tw5v0oCKC0tZfny5YSF" +
++ "hZGUlFRPuu1ZRlbRSbGcWWfhwT4zMRstMg5B6ZtI+QmDxkRheR7nS+p9iVpnDUgSkdUqDVP6zCTY" +
++ "EiIDg3TpoZIVVXnU2OxWMgrq+QWHy05qzEAuFZSwceNGv887btw47rrrLhEUAh/hb38xKfHXsmVL" +
++ "xowZ0yS9lpSUsHz5cqKioujQoYNX+F1mGDw+XFQl8yeEa6WLZEC+dFFAszKELR2ahEXR3377Ldu2" +
++ "bSMjI4OzZ8/6XKkFYDabWb16NbGxdYTZlPdv53zJWfF8kCGYViFtZcv8/FG90s6sqCnnXEmWVxlB" +
++ "jFoTsWHtG1zG6KveGlsNpy9myM5P6fsXHHkqnnrqKb/tffjhh3Tr1o3g4GCRtZRyEIKupW1KF4vX" +
++ "1tZSW1vLt99+y9atW8nIyCA7O9uvXi0WCz/88APx8fGiNVRGl5u0DYKUGpYmzSpT8nyNWdI6lP9C" +
++ "wm63c/nyZTIzMzly5AiffPKJF3GTmprKkiVLcLodTFw8/Iq2RbgWZETiWKJq4nnmmWd8ntfr9Wza" +
++ "tImwsDARGMoV876ivU3R64kTJzh69Cgff/wxly5dktXRp08fli1bRmBgoIwlFfrObwaXcDNSnl05" +
++ "H/YVQPI5XkkaFCyMwVC3o5/FYiE0NJSePXsybtw4HnnkEVl8Ze/evezaQV63dQAACGFJREFUtYvQ" +
++ "mKDrDhQA+RU5tNDG+T3frl07cahq6rYI0r6R9oEvvfbq1YuxY8cyffp0WSLP7t272blzJ0OGDPEa" +
++ "KqGRZGBpo9JEXemh3GjVF0sp1CFcL90zMzAwkKCgIIKCgoiKimLBggWYzWbZfaSnp6NT6xvpgmtT" +
++ "zAZLg0xjWVlZgyylP1HqVYgW+9JrdHQ0CxYswGg0yupIT08XmVTlcskmr3ZXfm+onL9zSqApfRmt" +
++ "VktcXBypqals2bJFvD4jI4M7776D+OZ1/wDPX25EYyKUr7FXe81CpKLXGGgRGH1FHSWtX3o/8c2T" +
++ "0F7yr+aioiLKyspo1kz+f9uaIk3Vq0ajITExkZ49e7Jjxw7x+uPHj4u0vbCjoiBNXnDUFMU09Xql" +
++ "DyJ1Vp1OJwkJCTJgnDlzBrPBwku3vyNyGkr6XOp4KkP10imvw+Hgk11vy4AhZWahLq/0wdTHxYQe" +
++ "X6ZWLKvYRkkQ6dC6adOmBnVz8OBB2rRpI+sgt9vdKDspvXclgKV6FZ49KSlJBoysrCyfdHmDPsa/" +
++ "W5RvgfKBpH5KQYF847WoqChZ5BDqglB2h43zl87SNjxeljGuzImQRk0LSvL46aycU2hmCKXMWh9N" +
++ "drodbMpawx97PyxLepGO/8pp8OXaKkqqimnZrLXoSwkdK9yzP3nrrbcYMmQIJpNJ3DZSqqcrEX96" +
++ "1Wg0XkRYVFSU30yx3xQYvtLjfJ2Xrluprq7m559/lpVLTk6W+TeF5fmsPrCCdUe+pbK2ggcHzWDM" +
++ "TbfLNoiVdqAwZa6xV7Nw3bNeuaC9Ygax98JWymvr4y/bz6wjPjKRmzuPlU3HBdBJQVFSWcwz3zxK" +
++ "VlEmnVp3Z1Tn2xjQYSh6XZ1f1NimKHl5eSxcuJD58+fLGFuPx+PXoW+K3qU8S0VFBXv2yONFApch" +
++ "iPT7bwYM5c35S1VT0vDz5s2jsLBQVlfHjh3FTl9/9Dv+sXqebIby/tZXqLJWMKnvg7J9LKQPmlNy" +
++ "jpdXPc3Z4pOyumNC4/h9l7voENWR17c+V39fePho95vYPTbG9bhL9tZL6y0qL2DW51PFzduO5hzg" +
++ "aM4Blu1qzbsPfIVJb/KZX6nVasWsLYCVK1dit9uZO3cukZGR4g5EUstzJdZDqddnn32WkpISWZnk" +
++ "5GSvnYCEz98EGFJQSMPA0qVxUividDo5ceIE8+fPZ/PmzbK6WrVqRb9+/URLcHOXsazY8ynZF+UB" +
++ "qC/2LGHX6a10adOdrm170TmmO9W2Ks4Vn2HXqS1sOPo9bo+c8NGqdUzp9ziBAYGkBvdnSOEotmTW" +
++ "L5Nwe9x8uvtd1h1fxe+7TaRDdCfaRbanuKqII+f3c+jcPtLP/0y17bKXDm7v8UcMWoNfx/WBBx7w" +
++ "SvtfvXo1P//8M3/+85/p3r07HTt2xGg0XtViKEGvGRkZPP/882zbts1Lr3379pVNkxtlPn+tSJ29" +
++ "JUuW8NJLLzWY5lZaWkptrfeOviqVirfffpsBAwaI6YAqlYqs/JM89MGdsn+3dTVyR7f7mNDzHpFQ" +
++ "qrZe5pFP76G4qqjxixuQwYkjmTnqGUwmExqNhrVr1/Lwww/LyqxYsYKlS5eyevVqv/Xo9XpxCcDV" +
++ "iD+9qtVq3n33Xfr16yeSakr28zcbSgRrUV5e3mBUtSGZMGECffr0kcVgAOJbJvL6vR/z7IqZV7RD" +
++ "sCAGrYE7u/+JMTfdIcYltFotZrOZhZM+YNH3f+No7oHGK/IhozqO574B0718Ha97MBiYOXMmBoOB" +
++ "r7/+2mdddrud/Hz/0+qrlYkTJ5KamipLGFbe52+yJk+ZcXWlotPpSEtLY/bs2WKUUQCGcCS36cxb" +
++ "kz+lW0zvK6o7PiKJF297h9/3uIvAwEAsFgsWi0Xc7rldy3gWTHqXKYNmYNAZG6/wFzHpzEwf/CR/" +
++ "GpCGxWyRhel9+RhGo5GgoCCefvppXn75ZSwWyxU9x9WIwWBgxowZzJo1S6ZXKTB+Ux9DkIaGD1+i" +
++ "0Wjo3LkzTz75JElJSZhMJq9tmKHeQWoR3pKX7l7M0XOH+O7gcnad2SL+KwupWPQBxITF0aNtX0Z1" +
++ "Ho/JKN+TQ3Dy3G636Izd2W8yPeP68cWuDzldlEF+eY5PSj4ysCU3J49laPItBAc0k+13KqzElxJH" +
++ "ggjPptPpGD9+PIMHD+brr7/myy+/vGoL60+0Wi1dunRhzpw5tG/fXmxb+uxNiq7+WpHyBjt27ODH" +
++ "H3+U5XcqmwwNDSU5OZkOHTqIAR2B4vW1DbPgbQv/Hks4yqvKuHApm/yyXIqrCgkPiCSueQItgqO9" +
++ "FhspN5EVpojSfSakQamq6kqyijI5c/EkGrWWyKCWtAhuSVSzVn7rFdIgjx07xvLly0XqGWDatGkE" +
++ "BQWJiT/C4nGbzcbp06c5f/48OTk5lJWVXTUjKqQIJiQkiHqV6rSh/0X7mwFDulJeunGHsNLaVyBO" +
++ "umJKMMO+cjsaSwtQbpskkF/K1VjKoJWUDPO1I41yC0aByJLes/BdqFMAmgAyp9OJSqWSlRfYXKEd" +
++ "5XNczbaPDelVysn4y+D6zYYSaSQV6oYJ5e660rL+Qvj+oo1S+ltoR5pt7oue9rW7jpJKlv6trNdX" +
++ "dNlXvcqpn1BWoLoFfUjfVo/H4/UMv3YLKH96le6/7m8a/JtYDPDOnGroIaXolj6MNO6hvHmpeZXG" +
++ "Kny14av+hoJjUufZV93KepX3LK1TmeklXC8NASjLKj+lz3sl4k+vTWFTfzNggO91IdJzvuhYX29w" +
++ "Y2009OmrbuXvTanb3zjv616VwPB1vT9gKsv6i2U0JP4Cllei198UGOB/Ob/Xjfgwvb+mraa285+o" +
++ "90qe21fZX9NFV6vX3xwYN+T6lOtn06kb8h+V/wcIaMCGoyfFqQAAAABJRU5ErkJggg%3D%3D"
+ }
++
++ "YaCy": {
++ }
++
+ };
+
+ // The process of adding a new default snippet involves:
+@@ -143,7 +392,7 @@
+ // The <a/> part of the snippet will be linked to the corresponding url.
+ const DEFAULT_SNIPPETS_URLS = [
+ "http://www.mozilla.com/firefox/features/?WT.mc_ID=default1"
+-, "https://addons.mozilla.org/firefox/?src=snippet&WT.mc_ID=default2"
++, "http://www.gnu.org/software/gnuzilla/addons.html?src=snippet&WT.mc_ID=default2"
+ ];
+
+ const SNIPPETS_UPDATE_INTERVAL_MS = 86400000; // 1 Day.
+diff -Naur icecat-13.0.1/browser/locales/en-US/chrome/browser-region/region.properties icecat-13.0.1-libre/browser/locales/en-US/chrome/browser-region/region.properties
+--- icecat-13.0.1/browser/locales/en-US/chrome/browser-region/region.properties 2012-07-12 14:27:37.000000000 -0300
++++ icecat-13.0.1-libre/browser/locales/en-US/chrome/browser-region/region.properties 2012-07-17 22:01:56.786224684 -0300
+@@ -1,28 +1,24 @@
# Default search engine
-browser.search.defaultenginename=Google
+browser.search.defaultenginename=Duck Duck Go (Lite)
@@ -55,12 +500,8 @@ diff -urN iceweasel-13.0.orig/browser/locales/en-US/chrome/browser-region/region
-browser.contentHandlers.types.1.uri=http://add.my.yahoo.com/rss?url=%s
-browser.contentHandlers.types.2.title=Google
-browser.contentHandlers.types.2.uri=http://fusion.google.com/add?feedurl=%s
-+browser.contentHandlers.types.0.title=
-+browser.contentHandlers.types.0.uri=about:blank
-+browser.contentHandlers.types.1.title=
-+browser.contentHandlers.types.1.uri=about:blank
-+browser.contentHandlers.types.2.title=
-+browser.contentHandlers.types.2.uri=about:blank
++#browser.contentHandlers.types.0.title=
++#browser.contentHandlers.types.0.uri=about:blank
# Keyword URL (for location bar searches)
-keyword.URL=http://www.google.com/search?ie=UTF-8&oe=UTF-8&sourceid=navclient&gfns=1&q=
@@ -75,9 +516,59 @@ diff -urN iceweasel-13.0.orig/browser/locales/en-US/chrome/browser-region/region
# increment this number when anything gets changed in the list below. This will
# cause Firefox to re-read these prefs and inject any new handlers into the
-diff -urN iceweasel-13.0.orig/build/pgo/blueprint/elements.html iceweasel-13.0/build/pgo/blueprint/elements.html
---- mozilla-build.orig/build/pgo/blueprint/elements.html 2012-06-01 09:03:49.000000000 -0300
-+++ mozilla-build/build/pgo/blueprint/elements.html 2012-06-05 20:37:22.059133787 -0300
+@@ -30,3 +26,19 @@
+ # means that it's not possible to update the name of existing handler, so
+ # don't make any spelling errors here.
+ gecko.handlerService.defaultHandlersVersion=3
++
++# The default set of protocol handlers for webcal:
++#gecko.handlerService.schemes.webcal.0.name=
++#gecko.handlerService.schemes.webcal.0.uriTemplate=about:blank
++
++# The default set of protocol handlers for mailto:
++#gecko.handlerService.schemes.mailto.0.name=
++#gecko.handlerService.schemes.mailto.0.uriTemplate=about:blank
++
++# The default set of protocol handlers for irc:
++gecko.handlerService.schemes.irc.0.name=Freenode
++gecko.handlerService.schemes.irc.0.uriTemplate=https://webchat.freenode.net/
++
++# The default set of protocol handlers for ircs:
++gecko.handlerService.schemes.ircs.0.name=Freenode
++gecko.handlerService.schemes.ircs.0.uriTemplate=https://webchat.freenode.net/
+diff -Naur icecat-13.0.1/browser/locales/generic/profile/bookmarks.html.in icecat-13.0.1-libre/browser/locales/generic/profile/bookmarks.html.in
+--- icecat-13.0.1/browser/locales/generic/profile/bookmarks.html.in 2012-07-12 14:27:37.000000000 -0300
++++ icecat-13.0.1-libre/browser/locales/generic/profile/bookmarks.html.in 2012-07-17 23:34:22.488558721 -0300
+@@ -11,13 +11,20 @@
+ <DT><H3 PERSONAL_TOOLBAR_FOLDER="true" ID="rdf:#$FvPhC3">@bookmarks_toolbarfolder@</H3>
+ <DD>@bookmarks_toolbarfolder_description@
+ <DL><p>
+- <DT><A HREF="http://www.mozilla.com/@AB_CD@/firefox/central/" ID="rdf:#$GvPhC3">@getting_started@</A>
++ <DT><A HREF="https://parabolagnulinux.org/" ICON="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AihUrGP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AIcXLSJvFCcn////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AbRIkcP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGwTI0JWEBtB////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wCAAAACVQ8crP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AFYQHJI9ChRL////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBlKzZHPQoUzgAAAAH///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AknV8I0sdJv8kBgxU////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AMTExA1uTlX1JAYLyf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wC5ubkLhG1x6CQGDP0PAAARzJmZBf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AxsbGCZB+g/QkBgz/DQMDUdu2tgfMn5koxo2NOsxmmQX///8A////AP///wD///8A////AP///wD///8A////AJ2JjX+NeX3/JAYM/wwCA5T///8A////AL+AgAi/foFfuG51l7JgaXCvY3E2/4CAAv///wD///8A////AJlveHOzqqv6UCUt/yQGDP8MAgTW////AP///wD///8A////AKqAgAawXmhnqk9b36VNW/KjT13mqGh16Kl+hvCbdHz/YyYx/z0KFP8kBgz/DAIE7f///wD///8A////AP///wD///8A////AJlmZgWkQU5inDFD0ZUhNv+FFyz/bRMk/1UPHP89ChT/JAYM/wwCA9v///8A////AP///wD///8A////AP///wD///8A////AP///wCTIDMohRYtfW0TJMBVDxzQPQoU3SUGDcoMBARA//8AAP//AAD//wAA//8AAP/3AAD/9wAA//sAAP/7AAD/+QAA//kAAP/5AAD/+AAA9/AAAPwAAAD/AAAA/+EAAA%3D%3D" ID="rdf:#$GvPhC3">Parabola GNU/Linux-libre</A>
+ </DL><p>
+- <DT><H3 ID="rdf:#$ZvPhC3">@firefox_heading@</H3>
++ <DT><H3 ID="rdf:#$YvPhC3">Parabola GNU/Linux-libre</H3>
+ <DL><p>
+- <DT><A HREF="http://www.mozilla.com/@AB_CD@/firefox/help/" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==" ID="rdf:#$22iCK1">@firefox_help@</A>
+- <DT><A HREF="http://www.mozilla.com/@AB_CD@/firefox/customize/" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==" ID="rdf:#$32iCK1">@firefox_customize@</A>
+- <DT><A HREF="http://www.mozilla.com/@AB_CD@/firefox/community/" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==" ID="rdf:#$42iCK1">@firefox_community@</A>
+- <DT><A HREF="http://www.mozilla.com/@AB_CD@/about/" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==" ID="rdf:#$52iCK1">@firefox_about@</A>
++ <DT><A HREF="https://parabolagnulinux.org/" ICON="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AihUrGP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AIcXLSJvFCcn////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AbRIkcP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGwTI0JWEBtB////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wCAAAACVQ8crP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AFYQHJI9ChRL////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBlKzZHPQoUzgAAAAH///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AknV8I0sdJv8kBgxU////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AMTExA1uTlX1JAYLyf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wC5ubkLhG1x6CQGDP0PAAARzJmZBf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AxsbGCZB+g/QkBgz/DQMDUdu2tgfMn5koxo2NOsxmmQX///8A////AP///wD///8A////AP///wD///8A////AJ2JjX+NeX3/JAYM/wwCA5T///8A////AL+AgAi/foFfuG51l7JgaXCvY3E2/4CAAv///wD///8A////AJlveHOzqqv6UCUt/yQGDP8MAgTW////AP///wD///8A////AKqAgAawXmhnqk9b36VNW/KjT13mqGh16Kl+hvCbdHz/YyYx/z0KFP8kBgz/DAIE7f///wD///8A////AP///wD///8A////AJlmZgWkQU5inDFD0ZUhNv+FFyz/bRMk/1UPHP89ChT/JAYM/wwCA9v///8A////AP///wD///8A////AP///wD///8A////AP///wCTIDMohRYtfW0TJMBVDxzQPQoU3SUGDcoMBARA//8AAP//AAD//wAA//8AAP/3AAD/9wAA//sAAP/7AAD/+QAA//kAAP/5AAD/+AAA9/AAAPwAAAD/AAAA/+EAAA%3D%3D">Parabola GNU/Linux-libre</A>
++ <DT><A HREF="https://parabolagnulinux.org/packages/" ICON="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AihUrGP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AIcXLSJvFCcn////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AbRIkcP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGwTI0JWEBtB////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wCAAAACVQ8crP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AFYQHJI9ChRL////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBlKzZHPQoUzgAAAAH///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AknV8I0sdJv8kBgxU////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AMTExA1uTlX1JAYLyf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wC5ubkLhG1x6CQGDP0PAAARzJmZBf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AxsbGCZB+g/QkBgz/DQMDUdu2tgfMn5koxo2NOsxmmQX///8A////AP///wD///8A////AP///wD///8A////AJ2JjX+NeX3/JAYM/wwCA5T///8A////AL+AgAi/foFfuG51l7JgaXCvY3E2/4CAAv///wD///8A////AJlveHOzqqv6UCUt/yQGDP8MAgTW////AP///wD///8A////AKqAgAawXmhnqk9b36VNW/KjT13mqGh16Kl+hvCbdHz/YyYx/z0KFP8kBgz/DAIE7f///wD///8A////AP///wD///8A////AJlmZgWkQU5inDFD0ZUhNv+FFyz/bRMk/1UPHP89ChT/JAYM/wwCA9v///8A////AP///wD///8A////AP///wD///8A////AP///wCTIDMohRYtfW0TJMBVDxzQPQoU3SUGDcoMBARA//8AAP//AAD//wAA//8AAP/3AAD/9wAA//sAAP/7AAD/+QAA//kAAP/5AAD/+AAA9/AAAPwAAAD/AAAA/+EAAA%3D%3D">Parabola GNU/Linux-libre Packages</A>
++ <DT><A HREF="https://wiki.parabolagnulinux.org/" ICON="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AihUrGP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AIcXLSJvFCcn////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AbRIkcP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGwTI0JWEBtB////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wCAAAACVQ8crP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AFYQHJI9ChRL////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBlKzZHPQoUzgAAAAH///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AknV8I0sdJv8kBgxU////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AMTExA1uTlX1JAYLyf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wC5ubkLhG1x6CQGDP0PAAARzJmZBf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AxsbGCZB+g/QkBgz/DQMDUdu2tgfMn5koxo2NOsxmmQX///8A////AP///wD///8A////AP///wD///8A////AJ2JjX+NeX3/JAYM/wwCA5T///8A////AL+AgAi/foFfuG51l7JgaXCvY3E2/4CAAv///wD///8A////AJlveHOzqqv6UCUt/yQGDP8MAgTW////AP///wD///8A////AKqAgAawXmhnqk9b36VNW/KjT13mqGh16Kl+hvCbdHz/YyYx/z0KFP8kBgz/DAIE7f///wD///8A////AP///wD///8A////AJlmZgWkQU5inDFD0ZUhNv+FFyz/bRMk/1UPHP89ChT/JAYM/wwCA9v///8A////AP///wD///8A////AP///wD///8A////AP///wCTIDMohRYtfW0TJMBVDxzQPQoU3SUGDcoMBARA//8AAP//AAD//wAA//8AAP/3AAD/9wAA//sAAP/7AAD/+QAA//kAAP/5AAD/+AAA9/AAAPwAAAD/AAAA/+EAAA%3D%3D">Parabola GNU/Linux-libre Wiki</A>
++ <DT><A HREF="https://labs.parabola.nu/" ICON="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AihUrGP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AIcXLSJvFCcn////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AbRIkcP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGwTI0JWEBtB////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wCAAAACVQ8crP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AFYQHJI9ChRL////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBlKzZHPQoUzgAAAAH///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AknV8I0sdJv8kBgxU////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AMTExA1uTlX1JAYLyf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wC5ubkLhG1x6CQGDP0PAAARzJmZBf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AxsbGCZB+g/QkBgz/DQMDUdu2tgfMn5koxo2NOsxmmQX///8A////AP///wD///8A////AP///wD///8A////AJ2JjX+NeX3/JAYM/wwCA5T///8A////AL+AgAi/foFfuG51l7JgaXCvY3E2/4CAAv///wD///8A////AJlveHOzqqv6UCUt/yQGDP8MAgTW////AP///wD///8A////AKqAgAawXmhnqk9b36VNW/KjT13mqGh16Kl+hvCbdHz/YyYx/z0KFP8kBgz/DAIE7f///wD///8A////AP///wD///8A////AJlmZgWkQU5inDFD0ZUhNv+FFyz/bRMk/1UPHP89ChT/JAYM/wwCA9v///8A////AP///wD///8A////AP///wD///8A////AP///wCTIDMohRYtfW0TJMBVDxzQPQoU3SUGDcoMBARA//8AAP//AAD//wAA//8AAP/3AAD/9wAA//sAAP/7AAD/+QAA//kAAP/5AAD/+AAA9/AAAPwAAAD/AAAA/+EAAA%3D%3D">Parabola GNU/Linux-libre Labs</A>
++ </DL><p>
++ <DT><H3 ID="rdf:#$ZvPhC3">Free Software Foundation</H3>
++ <DL><p>
++ <DT><A HREF="http://www.fsf.org/" ICON="data:text/html;base64,Cgk8IURPQ1RZUEUgaHRtbD4KCgk8aHRtbCBsYW5nPSJlbiI+CgoJICAgIAogICAgCiAgICAKICAgIAogICAgCgoJICA8aGVhZD4KCSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KCgkKCgkgICAgCgkgICAgPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT1lZGdlIiAvPgoKCSAgICAKCQk8YmFzZSBocmVmPSJodHRwOi8vd3d3LmZzZi5vcmcvZnJlZS1zb2Z0d2FyZS1mb3VuZGF0aW9uIiAvPjwhLS1baWYgbHQgSUUgN10+PC9iYXNlPjwhW2VuZGlmXS0tPgoJICAgIAoKCSAgICAKCQk8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoOyBpbml0aWFsLXNjYWxlPTAuNjY2NjsgbWF4aW11bS1zY2FsZT0xLjA7IG1pbmltdW0tc2NhbGU9MC42NjY2IiAvPgoJCTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iUGxvbmUgLSBodHRwOi8vcGxvbmUub3JnIiAvPgoJICAgIAoKICAgICAgICAKCgkgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7Y2hhcnNldD11dGYtOCIgLz4KCSAgICA8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IlBsb25lIC0gaHR0cDovL3Bsb25lLm9yZyIgLz4KCgoJICAgPHRpdGxlPkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiAmbWRhc2g7IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiAmbWRhc2g7IHdvcmtpbmcgdG9nZXRoZXIgZm9yIGZyZWUgc29mdHdhcmU8L3RpdGxlPgoKCgkgICAgCgkgICAgCgoJICAgIAoJICAgIAo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoucG9ydGxldC1zdGF0aWMtc3VwcG9ydGVyLC5wb3J0bGV0LXN0YXRpYy1hcHBlYWwtcG9ydGxldCB7ZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O30KI2ZzZi1zaWRlYmFyIHttYXJnaW4tdG9wOiAxMHB4O30KI2JyZWFkY3J1bWJzLXlvdS1hcmUtaGVyZSB7ZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O30KdGFibGUsIHRkLCB0ciwgdGJvZHksIHRoZWFke2JvcmRlcjogMCAhaW1wb3J0YW50O30KPC9zdHlsZT4KCgoJICAgIAoJICAgIAoKCSAgICAKCSAgICAKCgkgICAgPGxpbmsgcmVsPSJjb3B5cmlnaHQiIHRpdGxlPSJDb3B5cmlnaHQgaW5mb3JtYXRpb24iIGhyZWY9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LW5kLzMuMC9yZGYiIC8+CgkgICAgPGxpbmsgcmVsPSJhdXRob3IiIHRpdGxlPSJBdXRob3IgaW5mb3JtYXRpb24iIGhyZWY9Imh0dHA6Ly93d3cuZnNmLm9yZy9hYm91dC9zdGFmZi8iIC8+CgoJPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0icHJpbnQiIGhyZWY9Ii8vc3RhdGljLmZzZi5vcmcvbm9zdm4vcGxvbmUzL2Nzcy9wcmludC0yMDExLTEwLTEzLmNzcyIgLz4KCTxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InNjcmVlbiI+IEBpbXBvcnQgdXJsKCcvL3N0YXRpYy5mc2Yub3JnL25vc3ZuL3Bsb25lNC9jc3MvZnNmLTIwMTItMDQtMjMuY3NzJyk7PC9zdHlsZT4KCgoJPGxpbmsgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJGU0YgTmV3cyIgaHJlZj0iLy9zdGF0aWMuZnNmLm9yZy9mc2ZvcmcvcnNzL25ld3MueG1sIiB0eXBlPSJhcHBsaWNhdGlvbi9yc3MreG1sIiAvPgoJPGxpbmsgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJGU0YgRXZlbnRzIiBocmVmPSIvL3N0YXRpYy5mc2Yub3JnL2ZzZm9yZy9yc3MvZXZlbnRzLnhtbCIgdHlwZT0iYXBwbGljYXRpb24vcnNzK3htbCIgLz4KCTxsaW5rIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRlNGIEJsb2dzIiBocmVmPSIvL3N0YXRpYy5mc2Yub3JnL2ZzZm9yZy9yc3MvYmxvZ3MueG1sIiB0eXBlPSJhcHBsaWNhdGlvbi9yc3MreG1sIiAvPgoJPGxpbmsgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJGcmVlIFNvZnR3YXJlIEpvYnMiIGhyZWY9Ii8vc3RhdGljLmZzZi5vcmcvZnNmb3JnL3Jzcy9qb2JzLnhtbCIgdHlwZT0iYXBwbGljYXRpb24vcnNzK3htbCIgLz4KCTxsaW5rIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iR05VIFByb2plY3QgTmV3cyIgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3Jzcy93aGF0c25ldy5yc3MiIHR5cGU9ImFwcGxpY2F0aW9uL3Jzcyt4bWwiIC8+Cgk8bGluayByZWw9ImFsdGVybmF0ZSIgdGl0bGU9Ik5ldyBGcmVlIFNvZnR3YXJlIiBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvcnNzL3F1YWdnYS5yc3MiIHR5cGU9ImFwcGxpY2F0aW9uL3Jzcyt4bWwiIC8+CgoJPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCIgLz4KCgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgojYnJlYWRjcnVtYnMteW91LWFyZS1oZXJlLAojYnJlYWRjcnVtYnMtaG9tZSwKI2JyZWFkY3J1bWJzLWN1cnJlbnQsCiNicmVhZGNydW1icy0xIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5HTlVyZWxlYXNlc3sKCWJhY2tncm91bmQtY29sb3I6ICNmZmZmZTM7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjMDAwMDAwOwogICAgY29sb3I6IEJsYWNrOwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICB3aWR0aDogMjAwcHg7CiAgICBwYWRkaW5nOiAxMHB4Owp9CgojcG9ydGFsLWxhbmd1YWdlc2VsZWN0b3Ige2Rpc3BsYXk6IGJsb2NrOyBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDsgYm90dG9tOiAxcHg7IGxlZnQ6IDFweDt9Cgo8L3N0eWxlPgoJICA8L2hlYWQ+CgoKCTxib2R5IGNsYXNzPSJ0ZW1wbGF0ZS1mcm9udHBhZ2VfdmlldyBwb3J0YWx0eXBlLWRvY3VtZW50IHNlY3Rpb24tZnJlZS1zb2Z0d2FyZS1mb3VuZGF0aW9uIGljb25zLW9uIiBkaXI9Imx0ciI+CgoJPGRpdiBpZD0iY29vbGlvIj4gPCEtLSB3cmFwcGVyIGRpdiAtLT4KCgk8cCBjbGFzcz0ib25seU1vYmlsZSI+PGEgdGFiaW5kZXg9IjEiIGhyZWY9IiNjb250ZW50Ij5Ta2lwIHRvIGNvbnRlbnQ8L2E+LCA8YSB0YWJpbmRleD0iMiIgaHJlZj0iL3NpdGVtYXAjY29udGVudCI+c2l0ZW1hcDwvYT4gb3IgPGEgdGFiaW5kZXg9IjMiIGhyZWY9Ii9zZWFyY2hfZm9ybSNjb250ZW50Ij5za2lwIHRvIHNlYXJjaDwvYT4uPC9wPgoKCTxkaXYgaWQ9ImhkIiBjbGFzcz0iY3VzdG9tLWRvYyB2aXN1YWxOb1ByaW50Ij4KCTxoZWFkZXI+CgkgICAgCgoJPGgxPjxhIGhyZWY9Ii8iPkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjwvYT48L2gxPgoKCTxkaXYgaWQ9InBvcnRhbC1wZXJzb25hbHRvb2xzLXdyYXBwZXIiPgoKPGRpdiBpZD0iZnNmLWN1c3RvbSI+Cgo8aDUgY2xhc3M9ImhpZGRlblN0cnVjdHVyZSI+UGVyc29uYWwgdG9vbHM8L2g1PgoKPHVsIGlkPSJwb3J0YWwtcGVyc29uYWx0b29scyI+CiAgCgogICAgCiAgICA8bGk+CiAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmZzZi5vcmcvY2FzbG9naW4iIGlkPSJwZXJzb25hbHRvb2xzLWxvZ2luIj5Mb2cgaW48L2E+CiAgPC9saT4KICAgIAogICAgCiAgICA8bGk+CiAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmZzZi5vcmcvaGVscC1tZW51IiBpZD0icGVyc29uYWx0b29scy1sb2dpbi1wcm9ibGVtcyI+SGVscCE8L2E+CiAgPC9saT4KICAgIAogICAgCiAgICA8bGk+CiAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmZzZi5vcmcvYXNzb2NpYXRlL2Fib3V0LXRoZS1tZW1iZXJzLWZvcnVtIiBpZD0icGVyc29uYWx0b29scy1mb3J1bS1wcm9tbyI+TWVtYmVycyBmb3J1bTwvYT4KICA8L2xpPgogICAgCgo8L3VsPgo8L2Rpdj4KPC9kaXY+CgogIDxhIGhyZWY9Imh0dHA6Ly9mc2Yub3JnL2pmYiI+PGltZyBzcmM9Ii8vc3RhdGljLmZzZi5vcmcvbm9zdm4vam9pbi5lbi5wbmciIGFsdD0iSm9pbiBub3ciIHN0eWxlPSJmbG9hdDogcmlnaHQ7IiAvPjwvYT4gCgoJPC9oZWFkZXI+Cgk8L2Rpdj4KCgk8ZGl2IGNsYXNzPSJ5dWktZyBmc2YtbmF2LWZvb3RlciIgaWQ9ImZzZi1uYXYiPgoJPGRpdiBjbGFzcz0ibmF2aSI+CjxkaXY+Cgo8ZGl2IGNsYXNzPSJjdXN0b20tZG9jIj4KCjxuYXY+Cjx1bCBjbGFzcz0ibWFpbi1uYXYgbmF2aWdhdGlvbiI+CjxsaT48YSBocmVmPSIvYWJvdXQvIiB0aXRsZT0iIj5BYm91dDwvYT48L2xpPgo8bGk+PGEgaHJlZj0iL2NhbXBhaWducy8iIHRpdGxlPSIiPkNhbXBhaWduczwvYT48L2xpPgo8bGk+PGEgaHJlZj0iL2Fzc29jaWF0ZS8iIHRpdGxlPSIiPk1lbWJlcnNoaXA8L2E+PC9saT4KPGxpPjxhIGhyZWY9Ii9yZXNvdXJjZXMvIiB0aXRsZT0iIj5SZXNvdXJjZXM8L2E+PC9saT4KPGxpPjxhIGhyZWY9Ii9jb21tdW5pdHkvIiB0aXRsZT0iIj5Db21tdW5pdHk8L2E+PC9saT4KPGxpPjxhIGhyZWY9Ii9kb25hdGUvIiB0aXRsZT0iIj5Eb25hdGU8L2E+PC9saT4KPGxpPjxhIGhyZWY9Imh0dHA6Ly9zaG9wLmZzZi5vcmcvIiB0aXRsZT0iIj5TaG9wPC9hPjwvbGk+CjxsaSBjbGFzcz0ib25seU1vYmlsZSI+PGEgaHJlZj0iL25ld3MvIj5MYXRlc3QgbmV3czwvYT48L2xpPgo8bGkgY2xhc3M9Im9ubHlNb2JpbGUiPjxhIGhyZWY9Ii9ldmVudHMvIj5VcGNvbWluZyBldmVudHM8L2E+PC9saT4KPGxpIGNsYXNzPSJvbmx5TW9iaWxlIj48YSBocmVmPSIvYmxvZ3MiPkxhdGVzdCBibG9nIHBvc3RzPC9hPjwvbGk+CjxsaSBjbGFzcz0ib25seU1vYmlsZSI+PGEgaHJlZj0iL2ZyZWUtc29mdHdhcmUtc3VwcG9ydGVyLyI+RnJlZSBTb2Z0d2FyZSBTdXBwb3J0ZXIsIG91ciBtb250aGx5IGVtYWlsIG5ld3NsZXR0ZXI8L2E+PC9saT4KPC91bD4KCgoKPC9uYXY+Cgo8L2Rpdj48L2Rpdj4KCjwvZGl2PgoJPC9kaXY+Cgo8ZGl2IGNsYXNzPSJ5dWktZyIgc3R5bGU9Im1hcmdpbi10b3A6IDBweDsiPgombmJzcDsKPC9kaXY+CgoJPGRpdiBjbGFzcz0iY3VzdG9tLWRvYyB5dWktdDUiPgoKCSAgIDxkaXYgaWQ9ImJkIj48ZGl2IGlkPSJ5dWktbWFpbiI+CgoKPGRpdiBjbGFzcz0ieXVpLWciPjxkaXYgY2xhc3M9Inl1aS1iIj4KCgoKICAgICAgICA8ZGl2IGlkPSJwb3J0YWwtY29sdW1uLWNvbnRlbnQiIGNsYXNzPSJjZWxsIHdpZHRoLTM6NCBwb3NpdGlvbi0wIj4KCiAgICAgICAgICAgIDxkaXYgaWQ9InZpZXdsZXQtYWJvdmUtY29udGVudCI+PGRpdiBpZD0icG9ydGFsLWJyZWFkY3J1bWJzIj4KCiAgICA8c3BhbiBpZD0iYnJlYWRjcnVtYnMteW91LWFyZS1oZXJlIj5Zb3UKYXJlIGhlcmU6PC9zcGFuPgogICAgPHNwYW4gaWQ9ImJyZWFkY3J1bWJzLWhvbWUiPgogICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuZnNmLm9yZyI+SG9tZTwvYT4KICAgICAgICAKICAgIDwvc3Bhbj4KCjwvZGl2PjwvZGl2PgoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSIiPgoKICAgICAgICAgICAgICAgICAgICAKCiAgICAgICAgICAgICAgICAgICAgCgogICAgPGRsIGNsYXNzPSJwb3J0YWxNZXNzYWdlIGluZm8iIGlkPSJrc3NQb3J0YWxNZXNzYWdlIiBzdHlsZT0iZGlzcGxheTpub25lIj4KICAgICAgICA8ZHQ+SW5mbzwvZHQ+CiAgICAgICAgPGRkPjwvZGQ+CiAgICA8L2RsPgoKCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgPGFydGljbGU+CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9ImNvbnRlbnQiPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICA8dGFibGUgd2lkdGg9IjY5OSIgY2xhc3M9InBsYWluIj4KICA8dHI+CiAgICA8dGQgd2lkdGg9IjIzMyI+CiAgICAgIDxhIGhyZWY9Ii9uZXdzL2ZzZi1hbm5vdW5jZXMtd2lubmVyLW9mLXJlc3RyaWN0ZWQtYm9vdC13ZWJjb21pYy1jb250ZXN0Ij48aW1nIHNyYz0iLy9zdGF0aWMuZnNmLm9yZy9ub3N2bi9yZXN0cmljdGVkLWJvb3RzLmpwZyIgYWx0PSJSZXN0cmljdGVkIEJvb3RzIC0tIGl0J3MgZm9yIHlvdXIgc2FmZXR5IiB3aWR0aD0iMjMwIiAvPjwvYT4KICAgICAgPHAgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyOyI+CiAgICAgICAgVGhpcyA8c3BhbiB4bWxuczpkY3Q9Imh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy8iIGhyZWY9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiByZWw9ImRjdDp0eXBlIj53b3JrPC9zcGFuPiBieSA8YSB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIiBocmVmPSJodHRwOi8vZXJpa3N0ZWlubWFubi5ubC9zZWN1cmVib290X3dlYmNvbWljLmh0bWwiIHByb3BlcnR5PSJjYzphdHRyaWJ1dGlvbk5hbWUiIHJlbD0iY2M6YXR0cmlidXRpb25VUkwiPkVyaWsgU3RlaW5tYW5uPC9hPiBpcyBsaWNlbnNlZCB1bmRlciBhIDxhIHJlbD0ibGljZW5zZSIgaHJlZj0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvMy4wLyI+Q3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbiAzLjAgVW5wb3J0ZWQgTGljZW5zZTwvYT4uCiAgICAgIDwvcD4KICAgIDwvdGQ+CiAgICA8dGQgd2lkdGg9IjQ2NiI+CiAgICAgPHAgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsgcGFkZGluZzoxNXB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmJjOyBoZWlnaHQ6IDIyNXB4OyBmb250LXNpemU6IDExMCU7Ij4gCiAgICAgICA8c3Ryb25nIHN0eWxlPSJmb250LXNpemU6MTc1JTsiPlN0YW5kIHVwIGZvciB5b3VyIGZyZWVkb20gdG8gaW5zdGFsbCBmcmVlIHNvZnR3YXJlPC9zdHJvbmc+PGJyPjxicj4KICAgICAgIDxhIGhyZWY9Ii9jYW1wYWlnbnMvc2VjdXJlLWJvb3QtdnMtcmVzdHJpY3RlZC1ib290L3N0YXRlbWVudCI+PGltZyBzcmM9Ii8vc3RhdGljLmZzZi5vcmcvbm9zdm4vdWVmaV9sb2dvLnBuZyIgYWx0PSIiIC8+PC9hPjxicj48YnI+CiAgICAgICA8YSBocmVmPSIvY2FtcGFpZ25zL3NlY3VyZS1ib290LXZzLXJlc3RyaWN0ZWQtYm9vdC9zdGF0ZW1lbnQiIHN0eWxlPSJmb250LXNpemU6MTEwJSI+Sm9pbiAzMSw4MDAgcGVvcGxlIGluIG9wcG9zaW5nIE1pY3Jvc29mdCdzIFJlc3RyaWN0ZWQgQm9vdCBieSBzaWduaW5nIHRoaXMgc3RhdGVtZW50PC9hPjxicj4KICAgICA8L3A+CiAgICAgPHA+PGEgaHJlZj0iLy93d3cuZnNmLm9yZy93b3JraW5nLXRvZ2V0aGVyL21vdmluZy8iPjxpbWcgc3JjPSIvL3N0YXRpYy5mc2Yub3JnL25vc3ZuL3dvcmtpbmcvdy9nZXRzdGFydC5wbmciIC8+PC9hPgogICAgICAgIDxhIGhyZWY9Ii8vd3d3LmdudS5vcmcvZGlzdHJvcy9mcmVlLWRpc3Ryb3MuaHRtbCI+PGltZyBzcmM9Ii8vc3RhdGljLmZzZi5vcmcvbm9zdm4vZG93bmxvYWQucG5nIiB3aWR0aD0iMTYwIiAvPjwvYT4KICAgICA8L3A+CiAgICA8L3RkPgogIDwvdHI+CjwvdGFibGU+CgoKICAgICAgICA8aDIgaWQ9ImludHJvLXRleHQiPgogICAgICAgICAgICAKICAgICAgICA8c3BhbiBjbGFzcz0iIiBpZD0icGFyZW50LWZpZWxkbmFtZS1kZXNjcmlwdGlvbiI+CiAgICAgICAgICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiDigJQgd2hhdCB3ZSBkbwogICAgICAgIDwvc3Bhbj4KICAgIAogICAgICAgIDwvaDI+CgogICAgICAgIAoKICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSIiIGlkPSJwYXJlbnQtZmllbGRuYW1lLXRleHQiPgogICAgICAgICAgICA8dWw+DQo8bGk+VGhlIEZTRiBhZHZvY2F0ZXMgZm9yIGZyZWUgc29mdHdhcmUgaWRlYWxzIGFzIG91dGxpbmVkIGluIHRoZSA8YSBocmVmPSIvcGhpbG9zb3BoeS9mcmVlLXN3Lmh0bWwiPkZyZWUgU29mdHdhcmUgRGVmaW5pdGlvbjwvYT4sIHdvcmtzIGZvciBhZG9wdGlvbiBvZiBmcmVlIHNvZnR3YXJlIGFuZCBmcmVlIG1lZGlhIGZvcm1hdHMsIGFuZCBvcmdhbml6ZXMgPGEgaHJlZj0iL2NhbXBhaWducy8iPmFjdGl2aXN0IGNhbXBhaWduczwvYT4gYWdhaW5zdCB0aHJlYXRzIHRvIHVzZXIgZnJlZWRvbSBsaWtlIDxhIGhyZWY9Imh0dHA6Ly93aW5kb3dzN3NpbnMub3JnLyI+V2luZG93cyA3PC9hPiwgQXBwbGUncyA8YSBocmVmPSIvaXBob25lIj5pUGhvbmU8L2E+IGFuZCA8YSBocmVmPSJodHRwOi8vd3d3LmZzZi5vcmcvYmxvZ3Mvcm1zL21hYy1vc3gtbWlzdGFrZXMtYW5kLW1hbGZlYXR1cmVzIj5PUyBYPC9hPiwgPGEgaHJlZj0iaHR0cDovL2RlZmVjdGl2ZWJ5ZGVzaWduLm9yZy8iPkRSTSBvbiBtdXNpYywgZWJvb2tzIGFuZCBtb3ZpZXM8L2E+LCBhbmQgPGEgaHJlZj0iaHR0cDovL2VuZHNvZnRwYXRlbnRzLm9yZy8iPnNvZnR3YXJlIHBhdGVudHM8L2E+LjwvbGk+DQoNCjxsaT5XZSBwcm9tb3RlIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9kaXN0cm9zLyI+Y29tcGxldGVseSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbnMgb2YgR05VL0xpbnV4PC9hPiwgYW5kIGFkdm9jYXRlIHRoYXQgdXNlcnMgb2YgdGhlIEdOVS9MaW51eCBvcGVyYXRpbmcgc3lzdGVtIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9kaXN0cm9zL2ZyZWUtc3lzdGVtLWRpc3RyaWJ1dGlvbi1ndWlkZWxpbmVzLmh0bWwiPnN3aXRjaCB0byBhIGRpc3RyaWJ1dGlvbiB3aGljaCByZXNwZWN0cyB0aGVpciBmcmVlZG9tPC9hPi48L2xpPg0KDQo8bGk+V2UgZHJpdmUgZGV2ZWxvcG1lbnQgb2YgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZyI+R05VIG9wZXJhdGluZyBzeXN0ZW08L2E+IGFuZCA8YSBocmVmPSIvY2FtcGFpZ25zL3ByaW9yaXR5Lmh0bWwiPm1haW50YWluIGEgbGlzdCBvZiBoaWdoLXByaW9yaXR5IGZyZWUgc29mdHdhcmUgcHJvamVjdHM8L2E+IHRvIHByb21vdGUgcmVwbGFjZW1lbnRzIGZvciBjb21tb24gcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zLjwvbGk+DQoNCjxsaT5XZSBidWlsZCBhbmQgdXBkYXRlIDxhIGhyZWY9Ii9yZXNvdXJjZXMvIj5yZXNvdXJjZXMgdXNlZnVsIGZvciB0aGUgZnJlZSBzb2Z0d2FyZSBjb21tdW5pdHk8L2E+IGxpa2UgdGhlIDxhIGhyZWY9Imh0dHA6Ly9kaXJlY3RvcnkuZnNmLm9yZy8iPkZyZWUgU29mdHdhcmUgRGlyZWN0b3J5PC9hPiwgYW5kIHRoZSA8YSBocmVmPSIvam9icyI+ZnJlZSBzb2Z0d2FyZSBqb2JzPC9hPiBib2FyZC4gV2UgYWxzbyBwcm92aWRlIDxhIGhyZWY9Ii9saWNlbnNpbmcvbGljZW5zZXMvIj5saWNlbnNlcyBmb3IgZnJlZSBzb2Z0d2FyZSBkZXZlbG9wZXJzPC9hPiB0byBzaGFyZSB0aGVpciBjb2RlLCBpbmNsdWRpbmcgdGhlIDxhIGhyZWY9Ii9saWNlbnNpbmcvbGljZW5zZXMvZ3BsLmh0bWwiPkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlPC9hPi48L2xpPg0KDQo8L3VsPg0KDQo8cCBjbGFzcz0iYyI+PGEgaHJlZj0iL3dvcmtpbmctdG9nZXRoZXIvIj48aW1nIHNyYz0iL3N0YXRpYy9ub3N2bi93b3JraW5nL3cvZGVzZXJ2ZS5wbmciIGFsdD0iIiAvPjwvYT48L3A+IAogICAgICAgICAgICAKICAgICAgICA8L2Rpdj4KICAgIAogICAgCgoKICA8ZGl2IGlkPSJmc3MiPjxmb3JtIGFjdGlvbj0iaHR0cHM6Ly9jcm0uZnNmLm9yZy9jaXZpY3JtL3Byb2ZpbGUvY3JlYXRlJmFtcDtyZXNldD0xJmFtcDtnaWQ9MzEiIG1ldGhvZD0icG9zdCI+CjxoMz5TaWduIHVwIHRvZGF5IHRvIHJlY2VpdmUgdGhlIG1vbnRobHkgbmV3c2xldHRlciwgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuZnNmLm9yZy9mcmVlLXNvZnR3YXJlLXN1cHBvcnRlci8iPkZyZWUgU29mdHdhcmUgU3VwcG9ydGVyPC9hPjwvaDM+Cgo8cD48c21hbGw+RW50ZXIgeW91ciBlbWFpbCBhZGRyZXNzIChpZS4gbWF0dEBleGFtcGxlLmNvbSk8L3NtYWxsPjwvcD4KCjxwPjxpbnB1dCBpZD0iZnJtRW1haWwiIHR5cGU9InRleHQiIG5hbWU9ImVtYWlsLVByaW1hcnkiIHNpemU9IjE4IiBtYXhsZW5ndGg9IjgwIiAvPjwvcD4KPHA+PGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0iX3FmX0VkaXRfbmV4dCIgdmFsdWU9IlN1YnNjcmliZSBtZSIgLz48L3A+CjxkaXY+PGlucHV0IG5hbWU9InBvc3RVUkwiIHR5cGU9ImhpZGRlbiIgdmFsdWU9IiIgLz4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZ3JvdXBbMjVdIiB2YWx1ZT0iMSIgLz4KPGlucHV0IG5hbWU9ImNhbmNlbFVSTCIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iaHR0cHM6Ly9jcm0uZnNmLm9yZy9jaXZpY3JtL3Byb2ZpbGU/cmVzZXQ9MSZhbXA7Z2lkPTMxIiAvPgo8aW5wdXQgbmFtZT0iX3FmX2RlZmF1bHQiIHR5cGU9ImhpZGRlbiIgdmFsdWU9IkVkaXQ6Y2FuY2VsIiAvPgo8L2Rpdj4KPC9mb3JtPjwvZGl2PgoKCjxkaXYgaWQ9InF1b3RlLWJveCI+CiA8YmxvY2txdW90ZT48YSBocmVmPSIvYXBwZWFsLzIwMDkvbWFrby8iPkEgc3Ryb25nIGZyZWUgc29mdHdhcmUgbW92ZW1lbnQgZm9jdXNlZCBvbiB0aGUgcHJpbmNpcGxlZCBpc3N1ZXMgb2Ygc29mdHdhcmUgZnJlZWRvbSAmbWRhc2g7IGFuZCBhIHN0cm9uZyBGU0YgaW4gcGFydGljdWxhciAmbWRhc2g7IHdpbGwgZGV0ZXJtaW5lIHdoYXQgZnJlZWRvbXMgdGhlIG5leHQgZ2VuZXJhdGlvbiBvZiBjb21wdXRlciB1c2VycyBlbmpveS4gQXQgc3Rha2UgaXMgbm8gbGVzcyB0aGFuIHRoZSBuZXh0IGdlbmVyYXRpb24ncyBhdXRvbm9teS48L2E+PC9ibG9ja3F1b3RlPgoKICA8cD4mbWRhc2g7IDxhIGhyZWY9Ii9hcHBlYWwvMjAwOS9tYWtvLyI+QmVuamFtaW4gTWFrbyBIaWxsPC9hPiwgd3JpdGVyLCB0ZWNobm9sb2dpc3QgYW5kIEZTRiBib2FyZCBtZW1iZXI8L3A+CjwvZGl2PgoKICAgIAoKICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgPC9hcnRpY2xlPgoKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAKCiAgICAgICAgICAgIDxkaXYgaWQ9InZpZXdsZXQtYmVsb3ctY29udGVudCI+CgoKCgoKICAgIAoKPC9kaXY+CiAgICAgICAgPC9kaXY+Cgk8L2Rpdj48L2Rpdj48L2Rpdj4KCgoJIDxkaXYgaWQ9ImZzZi1zaWRlYmFyIiBjbGFzcz0ieXVpLWIgdmlzdWFsTm9QcmludCI+CgkgICAgPGFzaWRlPgoJPGRpdiBpZD0ic2VhcmNoIj4KCgkgICAgICA8Zm9ybSBpZD0ic2lkZXNlYXJjaCIgbmFtZT0ic2VhcmNoZm9ybSIgYWN0aW9uPSJodHRwOi8vd3d3LmZzZi5vcmcvc2VhcmNoIj4KCQkgIDxwPjxpbnB1dCBuYW1lPSJTZWFyY2hhYmxlVGV4dCIgdGFiaW5kZXg9IjEiIHR5cGU9InRleHQiIHNpemU9IjMwIiB0aXRsZT0iU2VhcmNoIFNpdGUiIC8+PC9wPgoJCSAgPHA+PGlucHV0IGNsYXNzPSJzZWFyY2hCdXR0b24iIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNlYXJjaCIgLz48L3A+CgkgICAgICA8L2Zvcm0+CgoJPC9kaXY+CgoKCQkgICAgICA8ZGl2IGNsYXNzPSJ2aXN1YWxQYWRkaW5nIj4KCQkgICAgICAgIAoJCSAgICAgICAgICAKPGRpdiBpZD0icG9ydGxldHdyYXBwZXItNzA2YzZmNmU2NTJlNzI2OTY3Njg3NDYzNmY2Yzc1NmQ2ZTBhNjM2ZjZlNzQ2NTc4NzQwYTJmNjY3MzY2MGE3Mzc1NzA3MDZmNzI3NDY1NzIiIGNsYXNzPSJwb3J0bGV0V3JhcHBlciBrc3NhdHRyLXBvcnRsZXRoYXNoLTcwNmM2ZjZlNjUyZTcyNjk2NzY4NzQ2MzZmNmM3NTZkNmUwYTYzNmY2ZTc0NjU3ODc0MGEyZjY2NzM2NjBhNzM3NTcwNzA2ZjcyNzQ2NTcyIj48ZGl2IGNsYXNzPSJwb3J0bGV0U3RhdGljVGV4dCBwb3J0bGV0LXN0YXRpYy1zdXBwb3J0ZXIiPjxkaXYgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsiPg0KPGg1PlNpZ24gdXA8L2g1Pg0KPGZvcm0gYWN0aW9uPSJodHRwczovL2NybS5mc2Yub3JnL2Npdmljcm0vcHJvZmlsZS9jcmVhdGUmYW1wO3Jlc2V0PTEmYW1wO2dpZD0zMSIgbWV0aG9kPSJwb3N0Ij4NCjxwPlNpZ24gdXAgdG9kYXkgdG8gcmVjZWl2ZSB0aGUgbW9udGhseSBuZXdzbGV0dGVyLCB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5mc2Yub3JnL2ZyZWUtc29mdHdhcmUtc3VwcG9ydGVyLyI+RnJlZSBTb2Z0d2FyZSBTdXBwb3J0ZXI8L2E+PC9wPg0KDQo8cD48c21hbGw+RW50ZXIgeW91ciBlbWFpbCBhZGRyZXNzIChpZS4gbWF0dEBleGFtcGxlLmNvbSk8L3NtYWxsPjwvcD4NCg0KPHA+PGlucHV0IGlkPSJmcm1FbWFpbCIgdHlwZT0idGV4dCIgbmFtZT0iZW1haWwtUHJpbWFyeSIgc2l6ZT0iMTgiIG1heGxlbmd0aD0iODAiIC8+PC9wPg0KPHA+PGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0iX3FmX0VkaXRfbmV4dCIgdmFsdWU9IlN1YnNjcmliZSBtZSIgLz48L3A+DQo8ZGl2PjxpbnB1dCBuYW1lPSJwb3N0VVJMIiB0eXBlPSJoaWRkZW4iIHZhbHVlPSIiIC8+DQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJncm91cFsyNV0iIHZhbHVlPSIxIiAvPg0KPGlucHV0IG5hbWU9ImNhbmNlbFVSTCIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iaHR0cHM6Ly9jcm0uZnNmLm9yZy9jaXZpY3JtL3Byb2ZpbGU/cmVzZXQ9MSZhbXA7Z2lkPTMxIiAvPg0KPGlucHV0IG5hbWU9Il9xZl9kZWZhdWx0IiB0eXBlPSJoaWRkZW4iIHZhbHVlPSJFZGl0OmNhbmNlbCIgLz4NCjwvZGl2Pg0KPC9mb3JtPjwvZGl2PjwvZGl2PgoKPC9kaXY+Cgo8ZGl2IGlkPSJwb3J0bGV0d3JhcHBlci03MDZjNmY2ZTY1MmU3MjY5Njc2ODc0NjM2ZjZjNzU2ZDZlMGE2MzZmNmU3NDY1Nzg3NDBhMmY2NjczNjYwYTY2NzM2NjJkNmU2NTc3NzMyZDcyNzM3MyIgY2xhc3M9InBvcnRsZXRXcmFwcGVyIGtzc2F0dHItcG9ydGxldGhhc2gtNzA2YzZmNmU2NTJlNzI2OTY3Njg3NDYzNmY2Yzc1NmQ2ZTBhNjM2ZjZlNzQ2NTc4NzQwYTJmNjY3MzY2MGE2NjczNjYyZDZlNjU3NzczMmQ3MjczNzMiPjxkaXYgY2xhc3M9InBvcnRsZXRTdGF0aWNUZXh0IHBvcnRsZXQtc3RhdGljLWZzZi1uZXdzLXJzcyI+PHAgc3R5bGU9ImZsb2F0OiByaWdodDsiPjxhIGhyZWY9Ii9zdGF0aWMvZnNmb3JnL3Jzcy9uZXdzLnhtbCIgdGl0bGU9IlN1YnNjcmliZSB0byBhbiBSU1MgZmVlZCBvZiBGU0YgbmV3cyI+PGltZyBzcmM9Ii9zdGF0aWMvZnNmb3JnL2Nzcy9pbWcvcnNzLmdpZiIgYWx0PSJSU1MgZmVlZCIgLz48L2E+PC9wPjwvZGl2PgoKPC9kaXY+Cgo8ZGl2IGlkPSJwb3J0bGV0d3JhcHBlci03MDZjNmY2ZTY1MmU3MjY5Njc2ODc0NjM2ZjZjNzU2ZDZlMGE2MzZmNmU3NDY1Nzg3NDBhMmY2NjczNjYwYTZlNjU3NzczIiBjbGFzcz0icG9ydGxldFdyYXBwZXIga3NzYXR0ci1wb3J0bGV0aGFzaC03MDZjNmY2ZTY1MmU3MjY5Njc2ODc0NjM2ZjZjNzU2ZDZlMGE2MzZmNmU3NDY1Nzg3NDBhMmY2NjczNjYwYTZlNjU3NzczIj48ZGwgY2xhc3M9InBvcnRsZXQgcG9ydGxldE5ld3MiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KCiAgICA8ZHQgY2xhc3M9InBvcnRsZXRIZWFkZXIiPgogICAgICAgIDxzcGFuIGNsYXNzPSJwb3J0bGV0VG9wTGVmdCI+PC9zcGFuPgogICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuZnNmLm9yZy9uZXdzIiBjbGFzcz0idGlsZSI+TmV3czwvYT4KICAgICAgICA8c3BhbiBjbGFzcz0icG9ydGxldFRvcFJpZ2h0Ij48L3NwYW4+CiAgICA8L2R0PgoKICAgIAogICAgPGRkIGNsYXNzPSJwb3J0bGV0SXRlbSBvZGQiPgoKICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmZzZi5vcmcvbmV3cy9mc2YtYW5ub3VuY2VzLXdpbm5lci1vZi1yZXN0cmljdGVkLWJvb3Qtd2ViY29taWMtY29udGVzdCIgY2xhc3M9InRpbGUiIHRpdGxlPSJXaXRoIG92ZXIgMzAsMDAwIHNpZ25hdHVyZXMgdG8gb3VyIHN0YXRlbWVudCBhbmQgb3ZlciBhIGRvemVuIGhpZ2gtcXVhbGl0eSBzdWJtaXNzaW9ucyB0byBvdXIgY29udGVzdCwgSSdtIGNvbmZpZGVudCBvdXIgbWVzc2FnZSB0aGF0IFJlc3RyaWN0ZWQgQm9vdCBpcyBhIG1pc3Rha2UgaGFzIHRoZSBhdHRlbnRpb24gb2YgTWljcm9zb2Z0IGFuZCBjb21wdXRlci1tYWtlcnMgYWxpa2UuIE5vdyB3ZSBuZWVkIHRha2UgdGhlIG5leHQgc3RlcCBvZiB0dXJuaW5nIHRoaXMgc3VwcG9ydCBpbnRvIHRhbmdpYmxlIHJlc3VsdHMuIj4KICAgICAgICAgICAgPGltZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHNyYz0iaHR0cDovL3d3dy5mc2Yub3JnL3N0YXRpYy9mc2ZvcmcvY3NzL2ltZy9uZXdzaXRlbV9pY29uLmdpZiIgYWx0PSJOZXdzIEl0ZW0iIC8+CiAgICAgICAgICAgIEZTRiBhbm5vdW5jZXMgd2lubmVyIG9mIFJlc3RyaWN0ZWQgQm9vdCB3ZWJjb21pYyBjb250ZXN0CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwb3J0bGV0SXRlbURldGFpbHMiPkp1bCAwNSwgMjAxMjwvc3Bhbj4KICAgICAgICA8L2E+CiAgICA8L2RkPgogICAgCiAgICAKICAgIDxkZCBjbGFzcz0icG9ydGxldEl0ZW0gZXZlbiI+CgogICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuZnNmLm9yZy9uZXdzL2ZzZi1wdWJsaXNoZXMtd2hpdGVwYXBlci13aXRoLXJlY29tbWVuZGF0aW9ucy1mb3ItZnJlZS1vcGVyYXRpbmctc3lzdGVtLWRpc3RyaWJ1dGlvbnMtY29uc2lkZXJpbmctc2VjdXJlLWJvb3QiIGNsYXNzPSJ0aWxlIiB0aXRsZT0iSW4gdGhlIHBhcGVyLCB0aGUgRlNGIG91dGxpbmVzIHRoZSBkaWZmaWN1bHRpZXMgU2VjdXJlIEJvb3QgcG9zZXMgZm9yIHRoZSBmcmVlIHNvZnR3YXJlIG1vdmVtZW50IGFuZCBmcmVlIHNvZnR3YXJlIGFkb3B0aW9uLCB3YXJucyBhZ2FpbnN0IHRoZSB0aHJlYXQgb2YgUmVzdHJpY3RlZCBCb290LCBhbmQgZ2l2ZXMgcmVjb21tZW5kYXRpb25zIGZvciBob3cgZnJlZSBzb2Z0d2FyZSBkZXZlbG9wZXJzIGFuZCB1c2VycyBjYW4gYmVzdCBhZGRyZXNzIHRoZSBpc3N1ZXMuIj4KICAgICAgICAgICAgPGltZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHNyYz0iaHR0cDovL3d3dy5mc2Yub3JnL3N0YXRpYy9mc2ZvcmcvY3NzL2ltZy9uZXdzaXRlbV9pY29uLmdpZiIgYWx0PSJOZXdzIEl0ZW0iIC8+CiAgICAgICAgICAgIEZTRiBwdWJsaXNoZXMgd2hpdGVwYXBlciB3aXRoIHJlY29tbWVuZGF0aW9ucyBmb3IgZnJlZSBvcGVyYXRpbmcgc3lzdGVtIGRpc3RyaWJ1dGlvbnMgY29uc2lkZXJpbmcgU2VjdXJlIEJvb3QKICAgICAgICAgICAgPHNwYW4gY2xhc3M9InBvcnRsZXRJdGVtRGV0YWlscyI+SnVuIDMwLCAyMDEyPC9zcGFuPgogICAgICAgIDwvYT4KICAgIDwvZGQ+CiAgICAKCiAgICA8ZGQgY2xhc3M9InBvcnRsZXRGb290ZXIiPgogICAgICAgIDxzcGFuIGNsYXNzPSJwb3J0bGV0Qm90dG9tTGVmdCI+PC9zcGFuPgogICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuZnNmLm9yZy9uZXdzIj4KICAgICAgICAgIE1vcmUgbmV3cyZoZWxsaXA7CiAgICAgICAgPC9hPgogICAgICAgIDxzcGFuIGNsYXNzPSJwb3J0bGV0Qm90dG9tUmlnaHQiPjwvc3Bhbj4KICAgIDwvZGQ+CiAgICAKPC9kbD48L2Rpdj4KCjxkaXYgaWQ9InBvcnRsZXR3cmFwcGVyLTcwNmM2ZjZlNjUyZTcyNjk2NzY4NzQ2MzZmNmM3NTZkNmUwYTYzNmY2ZTc0NjU3ODc0MGEyZjY2NzM2NjBhNjY3MzY2MmQ2MjZjNmY2NzczMmQ3MjczNzMiIGNsYXNzPSJwb3J0bGV0V3JhcHBlciBrc3NhdHRyLXBvcnRsZXRoYXNoLTcwNmM2ZjZlNjUyZTcyNjk2NzY4NzQ2MzZmNmM3NTZkNmUwYTYzNmY2ZTc0NjU3ODc0MGEyZjY2NzM2NjBhNjY3MzY2MmQ2MjZjNmY2NzczMmQ3MjczNzMiPjxkaXYgY2xhc3M9InBvcnRsZXRTdGF0aWNUZXh0IHBvcnRsZXQtc3RhdGljLWZzZi1ibG9ncy1yc3MiPjxwIHN0eWxlPSJmbG9hdDogcmlnaHQ7Ij48YSBocmVmPSIvc3RhdGljL2ZzZm9yZy9yc3MvYmxvZ3MueG1sIiB0aXRsZT0iU3Vic2NyaWJlIHRvIGFuIFJTUyBmZWVkIG9mIEZTRiBibG9ncyI+PGltZyBzcmM9Ii9zdGF0aWMvZnNmb3JnL2Nzcy9pbWcvcnNzLmdpZiIgYWx0PSJSU1MgZmVlZCIgLz48L2E+PC9wPjwvZGl2PgoKPC9kaXY+Cgo8ZGl2IGlkPSJwb3J0bGV0d3JhcHBlci03MDZjNmY2ZTY1MmU3MjY5Njc2ODc0NjM2ZjZjNzU2ZDZlMGE2MzZmNmU3NDY1Nzg3NDBhMmY2NjczNjYwYTcyNjU2MzY1NmU3NDJkNjI2YzZmNjc3MyIgY2xhc3M9InBvcnRsZXRXcmFwcGVyIGtzc2F0dHItcG9ydGxldGhhc2gtNzA2YzZmNmU2NTJlNzI2OTY3Njg3NDYzNmY2Yzc1NmQ2ZTBhNjM2ZjZlNzQ2NTc4NzQwYTJmNjY3MzY2MGE3MjY1NjM2NTZlNzQyZDYyNmM2ZjY3NzMiPjxkbCBjbGFzcz0icG9ydGxldCBwb3J0bGV0Q29sbGVjdGlvbiBwb3J0bGV0LWNvbGxlY3Rpb24tcmVjZW50LWJsb2dzIj4KCiAgICA8ZHQgY2xhc3M9InBvcnRsZXRIZWFkZXIiPgogICAgICAgIDxzcGFuIGNsYXNzPSJwb3J0bGV0VG9wTGVmdCI+PC9zcGFuPgogICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuZnNmLm9yZy9ibG9ncy9yZWNlbnQtYmxvZy1wb3N0cyI+CiAgICAgICAgICAgIDxzcGFuPlJlY2VudCBibG9nczwvc3Bhbj4KICAgICAgICA8L2E+CiAgICAgICAgPHNwYW4gY2xhc3M9InBvcnRsZXRUb3BSaWdodCI+PC9zcGFuPgogICAgPC9kdD4KCiAgICAKICAgIDxkZCBjbGFzcz0icG9ydGxldEl0ZW0gb2RkIj4KICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmZzZi5vcmcvYmxvZ3MvY29tbXVuaXR5L2dudS1zcG90bGlnaHQtd2l0aC1rYXJsLWJlcnJ5LWp1bmUtMjAxMiIgY2xhc3M9InRpbGUiIHRpdGxlPSJOZXcgR05VIHJlbGVhc2VzIGFzIG9mIEp1bmUgMjYsIDIwMTIiPgogICAgICAgICAgICA8aW1nIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgc3JjPSJodHRwOi8vd3d3LmZzZi5vcmcvc3RhdGljL2ZzZm9yZy9jc3MvaW1nL25ld3NpdGVtX2ljb24uZ2lmIiBhbHQ9IkJsb2cgRW50cnkiIC8+CiAgICAgICAgICAgIEdOVSBTcG90bGlnaHQgd2l0aCBLYXJsIEJlcnJ5IChKdW5lIDIwMTIpCiAgICAgICAgICAgIAogICAgICAgIDwvYT4KICAgIDwvZGQ+CiAgICAKICAgIAogICAgPGRkIGNsYXNzPSJwb3J0bGV0SXRlbSBldmVuIj4KICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmZzZi5vcmcvYmxvZ3MvZ251LXByZXNzL2ZzZnMtbmV3LW9wZXJhdGlvbnMtYXNzaXN0YW50IiBjbGFzcz0idGlsZSIgdGl0bGU9IkhlbGxvLCBJJ20gQ2hyaXNzaWUgSGltZXMsIHRoZSBuZXcgb3BlcmF0aW9ucyBhc3Npc3RhbnQsIGFuZCBJJ20gZXhjaXRlZCB0byBvZmZpY2lhbGx5IGJlIHdpdGggdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gSSBoYW5kbGUgc2FsZXMsIGRvbmF0aW9ucywgYW5kIGdlbmVyYWwgb2ZmaWNlIG9wZXJhdGlvbnMuIj4KICAgICAgICAgICAgPGltZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHNyYz0iaHR0cDovL3d3dy5mc2Yub3JnL3N0YXRpYy9mc2ZvcmcvY3NzL2ltZy9uZXdzaXRlbV9pY29uLmdpZiIgYWx0PSJCbG9nIEVudHJ5IiAvPgogICAgICAgICAgICBGU0YncyBuZXcgb3BlcmF0aW9ucyBhc3Npc3RhbnQKICAgICAgICAgICAgCiAgICAgICAgPC9hPgogICAgPC9kZD4KICAgIAogICAgCiAgICA8ZGQgY2xhc3M9InBvcnRsZXRJdGVtIG9kZCI+CiAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5mc2Yub3JnL2Jsb2dzL2NvbW11bml0eS9raWxsLWFjdGEiIGNsYXNzPSJ0aWxlIiB0aXRsZT0iS2lsbCBBQ1RBIG9uY2UgKGFuZCBob3BlZnVsbHkpIGZvciBhbGwhIj4KICAgICAgICAgICAgPGltZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHNyYz0iaHR0cDovL3d3dy5mc2Yub3JnL3N0YXRpYy9mc2ZvcmcvY3NzL2ltZy9uZXdzaXRlbV9pY29uLmdpZiIgYWx0PSJCbG9nIEVudHJ5IiAvPgogICAgICAgICAgICBLaWxsIEFDVEEKICAgICAgICAgICAgCiAgICAgICAgPC9hPgogICAgPC9kZD4KICAgIAogICAgCiAgICA8ZGQgY2xhc3M9InBvcnRsZXRJdGVtIGV2ZW4iPgogICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuZnNmLm9yZy9ibG9ncy9saWNlbnNpbmcvZ251LWdwbHYzLXR1cm5zLTUiIGNsYXNzPSJ0aWxlIiB0aXRsZT0iVGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyB0dXJucyBmaXZlOyBFYmVuIE1vZ2xlbiBzdGF0ZXMsICZxdW90O0dQTHYzIGFudGljaXBhdGVkIHRoZSBpc3N1ZXMgb2YgdG9kYXkgYW5kIHdpbGwgaGVscCB1cyBkZWFsIHdpdGggdGhlIGNoYWxsZW5nZXMgb2YgdG9tb3Jyb3cuJnF1b3Q7Ij4KICAgICAgICAgICAgPGltZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHNyYz0iaHR0cDovL3d3dy5mc2Yub3JnL3N0YXRpYy9mc2ZvcmcvY3NzL2ltZy9uZXdzaXRlbV9pY29uLmdpZiIgYWx0PSJCbG9nIEVudHJ5IiAvPgogICAgICAgICAgICBHTlUgR1BMdjMgdHVybnMgNQogICAgICAgICAgICAKICAgICAgICA8L2E+CiAgICA8L2RkPgogICAgCgogICAgPGRkIGNsYXNzPSJwb3J0bGV0Rm9vdGVyIj4KICAgICAgICA8c3BhbiBjbGFzcz0icG9ydGxldEJvdHRvbUxlZnQiPjwvc3Bhbj4KICAgICAgICA8c3Bhbj4KICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmZzZi5vcmcvYmxvZ3MvcmVjZW50LWJsb2ctcG9zdHMiPgogICAgICAgICAgICBNb3JlJmhlbGxpcDsKICAgICAgICA8L2E+CiAgICAgICAgPC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJwb3J0bGV0Qm90dG9tUmlnaHQiPjwvc3Bhbj4KICAgIDwvZGQ+Cgo8L2RsPgo8L2Rpdj4KCjxkaXYgaWQ9InBvcnRsZXR3cmFwcGVyLTcwNmM2ZjZlNjUyZTcyNjk2NzY4NzQ2MzZmNmM3NTZkNmUwYTYzNmY2ZTc0NjU3ODc0MGEyZjY2NzM2NjBhNjY3MzY2MmQ2NTc2NjU2ZTc0NzMyZDcyNzM3MyIgY2xhc3M9InBvcnRsZXRXcmFwcGVyIGtzc2F0dHItcG9ydGxldGhhc2gtNzA2YzZmNmU2NTJlNzI2OTY3Njg3NDYzNmY2Yzc1NmQ2ZTBhNjM2ZjZlNzQ2NTc4NzQwYTJmNjY3MzY2MGE2NjczNjYyZDY1NzY2NTZlNzQ3MzJkNzI3MzczIj48ZGl2IGNsYXNzPSJwb3J0bGV0U3RhdGljVGV4dCBwb3J0bGV0LXN0YXRpYy1mc2YtZXZlbnRzLXJzcyI+PHAgc3R5bGU9ImZsb2F0OiByaWdodDsiPjxhIGhyZWY9Ii9zdGF0aWMvZnNmb3JnL3Jzcy9ldmVudHMueG1sIiB0aXRsZT0iU3Vic2NyaWJlIHRvIGFuIFJTUyBmZWVkIG9mIEZTRiBldmVudHMiPjxpbWcgc3JjPSIvc3RhdGljL2ZzZm9yZy9jc3MvaW1nL3Jzcy5naWYiIGFsdD0iUlNTIGZlZWQiIC8+PC9hPjwvcD48L2Rpdj4KCjwvZGl2PgoKPGRpdiBpZD0icG9ydGxldHdyYXBwZXItNzA2YzZmNmU2NTJlNzI2OTY3Njg3NDYzNmY2Yzc1NmQ2ZTBhNjM2ZjZlNzQ2NTc4NzQwYTJmNjY3MzY2MGE2NTc2NjU2ZTc0NzMiIGNsYXNzPSJwb3J0bGV0V3JhcHBlciBrc3NhdHRyLXBvcnRsZXRoYXNoLTcwNmM2ZjZlNjUyZTcyNjk2NzY4NzQ2MzZmNmM3NTZkNmUwYTYzNmY2ZTc0NjU3ODc0MGEyZjY2NzM2NjBhNjU3NjY1NmU3NDczIj4KPGRsIGNsYXNzPSJwb3J0bGV0IHBvcnRsZXRFdmVudHMiPgoKICAgIDxkdCBjbGFzcz0icG9ydGxldEhlYWRlciI+CiAgICAgICAgPHNwYW4gY2xhc3M9InBvcnRsZXRUb3BMZWZ0Ij48L3NwYW4+CiAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5mc2Yub3JnL2V2ZW50cyIgY2xhc3M9InRpbGUiPgogICAgICAgICAgICBVcGNvbWluZyBFdmVudHMKICAgICAgICA8L2E+CiAgICAgICAgPHNwYW4gY2xhc3M9InBvcnRsZXRUb3BSaWdodCI+PC9zcGFuPgogICAgPC9kdD4KCiAgICAKICAgIDxkZCBjbGFzcz0icG9ydGxldEl0ZW0gb2RkIj4KICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmZzZi5vcmcvZXZlbnRzLzIwMTIwNzI3LWNhcmFjYXMiIGNsYXNzPSJ0aWxlIiB0aXRsZT0iQ2FyYWNhcywgVmVuZXp1ZWxhIC0gU2FsYSBQbGVuYXJpYSBkZWwgQ2VudHJvIFNpbcOzbiBCb2zDrXZhci4gRWRpZi4gQW5hdWNvIFBhcnF1ZSBDZW50cmFsDQoiPgogICAgICAgICAgICA8aW1nIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgc3JjPSJodHRwOi8vd3d3LmZzZi5vcmcvc3RhdGljL2ZzZm9yZy9jc3MvaW1nL25ld3NpdGVtX2ljb24uZ2lmIiBhbHQ9IkV2ZW50IiAvPgogICAgICAgICAgICAiRWwgc29mdHdhcmUgbGlicmUgZW4gbGEgw6l0aWNhIHkgZW4gbGEgcHLDoWN0aWNhIgogICAgICAgIDwvYT4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InBvcnRsZXRJdGVtRGV0YWlscyI+CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDxzcGFuPkp1bCAyNywgMjAxMiAxMDowMCBBTSAtIDEyOjAwIFBNPC9zcGFuPgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8c3Bhbj4gJm1kYXNoOwogICAgICAgICAgICAgICAgICAgIENhcmFjYXMsIFZlbmV6dWVsYQogICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICA8L3NwYW4+CiAgICA8L2RkPgogICAgCgogICAgPGRkIGNsYXNzPSJwb3J0bGV0Rm9vdGVyIj4KICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmZzZi5vcmcvZXZlbnRzL2FnZ3JlZ2F0b3IvcHJldmlvdXMiIGNsYXNzPSJ0aWxlIj4KICAgICAgICAgICAgPHNwYW4+CiAgICAgICAgICAgICAgICBQcmV2aW91cyBldmVudHMmaGVsbGlwOwogICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgPC9hPgogICAgPC9kZD4KCiAgICA8ZGQgY2xhc3M9InBvcnRsZXRGb290ZXIiPgogICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuZnNmLm9yZy9ldmVudHMiIGNsYXNzPSJ0aWxlIj4KICAgICAgICAgICAgICAgIFVwY29taW5nIGV2ZW50cyZoZWxsaXA7CiAgICAgICAgPC9hPgogICAgICAgIDxzcGFuIGNsYXNzPSJwb3J0bGV0Qm90dG9tTGVmdCI+PC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJwb3J0bGV0Qm90dG9tUmlnaHQiPjwvc3Bhbj4KICAgIDwvZGQ+CjwvZGw+Cgo8L2Rpdj4KCgoKCgkJICAgICAgICAKCQkgICAgICAgICZuYnNwOwoJCSAgICAgIDwvZGl2PgoJICAgICAgCgoJPC9hc2lkZT4KCTwvZGl2PgoKCgoJPC9kaXY+PC9kaXY+CgoJPGRpdiBjbGFzcz0idmlzdWFsTm9QcmludCIgaWQ9Im1pc3Npb24tc3RhdGVtZW50Ij4KCgkgIDxwIGNsYXNzPSJjIj5UaGUgRlNGIGlzIGEgY2hhcml0eSB3aXRoIGEgd29ybGR3aWRlIG1pc3Npb24gdG8gYWR2YW5jZSBzb2Z0d2FyZSBmcmVlZG9tICZtZGFzaDsgPGEgaHJlZj0iL2Fib3V0Ij5sZWFybiBhYm91dCBvdXIgaGlzdG9yeSBhbmQgd29yay48L2E+PC9wPgoKCTwvZGl2PgoKCTxkaXYgaWQ9ImZ0IiBjbGFzcz0idmlzdWFsTm9QcmludCI+Cgk8Zm9vdGVyPgoJPGRpdiBpZD0iZnQtaW5uZXIiIGNsYXNzPSJjdXN0b20tZG9jIj4KCgk8ZGl2IGlkPSJjb3B5cmlnaHQiPgoJIAoKCSAgPHAgY2xhc3M9ImMiPkNvcHlyaWdodCAmY29weTsgMjAwNC0yMDEyIDxhIGhyZWY9Ii9hYm91dC9jb250YWN0Lmh0bWwiIHRpdGxlPSJGaW5kIG91dCBob3cgdG8gY29udGFjdCB1cyI+RnJlZQoJU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jPC9hPi48L3A+CgoJICA8cD5UaGlzIHdvcmsgaXMgbGljZW5zZWQgdW5kZXIgYSA8YSBocmVmPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1uZC8zLjAvIj5DcmVhdGl2ZQoJICBDb21tb25zIEF0dHJpYnV0aW9uLU5vIERlcml2YXRpdmUgV29ya3MgMy4wIGxpY2Vuc2UgKG9yIGxhdGVyCgkgIHZlcnNpb24pPC9hPiAmbWRhc2g7IDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlLWxpc3QuaHRtbCNPcGluaW9uTGljZW5zZXMiPldoeSB0aGlzIGxpY2Vuc2U/PC9hPi48L3A+IAoKCTwvZGl2PgoJPGRpdiBpZD0iZnNmLWxpbmtzLW91dGVyIj4KCTxkaXYgY2xhc3M9Inl1aS1nIHZpc3VhbE5vUHJpbnQgbm9Nb2JpbGUiIGlkPSJmc2YtbGlua3MiPgoJPGRpdj4KICAgIDxuYXY+CiAgICA8ZGl2IGNsYXNzPSJ5dWktZyBmaXJzdCI+CiAgICAgICAgPGRpdiBjbGFzcz0ieXVpLXUgZmlyc3QiIGlkPSJzaXRlbWFwLTEiPgoKICAgICAgICAgIDxwIGNsYXNzPSJuZXRzY2FwZTQiPjxhIGhyZWY9IiNmdCI+U2tpcCBzaXRlbWFwPC9hPiBvciA8YSBocmVmPSIjc2l0ZW1hcC0yIj5za2lwIHRvIGxpY2Vuc2luZyBpdGVtczwvYT48L3A+CgogICAgICA8dWw+CiAgICAgICAgPGxpPjxhIGhyZWY9Ii9hYm91dC8iPkFib3V0PC9hPgoKICAgICAgICA8dWw+CiAgICAgICAgICA8bGk+PGEgaHJlZj0iL2Fib3V0L2xlYWRlcnNoaXAuaHRtbCI+TGVhZGVyc2hpcDwvYT48L2xpPgogICAgICAgICAgPGxpPjxhIGhyZWY9Ii9hYm91dC9zdGFmZiI+U3RhZmY8L2E+PC9saT4KICAgICAgICAgIDxsaT48YSBocmVmPSIvYWJvdXQvY29udGFjdC5odG1sIj5Db250YWN0IFVzPC9hPjwvbGk+CiAgICAgICAgPC91bD48L2xpPgogICAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vbXkuZnNmLm9yZy9kb25hdGUvcHJpdmFjeXBvbGljeS5odG1sIj5Qcml2YWN5IFBvbGljeTwvYT48L2xpPgogICAgICAgIDxsaT48YSBocmVmPSIvY2FtcGFpZ25zIj5DYW1wYWlnbnM8L2E+CiAgICAgICAgPHVsPgoKICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3dpbmRvd3M3c2lucy5vcmcvIj5XaW5kb3dzIDcgU2luczwvYT48L2xpPgogICAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvIj5HTlUgT3BlcmF0aW5nIFN5c3RlbTwvYT48L2xpPgogICAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vZGVmZWN0aXZlYnlkZXNpZ24ub3JnLyI+RGVmZWN0aXZlIGJ5IERlc2lnbjwvYT48L2xpPgogICAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vZW5kc29mdHBhdGVudHMub3JnLyI+RW5kIFNvZnR3YXJlIFBhdGVudHM8L2E+PC9saT4KICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3BsYXlvZ2cub3JnLyI+UGxheU9nZyAmbWRhc2g7IGZyZWUgbWVkaWEgZm9ybWF0czwvYT48L2xpPgoKICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL2xpYnJlcGxhbmV0Lm9yZy8iPkNvbm5lY3Qgd2l0aCBmcmVlIHNvZnR3YXJlIHVzZXJzPC9hPjwvbGk+CiAgICAgIDwvdWw+PC9saT4KICAgICAgPC91bD4KCiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJ5dWktdSIgaWQ9InNpdGVtYXAtMiI+CgogICAgICAgICAgPHAgY2xhc3M9Im5ldHNjYXBlNCI+PGEgaHJlZj0iI3NpdGVtYXAtMyI+U2tpcCB0byBnZW5lcmFsIGl0ZW1zPC9hPjwvcD4KCiAgICAgICA8dWw+CiAgICAgICAgPGxpPjxhIGhyZWY9Ii9saWNlbnNpbmciPkxpY2Vuc2luZzwvYT4KICAgICAgICA8dWw+CiAgICAgICAgPGxpPjxhIGhyZWY9Ii9saWNlbnNpbmcvZWR1Y2F0aW9uIj5FZHVjYXRpb248L2E+PC9saT4KICAgICAgICA8bGk+PGEgaHJlZj0iL2xpY2Vuc2luZy9saWNlbnNlcyI+TGljZW5zZXM8L2E+CiAgICAgICAgPHVsPgogICAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLmh0bWwiPkdOVSBHUEw8L2E+PC9saT4KCiAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLmh0bWwiPkdOVSBBR1BMPC9hPjwvbGk+CiAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9sZ3BsLmh0bWwiPkdOVSBMR1BMPC9hPjwvbGk+CiAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9mZGwuaHRtbCI+R05VIEZETDwvYT48L2xpPjwvdWw+PC9saT4KICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC1mYXEuaHRtbCI+TGljZW5zaW5nIEZBUTwvYT48L2xpPgogICAgICAgIDxsaT48YSBocmVmPSIvbGljZW5zaW5nL2NvbXBsaWFuY2UiPkNvbXBsaWFuY2U8L2E+PC9saT4KICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC1ob3d0by5odG1sIj5Ib3cgdG8gdXNlIEdOVSBsaWNlbnNlcyBmb3IgeW91ciBvd24gc29mdHdhcmU8L2E+PC9saT48L3VsPjwvbGk+CgogICAgICA8L3VsPgoKICAgIAogICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9Inl1aS1nIGZpcnN0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJ5dWktdSBmaXJzdCIgaWQ9InNpdGVtYXAtMyI+CgogICAgICAgICAgPHAgY2xhc3M9Im5ldHNjYXBlNCI+PGEgaHJlZj0iI3NpdGVtYXAtNCI+U2tpcCB0byBwaGlsb3NvcGhpY2FsIGl0ZW1zPC9hPjwvcD4KICAgIAogICAgICA8dWw+CgogICAgICA8bGk+PGEgaHJlZj0iL25ld3MvIj5MYXRlc3QgTmV3czwvYT48dWw+CiAgICAgICAgPGxpPjxhIGhyZWY9Ii9ldmVudHMvIj5VcGNvbWluZyBFdmVudHM8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Ii9ibG9ncy8iPkZTRiBCbG9nczwvYT48L2xpPjwvdWw+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Ii92b2x1bnRlZXIiPlZvbHVudGVlcmluZyBhbmQgaW50ZXJuc2hpcHM8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Ii9yZXNvdXJjZXMvaHciPkhhcmR3YXJlIERhdGFiYXNlPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vZGlyZWN0b3J5LmZzZi5vcmciPkZyZWUgU29mdHdhcmUgRGlyZWN0b3J5PC9hPjwvbGk+CgogICAgICAgIDxsaT48YSBocmVmPSIvcmVzb3VyY2VzLyI+RnJlZSBTb2Z0d2FyZSBSZXNvdXJjZXM8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9wYXRyb24uZnNmLm9yZyI+UGF0cm9uczwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iL2Fzc29jaWF0ZS8iPkFzc29jaWF0ZSBNZW1iZXJzPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSIvYXNzb2NpYXRlL2FjY291bnQvIj5NeSBBY2NvdW50PC9hPjwvbGk+CiAgICAgIDxsaSBjbGFzcz0ibm9yaWdodCI+PGEgaHJlZj0iL2Fib3V0L2NvbnRhY3QuaHRtbCI+Q29udGFjdCBVczwvYT48L2xpPgogICAgICA8L3VsPgoKICAgICAgCiAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ5dWktdSIgaWQ9InNpdGVtYXAtNCI+CgogICAgICAgICAgPHAgY2xhc3M9Im5ldHNjYXBlNCI+PGEgaHJlZj0iI2Z0Ij5Ta2lwIGxpc3Q8L2E+PC9wPgoKICAgICAgPHVsPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL2RvbmF0ZS5mc2Yub3JnIj5Eb25hdGUgdG8gdGhlIEZTRjwvYT48L2xpPgogICAgICAgIDxsaT48YSBocmVmPSIvamZiIj5Kb2luIHRoZSBGU0Y8L2E+PC9saT4KCiAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9waGlsb3NvcGh5LyI+UGhpbG9zb3BoeTwvYT48dWw+CiAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9waGlsb3NvcGh5L2ZyZWUtc3cuaHRtbCI+VGhlIEZyZWUgU29mdHdhcmUgRGVmaW5pdGlvbjwvYT48L2xpPgogICAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvcGhpbG9zb3BoeS9wcmFnbWF0aWMuaHRtbCI+Q29weWxlZnQ6IFByYWdtYXRpYyBJZGVhbGlzbTwvYT48L2xpPgogICAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvcGhpbG9zb3BoeS9mcmVlLWRvYy5odG1sIj5GcmVlIFNvZnR3YXJlIGFuZCBGcmVlIE1hbnVhbHM8L2E+PC9saT4KICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3BoaWxvc29waHkvc2VsbGluZy5odG1sIj5TZWxsaW5nIEZyZWUgU29mdHdhcmU8L2E+PC9saT4KICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3BoaWxvc29waHkvZnMtbW90aXZlcy5odG1sIj5Nb3RpdmVzIGZvciBXcml0aW5nIEZyZWUgU29mdHdhcmU8L2E+PC9saT4KCiAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9waGlsb3NvcGh5L3JpZ2h0LXRvLXJlYWQuaHRtbCI+VGhlIFJpZ2h0IFRvIFJlYWQ8L2E+PC9saT4KICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3BoaWxvc29waHkvb3Blbi1zb3VyY2UtbWlzc2VzLXRoZS1wb2ludC5odG1sIj5XaHkgT3BlbiBTb3VyY2UgTWlzc2VzIHRoZSBQb2ludCBvZiBGcmVlIFNvZnR3YXJlPC9hPjwvbGk+PC91bD48L2xpPgogICAgICAgIDxsaT48YSBocmVmPSIvc2l0ZW1hcCI+Q29tcGxldGUgc2l0ZW1hcDwvYT48L2xpPgogICAgICA8L3VsPgogICAgICAKICAgIDwvZGl2PgogICAgPC9kaXY+CjwvbmF2PgoKPC9kaXY+Cgk8L2Rpdj4KCgk8cCBpZD0iZnNmcyIgY2xhc3M9ImMgdmlzdWFsTm9QcmludCBub01vYmlsZSI+PHNtYWxsPlRoZSBGU0YgYWxzbyBoYXMgc2lzdGVyIG9yZ2FuaXphdGlvbnMgaW4gPGEgaHJlZj0iaHR0cDovL3d3dy5mc2ZmcmFuY2Uub3JnL2luZGV4LmVuLmh0bWwiPkZyYW5jZTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cuZnNmbGEub3JnLyI+TGF0aW4gQW1lcmljYTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cuZnNmZXVyb3BlLm9yZyI+RXVyb3BlPC9hPiBhbmQgPGEgaHJlZj0iaHR0cDovL2ZzZi5vcmcuaW4vIj5JbmRpYTwvYT4uPC9zbWFsbD48L3A+CgoJPC9kaXY+CgoJPC9kaXY+CgoKCgoJPC9mb290ZXI+Cgk8L2Rpdj4KCgkgICAgPCEtLQoJPHJkZjpSREYgeG1sbnM9Imh0dHA6Ly93ZWIucmVzb3VyY2Uub3JnL2NjLyIKCQkgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgoJCSB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgoJPFdvcmsgcmRmOmFib3V0PSJodHRwOi8vd3d3LmZzZi5vcmcvIj4KCTxkYzp0aXRsZT5GcmVlIFNvZnR3YXJlIEZvdW5kYXRpb248L2RjOnRpdGxlPgoJPGRjOmRlc2NyaXB0aW9uPlRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEZTRikgaXMgYSBub25wcm9maXQgd2l0aCBhIHdvcmxkd2lkZSBtaXNzaW9uIHRvIHByb21vdGUgY29tcHV0ZXIgdXNlciBmcmVlZG9tIGFuZCB0byBkZWZlbmQgdGhlIHJpZ2h0cyBvZiBhbGwgZnJlZSBzb2Z0d2FyZSB1c2Vycy48L2RjOmRlc2NyaXB0aW9uPgoJPGxpY2Vuc2UgcmRmOnJlc291cmNlPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1uZC8zLjAvdXMvIiAvPgoJPC9Xb3JrPgoJPExpY2Vuc2UgcmRmOmFib3V0PSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1uZC8zLjAvdXMvIj4KCTwvTGljZW5zZT4KCTwvcmRmOlJERj4KCS0tPgoKCTxkaXYgY2xhc3M9ImMgdmlzdWFsTm9QcmludCBub01vYmlsZSIgaWQ9InBvd2VyZWQtYnkiPgoKCTxoNSBjbGFzcz0ibmV0c2NhcGU0Ij5mc2Yub3JnIGlzIHBvd2VyZWQgYnk6PC9oNT4KCgk8dWw+Cgk8bGkgaWQ9InBvd2VyZWQtYnktcGxvbmUiPjxhIGhyZWY9Imh0dHA6Ly9wbG9uZS5vcmciIHRpdGxlPSJQbG9uZSBQb3dlcmVkIj5QbG9uZTwvYT48L2xpPgoJPGxpIGlkPSJwb3dlcmVkLWJ5LXpvcGUiPjxhIGhyZWY9Imh0dHA6Ly96b3BlLm9yZyIgdGl0bGU9IlBvd2VyZWQgYnkgWm9wZSI+Wm9wZTwvYT48L2xpPgoJPGxpIGlkPSJwb3dlcmVkLWJ5LXB5dGhvbiI+PGEgaHJlZj0iaHR0cDovL3B5dGhvbi5vcmciIHRpdGxlPSJQb3dlcmVkIGJ5IFB5dGhvbiI+UHl0aG9uPC9hPjwvbGk+Cgk8bGkgaWQ9InBvd2VyZWQtYnktY2l2aWNybSI+PGEgaHJlZj0iaHR0cDovL2Npdmljcm0ub3JnIiB0aXRsZT0iUG93ZXJlZCBieSBDaXZpQ1JNIj5DaXZpQ1JNPC9hPjwvbGk+Cgk8bGkgaWQ9InBvd2VyZWQtYnktaHRtbDUiPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL2h0bWwiPkhUTUw1PC9hPjwvbGk+Cgk8L3VsPgoKCTwvZGl2PgoKICAgICAgICA8cCBjbGFzcz0iYyIgc3R5bGU9Im1hcmdpbi10b3A6IDEycHg7Ij48YSBocmVmPSIvYWJvdXQvZmluYW5jaWFsIj48aW1nIHNyYz0iLy9zdGF0aWMuZnNmLm9yZy9ub3N2bi9wbG9uZTMvY2hhcml0eS80c3Rhcjg4eDMxLmdpZiIgYWx0PSJGb3VyIHN0YXIgY2hhcml0eSIgLz48L2E+PC9wPgoKICAgICAgICA8Zm9ybSBjbGFzcz0iYyIgYWN0aW9uPSIuLyIgbWV0aG9kPSJnZXQiIGlkPSJjaG9vc2UtbGFuZ3VhZ2UiPgo8cD48c2VsZWN0IG5hbWU9InNldF9sYW5ndWFnZSI+CiAgPG9wdGlvbiB2YWx1ZT0iYXIiPkFyYWJpYzwvb3B0aW9uPgogIDxvcHRpb24gdmFsdWU9ImJlIj5CZWxhcnVzc2lhbjwvb3B0aW9uPgogIDxvcHRpb24gdmFsdWU9ImJnIj5CdWxnYXJpYW48L29wdGlvbj4KICA8b3B0aW9uIHZhbHVlPSJjYSI+Q2F0YWxhbjwvb3B0aW9uPgogIDxvcHRpb24gdmFsdWU9InpoIj5DaGluZXNlPC9vcHRpb24+CiAgPG9wdGlvbiB2YWx1ZT0ia3ciPkNvcm5pc2g8L29wdGlvbj4KICA8b3B0aW9uIHZhbHVlPSJjcyI+Q3plY2g8L29wdGlvbj4KICA8b3B0aW9uIHZhbHVlPSJkYSI+RGFuaXNoPC9vcHRpb24+CiAgPG9wdGlvbiB2YWx1ZT0iZW4iIHNlbGVjdGVkPSJzZWxlY3RlZCI+RW5nbGlzaDwvb3B0aW9uPgogIDxvcHRpb24gdmFsdWU9ImZyIj5GcmVuY2g8L29wdGlvbj4KICA8b3B0aW9uIHZhbHVlPSJkZSI+R2VybWFuPC9vcHRpb24+CiAgPG9wdGlvbiB2YWx1ZT0iZWwiPkdyZWVrPC9vcHRpb24+CiAgPG9wdGlvbiB2YWx1ZT0iaGUiPkhlYnJldzwvb3B0aW9uPgogIDxvcHRpb24gdmFsdWU9ImhpIj5IaW5kaTwvb3B0aW9uPgogIDxvcHRpb24gdmFsdWU9Iml0Ij5JdGFsaWFuPC9vcHRpb24+CiAgPG9wdGlvbiB2YWx1ZT0iamEiPkphcGFuZXNlPC9vcHRpb24+CiAgPG9wdGlvbiB2YWx1ZT0ia28iPktvcmVhbjwvb3B0aW9uPgogIDxvcHRpb24gdmFsdWU9Im5vIj5Ob3J3ZWdpYW48L29wdGlvbj4KICA8b3B0aW9uIHZhbHVlPSJwbCI+UG9saXNoPC9vcHRpb24+CiAgPG9wdGlvbiB2YWx1ZT0icHQiPlBvcnR1Z3Vlc2U8L29wdGlvbj4KICA8b3B0aW9uIHZhbHVlPSJwdC1iciI+UG9ydHVndWVzZSAoQnJhemlsKTwvb3B0aW9uPgogIDxvcHRpb24gdmFsdWU9InJvIj5Sb21hbmlhbjwvb3B0aW9uPgogIDxvcHRpb24gdmFsdWU9InJ1Ij5SdXNzaWFuPC9vcHRpb24+CiAgPG9wdGlvbiB2YWx1ZT0ic2siPlNsb3Zhazwvb3B0aW9uPgogIDxvcHRpb24gdmFsdWU9ImVzIj5TcGFuaXNoPC9vcHRpb24+CiAgPG9wdGlvbiB2YWx1ZT0ic3YiPlN3ZWRpc2g8L29wdGlvbj4KICA8b3B0aW9uIHZhbHVlPSJ0ciI+VHVya2lzaDwvb3B0aW9uPgogIDxvcHRpb24gdmFsdWU9InVyIj5VcmR1PC9vcHRpb24+CiAgPG9wdGlvbiB2YWx1ZT0iY3kiPldlbHNoPC9vcHRpb24+Cjwvc2VsZWN0PiAmbmJzcDsgPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNlbGVjdCBsYW5ndWFnZSI+PC9wPgo8cD48c21hbGw+U2VuZCB5b3VyIGZlZWRiYWNrIG9uIG91ciB0cmFuc2xhdGlvbnMgYW5kIG5ldyB0cmFuc2xhdGlvbnMgb2YgcGFnZXMgdG8gPGEgaHJlZj0ibWFpbHRvOmNhbXBhaWduc0Bmc2Yub3JnIj5jYW1wYWlnbnNAZnNmLm9yZzwvYT4uPC9zbWFsbD48L3A+CjwvZm9ybT4KCgk8L2Rpdj4gCgoKCgoKCTwvYm9keT4KCTwvaHRtbD4KCgk%3D">Free Software Foundation</A>
++ <DT><A HREF="http://libreplanet.org/" ICON="data:image/x-icon;base64,AAABAAEAEBAAAAAAAABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAEAAAAAAAAAAAAAAAEAAAAAAAC/v78AAAAAAPLy9ABsbakA/f3+APn5+QC6ur0A6urqAEpLbQACBLQApKW3AAULuQDMzMwAGBiDAL29vQCgocsAgnzJALu82QA+PpsAAQOvAOjo6ADZ2dkAysrKALS0zwD5+foAAgKRAAYGdQD19fUADhOjAAQJyACrnqIAxMTLAOnp7gDm5uYAzczNACgobwDg2dEAQkaeAA0RkAAUFnEA0MvQAIBzgAANDYsAk5OyAOTk5ADy8vYA1dXVAD8/cADGxsYA+fn7AAMHvgBzZnQApqauAAEGuQDExMQAAAGmAAoLmgADCMQAxMTdAAwPlwD+/v4ABg7MAF5ehADg4OAA0dHRAAAAoQAYEXAAwsLCALCxwQBnadkAAQGWAPz8/ACgoLgAbm6RANvb5wDr6+sA0dHSALe3uQADB8AAzc3NAGFhbAABAZcAOTtlALi4xwAAAJoA/Pz9AAQHnwADBJcACQl4AFVa3AChl6EAAgW2ABscdAABAq4A2NjYAAAAmwDAwMoAAQKmAAcMswDR0eQAAQSxANvX2wB4aXcAAQGpAAAAkwDW1tYAAgSpACIZZAAAAaEA+vr8AKuirAACBbcA8vLyALOztgADBZYAAACcAAACpwAEA6QAAQKnAPT09QD///8AvL3UADIpigDw8PAABwWOAK6dogBub4kAiozDANLS0gAFC8gAAgW4AP39/QAAAJ0A0NDQAMHBwQDp6ewACg2RAAIFqAAKCokA+/v7AAkOnwAAAaMA7OzsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeHh4eHh4eHh4eHh4eHh4AXh4eHhlbikzZlooeHh4eAF4eHh4hX1JVFweInh4eHgBeHh4XmlAGXNGSB8VeHh4AXg8LhaGcV9zKg0wQF54eAF4K0NNOGthjXNCUwAMS3gBPC82iW+CCRN2Iz4wTwx4AW0GgCc5OU41VnSKTBoOiwEFTz8hHIF5RANdQVRfNIMBeBUhe0o9jB0Pcjdzc1E8AXgsB3AbUlkQRVtnhHNoeAF4i45wJCAlYjJbdYRfY3gBeDwmEn4XMToKZDd6WDx4AXh4VTsIfwt3FGpsfAR4eAF4eHgEEYhQAodXYDx4eHgBeHh4eHg8GC1HPHh4eHh4AQABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA%3D">LibrePlanet</A>
++ <DT><A HREF="http://www.gnu.org/software/gnuzilla/addons.html" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAAGFBMVEVFRUV+fn6mpqa/v7/Ozs7Y2Njg4OD8/Pwuhn+TAAAAAWJLR0QAiAUdSAAAAAlwSFlzAAALEQAACxEBf2RfkQAAAAd0SU1FB9MBDhQ6Gd8s57cAAAEVSURBVBgZBcGxVtpgGADQL9gHSBzqSognzMixmcWWzB6pmRHhnyvku6/fewMAIPD3TwHmQxHs6vr+A16bphNum/vV0x429201hcPjAGBTDZGnR/Kw1U181+u4HXvOdSxjUcztz8jjg1xGVBG9XPYxt4PviKiaWLg168iXtbrq+mPT1utjNcR1U73deRnL43M2sRgj3+oYs8uL3rLphPd2QWmHbMu/VS/cnk6UdtSW657g9yBlcZ0UAkUWzPvyRaAYmfd+HT4IZtvC59ibEJxXiqJjQpBpNEufBYE0McoOAunGhRMEFIPc7h4goJigQEBxk8u7AgEpL3IEAUZfcgAByGFXQACm5+4MAuB19QMEgI8CAgDgP4rivVgoKP6ZAAAAAElFTkSuQmCC">Free addons</A>
++ <DT><A HREF="http://www.h-node.org/" ICON="data:image/x-icon;base64,AAABAAEAEBAAAAAAAABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAEAAAAAAAAAAAAAAAEAAAAAAAC7zrYAWYhNANjj1QA9fEcAEEwBAHTQkwAeVRkAPXMvALvOtwASVQEAHFcUAH/bpgB60p8AKnQmAGO1fgAjaRwALmA1AA5EAQDM2sgAN3ApAG7EjgC5zbQAVJxrAChwIgC0ya8ALmczAHXJmQBNf0EAgd6oADhwKgC8z7cA7vPtANTg0QANPwAARIhSADtyLQBzzpQAus21AEeKVQDC070AieyzALzPuAB93qEALGYvAO/z7gBEiVAAasWFAFuJTwBKil4AXotSAEuKXgAORQEAD0gBABlDFwBWpmoALGYwAGCNVQAbYBAAHGAQABBOAQCI6rIAjPG3AB1bDgAaXg4A////AGaRWwB/2qYAUYJEAEx+PwAZXAwAm7eUAD51MADN28oAJmwhACRiFAAzeTYAasaFAB9eDwBkt34Aus62AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPT09PT09PT09PT09PT09PT09PT0OIjALPRQmMkI9PT09PT09OkcHNQU+Q0oQPT09PT09PToVGDQtI0ABKz09PT09PT06JRg0Nh1ALxk9PT09PT09OiUYIS4TQC83PT09PT09PTpPSDsGG0BEAz09PT09PT06T0BGMRIsTRY9PT09PT09OgACJx8gQwooPT09PT09PToICAkJCUkkPT09PT09PT05HggETio9PT09PT09PT09Px4IERw9PT09PT09PT09PUUpCDMMPT09PT09PT09PT0NOEEEGj09PT09PT09PT09TBcPSzw9PT09PT09PT09PT09PT09PT09PT09PQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D">h-node</A>
+ </DL><p>
+ </DL><p>
+diff -Naur icecat-13.0.1/build/pgo/blueprint/elements.html icecat-13.0.1-libre/build/pgo/blueprint/elements.html
+--- icecat-13.0.1/build/pgo/blueprint/elements.html 2012-07-12 14:27:37.000000000 -0300
++++ icecat-13.0.1-libre/build/pgo/blueprint/elements.html 2012-07-17 21:44:48.052812473 -0300
@@ -143,7 +143,7 @@
</p>
<p>
@@ -87,9 +578,9 @@ diff -urN iceweasel-13.0.orig/build/pgo/blueprint/elements.html iceweasel-13.0/b
</p>
<p>
<abbr title="extended abbr text should show when mouse over">&lt;abbr&gt; abbr - extended text when mouseover.</abbr><br>
-diff -urN iceweasel-13.0.orig/dom/ipc/test.xul iceweasel-13.0/dom/ipc/test.xul
---- mozilla-build.orig/dom/ipc/test.xul 2012-06-01 09:03:55.000000000 -0300
-+++ mozilla-build/dom/ipc/test.xul 2012-06-05 20:40:59.453890004 -0300
+diff -Naur icecat-13.0.1/dom/ipc/test.xul icecat-13.0.1-libre/dom/ipc/test.xul
+--- icecat-13.0.1/dom/ipc/test.xul 2012-07-12 14:27:37.000000000 -0300
++++ icecat-13.0.1-libre/dom/ipc/test.xul 2012-07-17 21:48:08.242020288 -0300
@@ -294,6 +294,6 @@
oncommand="document.getElementById('page').QueryInterface(Components.interfaces.nsIFrameLoaderOwner).frameLoader.delayRemoteDialogs = this.checked;"/>
</toolbar>
@@ -98,9 +589,9 @@ diff -urN iceweasel-13.0.orig/dom/ipc/test.xul iceweasel-13.0/dom/ipc/test.xul
+ <browser type="content" src="https://duckduckgo.com/lite" flex="1" id="page" remote="true"/>
<label id="messageLog" value="" crop="center"/>
</window>
-diff -urN iceweasel-13.0.orig/layout/ipc/test-ipcbrowser.xul iceweasel-13.0/layout/ipc/test-ipcbrowser.xul
---- mozilla-build.orig/layout/ipc/test-ipcbrowser.xul 2012-06-01 09:04:06.000000000 -0300
-+++ mozilla-build/layout/ipc/test-ipcbrowser.xul 2012-06-05 20:44:00.714006926 -0300
+diff -Naur icecat-13.0.1/layout/ipc/test-ipcbrowser.xul icecat-13.0.1-libre/layout/ipc/test-ipcbrowser.xul
+--- icecat-13.0.1/layout/ipc/test-ipcbrowser.xul 2012-07-12 14:27:37.000000000 -0300
++++ icecat-13.0.1-libre/layout/ipc/test-ipcbrowser.xul 2012-07-17 21:48:50.526879514 -0300
@@ -69,6 +69,6 @@
label="setViewportScale"/>
</toolbar>
@@ -109,20 +600,20 @@ diff -urN iceweasel-13.0.orig/layout/ipc/test-ipcbrowser.xul iceweasel-13.0/layo
+ <browser type="content" src="https://duckduckgo.com/lite" flex="1" id="content"
remote="true"/>
</window>
-diff -urN iceweasel-13.0.orig/mobile/xul/app/mobile.js iceweasel-13.0/mobile/xul/app/mobile.js
---- mozilla-build.orig/mobile/xul/app/mobile.js 2012-06-01 09:04:14.000000000 -0300
-+++ mozilla-build/mobile/xul/app/mobile.js 2012-06-05 20:48:20.193241600 -0300
-@@ -220,13 +220,13 @@
+diff -Naur icecat-13.0.1/mobile/android/app/mobile.js icecat-13.0.1-libre/mobile/android/app/mobile.js
+--- icecat-13.0.1/mobile/android/app/mobile.js 2012-07-12 14:27:37.000000000 -0300
++++ icecat-13.0.1-libre/mobile/android/app/mobile.js 2012-07-17 22:14:47.293560718 -0300
+@@ -226,13 +226,13 @@
/* preferences for the Get Add-ons pane */
pref("extensions.getAddons.cache.enabled", true);
pref("extensions.getAddons.maxResults", 15);
--pref("extensions.getAddons.recommended.browseURL", "https://addons.mozilla.org/%LOCALE%/mobile/recommended/");
--pref("extensions.getAddons.recommended.url", "https://services.addons.mozilla.org/%LOCALE%/mobile/api/%API_VERSION%/list/featured/all/%MAX_RESULTS%/%OS%/%VERSION%");
--pref("extensions.getAddons.search.browseURL", "https://addons.mozilla.org/%LOCALE%/mobile/search?q=%TERMS%");
--pref("extensions.getAddons.search.url", "https://services.addons.mozilla.org/%LOCALE%/mobile/api/%API_VERSION%/search/%TERMS%/all/%MAX_RESULTS%/%OS%/%VERSION%/%COMPATIBILITY_MODE%");
--pref("extensions.getAddons.browseAddons", "https://addons.mozilla.org/%LOCALE%/mobile/");
--pref("extensions.getAddons.get.url", "https://services.addons.mozilla.org/%LOCALE%/mobile/api/%API_VERSION%/search/guid:%IDS%?src=mobile&appOS=%OS%&appVersion=%VERSION%");
--pref("extensions.getAddons.getWithPerformance.url", "https://services.addons.mozilla.org/%LOCALE%/mobile/api/%API_VERSION%/search/guid:%IDS%?src=mobile&appOS=%OS%&appVersion=%VERSION%&tMain=%TIME_MAIN%&tFirstPaint=%TIME_FIRST_PAINT%&tSessionRestored=%TIME_SESSION_RESTORED%");
+-pref("extensions.getAddons.recommended.browseURL", "https://addons.mozilla.org/%LOCALE%/android/recommended/");
+-pref("extensions.getAddons.recommended.url", "https://services.addons.mozilla.org/%LOCALE%/android/api/%API_VERSION%/list/featured/all/%MAX_RESULTS%/%OS%/%VERSION%");
+-pref("extensions.getAddons.search.browseURL", "https://addons.mozilla.org/%LOCALE%/android/search?q=%TERMS%&platform=%OS%&appver=%VERSION%");
+-pref("extensions.getAddons.search.url", "https://services.addons.mozilla.org/%LOCALE%/android/api/%API_VERSION%/search/%TERMS%/all/%MAX_RESULTS%/%OS%/%VERSION%/%COMPATIBILITY_MODE%");
+-pref("extensions.getAddons.browseAddons", "https://addons.mozilla.org/%LOCALE%/android/");
+-pref("extensions.getAddons.get.url", "https://services.addons.mozilla.org/%LOCALE%/android/api/%API_VERSION%/search/guid:%IDS%?src=mobile&appOS=%OS%&appVersion=%VERSION%");
+-pref("extensions.getAddons.getWithPerformance.url", "https://services.addons.mozilla.org/%LOCALE%/android/api/%API_VERSION%/search/guid:%IDS%?src=mobile&appOS=%OS%&appVersion=%VERSION%&tMain=%TIME_MAIN%&tFirstPaint=%TIME_FIRST_PAINT%&tSessionRestored=%TIME_SESSION_RESTORED%");
+pref("extensions.getAddons.recommended.browseURL", "http://www.gnu.org/s/gnuzilla/addons.html");
+pref("extensions.getAddons.recommended.url", "http://www.gnu.org/s/gnuzilla/addons.html");
+pref("extensions.getAddons.search.browseURL", "http://www.gnu.org/s/gnuzilla/addons.html");
@@ -133,7 +624,7 @@ diff -urN iceweasel-13.0.orig/mobile/xul/app/mobile.js iceweasel-13.0/mobile/xul
/* preference for the locale picker */
pref("extensions.getLocales.get.url", "");
-@@ -243,7 +243,7 @@
+@@ -252,7 +252,7 @@
pref("dom.disable_window_open_dialog_feature", true);
pref("keyword.enabled", true);
@@ -142,10 +633,10 @@ diff -urN iceweasel-13.0.orig/mobile/xul/app/mobile.js iceweasel-13.0/mobile/xul
pref("accessibility.typeaheadfind", false);
pref("accessibility.typeaheadfind.timeout", 5000);
-diff -urN iceweasel-13.0.orig/mobile/locales/en-US/chrome/region.properties iceweasel-13.0/mobile/locales/en-US/chrome/region.properties
---- mozilla-release.orig/mobile/locales/en-US/chrome/region.properties 2012-06-01 09:04:14.000000000 -0300
-+++ mozilla-release/mobile/locales/en-US/chrome/region.properties 2012-06-15 02:17:43.446130868 -0300
-@@ -1,18 +1,18 @@
+diff -Naur icecat-13.0.1/mobile/locales/en-US/chrome/region.properties icecat-13.0.1-libre/mobile/locales/en-US/chrome/region.properties
+--- icecat-13.0.1/mobile/locales/en-US/chrome/region.properties 2012-07-12 14:27:37.000000000 -0300
++++ icecat-13.0.1-libre/mobile/locales/en-US/chrome/region.properties 2012-07-17 22:01:03.952816711 -0300
+@@ -1,18 +1,16 @@
# Default search engine
-browser.search.defaultenginename=Google
+browser.search.defaultenginename=Duck Duck Go (Lite)
@@ -160,38 +651,67 @@ diff -urN iceweasel-13.0.orig/mobile/locales/en-US/chrome/region.properties icew
-browser.contentHandlers.types.0.uri=http://add.my.yahoo.com/rss?url=%s
-browser.contentHandlers.types.1.title=Google
-browser.contentHandlers.types.1.uri=http://fusion.google.com/add?feedurl=%s
-+browser.contentHandlers.types.0.title=
-+browser.contentHandlers.types.0.uri=about:blank
-+browser.contentHandlers.types.1.title=
-+browser.contentHandlers.types.1.uri=about:blank
++#browser.contentHandlers.types.0.title=
++#browser.contentHandlers.types.0.uri=about:blank
# Keyword URL (for location bar searches)
-keyword.URL=http://www.google.com/search?ie=UTF-8&oe=UTF-8&sourceid=navclient&gfns=1&q=
-+keyword.URL=https://duckduckgo.com/lite/?q=site%3A{moz:domain}+{searchTerms}
++keyword.URL=https://duckduckgo.com/lite/?q=
# increment this number when anything gets changed in the list below. This will
# cause Firefox to re-read these prefs and inject any new handlers into the
-@@ -22,11 +22,11 @@
+@@ -22,11 +20,9 @@
gecko.handlerService.defaultHandlersVersion=2
# The default set of protocol handlers for webcal:
-gecko.handlerService.schemes.webcal.0.name=30 Boxes
-gecko.handlerService.schemes.webcal.0.uriTemplate=http://30boxes.com/external/widget?refer=ff&url=%s
-+gecko.handlerService.schemes.webcal.0.name=
-+gecko.handlerService.schemes.webcal.0.uriTemplate=about:blank
++#gecko.handlerService.schemes.webcal.0.name=
++#gecko.handlerService.schemes.webcal.0.uriTemplate=about:blank
# The default set of protocol handlers for mailto:
-gecko.handlerService.schemes.mailto.0.name=Yahoo! Mail
-gecko.handlerService.schemes.mailto.0.uriTemplate=http://compose.mail.yahoo.com/?To=%s
-gecko.handlerService.schemes.mailto.1.name=Gmail
-gecko.handlerService.schemes.mailto.1.uriTemplate=https://mail.google.com/mail/?extsrc=mailto&url=%s
-+gecko.handlerService.schemes.mailto.0.name=
-+gecko.handlerService.schemes.mailto.0.uriTemplate=about:blank
-+gecko.handlerService.schemes.mailto.1.name=
-+gecko.handlerService.schemes.mailto.1.uriTemplate=about:blank
-diff -urN iceweasel-13.0.orig/modules/libpref/src/init/all.js iceweasel-13.0/modules/libpref/src/init/all.js
---- mozilla-build.orig/modules/libpref/src/init/all.js 2012-06-01 09:04:16.000000000 -0300
-+++ mozilla-build/modules/libpref/src/init/all.js 2012-06-05 20:55:41.569045759 -0300
++#gecko.handlerService.schemes.mailto.0.name=
++#gecko.handlerService.schemes.mailto.0.uriTemplate=about:blank
+diff -Naur icecat-13.0.1/mobile/xul/app/mobile.js icecat-13.0.1-libre/mobile/xul/app/mobile.js
+--- icecat-13.0.1/mobile/xul/app/mobile.js 2012-07-12 14:27:37.000000000 -0300
++++ icecat-13.0.1-libre/mobile/xul/app/mobile.js 2012-07-17 22:08:34.513828987 -0300
+@@ -221,13 +221,13 @@
+ /* preferences for the Get Add-ons pane */
+ pref("extensions.getAddons.cache.enabled", true);
+ pref("extensions.getAddons.maxResults", 15);
+-pref("extensions.getAddons.recommended.browseURL", "https://addons.mozilla.org/%LOCALE%/mobile/recommended/");
+-pref("extensions.getAddons.recommended.url", "https://services.addons.mozilla.org/%LOCALE%/mobile/api/%API_VERSION%/list/featured/all/%MAX_RESULTS%/%OS%/%VERSION%");
+-pref("extensions.getAddons.search.browseURL", "https://addons.mozilla.org/%LOCALE%/mobile/search?q=%TERMS%&platform=%OS%&appver=%VERSION%");
+-pref("extensions.getAddons.search.url", "https://services.addons.mozilla.org/%LOCALE%/mobile/api/%API_VERSION%/search/%TERMS%/all/%MAX_RESULTS%/%OS%/%VERSION%/%COMPATIBILITY_MODE%");
+-pref("extensions.getAddons.browseAddons", "https://addons.mozilla.org/%LOCALE%/mobile/");
+-pref("extensions.getAddons.get.url", "https://services.addons.mozilla.org/%LOCALE%/mobile/api/%API_VERSION%/search/guid:%IDS%?src=mobile&appOS=%OS%&appVersion=%VERSION%");
+-pref("extensions.getAddons.getWithPerformance.url", "https://services.addons.mozilla.org/%LOCALE%/mobile/api/%API_VERSION%/search/guid:%IDS%?src=mobile&appOS=%OS%&appVersion=%VERSION%&tMain=%TIME_MAIN%&tFirstPaint=%TIME_FIRST_PAINT%&tSessionRestored=%TIME_SESSION_RESTORED%");
++pref("extensions.getAddons.recommended.browseURL", "http://www.gnu.org/s/gnuzilla/addons.html");
++pref("extensions.getAddons.recommended.url", "http://www.gnu.org/s/gnuzilla/addons.html");
++pref("extensions.getAddons.search.browseURL", "http://www.gnu.org/s/gnuzilla/addons.html");
++pref("extensions.getAddons.search.url", "http://www.gnu.org/s/gnuzilla/addons.html");
++pref("extensions.getAddons.browseAddons", "http://www.gnu.org/s/gnuzilla/addons.html");
++pref("extensions.getAddons.get.url", "http://www.gnu.org/s/gnuzilla/addons.html");
++pref("extensions.getAddons.getWithPerformance.url", "http://www.gnu.org/s/gnuzilla/addons.html");
+
+ /* preference for the locale picker */
+ pref("extensions.getLocales.get.url", "");
+@@ -247,7 +247,7 @@
+ pref("dom.disable_window_open_dialog_feature", true);
+
+ pref("keyword.enabled", true);
+-pref("keyword.URL", "http://www.google.com/m?ie=UTF-8&oe=UTF-8&sourceid=navclient&gfns=1&q=");
++pref("keyword.URL", "https://duckduckgo.com/lite/?q=");
+
+ pref("accessibility.typeaheadfind", false);
+ pref("accessibility.typeaheadfind.timeout", 5000);
+diff -Naur icecat-13.0.1/modules/libpref/src/init/all.js icecat-13.0.1-libre/modules/libpref/src/init/all.js
+--- icecat-13.0.1/modules/libpref/src/init/all.js 2012-07-12 14:27:37.000000000 -0300
++++ icecat-13.0.1-libre/modules/libpref/src/init/all.js 2012-07-17 22:16:45.176878991 -0300
@@ -47,7 +47,7 @@
// SYNTAX HINTS: dashes are delimiters. Use underscores instead.
// The first character after a period must be alphabetic.
@@ -201,9 +721,9 @@ diff -urN iceweasel-13.0.orig/modules/libpref/src/init/all.js iceweasel-13.0/mod
pref("keyword.enabled", false);
pref("general.useragent.locale", "chrome://global/locale/intl.properties");
pref("general.useragent.compatMode.firefox", false);
-diff -urN iceweasel-13.0.orig/toolkit/locales/en-US/chrome/global-region/region.properties iceweasel-13.0/toolkit/locales/en-US/chrome/global-region/region.properties
---- mozilla-build.orig/toolkit/locales/en-US/chrome/global-region/region.properties 2012-06-01 09:04:20.000000000 -0300
-+++ mozilla-build/toolkit/locales/en-US/chrome/global-region/region.properties 2012-06-05 20:58:59.068158482 -0300
+diff -Naur icecat-13.0.1/toolkit/locales/en-US/chrome/global-region/region.properties icecat-13.0.1-libre/toolkit/locales/en-US/chrome/global-region/region.properties
+--- icecat-13.0.1/toolkit/locales/en-US/chrome/global-region/region.properties 2012-07-12 14:27:37.000000000 -0300
++++ icecat-13.0.1-libre/toolkit/locales/en-US/chrome/global-region/region.properties 2012-07-17 21:58:17.176492031 -0300
@@ -4,10 +4,10 @@
pluginStartupMessage=Starting Plugin for type
@@ -214,157 +734,10 @@ diff -urN iceweasel-13.0.orig/toolkit/locales/en-US/chrome/global-region/region.
-pluginupdates_url=http://www.mozilla.com/plugincheck/
-plugindoc_label=plugindoc.mozdev.org
-plugindoc_url=http://plugindoc.mozdev.org/
-+more_plugins_label=gnuzilla.gnu.org
-+more_plugins_url=http://www.gnu.org/s/gnuzilla/addons.html
-+pluginupdates_label=gnuzilla.gnu.org
-+pluginupdates_url=http://www.gnu.org/s/gnuzilla/addons.html
-+plugindoc_label=gnuzilla.gnu.org
-+plugindoc_url=http://www.gnu.org/s/gnuzilla/addons.html
-
-diff -urN iceweasel-13.0.orig/browser/locales/generic/profile/bookmarks.html.in iceweasel-13.0/browser/locales/generic/profile/bookmarks.html.in
---- mozilla-release.orig/browser/locales/generic/profile/bookmarks.html.in 2012-06-01 09:03:48.000000000 -0300
-+++ mozilla-release/browser/locales/generic/profile/bookmarks.html.in 2012-06-15 22:54:08.446274144 -0300
-@@ -11,13 +11,20 @@
- <DT><H3 PERSONAL_TOOLBAR_FOLDER="true" ID="rdf:#$FvPhC3">@bookmarks_toolbarfolder@</H3>
- <DD>@bookmarks_toolbarfolder_description@
- <DL><p>
-- <DT><A HREF="http://www.mozilla.com/@AB_CD@/firefox/central/" ID="rdf:#$GvPhC3">@getting_started@</A>
-+ <DT><A HREF="https://parabolagnulinux.org/" ID="rdf:#$GvPhC3">Parabola GNU/Linux-libre</A>
- </DL><p>
-- <DT><H3 ID="rdf:#$ZvPhC3">@firefox_heading@</H3>
-+ <DT><H3 ID="rdf:#$YvPhC3">Parabola GNU/Linux-libre</H3>
- <DL><p>
-- <DT><A HREF="http://www.mozilla.com/@AB_CD@/firefox/help/" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==" ID="rdf:#$22iCK1">@firefox_help@</A>
-- <DT><A HREF="http://www.mozilla.com/@AB_CD@/firefox/customize/" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==" ID="rdf:#$32iCK1">@firefox_customize@</A>
-- <DT><A HREF="http://www.mozilla.com/@AB_CD@/firefox/community/" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==" ID="rdf:#$42iCK1">@firefox_community@</A>
-- <DT><A HREF="http://www.mozilla.com/@AB_CD@/about/" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==" ID="rdf:#$52iCK1">@firefox_about@</A>
-+ <DT><A HREF="https://parabolagnulinux.org/">Parabola GNU/Linux-libre</A>
-+ <DT><A HREF="https://parabolagnulinux.org/packages/">Parabola GNU/Linux-libre Packages</A>
-+ <DT><A HREF="https://wiki.parabolagnulinux.org/">Parabola GNU/Linux-libre Wiki</A>
-+ <DT><A HREF="https://labs.parabola.nu/">Parabola GNU/Linux-libre Labs</A>
-+ </DL><p>
-+ <DT><H3 ID="rdf:#$ZvPhC3">Free Software Foundation</H3>
-+ <DL><p>
-+ <DT><A HREF="http://www.fsf.org/">Free Software Foundation</A>
-+ <DT><A HREF="http://libreplanet.org/">LibrePlanet</A>
-+ <DT><A HREF="http://www.gnu.org/software/gnuzilla/addons.html">Free addons</A>
-+ <DT><A HREF="http://www.h-node.org/">h-node</A>
- </DL><p>
- </DL><p>
-diff -urN iceweasel-13.0.orig/browser/base/content/aboutHome.js iceweasel-13.0/browser/base/content/abouthome/aboutHome.js
---- mozilla-release.orig/browser/base/content/aboutHome.js 2012-06-01 09:03:47.000000000 -0300
-+++ mozilla-release/browser/base/content/aboutHome.js 2012-06-13 18:07:51.217531774 -0300
-@@ -37,104 +37,6 @@
- *
- * ***** END LICENSE BLOCK ***** */
-
--// If a definition requires additional params, check that the final search url
--// is handled correctly by the engine.
--const SEARCH_ENGINES = {
-- "Google": {
-- image: "data:image/png;base64," +
-- "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"
-- , params: "source=hp&channel=np"
-- }
--
--, "Яндекс":
-- {
-- image: "data:image/png;base64," +
-- "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"
-- }
--};
--
- // The process of adding a new default snippet involves:
- // * add a new entity to aboutHome.dtd
- // * add a <span/> for it in aboutHome.xhtml
-@@ -142,7 +44,7 @@
- // The <a/> part of the snippet will be linked to the corresponding url.
- const DEFAULT_SNIPPETS_URLS = [
- "http://www.mozilla.com/firefox/features/?WT.mc_ID=default1"
--, "https://addons.mozilla.org/firefox/?src=snippet&WT.mc_ID=default2"
-+, "http://www.gnu.org/software/gnuzilla/addons.html?src=snippet&WT.mc_ID=default2"
- ];
++more_plugins_label=
++more_plugins_url=about:blank
++pluginupdates_label=
++pluginupdates_url=about:blank
++plugindoc_label=
++plugindoc_url=about:blank
- const SNIPPETS_UPDATE_INTERVAL_MS = 86400000; // 1 Day.
diff --git a/libre/iceweasel-libre/Bug-756390-Make-the-Reset-Firefox-feature-more-gener.patch b/libre/iceweasel-libre/Bug-756390-Make-the-Reset-Firefox-feature-more-gener.patch
index 3e7149308..4a0507271 100644
--- a/libre/iceweasel-libre/Bug-756390-Make-the-Reset-Firefox-feature-more-gener.patch
+++ b/libre/iceweasel-libre/Bug-756390-Make-the-Reset-Firefox-feature-more-gener.patch
@@ -1,17 +1,21 @@
+From: Mike Hommey <mh@glandium.org>
+Date: Tue, 5 Jun 2012 08:57:06 +0200
+Subject: Bug 756390 - Make the "Reset Firefox" feature more generic
+
diff --git a/browser/components/migration/content/migration.js b/browser/components/migration/content/migration.js
-index ffb0c34..442a5ff 100644
+index 0e8ccf5..fa46c08 100644
--- a/browser/components/migration/content/migration.js
+++ b/browser/components/migration/content/migration.js
-@@ -314,7 +314,7 @@ var MigrationWizard = {
+@@ -249,7 +249,7 @@ var MigrationWizard = {
}
- var bundle = document.getElementById("brandBundle");
+ var brandBundle = document.getElementById("brandBundle");
- // These strings don't exist when not using official branding. If that's
+ // These strings may not exist when not using official branding. If that's
// the case, just skip this page.
try {
- var pageTitle = bundle.getString("homePageMigrationPageTitle");
-@@ -346,8 +346,8 @@ var MigrationWizard = {
+ var pageTitle = brandBundle.getString("homePageMigrationPageTitle");
+@@ -281,8 +281,8 @@ var MigrationWizard = {
case "chrome":
source = "sourceNameChrome";
break;
@@ -22,75 +26,107 @@ index ffb0c34..442a5ff 100644
break;
}
-@@ -357,8 +357,13 @@ var MigrationWizard = {
+@@ -292,7 +292,12 @@ var MigrationWizard = {
var oldHomePageURL = this._migrator.sourceHomePageURL;
if (oldHomePageURL && source) {
-- var bundle2 = document.getElementById("bundle");
-- var appName = bundle2.getString(source);
+- var appName = MigrationUtils.getLocalizedString(source);
+ var appName;
+ if (source == "brand") {
-+ appName = bundle.GetStringFromName("brandFullName");
++ appName = brandBundle.GetStringFromName("brandFullName");
+ } else {
-+ var bundle2 = document.getElementById("bundle");
-+ appName = bundle2.getString(source);
++ appName = MigrationUtils.getLocalizedString(source);
+ }
- var oldHomePageLabel = bundle.getFormattedString("homePageImport",
- [appName]);
+ var oldHomePageLabel =
+ brandBundle.getFormattedString("homePageImport", [appName]);
var oldHomePage = document.getElementById("oldHomePage");
diff --git a/browser/components/migration/content/migration.xul b/browser/components/migration/content/migration.xul
-index f8653b1..f3ac62a 100644
+index 4bcc1d9..c4db956 100644
--- a/browser/components/migration/content/migration.xul
+++ b/browser/components/migration/content/migration.xul
-@@ -76,7 +76,7 @@
- #endif
- #endif
+@@ -74,7 +74,7 @@
+ #elifdef XP_UNIX
<radio id="chrome" label="&importFromChrome.label;" accesskey="&importFromChrome.accesskey;"/>
+ #endif
- <radio id="firefox" label="&importFromFirefox.label;" accesskey="&importFromFirefox.accesskey;"/>
+ <radio id="self" hidden="true"/>
- <radio id="fromfile" label="&importFromHTMLFile.label;" accesskey="&importFromHTMLFile.accesskey;" hidden="true"/>
<radio id="nothing" label="&importFromNothing.label;" accesskey="&importFromNothing.accesskey;" hidden="true"/>
</radiogroup>
+ <label id="noSources" hidden="true">&noMigrationSources.label;</label>
diff --git a/browser/components/migration/src/BrowserProfileMigrators.manifest b/browser/components/migration/src/BrowserProfileMigrators.manifest
-index f49e481..e490ddf 100644
+index 527771f..782b38f 100644
--- a/browser/components/migration/src/BrowserProfileMigrators.manifest
+++ b/browser/components/migration/src/BrowserProfileMigrators.manifest
-@@ -3,4 +3,4 @@ contract @mozilla.org/toolkit/profile-migrator;1 {6F8BB968-C14F-4D6F-9733-6C6737
+@@ -3,7 +3,7 @@ contract @mozilla.org/toolkit/profile-migrator;1 {6F8BB968-C14F-4D6F-9733-6C6737
component {4cec1de4-1671-4fc3-a53e-6c539dc77a26} ChromeProfileMigrator.js
contract @mozilla.org/profile/migrator;1?app=browser&type=chrome {4cec1de4-1671-4fc3-a53e-6c539dc77a26}
component {91185366-ba97-4438-acba-48deaca63386} FirefoxProfileMigrator.js
-contract @mozilla.org/profile/migrator;1?app=browser&type=firefox {91185366-ba97-4438-acba-48deaca63386}
+contract @mozilla.org/profile/migrator;1?app=browser&type=self {91185366-ba97-4438-acba-48deaca63386}
+ component {3d2532e3-4932-4774-b7ba-968f5899d3a4} IEProfileMigrator.js
+ contract @mozilla.org/profile/migrator;1?app=browser&type=ie {3d2532e3-4932-4774-b7ba-968f5899d3a4}
+ component {4b609ecf-60b2-4655-9df4-dc149e474da1} SafariProfileMigrator.js
diff --git a/browser/components/migration/src/FirefoxProfileMigrator.js b/browser/components/migration/src/FirefoxProfileMigrator.js
-index 7b4a6e4..add5bc4 100644
+index 8f14f49..8dc175d 100644
--- a/browser/components/migration/src/FirefoxProfileMigrator.js
+++ b/browser/components/migration/src/FirefoxProfileMigrator.js
-@@ -448,7 +448,7 @@ FirefoxProfileMigrator.prototype = {
- ]),
+@@ -88,7 +88,7 @@ Object.defineProperty(FirefoxProfileMigrator.prototype, "startupOnlyMigrator", {
- classDescription: "Firefox Profile Migrator",
-- contractID: "@mozilla.org/profile/migrator;1?app=browser&type=firefox",
-+ contractID: "@mozilla.org/profile/migrator;1?app=browser&type=self",
- classID: Components.ID("{91185366-ba97-4438-acba-48deaca63386}")
- };
-diff --git a/browser/components/migration/src/ProfileMigrator.js b/browser/components/migration/src/ProfileMigrator.js
-index ea66675..fe4df10 100644
---- a/browser/components/migration/src/ProfileMigrator.js
-+++ b/browser/components/migration/src/ProfileMigrator.js
-@@ -51,6 +51,10 @@ ProfileMigrator.prototype = {
- params);
+ FirefoxProfileMigrator.prototype.classDescription = "Firefox Profile Migrator";
+-FirefoxProfileMigrator.prototype.contractID = "@mozilla.org/profile/migrator;1?app=browser&type=firefox";
++FirefoxProfileMigrator.prototype.contractID = "@mozilla.org/profile/migrator;1?app=browser&type=self";
+ FirefoxProfileMigrator.prototype.classID = Components.ID("{91185366-ba97-4438-acba-48deaca63386}");
+
+ const NSGetFactory = XPCOMUtils.generateNSGetFactory([FirefoxProfileMigrator]);
+diff --git a/browser/components/migration/src/MigrationUtils.jsm b/browser/components/migration/src/MigrationUtils.jsm
+index 9460e6d..8db6827 100644
+--- a/browser/components/migration/src/MigrationUtils.jsm
++++ b/browser/components/migration/src/MigrationUtils.jsm
+@@ -403,11 +403,6 @@ let MigrationUtils = Object.freeze({
+ * @see nsIStringBundle
+ */
+ getLocalizedString: function MU_getLocalizedString(aKey, aReplacements) {
+- const OVERRIDES = {
+- "4_firefox": "4_firefox_history_and_bookmarks"
+- };
+- aKey = OVERRIDES[aKey] || aKey;
+-
+ if (aReplacements === undefined)
+ return getMigrationBundle().GetStringFromName(aKey);
+ return getMigrationBundle().formatStringFromName(
+@@ -622,6 +617,17 @@ let MigrationUtils = Object.freeze({
},
-+ canMigrate: function PM__canMigrate(aMigratorKey) {
+ /**
++ * Returns whether a given migration type is supported.
++ *
++ * @param aKey Migrator key
++ * @returns whether the migrator key is supported.
++ */
++ canMigrate:
++ function MU_canMigrate(aMigratorKey) {
+ return "@mozilla.org/profile/migrator;1?app=browser&type=" + aMigratorKey in Cc;
+ },
+
- _toCString: function PM__toCString(aStr) {
- let cstr = Cc["@mozilla.org/supports-cstring;1"].
- createInstance(Ci.nsISupportsCString);
++ /**
+ * Cleans up references to migrators and nsIProfileInstance instances.
+ */
+ finishMigration: function MU_finishMigration() {
+diff --git a/browser/components/migration/src/ProfileMigrator.js b/browser/components/migration/src/ProfileMigrator.js
+index 744f117..59e5a4c 100644
+--- a/browser/components/migration/src/ProfileMigrator.js
++++ b/browser/components/migration/src/ProfileMigrator.js
+@@ -12,6 +12,7 @@ function ProfileMigrator() {
+
+ ProfileMigrator.prototype = {
+ migrate: MigrationUtils.startupMigration.bind(MigrationUtils),
++ canMigrate: MigrationUtils.canMigrate.bind(MigrationUtils),
+ QueryInterface: XPCOMUtils.generateQI([Components.interfaces.nsIProfileMigrator]),
+ classDescription: "Profile Migrator",
+ contractID: "@mozilla.org/toolkit/profile-migrator;1",
diff --git a/browser/locales/en-US/chrome/browser/migration/migration.dtd b/browser/locales/en-US/chrome/browser/migration/migration.dtd
-index 86e9d0b..8df7864 100644
+index 0b4b776..ce26fbd 100644
--- a/browser/locales/en-US/chrome/browser/migration/migration.dtd
+++ b/browser/locales/en-US/chrome/browser/migration/migration.dtd
@@ -13,8 +13,6 @@
@@ -99,11 +135,11 @@ index 86e9d0b..8df7864 100644
<!ENTITY importFromChrome.accesskey "C">
-<!ENTITY importFromFirefox.label "Firefox">
-<!ENTITY importFromFirefox.accesskey "X">
- <!ENTITY importFromHTMLFile.label "From an HTML File">
- <!ENTITY importFromHTMLFile.accesskey "F">
+
+ <!ENTITY noMigrationSources.label "No programs that contain bookmarks, history or password data could be found.">
diff --git a/browser/locales/en-US/chrome/browser/migration/migration.properties b/browser/locales/en-US/chrome/browser/migration/migration.properties
-index 495ed78..0272654 100644
+index f522a66..be26460 100644
--- a/browser/locales/en-US/chrome/browser/migration/migration.properties
+++ b/browser/locales/en-US/chrome/browser/migration/migration.properties
@@ -4,7 +4,6 @@ profileName_format=%S %S
@@ -113,8 +149,8 @@ index 495ed78..0272654 100644
-sourceNameFirefox=Mozilla Firefox
importedBookmarksFolder=From %S
- importedSearchURLsFolder=Keyword Searches (From %S)
-@@ -21,27 +20,27 @@ importedSafariBookmarks=From Safari
+
+@@ -18,29 +17,29 @@ importedSafariReadingList=Reading List (From Safari)
2_ie=Cookies
2_safari=Cookies
2_chrome=Cookies
@@ -124,8 +160,8 @@ index 495ed78..0272654 100644
4_ie=Browsing History
4_safari=Browsing History
4_chrome=Browsing History
--4_firefox=Browsing History
-+4_self=Browsing History
+-4_firefox_history_and_bookmarks=Browsing History and Bookmarks
++4_self=Browsing History and Bookmarks
8_ie=Saved Form History
8_safari=Saved Form History
@@ -147,11 +183,14 @@ index 495ed78..0272654 100644
64_ie=Other Data
64_safari=Other Data
+ 64_chrome=Other Data
+-64_firefox=Bookmarks Backups
++64_self=Bookmarks Backups
diff --git a/toolkit/content/aboutSupport.js b/toolkit/content/aboutSupport.js
-index c86d80c..ff1ccfe 100644
+index 957d4d8..1af3629 100644
--- a/toolkit/content/aboutSupport.js
+++ b/toolkit/content/aboutSupport.js
-@@ -608,13 +608,13 @@ function populateResetBox() {
+@@ -616,13 +616,13 @@ function populateResetBox() {
.getService(Ci.nsIToolkitProfileService);
let currentProfileDir = Services.dirsvc.get("ProfD", Ci.nsIFile);
@@ -169,46 +208,43 @@ index c86d80c..ff1ccfe 100644
return;
document.getElementById("reset-box").style.visibility = "visible";
} catch (e) {
-diff --git a/toolkit/content/jar.mn b/toolkit/content/jar.mn
-index 6f0d2d6..da7342b 100644
---- a/toolkit/content/jar.mn
-+++ b/toolkit/content/jar.mn
-@@ -38,7 +38,7 @@ toolkit.jar:
- + content/global/mozilla.xhtml (mozilla.xhtml)
- *+ content/global/nsDragAndDrop.js (nsDragAndDrop.js)
- content/global/resetProfile.css (resetProfile.css)
--* content/global/resetProfile.js (resetProfile.js)
-+ content/global/resetProfile.js (resetProfile.js)
- * content/global/resetProfile.xul (resetProfile.xul)
- * content/global/treeUtils.js (treeUtils.js)
- *+ content/global/viewZoomOverlay.js (viewZoomOverlay.js)
diff --git a/toolkit/content/resetProfile.js b/toolkit/content/resetProfile.js
-index 975a9ed..d8e46b1 100644
+index 84de6cd..3126da6 100644
--- a/toolkit/content/resetProfile.js
+++ b/toolkit/content/resetProfile.js
-@@ -6,12 +6,10 @@ Components.utils.import("resource://gre/modules/Services.jsm");
+@@ -6,6 +6,7 @@ Components.utils.import("resource://gre/modules/Services.jsm");
// based on onImportItemsPageShow from migration.js
function onResetProfileLoad() {
--#expand const MOZ_BUILD_APP = "__MOZ_BUILD_APP__";
--#expand const MOZ_APP_NAME = "__MOZ_APP_NAME__";
- const MAX_MIGRATED_TYPES = 16;
++<<<<<<< HEAD
+ #expand const MOZ_BUILD_APP = "__MOZ_BUILD_APP__";
+ #expand const MOZ_APP_NAME = "__MOZ_APP_NAME__";
+
+@@ -16,16 +17,22 @@ function onResetProfileLoad() {
+ "8_" + MOZ_APP_NAME, // Form History
+ "2_" + MOZ_APP_NAME, // Cookies
+ ];
++=======
++ Components.utils.import("resource:///modules/MigrationUtils.jsm");
++ const MAX_MIGRATED_TYPES = 16;
++>>>>>>> Bug 756390 - Make the "Reset Firefox" feature more generic
var migratedItems = document.getElementById("migratedItems");
- var bundle = Services.strings.createBundle("chrome://" + MOZ_BUILD_APP +
-+ var bundle = Services.strings.createBundle("chrome://browser" +
- "/locale/migration/migration.properties");
+- "/locale/migration/migration.properties");
- // Loop over possible data to migrate to give the user a list of what will be preserved. This
-@@ -21,7 +19,7 @@ function onResetProfileLoad() {
- var itemID = Math.pow(2, i);
+ // Loop over possible data to migrate to give the user a list of what will be preserved.
+ for (var itemStringName of MIGRATED_TYPES) {
try {
var checkbox = document.createElement("label");
-- checkbox.setAttribute("value", bundle.GetStringFromName(itemID + "_" + MOZ_APP_NAME));
-+ checkbox.setAttribute("value", bundle.GetStringFromName(itemID + "_self"));
++<<<<<<< HEAD
+ checkbox.setAttribute("value", bundle.GetStringFromName(itemStringName));
++=======
++ checkbox.setAttribute("value", MigrationUtils.getLocalizedString(itemID + "_self"));
++>>>>>>> Bug 756390 - Make the "Reset Firefox" feature more generic
migratedItems.appendChild(checkbox);
} catch (x) {
- // Catch exceptions when the string for a data type doesn't exist because it's not migrated
+ // Catch exceptions when the string for a data type doesn't exist.
diff --git a/toolkit/profile/nsIProfileMigrator.idl b/toolkit/profile/nsIProfileMigrator.idl
index e941336..5b264af 100644
--- a/toolkit/profile/nsIProfileMigrator.idl
@@ -238,15 +274,15 @@ index e941336..5b264af 100644
%{C++
diff --git a/toolkit/xre/nsAppRunner.cpp b/toolkit/xre/nsAppRunner.cpp
-index 32eef5c..dbe1580 100644
+index d2db0e2..45a4b0d 100644
--- a/toolkit/xre/nsAppRunner.cpp
+++ b/toolkit/xre/nsAppRunner.cpp
-@@ -3561,7 +3561,7 @@ XRE_main(int argc, char* argv[], const nsXREAppData* aAppData)
- if (gDoProfileReset) {
- // Automatically migrate from the current application if we just
- // reset the profile.
-- aKey = MOZ_APP_NAME;
-+ aKey = "self";
- pm->Migrate(&dirProvider, aKey);
- // Set the new profile as the default after migration.
- rv = SetCurrentProfileAsDefault(profileSvc, profD);
+@@ -3642,7 +3642,7 @@ XREMain::XRE_mainRun()
+ if (gDoProfileReset) {
+ // Automatically migrate from the current application if we just
+ // reset the profile.
+- aKey = MOZ_APP_NAME;
++ aKey = "self";
+ pm->Migrate(&mDirProvider, aKey);
+ // Set the new profile as the default after migration.
+ rv = SetCurrentProfileAsDefault(mProfileSvc, mProfD);
diff --git a/libre/iceweasel-libre/PKGBUILD b/libre/iceweasel-libre/PKGBUILD
index a54e9d948..fff9a3a21 100644
--- a/libre/iceweasel-libre/PKGBUILD
+++ b/libre/iceweasel-libre/PKGBUILD
@@ -14,8 +14,8 @@ _pgo=false
# We're getting this from Debian Sid
_debname=iceweasel
-_debver=13.0.1
-_debrel=2
+_debver=14.0.1
+_debrel=1
_debrepo=http://ftp.debian.org/debian/pool/main/
debfile() { echo $@|sed -r 's@(.).*@\1/&/&@'; }
@@ -50,16 +50,18 @@ source=("${_debrepo}/`debfile ${_debname}`_${_debver}.orig.tar.bz2"
libre.patch
iceweasel-install-dir.patch
vendor.js
+ shared-libs.patch
Bug-756390-Make-the-Reset-Firefox-feature-more-gener.patch)
-md5sums=('9eb7668e4a5b5be63ccf4d43c212d011'
- 'c5eb6357cecd0d83e75ef37a9dcf3683'
+md5sums=('8e4f3987d37c8e73b168948d0771b872'
+ 'fca50bc0a4327c1389349be7939c14bd'
'eab149c1994ab14392e55af3abb08e80'
'ac29b01c189f20abae2f3eef1618ffc0'
'a485a2b5dc544a8a2bd40c985d2e5813'
- '54bd934ac23839601c7d23a60fbefe6a'
+ 'ed909b5b61f36a81a71989b7daeb2545'
'e529742c0a425648087bc3ce537fe4c5'
'0d053487907de4376d67d8f499c5502b'
- 'efda47526ba76ef926b236bf2cda2456')
+ '52e52f840a49eb1d14be1c0065b03a93'
+ '88350bc611361a1ff635f5c960c6d6ee')
if [ "$_pkgname" != "$pkgname" ]; then
provides+=("$_pkgname=$pkgver")
@@ -88,6 +90,7 @@ build() {
patch -Np1 -i "$srcdir/iceweasel-install-dir.patch" # install to /usr/lib/$_pkgname
patch -Np1 -i "$srcdir/xulrunner-copy-stub.patch" # small fix
patch -Np1 -i "$srcdir/libre.patch"
+ patch -Np1 -i "$srcdir/shared-libs.patch"
cp "$srcdir/mozconfig" .mozconfig # Load our build config, disable SafeSearch
diff --git a/libre/iceweasel-libre/libre.patch b/libre/iceweasel-libre/libre.patch
index 39ea86c05..b136cb4ad 100644
--- a/libre/iceweasel-libre/libre.patch
+++ b/libre/iceweasel-libre/libre.patch
@@ -63,10 +63,10 @@ diff -urN iceweasel-13.0.orig/browser/app/profile/firefox.js iceweasel-13.0/brow
// by default we show an infobar message when pages require plugins the user has not installed, or are outdated
pref("plugins.hide_infobar_for_missing_plugin", false);
-diff -urN iceweasel-13.0.orig/browser/locales/en-US/chrome/browser-region/region.properties iceweasel-13.0/browser/locales/en-US/chrome/browser-region/region.properties
+diff -urN iceweasel-14.0.1.orig/browser/locales/en-US/chrome/browser-region/region.properties iceweasel-14.0.1/browser/locales/en-US/chrome/browser-region/region.properties
--- mozilla-release.orig/browser/locales/en-US/chrome/browser-region/region.properties 2012-06-01 09:03:48.000000000 -0300
+++ mozilla-release/browser/locales/en-US/chrome/browser-region/region.properties 2012-06-15 02:17:00.978636665 -0300
-@@ -1,23 +1,23 @@
+@@ -1,23 +1,21 @@
# Default search engine
-browser.search.defaultenginename=Google
+browser.search.defaultenginename=Duck Duck Go (Lite)
@@ -85,38 +85,34 @@ diff -urN iceweasel-13.0.orig/browser/locales/en-US/chrome/browser-region/region
-browser.contentHandlers.types.0.uri=http://fusion.google.com/add?feedurl=%s
-browser.contentHandlers.types.1.title=My Yahoo!
-browser.contentHandlers.types.1.uri=http://add.my.yahoo.com/rss?url=%s
-+browser.contentHandlers.types.0.title=
-+browser.contentHandlers.types.0.uri=about:blank
-+browser.contentHandlers.types.1.title=
-+browser.contentHandlers.types.1.uri=about:blank
++#browser.contentHandlers.types.0.title=
++#browser.contentHandlers.types.0.uri=about:blank
# URL for site-specific search engines
# TRANSLATION NOTE: {moz:domain} and {searchTerms} are placeholders for the site
# to be searched and the user's search query. Place them in the appropriate location
# for your locale's URL but do not translate them.
--browser.search.siteSearchURL=http://www.google.com/search?ie=UTF-8&oe=UTF-8&sourceid=navclient&q=site%3A{moz:domain}+{searchTerms}
+-browser.search.siteSearchURL=https://www.google.com/search?ie=UTF-8&oe=UTF-8&sourceid=navclient&q=site%3A{moz:domain}+{searchTerms}
+browser.search.siteSearchURL=https://duckduckgo.com/lite/?q=site%3A{moz:domain}+{searchTerms}
# increment this number when anything gets changed in the list below. This will
# cause Firefox to re-read these prefs and inject any new handlers into the
-@@ -27,19 +27,19 @@
+@@ -27,19 +25,17 @@
gecko.handlerService.defaultHandlersVersion=3
# The default set of protocol handlers for webcal:
-gecko.handlerService.schemes.webcal.0.name=30 Boxes
-gecko.handlerService.schemes.webcal.0.uriTemplate=http://30boxes.com/external/widget?refer=ff&url=%s
-+gecko.handlerService.schemes.webcal.0.name=
-+gecko.handlerService.schemes.webcal.0.uriTemplate=about:blank
++#gecko.handlerService.schemes.webcal.0.name=
++#gecko.handlerService.schemes.webcal.0.uriTemplate=about:blank
# The default set of protocol handlers for mailto:
-gecko.handlerService.schemes.mailto.0.name=Yahoo! Mail
-gecko.handlerService.schemes.mailto.0.uriTemplate=http://compose.mail.yahoo.com/?To=%s
-gecko.handlerService.schemes.mailto.1.name=Gmail
-gecko.handlerService.schemes.mailto.1.uriTemplate=https://mail.google.com/mail/?extsrc=mailto&url=%s
-+gecko.handlerService.schemes.mailto.0.name=
-+gecko.handlerService.schemes.mailto.0.uriTemplate=about:blank
-+gecko.handlerService.schemes.mailto.1.name=
-+gecko.handlerService.schemes.mailto.1.uriTemplate=about:blank
++#gecko.handlerService.schemes.mailto.0.name=
++#gecko.handlerService.schemes.mailto.0.uriTemplate=about:blank
# The default set of protocol handlers for irc:
-gecko.handlerService.schemes.irc.0.name=Mibbit
@@ -131,7 +127,7 @@ diff -urN iceweasel-13.0.orig/browser/locales/en-US/chrome/browser-region/region
+gecko.handlerService.schemes.ircs.0.uriTemplate=https://webchat.freenode.net/
diff -urN iceweasel-13.0.orig/build/pgo/blueprint/elements.html iceweasel-13.0/build/pgo/blueprint/elements.html
--- mozilla-build.orig/build/pgo/blueprint/elements.html 2012-06-01 09:03:49.000000000 -0300
-+++ mozilla-build/build/pgo/blueprint/elements.html 2012-06-05 20:37:22.059133787 -0300
++++ mozilla-build/build/pgo/blueprint/elements.html 2012-06-05 20:37:22.059133787 -0300
@@ -143,7 +143,7 @@
</p>
<p>
@@ -152,6 +148,39 @@ diff -urN iceweasel-13.0.orig/dom/ipc/test.xul iceweasel-13.0/dom/ipc/test.xul
+ <browser type="content" src="https://duckduckgo.com/lite" flex="1" id="page" remote="true"/>
<label id="messageLog" value="" crop="center"/>
</window>
+diff -Naur iceweasel-14.0.1.orig/mobile/android/app/mobile.js iceweasel-14.0.1.orig/mobile/android/app/mobile.js
+--- mozilla-build.orig/mobile/android/app/mobile.js 2012-07-12 14:27:37.000000000 -0300
++++ mozilla-build/mobile/android/app/mobile.js 2012-07-17 22:14:47.293560718 -0300
+@@ -226,13 +226,13 @@
+ /* preferences for the Get Add-ons pane */
+ pref("extensions.getAddons.cache.enabled", true);
+ pref("extensions.getAddons.maxResults", 15);
+-pref("extensions.getAddons.recommended.browseURL", "https://addons.mozilla.org/%LOCALE%/android/recommended/");
+-pref("extensions.getAddons.recommended.url", "https://services.addons.mozilla.org/%LOCALE%/android/api/%API_VERSION%/list/featured/all/%MAX_RESULTS%/%OS%/%VERSION%");
+-pref("extensions.getAddons.search.browseURL", "https://addons.mozilla.org/%LOCALE%/android/search?q=%TERMS%&platform=%OS%&appver=%VERSION%");
+-pref("extensions.getAddons.search.url", "https://services.addons.mozilla.org/%LOCALE%/android/api/%API_VERSION%/search/%TERMS%/all/%MAX_RESULTS%/%OS%/%VERSION%/%COMPATIBILITY_MODE%");
+-pref("extensions.getAddons.browseAddons", "https://addons.mozilla.org/%LOCALE%/android/");
+-pref("extensions.getAddons.get.url", "https://services.addons.mozilla.org/%LOCALE%/android/api/%API_VERSION%/search/guid:%IDS%?src=mobile&appOS=%OS%&appVersion=%VERSION%");
+-pref("extensions.getAddons.getWithPerformance.url", "https://services.addons.mozilla.org/%LOCALE%/android/api/%API_VERSION%/search/guid:%IDS%?src=mobile&appOS=%OS%&appVersion=%VERSION%&tMain=%TIME_MAIN%&tFirstPaint=%TIME_FIRST_PAINT%&tSessionRestored=%TIME_SESSION_RESTORED%");
++pref("extensions.getAddons.recommended.browseURL", "http://www.gnu.org/s/gnuzilla/addons.html");
++pref("extensions.getAddons.recommended.url", "http://www.gnu.org/s/gnuzilla/addons.html");
++pref("extensions.getAddons.search.browseURL", "http://www.gnu.org/s/gnuzilla/addons.html");
++pref("extensions.getAddons.search.url", "http://www.gnu.org/s/gnuzilla/addons.html");
++pref("extensions.getAddons.browseAddons", "http://www.gnu.org/s/gnuzilla/addons.html");
++pref("extensions.getAddons.get.url", "http://www.gnu.org/s/gnuzilla/addons.html");
++pref("extensions.getAddons.getWithPerformance.url", "http://www.gnu.org/s/gnuzilla/addons.html");
+
+ /* preference for the locale picker */
+ pref("extensions.getLocales.get.url", "");
+@@ -259,7 +259,7 @@
+ pref("dom.disable_window_find", true);
+
+ pref("keyword.enabled", true);
+-pref("keyword.URL", "");
++pref("keyword.URL", "https://duckduckgo.com/lite/?q=");
+
+ pref("accessibility.typeaheadfind", false);
+ pref("accessibility.typeaheadfind.timeout", 5000);
diff -urN iceweasel-13.0.orig/layout/ipc/test-ipcbrowser.xul iceweasel-13.0/layout/ipc/test-ipcbrowser.xul
--- mozilla-build.orig/layout/ipc/test-ipcbrowser.xul 2012-06-01 09:04:06.000000000 -0300
+++ mozilla-build/layout/ipc/test-ipcbrowser.xul 2012-06-05 20:44:00.714006926 -0300
@@ -163,10 +192,10 @@ diff -urN iceweasel-13.0.orig/layout/ipc/test-ipcbrowser.xul iceweasel-13.0/layo
+ <browser type="content" src="https://duckduckgo.com/lite" flex="1" id="content"
remote="true"/>
</window>
-diff -urN iceweasel-13.0.orig/mobile/xul/app/mobile.js iceweasel-13.0/mobile/xul/app/mobile.js
+diff -urN iceweasel-14.0.1.orig/mobile/xul/app/mobile.js iceweasel-14.0.1/mobile/xul/app/mobile.js
--- mozilla-build.orig/mobile/xul/app/mobile.js 2012-06-01 09:04:14.000000000 -0300
+++ mozilla-build/mobile/xul/app/mobile.js 2012-06-05 20:48:20.193241600 -0300
-@@ -221,13 +221,12 @@
+@@ -221,13 +221,13 @@
/* preferences for the Get Add-ons pane */
pref("extensions.getAddons.cache.enabled", true);
pref("extensions.getAddons.maxResults", 15);
@@ -183,14 +212,15 @@ diff -urN iceweasel-13.0.orig/mobile/xul/app/mobile.js iceweasel-13.0/mobile/xul
+pref("extensions.getAddons.search.url", "http://www.gnu.org/s/gnuzilla/addons.html");
+pref("extensions.getAddons.browseAddons", "http://www.gnu.org/s/gnuzilla/addons.html");
+pref("extensions.getAddons.get.url", "http://www.gnu.org/s/gnuzilla/addons.html");
++pref("extensions.getAddons.getWithPerformance.url", "http://www.gnu.org/s/gnuzilla/addons.html");
/* preference for the locale picker */
pref("extensions.getLocales.get.url", "");
-@@ -247,7 +246,7 @@
+@@ -247,7 +247,7 @@
pref("dom.disable_window_open_dialog_feature", true);
pref("keyword.enabled", true);
--pref("keyword.URL", "http://www.google.com/m?ie=UTF-8&oe=UTF-8&sourceid=navclient&gfns=1&q=");
+-pref("keyword.URL", "https://www.google.com/m?ie=UTF-8&oe=UTF-8&sourceid=navclient&q=");
+pref("keyword.URL", "https://duckduckgo.com/lite/?q=");
pref("accessibility.typeaheadfind", false);
@@ -198,7 +228,7 @@ diff -urN iceweasel-13.0.orig/mobile/xul/app/mobile.js iceweasel-13.0/mobile/xul
diff -urN iceweasel-13.0.orig/mobile/locales/en-US/chrome/region.properties iceweasel-13.0/mobile/locales/en-US/chrome/region.properties
--- mozilla-release.orig/mobile/locales/en-US/chrome/region.properties 2012-06-01 09:04:14.000000000 -0300
+++ mozilla-release/mobile/locales/en-US/chrome/region.properties 2012-06-15 02:17:43.446130868 -0300
-@@ -1,18 +1,18 @@
+@@ -1,18 +1,16 @@
# Default search engine
-browser.search.defaultenginename=Google
+browser.search.defaultenginename=Duck Duck Go (Lite)
@@ -213,43 +243,40 @@ diff -urN iceweasel-13.0.orig/mobile/locales/en-US/chrome/region.properties icew
-browser.contentHandlers.types.0.uri=http://add.my.yahoo.com/rss?url=%s
-browser.contentHandlers.types.1.title=Google
-browser.contentHandlers.types.1.uri=http://fusion.google.com/add?feedurl=%s
-+browser.contentHandlers.types.0.title=
-+browser.contentHandlers.types.0.uri=about:blank
-+browser.contentHandlers.types.1.title=
-+browser.contentHandlers.types.1.uri=about:blank
++#browser.contentHandlers.types.0.title=
++#browser.contentHandlers.types.0.uri=about:blank
# Keyword URL (for location bar searches)
--keyword.URL=http://www.google.com/search?ie=UTF-8&oe=UTF-8&sourceid=navclient&gfns=1&q=
+-keyword.URL=https://www.google.com/search?ie=UTF-8&oe=UTF-8&sourceid=navclient&gfns=1&q=
+keyword.URL=https://duckduckgo.com/lite/?q=site%3A{moz:domain}+{searchTerms}
# increment this number when anything gets changed in the list below. This will
# cause Firefox to re-read these prefs and inject any new handlers into the
-@@ -22,11 +22,11 @@
+@@ -22,11 +20,9 @@
gecko.handlerService.defaultHandlersVersion=2
# The default set of protocol handlers for webcal:
-gecko.handlerService.schemes.webcal.0.name=30 Boxes
-gecko.handlerService.schemes.webcal.0.uriTemplate=http://30boxes.com/external/widget?refer=ff&url=%s
-+gecko.handlerService.schemes.webcal.0.name=
-+gecko.handlerService.schemes.webcal.0.uriTemplate=about:blank
++#gecko.handlerService.schemes.webcal.0.name=
++#gecko.handlerService.schemes.webcal.0.uriTemplate=about:blank
# The default set of protocol handlers for mailto:
-gecko.handlerService.schemes.mailto.0.name=Yahoo! Mail
-gecko.handlerService.schemes.mailto.0.uriTemplate=http://compose.mail.yahoo.com/?To=%s
-gecko.handlerService.schemes.mailto.1.name=Gmail
-gecko.handlerService.schemes.mailto.1.uriTemplate=https://mail.google.com/mail/?extsrc=mailto&url=%s
-+gecko.handlerService.schemes.mailto.0.name=
-+gecko.handlerService.schemes.mailto.0.uriTemplate=about:blank
-+gecko.handlerService.schemes.mailto.1.name=
-+gecko.handlerService.schemes.mailto.1.uriTemplate=about:blank
-diff -urN iceweasel-13.0.orig/modules/libpref/src/init/all.js iceweasel-13.0/modules/libpref/src/init/all.js
++#gecko.handlerService.schemes.mailto.0.name=
++#gecko.handlerService.schemes.mailto.0.uriTemplate=about:blank
+
+diff -urN iceweasel-14.0.1.orig/modules/libpref/src/init/all.js iceweasel-14.0.1/modules/libpref/src/init/all.js
--- mozilla-build.orig/modules/libpref/src/init/all.js 2012-06-01 09:04:16.000000000 -0300
+++ mozilla-build/modules/libpref/src/init/all.js 2012-06-05 20:55:41.569045759 -0300
@@ -47,7 +47,7 @@
// SYNTAX HINTS: dashes are delimiters. Use underscores instead.
// The first character after a period must be alphabetic.
--pref("keyword.URL", "http://www.google.com/search?ie=UTF-8&oe=utf-8&q=");
+-pref("keyword.URL", "https://www.google.com/search?ie=UTF-8&oe=utf-8&q=");
+pref("keyword.URL", "https://duckduckgo.com/lite/?q=");
pref("keyword.enabled", false);
pref("general.useragent.locale", "chrome://global/locale/intl.properties");
@@ -267,14 +294,14 @@ diff -urN iceweasel-13.0.orig/toolkit/locales/en-US/chrome/global-region/region.
-pluginupdates_url=http://www.mozilla.com/plugincheck/
-plugindoc_label=plugindoc.mozdev.org
-plugindoc_url=http://plugindoc.mozdev.org/
-+more_plugins_label=gnuzilla.gnu.org
-+more_plugins_url=http://www.gnu.org/s/gnuzilla/addons.html
-+pluginupdates_label=gnuzilla.gnu.org
-+pluginupdates_url=http://www.gnu.org/s/gnuzilla/addons.html
-+plugindoc_label=gnuzilla.gnu.org
-+plugindoc_url=http://www.gnu.org/s/gnuzilla/addons.html
-
-diff -urN iceweasel-13.0.orig/browser/locales/generic/profile/bookmarks.html.in iceweasel-13.0/browser/locales/generic/profile/bookmarks.html.in
++more_plugins_label=
++more_plugins_url=about:blank
++pluginupdates_label=
++pluginupdates_url=about:blank
++plugindoc_label=
++plugindoc_url=about:blank
+
+diff -urN iceweasel-14.0.1.orig/browser/locales/generic/profile/bookmarks.html.in iceweasel-14.0.1/browser/locales/generic/profile/bookmarks.html.in
--- mozilla-release.orig/browser/locales/generic/profile/bookmarks.html.in 2012-06-01 09:03:48.000000000 -0300
+++ mozilla-release/browser/locales/generic/profile/bookmarks.html.in 2012-06-15 22:54:08.446274144 -0300
@@ -11,13 +11,20 @@
@@ -282,7 +309,7 @@ diff -urN iceweasel-13.0.orig/browser/locales/generic/profile/bookmarks.html.in
<DD>@bookmarks_toolbarfolder_description@
<DL><p>
- <DT><A HREF="http://www.mozilla.com/@AB_CD@/firefox/central/" ID="rdf:#$GvPhC3">@getting_started@</A>
-+ <DT><A HREF="https://parabolagnulinux.org/" ID="rdf:#$GvPhC3">Parabola GNU/Linux-libre</A>
++ <DT><A HREF="https://parabolagnulinux.org/" ICON="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AihUrGP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AIcXLSJvFCcn////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AbRIkcP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGwTI0JWEBtB////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wCAAAACVQ8crP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AFYQHJI9ChRL////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBlKzZHPQoUzgAAAAH///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AknV8I0sdJv8kBgxU////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AMTExA1uTlX1JAYLyf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wC5ubkLhG1x6CQGDP0PAAARzJmZBf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AxsbGCZB+g/QkBgz/DQMDUdu2tgfMn5koxo2NOsxmmQX///8A////AP///wD///8A////AP///wD///8A////AJ2JjX+NeX3/JAYM/wwCA5T///8A////AL+AgAi/foFfuG51l7JgaXCvY3E2/4CAAv///wD///8A////AJlveHOzqqv6UCUt/yQGDP8MAgTW////AP///wD///8A////AKqAgAawXmhnqk9b36VNW/KjT13mqGh16Kl+hvCbdHz/YyYx/z0KFP8kBgz/DAIE7f///wD///8A////AP///wD///8A////AJlmZgWkQU5inDFD0ZUhNv+FFyz/bRMk/1UPHP89ChT/JAYM/wwCA9v///8A////AP///wD///8A////AP///wD///8A////AP///wCTIDMohRYtfW0TJMBVDxzQPQoU3SUGDcoMBARA//8AAP//AAD//wAA//8AAP/3AAD/9wAA//sAAP/7AAD/+QAA//kAAP/5AAD/+AAA9/AAAPwAAAD/AAAA/+EAAA%3D%3D" ID="rdf:#$GvPhC3">Parabola GNU/Linux-libre</A>
</DL><p>
- <DT><H3 ID="rdf:#$ZvPhC3">@firefox_heading@</H3>
+ <DT><H3 ID="rdf:#$YvPhC3">Parabola GNU/Linux-libre</H3>
@@ -291,31 +318,29 @@ diff -urN iceweasel-13.0.orig/browser/locales/generic/profile/bookmarks.html.in
- <DT><A HREF="http://www.mozilla.com/@AB_CD@/firefox/customize/" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==" ID="rdf:#$32iCK1">@firefox_customize@</A>
- <DT><A HREF="http://www.mozilla.com/@AB_CD@/firefox/community/" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==" ID="rdf:#$42iCK1">@firefox_community@</A>
- <DT><A HREF="http://www.mozilla.com/@AB_CD@/about/" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==" ID="rdf:#$52iCK1">@firefox_about@</A>
-+ <DT><A HREF="https://parabolagnulinux.org/">Parabola GNU/Linux-libre</A>
-+ <DT><A HREF="https://parabolagnulinux.org/packages/">Parabola GNU/Linux-libre Packages</A>
-+ <DT><A HREF="https://wiki.parabolagnulinux.org/">Parabola GNU/Linux-libre Wiki</A>
-+ <DT><A HREF="https://labs.parabola.nu/">Parabola GNU/Linux-libre Labs</A>
++ <DT><A HREF="https://parabolagnulinux.org/" ICON="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AihUrGP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AIcXLSJvFCcn////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AbRIkcP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGwTI0JWEBtB////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wCAAAACVQ8crP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AFYQHJI9ChRL////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBlKzZHPQoUzgAAAAH///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AknV8I0sdJv8kBgxU////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AMTExA1uTlX1JAYLyf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wC5ubkLhG1x6CQGDP0PAAARzJmZBf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AxsbGCZB+g/QkBgz/DQMDUdu2tgfMn5koxo2NOsxmmQX///8A////AP///wD///8A////AP///wD///8A////AJ2JjX+NeX3/JAYM/wwCA5T///8A////AL+AgAi/foFfuG51l7JgaXCvY3E2/4CAAv///wD///8A////AJlveHOzqqv6UCUt/yQGDP8MAgTW////AP///wD///8A////AKqAgAawXmhnqk9b36VNW/KjT13mqGh16Kl+hvCbdHz/YyYx/z0KFP8kBgz/DAIE7f///wD///8A////AP///wD///8A////AJlmZgWkQU5inDFD0ZUhNv+FFyz/bRMk/1UPHP89ChT/JAYM/wwCA9v///8A////AP///wD///8A////AP///wD///8A////AP///wCTIDMohRYtfW0TJMBVDxzQPQoU3SUGDcoMBARA//8AAP//AAD//wAA//8AAP/3AAD/9wAA//sAAP/7AAD/+QAA//kAAP/5AAD/+AAA9/AAAPwAAAD/AAAA/+EAAA%3D%3D">Parabola GNU/Linux-libre</A>
++ <DT><A HREF="https://parabolagnulinux.org/packages/" ICON="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AihUrGP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AIcXLSJvFCcn////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AbRIkcP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGwTI0JWEBtB////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wCAAAACVQ8crP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AFYQHJI9ChRL////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBlKzZHPQoUzgAAAAH///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AknV8I0sdJv8kBgxU////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AMTExA1uTlX1JAYLyf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wC5ubkLhG1x6CQGDP0PAAARzJmZBf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AxsbGCZB+g/QkBgz/DQMDUdu2tgfMn5koxo2NOsxmmQX///8A////AP///wD///8A////AP///wD///8A////AJ2JjX+NeX3/JAYM/wwCA5T///8A////AL+AgAi/foFfuG51l7JgaXCvY3E2/4CAAv///wD///8A////AJlveHOzqqv6UCUt/yQGDP8MAgTW////AP///wD///8A////AKqAgAawXmhnqk9b36VNW/KjT13mqGh16Kl+hvCbdHz/YyYx/z0KFP8kBgz/DAIE7f///wD///8A////AP///wD///8A////AJlmZgWkQU5inDFD0ZUhNv+FFyz/bRMk/1UPHP89ChT/JAYM/wwCA9v///8A////AP///wD///8A////AP///wD///8A////AP///wCTIDMohRYtfW0TJMBVDxzQPQoU3SUGDcoMBARA//8AAP//AAD//wAA//8AAP/3AAD/9wAA//sAAP/7AAD/+QAA//kAAP/5AAD/+AAA9/AAAPwAAAD/AAAA/+EAAA%3D%3D">Parabola GNU/Linux-libre Packages</A>
++ <DT><A HREF="https://wiki.parabolagnulinux.org/" ICON="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AihUrGP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AIcXLSJvFCcn////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AbRIkcP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGwTI0JWEBtB////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wCAAAACVQ8crP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AFYQHJI9ChRL////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBlKzZHPQoUzgAAAAH///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AknV8I0sdJv8kBgxU////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AMTExA1uTlX1JAYLyf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wC5ubkLhG1x6CQGDP0PAAARzJmZBf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AxsbGCZB+g/QkBgz/DQMDUdu2tgfMn5koxo2NOsxmmQX///8A////AP///wD///8A////AP///wD///8A////AJ2JjX+NeX3/JAYM/wwCA5T///8A////AL+AgAi/foFfuG51l7JgaXCvY3E2/4CAAv///wD///8A////AJlveHOzqqv6UCUt/yQGDP8MAgTW////AP///wD///8A////AKqAgAawXmhnqk9b36VNW/KjT13mqGh16Kl+hvCbdHz/YyYx/z0KFP8kBgz/DAIE7f///wD///8A////AP///wD///8A////AJlmZgWkQU5inDFD0ZUhNv+FFyz/bRMk/1UPHP89ChT/JAYM/wwCA9v///8A////AP///wD///8A////AP///wD///8A////AP///wCTIDMohRYtfW0TJMBVDxzQPQoU3SUGDcoMBARA//8AAP//AAD//wAA//8AAP/3AAD/9wAA//sAAP/7AAD/+QAA//kAAP/5AAD/+AAA9/AAAPwAAAD/AAAA/+EAAA%3D%3D">Parabola GNU/Linux-libre Wiki</A>
++ <DT><A HREF="https://labs.parabola.nu/" ICON="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AihUrGP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AIcXLSJvFCcn////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AbRIkcP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGwTI0JWEBtB////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wCAAAACVQ8crP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AFYQHJI9ChRL////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBlKzZHPQoUzgAAAAH///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AknV8I0sdJv8kBgxU////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AMTExA1uTlX1JAYLyf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wC5ubkLhG1x6CQGDP0PAAARzJmZBf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AxsbGCZB+g/QkBgz/DQMDUdu2tgfMn5koxo2NOsxmmQX///8A////AP///wD///8A////AP///wD///8A////AJ2JjX+NeX3/JAYM/wwCA5T///8A////AL+AgAi/foFfuG51l7JgaXCvY3E2/4CAAv///wD///8A////AJlveHOzqqv6UCUt/yQGDP8MAgTW////AP///wD///8A////AKqAgAawXmhnqk9b36VNW/KjT13mqGh16Kl+hvCbdHz/YyYx/z0KFP8kBgz/DAIE7f///wD///8A////AP///wD///8A////AJlmZgWkQU5inDFD0ZUhNv+FFyz/bRMk/1UPHP89ChT/JAYM/wwCA9v///8A////AP///wD///8A////AP///wD///8A////AP///wCTIDMohRYtfW0TJMBVDxzQPQoU3SUGDcoMBARA//8AAP//AAD//wAA//8AAP/3AAD/9wAA//sAAP/7AAD/+QAA//kAAP/5AAD/+AAA9/AAAPwAAAD/AAAA/+EAAA%3D%3D">Parabola GNU/Linux-libre Labs</A>
+ </DL><p>
+ <DT><H3 ID="rdf:#$ZvPhC3">Free Software Foundation</H3>
+ <DL><p>
-+ <DT><A HREF="http://www.fsf.org/">Free Software Foundation</A>
-+ <DT><A HREF="http://libreplanet.org/">LibrePlanet</A>
-+ <DT><A HREF="http://www.gnu.org/software/gnuzilla/addons.html">Free addons</A>
-+ <DT><A HREF="http://www.h-node.org/">h-node</A>
++ <DT><A HREF="http://www.fsf.org/" ICON="data:text/html;base64,Cgk8IURPQ1RZUEUgaHRtbD4KCgk8aHRtbCBsYW5nPSJlbiI+CgoJICAgIAogICAgCiAgICAKICAgIAogICAgCgoJICA8aGVhZD4KCSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KCgkKCgkgICAgCgkgICAgPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT1lZGdlIiAvPgoKCSAgICAKCQk8YmFzZSBocmVmPSJodHRwOi8vd3d3LmZzZi5vcmcvZnJlZS1zb2Z0d2FyZS1mb3VuZGF0aW9uIiAvPjwhLS1baWYgbHQgSUUgN10+PC9iYXNlPjwhW2VuZGlmXS0tPgoJICAgIAoKCSAgICAKCQk8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoOyBpbml0aWFsLXNjYWxlPTAuNjY2NjsgbWF4aW11bS1zY2FsZT0xLjA7IG1pbmltdW0tc2NhbGU9MC42NjY2IiAvPgoJCTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iUGxvbmUgLSBodHRwOi8vcGxvbmUub3JnIiAvPgoJICAgIAoKICAgICAgICAKCgkgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7Y2hhcnNldD11dGYtOCIgLz4KCSAgICA8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IlBsb25lIC0gaHR0cDovL3Bsb25lLm9yZyIgLz4KCgoJICAgPHRpdGxlPkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiAmbWRhc2g7IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiAmbWRhc2g7IHdvcmtpbmcgdG9nZXRoZXIgZm9yIGZyZWUgc29mdHdhcmU8L3RpdGxlPgoKCgkgICAgCgkgICAgCgoJICAgIAoJICAgIAo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoucG9ydGxldC1zdGF0aWMtc3VwcG9ydGVyLC5wb3J0bGV0LXN0YXRpYy1hcHBlYWwtcG9ydGxldCB7ZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O30KI2ZzZi1zaWRlYmFyIHttYXJnaW4tdG9wOiAxMHB4O30KI2JyZWFkY3J1bWJzLXlvdS1hcmUtaGVyZSB7ZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O30KdGFibGUsIHRkLCB0ciwgdGJvZHksIHRoZWFke2JvcmRlcjogMCAhaW1wb3J0YW50O30KPC9zdHlsZT4KCgoJICAgIAoJICAgIAoKCSAgICAKCSAgICAKCgkgICAgPGxpbmsgcmVsPSJjb3B5cmlnaHQiIHRpdGxlPSJDb3B5cmlnaHQgaW5mb3JtYXRpb24iIGhyZWY9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LW5kLzMuMC9yZGYiIC8+CgkgICAgPGxpbmsgcmVsPSJhdXRob3IiIHRpdGxlPSJBdXRob3IgaW5mb3JtYXRpb24iIGhyZWY9Imh0dHA6Ly93d3cuZnNmLm9yZy9hYm91dC9zdGFmZi8iIC8+CgoJPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0icHJpbnQiIGhyZWY9Ii8vc3RhdGljLmZzZi5vcmcvbm9zdm4vcGxvbmUzL2Nzcy9wcmludC0yMDExLTEwLTEzLmNzcyIgLz4KCTxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InNjcmVlbiI+IEBpbXBvcnQgdXJsKCcvL3N0YXRpYy5mc2Yub3JnL25vc3ZuL3Bsb25lNC9jc3MvZnNmLTIwMTItMDQtMjMuY3NzJyk7PC9zdHlsZT4KCgoJPGxpbmsgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJGU0YgTmV3cyIgaHJlZj0iLy9zdGF0aWMuZnNmLm9yZy9mc2ZvcmcvcnNzL25ld3MueG1sIiB0eXBlPSJhcHBsaWNhdGlvbi9yc3MreG1sIiAvPgoJPGxpbmsgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJGU0YgRXZlbnRzIiBocmVmPSIvL3N0YXRpYy5mc2Yub3JnL2ZzZm9yZy9yc3MvZXZlbnRzLnhtbCIgdHlwZT0iYXBwbGljYXRpb24vcnNzK3htbCIgLz4KCTxsaW5rIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRlNGIEJsb2dzIiBocmVmPSIvL3N0YXRpYy5mc2Yub3JnL2ZzZm9yZy9yc3MvYmxvZ3MueG1sIiB0eXBlPSJhcHBsaWNhdGlvbi9yc3MreG1sIiAvPgoJPGxpbmsgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJGcmVlIFNvZnR3YXJlIEpvYnMiIGhyZWY9Ii8vc3RhdGljLmZzZi5vcmcvZnNmb3JnL3Jzcy9qb2JzLnhtbCIgdHlwZT0iYXBwbGljYXRpb24vcnNzK3htbCIgLz4KCTxsaW5rIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iR05VIFByb2plY3QgTmV3cyIgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3Jzcy93aGF0c25ldy5yc3MiIHR5cGU9ImFwcGxpY2F0aW9uL3Jzcyt4bWwiIC8+Cgk8bGluayByZWw9ImFsdGVybmF0ZSIgdGl0bGU9Ik5ldyBGcmVlIFNvZnR3YXJlIiBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvcnNzL3F1YWdnYS5yc3MiIHR5cGU9ImFwcGxpY2F0aW9uL3Jzcyt4bWwiIC8+CgoJPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCIgLz4KCgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgojYnJlYWRjcnVtYnMteW91LWFyZS1oZXJlLAojYnJlYWRjcnVtYnMtaG9tZSwKI2JyZWFkY3J1bWJzLWN1cnJlbnQsCiNicmVhZGNydW1icy0xIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5HTlVyZWxlYXNlc3sKCWJhY2tncm91bmQtY29sb3I6ICNmZmZmZTM7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjMDAwMDAwOwogICAgY29sb3I6IEJsYWNrOwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICB3aWR0aDogMjAwcHg7CiAgICBwYWRkaW5nOiAxMHB4Owp9CgojcG9ydGFsLWxhbmd1YWdlc2VsZWN0b3Ige2Rpc3BsYXk6IGJsb2NrOyBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDsgYm90dG9tOiAxcHg7IGxlZnQ6IDFweDt9Cgo8L3N0eWxlPgoJICA8L2hlYWQ+CgoKCTxib2R5IGNsYXNzPSJ0ZW1wbGF0ZS1mcm9udHBhZ2VfdmlldyBwb3J0YWx0eXBlLWRvY3VtZW50IHNlY3Rpb24tZnJlZS1zb2Z0d2FyZS1mb3VuZGF0aW9uIGljb25zLW9uIiBkaXI9Imx0ciI+CgoJPGRpdiBpZD0iY29vbGlvIj4gPCEtLSB3cmFwcGVyIGRpdiAtLT4KCgk8cCBjbGFzcz0ib25seU1vYmlsZSI+PGEgdGFiaW5kZXg9IjEiIGhyZWY9IiNjb250ZW50Ij5Ta2lwIHRvIGNvbnRlbnQ8L2E+LCA8YSB0YWJpbmRleD0iMiIgaHJlZj0iL3NpdGVtYXAjY29udGVudCI+c2l0ZW1hcDwvYT4gb3IgPGEgdGFiaW5kZXg9IjMiIGhyZWY9Ii9zZWFyY2hfZm9ybSNjb250ZW50Ij5za2lwIHRvIHNlYXJjaDwvYT4uPC9wPgoKCTxkaXYgaWQ9ImhkIiBjbGFzcz0iY3VzdG9tLWRvYyB2aXN1YWxOb1ByaW50Ij4KCTxoZWFkZXI+CgkgICAgCgoJPGgxPjxhIGhyZWY9Ii8iPkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjwvYT48L2gxPgoKCTxkaXYgaWQ9InBvcnRhbC1wZXJzb25hbHRvb2xzLXdyYXBwZXIiPgoKPGRpdiBpZD0iZnNmLWN1c3RvbSI+Cgo8aDUgY2xhc3M9ImhpZGRlblN0cnVjdHVyZSI+UGVyc29uYWwgdG9vbHM8L2g1PgoKPHVsIGlkPSJwb3J0YWwtcGVyc29uYWx0b29scyI+CiAgCgogICAgCiAgICA8bGk+CiAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmZzZi5vcmcvY2FzbG9naW4iIGlkPSJwZXJzb25hbHRvb2xzLWxvZ2luIj5Mb2cgaW48L2E+CiAgPC9saT4KICAgIAogICAgCiAgICA8bGk+CiAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmZzZi5vcmcvaGVscC1tZW51IiBpZD0icGVyc29uYWx0b29scy1sb2dpbi1wcm9ibGVtcyI+SGVscCE8L2E+CiAgPC9saT4KICAgIAogICAgCiAgICA8bGk+CiAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmZzZi5vcmcvYXNzb2NpYXRlL2Fib3V0LXRoZS1tZW1iZXJzLWZvcnVtIiBpZD0icGVyc29uYWx0b29scy1mb3J1bS1wcm9tbyI+TWVtYmVycyBmb3J1bTwvYT4KICA8L2xpPgogICAgCgo8L3VsPgo8L2Rpdj4KPC9kaXY+CgogIDxhIGhyZWY9Imh0dHA6Ly9mc2Yub3JnL2pmYiI+PGltZyBzcmM9Ii8vc3RhdGljLmZzZi5vcmcvbm9zdm4vam9pbi5lbi5wbmciIGFsdD0iSm9pbiBub3ciIHN0eWxlPSJmbG9hdDogcmlnaHQ7IiAvPjwvYT4gCgoJPC9oZWFkZXI+Cgk8L2Rpdj4KCgk8ZGl2IGNsYXNzPSJ5dWktZyBmc2YtbmF2LWZvb3RlciIgaWQ9ImZzZi1uYXYiPgoJPGRpdiBjbGFzcz0ibmF2aSI+CjxkaXY+Cgo8ZGl2IGNsYXNzPSJjdXN0b20tZG9jIj4KCjxuYXY+Cjx1bCBjbGFzcz0ibWFpbi1uYXYgbmF2aWdhdGlvbiI+CjxsaT48YSBocmVmPSIvYWJvdXQvIiB0aXRsZT0iIj5BYm91dDwvYT48L2xpPgo8bGk+PGEgaHJlZj0iL2NhbXBhaWducy8iIHRpdGxlPSIiPkNhbXBhaWduczwvYT48L2xpPgo8bGk+PGEgaHJlZj0iL2Fzc29jaWF0ZS8iIHRpdGxlPSIiPk1lbWJlcnNoaXA8L2E+PC9saT4KPGxpPjxhIGhyZWY9Ii9yZXNvdXJjZXMvIiB0aXRsZT0iIj5SZXNvdXJjZXM8L2E+PC9saT4KPGxpPjxhIGhyZWY9Ii9jb21tdW5pdHkvIiB0aXRsZT0iIj5Db21tdW5pdHk8L2E+PC9saT4KPGxpPjxhIGhyZWY9Ii9kb25hdGUvIiB0aXRsZT0iIj5Eb25hdGU8L2E+PC9saT4KPGxpPjxhIGhyZWY9Imh0dHA6Ly9zaG9wLmZzZi5vcmcvIiB0aXRsZT0iIj5TaG9wPC9hPjwvbGk+CjxsaSBjbGFzcz0ib25seU1vYmlsZSI+PGEgaHJlZj0iL25ld3MvIj5MYXRlc3QgbmV3czwvYT48L2xpPgo8bGkgY2xhc3M9Im9ubHlNb2JpbGUiPjxhIGhyZWY9Ii9ldmVudHMvIj5VcGNvbWluZyBldmVudHM8L2E+PC9saT4KPGxpIGNsYXNzPSJvbmx5TW9iaWxlIj48YSBocmVmPSIvYmxvZ3MiPkxhdGVzdCBibG9nIHBvc3RzPC9hPjwvbGk+CjxsaSBjbGFzcz0ib25seU1vYmlsZSI+PGEgaHJlZj0iL2ZyZWUtc29mdHdhcmUtc3VwcG9ydGVyLyI+RnJlZSBTb2Z0d2FyZSBTdXBwb3J0ZXIsIG91ciBtb250aGx5IGVtYWlsIG5ld3NsZXR0ZXI8L2E+PC9saT4KPC91bD4KCgoKPC9uYXY+Cgo8L2Rpdj48L2Rpdj4KCjwvZGl2PgoJPC9kaXY+Cgo8ZGl2IGNsYXNzPSJ5dWktZyIgc3R5bGU9Im1hcmdpbi10b3A6IDBweDsiPgombmJzcDsKPC9kaXY+CgoJPGRpdiBjbGFzcz0iY3VzdG9tLWRvYyB5dWktdDUiPgoKCSAgIDxkaXYgaWQ9ImJkIj48ZGl2IGlkPSJ5dWktbWFpbiI+CgoKPGRpdiBjbGFzcz0ieXVpLWciPjxkaXYgY2xhc3M9Inl1aS1iIj4KCgoKICAgICAgICA8ZGl2IGlkPSJwb3J0YWwtY29sdW1uLWNvbnRlbnQiIGNsYXNzPSJjZWxsIHdpZHRoLTM6NCBwb3NpdGlvbi0wIj4KCiAgICAgICAgICAgIDxkaXYgaWQ9InZpZXdsZXQtYWJvdmUtY29udGVudCI+PGRpdiBpZD0icG9ydGFsLWJyZWFkY3J1bWJzIj4KCiAgICA8c3BhbiBpZD0iYnJlYWRjcnVtYnMteW91LWFyZS1oZXJlIj5Zb3UKYXJlIGhlcmU6PC9zcGFuPgogICAgPHNwYW4gaWQ9ImJyZWFkY3J1bWJzLWhvbWUiPgogICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuZnNmLm9yZyI+SG9tZTwvYT4KICAgICAgICAKICAgIDwvc3Bhbj4KCjwvZGl2PjwvZGl2PgoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSIiPgoKICAgICAgICAgICAgICAgICAgICAKCiAgICAgICAgICAgICAgICAgICAgCgogICAgPGRsIGNsYXNzPSJwb3J0YWxNZXNzYWdlIGluZm8iIGlkPSJrc3NQb3J0YWxNZXNzYWdlIiBzdHlsZT0iZGlzcGxheTpub25lIj4KICAgICAgICA8ZHQ+SW5mbzwvZHQ+CiAgICAgICAgPGRkPjwvZGQ+CiAgICA8L2RsPgoKCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgPGFydGljbGU+CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9ImNvbnRlbnQiPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICA8dGFibGUgd2lkdGg9IjY5OSIgY2xhc3M9InBsYWluIj4KICA8dHI+CiAgICA8dGQgd2lkdGg9IjIzMyI+CiAgICAgIDxhIGhyZWY9Ii9uZXdzL2ZzZi1hbm5vdW5jZXMtd2lubmVyLW9mLXJlc3RyaWN0ZWQtYm9vdC13ZWJjb21pYy1jb250ZXN0Ij48aW1nIHNyYz0iLy9zdGF0aWMuZnNmLm9yZy9ub3N2bi9yZXN0cmljdGVkLWJvb3RzLmpwZyIgYWx0PSJSZXN0cmljdGVkIEJvb3RzIC0tIGl0J3MgZm9yIHlvdXIgc2FmZXR5IiB3aWR0aD0iMjMwIiAvPjwvYT4KICAgICAgPHAgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyOyI+CiAgICAgICAgVGhpcyA8c3BhbiB4bWxuczpkY3Q9Imh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy8iIGhyZWY9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiByZWw9ImRjdDp0eXBlIj53b3JrPC9zcGFuPiBieSA8YSB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIiBocmVmPSJodHRwOi8vZXJpa3N0ZWlubWFubi5ubC9zZWN1cmVib290X3dlYmNvbWljLmh0bWwiIHByb3BlcnR5PSJjYzphdHRyaWJ1dGlvbk5hbWUiIHJlbD0iY2M6YXR0cmlidXRpb25VUkwiPkVyaWsgU3RlaW5tYW5uPC9hPiBpcyBsaWNlbnNlZCB1bmRlciBhIDxhIHJlbD0ibGljZW5zZSIgaHJlZj0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvMy4wLyI+Q3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbiAzLjAgVW5wb3J0ZWQgTGljZW5zZTwvYT4uCiAgICAgIDwvcD4KICAgIDwvdGQ+CiAgICA8dGQgd2lkdGg9IjQ2NiI+CiAgICAgPHAgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsgcGFkZGluZzoxNXB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmJjOyBoZWlnaHQ6IDIyNXB4OyBmb250LXNpemU6IDExMCU7Ij4gCiAgICAgICA8c3Ryb25nIHN0eWxlPSJmb250LXNpemU6MTc1JTsiPlN0YW5kIHVwIGZvciB5b3VyIGZyZWVkb20gdG8gaW5zdGFsbCBmcmVlIHNvZnR3YXJlPC9zdHJvbmc+PGJyPjxicj4KICAgICAgIDxhIGhyZWY9Ii9jYW1wYWlnbnMvc2VjdXJlLWJvb3QtdnMtcmVzdHJpY3RlZC1ib290L3N0YXRlbWVudCI+PGltZyBzcmM9Ii8vc3RhdGljLmZzZi5vcmcvbm9zdm4vdWVmaV9sb2dvLnBuZyIgYWx0PSIiIC8+PC9hPjxicj48YnI+CiAgICAgICA8YSBocmVmPSIvY2FtcGFpZ25zL3NlY3VyZS1ib290LXZzLXJlc3RyaWN0ZWQtYm9vdC9zdGF0ZW1lbnQiIHN0eWxlPSJmb250LXNpemU6MTEwJSI+Sm9pbiAzMSw4MDAgcGVvcGxlIGluIG9wcG9zaW5nIE1pY3Jvc29mdCdzIFJlc3RyaWN0ZWQgQm9vdCBieSBzaWduaW5nIHRoaXMgc3RhdGVtZW50PC9hPjxicj4KICAgICA8L3A+CiAgICAgPHA+PGEgaHJlZj0iLy93d3cuZnNmLm9yZy93b3JraW5nLXRvZ2V0aGVyL21vdmluZy8iPjxpbWcgc3JjPSIvL3N0YXRpYy5mc2Yub3JnL25vc3ZuL3dvcmtpbmcvdy9nZXRzdGFydC5wbmciIC8+PC9hPgogICAgICAgIDxhIGhyZWY9Ii8vd3d3LmdudS5vcmcvZGlzdHJvcy9mcmVlLWRpc3Ryb3MuaHRtbCI+PGltZyBzcmM9Ii8vc3RhdGljLmZzZi5vcmcvbm9zdm4vZG93bmxvYWQucG5nIiB3aWR0aD0iMTYwIiAvPjwvYT4KICAgICA8L3A+CiAgICA8L3RkPgogIDwvdHI+CjwvdGFibGU+CgoKICAgICAgICA8aDIgaWQ9ImludHJvLXRleHQiPgogICAgICAgICAgICAKICAgICAgICA8c3BhbiBjbGFzcz0iIiBpZD0icGFyZW50LWZpZWxkbmFtZS1kZXNjcmlwdGlvbiI+CiAgICAgICAgICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiDigJQgd2hhdCB3ZSBkbwogICAgICAgIDwvc3Bhbj4KICAgIAogICAgICAgIDwvaDI+CgogICAgICAgIAoKICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSIiIGlkPSJwYXJlbnQtZmllbGRuYW1lLXRleHQiPgogICAgICAgICAgICA8dWw+DQo8bGk+VGhlIEZTRiBhZHZvY2F0ZXMgZm9yIGZyZWUgc29mdHdhcmUgaWRlYWxzIGFzIG91dGxpbmVkIGluIHRoZSA8YSBocmVmPSIvcGhpbG9zb3BoeS9mcmVlLXN3Lmh0bWwiPkZyZWUgU29mdHdhcmUgRGVmaW5pdGlvbjwvYT4sIHdvcmtzIGZvciBhZG9wdGlvbiBvZiBmcmVlIHNvZnR3YXJlIGFuZCBmcmVlIG1lZGlhIGZvcm1hdHMsIGFuZCBvcmdhbml6ZXMgPGEgaHJlZj0iL2NhbXBhaWducy8iPmFjdGl2aXN0IGNhbXBhaWduczwvYT4gYWdhaW5zdCB0aHJlYXRzIHRvIHVzZXIgZnJlZWRvbSBsaWtlIDxhIGhyZWY9Imh0dHA6Ly93aW5kb3dzN3NpbnMub3JnLyI+V2luZG93cyA3PC9hPiwgQXBwbGUncyA8YSBocmVmPSIvaXBob25lIj5pUGhvbmU8L2E+IGFuZCA8YSBocmVmPSJodHRwOi8vd3d3LmZzZi5vcmcvYmxvZ3Mvcm1zL21hYy1vc3gtbWlzdGFrZXMtYW5kLW1hbGZlYXR1cmVzIj5PUyBYPC9hPiwgPGEgaHJlZj0iaHR0cDovL2RlZmVjdGl2ZWJ5ZGVzaWduLm9yZy8iPkRSTSBvbiBtdXNpYywgZWJvb2tzIGFuZCBtb3ZpZXM8L2E+LCBhbmQgPGEgaHJlZj0iaHR0cDovL2VuZHNvZnRwYXRlbnRzLm9yZy8iPnNvZnR3YXJlIHBhdGVudHM8L2E+LjwvbGk+DQoNCjxsaT5XZSBwcm9tb3RlIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9kaXN0cm9zLyI+Y29tcGxldGVseSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbnMgb2YgR05VL0xpbnV4PC9hPiwgYW5kIGFkdm9jYXRlIHRoYXQgdXNlcnMgb2YgdGhlIEdOVS9MaW51eCBvcGVyYXRpbmcgc3lzdGVtIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9kaXN0cm9zL2ZyZWUtc3lzdGVtLWRpc3RyaWJ1dGlvbi1ndWlkZWxpbmVzLmh0bWwiPnN3aXRjaCB0byBhIGRpc3RyaWJ1dGlvbiB3aGljaCByZXNwZWN0cyB0aGVpciBmcmVlZG9tPC9hPi48L2xpPg0KDQo8bGk+V2UgZHJpdmUgZGV2ZWxvcG1lbnQgb2YgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZyI+R05VIG9wZXJhdGluZyBzeXN0ZW08L2E+IGFuZCA8YSBocmVmPSIvY2FtcGFpZ25zL3ByaW9yaXR5Lmh0bWwiPm1haW50YWluIGEgbGlzdCBvZiBoaWdoLXByaW9yaXR5IGZyZWUgc29mdHdhcmUgcHJvamVjdHM8L2E+IHRvIHByb21vdGUgcmVwbGFjZW1lbnRzIGZvciBjb21tb24gcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zLjwvbGk+DQoNCjxsaT5XZSBidWlsZCBhbmQgdXBkYXRlIDxhIGhyZWY9Ii9yZXNvdXJjZXMvIj5yZXNvdXJjZXMgdXNlZnVsIGZvciB0aGUgZnJlZSBzb2Z0d2FyZSBjb21tdW5pdHk8L2E+IGxpa2UgdGhlIDxhIGhyZWY9Imh0dHA6Ly9kaXJlY3RvcnkuZnNmLm9yZy8iPkZyZWUgU29mdHdhcmUgRGlyZWN0b3J5PC9hPiwgYW5kIHRoZSA8YSBocmVmPSIvam9icyI+ZnJlZSBzb2Z0d2FyZSBqb2JzPC9hPiBib2FyZC4gV2UgYWxzbyBwcm92aWRlIDxhIGhyZWY9Ii9saWNlbnNpbmcvbGljZW5zZXMvIj5saWNlbnNlcyBmb3IgZnJlZSBzb2Z0d2FyZSBkZXZlbG9wZXJzPC9hPiB0byBzaGFyZSB0aGVpciBjb2RlLCBpbmNsdWRpbmcgdGhlIDxhIGhyZWY9Ii9saWNlbnNpbmcvbGljZW5zZXMvZ3BsLmh0bWwiPkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlPC9hPi48L2xpPg0KDQo8L3VsPg0KDQo8cCBjbGFzcz0iYyI+PGEgaHJlZj0iL3dvcmtpbmctdG9nZXRoZXIvIj48aW1nIHNyYz0iL3N0YXRpYy9ub3N2bi93b3JraW5nL3cvZGVzZXJ2ZS5wbmciIGFsdD0iIiAvPjwvYT48L3A+IAogICAgICAgICAgICAKICAgICAgICA8L2Rpdj4KICAgIAogICAgCgoKICA8ZGl2IGlkPSJmc3MiPjxmb3JtIGFjdGlvbj0iaHR0cHM6Ly9jcm0uZnNmLm9yZy9jaXZpY3JtL3Byb2ZpbGUvY3JlYXRlJmFtcDtyZXNldD0xJmFtcDtnaWQ9MzEiIG1ldGhvZD0icG9zdCI+CjxoMz5TaWduIHVwIHRvZGF5IHRvIHJlY2VpdmUgdGhlIG1vbnRobHkgbmV3c2xldHRlciwgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuZnNmLm9yZy9mcmVlLXNvZnR3YXJlLXN1cHBvcnRlci8iPkZyZWUgU29mdHdhcmUgU3VwcG9ydGVyPC9hPjwvaDM+Cgo8cD48c21hbGw+RW50ZXIgeW91ciBlbWFpbCBhZGRyZXNzIChpZS4gbWF0dEBleGFtcGxlLmNvbSk8L3NtYWxsPjwvcD4KCjxwPjxpbnB1dCBpZD0iZnJtRW1haWwiIHR5cGU9InRleHQiIG5hbWU9ImVtYWlsLVByaW1hcnkiIHNpemU9IjE4IiBtYXhsZW5ndGg9IjgwIiAvPjwvcD4KPHA+PGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0iX3FmX0VkaXRfbmV4dCIgdmFsdWU9IlN1YnNjcmliZSBtZSIgLz48L3A+CjxkaXY+PGlucHV0IG5hbWU9InBvc3RVUkwiIHR5cGU9ImhpZGRlbiIgdmFsdWU9IiIgLz4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZ3JvdXBbMjVdIiB2YWx1ZT0iMSIgLz4KPGlucHV0IG5hbWU9ImNhbmNlbFVSTCIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iaHR0cHM6Ly9jcm0uZnNmLm9yZy9jaXZpY3JtL3Byb2ZpbGU/cmVzZXQ9MSZhbXA7Z2lkPTMxIiAvPgo8aW5wdXQgbmFtZT0iX3FmX2RlZmF1bHQiIHR5cGU9ImhpZGRlbiIgdmFsdWU9IkVkaXQ6Y2FuY2VsIiAvPgo8L2Rpdj4KPC9mb3JtPjwvZGl2PgoKCjxkaXYgaWQ9InF1b3RlLWJveCI+CiA8YmxvY2txdW90ZT48YSBocmVmPSIvYXBwZWFsLzIwMDkvbWFrby8iPkEgc3Ryb25nIGZyZWUgc29mdHdhcmUgbW92ZW1lbnQgZm9jdXNlZCBvbiB0aGUgcHJpbmNpcGxlZCBpc3N1ZXMgb2Ygc29mdHdhcmUgZnJlZWRvbSAmbWRhc2g7IGFuZCBhIHN0cm9uZyBGU0YgaW4gcGFydGljdWxhciAmbWRhc2g7IHdpbGwgZGV0ZXJtaW5lIHdoYXQgZnJlZWRvbXMgdGhlIG5leHQgZ2VuZXJhdGlvbiBvZiBjb21wdXRlciB1c2VycyBlbmpveS4gQXQgc3Rha2UgaXMgbm8gbGVzcyB0aGFuIHRoZSBuZXh0IGdlbmVyYXRpb24ncyBhdXRvbm9teS48L2E+PC9ibG9ja3F1b3RlPgoKICA8cD4mbWRhc2g7IDxhIGhyZWY9Ii9hcHBlYWwvMjAwOS9tYWtvLyI+QmVuamFtaW4gTWFrbyBIaWxsPC9hPiwgd3JpdGVyLCB0ZWNobm9sb2dpc3QgYW5kIEZTRiBib2FyZCBtZW1iZXI8L3A+CjwvZGl2PgoKICAgIAoKICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgPC9hcnRpY2xlPgoKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAKCiAgICAgICAgICAgIDxkaXYgaWQ9InZpZXdsZXQtYmVsb3ctY29udGVudCI+CgoKCgoKICAgIAoKPC9kaXY+CiAgICAgICAgPC9kaXY+Cgk8L2Rpdj48L2Rpdj48L2Rpdj4KCgoJIDxkaXYgaWQ9ImZzZi1zaWRlYmFyIiBjbGFzcz0ieXVpLWIgdmlzdWFsTm9QcmludCI+CgkgICAgPGFzaWRlPgoJPGRpdiBpZD0ic2VhcmNoIj4KCgkgICAgICA8Zm9ybSBpZD0ic2lkZXNlYXJjaCIgbmFtZT0ic2VhcmNoZm9ybSIgYWN0aW9uPSJodHRwOi8vd3d3LmZzZi5vcmcvc2VhcmNoIj4KCQkgIDxwPjxpbnB1dCBuYW1lPSJTZWFyY2hhYmxlVGV4dCIgdGFiaW5kZXg9IjEiIHR5cGU9InRleHQiIHNpemU9IjMwIiB0aXRsZT0iU2VhcmNoIFNpdGUiIC8+PC9wPgoJCSAgPHA+PGlucHV0IGNsYXNzPSJzZWFyY2hCdXR0b24iIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNlYXJjaCIgLz48L3A+CgkgICAgICA8L2Zvcm0+CgoJPC9kaXY+CgoKCQkgICAgICA8ZGl2IGNsYXNzPSJ2aXN1YWxQYWRkaW5nIj4KCQkgICAgICAgIAoJCSAgICAgICAgICAKPGRpdiBpZD0icG9ydGxldHdyYXBwZXItNzA2YzZmNmU2NTJlNzI2OTY3Njg3NDYzNmY2Yzc1NmQ2ZTBhNjM2ZjZlNzQ2NTc4NzQwYTJmNjY3MzY2MGE3Mzc1NzA3MDZmNzI3NDY1NzIiIGNsYXNzPSJwb3J0bGV0V3JhcHBlciBrc3NhdHRyLXBvcnRsZXRoYXNoLTcwNmM2ZjZlNjUyZTcyNjk2NzY4NzQ2MzZmNmM3NTZkNmUwYTYzNmY2ZTc0NjU3ODc0MGEyZjY2NzM2NjBhNzM3NTcwNzA2ZjcyNzQ2NTcyIj48ZGl2IGNsYXNzPSJwb3J0bGV0U3RhdGljVGV4dCBwb3J0bGV0LXN0YXRpYy1zdXBwb3J0ZXIiPjxkaXYgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsiPg0KPGg1PlNpZ24gdXA8L2g1Pg0KPGZvcm0gYWN0aW9uPSJodHRwczovL2NybS5mc2Yub3JnL2Npdmljcm0vcHJvZmlsZS9jcmVhdGUmYW1wO3Jlc2V0PTEmYW1wO2dpZD0zMSIgbWV0aG9kPSJwb3N0Ij4NCjxwPlNpZ24gdXAgdG9kYXkgdG8gcmVjZWl2ZSB0aGUgbW9udGhseSBuZXdzbGV0dGVyLCB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5mc2Yub3JnL2ZyZWUtc29mdHdhcmUtc3VwcG9ydGVyLyI+RnJlZSBTb2Z0d2FyZSBTdXBwb3J0ZXI8L2E+PC9wPg0KDQo8cD48c21hbGw+RW50ZXIgeW91ciBlbWFpbCBhZGRyZXNzIChpZS4gbWF0dEBleGFtcGxlLmNvbSk8L3NtYWxsPjwvcD4NCg0KPHA+PGlucHV0IGlkPSJmcm1FbWFpbCIgdHlwZT0idGV4dCIgbmFtZT0iZW1haWwtUHJpbWFyeSIgc2l6ZT0iMTgiIG1heGxlbmd0aD0iODAiIC8+PC9wPg0KPHA+PGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0iX3FmX0VkaXRfbmV4dCIgdmFsdWU9IlN1YnNjcmliZSBtZSIgLz48L3A+DQo8ZGl2PjxpbnB1dCBuYW1lPSJwb3N0VVJMIiB0eXBlPSJoaWRkZW4iIHZhbHVlPSIiIC8+DQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJncm91cFsyNV0iIHZhbHVlPSIxIiAvPg0KPGlucHV0IG5hbWU9ImNhbmNlbFVSTCIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iaHR0cHM6Ly9jcm0uZnNmLm9yZy9jaXZpY3JtL3Byb2ZpbGU/cmVzZXQ9MSZhbXA7Z2lkPTMxIiAvPg0KPGlucHV0IG5hbWU9Il9xZl9kZWZhdWx0IiB0eXBlPSJoaWRkZW4iIHZhbHVlPSJFZGl0OmNhbmNlbCIgLz4NCjwvZGl2Pg0KPC9mb3JtPjwvZGl2PjwvZGl2PgoKPC9kaXY+Cgo8ZGl2IGlkPSJwb3J0bGV0d3JhcHBlci03MDZjNmY2ZTY1MmU3MjY5Njc2ODc0NjM2ZjZjNzU2ZDZlMGE2MzZmNmU3NDY1Nzg3NDBhMmY2NjczNjYwYTY2NzM2NjJkNmU2NTc3NzMyZDcyNzM3MyIgY2xhc3M9InBvcnRsZXRXcmFwcGVyIGtzc2F0dHItcG9ydGxldGhhc2gtNzA2YzZmNmU2NTJlNzI2OTY3Njg3NDYzNmY2Yzc1NmQ2ZTBhNjM2ZjZlNzQ2NTc4NzQwYTJmNjY3MzY2MGE2NjczNjYyZDZlNjU3NzczMmQ3MjczNzMiPjxkaXYgY2xhc3M9InBvcnRsZXRTdGF0aWNUZXh0IHBvcnRsZXQtc3RhdGljLWZzZi1uZXdzLXJzcyI+PHAgc3R5bGU9ImZsb2F0OiByaWdodDsiPjxhIGhyZWY9Ii9zdGF0aWMvZnNmb3JnL3Jzcy9uZXdzLnhtbCIgdGl0bGU9IlN1YnNjcmliZSB0byBhbiBSU1MgZmVlZCBvZiBGU0YgbmV3cyI+PGltZyBzcmM9Ii9zdGF0aWMvZnNmb3JnL2Nzcy9pbWcvcnNzLmdpZiIgYWx0PSJSU1MgZmVlZCIgLz48L2E+PC9wPjwvZGl2PgoKPC9kaXY+Cgo8ZGl2IGlkPSJwb3J0bGV0d3JhcHBlci03MDZjNmY2ZTY1MmU3MjY5Njc2ODc0NjM2ZjZjNzU2ZDZlMGE2MzZmNmU3NDY1Nzg3NDBhMmY2NjczNjYwYTZlNjU3NzczIiBjbGFzcz0icG9ydGxldFdyYXBwZXIga3NzYXR0ci1wb3J0bGV0aGFzaC03MDZjNmY2ZTY1MmU3MjY5Njc2ODc0NjM2ZjZjNzU2ZDZlMGE2MzZmNmU3NDY1Nzg3NDBhMmY2NjczNjYwYTZlNjU3NzczIj48ZGwgY2xhc3M9InBvcnRsZXQgcG9ydGxldE5ld3MiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KCiAgICA8ZHQgY2xhc3M9InBvcnRsZXRIZWFkZXIiPgogICAgICAgIDxzcGFuIGNsYXNzPSJwb3J0bGV0VG9wTGVmdCI+PC9zcGFuPgogICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuZnNmLm9yZy9uZXdzIiBjbGFzcz0idGlsZSI+TmV3czwvYT4KICAgICAgICA8c3BhbiBjbGFzcz0icG9ydGxldFRvcFJpZ2h0Ij48L3NwYW4+CiAgICA8L2R0PgoKICAgIAogICAgPGRkIGNsYXNzPSJwb3J0bGV0SXRlbSBvZGQiPgoKICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmZzZi5vcmcvbmV3cy9mc2YtYW5ub3VuY2VzLXdpbm5lci1vZi1yZXN0cmljdGVkLWJvb3Qtd2ViY29taWMtY29udGVzdCIgY2xhc3M9InRpbGUiIHRpdGxlPSJXaXRoIG92ZXIgMzAsMDAwIHNpZ25hdHVyZXMgdG8gb3VyIHN0YXRlbWVudCBhbmQgb3ZlciBhIGRvemVuIGhpZ2gtcXVhbGl0eSBzdWJtaXNzaW9ucyB0byBvdXIgY29udGVzdCwgSSdtIGNvbmZpZGVudCBvdXIgbWVzc2FnZSB0aGF0IFJlc3RyaWN0ZWQgQm9vdCBpcyBhIG1pc3Rha2UgaGFzIHRoZSBhdHRlbnRpb24gb2YgTWljcm9zb2Z0IGFuZCBjb21wdXRlci1tYWtlcnMgYWxpa2UuIE5vdyB3ZSBuZWVkIHRha2UgdGhlIG5leHQgc3RlcCBvZiB0dXJuaW5nIHRoaXMgc3VwcG9ydCBpbnRvIHRhbmdpYmxlIHJlc3VsdHMuIj4KICAgICAgICAgICAgPGltZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHNyYz0iaHR0cDovL3d3dy5mc2Yub3JnL3N0YXRpYy9mc2ZvcmcvY3NzL2ltZy9uZXdzaXRlbV9pY29uLmdpZiIgYWx0PSJOZXdzIEl0ZW0iIC8+CiAgICAgICAgICAgIEZTRiBhbm5vdW5jZXMgd2lubmVyIG9mIFJlc3RyaWN0ZWQgQm9vdCB3ZWJjb21pYyBjb250ZXN0CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwb3J0bGV0SXRlbURldGFpbHMiPkp1bCAwNSwgMjAxMjwvc3Bhbj4KICAgICAgICA8L2E+CiAgICA8L2RkPgogICAgCiAgICAKICAgIDxkZCBjbGFzcz0icG9ydGxldEl0ZW0gZXZlbiI+CgogICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuZnNmLm9yZy9uZXdzL2ZzZi1wdWJsaXNoZXMtd2hpdGVwYXBlci13aXRoLXJlY29tbWVuZGF0aW9ucy1mb3ItZnJlZS1vcGVyYXRpbmctc3lzdGVtLWRpc3RyaWJ1dGlvbnMtY29uc2lkZXJpbmctc2VjdXJlLWJvb3QiIGNsYXNzPSJ0aWxlIiB0aXRsZT0iSW4gdGhlIHBhcGVyLCB0aGUgRlNGIG91dGxpbmVzIHRoZSBkaWZmaWN1bHRpZXMgU2VjdXJlIEJvb3QgcG9zZXMgZm9yIHRoZSBmcmVlIHNvZnR3YXJlIG1vdmVtZW50IGFuZCBmcmVlIHNvZnR3YXJlIGFkb3B0aW9uLCB3YXJucyBhZ2FpbnN0IHRoZSB0aHJlYXQgb2YgUmVzdHJpY3RlZCBCb290LCBhbmQgZ2l2ZXMgcmVjb21tZW5kYXRpb25zIGZvciBob3cgZnJlZSBzb2Z0d2FyZSBkZXZlbG9wZXJzIGFuZCB1c2VycyBjYW4gYmVzdCBhZGRyZXNzIHRoZSBpc3N1ZXMuIj4KICAgICAgICAgICAgPGltZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHNyYz0iaHR0cDovL3d3dy5mc2Yub3JnL3N0YXRpYy9mc2ZvcmcvY3NzL2ltZy9uZXdzaXRlbV9pY29uLmdpZiIgYWx0PSJOZXdzIEl0ZW0iIC8+CiAgICAgICAgICAgIEZTRiBwdWJsaXNoZXMgd2hpdGVwYXBlciB3aXRoIHJlY29tbWVuZGF0aW9ucyBmb3IgZnJlZSBvcGVyYXRpbmcgc3lzdGVtIGRpc3RyaWJ1dGlvbnMgY29uc2lkZXJpbmcgU2VjdXJlIEJvb3QKICAgICAgICAgICAgPHNwYW4gY2xhc3M9InBvcnRsZXRJdGVtRGV0YWlscyI+SnVuIDMwLCAyMDEyPC9zcGFuPgogICAgICAgIDwvYT4KICAgIDwvZGQ+CiAgICAKCiAgICA8ZGQgY2xhc3M9InBvcnRsZXRGb290ZXIiPgogICAgICAgIDxzcGFuIGNsYXNzPSJwb3J0bGV0Qm90dG9tTGVmdCI+PC9zcGFuPgogICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuZnNmLm9yZy9uZXdzIj4KICAgICAgICAgIE1vcmUgbmV3cyZoZWxsaXA7CiAgICAgICAgPC9hPgogICAgICAgIDxzcGFuIGNsYXNzPSJwb3J0bGV0Qm90dG9tUmlnaHQiPjwvc3Bhbj4KICAgIDwvZGQ+CiAgICAKPC9kbD48L2Rpdj4KCjxkaXYgaWQ9InBvcnRsZXR3cmFwcGVyLTcwNmM2ZjZlNjUyZTcyNjk2NzY4NzQ2MzZmNmM3NTZkNmUwYTYzNmY2ZTc0NjU3ODc0MGEyZjY2NzM2NjBhNjY3MzY2MmQ2MjZjNmY2NzczMmQ3MjczNzMiIGNsYXNzPSJwb3J0bGV0V3JhcHBlciBrc3NhdHRyLXBvcnRsZXRoYXNoLTcwNmM2ZjZlNjUyZTcyNjk2NzY4NzQ2MzZmNmM3NTZkNmUwYTYzNmY2ZTc0NjU3ODc0MGEyZjY2NzM2NjBhNjY3MzY2MmQ2MjZjNmY2NzczMmQ3MjczNzMiPjxkaXYgY2xhc3M9InBvcnRsZXRTdGF0aWNUZXh0IHBvcnRsZXQtc3RhdGljLWZzZi1ibG9ncy1yc3MiPjxwIHN0eWxlPSJmbG9hdDogcmlnaHQ7Ij48YSBocmVmPSIvc3RhdGljL2ZzZm9yZy9yc3MvYmxvZ3MueG1sIiB0aXRsZT0iU3Vic2NyaWJlIHRvIGFuIFJTUyBmZWVkIG9mIEZTRiBibG9ncyI+PGltZyBzcmM9Ii9zdGF0aWMvZnNmb3JnL2Nzcy9pbWcvcnNzLmdpZiIgYWx0PSJSU1MgZmVlZCIgLz48L2E+PC9wPjwvZGl2PgoKPC9kaXY+Cgo8ZGl2IGlkPSJwb3J0bGV0d3JhcHBlci03MDZjNmY2ZTY1MmU3MjY5Njc2ODc0NjM2ZjZjNzU2ZDZlMGE2MzZmNmU3NDY1Nzg3NDBhMmY2NjczNjYwYTcyNjU2MzY1NmU3NDJkNjI2YzZmNjc3MyIgY2xhc3M9InBvcnRsZXRXcmFwcGVyIGtzc2F0dHItcG9ydGxldGhhc2gtNzA2YzZmNmU2NTJlNzI2OTY3Njg3NDYzNmY2Yzc1NmQ2ZTBhNjM2ZjZlNzQ2NTc4NzQwYTJmNjY3MzY2MGE3MjY1NjM2NTZlNzQyZDYyNmM2ZjY3NzMiPjxkbCBjbGFzcz0icG9ydGxldCBwb3J0bGV0Q29sbGVjdGlvbiBwb3J0bGV0LWNvbGxlY3Rpb24tcmVjZW50LWJsb2dzIj4KCiAgICA8ZHQgY2xhc3M9InBvcnRsZXRIZWFkZXIiPgogICAgICAgIDxzcGFuIGNsYXNzPSJwb3J0bGV0VG9wTGVmdCI+PC9zcGFuPgogICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuZnNmLm9yZy9ibG9ncy9yZWNlbnQtYmxvZy1wb3N0cyI+CiAgICAgICAgICAgIDxzcGFuPlJlY2VudCBibG9nczwvc3Bhbj4KICAgICAgICA8L2E+CiAgICAgICAgPHNwYW4gY2xhc3M9InBvcnRsZXRUb3BSaWdodCI+PC9zcGFuPgogICAgPC9kdD4KCiAgICAKICAgIDxkZCBjbGFzcz0icG9ydGxldEl0ZW0gb2RkIj4KICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmZzZi5vcmcvYmxvZ3MvY29tbXVuaXR5L2dudS1zcG90bGlnaHQtd2l0aC1rYXJsLWJlcnJ5LWp1bmUtMjAxMiIgY2xhc3M9InRpbGUiIHRpdGxlPSJOZXcgR05VIHJlbGVhc2VzIGFzIG9mIEp1bmUgMjYsIDIwMTIiPgogICAgICAgICAgICA8aW1nIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgc3JjPSJodHRwOi8vd3d3LmZzZi5vcmcvc3RhdGljL2ZzZm9yZy9jc3MvaW1nL25ld3NpdGVtX2ljb24uZ2lmIiBhbHQ9IkJsb2cgRW50cnkiIC8+CiAgICAgICAgICAgIEdOVSBTcG90bGlnaHQgd2l0aCBLYXJsIEJlcnJ5IChKdW5lIDIwMTIpCiAgICAgICAgICAgIAogICAgICAgIDwvYT4KICAgIDwvZGQ+CiAgICAKICAgIAogICAgPGRkIGNsYXNzPSJwb3J0bGV0SXRlbSBldmVuIj4KICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmZzZi5vcmcvYmxvZ3MvZ251LXByZXNzL2ZzZnMtbmV3LW9wZXJhdGlvbnMtYXNzaXN0YW50IiBjbGFzcz0idGlsZSIgdGl0bGU9IkhlbGxvLCBJJ20gQ2hyaXNzaWUgSGltZXMsIHRoZSBuZXcgb3BlcmF0aW9ucyBhc3Npc3RhbnQsIGFuZCBJJ20gZXhjaXRlZCB0byBvZmZpY2lhbGx5IGJlIHdpdGggdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gSSBoYW5kbGUgc2FsZXMsIGRvbmF0aW9ucywgYW5kIGdlbmVyYWwgb2ZmaWNlIG9wZXJhdGlvbnMuIj4KICAgICAgICAgICAgPGltZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHNyYz0iaHR0cDovL3d3dy5mc2Yub3JnL3N0YXRpYy9mc2ZvcmcvY3NzL2ltZy9uZXdzaXRlbV9pY29uLmdpZiIgYWx0PSJCbG9nIEVudHJ5IiAvPgogICAgICAgICAgICBGU0YncyBuZXcgb3BlcmF0aW9ucyBhc3Npc3RhbnQKICAgICAgICAgICAgCiAgICAgICAgPC9hPgogICAgPC9kZD4KICAgIAogICAgCiAgICA8ZGQgY2xhc3M9InBvcnRsZXRJdGVtIG9kZCI+CiAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5mc2Yub3JnL2Jsb2dzL2NvbW11bml0eS9raWxsLWFjdGEiIGNsYXNzPSJ0aWxlIiB0aXRsZT0iS2lsbCBBQ1RBIG9uY2UgKGFuZCBob3BlZnVsbHkpIGZvciBhbGwhIj4KICAgICAgICAgICAgPGltZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHNyYz0iaHR0cDovL3d3dy5mc2Yub3JnL3N0YXRpYy9mc2ZvcmcvY3NzL2ltZy9uZXdzaXRlbV9pY29uLmdpZiIgYWx0PSJCbG9nIEVudHJ5IiAvPgogICAgICAgICAgICBLaWxsIEFDVEEKICAgICAgICAgICAgCiAgICAgICAgPC9hPgogICAgPC9kZD4KICAgIAogICAgCiAgICA8ZGQgY2xhc3M9InBvcnRsZXRJdGVtIGV2ZW4iPgogICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuZnNmLm9yZy9ibG9ncy9saWNlbnNpbmcvZ251LWdwbHYzLXR1cm5zLTUiIGNsYXNzPSJ0aWxlIiB0aXRsZT0iVGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyB0dXJucyBmaXZlOyBFYmVuIE1vZ2xlbiBzdGF0ZXMsICZxdW90O0dQTHYzIGFudGljaXBhdGVkIHRoZSBpc3N1ZXMgb2YgdG9kYXkgYW5kIHdpbGwgaGVscCB1cyBkZWFsIHdpdGggdGhlIGNoYWxsZW5nZXMgb2YgdG9tb3Jyb3cuJnF1b3Q7Ij4KICAgICAgICAgICAgPGltZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHNyYz0iaHR0cDovL3d3dy5mc2Yub3JnL3N0YXRpYy9mc2ZvcmcvY3NzL2ltZy9uZXdzaXRlbV9pY29uLmdpZiIgYWx0PSJCbG9nIEVudHJ5IiAvPgogICAgICAgICAgICBHTlUgR1BMdjMgdHVybnMgNQogICAgICAgICAgICAKICAgICAgICA8L2E+CiAgICA8L2RkPgogICAgCgogICAgPGRkIGNsYXNzPSJwb3J0bGV0Rm9vdGVyIj4KICAgICAgICA8c3BhbiBjbGFzcz0icG9ydGxldEJvdHRvbUxlZnQiPjwvc3Bhbj4KICAgICAgICA8c3Bhbj4KICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmZzZi5vcmcvYmxvZ3MvcmVjZW50LWJsb2ctcG9zdHMiPgogICAgICAgICAgICBNb3JlJmhlbGxpcDsKICAgICAgICA8L2E+CiAgICAgICAgPC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJwb3J0bGV0Qm90dG9tUmlnaHQiPjwvc3Bhbj4KICAgIDwvZGQ+Cgo8L2RsPgo8L2Rpdj4KCjxkaXYgaWQ9InBvcnRsZXR3cmFwcGVyLTcwNmM2ZjZlNjUyZTcyNjk2NzY4NzQ2MzZmNmM3NTZkNmUwYTYzNmY2ZTc0NjU3ODc0MGEyZjY2NzM2NjBhNjY3MzY2MmQ2NTc2NjU2ZTc0NzMyZDcyNzM3MyIgY2xhc3M9InBvcnRsZXRXcmFwcGVyIGtzc2F0dHItcG9ydGxldGhhc2gtNzA2YzZmNmU2NTJlNzI2OTY3Njg3NDYzNmY2Yzc1NmQ2ZTBhNjM2ZjZlNzQ2NTc4NzQwYTJmNjY3MzY2MGE2NjczNjYyZDY1NzY2NTZlNzQ3MzJkNzI3MzczIj48ZGl2IGNsYXNzPSJwb3J0bGV0U3RhdGljVGV4dCBwb3J0bGV0LXN0YXRpYy1mc2YtZXZlbnRzLXJzcyI+PHAgc3R5bGU9ImZsb2F0OiByaWdodDsiPjxhIGhyZWY9Ii9zdGF0aWMvZnNmb3JnL3Jzcy9ldmVudHMueG1sIiB0aXRsZT0iU3Vic2NyaWJlIHRvIGFuIFJTUyBmZWVkIG9mIEZTRiBldmVudHMiPjxpbWcgc3JjPSIvc3RhdGljL2ZzZm9yZy9jc3MvaW1nL3Jzcy5naWYiIGFsdD0iUlNTIGZlZWQiIC8+PC9hPjwvcD48L2Rpdj4KCjwvZGl2PgoKPGRpdiBpZD0icG9ydGxldHdyYXBwZXItNzA2YzZmNmU2NTJlNzI2OTY3Njg3NDYzNmY2Yzc1NmQ2ZTBhNjM2ZjZlNzQ2NTc4NzQwYTJmNjY3MzY2MGE2NTc2NjU2ZTc0NzMiIGNsYXNzPSJwb3J0bGV0V3JhcHBlciBrc3NhdHRyLXBvcnRsZXRoYXNoLTcwNmM2ZjZlNjUyZTcyNjk2NzY4NzQ2MzZmNmM3NTZkNmUwYTYzNmY2ZTc0NjU3ODc0MGEyZjY2NzM2NjBhNjU3NjY1NmU3NDczIj4KPGRsIGNsYXNzPSJwb3J0bGV0IHBvcnRsZXRFdmVudHMiPgoKICAgIDxkdCBjbGFzcz0icG9ydGxldEhlYWRlciI+CiAgICAgICAgPHNwYW4gY2xhc3M9InBvcnRsZXRUb3BMZWZ0Ij48L3NwYW4+CiAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5mc2Yub3JnL2V2ZW50cyIgY2xhc3M9InRpbGUiPgogICAgICAgICAgICBVcGNvbWluZyBFdmVudHMKICAgICAgICA8L2E+CiAgICAgICAgPHNwYW4gY2xhc3M9InBvcnRsZXRUb3BSaWdodCI+PC9zcGFuPgogICAgPC9kdD4KCiAgICAKICAgIDxkZCBjbGFzcz0icG9ydGxldEl0ZW0gb2RkIj4KICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmZzZi5vcmcvZXZlbnRzLzIwMTIwNzI3LWNhcmFjYXMiIGNsYXNzPSJ0aWxlIiB0aXRsZT0iQ2FyYWNhcywgVmVuZXp1ZWxhIC0gU2FsYSBQbGVuYXJpYSBkZWwgQ2VudHJvIFNpbcOzbiBCb2zDrXZhci4gRWRpZi4gQW5hdWNvIFBhcnF1ZSBDZW50cmFsDQoiPgogICAgICAgICAgICA8aW1nIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgc3JjPSJodHRwOi8vd3d3LmZzZi5vcmcvc3RhdGljL2ZzZm9yZy9jc3MvaW1nL25ld3NpdGVtX2ljb24uZ2lmIiBhbHQ9IkV2ZW50IiAvPgogICAgICAgICAgICAiRWwgc29mdHdhcmUgbGlicmUgZW4gbGEgw6l0aWNhIHkgZW4gbGEgcHLDoWN0aWNhIgogICAgICAgIDwvYT4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InBvcnRsZXRJdGVtRGV0YWlscyI+CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDxzcGFuPkp1bCAyNywgMjAxMiAxMDowMCBBTSAtIDEyOjAwIFBNPC9zcGFuPgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8c3Bhbj4gJm1kYXNoOwogICAgICAgICAgICAgICAgICAgIENhcmFjYXMsIFZlbmV6dWVsYQogICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICA8L3NwYW4+CiAgICA8L2RkPgogICAgCgogICAgPGRkIGNsYXNzPSJwb3J0bGV0Rm9vdGVyIj4KICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmZzZi5vcmcvZXZlbnRzL2FnZ3JlZ2F0b3IvcHJldmlvdXMiIGNsYXNzPSJ0aWxlIj4KICAgICAgICAgICAgPHNwYW4+CiAgICAgICAgICAgICAgICBQcmV2aW91cyBldmVudHMmaGVsbGlwOwogICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgPC9hPgogICAgPC9kZD4KCiAgICA8ZGQgY2xhc3M9InBvcnRsZXRGb290ZXIiPgogICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuZnNmLm9yZy9ldmVudHMiIGNsYXNzPSJ0aWxlIj4KICAgICAgICAgICAgICAgIFVwY29taW5nIGV2ZW50cyZoZWxsaXA7CiAgICAgICAgPC9hPgogICAgICAgIDxzcGFuIGNsYXNzPSJwb3J0bGV0Qm90dG9tTGVmdCI+PC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJwb3J0bGV0Qm90dG9tUmlnaHQiPjwvc3Bhbj4KICAgIDwvZGQ+CjwvZGw+Cgo8L2Rpdj4KCgoKCgkJICAgICAgICAKCQkgICAgICAgICZuYnNwOwoJCSAgICAgIDwvZGl2PgoJICAgICAgCgoJPC9hc2lkZT4KCTwvZGl2PgoKCgoJPC9kaXY+PC9kaXY+CgoJPGRpdiBjbGFzcz0idmlzdWFsTm9QcmludCIgaWQ9Im1pc3Npb24tc3RhdGVtZW50Ij4KCgkgIDxwIGNsYXNzPSJjIj5UaGUgRlNGIGlzIGEgY2hhcml0eSB3aXRoIGEgd29ybGR3aWRlIG1pc3Npb24gdG8gYWR2YW5jZSBzb2Z0d2FyZSBmcmVlZG9tICZtZGFzaDsgPGEgaHJlZj0iL2Fib3V0Ij5sZWFybiBhYm91dCBvdXIgaGlzdG9yeSBhbmQgd29yay48L2E+PC9wPgoKCTwvZGl2PgoKCTxkaXYgaWQ9ImZ0IiBjbGFzcz0idmlzdWFsTm9QcmludCI+Cgk8Zm9vdGVyPgoJPGRpdiBpZD0iZnQtaW5uZXIiIGNsYXNzPSJjdXN0b20tZG9jIj4KCgk8ZGl2IGlkPSJjb3B5cmlnaHQiPgoJIAoKCSAgPHAgY2xhc3M9ImMiPkNvcHlyaWdodCAmY29weTsgMjAwNC0yMDEyIDxhIGhyZWY9Ii9hYm91dC9jb250YWN0Lmh0bWwiIHRpdGxlPSJGaW5kIG91dCBob3cgdG8gY29udGFjdCB1cyI+RnJlZQoJU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jPC9hPi48L3A+CgoJICA8cD5UaGlzIHdvcmsgaXMgbGljZW5zZWQgdW5kZXIgYSA8YSBocmVmPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1uZC8zLjAvIj5DcmVhdGl2ZQoJICBDb21tb25zIEF0dHJpYnV0aW9uLU5vIERlcml2YXRpdmUgV29ya3MgMy4wIGxpY2Vuc2UgKG9yIGxhdGVyCgkgIHZlcnNpb24pPC9hPiAmbWRhc2g7IDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlLWxpc3QuaHRtbCNPcGluaW9uTGljZW5zZXMiPldoeSB0aGlzIGxpY2Vuc2U/PC9hPi48L3A+IAoKCTwvZGl2PgoJPGRpdiBpZD0iZnNmLWxpbmtzLW91dGVyIj4KCTxkaXYgY2xhc3M9Inl1aS1nIHZpc3VhbE5vUHJpbnQgbm9Nb2JpbGUiIGlkPSJmc2YtbGlua3MiPgoJPGRpdj4KICAgIDxuYXY+CiAgICA8ZGl2IGNsYXNzPSJ5dWktZyBmaXJzdCI+CiAgICAgICAgPGRpdiBjbGFzcz0ieXVpLXUgZmlyc3QiIGlkPSJzaXRlbWFwLTEiPgoKICAgICAgICAgIDxwIGNsYXNzPSJuZXRzY2FwZTQiPjxhIGhyZWY9IiNmdCI+U2tpcCBzaXRlbWFwPC9hPiBvciA8YSBocmVmPSIjc2l0ZW1hcC0yIj5za2lwIHRvIGxpY2Vuc2luZyBpdGVtczwvYT48L3A+CgogICAgICA8dWw+CiAgICAgICAgPGxpPjxhIGhyZWY9Ii9hYm91dC8iPkFib3V0PC9hPgoKICAgICAgICA8dWw+CiAgICAgICAgICA8bGk+PGEgaHJlZj0iL2Fib3V0L2xlYWRlcnNoaXAuaHRtbCI+TGVhZGVyc2hpcDwvYT48L2xpPgogICAgICAgICAgPGxpPjxhIGhyZWY9Ii9hYm91dC9zdGFmZiI+U3RhZmY8L2E+PC9saT4KICAgICAgICAgIDxsaT48YSBocmVmPSIvYWJvdXQvY29udGFjdC5odG1sIj5Db250YWN0IFVzPC9hPjwvbGk+CiAgICAgICAgPC91bD48L2xpPgogICAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vbXkuZnNmLm9yZy9kb25hdGUvcHJpdmFjeXBvbGljeS5odG1sIj5Qcml2YWN5IFBvbGljeTwvYT48L2xpPgogICAgICAgIDxsaT48YSBocmVmPSIvY2FtcGFpZ25zIj5DYW1wYWlnbnM8L2E+CiAgICAgICAgPHVsPgoKICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3dpbmRvd3M3c2lucy5vcmcvIj5XaW5kb3dzIDcgU2luczwvYT48L2xpPgogICAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvIj5HTlUgT3BlcmF0aW5nIFN5c3RlbTwvYT48L2xpPgogICAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vZGVmZWN0aXZlYnlkZXNpZ24ub3JnLyI+RGVmZWN0aXZlIGJ5IERlc2lnbjwvYT48L2xpPgogICAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vZW5kc29mdHBhdGVudHMub3JnLyI+RW5kIFNvZnR3YXJlIFBhdGVudHM8L2E+PC9saT4KICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3BsYXlvZ2cub3JnLyI+UGxheU9nZyAmbWRhc2g7IGZyZWUgbWVkaWEgZm9ybWF0czwvYT48L2xpPgoKICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL2xpYnJlcGxhbmV0Lm9yZy8iPkNvbm5lY3Qgd2l0aCBmcmVlIHNvZnR3YXJlIHVzZXJzPC9hPjwvbGk+CiAgICAgIDwvdWw+PC9saT4KICAgICAgPC91bD4KCiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJ5dWktdSIgaWQ9InNpdGVtYXAtMiI+CgogICAgICAgICAgPHAgY2xhc3M9Im5ldHNjYXBlNCI+PGEgaHJlZj0iI3NpdGVtYXAtMyI+U2tpcCB0byBnZW5lcmFsIGl0ZW1zPC9hPjwvcD4KCiAgICAgICA8dWw+CiAgICAgICAgPGxpPjxhIGhyZWY9Ii9saWNlbnNpbmciPkxpY2Vuc2luZzwvYT4KICAgICAgICA8dWw+CiAgICAgICAgPGxpPjxhIGhyZWY9Ii9saWNlbnNpbmcvZWR1Y2F0aW9uIj5FZHVjYXRpb248L2E+PC9saT4KICAgICAgICA8bGk+PGEgaHJlZj0iL2xpY2Vuc2luZy9saWNlbnNlcyI+TGljZW5zZXM8L2E+CiAgICAgICAgPHVsPgogICAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLmh0bWwiPkdOVSBHUEw8L2E+PC9saT4KCiAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLmh0bWwiPkdOVSBBR1BMPC9hPjwvbGk+CiAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9sZ3BsLmh0bWwiPkdOVSBMR1BMPC9hPjwvbGk+CiAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9mZGwuaHRtbCI+R05VIEZETDwvYT48L2xpPjwvdWw+PC9saT4KICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC1mYXEuaHRtbCI+TGljZW5zaW5nIEZBUTwvYT48L2xpPgogICAgICAgIDxsaT48YSBocmVmPSIvbGljZW5zaW5nL2NvbXBsaWFuY2UiPkNvbXBsaWFuY2U8L2E+PC9saT4KICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC1ob3d0by5odG1sIj5Ib3cgdG8gdXNlIEdOVSBsaWNlbnNlcyBmb3IgeW91ciBvd24gc29mdHdhcmU8L2E+PC9saT48L3VsPjwvbGk+CgogICAgICA8L3VsPgoKICAgIAogICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9Inl1aS1nIGZpcnN0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJ5dWktdSBmaXJzdCIgaWQ9InNpdGVtYXAtMyI+CgogICAgICAgICAgPHAgY2xhc3M9Im5ldHNjYXBlNCI+PGEgaHJlZj0iI3NpdGVtYXAtNCI+U2tpcCB0byBwaGlsb3NvcGhpY2FsIGl0ZW1zPC9hPjwvcD4KICAgIAogICAgICA8dWw+CgogICAgICA8bGk+PGEgaHJlZj0iL25ld3MvIj5MYXRlc3QgTmV3czwvYT48dWw+CiAgICAgICAgPGxpPjxhIGhyZWY9Ii9ldmVudHMvIj5VcGNvbWluZyBFdmVudHM8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Ii9ibG9ncy8iPkZTRiBCbG9nczwvYT48L2xpPjwvdWw+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Ii92b2x1bnRlZXIiPlZvbHVudGVlcmluZyBhbmQgaW50ZXJuc2hpcHM8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Ii9yZXNvdXJjZXMvaHciPkhhcmR3YXJlIERhdGFiYXNlPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vZGlyZWN0b3J5LmZzZi5vcmciPkZyZWUgU29mdHdhcmUgRGlyZWN0b3J5PC9hPjwvbGk+CgogICAgICAgIDxsaT48YSBocmVmPSIvcmVzb3VyY2VzLyI+RnJlZSBTb2Z0d2FyZSBSZXNvdXJjZXM8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9wYXRyb24uZnNmLm9yZyI+UGF0cm9uczwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iL2Fzc29jaWF0ZS8iPkFzc29jaWF0ZSBNZW1iZXJzPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSIvYXNzb2NpYXRlL2FjY291bnQvIj5NeSBBY2NvdW50PC9hPjwvbGk+CiAgICAgIDxsaSBjbGFzcz0ibm9yaWdodCI+PGEgaHJlZj0iL2Fib3V0L2NvbnRhY3QuaHRtbCI+Q29udGFjdCBVczwvYT48L2xpPgogICAgICA8L3VsPgoKICAgICAgCiAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ5dWktdSIgaWQ9InNpdGVtYXAtNCI+CgogICAgICAgICAgPHAgY2xhc3M9Im5ldHNjYXBlNCI+PGEgaHJlZj0iI2Z0Ij5Ta2lwIGxpc3Q8L2E+PC9wPgoKICAgICAgPHVsPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL2RvbmF0ZS5mc2Yub3JnIj5Eb25hdGUgdG8gdGhlIEZTRjwvYT48L2xpPgogICAgICAgIDxsaT48YSBocmVmPSIvamZiIj5Kb2luIHRoZSBGU0Y8L2E+PC9saT4KCiAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9waGlsb3NvcGh5LyI+UGhpbG9zb3BoeTwvYT48dWw+CiAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9waGlsb3NvcGh5L2ZyZWUtc3cuaHRtbCI+VGhlIEZyZWUgU29mdHdhcmUgRGVmaW5pdGlvbjwvYT48L2xpPgogICAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvcGhpbG9zb3BoeS9wcmFnbWF0aWMuaHRtbCI+Q29weWxlZnQ6IFByYWdtYXRpYyBJZGVhbGlzbTwvYT48L2xpPgogICAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvcGhpbG9zb3BoeS9mcmVlLWRvYy5odG1sIj5GcmVlIFNvZnR3YXJlIGFuZCBGcmVlIE1hbnVhbHM8L2E+PC9saT4KICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3BoaWxvc29waHkvc2VsbGluZy5odG1sIj5TZWxsaW5nIEZyZWUgU29mdHdhcmU8L2E+PC9saT4KICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3BoaWxvc29waHkvZnMtbW90aXZlcy5odG1sIj5Nb3RpdmVzIGZvciBXcml0aW5nIEZyZWUgU29mdHdhcmU8L2E+PC9saT4KCiAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9waGlsb3NvcGh5L3JpZ2h0LXRvLXJlYWQuaHRtbCI+VGhlIFJpZ2h0IFRvIFJlYWQ8L2E+PC9saT4KICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3BoaWxvc29waHkvb3Blbi1zb3VyY2UtbWlzc2VzLXRoZS1wb2ludC5odG1sIj5XaHkgT3BlbiBTb3VyY2UgTWlzc2VzIHRoZSBQb2ludCBvZiBGcmVlIFNvZnR3YXJlPC9hPjwvbGk+PC91bD48L2xpPgogICAgICAgIDxsaT48YSBocmVmPSIvc2l0ZW1hcCI+Q29tcGxldGUgc2l0ZW1hcDwvYT48L2xpPgogICAgICA8L3VsPgogICAgICAKICAgIDwvZGl2PgogICAgPC9kaXY+CjwvbmF2PgoKPC9kaXY+Cgk8L2Rpdj4KCgk8cCBpZD0iZnNmcyIgY2xhc3M9ImMgdmlzdWFsTm9QcmludCBub01vYmlsZSI+PHNtYWxsPlRoZSBGU0YgYWxzbyBoYXMgc2lzdGVyIG9yZ2FuaXphdGlvbnMgaW4gPGEgaHJlZj0iaHR0cDovL3d3dy5mc2ZmcmFuY2Uub3JnL2luZGV4LmVuLmh0bWwiPkZyYW5jZTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cuZnNmbGEub3JnLyI+TGF0aW4gQW1lcmljYTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cuZnNmZXVyb3BlLm9yZyI+RXVyb3BlPC9hPiBhbmQgPGEgaHJlZj0iaHR0cDovL2ZzZi5vcmcuaW4vIj5JbmRpYTwvYT4uPC9zbWFsbD48L3A+CgoJPC9kaXY+CgoJPC9kaXY+CgoKCgoJPC9mb290ZXI+Cgk8L2Rpdj4KCgkgICAgPCEtLQoJPHJkZjpSREYgeG1sbnM9Imh0dHA6Ly93ZWIucmVzb3VyY2Uub3JnL2NjLyIKCQkgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgoJCSB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgoJPFdvcmsgcmRmOmFib3V0PSJodHRwOi8vd3d3LmZzZi5vcmcvIj4KCTxkYzp0aXRsZT5GcmVlIFNvZnR3YXJlIEZvdW5kYXRpb248L2RjOnRpdGxlPgoJPGRjOmRlc2NyaXB0aW9uPlRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEZTRikgaXMgYSBub25wcm9maXQgd2l0aCBhIHdvcmxkd2lkZSBtaXNzaW9uIHRvIHByb21vdGUgY29tcHV0ZXIgdXNlciBmcmVlZG9tIGFuZCB0byBkZWZlbmQgdGhlIHJpZ2h0cyBvZiBhbGwgZnJlZSBzb2Z0d2FyZSB1c2Vycy48L2RjOmRlc2NyaXB0aW9uPgoJPGxpY2Vuc2UgcmRmOnJlc291cmNlPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1uZC8zLjAvdXMvIiAvPgoJPC9Xb3JrPgoJPExpY2Vuc2UgcmRmOmFib3V0PSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1uZC8zLjAvdXMvIj4KCTwvTGljZW5zZT4KCTwvcmRmOlJERj4KCS0tPgoKCTxkaXYgY2xhc3M9ImMgdmlzdWFsTm9QcmludCBub01vYmlsZSIgaWQ9InBvd2VyZWQtYnkiPgoKCTxoNSBjbGFzcz0ibmV0c2NhcGU0Ij5mc2Yub3JnIGlzIHBvd2VyZWQgYnk6PC9oNT4KCgk8dWw+Cgk8bGkgaWQ9InBvd2VyZWQtYnktcGxvbmUiPjxhIGhyZWY9Imh0dHA6Ly9wbG9uZS5vcmciIHRpdGxlPSJQbG9uZSBQb3dlcmVkIj5QbG9uZTwvYT48L2xpPgoJPGxpIGlkPSJwb3dlcmVkLWJ5LXpvcGUiPjxhIGhyZWY9Imh0dHA6Ly96b3BlLm9yZyIgdGl0bGU9IlBvd2VyZWQgYnkgWm9wZSI+Wm9wZTwvYT48L2xpPgoJPGxpIGlkPSJwb3dlcmVkLWJ5LXB5dGhvbiI+PGEgaHJlZj0iaHR0cDovL3B5dGhvbi5vcmciIHRpdGxlPSJQb3dlcmVkIGJ5IFB5dGhvbiI+UHl0aG9uPC9hPjwvbGk+Cgk8bGkgaWQ9InBvd2VyZWQtYnktY2l2aWNybSI+PGEgaHJlZj0iaHR0cDovL2Npdmljcm0ub3JnIiB0aXRsZT0iUG93ZXJlZCBieSBDaXZpQ1JNIj5DaXZpQ1JNPC9hPjwvbGk+Cgk8bGkgaWQ9InBvd2VyZWQtYnktaHRtbDUiPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL2h0bWwiPkhUTUw1PC9hPjwvbGk+Cgk8L3VsPgoKCTwvZGl2PgoKICAgICAgICA8cCBjbGFzcz0iYyIgc3R5bGU9Im1hcmdpbi10b3A6IDEycHg7Ij48YSBocmVmPSIvYWJvdXQvZmluYW5jaWFsIj48aW1nIHNyYz0iLy9zdGF0aWMuZnNmLm9yZy9ub3N2bi9wbG9uZTMvY2hhcml0eS80c3Rhcjg4eDMxLmdpZiIgYWx0PSJGb3VyIHN0YXIgY2hhcml0eSIgLz48L2E+PC9wPgoKICAgICAgICA8Zm9ybSBjbGFzcz0iYyIgYWN0aW9uPSIuLyIgbWV0aG9kPSJnZXQiIGlkPSJjaG9vc2UtbGFuZ3VhZ2UiPgo8cD48c2VsZWN0IG5hbWU9InNldF9sYW5ndWFnZSI+CiAgPG9wdGlvbiB2YWx1ZT0iYXIiPkFyYWJpYzwvb3B0aW9uPgogIDxvcHRpb24gdmFsdWU9ImJlIj5CZWxhcnVzc2lhbjwvb3B0aW9uPgogIDxvcHRpb24gdmFsdWU9ImJnIj5CdWxnYXJpYW48L29wdGlvbj4KICA8b3B0aW9uIHZhbHVlPSJjYSI+Q2F0YWxhbjwvb3B0aW9uPgogIDxvcHRpb24gdmFsdWU9InpoIj5DaGluZXNlPC9vcHRpb24+CiAgPG9wdGlvbiB2YWx1ZT0ia3ciPkNvcm5pc2g8L29wdGlvbj4KICA8b3B0aW9uIHZhbHVlPSJjcyI+Q3plY2g8L29wdGlvbj4KICA8b3B0aW9uIHZhbHVlPSJkYSI+RGFuaXNoPC9vcHRpb24+CiAgPG9wdGlvbiB2YWx1ZT0iZW4iIHNlbGVjdGVkPSJzZWxlY3RlZCI+RW5nbGlzaDwvb3B0aW9uPgogIDxvcHRpb24gdmFsdWU9ImZyIj5GcmVuY2g8L29wdGlvbj4KICA8b3B0aW9uIHZhbHVlPSJkZSI+R2VybWFuPC9vcHRpb24+CiAgPG9wdGlvbiB2YWx1ZT0iZWwiPkdyZWVrPC9vcHRpb24+CiAgPG9wdGlvbiB2YWx1ZT0iaGUiPkhlYnJldzwvb3B0aW9uPgogIDxvcHRpb24gdmFsdWU9ImhpIj5IaW5kaTwvb3B0aW9uPgogIDxvcHRpb24gdmFsdWU9Iml0Ij5JdGFsaWFuPC9vcHRpb24+CiAgPG9wdGlvbiB2YWx1ZT0iamEiPkphcGFuZXNlPC9vcHRpb24+CiAgPG9wdGlvbiB2YWx1ZT0ia28iPktvcmVhbjwvb3B0aW9uPgogIDxvcHRpb24gdmFsdWU9Im5vIj5Ob3J3ZWdpYW48L29wdGlvbj4KICA8b3B0aW9uIHZhbHVlPSJwbCI+UG9saXNoPC9vcHRpb24+CiAgPG9wdGlvbiB2YWx1ZT0icHQiPlBvcnR1Z3Vlc2U8L29wdGlvbj4KICA8b3B0aW9uIHZhbHVlPSJwdC1iciI+UG9ydHVndWVzZSAoQnJhemlsKTwvb3B0aW9uPgogIDxvcHRpb24gdmFsdWU9InJvIj5Sb21hbmlhbjwvb3B0aW9uPgogIDxvcHRpb24gdmFsdWU9InJ1Ij5SdXNzaWFuPC9vcHRpb24+CiAgPG9wdGlvbiB2YWx1ZT0ic2siPlNsb3Zhazwvb3B0aW9uPgogIDxvcHRpb24gdmFsdWU9ImVzIj5TcGFuaXNoPC9vcHRpb24+CiAgPG9wdGlvbiB2YWx1ZT0ic3YiPlN3ZWRpc2g8L29wdGlvbj4KICA8b3B0aW9uIHZhbHVlPSJ0ciI+VHVya2lzaDwvb3B0aW9uPgogIDxvcHRpb24gdmFsdWU9InVyIj5VcmR1PC9vcHRpb24+CiAgPG9wdGlvbiB2YWx1ZT0iY3kiPldlbHNoPC9vcHRpb24+Cjwvc2VsZWN0PiAmbmJzcDsgPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNlbGVjdCBsYW5ndWFnZSI+PC9wPgo8cD48c21hbGw+U2VuZCB5b3VyIGZlZWRiYWNrIG9uIG91ciB0cmFuc2xhdGlvbnMgYW5kIG5ldyB0cmFuc2xhdGlvbnMgb2YgcGFnZXMgdG8gPGEgaHJlZj0ibWFpbHRvOmNhbXBhaWduc0Bmc2Yub3JnIj5jYW1wYWlnbnNAZnNmLm9yZzwvYT4uPC9zbWFsbD48L3A+CjwvZm9ybT4KCgk8L2Rpdj4gCgoKCgoKCTwvYm9keT4KCTwvaHRtbD4KCgk%3D">Free Software Foundation</A>
++ <DT><A HREF="http://libreplanet.org/" ICON="data:image/x-icon;base64,AAABAAEAEBAAAAAAAABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAEAAAAAAAAAAAAAAAEAAAAAAAC/v78AAAAAAPLy9ABsbakA/f3+APn5+QC6ur0A6urqAEpLbQACBLQApKW3AAULuQDMzMwAGBiDAL29vQCgocsAgnzJALu82QA+PpsAAQOvAOjo6ADZ2dkAysrKALS0zwD5+foAAgKRAAYGdQD19fUADhOjAAQJyACrnqIAxMTLAOnp7gDm5uYAzczNACgobwDg2dEAQkaeAA0RkAAUFnEA0MvQAIBzgAANDYsAk5OyAOTk5ADy8vYA1dXVAD8/cADGxsYA+fn7AAMHvgBzZnQApqauAAEGuQDExMQAAAGmAAoLmgADCMQAxMTdAAwPlwD+/v4ABg7MAF5ehADg4OAA0dHRAAAAoQAYEXAAwsLCALCxwQBnadkAAQGWAPz8/ACgoLgAbm6RANvb5wDr6+sA0dHSALe3uQADB8AAzc3NAGFhbAABAZcAOTtlALi4xwAAAJoA/Pz9AAQHnwADBJcACQl4AFVa3AChl6EAAgW2ABscdAABAq4A2NjYAAAAmwDAwMoAAQKmAAcMswDR0eQAAQSxANvX2wB4aXcAAQGpAAAAkwDW1tYAAgSpACIZZAAAAaEA+vr8AKuirAACBbcA8vLyALOztgADBZYAAACcAAACpwAEA6QAAQKnAPT09QD///8AvL3UADIpigDw8PAABwWOAK6dogBub4kAiozDANLS0gAFC8gAAgW4AP39/QAAAJ0A0NDQAMHBwQDp6ewACg2RAAIFqAAKCokA+/v7AAkOnwAAAaMA7OzsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeHh4eHh4eHh4eHh4eHh4AXh4eHhlbikzZlooeHh4eAF4eHh4hX1JVFweInh4eHgBeHh4XmlAGXNGSB8VeHh4AXg8LhaGcV9zKg0wQF54eAF4K0NNOGthjXNCUwAMS3gBPC82iW+CCRN2Iz4wTwx4AW0GgCc5OU41VnSKTBoOiwEFTz8hHIF5RANdQVRfNIMBeBUhe0o9jB0Pcjdzc1E8AXgsB3AbUlkQRVtnhHNoeAF4i45wJCAlYjJbdYRfY3gBeDwmEn4XMToKZDd6WDx4AXh4VTsIfwt3FGpsfAR4eAF4eHgEEYhQAodXYDx4eHgBeHh4eHg8GC1HPHh4eHh4AQABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA%3D">LibrePlanet</A>
++ <DT><A HREF="http://www.gnu.org/software/gnuzilla/addons.html" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAAGFBMVEVFRUV+fn6mpqa/v7/Ozs7Y2Njg4OD8/Pwuhn+TAAAAAWJLR0QAiAUdSAAAAAlwSFlzAAALEQAACxEBf2RfkQAAAAd0SU1FB9MBDhQ6Gd8s57cAAAEVSURBVBgZBcGxVtpgGADQL9gHSBzqSognzMixmcWWzB6pmRHhnyvku6/fewMAIPD3TwHmQxHs6vr+A16bphNum/vV0x429201hcPjAGBTDZGnR/Kw1U181+u4HXvOdSxjUcztz8jjg1xGVBG9XPYxt4PviKiaWLg168iXtbrq+mPT1utjNcR1U73deRnL43M2sRgj3+oYs8uL3rLphPd2QWmHbMu/VS/cnk6UdtSW657g9yBlcZ0UAkUWzPvyRaAYmfd+HT4IZtvC59ibEJxXiqJjQpBpNEufBYE0McoOAunGhRMEFIPc7h4goJigQEBxk8u7AgEpL3IEAUZfcgAByGFXQACm5+4MAuB19QMEgI8CAgDgP4rivVgoKP6ZAAAAAElFTkSuQmCC">Free addons</A>
++ <DT><A HREF="http://www.h-node.org/" ICON="data:image/x-icon;base64,AAABAAEAEBAAAAAAAABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAEAAAAAAAAAAAAAAAEAAAAAAAC7zrYAWYhNANjj1QA9fEcAEEwBAHTQkwAeVRkAPXMvALvOtwASVQEAHFcUAH/bpgB60p8AKnQmAGO1fgAjaRwALmA1AA5EAQDM2sgAN3ApAG7EjgC5zbQAVJxrAChwIgC0ya8ALmczAHXJmQBNf0EAgd6oADhwKgC8z7cA7vPtANTg0QANPwAARIhSADtyLQBzzpQAus21AEeKVQDC070AieyzALzPuAB93qEALGYvAO/z7gBEiVAAasWFAFuJTwBKil4AXotSAEuKXgAORQEAD0gBABlDFwBWpmoALGYwAGCNVQAbYBAAHGAQABBOAQCI6rIAjPG3AB1bDgAaXg4A////AGaRWwB/2qYAUYJEAEx+PwAZXAwAm7eUAD51MADN28oAJmwhACRiFAAzeTYAasaFAB9eDwBkt34Aus62AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPT09PT09PT09PT09PT09PT09PT0OIjALPRQmMkI9PT09PT09OkcHNQU+Q0oQPT09PT09PToVGDQtI0ABKz09PT09PT06JRg0Nh1ALxk9PT09PT09OiUYIS4TQC83PT09PT09PTpPSDsGG0BEAz09PT09PT06T0BGMRIsTRY9PT09PT09OgACJx8gQwooPT09PT09PToICAkJCUkkPT09PT09PT05HggETio9PT09PT09PT09Px4IERw9PT09PT09PT09PUUpCDMMPT09PT09PT09PT0NOEEEGj09PT09PT09PT09TBcPSzw9PT09PT09PT09PT09PT09PT09PT09PQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D">h-node</A>
</DL><p>
</DL><p>
-diff -urN iceweasel-13.0.orig/browser/base/content/abouthome/aboutHome.js iceweasel-13.0/browser/base/content/abouthome/aboutHome.js
---- mozilla-release.orig/browser/base/content/abouthome/aboutHome.js 2012-06-01 09:03:47.000000000 -0300
-+++ mozilla-release/browser/base/content/abouthome/aboutHome.js 2012-06-13 18:07:51.217531774 -0300
-@@ -38,104 +38,6 @@
- *
- * ***** END LICENSE BLOCK ***** */
-
--// If a definition requires additional params, check that the final search url
--// is handled correctly by the engine.
--const SEARCH_ENGINES = {
+diff -Naur iceweasel-14.0.1.orig/browser/base/content/abouthome/aboutHome.js iceweasel-14.0.1/browser/base/content/abouthome/aboutHome.js
+--- mozilla-build.orig/browser/base/content/abouthome/aboutHome.js 2012-07-12 14:27:37.000000000 -0300
++++ mozilla-build/browser/base/content/abouthome/aboutHome.js 2012-07-17 23:19:05.593724417 -0300
+@@ -41,99 +41,348 @@
+ // If a definition requires additional params, check that the final search url
+ // is handled correctly by the engine.
+ const SEARCH_ENGINES = {
- "Google": {
-- image: "data:image/png;base64," +
++ "Duck Duck Go (Lite)": {
+ image: "data:image/png;base64," +
- "iVBORw0KGgoAAAANSUhEUgAAAEYAAAAcCAYAAADcO8kVAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ" +
- "bWFnZVJlYWR5ccllPAAADHdJREFUeNrsWQl0VNUZvve9NzNJJpnsIkuEJMoqAVJAodCKoFUsAUFQ" +
- "qhig0npaRUE8Viv1FFtQWxSwLXVhEawbhOWobOICFCGiEIIQRGIgCSFjMslsb9567+1/Z+7gmIYK" +
@@ -375,11 +400,159 @@ diff -urN iceweasel-13.0.orig/browser/base/content/abouthome/aboutHome.js icewea
- "7K/7IvC/CRhZ6Ep6evGGyXJS3kAsp3SGcgLKc7uSktBhrW7ZFq32r/HHCVbb0P9fBSYOTpIoJ5SE" +
- "7GUnpHbrbG8EzsfWfwgwAEfC/ToQIhkhAAAAAElFTkSuQmCC"
- , params: "source=hp&channel=np"
-- }
--
++ "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" +
++ "RU5ErkJggg%3D%3D"
+ }
+
-, "Яндекс":
- {
-- image: "data:image/png;base64," +
++ "Seeks Search": {
+ image: "data:image/png;base64," +
- "iVBORw0KGgoAAAANSUhEUgAAAEYAAAAcCAYAAADcO8kVAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ" +
- "bWFnZVJlYWR5ccllPAAABWFJREFUeNrsWWtsVEUUnltLH7tbaeuDbfCBojUoBTGmooLE+Igx+gON" +
- "RvEJhEQNUdEYA0Ji4xNf2Bg1iBJJrGBC+CEBNYoxxmh94CMKRE2MitBqoZRi6bbdZT3TfhM/TmZ2" +
@@ -406,13 +579,199 @@ diff -urN iceweasel-13.0.orig/browser/base/content/abouthome/aboutHome.js icewea
- "/UOfx9jvvTHBKP+/RmKRoHwIiYg8pgQJsszTKFYSV2qC0VcShyqnqlEKRpolqsAyFfnpKmLOnOgr" +
- "VAVirhYnYzsZLbgSe57nwtL375N8H+Oy3H2qKpAKEL5eVc65E04rD2NW66uWrUDobKnAnPs7PR5+" +
- "tLFQHjMS0knhEZLdim/8bxId+RetX/4RYACXlwEEPBQycwAAAABJRU5ErkJggg=="
-- }
--};
--
++ "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%3D%3D"
+ }
++
++ "YaCy": {
++ }
++
+ };
+
// The process of adding a new default snippet involves:
- // * add a new entity to aboutHome.dtd
- // * add a <span/> for it in aboutHome.xhtml
-@@ -143,7 +45,7 @@
+@@ -143,7 +392,7 @@
// The <a/> part of the snippet will be linked to the corresponding url.
const DEFAULT_SNIPPETS_URLS = [
"http://www.mozilla.com/firefox/features/?WT.mc_ID=default1"
diff --git a/libre/iceweasel-libre/shared-libs.patch b/libre/iceweasel-libre/shared-libs.patch
new file mode 100644
index 000000000..1f22b2b0d
--- /dev/null
+++ b/libre/iceweasel-libre/shared-libs.patch
@@ -0,0 +1,12 @@
+diff -Nur mozilla-release.orig/browser/installer/Makefile.in mozilla-release/browser/installer/Makefile.in
+--- mozilla-release.orig/browser/installer/Makefile.in 2012-07-17 16:19:29.480356991 +0000
++++ mozilla-release/browser/installer/Makefile.in 2012-07-17 17:32:41.250937293 +0000
+@@ -50,7 +50,7 @@
+ MOZ_PKG_MANIFEST_P = $(srcdir)/package-manifest.in
+ # Some files have been already bundled with xulrunner
+ ifndef SYSTEM_LIBXUL
+-MOZ_PKG_FATAL_WARNINGS = 1
++MOZ_PKG_FATAL_WARNINGS = 0
+ endif
+
+ MOZ_NONLOCALIZED_PKG_LIST = \
diff --git a/libre/lirc-libre/PKGBUILD b/libre/lirc-libre/PKGBUILD
index 3b73a9f2f..c4d8b1e95 100644
--- a/libre/lirc-libre/PKGBUILD
+++ b/libre/lirc-libre/PKGBUILD
@@ -6,7 +6,7 @@ _pkgbase=lirc
pkgbase=lirc-libre
pkgname=('lirc-libre' 'lirc-utils-libre')
pkgver=0.9.0
-pkgrel=20
+pkgrel=21
epoch=1
_extramodules=extramodules-3.4-LIBRE
arch=('i686' 'x86_64' 'mips64el')
diff --git a/multilib/zsnes/PKGBUILD b/multilib/zsnes/PKGBUILD
index bb6efb9cc..0cf2c0e60 100644
--- a/multilib/zsnes/PKGBUILD
+++ b/multilib/zsnes/PKGBUILD
@@ -1,4 +1,4 @@
-# $Id: PKGBUILD 73720 2012-07-14 14:32:44Z heftig $
+# $Id: PKGBUILD 73928 2012-07-17 06:23:12Z svenstaro $
# Maintainer: Sven-Hendrik Haase <sh@lutzhaase.com>
# Contributor: Frank Tetzel <frank.tetzel@mailbox.tu-dresden.de>
# Contributor: Hugo Doria <hugo@archlinux.org>
@@ -6,7 +6,7 @@
pkgname=zsnes
pkgver=1.51
-pkgrel=13
+pkgrel=15
pkgdesc="Super Nintendo emulator"
url="http://www.zsnes.com/"
arch=('i686' 'x86_64')