From b21e43357c66df6824536793bf41bbd1cbdf1a72 Mon Sep 17 00:00:00 2001
From: Vlad Voicu <vladv@rosedu.org>
Date: Fri, 2 Mar 2012 12:01:11 +0200
Subject: Added spirit to bundled boost


diff --git a/3rdParty/Boost/src/boost/function_types/components.hpp b/3rdParty/Boost/src/boost/function_types/components.hpp
new file mode 100644
index 0000000..a4432c5
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/components.hpp
@@ -0,0 +1,431 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+#ifndef BOOST_FT_COMPONENTS_HPP_INCLUDED
+#define BOOST_FT_COMPONENTS_HPP_INCLUDED
+
+#include <cstddef>
+
+#include <boost/config.hpp>
+
+#include <boost/detail/workaround.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/type_traits/detail/template_arity_spec.hpp>
+
+#include <boost/type_traits/integral_constant.hpp>
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/integral_c.hpp>
+#include <boost/mpl/vector/vector0.hpp>
+
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x656))
+#   include <boost/type_traits/remove_cv.hpp>
+
+#   include <boost/mpl/identity.hpp>
+#   include <boost/mpl/bitand.hpp>
+#   include <boost/mpl/vector/vector10.hpp>
+#   include <boost/mpl/front.hpp>
+#   include <boost/mpl/begin.hpp>
+#   include <boost/mpl/advance.hpp>
+#   include <boost/mpl/iterator_range.hpp>
+#   include <boost/mpl/joint_view.hpp>
+#   include <boost/mpl/equal_to.hpp>
+#   include <boost/mpl/copy.hpp>
+#   include <boost/mpl/front_inserter.hpp>
+
+#   include <boost/function_types/detail/classifier.hpp>
+#endif
+
+#ifndef BOOST_FT_NO_CV_FUNC_SUPPORT
+#   include <boost/mpl/remove.hpp>
+#endif
+
+#include <boost/function_types/config/config.hpp>
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#   if   BOOST_FT_MAX_ARITY < 10
+#     include <boost/mpl/vector/vector10.hpp>
+#   elif BOOST_FT_MAX_ARITY < 20
+#     include <boost/mpl/vector/vector20.hpp>
+#   elif BOOST_FT_MAX_ARITY < 30
+#     include <boost/mpl/vector/vector30.hpp>
+#   elif BOOST_FT_MAX_ARITY < 40
+#     include <boost/mpl/vector/vector40.hpp>
+#   elif BOOST_FT_MAX_ARITY < 50
+#     include <boost/mpl/vector/vector50.hpp>
+#   endif
+#else
+#   include <boost/function_types/detail/classifier.hpp>
+#endif
+
+#include <boost/function_types/detail/class_transform.hpp>
+#include <boost/function_types/property_tags.hpp>
+
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+namespace boost 
+{ 
+  namespace function_types 
+  {
+
+    using mpl::placeholders::_;
+
+    template< typename T, typename ClassTypeTransform = add_reference<_> > 
+    struct components;
+
+    namespace detail 
+    {
+      template<typename T, typename L> struct components_impl;
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x565))
+      template<typename T, typename OrigT, typename L> struct components_bcc;
+#endif
+    }
+
+    template<typename T, typename ClassTypeTransform> 
+    struct components
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x565))
+      : detail::components_impl<T, ClassTypeTransform>
+#else
+      : detail::components_bcc<typename remove_cv<T>::type,T,
+            ClassTypeTransform>
+#endif
+    { 
+      typedef components<T,ClassTypeTransform> type;
+
+      BOOST_MPL_AUX_LAMBDA_SUPPORT(2,components,(T,ClassTypeTransform))
+    };
+
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+  namespace detail {
+
+    struct components_mpl_sequence_tag; 
+
+    struct components_non_func_base
+    {
+      typedef mpl::vector0<> types;
+      typedef void function_arity;
+
+      typedef detail::constant<0> bits;
+      typedef detail::constant<0> mask;
+
+      typedef components_mpl_sequence_tag tag;
+    };
+
+    template
+    < typename Components
+    , typename IfTagged
+    , typename ThenTag
+    , typename DefaultBase = components_non_func_base
+    >
+    struct retagged_if
+      : mpl::if_
+        < detail::represents_impl<Components, IfTagged>
+        , detail::changed_tag<Components,IfTagged,ThenTag>
+        , DefaultBase
+        >::type
+    { };
+
+    // We detect plain function types and function references as function 
+    // pointers by recursive instantiation of components_impl. 
+    // The third specialization of components_impl makes sure the recursion 
+    // terminates (when adding pointers).
+    template<typename T, typename L>
+    struct components_impl
+      : detail::retagged_if
+        < detail::components_impl<T*,L>
+        , pointer_tag, /* --> */ function_tag >
+    { };
+    template<typename T, typename L>
+    struct components_impl<T&, L>
+      : detail::retagged_if
+        < detail::components_impl<T*,L>
+        , pointer_tag, /* --> */ reference_tag >
+    { };
+
+#if !BOOST_FT_NO_CV_FUNC_SUPPORT
+    // Retry the type with a member pointer attached to detect cv functions
+    class a_class;
+
+    template<typename Base, typename T, typename L>
+    struct cv_func_base
+      : detail::retagged_if<Base,member_pointer_tag,function_tag>
+    {
+      typedef typename
+        mpl::remove
+          < typename Base::types
+          , typename detail::class_transform<a_class,L>::type>::type
+      types;
+    };
+
+    template<typename T, typename L>
+    struct components_impl<T*, L>
+      : mpl::if_
+        < detail::represents_impl< detail::components_impl<T a_class::*, L>
+                                 , member_pointer_tag >
+        , detail::cv_func_base< detail::components_impl<T a_class::*, L>, T, L>
+        , components_non_func_base
+        >::type
+    { };
+
+    template<typename T, typename L>
+    struct components_impl<T a_class::*, L>
+      : components_non_func_base
+    { };
+#else
+    template<typename T, typename L>
+    struct components_impl<T*, L>
+      : components_non_func_base
+    { }; 
+#endif
+
+    template<typename T, typename L>
+    struct components_impl<T* const, L> 
+      : components_impl<T*,L>
+    { };
+
+    template<typename T, typename L>
+    struct components_impl<T* volatile, L> 
+      : components_impl<T*,L>
+    { };
+
+    template<typename T, typename L>
+    struct components_impl<T* const volatile, L> 
+      : components_impl<T*,L>
+    { };
+
+    template<typename T, typename L>
+    struct components_impl<T const, L> 
+      : components_impl<T,L>
+    { };
+
+    template<typename T, typename L>
+    struct components_impl<T volatile, L> 
+      : components_impl<T,L>
+    { };
+
+    template<typename T, typename L>
+    struct components_impl<T const volatile, L> 
+      : components_impl<T,L>
+    { };
+
+
+    template<typename T, class C>
+    struct member_obj_ptr_result
+    { typedef T & type; };
+
+    template<typename T, class C>
+    struct member_obj_ptr_result<T, C const>
+    { typedef T const & type; };
+
+    template<typename T, class C>
+    struct member_obj_ptr_result<T, C volatile>
+    { typedef T volatile & type; };
+
+    template<typename T, class C>
+    struct member_obj_ptr_result<T, C const volatile>
+    { typedef T const volatile & type; };
+
+    template<typename T, class C>
+    struct member_obj_ptr_result<T &, C>
+    { typedef T & type; };
+
+    template<typename T, class C>
+    struct member_obj_ptr_result<T &, C const>
+    { typedef T & type; };
+
+    template<typename T, class C>
+    struct member_obj_ptr_result<T &, C volatile>
+    { typedef T & type; };
+
+    template<typename T, class C>
+    struct member_obj_ptr_result<T &, C const volatile>
+    { typedef T & type; };
+
+    template<typename T, class C, typename L>
+    struct member_obj_ptr_components
+      : member_object_pointer_base
+    {
+      typedef function_types::components<T C::*, L> type;
+      typedef components_mpl_sequence_tag tag;
+
+      typedef mpl::integral_c<std::size_t,1> function_arity;
+
+      typedef mpl::vector2< typename detail::member_obj_ptr_result<T,C>::type,
+          typename detail::class_transform<C,L>::type > types;
+    };
+
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x565))
+#   define BOOST_FT_variations BOOST_FT_pointer|BOOST_FT_member_pointer
+
+    template<typename T, class C, typename L>
+    struct components_impl<T C::*, L>
+      : member_obj_ptr_components<T,C,L>
+    { };
+
+#else  
+#   define BOOST_FT_variations BOOST_FT_pointer
+
+    // This workaround removes the member pointer from the type to allow 
+    // detection of member function pointers with BCC. 
+    template<typename T, typename C, typename L>
+    struct components_impl<T C::*, L>
+      : detail::retagged_if
+        < detail::components_impl<typename boost::remove_cv<T>::type *, L>
+        , pointer_tag, /* --> */ member_function_pointer_tag
+        , member_obj_ptr_components<T,C,L> >
+    { };
+
+    // BCC lets us test the cv-qualification of a function type by template 
+    // partial specialization - so we use this bug feature to find out the 
+    // member function's cv-qualification (unfortunately there are some 
+    // invisible modifiers that impose some limitations on these types even if
+    // we remove the qualifiers, So we cannot exploit the same bug to make the 
+    // library work for cv-qualified function types).
+    template<typename T> struct encode_cv
+    { typedef char (& type)[1]; BOOST_STATIC_CONSTANT(std::size_t, value = 1); };
+    template<typename T> struct encode_cv<T const *>
+    { typedef char (& type)[2]; BOOST_STATIC_CONSTANT(std::size_t, value = 2); };
+    template<typename T> struct encode_cv<T volatile *>
+    { typedef char (& type)[3]; BOOST_STATIC_CONSTANT(std::size_t, value = 3); };
+    template<typename T> struct encode_cv<T const volatile *> 
+    { typedef char (& type)[4]; BOOST_STATIC_CONSTANT(std::size_t, value = 4); };
+
+    // For member function pointers we have to use a function template (partial
+    // template specialization for a member pointer drops the cv qualification 
+    // of the function type).
+    template<typename T, typename C>
+    typename encode_cv<T *>::type mfp_cv_tester(T C::*);
+
+    template<typename T> struct encode_mfp_cv
+    { 
+      BOOST_STATIC_CONSTANT(std::size_t, value = 
+          sizeof(detail::mfp_cv_tester((T)0L))); 
+    };
+
+    // Associate bits with the CV codes above.
+    template<std::size_t> struct cv_tag_mfp_impl;
+
+    template<typename T> struct cv_tag_mfp
+      : detail::cv_tag_mfp_impl
+        < ::boost::function_types::detail::encode_mfp_cv<T>::value >
+    { };
+
+    template<> struct cv_tag_mfp_impl<1> : non_cv              { };
+    template<> struct cv_tag_mfp_impl<2> : const_non_volatile  { };
+    template<> struct cv_tag_mfp_impl<3> : volatile_non_const  { };
+    template<> struct cv_tag_mfp_impl<4> : cv_qualified        { };
+
+    // Metafunction to decode the cv code and apply it to a type.
+    // We add a pointer, because otherwise cv-qualifiers won't stick (another bug).
+    template<typename T, std::size_t CV> struct decode_cv;
+
+    template<typename T> struct decode_cv<T,1> : mpl::identity<T *>          {};
+    template<typename T> struct decode_cv<T,2> : mpl::identity<T const *>    {};
+    template<typename T> struct decode_cv<T,3> : mpl::identity<T volatile *> {};
+    template<typename T> struct decode_cv<T,4> 
+                                         : mpl::identity<T const volatile *> {};
+
+    // The class type transformation comes after adding cv-qualifiers. We have
+    // wrap it to remove the pointer added in decode_cv_impl.
+    template<typename T, typename L> struct bcc_class_transform_impl;
+    template<typename T, typename L> struct bcc_class_transform_impl<T *, L>
+      : class_transform<T,L> 
+    { };
+
+    template<typename T, typename D, typename L> struct bcc_class_transform 
+      : bcc_class_transform_impl
+        < typename decode_cv
+          < T
+          , ::boost::function_types::detail::encode_mfp_cv<D>::value 
+          >::type
+        , L
+        > 
+    { };
+
+    // After extracting the member pointee from the type the class type is still
+    // in the type (somewhere -- you won't see with RTTI, that is) and that type
+    // is flagged unusable and *not* identical to the nonmember function type.
+    // We can, however, decompose this type via components_impl but surprisingly
+    // a pointer to the const qualified class type pops up again as the first 
+    // parameter type. 
+    // We have to replace this type with the properly cv-qualified and 
+    // transformed class type, integrate the cv qualification into the bits.
+    template<typename Base, typename MFP, typename OrigT, typename L>
+    struct mfp_components;
+
+
+    template<typename Base, typename T, typename C, typename OrigT, typename L>
+    struct mfp_components<Base,T C::*,OrigT,L> 
+    {
+    private:
+      typedef typename mpl::front<typename Base::types>::type result_type;
+      typedef typename detail::bcc_class_transform<C,OrigT,L>::type class_type;
+
+      typedef mpl::vector2<result_type, class_type> result_and_class_type;
+
+      typedef typename 
+        mpl::advance
+        < typename mpl::begin<typename Base::types>::type
+        , typename mpl::if_
+          < mpl::equal_to< typename detail::classifier<OrigT>::function_arity
+                         , typename Base::function_arity >
+          , mpl::integral_c<int,2> , mpl::integral_c<int,1> 
+          >::type
+        >::type
+      from;
+      typedef typename mpl::end<typename Base::types>::type to;
+
+      typedef mpl::iterator_range<from,to> param_types;
+
+      typedef mpl::joint_view< result_and_class_type, param_types> types_view;
+    public:
+
+      typedef typename 
+        mpl::reverse_copy<types_view, mpl::front_inserter< mpl::vector0<> > >::type 
+      types;
+
+      typedef typename 
+        function_types::tag< Base, detail::cv_tag_mfp<OrigT> >::bits 
+      bits;
+
+      typedef typename Base::mask mask;
+
+      typedef typename detail::classifier<OrigT>::function_arity function_arity;
+
+      typedef components_mpl_sequence_tag tag;
+    };
+
+    // Now put it all together: detect cv-qualification of function types and do
+    // the weird transformations above for member function pointers.
+    template<typename T, typename OrigT, typename L>
+    struct components_bcc
+      : mpl::if_
+        < detail::represents_impl< detail::components_impl<T,L>
+                                 , member_function_pointer_tag>
+        , detail::mfp_components<detail::components_impl<T,L>,T,OrigT,L>
+        , detail::components_impl<T,L>
+        >::type
+    { };
+
+#endif // end of BORLAND WORKAROUND
+
+#define BOOST_FT_al_path boost/function_types/detail/components_impl
+#include <boost/function_types/detail/pp_loop.hpp>
+
+  } } // namespace function_types::detail
+
+  BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(2,function_types::components)
+
+} // namespace ::boost
+
+#include <boost/function_types/detail/components_as_mpl_sequence.hpp>
+#include <boost/function_types/detail/retag_default_cc.hpp>
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/function_types/config/cc_names.hpp b/3rdParty/Boost/src/boost/function_types/config/cc_names.hpp
new file mode 100644
index 0000000..ab69d64
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/config/cc_names.hpp
@@ -0,0 +1,31 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+#ifndef BOOST_FT_CONFIG_CC_NAMES_HPP_INCLUDED
+#define BOOST_FT_CONFIG_CC_NAMES_HPP_INCLUDED
+
+#define BOOST_FT_BUILTIN_CC_NAMES \
+  (( IMPLICIT           , implicit_cc , BOOST_PP_EMPTY                ))\
+  (( CDECL              , cdecl_cc    , BOOST_PP_IDENTITY(__cdecl   ) ))\
+  (( STDCALL            , stdcall_cc  , BOOST_PP_IDENTITY(__stdcall ) ))\
+  (( PASCAL             , pascal_cc   , BOOST_PP_IDENTITY(pascal    ) ))\
+  (( FASTCALL           , fastcall_cc , BOOST_PP_IDENTITY(__fastcall) ))\
+  (( CLRCALL            , clrcall_cc  , BOOST_PP_IDENTITY(__clrcall ) ))\
+  (( THISCALL           , thiscall_cc , BOOST_PP_IDENTITY(__thiscall) ))\
+  (( IMPLICIT_THISCALL  , thiscall_cc , BOOST_PP_EMPTY                )) 
+
+// append user-defined cc names to builtin ones
+#ifdef BOOST_FT_CC_NAMES 
+#   define BOOST_FT_CC_NAMES_SEQ BOOST_FT_BUILTIN_CC_NAMES BOOST_FT_CC_NAMES
+#   define BOOST_FT_CC_PREPROCESSING 1
+#else
+#   define BOOST_FT_CC_NAMES_SEQ BOOST_FT_BUILTIN_CC_NAMES
+#endif
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/function_types/config/compiler.hpp b/3rdParty/Boost/src/boost/function_types/config/compiler.hpp
new file mode 100644
index 0000000..151c856
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/config/compiler.hpp
@@ -0,0 +1,116 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+#ifndef BOOST_FT_CONFIG_COMPILER_HPP_INCLUDED
+#define BOOST_FT_CONFIG_COMPILER_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#if defined(BOOST_MSVC)
+
+#   if BOOST_MSVC < 1310
+#     error "unsupported compiler version"
+#   endif
+
+#   ifdef BOOST_FT_AUTODETECT_CALLING_CONVENTIONS
+
+      // enable clrcall calling covention (call to .NET managed code) when
+      // compiling with /clr 
+#     if BOOST_MSVC >= 1400 && defined(__cplusplus_cli)
+#       ifndef BOOST_FT_CC_CLRCALL
+#       define BOOST_FT_CC_CLRCALL callable_builtin
+#       endif
+#     endif
+
+      // Intel x86 architecture specific calling conventions
+#     ifdef _M_IX86
+#       define BOOST_FT_COMMON_X86_CCs callable_builtin
+#       if BOOST_MSVC < 1400
+          // version 7.1 is missing a keyword to specify the thiscall cc ...
+#         ifndef BOOST_FT_CC_IMPLICIT_THISCALL
+#         define BOOST_FT_CC_IMPLICIT_THISCALL non_variadic|member|callable_builtin
+#         ifndef BOOST_FT_CONFIG_OK
+#           pragma message("INFO| /Gd /Gr /Gz will compiler options will cause")
+#           pragma message("INFO| a compile error.")
+#           pragma message("INFO| Reconfigure Boost.FunctionTypes in this case.")
+#           pragma message("INFO| This message can be suppressed by defining")
+#           pragma message("INFO| BOOST_FT_CONFIG_OK.")
+#         endif
+#         endif
+#       else 
+          // ...introduced in version 8
+#         ifndef BOOST_FT_CC_THISCALL
+#         define BOOST_FT_CC_THISCALL non_variadic|member|callable_builtin
+#         endif
+#       endif
+#     endif
+#   endif
+
+#elif defined(__GNUC__) && !defined(BOOST_INTEL_LINUX)
+
+#   if __GNUC__ < 3
+#     error "unsupported compiler version"
+#   endif
+
+#   ifdef BOOST_FT_AUTODETECT_CALLING_CONVENTIONS
+
+#     if defined(__i386__)
+#       // see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20439
+#       // see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29328
+#       if BOOST_WORKAROUND(__GNUC__,BOOST_TESTED_AT(4))
+#         ifndef BOOST_FT_CC_IMPLICIT 
+#         define BOOST_FT_CC_IMPLICIT member|callable_builtin
+#         endif
+#         define BOOST_FT_COMMON_X86_CCs non_member|callable_builtin
+#       else
+#         define BOOST_FT_COMMON_X86_CCs callable_builtin
+#       endif
+#     else
+#       ifndef BOOST_FT_CC_IMPLICIT
+#       define BOOST_FT_CC_IMPLICIT callable_builtin
+#       endif
+#     endif
+#   endif
+
+#   if (defined(BOOST_FT_CC_CDECL) || defined(BOOST_FT_COMMON_X86_CCs)) \
+        && !defined(__cdecl)
+#     define __cdecl __attribute__((__cdecl__))
+#   endif
+#   if (defined(BOOST_FT_CC_STDCALL) || defined(BOOST_FT_COMMON_X86_CCs)) \
+        && !defined(__stdcall)
+#     define __stdcall __attribute__((__stdcall__))
+#   endif
+#   if (defined(BOOST_FT_CC_FASTCALL) || defined(BOOST_FT_COMMON_X86_CCs)) \
+        && !defined(__fastcall)
+#     define __fastcall __attribute__((__fastcall__))
+#   endif
+
+#elif defined(__BORLANDC__)
+
+#   if __BORLANDC__ < 0x550
+#     error "unsupported compiler version"
+#   elif __BORLANDC__ > 0x565
+#     pragma message("WARNING: library untested with this compiler version")
+#   endif
+
+#   ifdef BOOST_FT_AUTODETECT_CALLING_CONVENTIONS
+#     define BOOST_FT_COMMON_X86_CCs callable_builtin
+#   endif
+
+    // syntactic specialities of cc specifier
+#   define BOOST_FT_SYNTAX(result,lparen,cc_spec,type_mod,name,rparen) \
+                        result() cc_spec() lparen() type_mod() name() rparen()
+#else
+    // only enable default calling convention
+#   define BOOST_FT_CC_IMPLICIT callable_builtin
+#endif
+
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/function_types/config/config.hpp b/3rdParty/Boost/src/boost/function_types/config/config.hpp
new file mode 100644
index 0000000..7ec8e1e
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/config/config.hpp
@@ -0,0 +1,59 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+#ifndef BOOST_FT_CONFIG_HPP_INCLUDED
+#define BOOST_FT_CONFIG_HPP_INCLUDED
+
+#include <boost/function_types/config/compiler.hpp>
+#include <boost/function_types/config/cc_names.hpp>
+
+// maximum allowed arity
+#ifndef BOOST_FT_MAX_ARITY
+#define BOOST_FT_MAX_ARITY 20
+#endif
+
+// the most common calling conventions for x86 architecture can be enabled at
+// once in the compiler config
+#ifdef BOOST_FT_COMMON_X86_CCs
+#   ifndef BOOST_FT_CC_CDECL
+#   define BOOST_FT_CC_CDECL BOOST_FT_COMMON_X86_CCs
+#   endif
+#   ifndef BOOST_FT_CC_STDCALL
+#   define BOOST_FT_CC_STDCALL non_variadic|BOOST_FT_COMMON_X86_CCs
+#   endif
+#   ifndef BOOST_FT_CC_FASTCALL
+#   define BOOST_FT_CC_FASTCALL non_variadic|BOOST_FT_COMMON_X86_CCs
+#   endif
+#endif
+
+// where to place the cc specifier (the common way)
+#ifndef BOOST_FT_SYNTAX
+#   define BOOST_FT_SYNTAX(result,lparen,cc_spec,type_mod,name,rparen) \
+                        result() lparen() cc_spec() type_mod() name() rparen()
+#endif
+
+// param for nullary functions
+// set to "void" for compilers that require nullary functions to read 
+// "R (void)" in template partial specialization
+#ifndef BOOST_FT_NULLARY_PARAM
+#define BOOST_FT_NULLARY_PARAM 
+#endif
+
+// there is a pending defect report on cv qualified function types, so support
+// for these types is disabled, unless for compilers where it's known to work
+#ifndef BOOST_FT_NO_CV_FUNC_SUPPORT
+#define BOOST_FT_NO_CV_FUNC_SUPPORT 1
+#endif
+
+// full preprocessing implies preprocessing of the ccs
+#if defined(BOOST_FT_PREPROCESSING_MODE) && !defined(BOOST_FT_CC_PREPROCESSING)
+#   define BOOST_FT_CC_PREPROCESSING 1
+#endif
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/class_transform.hpp b/3rdParty/Boost/src/boost/function_types/detail/class_transform.hpp
new file mode 100644
index 0000000..ef9a225
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/class_transform.hpp
@@ -0,0 +1,62 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+#ifndef BOOST_FT_DETAIL_CLASS_TRANSFORM_HPP_INCLUDED
+#define BOOST_FT_DETAIL_CLASS_TRANSFORM_HPP_INCLUDED
+
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/always.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/placeholders.hpp>
+
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/add_pointer.hpp>
+#include <boost/type_traits/add_reference.hpp>
+
+namespace boost { namespace function_types { namespace detail {
+
+using mpl::placeholders::_;
+
+// Transformation metafunction for the class type of member function pointers.
+template<typename T, typename L>
+struct class_transform
+{ typedef typename mpl::apply1<L,T>::type type; };
+
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+// We can short-circuit the mechanism implemented in the primary template for 
+// the most common lambda expression and save both the "un-lambdaing" and the
+// type traits invocation (we know that T can only be a class type).
+
+template<typename T> struct class_transform< T, mpl::identity<_> >
+{ typedef T type; };
+
+template<typename T> struct class_transform< T, add_reference<_> > 
+{ typedef T & type; };
+
+template<typename T> struct class_transform< T, add_pointer<_> >
+{ typedef T * type; };
+
+template<typename T> struct class_transform< T, remove_cv<_> >
+{ typedef typename boost::remove_cv<T>::type type; };
+
+template<typename T> struct class_transform< T, add_reference< remove_cv<_> > >
+{ typedef typename boost::remove_cv<T>::type & type; };
+
+template<typename T> struct class_transform< T, add_pointer< remove_cv<_> > >
+{ typedef typename boost::remove_cv<T>::type * type; };
+
+template<typename T, typename U> struct class_transform< T, mpl::always<U> >
+{ typedef U type; };
+#endif
+
+
+} } } // namespace ::boost::function_types::detail
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/classifier.hpp b/3rdParty/Boost/src/boost/function_types/detail/classifier.hpp
new file mode 100644
index 0000000..03f3419
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/classifier.hpp
@@ -0,0 +1,82 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+#ifndef BOOST_FT_DETAIL_CLASSIFIER_HPP_INCLUDED
+#define BOOST_FT_DETAIL_CLASSIFIER_HPP_INCLUDED
+
+#include <boost/type.hpp>
+#include <boost/config.hpp>
+#include <boost/type_traits/config.hpp>
+#include <boost/type_traits/is_reference.hpp>
+#include <boost/type_traits/add_reference.hpp>
+
+#include <boost/function_types/config/config.hpp>
+#include <boost/function_types/property_tags.hpp>
+
+namespace boost { namespace function_types { namespace detail {
+
+template<typename T> struct classifier;
+
+template<std::size_t S> struct char_array { typedef char (&type)[S]; };
+
+template<bits_t Flags, bits_t CCID, std::size_t Arity> struct encode_charr
+{
+  typedef typename char_array<
+    ::boost::function_types::detail::encode_charr_impl<Flags,CCID,Arity>::value 
+  >::type type;
+};
+
+char BOOST_TT_DECL classifier_impl(...);
+
+#define BOOST_FT_variations BOOST_FT_function|BOOST_FT_pointer|\
+                            BOOST_FT_member_pointer
+
+#define BOOST_FT_type_function(cc,name) BOOST_FT_SYNTAX( \
+    R BOOST_PP_EMPTY,BOOST_PP_LPAREN,cc,* BOOST_PP_EMPTY,name,BOOST_PP_RPAREN)
+
+#define BOOST_FT_type_function_pointer(cc,name) BOOST_FT_SYNTAX( \
+    R BOOST_PP_EMPTY,BOOST_PP_LPAREN,cc,** BOOST_PP_EMPTY,name,BOOST_PP_RPAREN)
+
+#define BOOST_FT_type_member_function_pointer(cc,name) BOOST_FT_SYNTAX( \
+    R BOOST_PP_EMPTY,BOOST_PP_LPAREN,cc,T0::** BOOST_PP_EMPTY,name,BOOST_PP_RPAREN)
+
+#define BOOST_FT_al_path boost/function_types/detail/classifier_impl
+#include <boost/function_types/detail/pp_loop.hpp>
+
+template<typename T> struct classifier_bits
+{
+  static typename boost::add_reference<T>::type tester;
+
+  BOOST_STATIC_CONSTANT(bits_t,value = (bits_t)sizeof(
+    boost::function_types::detail::classifier_impl(& tester) 
+  )-1);
+};
+
+template<typename T> struct classifier
+{
+  typedef detail::constant<
+    ::boost::function_types::detail::decode_bits<
+      ::boost::function_types::detail::classifier_bits<T>::value
+    >::tag_bits > 
+  bits;
+
+  typedef detail::full_mask mask;
+ 
+  typedef detail::constant<
+    ::boost::function_types::detail::decode_bits<
+      ::boost::function_types::detail::classifier_bits<T>::value
+    >::arity > 
+  function_arity;
+};
+
+
+
+} } } // namespace ::boost::function_types::detail
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/classifier_impl/arity10_0.hpp b/3rdParty/Boost/src/boost/function_types/detail/classifier_impl/arity10_0.hpp
new file mode 100644
index 0000000..e27f3c2
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/classifier_impl/arity10_0.hpp
@@ -0,0 +1,55 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is intended for multiple inclusion
+
+// input:  BOOST_FT_syntax     type macro to use
+// input:  BOOST_FT_cc         empty or cc specifier 
+// input:  BOOST_FT_ell        empty or "..."
+// input:  BOOST_FT_cv         empty or cv qualifiers
+// input:  BOOST_FT_flags      single decimal integer encoding the flags
+// output: BOOST_FT_n          number of component types (arity+1)
+// output: BOOST_FT_arity      current arity
+// output: BOOST_FT_type       macro that expands to the type
+// output: BOOST_FT_tplargs(p) template arguments with given prefix
+// output: BOOST_FT_params(p)  parameters with given prefix
+
+template< typename R >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,0> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (BOOST_FT_nullary_param BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,1> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,2> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,3> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,4> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,5> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,6> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,7> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,8> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,9> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,10> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 BOOST_FT_ell) BOOST_FT_cv);
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/classifier_impl/arity10_1.hpp b/3rdParty/Boost/src/boost/function_types/detail/classifier_impl/arity10_1.hpp
new file mode 100644
index 0000000..cca8027
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/classifier_impl/arity10_1.hpp
@@ -0,0 +1,52 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is intended for multiple inclusion
+
+// input:  BOOST_FT_syntax     type macro to use
+// input:  BOOST_FT_cc         empty or cc specifier 
+// input:  BOOST_FT_ell        empty or "..."
+// input:  BOOST_FT_cv         empty or cv qualifiers
+// input:  BOOST_FT_flags      single decimal integer encoding the flags
+// output: BOOST_FT_n          number of component types (arity+1)
+// output: BOOST_FT_arity      current arity
+// output: BOOST_FT_type       macro that expands to the type
+// output: BOOST_FT_tplargs(p) template arguments with given prefix
+// output: BOOST_FT_params(p)  parameters with given prefix
+
+template< typename R , typename T0 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,1> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) ( BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,2> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,3> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,4> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,5> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,6> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,7> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,8> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,9> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,10> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 BOOST_FT_ell) BOOST_FT_cv);
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/classifier_impl/arity20_0.hpp b/3rdParty/Boost/src/boost/function_types/detail/classifier_impl/arity20_0.hpp
new file mode 100644
index 0000000..f7a2516
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/classifier_impl/arity20_0.hpp
@@ -0,0 +1,53 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is intended for multiple inclusion
+
+// input:  BOOST_FT_syntax     type macro to use
+// input:  BOOST_FT_cc         empty or cc specifier 
+// input:  BOOST_FT_ell        empty or "..."
+// input:  BOOST_FT_cv         empty or cv qualifiers
+// input:  BOOST_FT_flags      single decimal integer encoding the flags
+// output: BOOST_FT_n          number of component types (arity+1)
+// output: BOOST_FT_arity      current arity
+// output: BOOST_FT_type       macro that expands to the type
+// output: BOOST_FT_tplargs(p) template arguments with given prefix
+// output: BOOST_FT_params(p)  parameters with given prefix
+
+# include <boost/function_types/detail/classifier_impl/arity10_0.hpp>
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,11> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,12> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,13> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,14> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,15> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,16> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,17> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,18> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,19> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,20> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 BOOST_FT_ell) BOOST_FT_cv);
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/classifier_impl/arity20_1.hpp b/3rdParty/Boost/src/boost/function_types/detail/classifier_impl/arity20_1.hpp
new file mode 100644
index 0000000..1cee2ba
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/classifier_impl/arity20_1.hpp
@@ -0,0 +1,53 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is intended for multiple inclusion
+
+// input:  BOOST_FT_syntax     type macro to use
+// input:  BOOST_FT_cc         empty or cc specifier 
+// input:  BOOST_FT_ell        empty or "..."
+// input:  BOOST_FT_cv         empty or cv qualifiers
+// input:  BOOST_FT_flags      single decimal integer encoding the flags
+// output: BOOST_FT_n          number of component types (arity+1)
+// output: BOOST_FT_arity      current arity
+// output: BOOST_FT_type       macro that expands to the type
+// output: BOOST_FT_tplargs(p) template arguments with given prefix
+// output: BOOST_FT_params(p)  parameters with given prefix
+
+# include <boost/function_types/detail/classifier_impl/arity10_1.hpp>
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,11> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,12> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,13> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,14> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,15> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,16> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,17> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,18> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,19> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,20> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 BOOST_FT_ell) BOOST_FT_cv);
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/classifier_impl/arity30_0.hpp b/3rdParty/Boost/src/boost/function_types/detail/classifier_impl/arity30_0.hpp
new file mode 100644
index 0000000..6bc60f8
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/classifier_impl/arity30_0.hpp
@@ -0,0 +1,53 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is intended for multiple inclusion
+
+// input:  BOOST_FT_syntax     type macro to use
+// input:  BOOST_FT_cc         empty or cc specifier 
+// input:  BOOST_FT_ell        empty or "..."
+// input:  BOOST_FT_cv         empty or cv qualifiers
+// input:  BOOST_FT_flags      single decimal integer encoding the flags
+// output: BOOST_FT_n          number of component types (arity+1)
+// output: BOOST_FT_arity      current arity
+// output: BOOST_FT_type       macro that expands to the type
+// output: BOOST_FT_tplargs(p) template arguments with given prefix
+// output: BOOST_FT_params(p)  parameters with given prefix
+
+# include <boost/function_types/detail/classifier_impl/arity20_0.hpp>
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,21> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,22> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,23> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,24> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,25> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,26> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,27> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,28> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,29> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,30> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 BOOST_FT_ell) BOOST_FT_cv);
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/classifier_impl/arity30_1.hpp b/3rdParty/Boost/src/boost/function_types/detail/classifier_impl/arity30_1.hpp
new file mode 100644
index 0000000..743c263
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/classifier_impl/arity30_1.hpp
@@ -0,0 +1,53 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is intended for multiple inclusion
+
+// input:  BOOST_FT_syntax     type macro to use
+// input:  BOOST_FT_cc         empty or cc specifier 
+// input:  BOOST_FT_ell        empty or "..."
+// input:  BOOST_FT_cv         empty or cv qualifiers
+// input:  BOOST_FT_flags      single decimal integer encoding the flags
+// output: BOOST_FT_n          number of component types (arity+1)
+// output: BOOST_FT_arity      current arity
+// output: BOOST_FT_type       macro that expands to the type
+// output: BOOST_FT_tplargs(p) template arguments with given prefix
+// output: BOOST_FT_params(p)  parameters with given prefix
+
+# include <boost/function_types/detail/classifier_impl/arity20_1.hpp>
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,21> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,22> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,23> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,24> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,25> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,26> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,27> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,28> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,29> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,30> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 BOOST_FT_ell) BOOST_FT_cv);
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/classifier_impl/arity40_0.hpp b/3rdParty/Boost/src/boost/function_types/detail/classifier_impl/arity40_0.hpp
new file mode 100644
index 0000000..161ac17
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/classifier_impl/arity40_0.hpp
@@ -0,0 +1,53 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is intended for multiple inclusion
+
+// input:  BOOST_FT_syntax     type macro to use
+// input:  BOOST_FT_cc         empty or cc specifier 
+// input:  BOOST_FT_ell        empty or "..."
+// input:  BOOST_FT_cv         empty or cv qualifiers
+// input:  BOOST_FT_flags      single decimal integer encoding the flags
+// output: BOOST_FT_n          number of component types (arity+1)
+// output: BOOST_FT_arity      current arity
+// output: BOOST_FT_type       macro that expands to the type
+// output: BOOST_FT_tplargs(p) template arguments with given prefix
+// output: BOOST_FT_params(p)  parameters with given prefix
+
+# include <boost/function_types/detail/classifier_impl/arity30_0.hpp>
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,31> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,32> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,33> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,34> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,35> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,36> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,37> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,38> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,39> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,40> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 BOOST_FT_ell) BOOST_FT_cv);
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/classifier_impl/arity40_1.hpp b/3rdParty/Boost/src/boost/function_types/detail/classifier_impl/arity40_1.hpp
new file mode 100644
index 0000000..e3a9988
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/classifier_impl/arity40_1.hpp
@@ -0,0 +1,53 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is intended for multiple inclusion
+
+// input:  BOOST_FT_syntax     type macro to use
+// input:  BOOST_FT_cc         empty or cc specifier 
+// input:  BOOST_FT_ell        empty or "..."
+// input:  BOOST_FT_cv         empty or cv qualifiers
+// input:  BOOST_FT_flags      single decimal integer encoding the flags
+// output: BOOST_FT_n          number of component types (arity+1)
+// output: BOOST_FT_arity      current arity
+// output: BOOST_FT_type       macro that expands to the type
+// output: BOOST_FT_tplargs(p) template arguments with given prefix
+// output: BOOST_FT_params(p)  parameters with given prefix
+
+# include <boost/function_types/detail/classifier_impl/arity30_1.hpp>
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,31> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,32> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,33> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,34> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,35> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,36> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,37> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,38> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,39> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,40> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 BOOST_FT_ell) BOOST_FT_cv);
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/classifier_impl/arity50_0.hpp b/3rdParty/Boost/src/boost/function_types/detail/classifier_impl/arity50_0.hpp
new file mode 100644
index 0000000..d05719a
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/classifier_impl/arity50_0.hpp
@@ -0,0 +1,53 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is intended for multiple inclusion
+
+// input:  BOOST_FT_syntax     type macro to use
+// input:  BOOST_FT_cc         empty or cc specifier 
+// input:  BOOST_FT_ell        empty or "..."
+// input:  BOOST_FT_cv         empty or cv qualifiers
+// input:  BOOST_FT_flags      single decimal integer encoding the flags
+// output: BOOST_FT_n          number of component types (arity+1)
+// output: BOOST_FT_arity      current arity
+// output: BOOST_FT_type       macro that expands to the type
+// output: BOOST_FT_tplargs(p) template arguments with given prefix
+// output: BOOST_FT_params(p)  parameters with given prefix
+
+# include <boost/function_types/detail/classifier_impl/arity40_0.hpp>
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,41> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,42> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,43> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,44> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,45> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,46> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,47> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,48> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,49> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48 , typename T49 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,50> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49 BOOST_FT_ell) BOOST_FT_cv);
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/classifier_impl/arity50_1.hpp b/3rdParty/Boost/src/boost/function_types/detail/classifier_impl/arity50_1.hpp
new file mode 100644
index 0000000..944eaba
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/classifier_impl/arity50_1.hpp
@@ -0,0 +1,52 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is intended for multiple inclusion
+
+// input:  BOOST_FT_syntax     type macro to use
+// input:  BOOST_FT_cc         empty or cc specifier 
+// input:  BOOST_FT_ell        empty or "..."
+// input:  BOOST_FT_cv         empty or cv qualifiers
+// input:  BOOST_FT_flags      single decimal integer encoding the flags
+// output: BOOST_FT_n          number of component types (arity+1)
+// output: BOOST_FT_arity      current arity
+// output: BOOST_FT_type       macro that expands to the type
+// output: BOOST_FT_tplargs(p) template arguments with given prefix
+// output: BOOST_FT_params(p)  parameters with given prefix
+
+# include <boost/function_types/detail/classifier_impl/arity40_1.hpp>
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,41> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,42> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,43> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,44> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,45> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,46> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,47> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,48> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,49> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 BOOST_FT_ell) BOOST_FT_cv);
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48 , typename T49 >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,50> ::type
+classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49 BOOST_FT_ell) BOOST_FT_cv);
diff --git a/3rdParty/Boost/src/boost/function_types/detail/classifier_impl/master.hpp b/3rdParty/Boost/src/boost/function_types/detail/classifier_impl/master.hpp
new file mode 100644
index 0000000..00b722e
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/classifier_impl/master.hpp
@@ -0,0 +1,33 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is intended for multiple inclusion
+
+#if BOOST_FT_ARITY_LOOP_PREFIX
+
+#   ifndef BOOST_FT_DETAIL_CLASSIFIER_IMPL_MASTER_HPP_INCLUDED
+#   define BOOST_FT_DETAIL_CLASSIFIER_IMPL_MASTER_HPP_INCLUDED
+#     include <boost/preprocessor/facilities/identity.hpp>
+#   endif
+
+#   define BOOST_FT_type_name
+
+#elif BOOST_FT_ARITY_LOOP_IS_ITERATING
+
+template< BOOST_FT_tplargs(BOOST_PP_IDENTITY(typename)) >
+typename encode_charr<BOOST_FT_flags,BOOST_FT_cc_id,BOOST_FT_arity>::type
+classifier_impl(BOOST_FT_type);
+
+#elif BOOST_FT_ARITY_LOOP_SUFFIX
+
+#   undef BOOST_FT_type_name
+
+#else
+#   error "attempt to use arity loop master file without loop"
+#endif
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/components_as_mpl_sequence.hpp b/3rdParty/Boost/src/boost/function_types/detail/components_as_mpl_sequence.hpp
new file mode 100644
index 0000000..637b1b5
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/components_as_mpl_sequence.hpp
@@ -0,0 +1,138 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+#ifndef BOOST_FT_DETAIL_COMPONENTS_AS_MPL_SEQUENCE_HPP_INCLUDED
+#define BOOST_FT_DETAIL_COMPONENTS_AS_MPL_SEQUENCE_HPP_INCLUDED
+
+#include <boost/mpl/size_fwd.hpp>
+#include <boost/mpl/empty_fwd.hpp>
+#include <boost/mpl/front_fwd.hpp>
+#include <boost/mpl/back_fwd.hpp>
+#include <boost/mpl/at_fwd.hpp>
+#include <boost/mpl/begin_end_fwd.hpp>
+#include <boost/mpl/clear_fwd.hpp>
+#include <boost/mpl/push_front_fwd.hpp>
+#include <boost/mpl/pop_front_fwd.hpp>
+#include <boost/mpl/push_back_fwd.hpp>
+#include <boost/mpl/pop_back_fwd.hpp>
+
+namespace boost { namespace mpl {
+
+template<> struct size_impl
+< function_types::detail::components_mpl_sequence_tag >
+{
+  template< typename S > struct apply
+    : mpl::size <typename S::types>
+  { };
+};
+template<> struct empty_impl
+< function_types::detail::components_mpl_sequence_tag >
+{
+  template< typename S > struct apply
+    : mpl::empty <typename S::types>
+  { };
+};
+template<> struct front_impl
+< function_types::detail::components_mpl_sequence_tag >
+{
+  template< typename S > struct apply
+    : mpl::front <typename S::types>
+  { };
+};
+template<> struct back_impl
+< function_types::detail::components_mpl_sequence_tag >
+{
+  template< typename S > struct apply
+    : mpl::back <typename S::types>
+  { };
+};
+template<> struct at_impl
+< function_types::detail::components_mpl_sequence_tag >
+{
+  template< typename S, typename N > struct apply
+    : mpl::at <typename S::types, N >
+  { };
+};
+template<> struct begin_impl
+< function_types::detail::components_mpl_sequence_tag >
+{
+  template< typename S > struct apply
+    : mpl::begin <typename S::types>
+  { };
+};
+template<> struct end_impl
+< function_types::detail::components_mpl_sequence_tag >
+{
+  template< typename S > struct apply
+    : mpl::end <typename S::types>
+  { };
+};
+template<> struct clear_impl
+< function_types::detail::components_mpl_sequence_tag >
+{
+  template< typename S >
+  struct apply
+    : S
+  {
+    typedef apply type;
+    typedef typename mpl::clear< typename S::types >::type types;
+  };
+};
+template<>
+struct push_front_impl
+< function_types::detail::components_mpl_sequence_tag >
+{
+  template< typename S, typename T >
+  struct apply
+    : S
+  { 
+    typedef apply type;
+    typedef typename mpl::push_front< typename S::types, T >::type types;
+  };
+};
+template<>
+struct pop_front_impl
+< function_types::detail::components_mpl_sequence_tag >
+{
+  template< typename S >
+  struct apply
+    : S
+  {
+    typedef apply type;
+    typedef typename mpl::pop_front< typename S::types >::type types; 
+  };
+};
+template<>
+struct push_back_impl
+< function_types::detail::components_mpl_sequence_tag >
+{
+  template< typename S, typename T >
+  struct apply
+    : S
+  {
+    typedef apply type;
+    typedef typename mpl::push_back< typename S::types, T >::type types; 
+  };
+};
+template<>
+struct pop_back_impl
+< function_types::detail::components_mpl_sequence_tag >
+{
+  template< typename S >
+  struct apply
+    : S
+  {
+    typedef apply type;
+    typedef typename mpl::pop_back< typename S::types >::type types; 
+  };
+};
+
+} } // namespace ::boost::mpl
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/components_impl/arity10_0.hpp b/3rdParty/Boost/src/boost/function_types/detail/components_impl/arity10_0.hpp
new file mode 100644
index 0000000..f96c6a9
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/components_impl/arity10_0.hpp
@@ -0,0 +1,132 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is intended for multiple inclusion
+
+// input:  BOOST_FT_syntax     type macro to use
+// input:  BOOST_FT_cc         empty or cc specifier 
+// input:  BOOST_FT_ell        empty or "..."
+// input:  BOOST_FT_cv         empty or cv qualifiers
+// input:  BOOST_FT_flags      single decimal integer encoding the flags
+// output: BOOST_FT_n          number of component types (arity+1)
+// output: BOOST_FT_arity      current arity
+// output: BOOST_FT_type       macro that expands to the type
+// output: BOOST_FT_tplargs(p) template arguments with given prefix
+// output: BOOST_FT_params(p)  parameters with given prefix
+
+template< typename R, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (BOOST_FT_nullary_param BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (BOOST_FT_nullary_param BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,0> function_arity;
+typedef mpl::vector1< R BOOST_FT_nullary_param > types;
+};
+template< typename R , typename T0, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,1> function_arity;
+typedef mpl::vector2< R , T0 > types;
+};
+template< typename R , typename T0 , typename T1, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,2> function_arity;
+typedef mpl::vector3< R , T0 , T1 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,3> function_arity;
+typedef mpl::vector4< R , T0 , T1 , T2 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,4> function_arity;
+typedef mpl::vector5< R , T0 , T1 , T2 , T3 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,5> function_arity;
+typedef mpl::vector6< R , T0 , T1 , T2 , T3 , T4 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,6> function_arity;
+typedef mpl::vector7< R , T0 , T1 , T2 , T3 , T4 , T5 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,7> function_arity;
+typedef mpl::vector8< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,8> function_arity;
+typedef mpl::vector9< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,9> function_arity;
+typedef mpl::vector10< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,10> function_arity;
+typedef mpl::vector11< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 > types;
+};
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/components_impl/arity10_1.hpp b/3rdParty/Boost/src/boost/function_types/detail/components_impl/arity10_1.hpp
new file mode 100644
index 0000000..1b06a97
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/components_impl/arity10_1.hpp
@@ -0,0 +1,122 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is intended for multiple inclusion
+
+// input:  BOOST_FT_syntax     type macro to use
+// input:  BOOST_FT_cc         empty or cc specifier 
+// input:  BOOST_FT_ell        empty or "..."
+// input:  BOOST_FT_cv         empty or cv qualifiers
+// input:  BOOST_FT_flags      single decimal integer encoding the flags
+// output: BOOST_FT_n          number of component types (arity+1)
+// output: BOOST_FT_arity      current arity
+// output: BOOST_FT_type       macro that expands to the type
+// output: BOOST_FT_tplargs(p) template arguments with given prefix
+// output: BOOST_FT_params(p)  parameters with given prefix
+
+template< typename R , typename T0, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) ( BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) ( BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,1> function_arity;
+typedef mpl::vector2< R, typename class_transform<T0 BOOST_FT_cv, L> ::type > types;
+};
+template< typename R , typename T0 , typename T1, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,2> function_arity;
+typedef mpl::vector3< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,3> function_arity;
+typedef mpl::vector4< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,4> function_arity;
+typedef mpl::vector5< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,5> function_arity;
+typedef mpl::vector6< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,6> function_arity;
+typedef mpl::vector7< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,7> function_arity;
+typedef mpl::vector8< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,8> function_arity;
+typedef mpl::vector9< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,9> function_arity;
+typedef mpl::vector10< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,10> function_arity;
+typedef mpl::vector11< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 > types;
+};
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/components_impl/arity20_0.hpp b/3rdParty/Boost/src/boost/function_types/detail/components_impl/arity20_0.hpp
new file mode 100644
index 0000000..f6b2ca8
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/components_impl/arity20_0.hpp
@@ -0,0 +1,123 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is intended for multiple inclusion
+
+// input:  BOOST_FT_syntax     type macro to use
+// input:  BOOST_FT_cc         empty or cc specifier 
+// input:  BOOST_FT_ell        empty or "..."
+// input:  BOOST_FT_cv         empty or cv qualifiers
+// input:  BOOST_FT_flags      single decimal integer encoding the flags
+// output: BOOST_FT_n          number of component types (arity+1)
+// output: BOOST_FT_arity      current arity
+// output: BOOST_FT_type       macro that expands to the type
+// output: BOOST_FT_tplargs(p) template arguments with given prefix
+// output: BOOST_FT_params(p)  parameters with given prefix
+
+# include <boost/function_types/detail/components_impl/arity10_0.hpp>
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,11> function_arity;
+typedef mpl::vector12< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,12> function_arity;
+typedef mpl::vector13< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,13> function_arity;
+typedef mpl::vector14< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,14> function_arity;
+typedef mpl::vector15< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,15> function_arity;
+typedef mpl::vector16< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,16> function_arity;
+typedef mpl::vector17< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,17> function_arity;
+typedef mpl::vector18< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,18> function_arity;
+typedef mpl::vector19< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,19> function_arity;
+typedef mpl::vector20< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,20> function_arity;
+typedef mpl::vector21< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 > types;
+};
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/components_impl/arity20_1.hpp b/3rdParty/Boost/src/boost/function_types/detail/components_impl/arity20_1.hpp
new file mode 100644
index 0000000..1688e6b
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/components_impl/arity20_1.hpp
@@ -0,0 +1,123 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is intended for multiple inclusion
+
+// input:  BOOST_FT_syntax     type macro to use
+// input:  BOOST_FT_cc         empty or cc specifier 
+// input:  BOOST_FT_ell        empty or "..."
+// input:  BOOST_FT_cv         empty or cv qualifiers
+// input:  BOOST_FT_flags      single decimal integer encoding the flags
+// output: BOOST_FT_n          number of component types (arity+1)
+// output: BOOST_FT_arity      current arity
+// output: BOOST_FT_type       macro that expands to the type
+// output: BOOST_FT_tplargs(p) template arguments with given prefix
+// output: BOOST_FT_params(p)  parameters with given prefix
+
+# include <boost/function_types/detail/components_impl/arity10_1.hpp>
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,11> function_arity;
+typedef mpl::vector12< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,12> function_arity;
+typedef mpl::vector13< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,13> function_arity;
+typedef mpl::vector14< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,14> function_arity;
+typedef mpl::vector15< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,15> function_arity;
+typedef mpl::vector16< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,16> function_arity;
+typedef mpl::vector17< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,17> function_arity;
+typedef mpl::vector18< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,18> function_arity;
+typedef mpl::vector19< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,19> function_arity;
+typedef mpl::vector20< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,20> function_arity;
+typedef mpl::vector21< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 > types;
+};
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/components_impl/arity30_0.hpp b/3rdParty/Boost/src/boost/function_types/detail/components_impl/arity30_0.hpp
new file mode 100644
index 0000000..e85eb3a
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/components_impl/arity30_0.hpp
@@ -0,0 +1,123 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is intended for multiple inclusion
+
+// input:  BOOST_FT_syntax     type macro to use
+// input:  BOOST_FT_cc         empty or cc specifier 
+// input:  BOOST_FT_ell        empty or "..."
+// input:  BOOST_FT_cv         empty or cv qualifiers
+// input:  BOOST_FT_flags      single decimal integer encoding the flags
+// output: BOOST_FT_n          number of component types (arity+1)
+// output: BOOST_FT_arity      current arity
+// output: BOOST_FT_type       macro that expands to the type
+// output: BOOST_FT_tplargs(p) template arguments with given prefix
+// output: BOOST_FT_params(p)  parameters with given prefix
+
+# include <boost/function_types/detail/components_impl/arity20_0.hpp>
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,21> function_arity;
+typedef mpl::vector22< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,22> function_arity;
+typedef mpl::vector23< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,23> function_arity;
+typedef mpl::vector24< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,24> function_arity;
+typedef mpl::vector25< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,25> function_arity;
+typedef mpl::vector26< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,26> function_arity;
+typedef mpl::vector27< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,27> function_arity;
+typedef mpl::vector28< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,28> function_arity;
+typedef mpl::vector29< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,29> function_arity;
+typedef mpl::vector30< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,30> function_arity;
+typedef mpl::vector31< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 > types;
+};
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/components_impl/arity30_1.hpp b/3rdParty/Boost/src/boost/function_types/detail/components_impl/arity30_1.hpp
new file mode 100644
index 0000000..290d21e
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/components_impl/arity30_1.hpp
@@ -0,0 +1,123 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is intended for multiple inclusion
+
+// input:  BOOST_FT_syntax     type macro to use
+// input:  BOOST_FT_cc         empty or cc specifier 
+// input:  BOOST_FT_ell        empty or "..."
+// input:  BOOST_FT_cv         empty or cv qualifiers
+// input:  BOOST_FT_flags      single decimal integer encoding the flags
+// output: BOOST_FT_n          number of component types (arity+1)
+// output: BOOST_FT_arity      current arity
+// output: BOOST_FT_type       macro that expands to the type
+// output: BOOST_FT_tplargs(p) template arguments with given prefix
+// output: BOOST_FT_params(p)  parameters with given prefix
+
+# include <boost/function_types/detail/components_impl/arity20_1.hpp>
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,21> function_arity;
+typedef mpl::vector22< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,22> function_arity;
+typedef mpl::vector23< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,23> function_arity;
+typedef mpl::vector24< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,24> function_arity;
+typedef mpl::vector25< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,25> function_arity;
+typedef mpl::vector26< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,26> function_arity;
+typedef mpl::vector27< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,27> function_arity;
+typedef mpl::vector28< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,28> function_arity;
+typedef mpl::vector29< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,29> function_arity;
+typedef mpl::vector30< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,30> function_arity;
+typedef mpl::vector31< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 > types;
+};
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/components_impl/arity40_0.hpp b/3rdParty/Boost/src/boost/function_types/detail/components_impl/arity40_0.hpp
new file mode 100644
index 0000000..f1a2410
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/components_impl/arity40_0.hpp
@@ -0,0 +1,123 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is intended for multiple inclusion
+
+// input:  BOOST_FT_syntax     type macro to use
+// input:  BOOST_FT_cc         empty or cc specifier 
+// input:  BOOST_FT_ell        empty or "..."
+// input:  BOOST_FT_cv         empty or cv qualifiers
+// input:  BOOST_FT_flags      single decimal integer encoding the flags
+// output: BOOST_FT_n          number of component types (arity+1)
+// output: BOOST_FT_arity      current arity
+// output: BOOST_FT_type       macro that expands to the type
+// output: BOOST_FT_tplargs(p) template arguments with given prefix
+// output: BOOST_FT_params(p)  parameters with given prefix
+
+# include <boost/function_types/detail/components_impl/arity30_0.hpp>
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,31> function_arity;
+typedef mpl::vector32< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,32> function_arity;
+typedef mpl::vector33< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,33> function_arity;
+typedef mpl::vector34< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,34> function_arity;
+typedef mpl::vector35< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,35> function_arity;
+typedef mpl::vector36< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,36> function_arity;
+typedef mpl::vector37< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,37> function_arity;
+typedef mpl::vector38< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,38> function_arity;
+typedef mpl::vector39< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,39> function_arity;
+typedef mpl::vector40< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,40> function_arity;
+typedef mpl::vector41< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 > types;
+};
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/components_impl/arity40_1.hpp b/3rdParty/Boost/src/boost/function_types/detail/components_impl/arity40_1.hpp
new file mode 100644
index 0000000..e1741cb
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/components_impl/arity40_1.hpp
@@ -0,0 +1,123 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is intended for multiple inclusion
+
+// input:  BOOST_FT_syntax     type macro to use
+// input:  BOOST_FT_cc         empty or cc specifier 
+// input:  BOOST_FT_ell        empty or "..."
+// input:  BOOST_FT_cv         empty or cv qualifiers
+// input:  BOOST_FT_flags      single decimal integer encoding the flags
+// output: BOOST_FT_n          number of component types (arity+1)
+// output: BOOST_FT_arity      current arity
+// output: BOOST_FT_type       macro that expands to the type
+// output: BOOST_FT_tplargs(p) template arguments with given prefix
+// output: BOOST_FT_params(p)  parameters with given prefix
+
+# include <boost/function_types/detail/components_impl/arity30_1.hpp>
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,31> function_arity;
+typedef mpl::vector32< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,32> function_arity;
+typedef mpl::vector33< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,33> function_arity;
+typedef mpl::vector34< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,34> function_arity;
+typedef mpl::vector35< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,35> function_arity;
+typedef mpl::vector36< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,36> function_arity;
+typedef mpl::vector37< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,37> function_arity;
+typedef mpl::vector38< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,38> function_arity;
+typedef mpl::vector39< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,39> function_arity;
+typedef mpl::vector40< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,40> function_arity;
+typedef mpl::vector41< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 > types;
+};
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/components_impl/arity50_0.hpp b/3rdParty/Boost/src/boost/function_types/detail/components_impl/arity50_0.hpp
new file mode 100644
index 0000000..693a05d
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/components_impl/arity50_0.hpp
@@ -0,0 +1,123 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is intended for multiple inclusion
+
+// input:  BOOST_FT_syntax     type macro to use
+// input:  BOOST_FT_cc         empty or cc specifier 
+// input:  BOOST_FT_ell        empty or "..."
+// input:  BOOST_FT_cv         empty or cv qualifiers
+// input:  BOOST_FT_flags      single decimal integer encoding the flags
+// output: BOOST_FT_n          number of component types (arity+1)
+// output: BOOST_FT_arity      current arity
+// output: BOOST_FT_type       macro that expands to the type
+// output: BOOST_FT_tplargs(p) template arguments with given prefix
+// output: BOOST_FT_params(p)  parameters with given prefix
+
+# include <boost/function_types/detail/components_impl/arity40_0.hpp>
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,41> function_arity;
+typedef mpl::vector42< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,42> function_arity;
+typedef mpl::vector43< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,43> function_arity;
+typedef mpl::vector44< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,44> function_arity;
+typedef mpl::vector45< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,45> function_arity;
+typedef mpl::vector46< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,46> function_arity;
+typedef mpl::vector47< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,47> function_arity;
+typedef mpl::vector48< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,48> function_arity;
+typedef mpl::vector49< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,49> function_arity;
+typedef mpl::vector50< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48 , typename T49, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,50> function_arity;
+typedef mpl::vector51< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49 > types;
+};
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/components_impl/arity50_1.hpp b/3rdParty/Boost/src/boost/function_types/detail/components_impl/arity50_1.hpp
new file mode 100644
index 0000000..9bc1616
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/components_impl/arity50_1.hpp
@@ -0,0 +1,123 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is intended for multiple inclusion
+
+// input:  BOOST_FT_syntax     type macro to use
+// input:  BOOST_FT_cc         empty or cc specifier 
+// input:  BOOST_FT_ell        empty or "..."
+// input:  BOOST_FT_cv         empty or cv qualifiers
+// input:  BOOST_FT_flags      single decimal integer encoding the flags
+// output: BOOST_FT_n          number of component types (arity+1)
+// output: BOOST_FT_arity      current arity
+// output: BOOST_FT_type       macro that expands to the type
+// output: BOOST_FT_tplargs(p) template arguments with given prefix
+// output: BOOST_FT_params(p)  parameters with given prefix
+
+# include <boost/function_types/detail/components_impl/arity40_1.hpp>
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,41> function_arity;
+typedef mpl::vector42< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,42> function_arity;
+typedef mpl::vector43< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,43> function_arity;
+typedef mpl::vector44< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,44> function_arity;
+typedef mpl::vector45< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,45> function_arity;
+typedef mpl::vector46< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,46> function_arity;
+typedef mpl::vector47< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,47> function_arity;
+typedef mpl::vector48< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,48> function_arity;
+typedef mpl::vector49< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,49> function_arity;
+typedef mpl::vector50< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 > types;
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48 , typename T49, typename L>
+struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49 BOOST_FT_ell) BOOST_FT_cv, L>
+{
+typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+typedef constant<BOOST_FT_full_mask> mask;
+typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49 BOOST_FT_ell) BOOST_FT_cv, L> type;
+typedef components_mpl_sequence_tag tag;
+typedef mpl::integral_c<std::size_t,50> function_arity;
+typedef mpl::vector51< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49 > types;
+};
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/components_impl/master.hpp b/3rdParty/Boost/src/boost/function_types/detail/components_impl/master.hpp
new file mode 100644
index 0000000..cd83726
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/components_impl/master.hpp
@@ -0,0 +1,61 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is intended for multiple inclusion
+
+#if   BOOST_FT_ARITY_LOOP_PREFIX
+
+#   ifndef BOOST_FT_DETAIL_COMPONENTS_IMPL_MASTER_HPP_INCLUDED
+#   define BOOST_FT_DETAIL_COMPONENTS_IMPL_MASTER_HPP_INCLUDED
+#     include <boost/preprocessor/cat.hpp>
+#     include <boost/preprocessor/facilities/empty.hpp>
+#     include <boost/preprocessor/facilities/identity.hpp>
+#     include <boost/preprocessor/arithmetic/dec.hpp>
+#     include <boost/preprocessor/punctuation/comma_if.hpp>
+#   endif
+
+#   define BOOST_FT_type_name
+
+#   if !BOOST_FT_mfp
+
+#     define BOOST_FT_types \
+          R BOOST_PP_COMMA_IF(BOOST_FT_arity) BOOST_FT_params(BOOST_PP_EMPTY)
+#   else
+
+#     define BOOST_FT_types \
+          R, typename class_transform<T0 BOOST_FT_cv, L>::type \
+          BOOST_PP_COMMA_IF(BOOST_PP_DEC(BOOST_FT_arity)) \
+          BOOST_FT_params(BOOST_PP_EMPTY)
+
+#   endif
+
+#elif BOOST_FT_ARITY_LOOP_IS_ITERATING
+
+template< BOOST_FT_tplargs(BOOST_PP_IDENTITY(typename)), typename L>
+struct components_impl<BOOST_FT_type, L>
+{
+  typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
+  typedef constant<BOOST_FT_full_mask> mask;
+
+  typedef function_types::components<BOOST_FT_type, L> type;
+  typedef components_mpl_sequence_tag tag;
+
+  typedef mpl::integral_c<std::size_t,BOOST_FT_arity> function_arity;
+
+  typedef BOOST_PP_CAT(mpl::vector,BOOST_FT_n)< BOOST_FT_types > types;
+};
+
+#elif BOOST_FT_ARITY_LOOP_SUFFIX
+
+#   undef BOOST_FT_types
+#   undef BOOST_FT_type_name
+
+#else
+#   error "attempt to use arity loop master file without loop"
+#endif
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/cv_traits.hpp b/3rdParty/Boost/src/boost/function_types/detail/cv_traits.hpp
new file mode 100644
index 0000000..242f45b
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/cv_traits.hpp
@@ -0,0 +1,134 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+#ifndef BOOST_FT_DETAIL_CV_TRAITS_HPP_INCLUDED
+#define BOOST_FT_DETAIL_CV_TRAITS_HPP_INCLUDED
+
+#include <cstddef>
+#include <boost/detail/workaround.hpp>
+
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+    || BOOST_WORKAROUND(__BORLANDC__, <= 0x582)
+#   include <boost/type_traits/remove_cv.hpp>
+#   include <boost/type_traits/remove_pointer.hpp>
+#   include <boost/type_traits/remove_reference.hpp>
+#endif
+
+#include <boost/function_types/property_tags.hpp>
+
+namespace boost { namespace function_types { namespace detail {
+
+#if ! (defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+    || BOOST_WORKAROUND(__BORLANDC__, <= 0x582))
+
+template<typename T> struct cv_traits 
+{ typedef non_cv tag; typedef T type; };
+template<typename T> struct cv_traits<T &>     
+{ typedef non_cv tag; typedef T type; };
+template<typename T> struct cv_traits<T *>    
+{ typedef non_cv tag; typedef T type; };
+template<typename T> struct cv_traits<T * const> 
+{ typedef non_cv tag; typedef T type; };
+template<typename T> struct cv_traits<T * volatile> 
+{ typedef non_cv tag; typedef T type; };
+template<typename T> struct cv_traits<T * const volatile> 
+{ typedef non_cv tag; typedef T type; };
+
+template<typename T> struct cv_traits<T const> 
+{ typedef const_non_volatile tag; typedef T type; };
+template<typename T> struct cv_traits<T const &>
+{ typedef const_non_volatile tag; typedef T type; };
+template<typename T> struct cv_traits<T const *> 
+{ typedef const_non_volatile tag; typedef T type; };
+template<typename T> struct cv_traits<T const * const> 
+{ typedef const_non_volatile tag; typedef T type; };
+template<typename T> struct cv_traits<T const * volatile> 
+{ typedef const_non_volatile tag; typedef T type; };
+template<typename T> struct cv_traits<T const * const volatile> 
+{ typedef const_non_volatile tag; typedef T type; };
+
+template<typename T> struct cv_traits<T volatile>  
+{ typedef volatile_non_const tag; typedef T type; };
+template<typename T> struct cv_traits<T volatile &>  
+{ typedef volatile_non_const tag; typedef T type; };
+template<typename T> struct cv_traits<T volatile *> 
+{ typedef volatile_non_const tag; typedef T type; };
+template<typename T> struct cv_traits<T volatile * const> 
+{ typedef volatile_non_const tag; typedef T type; };
+template<typename T> struct cv_traits<T volatile * volatile> 
+{ typedef volatile_non_const tag; typedef T type; };
+template<typename T> struct cv_traits<T volatile * const volatile> 
+{ typedef volatile_non_const tag; typedef T type; };
+
+template<typename T> struct cv_traits<T const volatile>   
+{ typedef cv_qualified tag; typedef T type; };
+template<typename T> struct cv_traits<T const volatile &>
+{ typedef cv_qualified tag; typedef T type; };
+template<typename T> struct cv_traits<T const volatile *>
+{ typedef cv_qualified tag; typedef T type; };
+template<typename T> struct cv_traits<T const volatile * const>
+{ typedef cv_qualified tag; typedef T type; };
+template<typename T> struct cv_traits<T const volatile * volatile>
+{ typedef cv_qualified tag; typedef T type; };
+template<typename T> struct cv_traits<T const volatile * const volatile>
+{ typedef cv_qualified tag; typedef T type; };
+
+#else
+template<std::size_t> struct cv_tag_impl;
+
+template<> struct cv_tag_impl<1> { typedef non_cv type;};
+template<> struct cv_tag_impl<2> { typedef const_non_volatile type; };
+template<> struct cv_tag_impl<3> { typedef volatile_non_const type; };
+template<> struct cv_tag_impl<4> { typedef cv_qualified type; };
+
+typedef char (& case_1)[1];
+typedef char (& case_2)[2];
+typedef char (& case_3)[3];
+typedef char (& case_4)[4];
+
+template<typename T> case_1 switch_cv(T *);
+template<typename T> case_2 switch_cv(T const *);
+template<typename T> case_3 switch_cv(T volatile *);
+template<typename T> case_4 switch_cv(T const volatile *);
+
+template<typename T> T                * ref_to_ptr(T &);
+template<typename T> T const          * ref_to_ptr(T const &);
+template<typename T> T volatile       * ref_to_ptr(T volatile &);
+template<typename T> T const volatile * ref_to_ptr(T const volatile &);
+
+template<typename T> T                * ref_to_ptr(T * const volatile &);
+
+template<typename T>
+struct cv_code
+{
+  static T _t;
+  BOOST_STATIC_CONSTANT(std::size_t, value = 
+      sizeof(::boost::function_types::detail::switch_cv(
+         ::boost::function_types::detail::ref_to_ptr(_t) ) ));
+};
+
+template<typename T> struct cv_traits 
+{
+  typedef typename boost::function_types::detail::cv_tag_impl< 
+    ::boost::function_types::detail::cv_code<T>::value >::type
+  tag;
+
+  // may require Boost.TypeTraits broken compiler specializations
+  // to work
+  typedef typename boost::remove_cv<
+              typename boost::remove_pointer<
+                  typename boost::remove_reference<T>::type 
+              >::type 
+          >::type type; 
+};
+#endif
+
+} } } // namespace boost::function_types::detail
+
+#endif
+ 
diff --git a/3rdParty/Boost/src/boost/function_types/detail/encoding/aliases_def.hpp b/3rdParty/Boost/src/boost/function_types/detail/encoding/aliases_def.hpp
new file mode 100644
index 0000000..4d48331
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/encoding/aliases_def.hpp
@@ -0,0 +1,16 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is intended for multiple inclusions
+
+#define callable_builtin BOOST_FT_callable_builtin
+#define member           BOOST_FT_member_pointer
+#define non_member       BOOST_FT_non_member
+#define variadic         BOOST_FT_variadic
+#define non_variadic     BOOST_FT_non_variadic
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/encoding/aliases_undef.hpp b/3rdParty/Boost/src/boost/function_types/detail/encoding/aliases_undef.hpp
new file mode 100644
index 0000000..1d4e577
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/encoding/aliases_undef.hpp
@@ -0,0 +1,16 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is intended for multiple inclusions
+
+#undef callable_builtin
+#undef member
+#undef non_member
+#undef variadic
+#undef non_variadic
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/encoding/def.hpp b/3rdParty/Boost/src/boost/function_types/detail/encoding/def.hpp
new file mode 100644
index 0000000..08074fb
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/encoding/def.hpp
@@ -0,0 +1,51 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is intended for multiple inclusions
+
+// Type encoding:
+//
+// bit 0: callable builtin
+// bit 1: non member
+// bit 2: naked function
+// bit 3: pointer
+// bit 4: reference
+// bit 5: member pointer
+// bit 6: member function pointer
+// bit 7: member object pointer
+
+#define BOOST_FT_type_mask                            0x000000ff // 1111 1111 
+#define BOOST_FT_callable_builtin                     0x00000001 // 0000 0001
+#define BOOST_FT_non_member                           0x00000002 // 0000 0010
+#define BOOST_FT_function                             0x00000007 // 0000 0111
+#define BOOST_FT_pointer                              0x0000000b // 0000 1011
+#define BOOST_FT_reference                            0x00000013 // 0001 0011
+#define BOOST_FT_non_member_callable_builtin          0x00000003 // 0000 0011
+#define BOOST_FT_member_pointer                       0x00000020 // 0010 0000
+#define BOOST_FT_member_function_pointer              0x00000061 // 0110 0001
+#define BOOST_FT_member_object_pointer                0x000000a3 // 1010 0001
+#define BOOST_FT_member_object_pointer_flags          0x000002a3
+
+#define BOOST_FT_variadic                             0x00000100
+#define BOOST_FT_non_variadic                         0x00000200
+#define BOOST_FT_variadic_mask                        0x00000300
+
+#define BOOST_FT_const                                0x00000400
+#define BOOST_FT_volatile                             0x00000800
+
+#define BOOST_FT_default_cc                           0x00008000
+#define BOOST_FT_cc_mask                              0x00ff8000
+
+#define BOOST_FT_kind_mask                            0x000000fc 
+
+#define BOOST_FT_flags_mask                           0x00000fff
+#define BOOST_FT_full_mask                            0x00ff0fff
+
+#define BOOST_FT_arity_shift                          24
+#define BOOST_FT_arity_mask                           0x7f000000
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/encoding/undef.hpp b/3rdParty/Boost/src/boost/function_types/detail/encoding/undef.hpp
new file mode 100644
index 0000000..1920d6f
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/encoding/undef.hpp
@@ -0,0 +1,38 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is intended for multiple inclusion
+
+#undef BOOST_FT_type_mask
+#undef BOOST_FT_kind_mask
+#undef BOOST_FT_callable_builtin
+#undef BOOST_FT_non_member
+#undef BOOST_FT_function
+#undef BOOST_FT_pointer
+#undef BOOST_FT_reference
+#undef BOOST_FT_non_member_callable_builtin
+#undef BOOST_FT_member_pointer
+#undef BOOST_FT_member_function_pointer
+#undef BOOST_FT_member_object_pointer
+#undef BOOST_FT_member_object_pointer_flags
+
+#undef BOOST_FT_variadic
+#undef BOOST_FT_non_variadic
+#undef BOOST_FT_variadic_mask
+
+#undef BOOST_FT_const
+#undef BOOST_FT_volatile
+
+#undef BOOST_FT_default_cc
+#undef BOOST_FT_cc_mask
+
+#undef BOOST_FT_flags_mask
+#undef BOOST_FT_full_mask
+
+#undef BOOST_FT_arity_mask
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/pp_arity_loop.hpp b/3rdParty/Boost/src/boost/function_types/detail/pp_arity_loop.hpp
new file mode 100644
index 0000000..b6dbff5
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/pp_arity_loop.hpp
@@ -0,0 +1,149 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is intended for multiple inclusion
+
+#ifndef BOOST_FT_PREPROCESSING_MODE
+// input:  BOOST_FT_mfp        0 or 1 <=> member function pointer?
+// input:  BOOST_FT_type_name  BOOST_FT_type --> "R (* ..._type_name)()" (pass2)
+#endif
+// input:  BOOST_FT_syntax     type macro to use
+// input:  BOOST_FT_cc         empty or cc specifier 
+// input:  BOOST_FT_ell        empty or "..."
+// input:  BOOST_FT_cv         empty or cv qualifiers
+// input:  BOOST_FT_flags      single decimal integer encoding the flags
+// output: BOOST_FT_n          number of component types (arity+1)
+// output: BOOST_FT_arity      current arity
+// output: BOOST_FT_type       macro that expands to the type
+// output: BOOST_FT_tplargs(p) template arguments with given prefix
+// output: BOOST_FT_params(p)  parameters with given prefix
+
+#ifdef __WAVE__
+#   pragma wave option(preserve: 0)
+#endif
+
+#ifndef BOOST_FT_ARITY_LOOP_IS_ITERATING
+
+#   define BOOST_FT_AL_PREPROCESSED \
+        BOOST_FT_AL_FILE(BOOST_FT_al_path,BOOST_FT_FROM_ARITY,BOOST_FT_mfp)
+
+#   define BOOST_FT_AL_FILE(base_path,max_arity,mfp) \
+        BOOST_FT_AL_FILE_I(base_path,max_arity,mfp)
+#   define BOOST_FT_AL_FILE_I(base_path,max_arity,mfp) \
+        <base_path/arity ## max_arity ## _ ## mfp.hpp>
+
+#   if !defined(BOOST_FT_PREPROCESSING_MODE)
+
+#     if BOOST_FT_MAX_ARITY < 10
+#       define BOOST_FT_FROM_ARITY 0 
+#     elif BOOST_FT_MAX_ARITY < 20
+#       define BOOST_FT_FROM_ARITY 10
+#     elif BOOST_FT_MAX_ARITY < 30
+#       define BOOST_FT_FROM_ARITY 20
+#     elif BOOST_FT_MAX_ARITY < 40
+#       define BOOST_FT_FROM_ARITY 30
+#     endif
+
+#     if BOOST_FT_FROM_ARITY
+#       include BOOST_FT_AL_PREPROCESSED
+#     endif
+
+#   elif !defined(BOOST_FT_FROM_ARITY) // single pass preprocessing
+#     define BOOST_FT_FROM_ARITY 0
+
+#   elif BOOST_FT_FROM_ARITY > 0       // arity20 includes arity10
+BOOST_PP_EXPAND(#) include BOOST_FT_AL_PREPROCESSED
+#   endif
+
+#   undef BOOST_FT_AL_PREPROCESSED
+
+#   undef BOOST_FT_AL_FILE
+#   undef BOOST_FT_AL_FILE_I
+
+#   if BOOST_FT_MAX_ARITY > BOOST_FT_FROM_ARITY
+
+#     ifndef BOOST_FT_DETAIL_ARITY_LOOP_HPP_INCLUDED
+#     define BOOST_FT_DETAIL_ARITY_LOOP_HPP_INCLUDED
+#         include <boost/preprocessor/cat.hpp>
+#         include <boost/preprocessor/tuple/eat.hpp>
+#         include <boost/preprocessor/control/if.hpp>
+#         include <boost/preprocessor/arithmetic/inc.hpp>
+#         include <boost/preprocessor/facilities/empty.hpp>
+#         include <boost/preprocessor/facilities/expand.hpp>
+#         include <boost/preprocessor/iteration/iterate.hpp>
+#         include <boost/preprocessor/repetition/enum_params.hpp>
+#         include <boost/preprocessor/repetition/enum_shifted_params.hpp>
+#         include <boost/preprocessor/repetition/enum_trailing_params.hpp>
+#     endif
+
+#     define BOOST_FT_AL_INCLUDE_FILE <BOOST_FT_al_path/master.hpp>
+
+#     define BOOST_FT_ARITY_LOOP_PREFIX 1
+#     include BOOST_FT_AL_INCLUDE_FILE
+#     undef  BOOST_FT_ARITY_LOOP_PREFIX
+
+#     if !BOOST_PP_IS_ITERATING
+#       define BOOST_PP_FILENAME_1 BOOST_FT_AL_INCLUDE_FILE
+#     elif BOOST_PP_ITERATION_DEPTH() == 1
+#       define BOOST_PP_FILENAME_2 BOOST_FT_AL_INCLUDE_FILE
+#     else
+#       error "loops nested too deeply"
+#     endif
+
+#     define BOOST_FT_arity BOOST_PP_ITERATION()
+#     define BOOST_FT_n     BOOST_PP_INC(BOOST_FT_arity)
+
+#     define BOOST_FT_type \
+          BOOST_FT_syntax(BOOST_FT_cc,BOOST_FT_type_name BOOST_PP_EMPTY)\
+               (BOOST_FT_params(BOOST_PP_EMPTY) BOOST_FT_ell) BOOST_FT_cv
+
+#     define BOOST_FT_tplargs(prefx) \
+          prefx() R BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_FT_arity,prefx() T)
+
+#     if !BOOST_FT_mfp
+
+#       define BOOST_FT_params(prefx) \
+            BOOST_PP_IF(BOOST_FT_arity,BOOST_PP_ENUM_PARAMS, \
+                BOOST_FT_nullary_param BOOST_PP_TUPLE_EAT(2))( \
+                    BOOST_FT_arity,prefx() T) 
+#     else
+
+#       define BOOST_FT_params(prefx) \
+            BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_FT_arity,prefx() T)
+
+#     endif
+
+#     if !BOOST_FT_FROM_ARITY 
+#       define BOOST_PP_ITERATION_LIMITS (BOOST_FT_mfp, BOOST_FT_MAX_ARITY)
+#     else
+#       define BOOST_PP_ITERATION_LIMITS \
+            (BOOST_FT_FROM_ARITY+1, BOOST_FT_MAX_ARITY)
+#     endif
+
+#     define BOOST_FT_ARITY_LOOP_IS_ITERATING 1
+#     include BOOST_PP_ITERATE()
+#     undef  BOOST_FT_ARITY_LOOP_IS_ITERATING
+
+#     undef BOOST_FT_arity
+#     undef BOOST_FT_params
+#     undef BOOST_FT_tplargs
+#     undef BOOST_FT_type
+
+#     define BOOST_FT_ARITY_LOOP_SUFFIX 1
+#     include BOOST_FT_AL_INCLUDE_FILE
+#     undef  BOOST_FT_ARITY_LOOP_SUFFIX
+
+#     undef BOOST_FT_AL_INCLUDE_FILE
+#   endif
+
+#   undef BOOST_FT_FROM_ARITY
+
+#else
+#   error "attempt to nest arity loops"
+#endif
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/pp_cc_loop/master.hpp b/3rdParty/Boost/src/boost/function_types/detail/pp_cc_loop/master.hpp
new file mode 100644
index 0000000..60e958c
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/pp_cc_loop/master.hpp
@@ -0,0 +1,136 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is intended for multiple inclusions
+
+#ifdef __WAVE__
+// this file has been generated from the master.hpp file in the same directory
+#   pragma wave option(preserve: 0)
+#endif
+
+
+#if !BOOST_PP_IS_ITERATING
+
+#   ifndef BOOST_FT_DETAIL_CC_LOOP_MASTER_HPP_INCLUDED
+#   define BOOST_FT_DETAIL_CC_LOOP_MASTER_HPP_INCLUDED
+#     include <boost/function_types/config/cc_names.hpp>
+
+#     include <boost/preprocessor/cat.hpp>
+#     include <boost/preprocessor/seq/size.hpp>
+#     include <boost/preprocessor/seq/elem.hpp>
+#     include <boost/preprocessor/tuple/elem.hpp>
+#     include <boost/preprocessor/iteration/iterate.hpp>
+#     include <boost/preprocessor/facilities/expand.hpp>
+#     include <boost/preprocessor/arithmetic/inc.hpp>
+#   endif
+
+#   include <boost/function_types/detail/encoding/def.hpp>
+#   include <boost/function_types/detail/encoding/aliases_def.hpp>
+
+#   define  BOOST_PP_FILENAME_1 \
+        <boost/function_types/detail/pp_cc_loop/master.hpp>
+#   define  BOOST_PP_ITERATION_LIMITS \
+        (0,BOOST_PP_SEQ_SIZE(BOOST_FT_CC_NAMES_SEQ)-1)
+#   include BOOST_PP_ITERATE()
+#   if !defined(BOOST_FT_config_valid) && BOOST_FT_CC_PREPROCESSING
+#     define BOOST_FT_cc_id 1
+#     define BOOST_FT_cc_name implicit_cc
+#     define BOOST_FT_cc BOOST_PP_EMPTY
+#     define BOOST_FT_cond callable_builtin
+#     include BOOST_FT_cc_file
+#     undef BOOST_FT_cond
+#     undef BOOST_FT_cc_name
+#     undef BOOST_FT_cc
+#     undef BOOST_FT_cc_id
+#   elif !defined(BOOST_FT_config_valid) // and generating preprocessed file
+BOOST_PP_EXPAND(#) ifndef BOOST_FT_config_valid
+BOOST_PP_EXPAND(#)   define BOOST_FT_cc_id 1
+BOOST_PP_EXPAND(#)   define BOOST_FT_cc_name implicit_cc
+BOOST_PP_EXPAND(#)   define BOOST_FT_cc BOOST_PP_EMPTY
+BOOST_PP_EXPAND(#)   define BOOST_FT_cond callable_builtin
+#define _()
+BOOST_PP_EXPAND(#)   include BOOST_FT_cc_file
+#undef _
+BOOST_PP_EXPAND(#)   undef BOOST_FT_cond
+BOOST_PP_EXPAND(#)   undef BOOST_FT_cc_name
+BOOST_PP_EXPAND(#)   undef BOOST_FT_cc
+BOOST_PP_EXPAND(#)   undef BOOST_FT_cc_id
+BOOST_PP_EXPAND(#) else
+BOOST_PP_EXPAND(#)   undef BOOST_FT_config_valid
+BOOST_PP_EXPAND(#) endif
+
+#   else
+#     undef BOOST_FT_config_valid
+#   endif
+
+#   include <boost/function_types/detail/encoding/aliases_undef.hpp>
+#   include <boost/function_types/detail/encoding/undef.hpp>
+
+#elif BOOST_FT_CC_PREPROCESSING
+
+#   define BOOST_FT_cc_id  BOOST_PP_INC(BOOST_PP_FRAME_ITERATION(1))
+#   define BOOST_FT_cc_inf \
+        BOOST_PP_SEQ_ELEM(BOOST_PP_FRAME_ITERATION(1),BOOST_FT_CC_NAMES_SEQ)
+
+#   define BOOST_FT_cc_pp_name BOOST_PP_TUPLE_ELEM(3,0,BOOST_FT_cc_inf)
+#   define BOOST_FT_cc_name    BOOST_PP_TUPLE_ELEM(3,1,BOOST_FT_cc_inf)
+#   define BOOST_FT_cc         BOOST_PP_TUPLE_ELEM(3,2,BOOST_FT_cc_inf)
+
+#   define BOOST_FT_cond BOOST_PP_CAT(BOOST_FT_CC_,BOOST_FT_cc_pp_name)
+
+#   if BOOST_FT_cond
+#     define BOOST_FT_config_valid 1
+#     include BOOST_FT_cc_file
+#   endif
+
+#   undef BOOST_FT_cond
+
+#   undef BOOST_FT_cc_pp_name
+#   undef BOOST_FT_cc_name
+#   undef BOOST_FT_cc
+
+#   undef BOOST_FT_cc_id
+#   undef BOOST_FT_cc_inf
+
+#else // if generating preprocessed file
+BOOST_PP_EXPAND(#) define BOOST_FT_cc_id BOOST_PP_INC(BOOST_PP_ITERATION())
+
+#   define BOOST_FT_cc_inf \
+        BOOST_PP_SEQ_ELEM(BOOST_PP_ITERATION(),BOOST_FT_CC_NAMES_SEQ)
+
+#   define BOOST_FT_cc_pp_name BOOST_PP_TUPLE_ELEM(3,0,BOOST_FT_cc_inf)
+
+#   define BOOST_FT_CC_DEF(name,index) \
+        name BOOST_PP_TUPLE_ELEM(3,index,BOOST_FT_cc_inf)
+BOOST_PP_EXPAND(#) define BOOST_FT_CC_DEF(BOOST_FT_cc_name,1)
+BOOST_PP_EXPAND(#) define BOOST_FT_CC_DEF(BOOST_FT_cc,2)
+#   undef  BOOST_FT_CC_DEF
+
+#   define BOOST_FT_cc_cond_v BOOST_PP_CAT(BOOST_FT_CC_,BOOST_FT_cc_pp_name)
+BOOST_PP_EXPAND(#) define BOOST_FT_cond BOOST_FT_cc_cond_v
+#   undef  BOOST_FT_cc_cond_v
+
+#   undef BOOST_FT_cc_pp_name
+#   undef BOOST_FT_cc_inf
+
+BOOST_PP_EXPAND(#) if BOOST_FT_cond
+BOOST_PP_EXPAND(#)   define BOOST_FT_config_valid 1
+#define _()
+BOOST_PP_EXPAND(#)   include BOOST_FT_cc_file
+#undef _
+BOOST_PP_EXPAND(#) endif
+
+BOOST_PP_EXPAND(#) undef BOOST_FT_cond
+
+BOOST_PP_EXPAND(#) undef BOOST_FT_cc_name
+BOOST_PP_EXPAND(#) undef BOOST_FT_cc
+
+BOOST_PP_EXPAND(#) undef BOOST_FT_cc_id
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/pp_cc_loop/preprocessed.hpp b/3rdParty/Boost/src/boost/function_types/detail/pp_cc_loop/preprocessed.hpp
new file mode 100644
index 0000000..da4079c
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/pp_cc_loop/preprocessed.hpp
@@ -0,0 +1,120 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is intended for multiple inclusions
+
+// this file has been generated from the master.hpp file in the same directory
+# define BOOST_FT_cc_id 1
+# define BOOST_FT_cc_name implicit_cc
+# define BOOST_FT_cc BOOST_PP_EMPTY
+# define BOOST_FT_cond BOOST_FT_CC_IMPLICIT
+# if BOOST_FT_cond
+# define BOOST_FT_config_valid 1
+# include BOOST_FT_cc_file
+# endif
+# undef BOOST_FT_cond
+# undef BOOST_FT_cc_name
+# undef BOOST_FT_cc
+# undef BOOST_FT_cc_id
+# define BOOST_FT_cc_id 2
+# define BOOST_FT_cc_name cdecl_cc
+# define BOOST_FT_cc BOOST_PP_IDENTITY(__cdecl )
+# define BOOST_FT_cond BOOST_FT_CC_CDECL
+# if BOOST_FT_cond
+# define BOOST_FT_config_valid 1
+# include BOOST_FT_cc_file
+# endif
+# undef BOOST_FT_cond
+# undef BOOST_FT_cc_name
+# undef BOOST_FT_cc
+# undef BOOST_FT_cc_id
+# define BOOST_FT_cc_id 3
+# define BOOST_FT_cc_name stdcall_cc
+# define BOOST_FT_cc BOOST_PP_IDENTITY(__stdcall )
+# define BOOST_FT_cond BOOST_FT_CC_STDCALL
+# if BOOST_FT_cond
+# define BOOST_FT_config_valid 1
+# include BOOST_FT_cc_file
+# endif
+# undef BOOST_FT_cond
+# undef BOOST_FT_cc_name
+# undef BOOST_FT_cc
+# undef BOOST_FT_cc_id
+# define BOOST_FT_cc_id 4
+# define BOOST_FT_cc_name pascal_cc
+# define BOOST_FT_cc BOOST_PP_IDENTITY(pascal )
+# define BOOST_FT_cond BOOST_FT_CC_PASCAL
+# if BOOST_FT_cond
+# define BOOST_FT_config_valid 1
+# include BOOST_FT_cc_file
+# endif
+# undef BOOST_FT_cond
+# undef BOOST_FT_cc_name
+# undef BOOST_FT_cc
+# undef BOOST_FT_cc_id
+# define BOOST_FT_cc_id 5
+# define BOOST_FT_cc_name fastcall_cc
+# define BOOST_FT_cc BOOST_PP_IDENTITY(__fastcall)
+# define BOOST_FT_cond BOOST_FT_CC_FASTCALL
+# if BOOST_FT_cond
+# define BOOST_FT_config_valid 1
+# include BOOST_FT_cc_file
+# endif
+# undef BOOST_FT_cond
+# undef BOOST_FT_cc_name
+# undef BOOST_FT_cc
+# undef BOOST_FT_cc_id
+# define BOOST_FT_cc_id 6
+# define BOOST_FT_cc_name clrcall_cc
+# define BOOST_FT_cc BOOST_PP_IDENTITY(__clrcall )
+# define BOOST_FT_cond BOOST_FT_CC_CLRCALL
+# if BOOST_FT_cond
+# define BOOST_FT_config_valid 1
+# include BOOST_FT_cc_file
+# endif
+# undef BOOST_FT_cond
+# undef BOOST_FT_cc_name
+# undef BOOST_FT_cc
+# undef BOOST_FT_cc_id
+# define BOOST_FT_cc_id 7
+# define BOOST_FT_cc_name thiscall_cc
+# define BOOST_FT_cc BOOST_PP_IDENTITY(__thiscall)
+# define BOOST_FT_cond BOOST_FT_CC_THISCALL
+# if BOOST_FT_cond
+# define BOOST_FT_config_valid 1
+# include BOOST_FT_cc_file
+# endif
+# undef BOOST_FT_cond
+# undef BOOST_FT_cc_name
+# undef BOOST_FT_cc
+# undef BOOST_FT_cc_id
+# define BOOST_FT_cc_id 8
+# define BOOST_FT_cc_name thiscall_cc
+# define BOOST_FT_cc BOOST_PP_EMPTY
+# define BOOST_FT_cond BOOST_FT_CC_IMPLICIT_THISCALL
+# if BOOST_FT_cond
+# define BOOST_FT_config_valid 1
+# include BOOST_FT_cc_file
+# endif
+# undef BOOST_FT_cond
+# undef BOOST_FT_cc_name
+# undef BOOST_FT_cc
+# undef BOOST_FT_cc_id
+# ifndef BOOST_FT_config_valid
+# define BOOST_FT_cc_id 1
+# define BOOST_FT_cc_name implicit_cc
+# define BOOST_FT_cc BOOST_PP_EMPTY
+# define BOOST_FT_cond 0x00000001
+# include BOOST_FT_cc_file
+# undef BOOST_FT_cond
+# undef BOOST_FT_cc_name
+# undef BOOST_FT_cc
+# undef BOOST_FT_cc_id
+# else
+# undef BOOST_FT_config_valid
+# endif
diff --git a/3rdParty/Boost/src/boost/function_types/detail/pp_loop.hpp b/3rdParty/Boost/src/boost/function_types/detail/pp_loop.hpp
new file mode 100644
index 0000000..7d8c347
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/pp_loop.hpp
@@ -0,0 +1,80 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is intended for multiple inclusions
+
+#ifndef BOOST_FT_DETAIL_PP_LOOP_HPP_INCLUDED
+#define BOOST_FT_DETAIL_PP_LOOP_HPP_INCLUDED
+#   include <boost/preprocessor/facilities/expand.hpp>
+#   include <boost/preprocessor/facilities/empty.hpp>
+#   include <boost/preprocessor/punctuation/paren.hpp>
+#endif
+
+#include <boost/function_types/detail/encoding/def.hpp>
+#include <boost/function_types/detail/encoding/aliases_def.hpp>
+
+#if defined(BOOST_FT_PREPROCESSING_MODE)
+#   define BOOST_FT_loop <boost/function_types/detail/pp_cc_loop/master.hpp>
+#else
+#   define BOOST_FT_loop \
+        <boost/function_types/detail/pp_cc_loop/preprocessed.hpp>
+#endif
+
+#if defined(BOOST_FT_al_path)
+
+#   define BOOST_FT_cc_file \
+        <boost/function_types/detail/pp_variate_loop/preprocessed.hpp>
+#   define BOOST_FT_variate_file \
+        <boost/function_types/detail/pp_arity_loop.hpp>
+
+#   ifndef BOOST_FT_type_function
+#   define BOOST_FT_type_function(cc,name) BOOST_FT_SYNTAX( \
+      R BOOST_PP_EMPTY,BOOST_PP_EMPTY,cc,BOOST_PP_EMPTY,name,BOOST_PP_EMPTY)
+#   endif
+#   ifndef BOOST_FT_type_function_pointer
+#   define BOOST_FT_type_function_pointer(cc,name) BOOST_FT_SYNTAX( \
+      R BOOST_PP_EMPTY,BOOST_PP_LPAREN,cc,* BOOST_PP_EMPTY,name,BOOST_PP_RPAREN)
+#   endif
+#   ifndef BOOST_FT_type_function_reference
+#   define BOOST_FT_type_function_reference(cc,name) BOOST_FT_SYNTAX( \
+      R BOOST_PP_EMPTY,BOOST_PP_LPAREN,cc,& BOOST_PP_EMPTY,name,BOOST_PP_RPAREN)
+#   endif
+#   ifndef BOOST_FT_type_member_function_pointer
+#   define BOOST_FT_type_member_function_pointer(cc,name) BOOST_FT_SYNTAX( \
+      R BOOST_PP_EMPTY,BOOST_PP_LPAREN,cc,T0::* BOOST_PP_EMPTY,name,BOOST_PP_RPAREN)
+#   endif
+
+#   include BOOST_FT_loop
+
+#   undef BOOST_FT_type_function
+#   undef BOOST_FT_type_function_pointer
+#   undef BOOST_FT_type_function_reference
+#   undef BOOST_FT_type_member_function_pointer
+
+#   undef BOOST_FT_variations
+#   undef BOOST_FT_variate_file
+#   undef BOOST_FT_cc_file
+#   undef BOOST_FT_al_path
+
+#elif defined(BOOST_FT_cc_file)
+
+#   include BOOST_FT_loop
+#   undef BOOST_FT_cc_file
+
+#else
+
+#   error "argument missing"
+
+#endif
+
+#undef BOOST_FT_loop
+
+#include <boost/function_types/detail/encoding/aliases_undef.hpp>
+#include <boost/function_types/detail/encoding/undef.hpp>
+
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/pp_retag_default_cc/master.hpp b/3rdParty/Boost/src/boost/function_types/detail/pp_retag_default_cc/master.hpp
new file mode 100644
index 0000000..865efce
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/pp_retag_default_cc/master.hpp
@@ -0,0 +1,103 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is guarded externally
+
+#ifdef __WAVE__
+// this file has been generated from the master.hpp file in the same directory
+#   pragma wave option(preserve: 0)
+#endif
+
+#if !defined(BOOST_PP_VALUE)
+#   include <boost/preprocessor/slot/slot.hpp>
+#   include <boost/preprocessor/iteration/self.hpp>
+
+#   include <boost/function_types/detail/encoding/def.hpp>
+#   include <boost/function_types/detail/encoding/aliases_def.hpp>
+
+namespace boost { namespace function_types {
+
+namespace detail
+{
+  template<class Tag, class RefTag> struct selector_bits
+  {
+#   define  BOOST_PP_VALUE non_member|member|non_variadic|variadic
+#   include BOOST_PP_ASSIGN_SLOT(1)
+
+    BOOST_STATIC_CONSTANT(bits_t, value = (
+        (::boost::function_types::detail::bits<Tag>::value & BOOST_FT_default_cc) 
+      | (::boost::function_types::detail::bits<RefTag>::value & BOOST_PP_SLOT(1))
+    ));
+  };
+
+  template<bits_t SelectorBits> struct default_cc_tag; 
+  
+  template<class Tag, class RefTag> struct retag_default_cc
+    : detail::compound_tag
+      < Tag, detail::default_cc_tag< 
+          ::boost::function_types::detail::selector_bits<Tag,RefTag>::value > >
+  { };
+
+  template<bits_t SelectorBits> struct default_cc_tag
+  {
+    typedef null_tag::bits bits;
+    typedef null_tag::mask mask;
+  };
+
+  class test_class;
+  typedef constant<BOOST_FT_cc_mask> cc_mask_constant;
+
+#   define BOOST_FT_self \
+      <boost/function_types/detail/pp_retag_default_cc/master.hpp>
+
+#   define  default_cc_ BOOST_FT_default_cc
+
+#   define  BOOST_PP_VALUE default_cc_|non_member|non_variadic
+#   define  BOOST_FT_tester void (*tester)()
+#   define  BOOST_PP_INDIRECT_SELF BOOST_FT_self
+#   include BOOST_PP_INCLUDE_SELF()
+
+#   define  BOOST_PP_VALUE default_cc_|non_member|variadic
+#   define  BOOST_FT_tester void (*tester)(...)
+#   define  BOOST_PP_INDIRECT_SELF BOOST_FT_self
+#   include BOOST_PP_INCLUDE_SELF()
+
+#   define  BOOST_PP_VALUE default_cc_|member|non_variadic
+#   define  BOOST_FT_tester void (test_class::*tester)()
+#   define  BOOST_PP_INDIRECT_SELF BOOST_FT_self
+#   include BOOST_PP_INCLUDE_SELF()
+
+#   define  BOOST_PP_VALUE default_cc_|member|variadic
+#   define  BOOST_FT_tester void (test_class::*tester)(...)
+#   define  BOOST_PP_INDIRECT_SELF BOOST_FT_self
+#   include BOOST_PP_INCLUDE_SELF()
+
+#   undef   default_cc_
+
+#   undef BOOST_FT_self
+
+} } } // namespace ::boost::function_types::detail
+
+#   include <boost/function_types/detail/encoding/aliases_undef.hpp>
+#   include <boost/function_types/detail/encoding/undef.hpp>
+
+#else // if defined(BOOST_PP_VALUE)
+
+#   include BOOST_PP_ASSIGN_SLOT(1)
+
+  template<> struct default_cc_tag<BOOST_PP_SLOT(1)> 
+  {
+    typedef BOOST_FT_tester;
+    typedef mpl::bitand_<components<tester>::bits,cc_mask_constant> bits;
+    typedef cc_mask_constant mask;
+  };
+
+#   undef BOOST_FT_tester
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/pp_retag_default_cc/preprocessed.hpp b/3rdParty/Boost/src/boost/function_types/detail/pp_retag_default_cc/preprocessed.hpp
new file mode 100644
index 0000000..72666d0
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/pp_retag_default_cc/preprocessed.hpp
@@ -0,0 +1,59 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is guarded externally
+
+// this file has been generated from the master.hpp file in the same directory
+namespace boost { namespace function_types {
+namespace detail
+{
+template<class Tag, class RefTag> struct selector_bits
+{
+BOOST_STATIC_CONSTANT(bits_t, value = (
+(::boost::function_types::detail::bits<Tag> ::value & 0x00008000) 
+| (::boost::function_types::detail::bits<RefTag> ::value & 802)
+));
+};
+template<bits_t SelectorBits> struct default_cc_tag; 
+template<class Tag, class RefTag> struct retag_default_cc
+: detail::compound_tag
+< Tag, detail::default_cc_tag< 
+::boost::function_types::detail::selector_bits<Tag,RefTag> ::value > >
+{ };
+template<bits_t SelectorBits> struct default_cc_tag
+{
+typedef null_tag::bits bits;
+typedef null_tag::mask mask;
+};
+class test_class;
+typedef constant<0x00ff8000> cc_mask_constant;
+template< > struct default_cc_tag<33282> 
+{
+typedef void ( *tester)();
+typedef mpl::bitand_<components<tester> ::bits,cc_mask_constant> bits;
+typedef cc_mask_constant mask;
+};
+template< > struct default_cc_tag<33026> 
+{
+typedef void ( *tester)( ... );
+typedef mpl::bitand_<components<tester> ::bits,cc_mask_constant> bits;
+typedef cc_mask_constant mask;
+};
+template< > struct default_cc_tag<33312> 
+{
+typedef void (test_class:: *tester)();
+typedef mpl::bitand_<components<tester> ::bits,cc_mask_constant> bits;
+typedef cc_mask_constant mask;
+};
+template< > struct default_cc_tag<33056> 
+{
+typedef void (test_class:: *tester)( ... );
+typedef mpl::bitand_<components<tester> ::bits,cc_mask_constant> bits;
+typedef cc_mask_constant mask;
+};
+} } } 
diff --git a/3rdParty/Boost/src/boost/function_types/detail/pp_tags/cc_tag.hpp b/3rdParty/Boost/src/boost/function_types/detail/pp_tags/cc_tag.hpp
new file mode 100644
index 0000000..81f1d89
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/pp_tags/cc_tag.hpp
@@ -0,0 +1,17 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is intended for multiple inclusions
+
+  struct BOOST_FT_cc_name
+  {
+    typedef detail::encode_bits<0,BOOST_FT_cc_id> bits;
+    typedef detail::constant<BOOST_FT_cc_mask> mask;
+  };
+
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/pp_tags/master.hpp b/3rdParty/Boost/src/boost/function_types/detail/pp_tags/master.hpp
new file mode 100644
index 0000000..9cce212
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/pp_tags/master.hpp
@@ -0,0 +1,126 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is guarded externally
+
+#ifdef __WAVE__
+// this file has been generated from the master.hpp file in the same directory
+#   pragma wave option(preserve: 0)
+#endif
+
+#if !defined(BOOST_FT_PREPROCESSING_MODE) || defined(BOOST_FT_CONFIG_HPP_INCLUDED)
+#   error "this file used with two-pass preprocessing, only"
+#endif
+
+#include <boost/preprocessor/slot/slot.hpp>
+#include <boost/function_types/detail/encoding/def.hpp>
+
+namespace boost { namespace function_types {
+
+typedef detail::property_tag<BOOST_FT_non_variadic,BOOST_FT_variadic_mask> non_variadic;
+typedef detail::property_tag<BOOST_FT_variadic,BOOST_FT_variadic_mask>     variadic;
+                                                                       
+typedef detail::property_tag<0,BOOST_FT_const>                     non_const;
+typedef detail::property_tag<BOOST_FT_const,BOOST_FT_const>        const_qualified;
+                                                                       
+typedef detail::property_tag<0,BOOST_FT_volatile>                  non_volatile;
+typedef detail::property_tag<BOOST_FT_volatile,BOOST_FT_volatile>  volatile_qualified; 
+
+typedef detail::property_tag<BOOST_FT_default_cc,BOOST_FT_cc_mask> default_cc;
+
+#define BOOST_PP_VALUE BOOST_FT_const|BOOST_FT_volatile 
+#include BOOST_PP_ASSIGN_SLOT(1)
+
+typedef detail::property_tag<0                , BOOST_PP_SLOT(1)> non_cv;
+typedef detail::property_tag<BOOST_FT_const   , BOOST_PP_SLOT(1)> const_non_volatile;
+typedef detail::property_tag<BOOST_FT_volatile, BOOST_PP_SLOT(1)> volatile_non_const;
+typedef detail::property_tag<BOOST_PP_SLOT(1) , BOOST_PP_SLOT(1)> cv_qualified;
+
+namespace detail {
+
+  typedef constant<BOOST_FT_full_mask> full_mask;
+
+  template <bits_t Flags, bits_t CCID> struct encode_bits_impl
+  {
+    BOOST_STATIC_CONSTANT( bits_t, value = 
+      Flags | (BOOST_FT_default_cc * CCID) << 1 );
+  };
+
+  template <bits_t Flags, bits_t CCID, std::size_t Arity> 
+  struct encode_charr_impl
+  {
+    BOOST_STATIC_CONSTANT(std::size_t, value = (std::size_t)(1+
+      Flags | (BOOST_FT_default_cc * CCID) << 1 | Arity << BOOST_FT_arity_shift
+    ));
+  };
+
+  template <bits_t Bits> struct decode_bits
+  {
+    BOOST_STATIC_CONSTANT(bits_t, flags = Bits & BOOST_FT_flags_mask);
+
+    BOOST_STATIC_CONSTANT(bits_t, cc_id = 
+      ( (Bits & BOOST_FT_full_mask) / BOOST_FT_default_cc) >> 1 
+    );
+
+    BOOST_STATIC_CONSTANT(bits_t, tag_bits = (Bits & BOOST_FT_full_mask));
+
+    BOOST_STATIC_CONSTANT(std::size_t, arity = (std::size_t)
+      (Bits >> BOOST_FT_arity_shift) 
+    );
+  };
+
+  template <bits_t LHS_bits, bits_t LHS_mask, bits_t RHS_bits, bits_t RHS_mask>
+  struct tag_ice
+  {
+    BOOST_STATIC_CONSTANT(bool, match =
+      RHS_bits == (LHS_bits & RHS_mask & (RHS_bits |~BOOST_FT_type_mask))
+    );
+
+    BOOST_STATIC_CONSTANT(bits_t, combined_bits = 
+      (LHS_bits & ~RHS_mask) | RHS_bits
+    );
+
+    BOOST_STATIC_CONSTANT(bits_t, combined_mask =
+      LHS_mask | RHS_mask
+    );
+
+    BOOST_STATIC_CONSTANT(bits_t, extracted_bits =
+      LHS_bits & RHS_mask
+    );
+
+  };
+
+#define BOOST_FT_mask BOOST_FT_type_mask
+  typedef property_tag<BOOST_FT_callable_builtin,BOOST_FT_mask>            callable_builtin_tag;
+  typedef property_tag<BOOST_FT_non_member_callable_builtin,BOOST_FT_mask> nonmember_callable_builtin_tag;
+  typedef property_tag<BOOST_FT_function,BOOST_FT_mask>       function_tag;
+  typedef property_tag<BOOST_FT_reference,BOOST_FT_mask>      reference_tag;
+  typedef property_tag<BOOST_FT_pointer,BOOST_FT_mask>        pointer_tag;
+  typedef property_tag<BOOST_FT_member_function_pointer,BOOST_FT_mask> member_function_pointer_tag;
+  typedef property_tag<BOOST_FT_member_object_pointer,BOOST_FT_mask> member_object_pointer_tag;
+  typedef property_tag<BOOST_FT_member_object_pointer_flags,BOOST_FT_full_mask> member_object_pointer_base;
+  typedef property_tag<BOOST_FT_member_pointer,BOOST_FT_mask> member_pointer_tag;
+#undef  BOOST_FT_mask 
+
+#define BOOST_PP_VALUE BOOST_FT_function|BOOST_FT_non_variadic|BOOST_FT_default_cc
+#include BOOST_PP_ASSIGN_SLOT(1)
+#define BOOST_PP_VALUE BOOST_FT_type_mask|BOOST_FT_variadic_mask|BOOST_FT_cc_mask
+#include BOOST_PP_ASSIGN_SLOT(2)
+
+  typedef property_tag< BOOST_PP_SLOT(1) , BOOST_PP_SLOT(2) > nv_dcc_func;
+
+#define BOOST_PP_VALUE \
+    BOOST_FT_member_function_pointer|BOOST_FT_non_variadic|BOOST_FT_default_cc
+#include BOOST_PP_ASSIGN_SLOT(1)
+
+  typedef property_tag< BOOST_PP_SLOT(1) , BOOST_PP_SLOT(2) > nv_dcc_mfp;
+
+} // namespace detail
+
+} } // namespace ::boost::function_types
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/pp_tags/preprocessed.hpp b/3rdParty/Boost/src/boost/function_types/detail/pp_tags/preprocessed.hpp
new file mode 100644
index 0000000..823c3cc
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/pp_tags/preprocessed.hpp
@@ -0,0 +1,77 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is guarded externally
+
+// this file has been generated from the master.hpp file in the same directory
+namespace boost { namespace function_types {
+typedef detail::property_tag<0x00000200,0x00000300> non_variadic;
+typedef detail::property_tag<0x00000100,0x00000300> variadic;
+typedef detail::property_tag<0,0x00000400> non_const;
+typedef detail::property_tag<0x00000400,0x00000400> const_qualified;
+typedef detail::property_tag<0,0x00000800> non_volatile;
+typedef detail::property_tag<0x00000800,0x00000800> volatile_qualified; 
+typedef detail::property_tag<0x00008000,0x00ff8000> default_cc;
+typedef detail::property_tag<0 , 3072> non_cv;
+typedef detail::property_tag<0x00000400 , 3072> const_non_volatile;
+typedef detail::property_tag<0x00000800, 3072> volatile_non_const;
+typedef detail::property_tag<3072 , 3072> cv_qualified;
+namespace detail {
+typedef constant<0x00ff0fff> full_mask;
+template <bits_t Flags, bits_t CCID> struct encode_bits_impl
+{
+BOOST_STATIC_CONSTANT( bits_t, value = 
+Flags | (0x00008000 * CCID) << 1 );
+};
+template <bits_t Flags, bits_t CCID, std::size_t Arity> 
+struct encode_charr_impl
+{
+BOOST_STATIC_CONSTANT(std::size_t, value = (std::size_t)(1+
+Flags | (0x00008000 * CCID) << 1 | Arity << 24
+));
+};
+template <bits_t Bits> struct decode_bits
+{
+BOOST_STATIC_CONSTANT(bits_t, flags = Bits & 0x00000fff);
+BOOST_STATIC_CONSTANT(bits_t, cc_id = 
+( (Bits & 0x00ff0fff) / 0x00008000) >> 1 
+);
+BOOST_STATIC_CONSTANT(bits_t, tag_bits = (Bits & 0x00ff0fff));
+BOOST_STATIC_CONSTANT(std::size_t, arity = (std::size_t)
+(Bits >> 24) 
+);
+};
+template <bits_t LHS_bits, bits_t LHS_mask, bits_t RHS_bits, bits_t RHS_mask>
+struct tag_ice
+{
+BOOST_STATIC_CONSTANT(bool, match =
+RHS_bits == (LHS_bits & RHS_mask & (RHS_bits | ~0x000000ff))
+);
+BOOST_STATIC_CONSTANT(bits_t, combined_bits = 
+(LHS_bits & ~RHS_mask) | RHS_bits
+);
+BOOST_STATIC_CONSTANT(bits_t, combined_mask =
+LHS_mask | RHS_mask
+);
+BOOST_STATIC_CONSTANT(bits_t, extracted_bits =
+LHS_bits & RHS_mask
+);
+};
+typedef property_tag<0x00000001,0x000000ff> callable_builtin_tag;
+typedef property_tag<0x00000003,0x000000ff> nonmember_callable_builtin_tag;
+typedef property_tag<0x00000007,0x000000ff> function_tag;
+typedef property_tag<0x00000013,0x000000ff> reference_tag;
+typedef property_tag<0x0000000b,0x000000ff> pointer_tag;
+typedef property_tag<0x00000061,0x000000ff> member_function_pointer_tag;
+typedef property_tag<0x000000a3,0x000000ff> member_object_pointer_tag;
+typedef property_tag<0x000002a3,0x00ff0fff> member_object_pointer_base;
+typedef property_tag<0x00000020,0x000000ff> member_pointer_tag;
+typedef property_tag< 33287 , 16745471 > nv_dcc_func;
+typedef property_tag< 33377 , 16745471 > nv_dcc_mfp;
+} 
+} } 
diff --git a/3rdParty/Boost/src/boost/function_types/detail/pp_variate_loop/master.hpp b/3rdParty/Boost/src/boost/function_types/detail/pp_variate_loop/master.hpp
new file mode 100644
index 0000000..5026342
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/pp_variate_loop/master.hpp
@@ -0,0 +1,152 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+#ifdef __WAVE__
+// this file has been generated from the master.hpp file in the same directory
+#   pragma wave option(preserve: 0)
+#endif
+
+#if !defined(BOOST_FT_PREPROCESSING_MODE)
+#   error "this file is only for two-pass preprocessing"
+#endif
+
+#if !defined(BOOST_PP_VALUE)
+#   include <boost/preprocessor/slot/slot.hpp>
+#   include <boost/preprocessor/facilities/empty.hpp>
+#   include <boost/preprocessor/facilities/expand.hpp>
+#   include <boost/function_types/detail/encoding/def.hpp>
+
+BOOST_PP_EXPAND(#) define BOOST_FT_mfp 0
+BOOST_PP_EXPAND(#) define BOOST_FT_syntax BOOST_FT_type_function
+
+#   define  BOOST_PP_VALUE \
+      BOOST_FT_function|BOOST_FT_non_variadic
+#   include __FILE__
+#   define  BOOST_PP_VALUE \
+      BOOST_FT_function|BOOST_FT_variadic
+#   include __FILE__
+
+BOOST_PP_EXPAND(#) if !BOOST_FT_NO_CV_FUNC_SUPPORT
+#   define  BOOST_PP_VALUE \
+      BOOST_FT_function|BOOST_FT_non_variadic|BOOST_FT_const
+#   include __FILE__
+#   define  BOOST_PP_VALUE \
+      BOOST_FT_function|BOOST_FT_variadic|BOOST_FT_const
+#   include __FILE__
+#   define  BOOST_PP_VALUE \
+      BOOST_FT_function|BOOST_FT_non_variadic|BOOST_FT_volatile
+#   include __FILE__
+#   define  BOOST_PP_VALUE \
+      BOOST_FT_function|BOOST_FT_variadic|BOOST_FT_volatile
+#   include __FILE__
+#   define  BOOST_PP_VALUE \
+      BOOST_FT_function|BOOST_FT_non_variadic|BOOST_FT_const|BOOST_FT_volatile
+#   include __FILE__
+#   define  BOOST_PP_VALUE \
+      BOOST_FT_function|BOOST_FT_variadic|BOOST_FT_const|BOOST_FT_volatile
+#   include __FILE__
+BOOST_PP_EXPAND(#) endif
+
+
+BOOST_PP_EXPAND(#) undef  BOOST_FT_syntax
+BOOST_PP_EXPAND(#) define BOOST_FT_syntax BOOST_FT_type_function_pointer
+
+#   define  BOOST_PP_VALUE \
+      BOOST_FT_pointer|BOOST_FT_non_variadic
+#   include __FILE__
+#   define  BOOST_PP_VALUE \
+      BOOST_FT_pointer|BOOST_FT_variadic
+#   include __FILE__
+
+BOOST_PP_EXPAND(#) undef  BOOST_FT_syntax
+BOOST_PP_EXPAND(#) define BOOST_FT_syntax BOOST_FT_type_function_reference
+
+#   define BOOST_PP_VALUE \
+      BOOST_FT_reference|BOOST_FT_non_variadic
+#   include __FILE__
+#   define BOOST_PP_VALUE \
+      BOOST_FT_reference|BOOST_FT_variadic
+#   include __FILE__
+
+BOOST_PP_EXPAND(#) undef  BOOST_FT_syntax
+BOOST_PP_EXPAND(#) undef  BOOST_FT_mfp
+
+BOOST_PP_EXPAND(#) define BOOST_FT_mfp 1
+BOOST_PP_EXPAND(#) define BOOST_FT_syntax BOOST_FT_type_member_function_pointer
+
+#   define  BOOST_PP_VALUE \
+      BOOST_FT_member_function_pointer|BOOST_FT_non_variadic
+#   include __FILE__
+#   define  BOOST_PP_VALUE \
+      BOOST_FT_member_function_pointer|BOOST_FT_variadic
+#   include __FILE__
+#   define  BOOST_PP_VALUE \
+      BOOST_FT_member_function_pointer|BOOST_FT_non_variadic|BOOST_FT_const
+#   include __FILE__
+#   define  BOOST_PP_VALUE \
+      BOOST_FT_member_function_pointer|BOOST_FT_variadic|BOOST_FT_const
+#   include __FILE__
+#   define  BOOST_PP_VALUE \
+      BOOST_FT_member_function_pointer|BOOST_FT_non_variadic|BOOST_FT_volatile
+#   include __FILE__
+#   define  BOOST_PP_VALUE \
+      BOOST_FT_member_function_pointer|BOOST_FT_variadic|BOOST_FT_volatile
+#   include __FILE__
+#   define  BOOST_PP_VALUE \
+      BOOST_FT_member_function_pointer|BOOST_FT_non_variadic|BOOST_FT_const|BOOST_FT_volatile
+#   include __FILE__
+#   define  BOOST_PP_VALUE \
+      BOOST_FT_member_function_pointer|BOOST_FT_variadic|BOOST_FT_const|BOOST_FT_volatile
+#   include __FILE__
+
+BOOST_PP_EXPAND(#) undef  BOOST_FT_syntax
+BOOST_PP_EXPAND(#) undef  BOOST_FT_mfp
+
+#   include <boost/function_types/detail/encoding/undef.hpp>
+#else 
+
+#   include BOOST_PP_ASSIGN_SLOT(1)
+
+#   define  BOOST_PP_VALUE BOOST_PP_SLOT(1) & BOOST_FT_kind_mask
+#   include BOOST_PP_ASSIGN_SLOT(2)
+
+BOOST_PP_EXPAND(#) if !!(BOOST_PP_SLOT(2) & (BOOST_FT_variations))
+BOOST_PP_EXPAND(#) if (BOOST_PP_SLOT(1) & (BOOST_FT_cond)) == (BOOST_FT_cond)
+
+#   if ( BOOST_PP_SLOT(1) & (BOOST_FT_variadic) )
+BOOST_PP_EXPAND(#)   define BOOST_FT_ell ...
+BOOST_PP_EXPAND(#)   define BOOST_FT_nullary_param
+#   else
+BOOST_PP_EXPAND(#)   define BOOST_FT_ell
+BOOST_PP_EXPAND(#)   define BOOST_FT_nullary_param BOOST_FT_NULLARY_PARAM
+#   endif
+
+#   if !( BOOST_PP_SLOT(1) & (BOOST_FT_volatile) )
+#     if !( BOOST_PP_SLOT(1) & (BOOST_FT_const) )
+BOOST_PP_EXPAND(#)   define BOOST_FT_cv 
+#     else
+BOOST_PP_EXPAND(#)   define BOOST_FT_cv const
+#     endif
+#   else
+#     if !( BOOST_PP_SLOT(1) & (BOOST_FT_const) )
+BOOST_PP_EXPAND(#)   define BOOST_FT_cv volatile
+#     else
+BOOST_PP_EXPAND(#)   define BOOST_FT_cv const volatile
+#     endif
+#   endif
+BOOST_PP_EXPAND(#)   define BOOST_FT_flags BOOST_PP_SLOT(1)
+BOOST_PP_EXPAND(#)   include BOOST_FT_variate_file
+
+BOOST_PP_EXPAND(#)   undef BOOST_FT_cv
+BOOST_PP_EXPAND(#)   undef BOOST_FT_ell
+BOOST_PP_EXPAND(#)   undef BOOST_FT_nullary_param
+BOOST_PP_EXPAND(#)   undef BOOST_FT_flags
+BOOST_PP_EXPAND(#) endif
+BOOST_PP_EXPAND(#) endif
+#endif
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/pp_variate_loop/preprocessed.hpp b/3rdParty/Boost/src/boost/function_types/detail/pp_variate_loop/preprocessed.hpp
new file mode 100644
index 0000000..7e7c4f9
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/pp_variate_loop/preprocessed.hpp
@@ -0,0 +1,283 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// this file has been generated from the master.hpp file in the same directory
+# define BOOST_FT_mfp 0
+# define BOOST_FT_syntax BOOST_FT_type_function
+# if ! ! (4 & (BOOST_FT_variations))
+# if (519 & (BOOST_FT_cond)) == (BOOST_FT_cond)
+# define BOOST_FT_ell
+# define BOOST_FT_nullary_param BOOST_FT_NULLARY_PARAM
+# define BOOST_FT_cv 
+# define BOOST_FT_flags 519
+# include BOOST_FT_variate_file
+# undef BOOST_FT_cv
+# undef BOOST_FT_ell
+# undef BOOST_FT_nullary_param
+# undef BOOST_FT_flags
+# endif
+# endif
+# if ! ! (4 & (BOOST_FT_variations))
+# if (263 & (BOOST_FT_cond)) == (BOOST_FT_cond)
+# define BOOST_FT_ell ...
+# define BOOST_FT_nullary_param
+# define BOOST_FT_cv 
+# define BOOST_FT_flags 263
+# include BOOST_FT_variate_file
+# undef BOOST_FT_cv
+# undef BOOST_FT_ell
+# undef BOOST_FT_nullary_param
+# undef BOOST_FT_flags
+# endif
+# endif
+# if !BOOST_FT_NO_CV_FUNC_SUPPORT
+# if ! ! (4 & (BOOST_FT_variations))
+# if (1543 & (BOOST_FT_cond)) == (BOOST_FT_cond)
+# define BOOST_FT_ell
+# define BOOST_FT_nullary_param BOOST_FT_NULLARY_PARAM
+# define BOOST_FT_cv const
+# define BOOST_FT_flags 1543
+# include BOOST_FT_variate_file
+# undef BOOST_FT_cv
+# undef BOOST_FT_ell
+# undef BOOST_FT_nullary_param
+# undef BOOST_FT_flags
+# endif
+# endif
+# if ! ! (4 & (BOOST_FT_variations))
+# if (1287 & (BOOST_FT_cond)) == (BOOST_FT_cond)
+# define BOOST_FT_ell ...
+# define BOOST_FT_nullary_param
+# define BOOST_FT_cv const
+# define BOOST_FT_flags 1287
+# include BOOST_FT_variate_file
+# undef BOOST_FT_cv
+# undef BOOST_FT_ell
+# undef BOOST_FT_nullary_param
+# undef BOOST_FT_flags
+# endif
+# endif
+# if ! ! (4 & (BOOST_FT_variations))
+# if (2567 & (BOOST_FT_cond)) == (BOOST_FT_cond)
+# define BOOST_FT_ell
+# define BOOST_FT_nullary_param BOOST_FT_NULLARY_PARAM
+# define BOOST_FT_cv volatile
+# define BOOST_FT_flags 2567
+# include BOOST_FT_variate_file
+# undef BOOST_FT_cv
+# undef BOOST_FT_ell
+# undef BOOST_FT_nullary_param
+# undef BOOST_FT_flags
+# endif
+# endif
+# if ! ! (4 & (BOOST_FT_variations))
+# if (2311 & (BOOST_FT_cond)) == (BOOST_FT_cond)
+# define BOOST_FT_ell ...
+# define BOOST_FT_nullary_param
+# define BOOST_FT_cv volatile
+# define BOOST_FT_flags 2311
+# include BOOST_FT_variate_file
+# undef BOOST_FT_cv
+# undef BOOST_FT_ell
+# undef BOOST_FT_nullary_param
+# undef BOOST_FT_flags
+# endif
+# endif
+# if ! ! (4 & (BOOST_FT_variations))
+# if (3591 & (BOOST_FT_cond)) == (BOOST_FT_cond)
+# define BOOST_FT_ell
+# define BOOST_FT_nullary_param BOOST_FT_NULLARY_PARAM
+# define BOOST_FT_cv const volatile
+# define BOOST_FT_flags 3591
+# include BOOST_FT_variate_file
+# undef BOOST_FT_cv
+# undef BOOST_FT_ell
+# undef BOOST_FT_nullary_param
+# undef BOOST_FT_flags
+# endif
+# endif
+# if ! ! (4 & (BOOST_FT_variations))
+# if (3335 & (BOOST_FT_cond)) == (BOOST_FT_cond)
+# define BOOST_FT_ell ...
+# define BOOST_FT_nullary_param
+# define BOOST_FT_cv const volatile
+# define BOOST_FT_flags 3335
+# include BOOST_FT_variate_file
+# undef BOOST_FT_cv
+# undef BOOST_FT_ell
+# undef BOOST_FT_nullary_param
+# undef BOOST_FT_flags
+# endif
+# endif
+# endif
+# undef BOOST_FT_syntax
+# define BOOST_FT_syntax BOOST_FT_type_function_pointer
+# if ! ! (8 & (BOOST_FT_variations))
+# if (523 & (BOOST_FT_cond)) == (BOOST_FT_cond)
+# define BOOST_FT_ell
+# define BOOST_FT_nullary_param BOOST_FT_NULLARY_PARAM
+# define BOOST_FT_cv 
+# define BOOST_FT_flags 523
+# include BOOST_FT_variate_file
+# undef BOOST_FT_cv
+# undef BOOST_FT_ell
+# undef BOOST_FT_nullary_param
+# undef BOOST_FT_flags
+# endif
+# endif
+# if ! ! (8 & (BOOST_FT_variations))
+# if (267 & (BOOST_FT_cond)) == (BOOST_FT_cond)
+# define BOOST_FT_ell ...
+# define BOOST_FT_nullary_param
+# define BOOST_FT_cv 
+# define BOOST_FT_flags 267
+# include BOOST_FT_variate_file
+# undef BOOST_FT_cv
+# undef BOOST_FT_ell
+# undef BOOST_FT_nullary_param
+# undef BOOST_FT_flags
+# endif
+# endif
+# undef BOOST_FT_syntax
+# define BOOST_FT_syntax BOOST_FT_type_function_reference
+# if ! ! (16 & (BOOST_FT_variations))
+# if (531 & (BOOST_FT_cond)) == (BOOST_FT_cond)
+# define BOOST_FT_ell
+# define BOOST_FT_nullary_param BOOST_FT_NULLARY_PARAM
+# define BOOST_FT_cv 
+# define BOOST_FT_flags 531
+# include BOOST_FT_variate_file
+# undef BOOST_FT_cv
+# undef BOOST_FT_ell
+# undef BOOST_FT_nullary_param
+# undef BOOST_FT_flags
+# endif
+# endif
+# if ! ! (16 & (BOOST_FT_variations))
+# if (275 & (BOOST_FT_cond)) == (BOOST_FT_cond)
+# define BOOST_FT_ell ...
+# define BOOST_FT_nullary_param
+# define BOOST_FT_cv 
+# define BOOST_FT_flags 275
+# include BOOST_FT_variate_file
+# undef BOOST_FT_cv
+# undef BOOST_FT_ell
+# undef BOOST_FT_nullary_param
+# undef BOOST_FT_flags
+# endif
+# endif
+# undef BOOST_FT_syntax
+# undef BOOST_FT_mfp
+# define BOOST_FT_mfp 1
+# define BOOST_FT_syntax BOOST_FT_type_member_function_pointer
+# if ! ! (96 & (BOOST_FT_variations))
+# if (609 & (BOOST_FT_cond)) == (BOOST_FT_cond)
+# define BOOST_FT_ell
+# define BOOST_FT_nullary_param BOOST_FT_NULLARY_PARAM
+# define BOOST_FT_cv 
+# define BOOST_FT_flags 609
+# include BOOST_FT_variate_file
+# undef BOOST_FT_cv
+# undef BOOST_FT_ell
+# undef BOOST_FT_nullary_param
+# undef BOOST_FT_flags
+# endif
+# endif
+# if ! ! (96 & (BOOST_FT_variations))
+# if (353 & (BOOST_FT_cond)) == (BOOST_FT_cond)
+# define BOOST_FT_ell ...
+# define BOOST_FT_nullary_param
+# define BOOST_FT_cv 
+# define BOOST_FT_flags 353
+# include BOOST_FT_variate_file
+# undef BOOST_FT_cv
+# undef BOOST_FT_ell
+# undef BOOST_FT_nullary_param
+# undef BOOST_FT_flags
+# endif
+# endif
+# if ! ! (96 & (BOOST_FT_variations))
+# if (1633 & (BOOST_FT_cond)) == (BOOST_FT_cond)
+# define BOOST_FT_ell
+# define BOOST_FT_nullary_param BOOST_FT_NULLARY_PARAM
+# define BOOST_FT_cv const
+# define BOOST_FT_flags 1633
+# include BOOST_FT_variate_file
+# undef BOOST_FT_cv
+# undef BOOST_FT_ell
+# undef BOOST_FT_nullary_param
+# undef BOOST_FT_flags
+# endif
+# endif
+# if ! ! (96 & (BOOST_FT_variations))
+# if (1377 & (BOOST_FT_cond)) == (BOOST_FT_cond)
+# define BOOST_FT_ell ...
+# define BOOST_FT_nullary_param
+# define BOOST_FT_cv const
+# define BOOST_FT_flags 1377
+# include BOOST_FT_variate_file
+# undef BOOST_FT_cv
+# undef BOOST_FT_ell
+# undef BOOST_FT_nullary_param
+# undef BOOST_FT_flags
+# endif
+# endif
+# if ! ! (96 & (BOOST_FT_variations))
+# if (2657 & (BOOST_FT_cond)) == (BOOST_FT_cond)
+# define BOOST_FT_ell
+# define BOOST_FT_nullary_param BOOST_FT_NULLARY_PARAM
+# define BOOST_FT_cv volatile
+# define BOOST_FT_flags 2657
+# include BOOST_FT_variate_file
+# undef BOOST_FT_cv
+# undef BOOST_FT_ell
+# undef BOOST_FT_nullary_param
+# undef BOOST_FT_flags
+# endif
+# endif
+# if ! ! (96 & (BOOST_FT_variations))
+# if (2401 & (BOOST_FT_cond)) == (BOOST_FT_cond)
+# define BOOST_FT_ell ...
+# define BOOST_FT_nullary_param
+# define BOOST_FT_cv volatile
+# define BOOST_FT_flags 2401
+# include BOOST_FT_variate_file
+# undef BOOST_FT_cv
+# undef BOOST_FT_ell
+# undef BOOST_FT_nullary_param
+# undef BOOST_FT_flags
+# endif
+# endif
+# if ! ! (96 & (BOOST_FT_variations))
+# if (3681 & (BOOST_FT_cond)) == (BOOST_FT_cond)
+# define BOOST_FT_ell
+# define BOOST_FT_nullary_param BOOST_FT_NULLARY_PARAM
+# define BOOST_FT_cv const volatile
+# define BOOST_FT_flags 3681
+# include BOOST_FT_variate_file
+# undef BOOST_FT_cv
+# undef BOOST_FT_ell
+# undef BOOST_FT_nullary_param
+# undef BOOST_FT_flags
+# endif
+# endif
+# if ! ! (96 & (BOOST_FT_variations))
+# if (3425 & (BOOST_FT_cond)) == (BOOST_FT_cond)
+# define BOOST_FT_ell ...
+# define BOOST_FT_nullary_param
+# define BOOST_FT_cv const volatile
+# define BOOST_FT_flags 3425
+# include BOOST_FT_variate_file
+# undef BOOST_FT_cv
+# undef BOOST_FT_ell
+# undef BOOST_FT_nullary_param
+# undef BOOST_FT_flags
+# endif
+# endif
+# undef BOOST_FT_syntax
+# undef BOOST_FT_mfp
diff --git a/3rdParty/Boost/src/boost/function_types/detail/retag_default_cc.hpp b/3rdParty/Boost/src/boost/function_types/detail/retag_default_cc.hpp
new file mode 100644
index 0000000..c8926f6
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/retag_default_cc.hpp
@@ -0,0 +1,23 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+#ifndef BOOST_FT_DETAIL_RETAG_DEFAULT_CC_HPP_INCLUDED
+#define BOOST_FT_DETAIL_RETAG_DEFAULT_CC_HPP_INCLUDED
+
+#include <boost/mpl/bitand.hpp>
+
+#include <boost/function_types/components.hpp>
+
+#if defined(BOOST_FT_PREPROCESSING_MODE)
+#   include <boost/function_types/detail/pp_retag_default_cc/master.hpp>
+#else
+#   include <boost/function_types/detail/pp_retag_default_cc/preprocessed.hpp>
+#endif
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/synthesize.hpp b/3rdParty/Boost/src/boost/function_types/detail/synthesize.hpp
new file mode 100644
index 0000000..0b15cbb
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/synthesize.hpp
@@ -0,0 +1,79 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+#ifndef BOOST_FT_DETAIL_SYNTHESIZE_HPP_INCLUDED
+#define BOOST_FT_DETAIL_SYNTHESIZE_HPP_INCLUDED
+
+#include <cstddef>
+
+#include <boost/mpl/at.hpp>
+#include <boost/mpl/size.hpp>
+
+#include <boost/function_types/config/config.hpp>
+#include <boost/function_types/property_tags.hpp>
+#include <boost/function_types/detail/cv_traits.hpp>
+#include <boost/function_types/detail/retag_default_cc.hpp>
+
+namespace boost { namespace function_types { namespace detail {
+
+template<bits_t Flags, bits_t CCID, std::size_t Size>
+struct synthesize_impl_o
+{
+  template<typename Seq> struct synthesize_impl_i { };
+};
+
+template<typename Seq, bits_t Bits>
+struct synthesize_impl
+  : detail::synthesize_impl_o
+    < ::boost::function_types::detail::decode_bits<Bits>::flags
+    , ::boost::function_types::detail::decode_bits<Bits>::cc_id
+    , ::boost::mpl::size<Seq>::value
+    >
+    ::template synthesize_impl_i<Seq>
+{ };
+
+template<typename Seq, typename Tag>
+struct synthesize_func
+  : detail::synthesize_impl
+    < Seq
+    , ::boost::function_types::detail::bits
+      < detail::retag_default_cc
+        < function_types::tag<nv_dcc_func, Tag> > 
+      >::value 
+    >
+{ };
+
+template<typename Seq, typename Tag>
+struct synthesize_mfp
+  : detail::synthesize_impl
+    < Seq 
+    , ::boost::function_types::detail::bits
+      < detail::retag_default_cc
+        < function_types::tag
+          < typename detail::cv_traits< typename mpl::at_c<Seq,1>::type >::tag
+          , nv_dcc_mfp, Tag
+        > >
+      >::value
+    >
+{ };
+
+template<typename S, typename R = typename mpl::at_c<S,0>::type,
+    typename C = typename mpl::at_c<S,1>::type>
+struct synthesize_mop
+{
+  typedef R C::* type;
+};
+
+#define BOOST_FT_variations BOOST_FT_function|BOOST_FT_member_pointer
+#define BOOST_FT_al_path boost/function_types/detail/synthesize_impl
+#include <boost/function_types/detail/pp_loop.hpp>
+
+} } } // namespace ::boost::function_types::detail
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/synthesize_impl/arity10_0.hpp b/3rdParty/Boost/src/boost/function_types/detail/synthesize_impl/arity10_0.hpp
new file mode 100644
index 0000000..ad22e50
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/synthesize_impl/arity10_0.hpp
@@ -0,0 +1,334 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is intended for multiple inclusion
+
+// input:  BOOST_FT_syntax     type macro to use
+// input:  BOOST_FT_cc         empty or cc specifier 
+// input:  BOOST_FT_ell        empty or "..."
+// input:  BOOST_FT_cv         empty or cv qualifiers
+// input:  BOOST_FT_flags      single decimal integer encoding the flags
+// output: BOOST_FT_n          number of component types (arity+1)
+// output: BOOST_FT_arity      current arity
+// output: BOOST_FT_type       macro that expands to the type
+// output: BOOST_FT_tplargs(p) template arguments with given prefix
+// output: BOOST_FT_params(p)  parameters with given prefix
+
+# define BOOST_FT_make_type(flags,cc,arity) BOOST_FT_make_type_impl(flags,cc,arity)
+# define BOOST_FT_make_type_impl(flags,cc,arity) make_type_ ## flags ## _ ## cc ## _ ## arity
+template< typename R >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,0)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (BOOST_FT_nullary_param BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 1 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,0) 
+< typename mpl::deref< iter_0 > ::type 
+> ::type type;
+};
+};
+template< typename R , typename T0 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,1)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 2 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,1) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,2)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 3 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,2) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,3)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 4 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,3) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,4)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 5 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,4) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,5)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 6 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,5) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,6)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 7 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,6) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,7)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 8 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,7) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,8)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 9 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,8) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,9)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 10 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,9) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,10)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 11 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,10) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+> ::type type;
+};
+};
+# undef BOOST_FT_make_type
+# undef BOOST_FT_make_type_impl
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/synthesize_impl/arity10_1.hpp b/3rdParty/Boost/src/boost/function_types/detail/synthesize_impl/arity10_1.hpp
new file mode 100644
index 0000000..bbd5963
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/synthesize_impl/arity10_1.hpp
@@ -0,0 +1,326 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is intended for multiple inclusion
+
+// input:  BOOST_FT_syntax     type macro to use
+// input:  BOOST_FT_cc         empty or cc specifier 
+// input:  BOOST_FT_ell        empty or "..."
+// input:  BOOST_FT_cv         empty or cv qualifiers
+// input:  BOOST_FT_flags      single decimal integer encoding the flags
+// output: BOOST_FT_n          number of component types (arity+1)
+// output: BOOST_FT_arity      current arity
+// output: BOOST_FT_type       macro that expands to the type
+// output: BOOST_FT_tplargs(p) template arguments with given prefix
+// output: BOOST_FT_params(p)  parameters with given prefix
+
+# define BOOST_FT_make_type(flags,cc,arity) BOOST_FT_make_type_impl(flags,cc,arity)
+# define BOOST_FT_make_type_impl(flags,cc,arity) make_type_ ## flags ## _ ## cc ## _ ## arity
+template< typename R , typename T0 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,1)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) ( BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 2 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,1) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,2)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 3 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,2) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,3)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 4 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,3) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,4)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 5 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,4) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,5)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 6 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,5) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,6)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 7 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,6) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,7)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 8 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,7) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,8)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 9 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,8) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,9)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 10 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,9) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,10)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 11 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,10) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+> ::type type;
+};
+};
+# undef BOOST_FT_make_type
+# undef BOOST_FT_make_type_impl
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/synthesize_impl/arity20_0.hpp b/3rdParty/Boost/src/boost/function_types/detail/synthesize_impl/arity20_0.hpp
new file mode 100644
index 0000000..cb62e69
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/synthesize_impl/arity20_0.hpp
@@ -0,0 +1,517 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is intended for multiple inclusion
+
+// input:  BOOST_FT_syntax     type macro to use
+// input:  BOOST_FT_cc         empty or cc specifier 
+// input:  BOOST_FT_ell        empty or "..."
+// input:  BOOST_FT_cv         empty or cv qualifiers
+// input:  BOOST_FT_flags      single decimal integer encoding the flags
+// output: BOOST_FT_n          number of component types (arity+1)
+// output: BOOST_FT_arity      current arity
+// output: BOOST_FT_type       macro that expands to the type
+// output: BOOST_FT_tplargs(p) template arguments with given prefix
+// output: BOOST_FT_params(p)  parameters with given prefix
+
+# include <boost/function_types/detail/synthesize_impl/arity10_0.hpp>
+# define BOOST_FT_make_type(flags,cc,arity) BOOST_FT_make_type_impl(flags,cc,arity)
+# define BOOST_FT_make_type_impl(flags,cc,arity) make_type_ ## flags ## _ ## cc ## _ ## arity
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,11)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 12 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,11) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,12)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 13 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,12) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,13)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 14 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,13) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,14)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 15 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,14) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,15)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 16 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,15) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,16)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 17 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,16) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,17)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 18 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,17) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,18)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 19 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,18) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,19)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 20 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,19) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,20)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 21 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,20) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+> ::type type;
+};
+};
+# undef BOOST_FT_make_type
+# undef BOOST_FT_make_type_impl
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/synthesize_impl/arity20_1.hpp b/3rdParty/Boost/src/boost/function_types/detail/synthesize_impl/arity20_1.hpp
new file mode 100644
index 0000000..1c5e1e7
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/synthesize_impl/arity20_1.hpp
@@ -0,0 +1,527 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is intended for multiple inclusion
+
+// input:  BOOST_FT_syntax     type macro to use
+// input:  BOOST_FT_cc         empty or cc specifier 
+// input:  BOOST_FT_ell        empty or "..."
+// input:  BOOST_FT_cv         empty or cv qualifiers
+// input:  BOOST_FT_flags      single decimal integer encoding the flags
+// output: BOOST_FT_n          number of component types (arity+1)
+// output: BOOST_FT_arity      current arity
+// output: BOOST_FT_type       macro that expands to the type
+// output: BOOST_FT_tplargs(p) template arguments with given prefix
+// output: BOOST_FT_params(p)  parameters with given prefix
+
+# include <boost/function_types/detail/synthesize_impl/arity10_1.hpp>
+# define BOOST_FT_make_type(flags,cc,arity) BOOST_FT_make_type_impl(flags,cc,arity)
+# define BOOST_FT_make_type_impl(flags,cc,arity) make_type_ ## flags ## _ ## cc ## _ ## arity
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,11)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 12 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,11) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,12)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 13 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,12) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,13)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 14 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,13) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,14)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 15 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,14) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,15)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 16 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,15) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,16)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 17 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,16) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,17)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 18 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,17) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,18)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 19 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,18) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,19)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 20 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,19) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,20)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 21 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,20) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+> ::type type;
+};
+};
+# undef BOOST_FT_make_type
+# undef BOOST_FT_make_type_impl
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/synthesize_impl/arity30_0.hpp b/3rdParty/Boost/src/boost/function_types/detail/synthesize_impl/arity30_0.hpp
new file mode 100644
index 0000000..63a64f0
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/synthesize_impl/arity30_0.hpp
@@ -0,0 +1,717 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is intended for multiple inclusion
+
+// input:  BOOST_FT_syntax     type macro to use
+// input:  BOOST_FT_cc         empty or cc specifier 
+// input:  BOOST_FT_ell        empty or "..."
+// input:  BOOST_FT_cv         empty or cv qualifiers
+// input:  BOOST_FT_flags      single decimal integer encoding the flags
+// output: BOOST_FT_n          number of component types (arity+1)
+// output: BOOST_FT_arity      current arity
+// output: BOOST_FT_type       macro that expands to the type
+// output: BOOST_FT_tplargs(p) template arguments with given prefix
+// output: BOOST_FT_params(p)  parameters with given prefix
+
+# include <boost/function_types/detail/synthesize_impl/arity20_0.hpp>
+# define BOOST_FT_make_type(flags,cc,arity) BOOST_FT_make_type_impl(flags,cc,arity)
+# define BOOST_FT_make_type_impl(flags,cc,arity) make_type_ ## flags ## _ ## cc ## _ ## arity
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,21)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 22 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,21) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,22)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 23 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,22) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,23)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 24 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,23) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,24)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 25 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,24) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,25)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 26 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,25) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,26)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 27 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,26) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,27)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 28 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,27) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,28)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 29 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,28) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,29)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 30 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,29) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,30)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 31 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+typedef typename mpl::next< iter_29 > ::type iter_30;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,30) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+, typename mpl::deref< iter_30 > ::type
+> ::type type;
+};
+};
+# undef BOOST_FT_make_type
+# undef BOOST_FT_make_type_impl
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/synthesize_impl/arity30_1.hpp b/3rdParty/Boost/src/boost/function_types/detail/synthesize_impl/arity30_1.hpp
new file mode 100644
index 0000000..6cba73e
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/synthesize_impl/arity30_1.hpp
@@ -0,0 +1,727 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is intended for multiple inclusion
+
+// input:  BOOST_FT_syntax     type macro to use
+// input:  BOOST_FT_cc         empty or cc specifier 
+// input:  BOOST_FT_ell        empty or "..."
+// input:  BOOST_FT_cv         empty or cv qualifiers
+// input:  BOOST_FT_flags      single decimal integer encoding the flags
+// output: BOOST_FT_n          number of component types (arity+1)
+// output: BOOST_FT_arity      current arity
+// output: BOOST_FT_type       macro that expands to the type
+// output: BOOST_FT_tplargs(p) template arguments with given prefix
+// output: BOOST_FT_params(p)  parameters with given prefix
+
+# include <boost/function_types/detail/synthesize_impl/arity20_1.hpp>
+# define BOOST_FT_make_type(flags,cc,arity) BOOST_FT_make_type_impl(flags,cc,arity)
+# define BOOST_FT_make_type_impl(flags,cc,arity) make_type_ ## flags ## _ ## cc ## _ ## arity
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,21)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 22 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,21) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,22)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 23 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,22) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,23)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 24 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,23) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,24)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 25 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,24) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,25)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 26 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,25) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,26)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 27 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,26) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,27)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 28 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,27) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,28)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 29 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,28) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,29)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 30 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,29) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,30)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 31 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+typedef typename mpl::next< iter_29 > ::type iter_30;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,30) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+, typename mpl::deref< iter_30 > ::type
+> ::type type;
+};
+};
+# undef BOOST_FT_make_type
+# undef BOOST_FT_make_type_impl
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/synthesize_impl/arity40_0.hpp b/3rdParty/Boost/src/boost/function_types/detail/synthesize_impl/arity40_0.hpp
new file mode 100644
index 0000000..b065757
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/synthesize_impl/arity40_0.hpp
@@ -0,0 +1,917 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is intended for multiple inclusion
+
+// input:  BOOST_FT_syntax     type macro to use
+// input:  BOOST_FT_cc         empty or cc specifier 
+// input:  BOOST_FT_ell        empty or "..."
+// input:  BOOST_FT_cv         empty or cv qualifiers
+// input:  BOOST_FT_flags      single decimal integer encoding the flags
+// output: BOOST_FT_n          number of component types (arity+1)
+// output: BOOST_FT_arity      current arity
+// output: BOOST_FT_type       macro that expands to the type
+// output: BOOST_FT_tplargs(p) template arguments with given prefix
+// output: BOOST_FT_params(p)  parameters with given prefix
+
+# include <boost/function_types/detail/synthesize_impl/arity30_0.hpp>
+# define BOOST_FT_make_type(flags,cc,arity) BOOST_FT_make_type_impl(flags,cc,arity)
+# define BOOST_FT_make_type_impl(flags,cc,arity) make_type_ ## flags ## _ ## cc ## _ ## arity
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,31)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 32 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+typedef typename mpl::next< iter_29 > ::type iter_30;
+typedef typename mpl::next< iter_30 > ::type iter_31;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,31) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+, typename mpl::deref< iter_30 > ::type
+, typename mpl::deref< iter_31 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,32)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 33 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+typedef typename mpl::next< iter_29 > ::type iter_30;
+typedef typename mpl::next< iter_30 > ::type iter_31;
+typedef typename mpl::next< iter_31 > ::type iter_32;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,32) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+, typename mpl::deref< iter_30 > ::type
+, typename mpl::deref< iter_31 > ::type
+, typename mpl::deref< iter_32 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,33)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 34 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+typedef typename mpl::next< iter_29 > ::type iter_30;
+typedef typename mpl::next< iter_30 > ::type iter_31;
+typedef typename mpl::next< iter_31 > ::type iter_32;
+typedef typename mpl::next< iter_32 > ::type iter_33;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,33) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+, typename mpl::deref< iter_30 > ::type
+, typename mpl::deref< iter_31 > ::type
+, typename mpl::deref< iter_32 > ::type
+, typename mpl::deref< iter_33 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,34)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 35 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+typedef typename mpl::next< iter_29 > ::type iter_30;
+typedef typename mpl::next< iter_30 > ::type iter_31;
+typedef typename mpl::next< iter_31 > ::type iter_32;
+typedef typename mpl::next< iter_32 > ::type iter_33;
+typedef typename mpl::next< iter_33 > ::type iter_34;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,34) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+, typename mpl::deref< iter_30 > ::type
+, typename mpl::deref< iter_31 > ::type
+, typename mpl::deref< iter_32 > ::type
+, typename mpl::deref< iter_33 > ::type
+, typename mpl::deref< iter_34 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,35)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 36 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+typedef typename mpl::next< iter_29 > ::type iter_30;
+typedef typename mpl::next< iter_30 > ::type iter_31;
+typedef typename mpl::next< iter_31 > ::type iter_32;
+typedef typename mpl::next< iter_32 > ::type iter_33;
+typedef typename mpl::next< iter_33 > ::type iter_34;
+typedef typename mpl::next< iter_34 > ::type iter_35;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,35) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+, typename mpl::deref< iter_30 > ::type
+, typename mpl::deref< iter_31 > ::type
+, typename mpl::deref< iter_32 > ::type
+, typename mpl::deref< iter_33 > ::type
+, typename mpl::deref< iter_34 > ::type
+, typename mpl::deref< iter_35 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,36)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 37 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+typedef typename mpl::next< iter_29 > ::type iter_30;
+typedef typename mpl::next< iter_30 > ::type iter_31;
+typedef typename mpl::next< iter_31 > ::type iter_32;
+typedef typename mpl::next< iter_32 > ::type iter_33;
+typedef typename mpl::next< iter_33 > ::type iter_34;
+typedef typename mpl::next< iter_34 > ::type iter_35;
+typedef typename mpl::next< iter_35 > ::type iter_36;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,36) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+, typename mpl::deref< iter_30 > ::type
+, typename mpl::deref< iter_31 > ::type
+, typename mpl::deref< iter_32 > ::type
+, typename mpl::deref< iter_33 > ::type
+, typename mpl::deref< iter_34 > ::type
+, typename mpl::deref< iter_35 > ::type
+, typename mpl::deref< iter_36 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,37)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 38 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+typedef typename mpl::next< iter_29 > ::type iter_30;
+typedef typename mpl::next< iter_30 > ::type iter_31;
+typedef typename mpl::next< iter_31 > ::type iter_32;
+typedef typename mpl::next< iter_32 > ::type iter_33;
+typedef typename mpl::next< iter_33 > ::type iter_34;
+typedef typename mpl::next< iter_34 > ::type iter_35;
+typedef typename mpl::next< iter_35 > ::type iter_36;
+typedef typename mpl::next< iter_36 > ::type iter_37;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,37) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+, typename mpl::deref< iter_30 > ::type
+, typename mpl::deref< iter_31 > ::type
+, typename mpl::deref< iter_32 > ::type
+, typename mpl::deref< iter_33 > ::type
+, typename mpl::deref< iter_34 > ::type
+, typename mpl::deref< iter_35 > ::type
+, typename mpl::deref< iter_36 > ::type
+, typename mpl::deref< iter_37 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,38)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 39 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+typedef typename mpl::next< iter_29 > ::type iter_30;
+typedef typename mpl::next< iter_30 > ::type iter_31;
+typedef typename mpl::next< iter_31 > ::type iter_32;
+typedef typename mpl::next< iter_32 > ::type iter_33;
+typedef typename mpl::next< iter_33 > ::type iter_34;
+typedef typename mpl::next< iter_34 > ::type iter_35;
+typedef typename mpl::next< iter_35 > ::type iter_36;
+typedef typename mpl::next< iter_36 > ::type iter_37;
+typedef typename mpl::next< iter_37 > ::type iter_38;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,38) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+, typename mpl::deref< iter_30 > ::type
+, typename mpl::deref< iter_31 > ::type
+, typename mpl::deref< iter_32 > ::type
+, typename mpl::deref< iter_33 > ::type
+, typename mpl::deref< iter_34 > ::type
+, typename mpl::deref< iter_35 > ::type
+, typename mpl::deref< iter_36 > ::type
+, typename mpl::deref< iter_37 > ::type
+, typename mpl::deref< iter_38 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,39)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 40 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+typedef typename mpl::next< iter_29 > ::type iter_30;
+typedef typename mpl::next< iter_30 > ::type iter_31;
+typedef typename mpl::next< iter_31 > ::type iter_32;
+typedef typename mpl::next< iter_32 > ::type iter_33;
+typedef typename mpl::next< iter_33 > ::type iter_34;
+typedef typename mpl::next< iter_34 > ::type iter_35;
+typedef typename mpl::next< iter_35 > ::type iter_36;
+typedef typename mpl::next< iter_36 > ::type iter_37;
+typedef typename mpl::next< iter_37 > ::type iter_38;
+typedef typename mpl::next< iter_38 > ::type iter_39;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,39) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+, typename mpl::deref< iter_30 > ::type
+, typename mpl::deref< iter_31 > ::type
+, typename mpl::deref< iter_32 > ::type
+, typename mpl::deref< iter_33 > ::type
+, typename mpl::deref< iter_34 > ::type
+, typename mpl::deref< iter_35 > ::type
+, typename mpl::deref< iter_36 > ::type
+, typename mpl::deref< iter_37 > ::type
+, typename mpl::deref< iter_38 > ::type
+, typename mpl::deref< iter_39 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,40)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 41 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+typedef typename mpl::next< iter_29 > ::type iter_30;
+typedef typename mpl::next< iter_30 > ::type iter_31;
+typedef typename mpl::next< iter_31 > ::type iter_32;
+typedef typename mpl::next< iter_32 > ::type iter_33;
+typedef typename mpl::next< iter_33 > ::type iter_34;
+typedef typename mpl::next< iter_34 > ::type iter_35;
+typedef typename mpl::next< iter_35 > ::type iter_36;
+typedef typename mpl::next< iter_36 > ::type iter_37;
+typedef typename mpl::next< iter_37 > ::type iter_38;
+typedef typename mpl::next< iter_38 > ::type iter_39;
+typedef typename mpl::next< iter_39 > ::type iter_40;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,40) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+, typename mpl::deref< iter_30 > ::type
+, typename mpl::deref< iter_31 > ::type
+, typename mpl::deref< iter_32 > ::type
+, typename mpl::deref< iter_33 > ::type
+, typename mpl::deref< iter_34 > ::type
+, typename mpl::deref< iter_35 > ::type
+, typename mpl::deref< iter_36 > ::type
+, typename mpl::deref< iter_37 > ::type
+, typename mpl::deref< iter_38 > ::type
+, typename mpl::deref< iter_39 > ::type
+, typename mpl::deref< iter_40 > ::type
+> ::type type;
+};
+};
+# undef BOOST_FT_make_type
+# undef BOOST_FT_make_type_impl
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/synthesize_impl/arity40_1.hpp b/3rdParty/Boost/src/boost/function_types/detail/synthesize_impl/arity40_1.hpp
new file mode 100644
index 0000000..c9f2194
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/synthesize_impl/arity40_1.hpp
@@ -0,0 +1,927 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is intended for multiple inclusion
+
+// input:  BOOST_FT_syntax     type macro to use
+// input:  BOOST_FT_cc         empty or cc specifier 
+// input:  BOOST_FT_ell        empty or "..."
+// input:  BOOST_FT_cv         empty or cv qualifiers
+// input:  BOOST_FT_flags      single decimal integer encoding the flags
+// output: BOOST_FT_n          number of component types (arity+1)
+// output: BOOST_FT_arity      current arity
+// output: BOOST_FT_type       macro that expands to the type
+// output: BOOST_FT_tplargs(p) template arguments with given prefix
+// output: BOOST_FT_params(p)  parameters with given prefix
+
+# include <boost/function_types/detail/synthesize_impl/arity30_1.hpp>
+# define BOOST_FT_make_type(flags,cc,arity) BOOST_FT_make_type_impl(flags,cc,arity)
+# define BOOST_FT_make_type_impl(flags,cc,arity) make_type_ ## flags ## _ ## cc ## _ ## arity
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,31)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 32 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+typedef typename mpl::next< iter_29 > ::type iter_30;
+typedef typename mpl::next< iter_30 > ::type iter_31;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,31) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+, typename mpl::deref< iter_30 > ::type
+, typename mpl::deref< iter_31 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,32)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 33 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+typedef typename mpl::next< iter_29 > ::type iter_30;
+typedef typename mpl::next< iter_30 > ::type iter_31;
+typedef typename mpl::next< iter_31 > ::type iter_32;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,32) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+, typename mpl::deref< iter_30 > ::type
+, typename mpl::deref< iter_31 > ::type
+, typename mpl::deref< iter_32 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,33)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 34 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+typedef typename mpl::next< iter_29 > ::type iter_30;
+typedef typename mpl::next< iter_30 > ::type iter_31;
+typedef typename mpl::next< iter_31 > ::type iter_32;
+typedef typename mpl::next< iter_32 > ::type iter_33;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,33) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+, typename mpl::deref< iter_30 > ::type
+, typename mpl::deref< iter_31 > ::type
+, typename mpl::deref< iter_32 > ::type
+, typename mpl::deref< iter_33 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,34)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 35 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+typedef typename mpl::next< iter_29 > ::type iter_30;
+typedef typename mpl::next< iter_30 > ::type iter_31;
+typedef typename mpl::next< iter_31 > ::type iter_32;
+typedef typename mpl::next< iter_32 > ::type iter_33;
+typedef typename mpl::next< iter_33 > ::type iter_34;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,34) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+, typename mpl::deref< iter_30 > ::type
+, typename mpl::deref< iter_31 > ::type
+, typename mpl::deref< iter_32 > ::type
+, typename mpl::deref< iter_33 > ::type
+, typename mpl::deref< iter_34 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,35)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 36 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+typedef typename mpl::next< iter_29 > ::type iter_30;
+typedef typename mpl::next< iter_30 > ::type iter_31;
+typedef typename mpl::next< iter_31 > ::type iter_32;
+typedef typename mpl::next< iter_32 > ::type iter_33;
+typedef typename mpl::next< iter_33 > ::type iter_34;
+typedef typename mpl::next< iter_34 > ::type iter_35;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,35) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+, typename mpl::deref< iter_30 > ::type
+, typename mpl::deref< iter_31 > ::type
+, typename mpl::deref< iter_32 > ::type
+, typename mpl::deref< iter_33 > ::type
+, typename mpl::deref< iter_34 > ::type
+, typename mpl::deref< iter_35 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,36)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 37 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+typedef typename mpl::next< iter_29 > ::type iter_30;
+typedef typename mpl::next< iter_30 > ::type iter_31;
+typedef typename mpl::next< iter_31 > ::type iter_32;
+typedef typename mpl::next< iter_32 > ::type iter_33;
+typedef typename mpl::next< iter_33 > ::type iter_34;
+typedef typename mpl::next< iter_34 > ::type iter_35;
+typedef typename mpl::next< iter_35 > ::type iter_36;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,36) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+, typename mpl::deref< iter_30 > ::type
+, typename mpl::deref< iter_31 > ::type
+, typename mpl::deref< iter_32 > ::type
+, typename mpl::deref< iter_33 > ::type
+, typename mpl::deref< iter_34 > ::type
+, typename mpl::deref< iter_35 > ::type
+, typename mpl::deref< iter_36 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,37)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 38 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+typedef typename mpl::next< iter_29 > ::type iter_30;
+typedef typename mpl::next< iter_30 > ::type iter_31;
+typedef typename mpl::next< iter_31 > ::type iter_32;
+typedef typename mpl::next< iter_32 > ::type iter_33;
+typedef typename mpl::next< iter_33 > ::type iter_34;
+typedef typename mpl::next< iter_34 > ::type iter_35;
+typedef typename mpl::next< iter_35 > ::type iter_36;
+typedef typename mpl::next< iter_36 > ::type iter_37;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,37) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+, typename mpl::deref< iter_30 > ::type
+, typename mpl::deref< iter_31 > ::type
+, typename mpl::deref< iter_32 > ::type
+, typename mpl::deref< iter_33 > ::type
+, typename mpl::deref< iter_34 > ::type
+, typename mpl::deref< iter_35 > ::type
+, typename mpl::deref< iter_36 > ::type
+, typename mpl::deref< iter_37 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,38)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 39 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+typedef typename mpl::next< iter_29 > ::type iter_30;
+typedef typename mpl::next< iter_30 > ::type iter_31;
+typedef typename mpl::next< iter_31 > ::type iter_32;
+typedef typename mpl::next< iter_32 > ::type iter_33;
+typedef typename mpl::next< iter_33 > ::type iter_34;
+typedef typename mpl::next< iter_34 > ::type iter_35;
+typedef typename mpl::next< iter_35 > ::type iter_36;
+typedef typename mpl::next< iter_36 > ::type iter_37;
+typedef typename mpl::next< iter_37 > ::type iter_38;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,38) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+, typename mpl::deref< iter_30 > ::type
+, typename mpl::deref< iter_31 > ::type
+, typename mpl::deref< iter_32 > ::type
+, typename mpl::deref< iter_33 > ::type
+, typename mpl::deref< iter_34 > ::type
+, typename mpl::deref< iter_35 > ::type
+, typename mpl::deref< iter_36 > ::type
+, typename mpl::deref< iter_37 > ::type
+, typename mpl::deref< iter_38 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,39)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 40 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+typedef typename mpl::next< iter_29 > ::type iter_30;
+typedef typename mpl::next< iter_30 > ::type iter_31;
+typedef typename mpl::next< iter_31 > ::type iter_32;
+typedef typename mpl::next< iter_32 > ::type iter_33;
+typedef typename mpl::next< iter_33 > ::type iter_34;
+typedef typename mpl::next< iter_34 > ::type iter_35;
+typedef typename mpl::next< iter_35 > ::type iter_36;
+typedef typename mpl::next< iter_36 > ::type iter_37;
+typedef typename mpl::next< iter_37 > ::type iter_38;
+typedef typename mpl::next< iter_38 > ::type iter_39;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,39) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+, typename mpl::deref< iter_30 > ::type
+, typename mpl::deref< iter_31 > ::type
+, typename mpl::deref< iter_32 > ::type
+, typename mpl::deref< iter_33 > ::type
+, typename mpl::deref< iter_34 > ::type
+, typename mpl::deref< iter_35 > ::type
+, typename mpl::deref< iter_36 > ::type
+, typename mpl::deref< iter_37 > ::type
+, typename mpl::deref< iter_38 > ::type
+, typename mpl::deref< iter_39 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,40)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 41 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+typedef typename mpl::next< iter_29 > ::type iter_30;
+typedef typename mpl::next< iter_30 > ::type iter_31;
+typedef typename mpl::next< iter_31 > ::type iter_32;
+typedef typename mpl::next< iter_32 > ::type iter_33;
+typedef typename mpl::next< iter_33 > ::type iter_34;
+typedef typename mpl::next< iter_34 > ::type iter_35;
+typedef typename mpl::next< iter_35 > ::type iter_36;
+typedef typename mpl::next< iter_36 > ::type iter_37;
+typedef typename mpl::next< iter_37 > ::type iter_38;
+typedef typename mpl::next< iter_38 > ::type iter_39;
+typedef typename mpl::next< iter_39 > ::type iter_40;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,40) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+, typename mpl::deref< iter_30 > ::type
+, typename mpl::deref< iter_31 > ::type
+, typename mpl::deref< iter_32 > ::type
+, typename mpl::deref< iter_33 > ::type
+, typename mpl::deref< iter_34 > ::type
+, typename mpl::deref< iter_35 > ::type
+, typename mpl::deref< iter_36 > ::type
+, typename mpl::deref< iter_37 > ::type
+, typename mpl::deref< iter_38 > ::type
+, typename mpl::deref< iter_39 > ::type
+, typename mpl::deref< iter_40 > ::type
+> ::type type;
+};
+};
+# undef BOOST_FT_make_type
+# undef BOOST_FT_make_type_impl
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/synthesize_impl/arity50_0.hpp b/3rdParty/Boost/src/boost/function_types/detail/synthesize_impl/arity50_0.hpp
new file mode 100644
index 0000000..b1ad7b1
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/synthesize_impl/arity50_0.hpp
@@ -0,0 +1,1117 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is intended for multiple inclusion
+
+// input:  BOOST_FT_syntax     type macro to use
+// input:  BOOST_FT_cc         empty or cc specifier 
+// input:  BOOST_FT_ell        empty or "..."
+// input:  BOOST_FT_cv         empty or cv qualifiers
+// input:  BOOST_FT_flags      single decimal integer encoding the flags
+// output: BOOST_FT_n          number of component types (arity+1)
+// output: BOOST_FT_arity      current arity
+// output: BOOST_FT_type       macro that expands to the type
+// output: BOOST_FT_tplargs(p) template arguments with given prefix
+// output: BOOST_FT_params(p)  parameters with given prefix
+
+# include <boost/function_types/detail/synthesize_impl/arity40_0.hpp>
+# define BOOST_FT_make_type(flags,cc,arity) BOOST_FT_make_type_impl(flags,cc,arity)
+# define BOOST_FT_make_type_impl(flags,cc,arity) make_type_ ## flags ## _ ## cc ## _ ## arity
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,41)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 42 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+typedef typename mpl::next< iter_29 > ::type iter_30;
+typedef typename mpl::next< iter_30 > ::type iter_31;
+typedef typename mpl::next< iter_31 > ::type iter_32;
+typedef typename mpl::next< iter_32 > ::type iter_33;
+typedef typename mpl::next< iter_33 > ::type iter_34;
+typedef typename mpl::next< iter_34 > ::type iter_35;
+typedef typename mpl::next< iter_35 > ::type iter_36;
+typedef typename mpl::next< iter_36 > ::type iter_37;
+typedef typename mpl::next< iter_37 > ::type iter_38;
+typedef typename mpl::next< iter_38 > ::type iter_39;
+typedef typename mpl::next< iter_39 > ::type iter_40;
+typedef typename mpl::next< iter_40 > ::type iter_41;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,41) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+, typename mpl::deref< iter_30 > ::type
+, typename mpl::deref< iter_31 > ::type
+, typename mpl::deref< iter_32 > ::type
+, typename mpl::deref< iter_33 > ::type
+, typename mpl::deref< iter_34 > ::type
+, typename mpl::deref< iter_35 > ::type
+, typename mpl::deref< iter_36 > ::type
+, typename mpl::deref< iter_37 > ::type
+, typename mpl::deref< iter_38 > ::type
+, typename mpl::deref< iter_39 > ::type
+, typename mpl::deref< iter_40 > ::type
+, typename mpl::deref< iter_41 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,42)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 43 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+typedef typename mpl::next< iter_29 > ::type iter_30;
+typedef typename mpl::next< iter_30 > ::type iter_31;
+typedef typename mpl::next< iter_31 > ::type iter_32;
+typedef typename mpl::next< iter_32 > ::type iter_33;
+typedef typename mpl::next< iter_33 > ::type iter_34;
+typedef typename mpl::next< iter_34 > ::type iter_35;
+typedef typename mpl::next< iter_35 > ::type iter_36;
+typedef typename mpl::next< iter_36 > ::type iter_37;
+typedef typename mpl::next< iter_37 > ::type iter_38;
+typedef typename mpl::next< iter_38 > ::type iter_39;
+typedef typename mpl::next< iter_39 > ::type iter_40;
+typedef typename mpl::next< iter_40 > ::type iter_41;
+typedef typename mpl::next< iter_41 > ::type iter_42;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,42) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+, typename mpl::deref< iter_30 > ::type
+, typename mpl::deref< iter_31 > ::type
+, typename mpl::deref< iter_32 > ::type
+, typename mpl::deref< iter_33 > ::type
+, typename mpl::deref< iter_34 > ::type
+, typename mpl::deref< iter_35 > ::type
+, typename mpl::deref< iter_36 > ::type
+, typename mpl::deref< iter_37 > ::type
+, typename mpl::deref< iter_38 > ::type
+, typename mpl::deref< iter_39 > ::type
+, typename mpl::deref< iter_40 > ::type
+, typename mpl::deref< iter_41 > ::type
+, typename mpl::deref< iter_42 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,43)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 44 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+typedef typename mpl::next< iter_29 > ::type iter_30;
+typedef typename mpl::next< iter_30 > ::type iter_31;
+typedef typename mpl::next< iter_31 > ::type iter_32;
+typedef typename mpl::next< iter_32 > ::type iter_33;
+typedef typename mpl::next< iter_33 > ::type iter_34;
+typedef typename mpl::next< iter_34 > ::type iter_35;
+typedef typename mpl::next< iter_35 > ::type iter_36;
+typedef typename mpl::next< iter_36 > ::type iter_37;
+typedef typename mpl::next< iter_37 > ::type iter_38;
+typedef typename mpl::next< iter_38 > ::type iter_39;
+typedef typename mpl::next< iter_39 > ::type iter_40;
+typedef typename mpl::next< iter_40 > ::type iter_41;
+typedef typename mpl::next< iter_41 > ::type iter_42;
+typedef typename mpl::next< iter_42 > ::type iter_43;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,43) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+, typename mpl::deref< iter_30 > ::type
+, typename mpl::deref< iter_31 > ::type
+, typename mpl::deref< iter_32 > ::type
+, typename mpl::deref< iter_33 > ::type
+, typename mpl::deref< iter_34 > ::type
+, typename mpl::deref< iter_35 > ::type
+, typename mpl::deref< iter_36 > ::type
+, typename mpl::deref< iter_37 > ::type
+, typename mpl::deref< iter_38 > ::type
+, typename mpl::deref< iter_39 > ::type
+, typename mpl::deref< iter_40 > ::type
+, typename mpl::deref< iter_41 > ::type
+, typename mpl::deref< iter_42 > ::type
+, typename mpl::deref< iter_43 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,44)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 45 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+typedef typename mpl::next< iter_29 > ::type iter_30;
+typedef typename mpl::next< iter_30 > ::type iter_31;
+typedef typename mpl::next< iter_31 > ::type iter_32;
+typedef typename mpl::next< iter_32 > ::type iter_33;
+typedef typename mpl::next< iter_33 > ::type iter_34;
+typedef typename mpl::next< iter_34 > ::type iter_35;
+typedef typename mpl::next< iter_35 > ::type iter_36;
+typedef typename mpl::next< iter_36 > ::type iter_37;
+typedef typename mpl::next< iter_37 > ::type iter_38;
+typedef typename mpl::next< iter_38 > ::type iter_39;
+typedef typename mpl::next< iter_39 > ::type iter_40;
+typedef typename mpl::next< iter_40 > ::type iter_41;
+typedef typename mpl::next< iter_41 > ::type iter_42;
+typedef typename mpl::next< iter_42 > ::type iter_43;
+typedef typename mpl::next< iter_43 > ::type iter_44;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,44) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+, typename mpl::deref< iter_30 > ::type
+, typename mpl::deref< iter_31 > ::type
+, typename mpl::deref< iter_32 > ::type
+, typename mpl::deref< iter_33 > ::type
+, typename mpl::deref< iter_34 > ::type
+, typename mpl::deref< iter_35 > ::type
+, typename mpl::deref< iter_36 > ::type
+, typename mpl::deref< iter_37 > ::type
+, typename mpl::deref< iter_38 > ::type
+, typename mpl::deref< iter_39 > ::type
+, typename mpl::deref< iter_40 > ::type
+, typename mpl::deref< iter_41 > ::type
+, typename mpl::deref< iter_42 > ::type
+, typename mpl::deref< iter_43 > ::type
+, typename mpl::deref< iter_44 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,45)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 46 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+typedef typename mpl::next< iter_29 > ::type iter_30;
+typedef typename mpl::next< iter_30 > ::type iter_31;
+typedef typename mpl::next< iter_31 > ::type iter_32;
+typedef typename mpl::next< iter_32 > ::type iter_33;
+typedef typename mpl::next< iter_33 > ::type iter_34;
+typedef typename mpl::next< iter_34 > ::type iter_35;
+typedef typename mpl::next< iter_35 > ::type iter_36;
+typedef typename mpl::next< iter_36 > ::type iter_37;
+typedef typename mpl::next< iter_37 > ::type iter_38;
+typedef typename mpl::next< iter_38 > ::type iter_39;
+typedef typename mpl::next< iter_39 > ::type iter_40;
+typedef typename mpl::next< iter_40 > ::type iter_41;
+typedef typename mpl::next< iter_41 > ::type iter_42;
+typedef typename mpl::next< iter_42 > ::type iter_43;
+typedef typename mpl::next< iter_43 > ::type iter_44;
+typedef typename mpl::next< iter_44 > ::type iter_45;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,45) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+, typename mpl::deref< iter_30 > ::type
+, typename mpl::deref< iter_31 > ::type
+, typename mpl::deref< iter_32 > ::type
+, typename mpl::deref< iter_33 > ::type
+, typename mpl::deref< iter_34 > ::type
+, typename mpl::deref< iter_35 > ::type
+, typename mpl::deref< iter_36 > ::type
+, typename mpl::deref< iter_37 > ::type
+, typename mpl::deref< iter_38 > ::type
+, typename mpl::deref< iter_39 > ::type
+, typename mpl::deref< iter_40 > ::type
+, typename mpl::deref< iter_41 > ::type
+, typename mpl::deref< iter_42 > ::type
+, typename mpl::deref< iter_43 > ::type
+, typename mpl::deref< iter_44 > ::type
+, typename mpl::deref< iter_45 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,46)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 47 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+typedef typename mpl::next< iter_29 > ::type iter_30;
+typedef typename mpl::next< iter_30 > ::type iter_31;
+typedef typename mpl::next< iter_31 > ::type iter_32;
+typedef typename mpl::next< iter_32 > ::type iter_33;
+typedef typename mpl::next< iter_33 > ::type iter_34;
+typedef typename mpl::next< iter_34 > ::type iter_35;
+typedef typename mpl::next< iter_35 > ::type iter_36;
+typedef typename mpl::next< iter_36 > ::type iter_37;
+typedef typename mpl::next< iter_37 > ::type iter_38;
+typedef typename mpl::next< iter_38 > ::type iter_39;
+typedef typename mpl::next< iter_39 > ::type iter_40;
+typedef typename mpl::next< iter_40 > ::type iter_41;
+typedef typename mpl::next< iter_41 > ::type iter_42;
+typedef typename mpl::next< iter_42 > ::type iter_43;
+typedef typename mpl::next< iter_43 > ::type iter_44;
+typedef typename mpl::next< iter_44 > ::type iter_45;
+typedef typename mpl::next< iter_45 > ::type iter_46;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,46) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+, typename mpl::deref< iter_30 > ::type
+, typename mpl::deref< iter_31 > ::type
+, typename mpl::deref< iter_32 > ::type
+, typename mpl::deref< iter_33 > ::type
+, typename mpl::deref< iter_34 > ::type
+, typename mpl::deref< iter_35 > ::type
+, typename mpl::deref< iter_36 > ::type
+, typename mpl::deref< iter_37 > ::type
+, typename mpl::deref< iter_38 > ::type
+, typename mpl::deref< iter_39 > ::type
+, typename mpl::deref< iter_40 > ::type
+, typename mpl::deref< iter_41 > ::type
+, typename mpl::deref< iter_42 > ::type
+, typename mpl::deref< iter_43 > ::type
+, typename mpl::deref< iter_44 > ::type
+, typename mpl::deref< iter_45 > ::type
+, typename mpl::deref< iter_46 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,47)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 48 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+typedef typename mpl::next< iter_29 > ::type iter_30;
+typedef typename mpl::next< iter_30 > ::type iter_31;
+typedef typename mpl::next< iter_31 > ::type iter_32;
+typedef typename mpl::next< iter_32 > ::type iter_33;
+typedef typename mpl::next< iter_33 > ::type iter_34;
+typedef typename mpl::next< iter_34 > ::type iter_35;
+typedef typename mpl::next< iter_35 > ::type iter_36;
+typedef typename mpl::next< iter_36 > ::type iter_37;
+typedef typename mpl::next< iter_37 > ::type iter_38;
+typedef typename mpl::next< iter_38 > ::type iter_39;
+typedef typename mpl::next< iter_39 > ::type iter_40;
+typedef typename mpl::next< iter_40 > ::type iter_41;
+typedef typename mpl::next< iter_41 > ::type iter_42;
+typedef typename mpl::next< iter_42 > ::type iter_43;
+typedef typename mpl::next< iter_43 > ::type iter_44;
+typedef typename mpl::next< iter_44 > ::type iter_45;
+typedef typename mpl::next< iter_45 > ::type iter_46;
+typedef typename mpl::next< iter_46 > ::type iter_47;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,47) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+, typename mpl::deref< iter_30 > ::type
+, typename mpl::deref< iter_31 > ::type
+, typename mpl::deref< iter_32 > ::type
+, typename mpl::deref< iter_33 > ::type
+, typename mpl::deref< iter_34 > ::type
+, typename mpl::deref< iter_35 > ::type
+, typename mpl::deref< iter_36 > ::type
+, typename mpl::deref< iter_37 > ::type
+, typename mpl::deref< iter_38 > ::type
+, typename mpl::deref< iter_39 > ::type
+, typename mpl::deref< iter_40 > ::type
+, typename mpl::deref< iter_41 > ::type
+, typename mpl::deref< iter_42 > ::type
+, typename mpl::deref< iter_43 > ::type
+, typename mpl::deref< iter_44 > ::type
+, typename mpl::deref< iter_45 > ::type
+, typename mpl::deref< iter_46 > ::type
+, typename mpl::deref< iter_47 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,48)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 49 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+typedef typename mpl::next< iter_29 > ::type iter_30;
+typedef typename mpl::next< iter_30 > ::type iter_31;
+typedef typename mpl::next< iter_31 > ::type iter_32;
+typedef typename mpl::next< iter_32 > ::type iter_33;
+typedef typename mpl::next< iter_33 > ::type iter_34;
+typedef typename mpl::next< iter_34 > ::type iter_35;
+typedef typename mpl::next< iter_35 > ::type iter_36;
+typedef typename mpl::next< iter_36 > ::type iter_37;
+typedef typename mpl::next< iter_37 > ::type iter_38;
+typedef typename mpl::next< iter_38 > ::type iter_39;
+typedef typename mpl::next< iter_39 > ::type iter_40;
+typedef typename mpl::next< iter_40 > ::type iter_41;
+typedef typename mpl::next< iter_41 > ::type iter_42;
+typedef typename mpl::next< iter_42 > ::type iter_43;
+typedef typename mpl::next< iter_43 > ::type iter_44;
+typedef typename mpl::next< iter_44 > ::type iter_45;
+typedef typename mpl::next< iter_45 > ::type iter_46;
+typedef typename mpl::next< iter_46 > ::type iter_47;
+typedef typename mpl::next< iter_47 > ::type iter_48;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,48) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+, typename mpl::deref< iter_30 > ::type
+, typename mpl::deref< iter_31 > ::type
+, typename mpl::deref< iter_32 > ::type
+, typename mpl::deref< iter_33 > ::type
+, typename mpl::deref< iter_34 > ::type
+, typename mpl::deref< iter_35 > ::type
+, typename mpl::deref< iter_36 > ::type
+, typename mpl::deref< iter_37 > ::type
+, typename mpl::deref< iter_38 > ::type
+, typename mpl::deref< iter_39 > ::type
+, typename mpl::deref< iter_40 > ::type
+, typename mpl::deref< iter_41 > ::type
+, typename mpl::deref< iter_42 > ::type
+, typename mpl::deref< iter_43 > ::type
+, typename mpl::deref< iter_44 > ::type
+, typename mpl::deref< iter_45 > ::type
+, typename mpl::deref< iter_46 > ::type
+, typename mpl::deref< iter_47 > ::type
+, typename mpl::deref< iter_48 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,49)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 50 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+typedef typename mpl::next< iter_29 > ::type iter_30;
+typedef typename mpl::next< iter_30 > ::type iter_31;
+typedef typename mpl::next< iter_31 > ::type iter_32;
+typedef typename mpl::next< iter_32 > ::type iter_33;
+typedef typename mpl::next< iter_33 > ::type iter_34;
+typedef typename mpl::next< iter_34 > ::type iter_35;
+typedef typename mpl::next< iter_35 > ::type iter_36;
+typedef typename mpl::next< iter_36 > ::type iter_37;
+typedef typename mpl::next< iter_37 > ::type iter_38;
+typedef typename mpl::next< iter_38 > ::type iter_39;
+typedef typename mpl::next< iter_39 > ::type iter_40;
+typedef typename mpl::next< iter_40 > ::type iter_41;
+typedef typename mpl::next< iter_41 > ::type iter_42;
+typedef typename mpl::next< iter_42 > ::type iter_43;
+typedef typename mpl::next< iter_43 > ::type iter_44;
+typedef typename mpl::next< iter_44 > ::type iter_45;
+typedef typename mpl::next< iter_45 > ::type iter_46;
+typedef typename mpl::next< iter_46 > ::type iter_47;
+typedef typename mpl::next< iter_47 > ::type iter_48;
+typedef typename mpl::next< iter_48 > ::type iter_49;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,49) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+, typename mpl::deref< iter_30 > ::type
+, typename mpl::deref< iter_31 > ::type
+, typename mpl::deref< iter_32 > ::type
+, typename mpl::deref< iter_33 > ::type
+, typename mpl::deref< iter_34 > ::type
+, typename mpl::deref< iter_35 > ::type
+, typename mpl::deref< iter_36 > ::type
+, typename mpl::deref< iter_37 > ::type
+, typename mpl::deref< iter_38 > ::type
+, typename mpl::deref< iter_39 > ::type
+, typename mpl::deref< iter_40 > ::type
+, typename mpl::deref< iter_41 > ::type
+, typename mpl::deref< iter_42 > ::type
+, typename mpl::deref< iter_43 > ::type
+, typename mpl::deref< iter_44 > ::type
+, typename mpl::deref< iter_45 > ::type
+, typename mpl::deref< iter_46 > ::type
+, typename mpl::deref< iter_47 > ::type
+, typename mpl::deref< iter_48 > ::type
+, typename mpl::deref< iter_49 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48 , typename T49 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,50)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 51 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+typedef typename mpl::next< iter_29 > ::type iter_30;
+typedef typename mpl::next< iter_30 > ::type iter_31;
+typedef typename mpl::next< iter_31 > ::type iter_32;
+typedef typename mpl::next< iter_32 > ::type iter_33;
+typedef typename mpl::next< iter_33 > ::type iter_34;
+typedef typename mpl::next< iter_34 > ::type iter_35;
+typedef typename mpl::next< iter_35 > ::type iter_36;
+typedef typename mpl::next< iter_36 > ::type iter_37;
+typedef typename mpl::next< iter_37 > ::type iter_38;
+typedef typename mpl::next< iter_38 > ::type iter_39;
+typedef typename mpl::next< iter_39 > ::type iter_40;
+typedef typename mpl::next< iter_40 > ::type iter_41;
+typedef typename mpl::next< iter_41 > ::type iter_42;
+typedef typename mpl::next< iter_42 > ::type iter_43;
+typedef typename mpl::next< iter_43 > ::type iter_44;
+typedef typename mpl::next< iter_44 > ::type iter_45;
+typedef typename mpl::next< iter_45 > ::type iter_46;
+typedef typename mpl::next< iter_46 > ::type iter_47;
+typedef typename mpl::next< iter_47 > ::type iter_48;
+typedef typename mpl::next< iter_48 > ::type iter_49;
+typedef typename mpl::next< iter_49 > ::type iter_50;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,50) 
+< typename mpl::deref< iter_0 > ::type 
+, typename mpl::deref< iter_1 > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+, typename mpl::deref< iter_30 > ::type
+, typename mpl::deref< iter_31 > ::type
+, typename mpl::deref< iter_32 > ::type
+, typename mpl::deref< iter_33 > ::type
+, typename mpl::deref< iter_34 > ::type
+, typename mpl::deref< iter_35 > ::type
+, typename mpl::deref< iter_36 > ::type
+, typename mpl::deref< iter_37 > ::type
+, typename mpl::deref< iter_38 > ::type
+, typename mpl::deref< iter_39 > ::type
+, typename mpl::deref< iter_40 > ::type
+, typename mpl::deref< iter_41 > ::type
+, typename mpl::deref< iter_42 > ::type
+, typename mpl::deref< iter_43 > ::type
+, typename mpl::deref< iter_44 > ::type
+, typename mpl::deref< iter_45 > ::type
+, typename mpl::deref< iter_46 > ::type
+, typename mpl::deref< iter_47 > ::type
+, typename mpl::deref< iter_48 > ::type
+, typename mpl::deref< iter_49 > ::type
+, typename mpl::deref< iter_50 > ::type
+> ::type type;
+};
+};
+# undef BOOST_FT_make_type
+# undef BOOST_FT_make_type_impl
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/synthesize_impl/arity50_1.hpp b/3rdParty/Boost/src/boost/function_types/detail/synthesize_impl/arity50_1.hpp
new file mode 100644
index 0000000..2915c41
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/synthesize_impl/arity50_1.hpp
@@ -0,0 +1,1127 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is intended for multiple inclusion
+
+// input:  BOOST_FT_syntax     type macro to use
+// input:  BOOST_FT_cc         empty or cc specifier 
+// input:  BOOST_FT_ell        empty or "..."
+// input:  BOOST_FT_cv         empty or cv qualifiers
+// input:  BOOST_FT_flags      single decimal integer encoding the flags
+// output: BOOST_FT_n          number of component types (arity+1)
+// output: BOOST_FT_arity      current arity
+// output: BOOST_FT_type       macro that expands to the type
+// output: BOOST_FT_tplargs(p) template arguments with given prefix
+// output: BOOST_FT_params(p)  parameters with given prefix
+
+# include <boost/function_types/detail/synthesize_impl/arity40_1.hpp>
+# define BOOST_FT_make_type(flags,cc,arity) BOOST_FT_make_type_impl(flags,cc,arity)
+# define BOOST_FT_make_type_impl(flags,cc,arity) make_type_ ## flags ## _ ## cc ## _ ## arity
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,41)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 42 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+typedef typename mpl::next< iter_29 > ::type iter_30;
+typedef typename mpl::next< iter_30 > ::type iter_31;
+typedef typename mpl::next< iter_31 > ::type iter_32;
+typedef typename mpl::next< iter_32 > ::type iter_33;
+typedef typename mpl::next< iter_33 > ::type iter_34;
+typedef typename mpl::next< iter_34 > ::type iter_35;
+typedef typename mpl::next< iter_35 > ::type iter_36;
+typedef typename mpl::next< iter_36 > ::type iter_37;
+typedef typename mpl::next< iter_37 > ::type iter_38;
+typedef typename mpl::next< iter_38 > ::type iter_39;
+typedef typename mpl::next< iter_39 > ::type iter_40;
+typedef typename mpl::next< iter_40 > ::type iter_41;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,41) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+, typename mpl::deref< iter_30 > ::type
+, typename mpl::deref< iter_31 > ::type
+, typename mpl::deref< iter_32 > ::type
+, typename mpl::deref< iter_33 > ::type
+, typename mpl::deref< iter_34 > ::type
+, typename mpl::deref< iter_35 > ::type
+, typename mpl::deref< iter_36 > ::type
+, typename mpl::deref< iter_37 > ::type
+, typename mpl::deref< iter_38 > ::type
+, typename mpl::deref< iter_39 > ::type
+, typename mpl::deref< iter_40 > ::type
+, typename mpl::deref< iter_41 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,42)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 43 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+typedef typename mpl::next< iter_29 > ::type iter_30;
+typedef typename mpl::next< iter_30 > ::type iter_31;
+typedef typename mpl::next< iter_31 > ::type iter_32;
+typedef typename mpl::next< iter_32 > ::type iter_33;
+typedef typename mpl::next< iter_33 > ::type iter_34;
+typedef typename mpl::next< iter_34 > ::type iter_35;
+typedef typename mpl::next< iter_35 > ::type iter_36;
+typedef typename mpl::next< iter_36 > ::type iter_37;
+typedef typename mpl::next< iter_37 > ::type iter_38;
+typedef typename mpl::next< iter_38 > ::type iter_39;
+typedef typename mpl::next< iter_39 > ::type iter_40;
+typedef typename mpl::next< iter_40 > ::type iter_41;
+typedef typename mpl::next< iter_41 > ::type iter_42;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,42) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+, typename mpl::deref< iter_30 > ::type
+, typename mpl::deref< iter_31 > ::type
+, typename mpl::deref< iter_32 > ::type
+, typename mpl::deref< iter_33 > ::type
+, typename mpl::deref< iter_34 > ::type
+, typename mpl::deref< iter_35 > ::type
+, typename mpl::deref< iter_36 > ::type
+, typename mpl::deref< iter_37 > ::type
+, typename mpl::deref< iter_38 > ::type
+, typename mpl::deref< iter_39 > ::type
+, typename mpl::deref< iter_40 > ::type
+, typename mpl::deref< iter_41 > ::type
+, typename mpl::deref< iter_42 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,43)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 44 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+typedef typename mpl::next< iter_29 > ::type iter_30;
+typedef typename mpl::next< iter_30 > ::type iter_31;
+typedef typename mpl::next< iter_31 > ::type iter_32;
+typedef typename mpl::next< iter_32 > ::type iter_33;
+typedef typename mpl::next< iter_33 > ::type iter_34;
+typedef typename mpl::next< iter_34 > ::type iter_35;
+typedef typename mpl::next< iter_35 > ::type iter_36;
+typedef typename mpl::next< iter_36 > ::type iter_37;
+typedef typename mpl::next< iter_37 > ::type iter_38;
+typedef typename mpl::next< iter_38 > ::type iter_39;
+typedef typename mpl::next< iter_39 > ::type iter_40;
+typedef typename mpl::next< iter_40 > ::type iter_41;
+typedef typename mpl::next< iter_41 > ::type iter_42;
+typedef typename mpl::next< iter_42 > ::type iter_43;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,43) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+, typename mpl::deref< iter_30 > ::type
+, typename mpl::deref< iter_31 > ::type
+, typename mpl::deref< iter_32 > ::type
+, typename mpl::deref< iter_33 > ::type
+, typename mpl::deref< iter_34 > ::type
+, typename mpl::deref< iter_35 > ::type
+, typename mpl::deref< iter_36 > ::type
+, typename mpl::deref< iter_37 > ::type
+, typename mpl::deref< iter_38 > ::type
+, typename mpl::deref< iter_39 > ::type
+, typename mpl::deref< iter_40 > ::type
+, typename mpl::deref< iter_41 > ::type
+, typename mpl::deref< iter_42 > ::type
+, typename mpl::deref< iter_43 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,44)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 45 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+typedef typename mpl::next< iter_29 > ::type iter_30;
+typedef typename mpl::next< iter_30 > ::type iter_31;
+typedef typename mpl::next< iter_31 > ::type iter_32;
+typedef typename mpl::next< iter_32 > ::type iter_33;
+typedef typename mpl::next< iter_33 > ::type iter_34;
+typedef typename mpl::next< iter_34 > ::type iter_35;
+typedef typename mpl::next< iter_35 > ::type iter_36;
+typedef typename mpl::next< iter_36 > ::type iter_37;
+typedef typename mpl::next< iter_37 > ::type iter_38;
+typedef typename mpl::next< iter_38 > ::type iter_39;
+typedef typename mpl::next< iter_39 > ::type iter_40;
+typedef typename mpl::next< iter_40 > ::type iter_41;
+typedef typename mpl::next< iter_41 > ::type iter_42;
+typedef typename mpl::next< iter_42 > ::type iter_43;
+typedef typename mpl::next< iter_43 > ::type iter_44;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,44) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+, typename mpl::deref< iter_30 > ::type
+, typename mpl::deref< iter_31 > ::type
+, typename mpl::deref< iter_32 > ::type
+, typename mpl::deref< iter_33 > ::type
+, typename mpl::deref< iter_34 > ::type
+, typename mpl::deref< iter_35 > ::type
+, typename mpl::deref< iter_36 > ::type
+, typename mpl::deref< iter_37 > ::type
+, typename mpl::deref< iter_38 > ::type
+, typename mpl::deref< iter_39 > ::type
+, typename mpl::deref< iter_40 > ::type
+, typename mpl::deref< iter_41 > ::type
+, typename mpl::deref< iter_42 > ::type
+, typename mpl::deref< iter_43 > ::type
+, typename mpl::deref< iter_44 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,45)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 46 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+typedef typename mpl::next< iter_29 > ::type iter_30;
+typedef typename mpl::next< iter_30 > ::type iter_31;
+typedef typename mpl::next< iter_31 > ::type iter_32;
+typedef typename mpl::next< iter_32 > ::type iter_33;
+typedef typename mpl::next< iter_33 > ::type iter_34;
+typedef typename mpl::next< iter_34 > ::type iter_35;
+typedef typename mpl::next< iter_35 > ::type iter_36;
+typedef typename mpl::next< iter_36 > ::type iter_37;
+typedef typename mpl::next< iter_37 > ::type iter_38;
+typedef typename mpl::next< iter_38 > ::type iter_39;
+typedef typename mpl::next< iter_39 > ::type iter_40;
+typedef typename mpl::next< iter_40 > ::type iter_41;
+typedef typename mpl::next< iter_41 > ::type iter_42;
+typedef typename mpl::next< iter_42 > ::type iter_43;
+typedef typename mpl::next< iter_43 > ::type iter_44;
+typedef typename mpl::next< iter_44 > ::type iter_45;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,45) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+, typename mpl::deref< iter_30 > ::type
+, typename mpl::deref< iter_31 > ::type
+, typename mpl::deref< iter_32 > ::type
+, typename mpl::deref< iter_33 > ::type
+, typename mpl::deref< iter_34 > ::type
+, typename mpl::deref< iter_35 > ::type
+, typename mpl::deref< iter_36 > ::type
+, typename mpl::deref< iter_37 > ::type
+, typename mpl::deref< iter_38 > ::type
+, typename mpl::deref< iter_39 > ::type
+, typename mpl::deref< iter_40 > ::type
+, typename mpl::deref< iter_41 > ::type
+, typename mpl::deref< iter_42 > ::type
+, typename mpl::deref< iter_43 > ::type
+, typename mpl::deref< iter_44 > ::type
+, typename mpl::deref< iter_45 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,46)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 47 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+typedef typename mpl::next< iter_29 > ::type iter_30;
+typedef typename mpl::next< iter_30 > ::type iter_31;
+typedef typename mpl::next< iter_31 > ::type iter_32;
+typedef typename mpl::next< iter_32 > ::type iter_33;
+typedef typename mpl::next< iter_33 > ::type iter_34;
+typedef typename mpl::next< iter_34 > ::type iter_35;
+typedef typename mpl::next< iter_35 > ::type iter_36;
+typedef typename mpl::next< iter_36 > ::type iter_37;
+typedef typename mpl::next< iter_37 > ::type iter_38;
+typedef typename mpl::next< iter_38 > ::type iter_39;
+typedef typename mpl::next< iter_39 > ::type iter_40;
+typedef typename mpl::next< iter_40 > ::type iter_41;
+typedef typename mpl::next< iter_41 > ::type iter_42;
+typedef typename mpl::next< iter_42 > ::type iter_43;
+typedef typename mpl::next< iter_43 > ::type iter_44;
+typedef typename mpl::next< iter_44 > ::type iter_45;
+typedef typename mpl::next< iter_45 > ::type iter_46;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,46) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+, typename mpl::deref< iter_30 > ::type
+, typename mpl::deref< iter_31 > ::type
+, typename mpl::deref< iter_32 > ::type
+, typename mpl::deref< iter_33 > ::type
+, typename mpl::deref< iter_34 > ::type
+, typename mpl::deref< iter_35 > ::type
+, typename mpl::deref< iter_36 > ::type
+, typename mpl::deref< iter_37 > ::type
+, typename mpl::deref< iter_38 > ::type
+, typename mpl::deref< iter_39 > ::type
+, typename mpl::deref< iter_40 > ::type
+, typename mpl::deref< iter_41 > ::type
+, typename mpl::deref< iter_42 > ::type
+, typename mpl::deref< iter_43 > ::type
+, typename mpl::deref< iter_44 > ::type
+, typename mpl::deref< iter_45 > ::type
+, typename mpl::deref< iter_46 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,47)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 48 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+typedef typename mpl::next< iter_29 > ::type iter_30;
+typedef typename mpl::next< iter_30 > ::type iter_31;
+typedef typename mpl::next< iter_31 > ::type iter_32;
+typedef typename mpl::next< iter_32 > ::type iter_33;
+typedef typename mpl::next< iter_33 > ::type iter_34;
+typedef typename mpl::next< iter_34 > ::type iter_35;
+typedef typename mpl::next< iter_35 > ::type iter_36;
+typedef typename mpl::next< iter_36 > ::type iter_37;
+typedef typename mpl::next< iter_37 > ::type iter_38;
+typedef typename mpl::next< iter_38 > ::type iter_39;
+typedef typename mpl::next< iter_39 > ::type iter_40;
+typedef typename mpl::next< iter_40 > ::type iter_41;
+typedef typename mpl::next< iter_41 > ::type iter_42;
+typedef typename mpl::next< iter_42 > ::type iter_43;
+typedef typename mpl::next< iter_43 > ::type iter_44;
+typedef typename mpl::next< iter_44 > ::type iter_45;
+typedef typename mpl::next< iter_45 > ::type iter_46;
+typedef typename mpl::next< iter_46 > ::type iter_47;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,47) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+, typename mpl::deref< iter_30 > ::type
+, typename mpl::deref< iter_31 > ::type
+, typename mpl::deref< iter_32 > ::type
+, typename mpl::deref< iter_33 > ::type
+, typename mpl::deref< iter_34 > ::type
+, typename mpl::deref< iter_35 > ::type
+, typename mpl::deref< iter_36 > ::type
+, typename mpl::deref< iter_37 > ::type
+, typename mpl::deref< iter_38 > ::type
+, typename mpl::deref< iter_39 > ::type
+, typename mpl::deref< iter_40 > ::type
+, typename mpl::deref< iter_41 > ::type
+, typename mpl::deref< iter_42 > ::type
+, typename mpl::deref< iter_43 > ::type
+, typename mpl::deref< iter_44 > ::type
+, typename mpl::deref< iter_45 > ::type
+, typename mpl::deref< iter_46 > ::type
+, typename mpl::deref< iter_47 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,48)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 49 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+typedef typename mpl::next< iter_29 > ::type iter_30;
+typedef typename mpl::next< iter_30 > ::type iter_31;
+typedef typename mpl::next< iter_31 > ::type iter_32;
+typedef typename mpl::next< iter_32 > ::type iter_33;
+typedef typename mpl::next< iter_33 > ::type iter_34;
+typedef typename mpl::next< iter_34 > ::type iter_35;
+typedef typename mpl::next< iter_35 > ::type iter_36;
+typedef typename mpl::next< iter_36 > ::type iter_37;
+typedef typename mpl::next< iter_37 > ::type iter_38;
+typedef typename mpl::next< iter_38 > ::type iter_39;
+typedef typename mpl::next< iter_39 > ::type iter_40;
+typedef typename mpl::next< iter_40 > ::type iter_41;
+typedef typename mpl::next< iter_41 > ::type iter_42;
+typedef typename mpl::next< iter_42 > ::type iter_43;
+typedef typename mpl::next< iter_43 > ::type iter_44;
+typedef typename mpl::next< iter_44 > ::type iter_45;
+typedef typename mpl::next< iter_45 > ::type iter_46;
+typedef typename mpl::next< iter_46 > ::type iter_47;
+typedef typename mpl::next< iter_47 > ::type iter_48;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,48) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+, typename mpl::deref< iter_30 > ::type
+, typename mpl::deref< iter_31 > ::type
+, typename mpl::deref< iter_32 > ::type
+, typename mpl::deref< iter_33 > ::type
+, typename mpl::deref< iter_34 > ::type
+, typename mpl::deref< iter_35 > ::type
+, typename mpl::deref< iter_36 > ::type
+, typename mpl::deref< iter_37 > ::type
+, typename mpl::deref< iter_38 > ::type
+, typename mpl::deref< iter_39 > ::type
+, typename mpl::deref< iter_40 > ::type
+, typename mpl::deref< iter_41 > ::type
+, typename mpl::deref< iter_42 > ::type
+, typename mpl::deref< iter_43 > ::type
+, typename mpl::deref< iter_44 > ::type
+, typename mpl::deref< iter_45 > ::type
+, typename mpl::deref< iter_46 > ::type
+, typename mpl::deref< iter_47 > ::type
+, typename mpl::deref< iter_48 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,49)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 50 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+typedef typename mpl::next< iter_29 > ::type iter_30;
+typedef typename mpl::next< iter_30 > ::type iter_31;
+typedef typename mpl::next< iter_31 > ::type iter_32;
+typedef typename mpl::next< iter_32 > ::type iter_33;
+typedef typename mpl::next< iter_33 > ::type iter_34;
+typedef typename mpl::next< iter_34 > ::type iter_35;
+typedef typename mpl::next< iter_35 > ::type iter_36;
+typedef typename mpl::next< iter_36 > ::type iter_37;
+typedef typename mpl::next< iter_37 > ::type iter_38;
+typedef typename mpl::next< iter_38 > ::type iter_39;
+typedef typename mpl::next< iter_39 > ::type iter_40;
+typedef typename mpl::next< iter_40 > ::type iter_41;
+typedef typename mpl::next< iter_41 > ::type iter_42;
+typedef typename mpl::next< iter_42 > ::type iter_43;
+typedef typename mpl::next< iter_43 > ::type iter_44;
+typedef typename mpl::next< iter_44 > ::type iter_45;
+typedef typename mpl::next< iter_45 > ::type iter_46;
+typedef typename mpl::next< iter_46 > ::type iter_47;
+typedef typename mpl::next< iter_47 > ::type iter_48;
+typedef typename mpl::next< iter_48 > ::type iter_49;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,49) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+, typename mpl::deref< iter_30 > ::type
+, typename mpl::deref< iter_31 > ::type
+, typename mpl::deref< iter_32 > ::type
+, typename mpl::deref< iter_33 > ::type
+, typename mpl::deref< iter_34 > ::type
+, typename mpl::deref< iter_35 > ::type
+, typename mpl::deref< iter_36 > ::type
+, typename mpl::deref< iter_37 > ::type
+, typename mpl::deref< iter_38 > ::type
+, typename mpl::deref< iter_39 > ::type
+, typename mpl::deref< iter_40 > ::type
+, typename mpl::deref< iter_41 > ::type
+, typename mpl::deref< iter_42 > ::type
+, typename mpl::deref< iter_43 > ::type
+, typename mpl::deref< iter_44 > ::type
+, typename mpl::deref< iter_45 > ::type
+, typename mpl::deref< iter_46 > ::type
+, typename mpl::deref< iter_47 > ::type
+, typename mpl::deref< iter_48 > ::type
+, typename mpl::deref< iter_49 > ::type
+> ::type type;
+};
+};
+template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48 , typename T49 >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,50)
+{
+typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49 BOOST_FT_ell) BOOST_FT_cv ;
+};
+template< > 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 51 > 
+{ 
+template<typename S> struct synthesize_impl_i
+{
+private:
+typedef typename mpl::begin<S> ::type iter_0;
+typedef typename mpl::next< iter_0 > ::type iter_1;
+typedef typename mpl::next< iter_1 > ::type iter_2;
+typedef typename mpl::next< iter_2 > ::type iter_3;
+typedef typename mpl::next< iter_3 > ::type iter_4;
+typedef typename mpl::next< iter_4 > ::type iter_5;
+typedef typename mpl::next< iter_5 > ::type iter_6;
+typedef typename mpl::next< iter_6 > ::type iter_7;
+typedef typename mpl::next< iter_7 > ::type iter_8;
+typedef typename mpl::next< iter_8 > ::type iter_9;
+typedef typename mpl::next< iter_9 > ::type iter_10;
+typedef typename mpl::next< iter_10 > ::type iter_11;
+typedef typename mpl::next< iter_11 > ::type iter_12;
+typedef typename mpl::next< iter_12 > ::type iter_13;
+typedef typename mpl::next< iter_13 > ::type iter_14;
+typedef typename mpl::next< iter_14 > ::type iter_15;
+typedef typename mpl::next< iter_15 > ::type iter_16;
+typedef typename mpl::next< iter_16 > ::type iter_17;
+typedef typename mpl::next< iter_17 > ::type iter_18;
+typedef typename mpl::next< iter_18 > ::type iter_19;
+typedef typename mpl::next< iter_19 > ::type iter_20;
+typedef typename mpl::next< iter_20 > ::type iter_21;
+typedef typename mpl::next< iter_21 > ::type iter_22;
+typedef typename mpl::next< iter_22 > ::type iter_23;
+typedef typename mpl::next< iter_23 > ::type iter_24;
+typedef typename mpl::next< iter_24 > ::type iter_25;
+typedef typename mpl::next< iter_25 > ::type iter_26;
+typedef typename mpl::next< iter_26 > ::type iter_27;
+typedef typename mpl::next< iter_27 > ::type iter_28;
+typedef typename mpl::next< iter_28 > ::type iter_29;
+typedef typename mpl::next< iter_29 > ::type iter_30;
+typedef typename mpl::next< iter_30 > ::type iter_31;
+typedef typename mpl::next< iter_31 > ::type iter_32;
+typedef typename mpl::next< iter_32 > ::type iter_33;
+typedef typename mpl::next< iter_33 > ::type iter_34;
+typedef typename mpl::next< iter_34 > ::type iter_35;
+typedef typename mpl::next< iter_35 > ::type iter_36;
+typedef typename mpl::next< iter_36 > ::type iter_37;
+typedef typename mpl::next< iter_37 > ::type iter_38;
+typedef typename mpl::next< iter_38 > ::type iter_39;
+typedef typename mpl::next< iter_39 > ::type iter_40;
+typedef typename mpl::next< iter_40 > ::type iter_41;
+typedef typename mpl::next< iter_41 > ::type iter_42;
+typedef typename mpl::next< iter_42 > ::type iter_43;
+typedef typename mpl::next< iter_43 > ::type iter_44;
+typedef typename mpl::next< iter_44 > ::type iter_45;
+typedef typename mpl::next< iter_45 > ::type iter_46;
+typedef typename mpl::next< iter_46 > ::type iter_47;
+typedef typename mpl::next< iter_47 > ::type iter_48;
+typedef typename mpl::next< iter_48 > ::type iter_49;
+typedef typename mpl::next< iter_49 > ::type iter_50;
+public:
+typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,50) 
+< typename mpl::deref< iter_0 > ::type 
+, typename detail::cv_traits< 
+typename mpl::deref< iter_1 > ::type > ::type
+, typename mpl::deref< iter_2 > ::type
+, typename mpl::deref< iter_3 > ::type
+, typename mpl::deref< iter_4 > ::type
+, typename mpl::deref< iter_5 > ::type
+, typename mpl::deref< iter_6 > ::type
+, typename mpl::deref< iter_7 > ::type
+, typename mpl::deref< iter_8 > ::type
+, typename mpl::deref< iter_9 > ::type
+, typename mpl::deref< iter_10 > ::type
+, typename mpl::deref< iter_11 > ::type
+, typename mpl::deref< iter_12 > ::type
+, typename mpl::deref< iter_13 > ::type
+, typename mpl::deref< iter_14 > ::type
+, typename mpl::deref< iter_15 > ::type
+, typename mpl::deref< iter_16 > ::type
+, typename mpl::deref< iter_17 > ::type
+, typename mpl::deref< iter_18 > ::type
+, typename mpl::deref< iter_19 > ::type
+, typename mpl::deref< iter_20 > ::type
+, typename mpl::deref< iter_21 > ::type
+, typename mpl::deref< iter_22 > ::type
+, typename mpl::deref< iter_23 > ::type
+, typename mpl::deref< iter_24 > ::type
+, typename mpl::deref< iter_25 > ::type
+, typename mpl::deref< iter_26 > ::type
+, typename mpl::deref< iter_27 > ::type
+, typename mpl::deref< iter_28 > ::type
+, typename mpl::deref< iter_29 > ::type
+, typename mpl::deref< iter_30 > ::type
+, typename mpl::deref< iter_31 > ::type
+, typename mpl::deref< iter_32 > ::type
+, typename mpl::deref< iter_33 > ::type
+, typename mpl::deref< iter_34 > ::type
+, typename mpl::deref< iter_35 > ::type
+, typename mpl::deref< iter_36 > ::type
+, typename mpl::deref< iter_37 > ::type
+, typename mpl::deref< iter_38 > ::type
+, typename mpl::deref< iter_39 > ::type
+, typename mpl::deref< iter_40 > ::type
+, typename mpl::deref< iter_41 > ::type
+, typename mpl::deref< iter_42 > ::type
+, typename mpl::deref< iter_43 > ::type
+, typename mpl::deref< iter_44 > ::type
+, typename mpl::deref< iter_45 > ::type
+, typename mpl::deref< iter_46 > ::type
+, typename mpl::deref< iter_47 > ::type
+, typename mpl::deref< iter_48 > ::type
+, typename mpl::deref< iter_49 > ::type
+, typename mpl::deref< iter_50 > ::type
+> ::type type;
+};
+};
+# undef BOOST_FT_make_type
+# undef BOOST_FT_make_type_impl
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/synthesize_impl/master.hpp b/3rdParty/Boost/src/boost/function_types/detail/synthesize_impl/master.hpp
new file mode 100644
index 0000000..49d38ef
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/synthesize_impl/master.hpp
@@ -0,0 +1,87 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+// no include guards, this file is intended for multiple inclusion
+
+#if   BOOST_FT_ARITY_LOOP_PREFIX
+
+#   ifndef BOOST_FT_DETAIL_SYNTHESIZE_IMPL_MASTER_HPP_INCLUDED
+#   define BOOST_FT_DETAIL_SYNTHESIZE_IMPL_MASTER_HPP_INCLUDED
+#     include <boost/preprocessor/cat.hpp>
+#     include <boost/preprocessor/arithmetic/dec.hpp>
+#     include <boost/preprocessor/iteration/local.hpp>
+#     include <boost/preprocessor/facilities/empty.hpp>
+#     include <boost/preprocessor/facilities/identity.hpp>
+#   endif
+
+#   define BOOST_FT_type_name type
+
+#   ifdef BOOST_FT_flags
+#     define BOOST_FT_make_type(flags,cc,arity) BOOST_FT_make_type_impl(flags,cc,arity)
+#     define BOOST_FT_make_type_impl(flags,cc,arity) make_type_ ## flags ## _ ## cc ## _ ## arity
+#   else
+BOOST_PP_EXPAND(#) define BOOST_FT_make_type(flags,cc,arity) BOOST_FT_make_type_impl(flags,cc,arity)
+BOOST_PP_EXPAND(#) define BOOST_FT_make_type_impl(flags,cc,arity) make_type_ ## flags ## _ ## cc ## _ ## arity
+#   endif
+
+#   define BOOST_FT_iter(i) BOOST_PP_CAT(iter_,i)
+
+#elif BOOST_FT_ARITY_LOOP_IS_ITERATING
+
+template< BOOST_FT_tplargs(BOOST_PP_IDENTITY(typename)) >
+struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,BOOST_FT_arity)
+{
+  typedef BOOST_FT_type ;
+};
+
+template<> 
+struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, BOOST_FT_n > 
+{ 
+  template<typename S> struct synthesize_impl_i
+  {
+  private:
+    typedef typename mpl::begin<S>::type BOOST_FT_iter(0);
+#   if BOOST_FT_n > 1
+#     define BOOST_PP_LOCAL_MACRO(i) typedef typename mpl::next< \
+          BOOST_FT_iter(BOOST_PP_DEC(i)) >::type BOOST_FT_iter(i);
+#     define BOOST_PP_LOCAL_LIMITS (1,BOOST_FT_n-1)
+#     include BOOST_PP_LOCAL_ITERATE()
+#   endif
+  public:
+    typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,BOOST_FT_arity) 
+    < typename mpl::deref< BOOST_FT_iter(0) >::type 
+#   if BOOST_FT_mfp
+    , typename detail::cv_traits< 
+          typename mpl::deref< BOOST_FT_iter(1) >::type >::type
+#   endif
+#   if BOOST_FT_n > (BOOST_FT_mfp+1)
+#     define BOOST_PP_LOCAL_LIMITS (BOOST_FT_mfp+1,BOOST_FT_n-1)
+#     define BOOST_PP_LOCAL_MACRO(i) \
+        , typename mpl::deref< BOOST_FT_iter(i) >::type
+#     include BOOST_PP_LOCAL_ITERATE()
+#   endif
+    >::type type;
+  };
+};
+
+#elif BOOST_FT_ARITY_LOOP_SUFFIX
+
+#   ifdef BOOST_FT_flags
+#     undef BOOST_FT_make_type
+#     undef BOOST_FT_make_type_impl
+#   else
+BOOST_PP_EXPAND(#) undef BOOST_FT_make_type
+BOOST_PP_EXPAND(#) undef BOOST_FT_make_type_impl
+#   endif
+#   undef BOOST_FT_iter
+#   undef BOOST_FT_type_name
+
+#else
+#   error "attempt to use arity loop master file without loop"
+#endif
+
diff --git a/3rdParty/Boost/src/boost/function_types/detail/to_sequence.hpp b/3rdParty/Boost/src/boost/function_types/detail/to_sequence.hpp
new file mode 100644
index 0000000..828acd9
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/detail/to_sequence.hpp
@@ -0,0 +1,47 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+#ifndef BOOST_FT_DETAIL_TO_SEQUENCE_HPP_INCLUDED
+#define BOOST_FT_DETAIL_TO_SEQUENCE_HPP_INCLUDED
+
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/is_sequence.hpp>
+#include <boost/mpl/placeholders.hpp>
+#include <boost/type_traits/add_reference.hpp>
+
+#include <boost/function_types/is_callable_builtin.hpp>
+
+namespace boost { namespace function_types { namespace detail {
+
+// wrap first arguments in components, if callable builtin type
+template<typename T>
+struct to_sequence
+{
+  typedef typename
+   mpl::eval_if
+   < is_callable_builtin<T>
+   , to_sequence< components<T> >
+   , mpl::identity< T >
+   >::type
+  type;
+};
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+// reduce template instantiations, if possible
+template<typename T, typename U>
+struct to_sequence< components<T,U> > 
+{
+  typedef typename components<T,U>::types type;
+};
+#endif
+
+} } } // namespace ::boost::function_types::detail
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/function_types/is_callable_builtin.hpp b/3rdParty/Boost/src/boost/function_types/is_callable_builtin.hpp
new file mode 100644
index 0000000..b1a7c83
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/is_callable_builtin.hpp
@@ -0,0 +1,35 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+#ifndef BOOST_FT_IS_CALLABLE_BUILTIN_HPP_INCLUDED
+#define BOOST_FT_IS_CALLABLE_BUILTIN_HPP_INCLUDED
+
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/type_traits/detail/template_arity_spec.hpp>
+
+#include <boost/function_types/components.hpp>
+
+namespace boost 
+{ 
+  namespace function_types 
+  {
+    template< typename T, typename Tag = null_tag > 
+    struct is_callable_builtin
+      : function_types::represents
+        < function_types::components<T>
+        , function_types::tag<Tag, detail::callable_builtin_tag> 
+        >
+    { 
+      BOOST_MPL_AUX_LAMBDA_SUPPORT(2,is_callable_builtin,(T,Tag))
+    };
+  }
+  BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(2,function_types::is_callable_builtin)
+}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/function_types/is_function.hpp b/3rdParty/Boost/src/boost/function_types/is_function.hpp
new file mode 100644
index 0000000..d29229b
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/is_function.hpp
@@ -0,0 +1,34 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+//------------------------------------------------------------------------------
+
+#ifndef BOOST_FT_IS_FUNCTION_HPP_INCLUDED
+#define BOOST_FT_IS_FUNCTION_HPP_INCLUDED
+
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/type_traits/detail/template_arity_spec.hpp>
+
+#include <boost/function_types/components.hpp>
+
+namespace boost 
+{ 
+  namespace function_types 
+  {
+    template< typename T, typename Tag = null_tag > 
+    struct is_function
+      : function_types::represents
+        < function_types::components<T>
+        , function_types::tag<Tag ,detail::function_tag> 
+        >
+    { 
+      BOOST_MPL_AUX_LAMBDA_SUPPORT(2,is_function,(T,Tag))
+    };
+  }
+  BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(2,function_types::is_function)
+} 
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/function_types/parameter_types.hpp b/3rdParty/Boost/src/boost/function_types/parameter_types.hpp
new file mode 100644
index 0000000..5e049bf
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/parameter_types.hpp
@@ -0,0 +1,55 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+#ifndef BOOST_FT_PARAMETER_TYPES_HPP_INCLUDED
+#define BOOST_FT_PARAMETER_TYPES_HPP_INCLUDED
+
+#include <boost/blank.hpp>
+#include <boost/mpl/if.hpp>
+
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/type_traits/detail/template_arity_spec.hpp>
+
+#include <boost/mpl/pop_front.hpp>
+
+#include <boost/function_types/is_callable_builtin.hpp>
+#include <boost/function_types/components.hpp>
+
+namespace boost 
+{ 
+  namespace function_types 
+  {
+    using mpl::placeholders::_;
+ 
+    template< typename T, typename ClassTypeTransform = add_reference<_> >
+    struct parameter_types;
+
+    namespace detail
+    {
+      template<typename T, typename ClassTypeTransform> 
+      struct parameter_types_impl
+        : mpl::pop_front
+          < typename function_types::components<T,ClassTypeTransform>::types 
+          >::type
+      { };
+    }
+
+    template<typename T, typename ClassTypeTransform> struct parameter_types
+      : mpl::if_
+        < function_types::is_callable_builtin<T>
+        , detail::parameter_types_impl<T,ClassTypeTransform>, boost::blank
+        >::type
+    {
+      BOOST_MPL_AUX_LAMBDA_SUPPORT(2,parameter_types,(T,ClassTypeTransform)) 
+    };
+  }
+  BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(2,function_types::parameter_types)
+}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/function_types/property_tags.hpp b/3rdParty/Boost/src/boost/function_types/property_tags.hpp
new file mode 100644
index 0000000..bbc64d5
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/property_tags.hpp
@@ -0,0 +1,149 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+#ifndef BOOST_FT_DETAIL_TAGS_HPP_INCLUDED
+#define BOOST_FT_DETAIL_TAGS_HPP_INCLUDED
+
+#include <cstddef>
+
+#include <boost/type_traits/integral_constant.hpp>
+#include <boost/mpl/bitxor.hpp>
+
+
+namespace boost { namespace function_types { 
+
+namespace detail 
+{
+  typedef long bits_t;
+
+  template<bits_t Value> struct constant 
+    : boost::integral_constant<bits_t,Value> 
+  { };
+
+  template<bits_t Bits, bits_t Mask> struct property_tag 
+  {
+    typedef constant<Bits> bits;
+    typedef constant<Mask> mask;
+  };
+
+  template<typename T> struct bits : T::bits { };
+  template<typename T> struct mask : T::mask { };
+
+  // forward declaration, defined in pp_tags
+  template<bits_t Bits, bits_t CCID> struct encode_bits_impl; 
+
+  // forward declaration, defined in pp_tags
+  template<bits_t LHS_bits, bits_t LHS_mask, 
+           bits_t RHS_bits, bits_t RHS_mask> 
+  struct tag_ice;
+ 
+  // forward declaration, defined in retag_default_cc 
+  template<class Tag, class RegTag = Tag> struct retag_default_cc; 
+ 
+  template<bits_t Bits, bits_t CCID> struct encode_bits
+    : constant< 
+        ::boost::function_types::detail::encode_bits_impl<Bits,CCID>::value 
+      >
+  { };
+
+  template<class LHS, class RHS> struct compound_tag
+  {
+    typedef constant<
+      ::boost::function_types::detail::tag_ice
+        < ::boost::function_types::detail::bits<LHS>::value
+        , ::boost::function_types::detail::mask<LHS>::value
+        , ::boost::function_types::detail::bits<RHS>::value
+        , ::boost::function_types::detail::mask<RHS>::value
+        >::combined_bits 
+    > bits;
+
+    typedef constant< 
+      ::boost::function_types::detail::tag_ice
+        < ::boost::function_types::detail::bits<LHS>::value
+        , ::boost::function_types::detail::mask<LHS>::value
+        , ::boost::function_types::detail::bits<RHS>::value
+        , ::boost::function_types::detail::mask<RHS>::value
+        >::combined_mask 
+    > mask; 
+  };
+
+  template <class Base, class PropOld, class PropNew>
+  struct changed_tag
+    : Base
+  {
+    typedef mpl::bitxor_
+        <typename Base::bits, typename PropOld::bits, typename PropNew::bits>
+    bits;
+  };
+
+  template<class Tag, class QueryTag> struct represents_impl
+    : boost::integral_constant<bool,
+        ::boost::function_types::detail::tag_ice
+          < ::boost::function_types::detail::bits<Tag>::value
+          , ::boost::function_types::detail::mask<Tag>::value
+          , ::boost::function_types::detail::bits<QueryTag>::value
+          , ::boost::function_types::detail::mask<QueryTag>::value
+          >::match
+      >
+  { };
+
+} // namespace detail
+
+typedef detail::property_tag<0,0> null_tag;
+
+template<class Tag1, class Tag2, class Tag3 = null_tag, class Tag4 = null_tag>
+struct tag
+  : detail::compound_tag< detail::compound_tag<Tag1,Tag2>, 
+        detail::compound_tag<Tag3,Tag4> >
+{ };
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+template<class Tag1, class Tag2, class Tag3> struct tag<Tag1,Tag2,Tag3,null_tag>
+  : detail::compound_tag<detail::compound_tag<Tag1,Tag2>,Tag3>
+{ };
+template<class Tag1, class Tag2> struct tag<Tag1,Tag2,null_tag,null_tag>
+  : detail::compound_tag<Tag1,Tag2>
+{ };
+template<class Tag1> struct tag<Tag1,null_tag,null_tag,null_tag>
+  : Tag1
+{ };
+#endif
+
+
+template<class Tag, class QueryTag> struct represents
+  : detail::represents_impl<Tag, detail::retag_default_cc<QueryTag,Tag> >
+{ };
+
+
+template<class Tag, class QueryTag> struct extract
+{ 
+  typedef detail::constant<
+    ::boost::function_types::detail::tag_ice
+      < ::boost::function_types::detail::bits<Tag>::value
+      , ::boost::function_types::detail::mask<Tag>::value
+      , ::boost::function_types::detail::bits<QueryTag>::value
+      , ::boost::function_types::detail::mask<QueryTag>::value
+      >::extracted_bits 
+  > bits;
+
+  typedef detail::constant< 
+    ::boost::function_types::detail::mask<QueryTag>::value
+  > mask; 
+};
+
+} } // namespace ::boost::function_types
+
+#include <boost/function_types/detail/pp_tags/preprocessed.hpp>
+
+namespace boost { namespace function_types {
+#define BOOST_FT_cc_file <boost/function_types/detail/pp_tags/cc_tag.hpp>
+#include <boost/function_types/detail/pp_loop.hpp>
+} } // namespace boost::function_types
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/function_types/result_type.hpp b/3rdParty/Boost/src/boost/function_types/result_type.hpp
new file mode 100644
index 0000000..1fcaba6
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/result_type.hpp
@@ -0,0 +1,50 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+#ifndef BOOST_FT_RESULT_TYPE_HPP_INCLUDED
+#define BOOST_FT_RESULT_TYPE_HPP_INCLUDED
+
+#include <boost/blank.hpp>
+#include <boost/mpl/if.hpp>
+
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/type_traits/detail/template_arity_spec.hpp>
+
+#include <boost/mpl/at.hpp>
+
+#include <boost/function_types/is_callable_builtin.hpp>
+#include <boost/function_types/components.hpp>
+
+namespace boost 
+{ 
+  namespace function_types 
+  {
+    template< typename T > struct result_type;
+
+    namespace detail
+    {
+      template<typename T> struct result_type_impl
+        : mpl::at_c
+          < typename function_types::components<T>::types, 0 >
+      { };
+    }
+
+    template<typename T> struct result_type
+      : mpl::if_
+        < function_types::is_callable_builtin<T>
+        , detail::result_type_impl<T>, boost::blank
+        >::type
+    { 
+      BOOST_MPL_AUX_LAMBDA_SUPPORT(1,result_type,(T)) 
+    };
+  }
+  BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(1,function_types::result_type)
+}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/adapted/mpl.hpp b/3rdParty/Boost/src/boost/fusion/adapted/mpl.hpp
new file mode 100644
index 0000000..f825784
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/adapted/mpl.hpp
@@ -0,0 +1,21 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2005-2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_FUSION_MPL_31122005_1152)
+#define BOOST_FUSION_MPL_31122005_1152
+
+#include <boost/fusion/adapted/mpl/detail/begin_impl.hpp>
+#include <boost/fusion/adapted/mpl/detail/end_impl.hpp>
+#include <boost/fusion/adapted/mpl/detail/is_sequence_impl.hpp>
+#include <boost/fusion/adapted/mpl/detail/size_impl.hpp>
+#include <boost/fusion/adapted/mpl/detail/value_at_impl.hpp>
+#include <boost/fusion/adapted/mpl/detail/at_impl.hpp>
+#include <boost/fusion/adapted/mpl/detail/has_key_impl.hpp>
+#include <boost/fusion/adapted/mpl/detail/category_of_impl.hpp>
+#include <boost/fusion/adapted/mpl/detail/is_view_impl.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/at_impl.hpp b/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/at_impl.hpp
new file mode 100644
index 0000000..6f3be1c
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/at_impl.hpp
@@ -0,0 +1,40 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2005-2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_FUSION_AT_IMPL_31122005_1642)
+#define BOOST_FUSION_AT_IMPL_31122005_1642
+
+#include <boost/mpl/at.hpp>
+
+namespace boost { namespace fusion 
+{
+    struct mpl_sequence_tag;
+
+    namespace extension
+    {
+        template<typename Tag>
+        struct at_impl;
+
+        template <>
+        struct at_impl<mpl_sequence_tag>
+        {
+            template <typename Sequence, typename N>
+            struct apply
+            {
+                typedef typename mpl::at<Sequence, N>::type type;
+                
+                static type
+                call(Sequence)
+                {
+                    return type();
+                }
+            };
+        };
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/begin_impl.hpp b/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/begin_impl.hpp
new file mode 100644
index 0000000..1ec77d8
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/begin_impl.hpp
@@ -0,0 +1,45 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2005-2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_FUSION_BEGIN_IMPL_31122005_1209)
+#define BOOST_FUSION_BEGIN_IMPL_31122005_1209
+
+#include <boost/fusion/adapted/mpl/mpl_iterator.hpp>
+#include <boost/mpl/begin.hpp>
+#include <boost/type_traits/remove_const.hpp>
+
+namespace boost { namespace fusion {
+    
+    struct mpl_sequence_tag;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct begin_impl;
+
+        template <>
+        struct begin_impl<mpl_sequence_tag>
+        {
+            template <typename Sequence>
+            struct apply 
+            {
+                typedef typename mpl::begin<
+                    typename remove_const<Sequence>::type
+                >::type iterator;
+                typedef mpl_iterator<iterator> type;
+                
+                static type
+                call(Sequence)
+                {
+                    return type();
+                }
+            };
+        };
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/category_of_impl.hpp b/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/category_of_impl.hpp
new file mode 100644
index 0000000..ad68fcc
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/category_of_impl.hpp
@@ -0,0 +1,54 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2005-2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_FUSION_CATEGORY_OF_IMPL_20060217_2141)
+#define BOOST_FUSION_CATEGORY_OF_IMPL_20060217_2141
+
+#include <boost/fusion/support/detail/mpl_iterator_category.hpp>
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/is_sequence.hpp>
+#include <boost/static_assert.hpp>
+
+namespace boost { namespace fusion {
+
+    namespace detail
+    {
+        template <typename T>
+        struct mpl_sequence_category_of
+        {
+            // assumes T is an mpl sequence
+            // there should be no way this will ever be
+            // called where T is an mpl iterator
+        
+            BOOST_STATIC_ASSERT(mpl::is_sequence<T>::value);
+            typedef typename 
+                mpl_iterator_category<
+                    typename mpl::begin<T>::type::category
+                >::type
+            type;
+        };
+    }
+
+    struct mpl_sequence_tag;
+
+    namespace extension
+    {
+        template<typename Tag>
+        struct category_of_impl;
+
+        template<>
+        struct category_of_impl<mpl_sequence_tag>
+        {
+            template<typename T>
+            struct apply
+                : detail::mpl_sequence_category_of<T>
+            {};
+        };
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/end_impl.hpp b/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/end_impl.hpp
new file mode 100644
index 0000000..e346695
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/end_impl.hpp
@@ -0,0 +1,45 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2005-2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_FUSION_END_IMPL_31122005_1237)
+#define BOOST_FUSION_END_IMPL_31122005_1237
+
+#include <boost/fusion/adapted/mpl/mpl_iterator.hpp>
+#include <boost/mpl/end.hpp>
+#include <boost/type_traits/add_const.hpp>
+
+namespace boost { namespace fusion
+{
+    struct mpl_sequence_tag;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct end_impl;
+
+        template <>
+        struct end_impl<mpl_sequence_tag>
+        {
+            template <typename Sequence>
+            struct apply
+            {
+                typedef typename mpl::end<
+                    typename remove_const<Sequence>::type
+                >::type iterator;
+                typedef mpl_iterator<iterator> type;
+                
+                static type
+                call(Sequence)
+                {
+                    return type();
+                }
+            };
+        };
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/has_key_impl.hpp b/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/has_key_impl.hpp
new file mode 100644
index 0000000..bfecbc7
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/has_key_impl.hpp
@@ -0,0 +1,31 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2005-2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_FUSION_HAS_KEY_IMPL_31122005_1647)
+#define BOOST_FUSION_HAS_KEY_IMPL_31122005_1647
+
+#include <boost/mpl/has_key.hpp>
+
+namespace boost { namespace fusion 
+{
+    struct mpl_sequence_tag;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct has_key_impl;
+
+        template <>
+        struct has_key_impl<mpl_sequence_tag>
+        {
+            template <typename Sequence, typename Key>
+            struct apply : mpl::has_key<Sequence, Key> {};
+        };
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/is_sequence_impl.hpp b/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/is_sequence_impl.hpp
new file mode 100644
index 0000000..bf9b349
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/is_sequence_impl.hpp
@@ -0,0 +1,31 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2005-2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_FUSION_IS_SEQUENCE_IMPL_31122005_1505)
+#define BOOST_FUSION_IS_SEQUENCE_IMPL_31122005_1505
+
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace fusion
+{
+    struct mpl_sequence_tag;
+
+    namespace extension
+    {
+        template<typename Tag>
+        struct is_sequence_impl;
+
+        template<>
+        struct is_sequence_impl<mpl_sequence_tag>
+        {
+            template<typename T>
+            struct apply : mpl::true_ {};
+        };
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/is_view_impl.hpp b/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/is_view_impl.hpp
new file mode 100644
index 0000000..5ae48c9
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/is_view_impl.hpp
@@ -0,0 +1,32 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2005-2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_FUSION_IS_VIEW_IMPL_03202006_0048)
+#define BOOST_FUSION_IS_VIEW_IMPL_03202006_0048
+
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace fusion 
+{
+    struct mpl_sequence_tag;
+
+    namespace extension
+    {
+        template<typename Tag>
+        struct is_view_impl;
+
+        template<>
+        struct is_view_impl<mpl_sequence_tag>
+        {
+            template<typename T>
+            struct apply : mpl::true_
+            {};
+        };
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/size_impl.hpp b/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/size_impl.hpp
new file mode 100644
index 0000000..6289351
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/size_impl.hpp
@@ -0,0 +1,31 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2005-2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_FUSION_SIZE_IMPL_31122005_1508)
+#define BOOST_FUSION_SIZE_IMPL_31122005_1508
+
+#include <boost/mpl/size.hpp>
+
+namespace boost { namespace fusion 
+{
+    struct mpl_sequence_tag;
+
+    namespace extension
+    {
+        template<typename Tag>
+        struct size_impl;
+
+        template <>
+        struct size_impl<mpl_sequence_tag>
+        {
+            template <typename Sequence>
+            struct apply : mpl::size<Sequence> {};
+        };
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/value_at_impl.hpp b/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/value_at_impl.hpp
new file mode 100644
index 0000000..5f39e4e
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/adapted/mpl/detail/value_at_impl.hpp
@@ -0,0 +1,31 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2005-2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_FUSION_VALUE_AT_IMPL_31122005_1621)
+#define BOOST_FUSION_VALUE_AT_IMPL_31122005_1621
+
+#include <boost/mpl/at.hpp>
+
+namespace boost { namespace fusion 
+{
+    struct mpl_sequence_tag;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct value_at_impl;
+
+        template <>
+        struct value_at_impl<mpl_sequence_tag>
+        {
+            template <typename Sequence, typename N>
+            struct apply : mpl::at<Sequence, N> {};
+        };
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/adapted/mpl/mpl_iterator.hpp b/3rdParty/Boost/src/boost/fusion/adapted/mpl/mpl_iterator.hpp
new file mode 100644
index 0000000..9c82028
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/adapted/mpl/mpl_iterator.hpp
@@ -0,0 +1,113 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_MPL_ITERATOR_05052005_0731)
+#define FUSION_MPL_ITERATOR_05052005_0731
+
+#include <boost/fusion/support/detail/mpl_iterator_category.hpp>
+#include <boost/fusion/iterator/iterator_facade.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/mpl/deref.hpp>
+#include <boost/mpl/next.hpp>
+#include <boost/mpl/prior.hpp>
+#include <boost/mpl/advance.hpp>
+#include <boost/mpl/distance.hpp>
+
+namespace boost { namespace fusion
+{
+    template <typename Iterator_>
+    struct mpl_iterator
+        : iterator_facade<
+            mpl_iterator<Iterator_>
+          , typename detail::mpl_iterator_category<typename Iterator_::category>::type
+        >
+    {
+        typedef typename remove_const<Iterator_>::type iterator_type;
+
+        template <typename Iterator>
+        struct value_of : mpl::deref<typename Iterator::iterator_type> {};
+
+        template <typename Iterator>
+        struct deref
+        {
+            typedef typename mpl::deref<
+                typename Iterator::iterator_type>::type
+            type;
+
+            static type
+            call(Iterator)
+            {
+                return type();
+            }
+        };
+
+        template <typename Iterator>
+        struct next
+        {
+            typedef mpl_iterator<
+                typename mpl::next<typename Iterator::iterator_type>::type> 
+            type;
+
+            static type
+            call(Iterator)
+            {
+                return type();
+            }
+        };
+
+        template <typename Iterator>
+        struct prior
+        {
+            typedef mpl_iterator<
+                typename mpl::prior<typename Iterator::iterator_type>::type> 
+            type;
+
+            static type
+            call(Iterator)
+            {
+                return type();
+            }
+        };
+
+        template <typename Iterator, typename N>
+        struct advance
+        {
+            typedef mpl_iterator<
+                typename mpl::advance<typename Iterator::iterator_type, N>::type>
+            type;
+
+            static type
+            call(Iterator const& /*i*/)
+            {
+                return type();
+            }
+        };
+
+        template <typename I1, typename I2>
+        struct distance : 
+            mpl::distance<
+                typename I1::iterator_type
+              , typename I2::iterator_type>
+        {
+            typedef typename 
+                mpl::distance<
+                    typename I1::iterator_type
+                  , typename I2::iterator_type
+                >::type
+            type;
+            
+            static type
+            call(I1 const&, I2 const&)
+            {
+                return type();
+            }
+        };
+    };
+}}
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/algorithm/iteration/detail/fold.hpp b/3rdParty/Boost/src/boost/fusion/algorithm/iteration/detail/fold.hpp
new file mode 100644
index 0000000..56302fb
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/algorithm/iteration/detail/fold.hpp
@@ -0,0 +1,436 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2006 Dan Marsden
+    Copyright (c) 2009-2010 Christopher Schmidt
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ALGORITHM_ITERATION_DETAIL_FOLD_HPP
+#define BOOST_FUSION_ALGORITHM_ITERATION_DETAIL_FOLD_HPP
+
+#include <boost/config.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/fusion/sequence/intrinsic/empty.hpp>
+#include <boost/fusion/sequence/intrinsic/size.hpp>
+#include <boost/fusion/iterator/equal_to.hpp>
+#include <boost/fusion/iterator/deref.hpp>
+#include <boost/fusion/iterator/value_of.hpp>
+#include <boost/fusion/iterator/prior.hpp>
+#include <boost/fusion/iterator/next.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/utility/result_of.hpp>
+#include <boost/type_traits/add_const.hpp>
+#include <boost/type_traits/add_reference.hpp>
+
+#endif
+
+#ifdef BOOST_FUSION_REVERSE_FOLD
+#   ifdef BOOST_FUSION_ITER_FOLD
+#       define BOOST_FUSION_FOLD_NAME reverse_iter_fold
+#   else
+#       define BOOST_FUSION_FOLD_NAME reverse_fold
+#   endif
+
+#   define BOOST_FUSION_FOLD_IMPL_FIRST_IT_FUNCTION end
+#   define BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION prior
+#   define BOOST_FUSION_FOLD_IMPL_FIRST_IT_META_TRANSFORM(IT)                   \
+        typename fusion::result_of::prior<IT>::type
+#   define BOOST_FUSION_FOLD_IMPL_FIRST_IT_TRANSFORM(IT) fusion::prior(IT)
+#else
+#   ifdef BOOST_FUSION_ITER_FOLD
+#       define BOOST_FUSION_FOLD_NAME iter_fold
+#   else
+#       define BOOST_FUSION_FOLD_NAME fold
+#   endif
+
+#   define BOOST_FUSION_FOLD_IMPL_FIRST_IT_FUNCTION begin
+#   define BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION next
+#   define BOOST_FUSION_FOLD_IMPL_FIRST_IT_META_TRANSFORM(IT) IT
+#   define BOOST_FUSION_FOLD_IMPL_FIRST_IT_TRANSFORM(IT) IT
+#endif
+#ifdef BOOST_FUSION_ITER_FOLD
+#   define BOOST_FUSION_FOLD_IMPL_INVOKE_IT_META_TRANSFORM(IT) IT&
+#   define BOOST_FUSION_FOLD_IMPL_INVOKE_IT_TRANSFORM(IT) IT
+#else
+#   define BOOST_FUSION_FOLD_IMPL_INVOKE_IT_META_TRANSFORM(IT)                  \
+        typename fusion::result_of::deref<IT>::type
+#   define BOOST_FUSION_FOLD_IMPL_INVOKE_IT_TRANSFORM(IT) fusion::deref(IT)
+#endif
+
+namespace boost { namespace fusion
+{
+    namespace detail
+    {
+        template<typename State, typename It, typename F>
+        struct BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME, _lvalue_state)
+          : boost::result_of<
+                F(
+                typename add_reference<typename add_const<State>::type>::type,
+                BOOST_FUSION_FOLD_IMPL_INVOKE_IT_META_TRANSFORM(It))
+            >
+        {};
+
+        template<typename Result,int N>
+        struct BOOST_PP_CAT(unrolled_,BOOST_FUSION_FOLD_NAME)
+        {
+            template<typename State, typename It0, typename F>
+            static Result
+            call(State const& state,It0 const& it0,F f)
+            {
+                typedef typename
+                    result_of::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION<
+                        It0 const
+                    >::type
+                It1;
+                It1 it1 = fusion::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION(it0);
+                typedef typename
+                    result_of::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION<
+                        It1
+                    >::type
+                It2;
+                It2 it2 = fusion::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION(it1);
+                typedef typename
+                    result_of::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION<
+                        It2
+                    >::type
+                It3;
+                It3 it3 = fusion::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION(it2);
+
+                typedef typename BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME, _lvalue_state)<State,It0,F>::type State1;
+                State1 const state1=f(state,BOOST_FUSION_FOLD_IMPL_INVOKE_IT_TRANSFORM(it0));
+
+                typedef typename BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME, _lvalue_state)<State1,It1,F>::type State2;
+                State2 const state2=f(state1,BOOST_FUSION_FOLD_IMPL_INVOKE_IT_TRANSFORM(it1));
+
+                typedef typename BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME, _lvalue_state)<State2,It2,F>::type State3;
+                State3 const state3=f(state2,BOOST_FUSION_FOLD_IMPL_INVOKE_IT_TRANSFORM(it2));
+
+                return BOOST_PP_CAT(unrolled_,BOOST_FUSION_FOLD_NAME)<
+                    Result
+                  , N-4
+                >::call(
+                    f(state3,BOOST_FUSION_FOLD_IMPL_INVOKE_IT_TRANSFORM(it3)),
+                    fusion::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION(it3),
+                    f);
+            }
+        };
+
+        template<typename Result>
+        struct BOOST_PP_CAT(unrolled_,BOOST_FUSION_FOLD_NAME)<Result,3>
+        {
+            template<typename State, typename It0, typename F>
+            static Result
+            call(State const& state,It0 const& it0,F f)
+            {
+                typedef typename
+                    result_of::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION<
+                        It0 const
+                    >::type
+                It1;
+                It1 it1 = fusion::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION(it0);
+                typedef typename
+                    result_of::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION<
+                        It1
+                    >::type
+                It2;
+                It2 it2 = fusion::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION(it1);
+
+                typedef typename BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME, _lvalue_state)<State,It0,F>::type State1;
+                State1 const state1=f(state,BOOST_FUSION_FOLD_IMPL_INVOKE_IT_TRANSFORM(it0));
+
+                typedef typename BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME, _lvalue_state)<State1,It1,F>::type State2;
+                State2 const state2=f(state1,BOOST_FUSION_FOLD_IMPL_INVOKE_IT_TRANSFORM(it1));
+
+                return f(state2,BOOST_FUSION_FOLD_IMPL_INVOKE_IT_TRANSFORM(it2));
+            }
+        };
+
+        template<typename Result>
+        struct BOOST_PP_CAT(unrolled_,BOOST_FUSION_FOLD_NAME)<Result,2>
+        {
+            template<typename State, typename It0, typename F>
+            static Result
+            call(State const& state,It0 const& it0,F f)
+            {
+                typedef typename BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME, _lvalue_state)<State,It0,F>::type State1;
+                State1 const state1=f(state,BOOST_FUSION_FOLD_IMPL_INVOKE_IT_TRANSFORM(it0));
+
+                return f(
+                    state1,
+                    BOOST_FUSION_FOLD_IMPL_INVOKE_IT_TRANSFORM(
+                        fusion::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION(it0)));
+            }
+        };
+
+        template<typename Result>
+        struct BOOST_PP_CAT(unrolled_,BOOST_FUSION_FOLD_NAME)<Result,1>
+        {
+            template<typename State, typename It0, typename F>
+            static Result
+            call(State const& state,It0 const& it0,F f)
+            {
+                return f(state,
+                    BOOST_FUSION_FOLD_IMPL_INVOKE_IT_TRANSFORM(it0));
+            }
+        };
+
+        template<typename Result>
+        struct BOOST_PP_CAT(unrolled_,BOOST_FUSION_FOLD_NAME)<Result,0>
+        {
+            template<typename State, typename It0, typename F>
+            static Result
+            call(State const& state,It0 const& it0,F f)
+            {
+                return static_cast<Result>(state);
+            }
+        };
+
+        template<typename StateRef, typename It0, typename F, int N>
+        struct BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_FOLD_NAME)
+        {
+            typedef typename
+                BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME, _lvalue_state)<
+                    StateRef
+                  , It0 const
+                  , F
+                >::type
+            rest1;
+            typedef typename
+                result_of::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION<
+                    It0 const
+                >::type
+            it1;
+            typedef typename
+                BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME, _lvalue_state)<
+                    rest1
+                  , it1
+                  , F
+                >::type
+            rest2;
+            typedef typename
+                result_of::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION<it1>::type
+            it2;
+            typedef typename
+                BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME, _lvalue_state)<
+                    rest2
+                  , it2
+                  , F
+                >::type
+            rest3;
+            typedef typename
+                result_of::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION<it2>::type
+            it3;
+
+            typedef typename
+                BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_FOLD_NAME)<
+                    typename BOOST_PP_CAT(
+                        BOOST_FUSION_FOLD_NAME, _lvalue_state)<
+                        rest3
+                      , it3
+                      , F
+                    >::type
+                  , typename result_of::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION<
+                        it3
+                    >::type
+                  , F
+                  , N-4
+                >::type
+            type;
+        };
+
+        template<typename StateRef, typename It0, typename F>
+        struct BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_FOLD_NAME)<
+            StateRef
+          , It0
+          , F
+          , 3
+        >
+        {
+            typedef typename
+                BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME, _lvalue_state)<
+                    StateRef
+                  , It0 const
+                  , F
+                >::type
+            rest1;
+            typedef typename
+                result_of::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION<
+                    It0 const
+                >::type
+            it1;
+
+            typedef typename
+                BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME, _lvalue_state)<
+                    typename BOOST_PP_CAT(
+                        BOOST_FUSION_FOLD_NAME, _lvalue_state)<
+                        rest1
+                      , it1
+                      , F
+                    >::type
+                  , typename result_of::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION<
+                        it1 const
+                    >::type const
+                  , F
+                >::type
+            type;
+        };
+
+        template<typename StateRef, typename It0, typename F>
+        struct BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_FOLD_NAME)<
+            StateRef
+          , It0
+          , F
+          , 2
+        >
+          : BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME, _lvalue_state)<
+                typename BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME, _lvalue_state)<
+                    StateRef
+                  , It0 const
+                  , F
+                >::type
+              , typename result_of::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION<
+                    It0 const
+                >::type const
+              , F
+            >
+        {};
+
+        template<typename StateRef, typename It0, typename F>
+        struct BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_FOLD_NAME)<
+            StateRef
+          , It0
+          , F
+          , 1
+        >
+          : BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME, _lvalue_state)<
+                StateRef
+              , It0 const
+              , F
+            >
+        {};
+
+        template<typename StateRef, typename It0, typename F>
+        struct BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_FOLD_NAME)<
+            StateRef
+          , It0
+          , F
+          , 0
+        >
+        {
+            typedef StateRef type;
+        };
+
+        template<typename StateRef, typename It0, typename F, int SeqSize>
+        struct BOOST_PP_CAT(result_of_first_unrolled,BOOST_FUSION_FOLD_NAME)
+        {
+            typedef typename
+                BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_FOLD_NAME)<
+                    typename boost::result_of<
+                        F(
+                            StateRef,
+                            BOOST_FUSION_FOLD_IMPL_INVOKE_IT_META_TRANSFORM(
+                                It0 const)
+                        )
+                    >::type
+                  , typename result_of::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION<
+                        It0 const
+                    >::type
+                  , F
+                  , SeqSize-1
+                >::type
+            type;
+        };
+
+        template<int SeqSize, typename StateRef, typename It0, typename F>
+        struct BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME,_impl)
+        {
+            typedef typename
+                BOOST_PP_CAT(
+                    result_of_first_unrolled,BOOST_FUSION_FOLD_NAME)<
+                    StateRef
+                  , BOOST_FUSION_FOLD_IMPL_FIRST_IT_META_TRANSFORM(It0)
+                  , F
+                  , SeqSize
+                >::type
+            type;
+
+            static type
+            call(StateRef state, It0 const& it0, F f)
+            {
+                return BOOST_PP_CAT(unrolled_,BOOST_FUSION_FOLD_NAME)<
+                    type
+                  , SeqSize
+                >::call(state,BOOST_FUSION_FOLD_IMPL_FIRST_IT_TRANSFORM(it0),f);
+            }
+        };
+
+        template<typename StateRef, typename It0, typename F>
+        struct BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME,_impl)<0,StateRef,It0,F>
+        {
+            typedef StateRef type;
+
+            static StateRef
+            call(StateRef state, It0 const&, F)
+            {
+                return static_cast<StateRef>(state);
+            }
+        };
+    }
+
+    namespace result_of
+    {
+        template<typename Seq, typename State, typename F>
+        struct BOOST_FUSION_FOLD_NAME
+          : detail::BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME,_impl)<
+                size<Seq>::value
+              , typename add_reference<
+                    typename add_const<State>::type
+                >::type
+              , typename BOOST_FUSION_FOLD_IMPL_FIRST_IT_FUNCTION<Seq>::type
+              , F
+            >
+        {};
+    }
+
+    template<typename Seq, typename State, typename F>
+    inline typename result_of::BOOST_FUSION_FOLD_NAME<
+        Seq
+      , State const
+      , F
+    >::type
+    BOOST_FUSION_FOLD_NAME(Seq& seq,State const& state,F f)
+    {
+        return result_of::BOOST_FUSION_FOLD_NAME<Seq,State const,F>::call(
+            state,
+            fusion::BOOST_FUSION_FOLD_IMPL_FIRST_IT_FUNCTION(seq),
+            f);
+    }
+
+    template<typename Seq, typename State, typename F>
+    inline typename result_of::BOOST_FUSION_FOLD_NAME<
+        Seq const
+      , State const
+      , F
+    >::type
+    BOOST_FUSION_FOLD_NAME(Seq const& seq,State const& state,F f)
+    {
+        return result_of::BOOST_FUSION_FOLD_NAME<Seq const,State const,F>::call(
+            state,
+            fusion::BOOST_FUSION_FOLD_IMPL_FIRST_IT_FUNCTION(seq),
+            f);
+    }
+}}
+
+#undef BOOST_FUSION_FOLD_NAME
+#undef BOOST_FUSION_FOLD_IMPL_FIRST_IT_FUNCTION
+#undef BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION
+#undef BOOST_FUSION_FOLD_IMPL_FIRST_IT_META_TRANSFORM
+#undef BOOST_FUSION_FOLD_IMPL_FIRST_IT_TRANSFORM
+#undef BOOST_FUSION_FOLD_IMPL_INVOKE_IT_META_TRANSFORM
+#undef BOOST_FUSION_FOLD_IMPL_INVOKE_IT_TRANSFORM
diff --git a/3rdParty/Boost/src/boost/fusion/algorithm/iteration/detail/for_each.hpp b/3rdParty/Boost/src/boost/fusion/algorithm/iteration/detail/for_each.hpp
new file mode 100644
index 0000000..a23517c
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/algorithm/iteration/detail/for_each.hpp
@@ -0,0 +1,130 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_FOR_EACH_05052005_1028)
+#define FUSION_FOR_EACH_05052005_1028
+
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/fusion/iterator/equal_to.hpp>
+#include <boost/fusion/iterator/next.hpp>
+#include <boost/fusion/iterator/deref.hpp>
+#include <boost/fusion/iterator/distance.hpp>
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace fusion {
+namespace detail
+{
+    template <typename First, typename Last, typename F>
+    inline void
+    for_each_linear(First const&, Last const&, F const&, mpl::true_)
+    {
+    }
+        
+    template <typename First, typename Last, typename F>
+    inline void
+    for_each_linear(First const& first, Last const& last, F const& f, mpl::false_)
+    {
+        f(*first);
+        detail::for_each_linear(fusion::next(first), last, f, 
+                                result_of::equal_to<typename result_of::next<First>::type, Last>());
+    }
+
+
+    template <typename Sequence, typename F, typename Tag>
+    inline void
+    for_each(Sequence& seq, F const& f, Tag)
+    {
+        detail::for_each_linear(
+                                fusion::begin(seq)
+                                , fusion::end(seq)
+                                , f
+                                , result_of::equal_to<
+                                typename result_of::begin<Sequence>::type
+                                , typename result_of::end<Sequence>::type>());
+    }
+
+    template<int N>
+    struct for_each_unrolled
+    {
+        template<typename I0, typename F>
+        static void call(I0 const& i0, F const& f)
+        {
+            f(*i0);
+            typedef typename result_of::next<I0>::type I1;
+            I1 i1(fusion::next(i0));
+            f(*i1);
+            typedef typename result_of::next<I1>::type I2;
+            I2 i2(fusion::next(i1));
+            f(*i2);
+            typedef typename result_of::next<I2>::type I3;
+            I3 i3(fusion::next(i2));
+            f(*i3);
+            for_each_unrolled<N-4>::call(fusion::next(i3), f);
+        }
+    };
+
+    template<>
+    struct for_each_unrolled<3>
+    {
+        template<typename I0, typename F>
+        static void call(I0 const& i0, F const& f)
+        {
+            f(*i0);
+            typedef typename result_of::next<I0>::type I1;
+            I1 i1(fusion::next(i0));
+            f(*i1);
+            typedef typename result_of::next<I1>::type I2;
+            I2 i2(fusion::next(i1));
+            f(*i2);
+        }
+    };
+
+    template<>
+    struct for_each_unrolled<2>
+    {
+        template<typename I0, typename F>
+        static void call(I0 const& i0, F const& f)
+        {
+            f(*i0);
+            typedef typename result_of::next<I0>::type I1;
+            I1 i1(fusion::next(i0));
+            f(*i1);
+        }
+    };
+
+    template<>
+    struct for_each_unrolled<1>
+    {
+        template<typename I0, typename F>
+        static void call(I0 const& i0, F const& f)
+        {
+            f(*i0);
+        }
+    };
+
+    template<>
+    struct for_each_unrolled<0>
+    {
+        template<typename It, typename F>
+        static void call(It const&, F const&)
+        {
+        }
+    };
+
+    template <typename Sequence, typename F>
+    inline void
+    for_each(Sequence& seq, F const& f, random_access_traversal_tag)
+    {
+        typedef typename result_of::begin<Sequence>::type begin;
+        typedef typename result_of::end<Sequence>::type end;
+        for_each_unrolled<result_of::distance<begin, end>::type::value>::call(fusion::begin(seq), f);
+    }
+}}}
+
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/algorithm/iteration/fold.hpp b/3rdParty/Boost/src/boost/fusion/algorithm/iteration/fold.hpp
new file mode 100644
index 0000000..347fb4f
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/algorithm/iteration/fold.hpp
@@ -0,0 +1,15 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+    Copyright (c) 2007 Dan Marsden
+    Copyright (c) 2009-2010 Christopher Schmidt
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ALGORITHM_ITERATION_FOLD_HPP
+#define BOOST_FUSION_ALGORITHM_ITERATION_FOLD_HPP
+
+#include <boost/fusion/algorithm/iteration/detail/fold.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/algorithm/iteration/for_each.hpp b/3rdParty/Boost/src/boost/fusion/algorithm/iteration/for_each.hpp
new file mode 100644
index 0000000..fffb0f0
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/algorithm/iteration/for_each.hpp
@@ -0,0 +1,43 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+    Copyright (c) 2007 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_FUSION_FOR_EACH_20070527_0943)
+#define BOOST_FUSION_FOR_EACH_20070527_0943
+
+#include <boost/fusion/algorithm/iteration/detail/for_each.hpp>
+
+#include <boost/fusion/support/category_of.hpp>
+
+namespace boost { namespace fusion {
+
+    namespace result_of
+    {
+        template <typename Sequence, typename F>
+        struct for_each
+        {
+            typedef void type;
+        };
+    }
+
+    struct random_access_traversal_tag;
+
+    template <typename Sequence, typename F>
+    inline void
+    for_each(Sequence& seq, F const& f)
+    {
+        detail::for_each(seq, f, typename traits::category_of<Sequence>::type());
+    }
+
+    template <typename Sequence, typename F>
+    inline void
+    for_each(Sequence const& seq, F const& f)
+    {
+        detail::for_each(seq, f, typename traits::category_of<Sequence>::type());
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/algorithm/query/any.hpp b/3rdParty/Boost/src/boost/fusion/algorithm/query/any.hpp
new file mode 100644
index 0000000..be4ef09
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/algorithm/query/any.hpp
@@ -0,0 +1,35 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2005 Eric Niebler
+    Copyright (c) 2007 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_ANY_05052005_1230)
+#define FUSION_ANY_05052005_1230
+
+#include <boost/fusion/support/category_of.hpp>
+#include <boost/fusion/algorithm/query/detail/any.hpp>
+
+namespace boost { namespace fusion
+{
+    namespace result_of
+    {
+        template <typename Sequence, typename F>
+        struct any
+        {
+            typedef bool type;
+        };
+    }
+
+    template <typename Sequence, typename F>
+    inline bool
+    any(Sequence const& seq, F f)
+    {
+        return detail::any(seq, f, typename traits::category_of<Sequence>::type());
+    }
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/algorithm/query/detail/any.hpp b/3rdParty/Boost/src/boost/fusion/algorithm/query/detail/any.hpp
new file mode 100644
index 0000000..31bbaa5
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/algorithm/query/detail/any.hpp
@@ -0,0 +1,130 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2005 Eric Niebler
+    Copyright (c) 2007 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_ANY_05052005_1229)
+#define FUSION_ANY_05052005_1229
+
+#include <boost/mpl/bool.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/fusion/iterator/advance.hpp>
+#include <boost/fusion/iterator/equal_to.hpp>
+#include <boost/fusion/iterator/next.hpp>
+#include <boost/fusion/iterator/deref.hpp>
+#include <boost/fusion/iterator/distance.hpp>
+
+namespace boost { namespace fusion { 
+    struct random_access_traversal_tag;
+namespace detail
+{
+    template <typename First, typename Last, typename F>
+    inline bool
+    linear_any(First const&, Last const&, F const&, mpl::true_)
+    {
+        return false;
+    }
+
+    template <typename First, typename Last, typename F>
+    inline bool
+    linear_any(First const& first, Last const& last, F& f, mpl::false_)
+    {
+        typename result_of::deref<First>::type x = *first;
+        return f(x) || 
+            detail::linear_any(
+                fusion::next(first)
+              , last
+              , f
+              , result_of::equal_to<typename result_of::next<First>::type, Last>());
+    }
+
+    template <typename Sequence, typename F, typename Tag>
+    inline bool
+    any(Sequence const& seq, F f, Tag)
+    {
+        return detail::linear_any(
+                fusion::begin(seq)
+              , fusion::end(seq)
+              , f
+              , result_of::equal_to<
+                    typename result_of::begin<Sequence>::type
+                  , typename result_of::end<Sequence>::type>());
+    }
+
+    template<int N>
+    struct unrolled_any
+    {
+        template <typename It, typename F>
+        static bool call(It const& it, F f)
+        {
+            return 
+                f(*it) || 
+                f(*fusion::advance_c<1>(it))||
+                f(*fusion::advance_c<2>(it)) ||
+                f(*fusion::advance_c<3>(it)) ||
+                detail::unrolled_any<N-4>::call(fusion::advance_c<4>(it), f);
+        }
+    };
+
+    template<>
+    struct unrolled_any<3>
+    {
+        template <typename It, typename F>
+        static bool call(It const& it, F f)
+        {
+            return 
+                f(*it) || 
+                f(*fusion::advance_c<1>(it)) ||
+                f(*fusion::advance_c<2>(it));
+        }
+    };
+
+    template<>
+    struct unrolled_any<2>
+    {
+        template <typename It, typename F>
+        static bool call(It const& it, F f)
+        {
+            return 
+                f(*it) || 
+                f(*fusion::advance_c<1>(it));
+        }
+    };
+
+    template<>
+    struct unrolled_any<1>
+    {
+        template <typename It, typename F>
+        static bool call(It const& it, F f)
+        {
+            return f(*it);
+        }
+    };
+
+    template<>
+    struct unrolled_any<0>
+    {
+        template <typename It, typename F>
+        static bool call(It const& it, F f)
+        {
+            return false;
+        }
+    };
+
+    template <typename Sequence, typename F>
+    inline bool
+    any(Sequence const& seq, F f, random_access_traversal_tag)
+    {
+        typedef typename result_of::begin<Sequence>::type begin;
+        typedef typename result_of::end<Sequence>::type end;
+        return detail::unrolled_any<result_of::distance<begin, end>::type::value>::call(
+            fusion::begin(seq), f);
+    }
+}}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/algorithm/query/detail/find_if.hpp b/3rdParty/Boost/src/boost/fusion/algorithm/query/detail/find_if.hpp
new file mode 100644
index 0000000..5d2a741
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/algorithm/query/detail/find_if.hpp
@@ -0,0 +1,232 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2007 Dan Marsden
+    Copyright (c) 2009 Christopher Schmidt
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_FIND_IF_05052005_1107)
+#define FUSION_FIND_IF_05052005_1107
+
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/lambda.hpp>
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/fusion/iterator/equal_to.hpp>
+#include <boost/fusion/iterator/next.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/iterator/advance.hpp>
+#include <boost/fusion/iterator/distance.hpp>
+#include <boost/fusion/support/category_of.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+
+namespace boost { namespace fusion { 
+    struct random_access_traversal_tag;
+namespace detail
+{
+    template <typename Iterator, typename Pred>
+    struct apply_filter
+    {
+        typedef typename mpl::apply1<
+            Pred, Iterator>::type type;
+        BOOST_STATIC_CONSTANT(int, value = type::value);
+    };
+
+    template <typename First, typename Last, typename Pred>
+    struct main_find_if;
+
+    template <typename First, typename Last, typename Pred>
+    struct recursive_find_if
+    {
+        typedef typename
+            main_find_if<
+                typename result_of::next<First>::type, Last, Pred
+            >::type
+        type;
+    };
+
+    template <typename First, typename Last, typename Pred>
+    struct main_find_if
+    {
+        typedef mpl::or_<
+            result_of::equal_to<First, Last>
+          , apply_filter<First, Pred> >
+        filter;
+
+        typedef typename
+            mpl::eval_if<
+                filter
+              , mpl::identity<First>
+              , recursive_find_if<First, Last, Pred>
+            >::type
+        type;
+    };
+
+    template<
+        typename First, typename Last, 
+        typename Pred, bool>
+    struct choose_find_if;
+
+    template<typename First, typename Last, typename Pred>
+    struct choose_find_if<First, Last, Pred, false>
+        : main_find_if<First, Last, Pred>
+    {};
+
+    template<typename Iter, typename Pred, int n, int unrolling>
+    struct unroll_again;
+
+    template <typename Iter, typename Pred, int offset>
+    struct apply_offset_filter
+    {
+        typedef typename result_of::advance_c<Iter, offset>::type Shifted;
+        typedef typename
+            mpl::apply1<
+                Pred
+              , Shifted
+            >::type
+        type;
+        BOOST_STATIC_CONSTANT(int, value = type::value);
+    };
+
+    template<typename Iter, typename Pred, int n>
+    struct unrolled_find_if
+    {
+        typedef typename mpl::eval_if<
+            apply_filter<Iter, Pred>,
+            mpl::identity<Iter>,
+            mpl::eval_if<
+              apply_offset_filter<Iter, Pred, 1>,
+              result_of::advance_c<Iter, 1>,
+              mpl::eval_if<
+                apply_offset_filter<Iter, Pred, 2>,
+                result_of::advance_c<Iter, 2>,
+                mpl::eval_if<
+                  apply_offset_filter<Iter, Pred, 3>,
+                  result_of::advance_c<Iter, 3>,
+                  unroll_again<
+                    Iter,
+                    Pred,
+                    n,
+                    4> > > > >::type type;
+    };
+
+    template<typename Iter, typename Pred>
+    struct unrolled_find_if<Iter, Pred, 3>
+    {
+        typedef typename mpl::eval_if<
+            apply_filter<Iter, Pred>,
+            mpl::identity<Iter>,
+            mpl::eval_if<
+              apply_offset_filter<Iter, Pred, 1>,
+              result_of::advance_c<Iter, 1>,
+              mpl::eval_if<
+                apply_offset_filter<Iter, Pred, 2>,
+                result_of::advance_c<Iter, 2>,
+                result_of::advance_c<Iter, 3> > > >::type type;
+    };
+
+    template<typename Iter, typename Pred>
+    struct unrolled_find_if<Iter, Pred, 2>
+    {
+        typedef typename mpl::eval_if<
+            apply_filter<Iter, Pred>,
+            mpl::identity<Iter>,
+            mpl::eval_if<
+              apply_offset_filter<Iter, Pred, 1>,
+              result_of::advance_c<Iter, 1>,
+              result_of::advance_c<Iter, 2> > >::type type;
+    };
+
+    template<typename Iter, typename Pred>
+    struct unrolled_find_if<Iter, Pred, 1>
+    {
+        typedef typename mpl::eval_if<
+            apply_filter<Iter, Pred>,
+            mpl::identity<Iter>,
+            result_of::advance_c<Iter, 1> >::type type;
+    };
+
+    template<typename Iter, typename Pred, int n, int unrolling>
+    struct unroll_again
+    {
+        typedef typename unrolled_find_if<
+            typename result_of::advance_c<Iter, unrolling>::type,
+            Pred,
+            n-unrolling>::type type;
+    };
+
+    template<typename Iter, typename Pred>
+    struct unrolled_find_if<Iter, Pred, 0>
+    {
+        typedef Iter type;
+    };
+
+    template<typename First, typename Last, typename Pred>
+    struct choose_find_if<First, Last, Pred, true>
+    {
+        typedef typename result_of::distance<First, Last>::type N;
+        typedef typename unrolled_find_if<First, Pred, N::value>::type type;
+    };
+
+    template <typename First, typename Last, typename Pred>
+    struct static_find_if
+    {
+        typedef typename
+            choose_find_if<
+                First
+              , Last
+              , typename mpl::lambda<Pred>::type
+              , is_base_of<random_access_traversal_tag, typename traits::category_of<First>::type>::value
+            >::type
+        type;
+
+        template <typename Iterator>
+        static type
+        recursive_call(Iterator const& iter, mpl::true_)
+        {
+            return iter;
+        }
+
+        template <typename Iterator>
+        static type
+        recursive_call(Iterator const& iter, mpl::false_)
+        {
+            return recursive_call(fusion::next(iter));
+        }
+
+        template <typename Iterator>
+        static type
+        recursive_call(Iterator const& iter)
+        {
+            typedef result_of::equal_to<Iterator, type> found;
+            return recursive_call(iter, found());
+        }
+
+        template <typename Iterator, typename Tag>
+        static type
+        choose_call(Iterator const& iter, Tag)
+        {
+            return recursive_call(iter);
+        }
+
+        template <typename Iterator>
+        static type
+        choose_call(Iterator const& iter, random_access_traversal_tag)
+        {
+            typedef typename result_of::distance<Iterator, type>::type N;
+            return fusion::advance<N>(iter);
+        }
+
+        template <typename Iterator>
+        static type
+        call(Iterator const& iter)
+        {
+            return choose_call(iter, typename traits::category_of<Iterator>::type());
+        }
+    };
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/algorithm/query/find.hpp b/3rdParty/Boost/src/boost/fusion/algorithm/query/find.hpp
new file mode 100644
index 0000000..6beb900
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/algorithm/query/find.hpp
@@ -0,0 +1,72 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_FIND_05052005_1107)
+#define FUSION_FIND_05052005_1107
+
+#include <boost/fusion/algorithm/query/detail/find_if.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/fusion/iterator/key_of.hpp>
+#include <boost/fusion/iterator/value_of.hpp>
+#include <boost/fusion/support/category_of.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/utility/enable_if.hpp>
+
+namespace boost { namespace fusion
+{
+    namespace result_of
+    {
+        template <
+            typename Sequence
+          , typename T
+        >
+        struct find
+        {
+            typedef
+                detail::static_find_if<
+                    typename result_of::begin<Sequence>::type
+                  , typename result_of::end<Sequence>::type
+                  , is_same<
+                        typename mpl::if_<
+                            traits::is_associative<Sequence>
+                          , key_of<mpl::_1>
+                          , value_of<mpl::_1>
+                        >::type
+                      , T
+                    >
+                >
+            filter;
+
+            typedef typename filter::type type;
+        };
+    }
+
+    template <typename T, typename Sequence>
+    inline typename 
+        lazy_disable_if<
+            is_const<Sequence>
+          , result_of::find<Sequence, T>
+        >::type const
+    find(Sequence& seq)
+    {
+        typedef typename result_of::find<Sequence, T>::filter filter;
+        return filter::call(fusion::begin(seq));
+    }
+
+    template <typename T, typename Sequence>
+    inline typename result_of::find<Sequence const, T>::type const
+    find(Sequence const& seq)
+    {
+        typedef typename result_of::find<Sequence const, T>::filter filter;
+        return filter::call(fusion::begin(seq));
+    }
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/algorithm/transformation/erase.hpp b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/erase.hpp
new file mode 100644
index 0000000..d0405c3
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/erase.hpp
@@ -0,0 +1,108 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_ERASE_07232005_0534)
+#define FUSION_ERASE_07232005_0534
+
+#include <boost/fusion/iterator/equal_to.hpp>
+#include <boost/fusion/iterator/mpl/convert_iterator.hpp>
+#include <boost/fusion/container/vector/vector10.hpp>
+#include <boost/fusion/view/joint_view/joint_view.hpp>
+#include <boost/fusion/view/iterator_range/iterator_range.hpp>
+#include <boost/fusion/support/detail/as_fusion_element.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/fusion/adapted/mpl/mpl_iterator.hpp>
+
+namespace boost { namespace fusion
+{
+    namespace result_of
+    {
+        template <typename Sequence, typename First>
+        struct compute_erase_last // put this in detail!!!
+        {
+            typedef typename result_of::end<Sequence>::type seq_last_type;
+            typedef typename convert_iterator<First>::type first_type;
+            typedef typename
+                mpl::if_<
+                    result_of::equal_to<first_type, seq_last_type>
+                  , first_type
+                  , typename result_of::next<first_type>::type
+                >::type
+            type;
+
+            static type
+            call(First const& first, mpl::false_)
+            {
+                return fusion::next(convert_iterator<First>::call(first));
+            }
+
+            static type
+            call(First const& first, mpl::true_)
+            {
+                return convert_iterator<First>::call(first);
+            }
+
+            static type
+            call(First const& first)
+            {
+                return call(first, result_of::equal_to<first_type, seq_last_type>());
+            }
+        };
+
+        template <
+            typename Sequence
+          , typename First
+          , typename Last = typename compute_erase_last<Sequence, First>::type>
+        struct erase
+        {
+            typedef typename result_of::begin<Sequence>::type seq_first_type;
+            typedef typename result_of::end<Sequence>::type seq_last_type;
+            BOOST_STATIC_ASSERT((!result_of::equal_to<seq_first_type, seq_last_type>::value));
+
+            typedef typename convert_iterator<First>::type first_type;
+            typedef typename convert_iterator<Last>::type last_type;
+            typedef iterator_range<seq_first_type, first_type> left_type;
+            typedef iterator_range<last_type, seq_last_type> right_type;
+            typedef joint_view<left_type, right_type> type;
+        };
+    }
+
+    template <typename Sequence, typename First>
+    typename result_of::erase<Sequence const, First>::type
+    erase(Sequence const& seq, First const& first)
+    {
+        typedef result_of::erase<Sequence const, First> result_of;
+        typedef typename result_of::left_type left_type;
+        typedef typename result_of::right_type right_type;
+        typedef typename result_of::type result_type;
+
+        left_type left(
+            fusion::begin(seq)
+          , convert_iterator<First>::call(first));
+        right_type right(
+            fusion::result_of::compute_erase_last<Sequence const, First>::call(first)
+          , fusion::end(seq));
+        return result_type(left, right);
+    }
+
+    template <typename Sequence, typename First, typename Last>
+    typename result_of::erase<Sequence const, First, Last>::type
+    erase(Sequence const& seq, First const& first, Last const& last)
+    {
+        typedef result_of::erase<Sequence const, First, Last> result_of;
+        typedef typename result_of::left_type left_type;
+        typedef typename result_of::right_type right_type;
+        typedef typename result_of::type result_type;
+
+        left_type left(fusion::begin(seq), first);
+        right_type right(last, fusion::end(seq));
+        return result_type(left, right);
+    }
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/algorithm/transformation/erase_key.hpp b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/erase_key.hpp
new file mode 100644
index 0000000..0312869
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/erase_key.hpp
@@ -0,0 +1,34 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_ERASE_KEY_10022005_1851)
+#define FUSION_ERASE_KEY_10022005_1851
+
+#include <boost/fusion/algorithm/query/find.hpp>
+#include <boost/fusion/algorithm/transformation/erase.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace fusion
+{
+    namespace result_of
+    {
+        template <typename Sequence, typename Key>
+        struct erase_key
+          : erase<Sequence, typename find<Sequence, Key>::type>
+        {};
+    }
+
+    template <typename Key, typename Sequence>
+    inline typename result_of::erase_key<Sequence const, Key>::type
+    erase_key(Sequence const& seq)
+    {
+        return erase(seq, find<Key>(seq));
+    }
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/algorithm/transformation/filter_if.hpp b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/filter_if.hpp
new file mode 100644
index 0000000..d13113b
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/filter_if.hpp
@@ -0,0 +1,32 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_FILTER_IF_07172005_0818)
+#define FUSION_FILTER_IF_07172005_0818
+
+#include <boost/fusion/view/filter_view/filter_view.hpp>
+
+namespace boost { namespace fusion
+{
+    namespace result_of
+    {
+        template <typename Sequence, typename Pred>
+        struct filter_if
+        {
+            typedef filter_view<Sequence, Pred> type;
+        };
+    }
+    
+    template <typename Pred, typename Sequence>
+    inline typename result_of::filter_if<Sequence const, Pred>::type
+    filter_if(Sequence const& seq)
+    {
+        return filter_view<Sequence const, Pred>(seq);
+    }
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/algorithm/transformation/insert.hpp b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/insert.hpp
new file mode 100644
index 0000000..1702bc1
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/insert.hpp
@@ -0,0 +1,63 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_INSERT_07222005_0730)
+#define FUSION_INSERT_07222005_0730
+
+#include <boost/fusion/support/detail/as_fusion_element.hpp>
+#include <boost/fusion/iterator/mpl/convert_iterator.hpp>
+#include <boost/fusion/container/vector/vector10.hpp>
+#include <boost/fusion/view/joint_view/joint_view.hpp>
+#include <boost/fusion/view/single_view/single_view.hpp>
+#include <boost/fusion/view/iterator_range/iterator_range.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/fusion/adapted/mpl/mpl_iterator.hpp>
+
+namespace boost { namespace fusion
+{
+    namespace result_of
+    {
+        template <typename Sequence, typename Position, typename T>
+        struct insert
+        {
+            typedef typename detail::as_fusion_element<T>::type element_type;
+            typedef typename convert_iterator<Position>::type pos_type;
+            typedef typename result_of::begin<Sequence>::type first_type;
+            typedef typename result_of::end<Sequence>::type last_type;
+
+            typedef iterator_range<first_type, pos_type> left_type;
+            typedef iterator_range<pos_type, last_type> right_type;
+            typedef fusion::single_view<element_type> single_view;
+            typedef joint_view<left_type, single_view const> left_insert_type;
+            typedef joint_view<left_insert_type, right_type> type;
+        };
+    }
+
+    template <typename Sequence, typename Position, typename T>
+    inline typename result_of::insert<
+        Sequence const, Position, T>::type
+    insert(Sequence const& seq, Position const& pos, T const& x)
+    {
+        typedef result_of::insert<
+            Sequence const, Position, T>
+        result_of;
+        typedef typename result_of::left_type left_type;
+        typedef typename result_of::right_type right_type;
+        typedef typename result_of::single_view single_view;
+        typedef typename result_of::left_insert_type left_insert_type;
+        typedef typename result_of::type result;
+
+        left_type left(fusion::begin(seq), convert_iterator<Position>::call(pos));
+        right_type right(convert_iterator<Position>::call(pos), fusion::end(seq));
+        single_view insert(x);
+        left_insert_type left_insert(left, insert);
+        return result(left_insert, right);
+    }
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/algorithm/transformation/insert_range.hpp b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/insert_range.hpp
new file mode 100644
index 0000000..1915c41
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/insert_range.hpp
@@ -0,0 +1,55 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_INSERT_RANGE_009172005_1147)
+#define FUSION_INSERT_RANGE_009172005_1147
+
+#include <boost/fusion/iterator/mpl/convert_iterator.hpp>
+#include <boost/fusion/container/vector/vector10.hpp>
+#include <boost/fusion/view/joint_view/joint_view.hpp>
+#include <boost/fusion/view/iterator_range/iterator_range.hpp>
+#include <boost/fusion/support/detail/as_fusion_element.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/fusion/adapted/mpl/mpl_iterator.hpp>
+
+namespace boost { namespace fusion
+{
+    namespace result_of
+    {
+        template <typename Sequence, typename Position, typename Range>
+        struct insert_range
+        {
+            typedef typename convert_iterator<Position>::type pos_type;
+            typedef typename result_of::begin<Sequence>::type first_type;
+            typedef typename result_of::end<Sequence>::type last_type;
+
+            typedef iterator_range<first_type, pos_type> left_type;
+            typedef iterator_range<pos_type, last_type> right_type;
+            typedef joint_view<left_type, Range> left_insert_type;
+            typedef joint_view<left_insert_type, right_type> type;
+        };
+    }
+
+    template <typename Sequence, typename Position, typename Range>
+    inline typename result_of::insert_range<Sequence const, Position, Range const>::type
+    insert_range(Sequence const& seq, Position const& pos, Range const& range)
+    {
+        typedef result_of::insert_range<Sequence const, Position, Range const> result_of;
+        typedef typename result_of::left_type left_type;
+        typedef typename result_of::right_type right_type;
+        typedef typename result_of::left_insert_type left_insert_type;
+        typedef typename result_of::type result;
+
+        left_type left(fusion::begin(seq), convert_iterator<Position>::call(pos));
+        right_type right(convert_iterator<Position>::call(pos), fusion::end(seq));
+        left_insert_type left_insert(left, range);
+        return result(left_insert, right);
+    }
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/algorithm/transformation/pop_back.hpp b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/pop_back.hpp
new file mode 100644
index 0000000..6eb743f
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/pop_back.hpp
@@ -0,0 +1,43 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_POP_BACK_09172005_1038)
+#define FUSION_POP_BACK_09172005_1038
+
+#include <boost/fusion/view/iterator_range/iterator_range.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/fusion/iterator/prior.hpp>
+
+namespace boost { namespace fusion
+{
+    namespace result_of
+    {
+        template <typename Sequence>
+        struct pop_back
+        {
+            typedef 
+                iterator_range<
+                    typename begin<Sequence>::type
+                  , typename prior<
+                        typename end<Sequence>::type
+                    >::type
+                > 
+            type;
+        };
+    }
+
+    template <typename Sequence>
+    inline typename result_of::pop_back<Sequence const>::type
+    pop_back(Sequence const& seq)
+    {
+        typedef typename result_of::pop_back<Sequence const>::type result;
+        return result(fusion::begin(seq), fusion::prior(fusion::end(seq)));
+    }
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/algorithm/transformation/pop_front.hpp b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/pop_front.hpp
new file mode 100644
index 0000000..aed524d
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/pop_front.hpp
@@ -0,0 +1,43 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_POP_FRONT_09172005_1115)
+#define FUSION_POP_FRONT_09172005_1115
+
+#include <boost/fusion/view/iterator_range/iterator_range.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/fusion/iterator/next.hpp>
+
+namespace boost { namespace fusion
+{
+    namespace result_of
+    {
+        template <typename Sequence>
+        struct pop_front
+        {
+            typedef 
+                iterator_range<
+                    typename next<
+                        typename begin<Sequence>::type
+                    >::type
+                  , typename end<Sequence>::type
+                > 
+            type;
+        };
+    }
+
+    template <typename Sequence>
+    inline typename result_of::pop_front<Sequence const>::type
+    pop_front(Sequence const& seq)
+    {
+        typedef typename result_of::pop_front<Sequence const>::type result;
+        return result(fusion::next(fusion::begin(seq)), fusion::end(seq));
+    }
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/algorithm/transformation/push_back.hpp b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/push_back.hpp
new file mode 100644
index 0000000..4fadc79
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/push_back.hpp
@@ -0,0 +1,39 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_PUSH_BACK_07162005_0235)
+#define FUSION_PUSH_BACK_07162005_0235
+
+#include <boost/fusion/support/detail/as_fusion_element.hpp>
+#include <boost/fusion/view/joint_view/joint_view.hpp>
+#include <boost/fusion/view/single_view/single_view.hpp>
+
+namespace boost { namespace fusion
+{
+    namespace result_of
+    {
+        template <typename Sequence, typename T>
+        struct push_back
+        {
+            typedef fusion::single_view<typename detail::as_fusion_element<T>::type> single_view;
+            typedef joint_view<Sequence, single_view const> type;
+        };
+    }
+
+    template <typename Sequence, typename T>
+    inline typename result_of::push_back<Sequence const, T>::type
+    push_back(Sequence const& seq, T const& x)
+    {
+        typedef typename result_of::push_back<Sequence const, T> push_back;
+        typedef typename push_back::single_view single_view; 
+        typedef typename push_back::type result; 
+        single_view x_(x);
+        return result(seq, x_);
+    }
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/algorithm/transformation/push_front.hpp b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/push_front.hpp
new file mode 100644
index 0000000..10f9fc1
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/push_front.hpp
@@ -0,0 +1,39 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_PUSH_FRONT_07162005_0749)
+#define FUSION_PUSH_FRONT_07162005_0749
+
+#include <boost/fusion/support/detail/as_fusion_element.hpp>
+#include <boost/fusion/view/joint_view/joint_view.hpp>
+#include <boost/fusion/view/single_view/single_view.hpp>
+
+namespace boost { namespace fusion
+{
+    namespace result_of
+    {
+        template <typename Sequence, typename T>
+        struct push_front
+        {
+            typedef fusion::single_view<typename detail::as_fusion_element<T>::type> single_view;
+            typedef joint_view<single_view const, Sequence> type;
+        };
+    }
+
+    template <typename Sequence, typename T>
+    inline typename result_of::push_front<Sequence const, T>::type
+    push_front(Sequence const& seq, T const& x)
+    {
+        typedef typename result_of::push_front<Sequence const, T> push_front;
+        typedef typename push_front::single_view single_view; 
+        typedef typename push_front::type result; 
+        single_view x_(x);
+        return result(x_, seq);
+    }
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/algorithm/transformation/reverse.hpp b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/reverse.hpp
new file mode 100644
index 0000000..b95461c
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/reverse.hpp
@@ -0,0 +1,32 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_REVERSE_07212005_1230)
+#define FUSION_REVERSE_07212005_1230
+
+#include <boost/fusion/view/reverse_view/reverse_view.hpp>
+
+namespace boost { namespace fusion
+{
+    namespace result_of
+    {
+        template <typename Sequence>
+        struct reverse
+        {
+            typedef reverse_view<Sequence> type;
+        };
+    }
+
+    template <typename Sequence>
+    inline reverse_view<Sequence const>
+    reverse(Sequence const& view)
+    {
+        return reverse_view<Sequence const>(view);
+    }
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/algorithm/transformation/transform.hpp b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/transform.hpp
new file mode 100644
index 0000000..681319b
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/algorithm/transformation/transform.hpp
@@ -0,0 +1,51 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_TRANSFORM_07052005_1057)
+#define FUSION_TRANSFORM_07052005_1057
+
+#include <boost/fusion/view/transform_view/transform_view.hpp>
+
+namespace boost { namespace fusion
+{
+    struct void_;
+
+    namespace result_of
+    {
+        template <typename Sequence1, typename Sequence2, typename F = void_>
+        struct transform
+        {
+            typedef transform_view<Sequence1, Sequence2, F> type;
+        };
+
+        template <typename Sequence, typename F>
+#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
+        struct transform<Sequence, F, void_>
+#else
+        struct transform<Sequence, F>
+#endif
+        {
+            typedef transform_view<Sequence, F> type;
+        };
+    }
+
+    template <typename Sequence, typename F>
+    inline typename result_of::transform<Sequence const, F>::type
+    transform(Sequence const& seq, F f)
+    {
+        return transform_view<Sequence const, F>(seq, f);
+    }
+
+    template <typename Sequence1, typename Sequence2, typename F>
+    inline typename result_of::transform<Sequence1 const, Sequence2 const, F>::type
+    transform(Sequence1 const& seq1, Sequence2 const& seq2, F f)
+    {
+        return transform_view<Sequence1 const, Sequence2 const, F>(seq1, seq2, f);
+    }
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/container/deque/deque_fwd.hpp b/3rdParty/Boost/src/boost/fusion/container/deque/deque_fwd.hpp
new file mode 100644
index 0000000..415bb2f
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/deque/deque_fwd.hpp
@@ -0,0 +1,24 @@
+/*=============================================================================
+    Copyright (c) 2005-2007 Joel de Guzman
+    Copyright (c) 2005-2007 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_DEQUE_FORWARD_02092007_0749)
+#define FUSION_DEQUE_FORWARD_02092007_0749
+
+#include <boost/fusion/container/deque/limits.hpp>
+#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
+
+namespace boost { namespace fusion
+{
+    struct void_;
+
+    template<
+        BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
+            FUSION_MAX_DEQUE_SIZE, typename T, void_)>
+    struct deque;
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/container/deque/limits.hpp b/3rdParty/Boost/src/boost/fusion/container/deque/limits.hpp
new file mode 100644
index 0000000..2262f17
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/deque/limits.hpp
@@ -0,0 +1,15 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2005-2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_FUSION_DEQUE_LIMITS_26112006_1737)
+#define BOOST_FUSION_DEQUE_LIMITS_26112006_1737
+
+#if !defined(FUSION_MAX_DEQUE_SIZE)
+#define FUSION_MAX_DEQUE_SIZE 10
+#endif
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/container/generation/make_cons.hpp b/3rdParty/Boost/src/boost/fusion/container/generation/make_cons.hpp
new file mode 100644
index 0000000..47a2f46
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/generation/make_cons.hpp
@@ -0,0 +1,43 @@
+/*=============================================================================
+    Copyright (c) 2005 Joel de Guzman
+    Copyright (c) 2005 Eric Niebler
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_MAKE_CONS_07172005_0918)
+#define FUSION_MAKE_CONS_07172005_0918
+
+#include <boost/fusion/support/detail/as_fusion_element.hpp>
+#include <boost/fusion/container/list/cons.hpp>
+
+namespace boost { namespace fusion
+{
+    struct nil;
+
+    namespace result_of
+    {
+        template <typename Car, typename Cdr = nil>
+        struct make_cons
+        {
+            typedef cons<typename detail::as_fusion_element<Car>::type, Cdr> type;
+        };
+    }
+
+    template <typename Car>
+    inline cons<typename detail::as_fusion_element<Car>::type>
+    make_cons(Car const& car)
+    {
+        return cons<typename detail::as_fusion_element<Car>::type>(car);
+    }
+
+    template <typename Car, typename Cdr>
+    inline cons<typename detail::as_fusion_element<Car>::type, Cdr>
+    make_cons(Car const& car, Cdr const& cdr)
+    {
+        return cons<typename detail::as_fusion_element<Car>::type, Cdr>(car, cdr);
+    }
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/container/generation/make_vector.hpp b/3rdParty/Boost/src/boost/fusion/container/generation/make_vector.hpp
new file mode 100644
index 0000000..868ad0c
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/generation/make_vector.hpp
@@ -0,0 +1,91 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef BOOST_PP_IS_ITERATING
+#if !defined(FUSION_MAKE_VECTOR_07162005_0243)
+#define FUSION_MAKE_VECTOR_07162005_0243
+
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/fusion/container/vector/vector.hpp>
+#include <boost/fusion/support/detail/as_fusion_element.hpp>
+
+namespace boost { namespace fusion
+{
+    struct void_;
+
+    namespace result_of
+    {
+        template <
+            BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
+                FUSION_MAX_VECTOR_SIZE, typename T, void_)
+          , typename Extra = void_
+        >
+        struct make_vector;
+
+        template <>
+        struct make_vector<>
+        {
+            typedef vector0<> type;
+        };
+    }
+
+    inline vector0<>
+    make_vector()
+    {
+        return vector0<>();
+    }
+
+#define BOOST_FUSION_AS_FUSION_ELEMENT(z, n, data)                               \
+    typename detail::as_fusion_element<BOOST_PP_CAT(T, n)>::type
+
+#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/make_vector.hpp>
+#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_VECTOR_SIZE)
+#include BOOST_PP_ITERATE()
+
+#undef BOOST_FUSION_AS_FUSION_ELEMENT
+
+}}
+
+#endif
+#else // defined(BOOST_PP_IS_ITERATING)
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Preprocessor vertical repetition code
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#define N BOOST_PP_ITERATION()
+
+    namespace result_of
+    {
+        template <BOOST_PP_ENUM_PARAMS(N, typename T)>
+#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
+        #define TEXT(z, n, text) , text
+        struct make_vector< BOOST_PP_ENUM_PARAMS(N, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_VECTOR_SIZE, TEXT, void_) >
+        #undef TEXT
+#else
+        struct make_vector<BOOST_PP_ENUM_PARAMS(N, T)>
+#endif
+        {
+            typedef BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)> type;
+        };
+    }
+
+    template <BOOST_PP_ENUM_PARAMS(N, typename T)>
+    inline BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)>
+    make_vector(BOOST_PP_ENUM_BINARY_PARAMS(N, T, const& _))
+    {
+        return BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)>(
+            BOOST_PP_ENUM_PARAMS(N, _));
+    }
+
+#undef N
+#endif // defined(BOOST_PP_IS_ITERATING)
+
diff --git a/3rdParty/Boost/src/boost/fusion/container/list/cons.hpp b/3rdParty/Boost/src/boost/fusion/container/list/cons.hpp
new file mode 100644
index 0000000..e274561
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/list/cons.hpp
@@ -0,0 +1,143 @@
+/*=============================================================================
+    Copyright (c) 2005 Joel de Guzman
+    Copyright (c) 2005 Eric Niebler
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_CONS_07172005_0843)
+#define FUSION_CONS_07172005_0843
+
+#include <boost/fusion/support/detail/access.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/fusion/iterator/next.hpp>
+#include <boost/fusion/iterator/deref.hpp>
+#include <boost/fusion/container/list/cons_iterator.hpp>
+#include <boost/fusion/container/list/detail/begin_impl.hpp>
+#include <boost/fusion/container/list/detail/end_impl.hpp>
+#include <boost/fusion/container/list/detail/at_impl.hpp>
+#include <boost/fusion/container/list/detail/value_at_impl.hpp>
+#include <boost/fusion/container/list/detail/empty_impl.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/fusion/support/sequence_base.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/or.hpp>
+
+namespace boost { namespace fusion
+{
+    struct void_;
+    struct cons_tag;
+    struct forward_traversal_tag;
+    struct fusion_sequence_tag;
+
+    struct nil : sequence_base<nil>
+    {
+        typedef mpl::int_<0> size;
+        typedef cons_tag fusion_tag;
+        typedef fusion_sequence_tag tag; // this gets picked up by MPL
+        typedef mpl::false_ is_view;
+        typedef forward_traversal_tag category;
+        typedef void_ car_type;
+        typedef void_ cdr_type;
+
+        nil() {}
+
+        template <typename Iterator>
+        nil(Iterator const& /*iter*/, mpl::true_ /*this_is_an_iterator*/)
+        {}
+
+        template <typename Iterator>
+        void assign_from_iter(Iterator const& /*iter*/)
+        {
+        }
+    };
+
+    template <typename Car, typename Cdr = nil>
+    struct cons : sequence_base<cons<Car, Cdr> >
+    {
+        typedef mpl::int_<Cdr::size::value+1> size;
+        typedef cons_tag fusion_tag;
+        typedef fusion_sequence_tag tag; // this gets picked up by MPL
+        typedef mpl::false_ is_view;
+        typedef forward_traversal_tag category;
+        typedef Car car_type;
+        typedef Cdr cdr_type;
+
+        cons()
+            : car(), cdr() {}
+
+        explicit cons(typename detail::call_param<Car>::type in_car)
+            : car(in_car), cdr() {}
+
+        cons(
+            typename detail::call_param<Car>::type in_car
+          , typename detail::call_param<Cdr>::type in_cdr)
+            : car(in_car), cdr(in_cdr) {}
+        
+        template <typename Car2, typename Cdr2>
+        cons(cons<Car2, Cdr2> const& rhs)
+            : car(rhs.car), cdr(rhs.cdr) {}
+
+        cons(cons const& rhs)
+            : car(rhs.car), cdr(rhs.cdr) {}
+
+        template <typename Sequence>
+        cons(
+            Sequence const& seq
+          , typename disable_if<
+                mpl::or_<
+                    is_convertible<Sequence, cons> // use copy ctor instead
+                  , is_convertible<Sequence, Car>  // use copy to car instead
+                > 
+            >::type* /*dummy*/ = 0
+        )
+            : car(*fusion::begin(seq))
+            , cdr(fusion::next(fusion::begin(seq)), mpl::true_()) {}
+
+        template <typename Iterator>
+        cons(Iterator const& iter, mpl::true_ /*this_is_an_iterator*/)
+            : car(*iter)
+            , cdr(fusion::next(iter), mpl::true_()) {}
+
+        template <typename Car2, typename Cdr2>
+        cons& operator=(cons<Car2, Cdr2> const& rhs)
+        {
+            car = rhs.car;
+            cdr = rhs.cdr;
+            return *this;
+        }
+
+        cons& operator=(cons const& rhs)
+        {
+            car = rhs.car;
+            cdr = rhs.cdr;
+            return *this;
+        }
+
+        template <typename Sequence>
+        typename disable_if<is_convertible<Sequence, Car>, cons&>::type
+        operator=(Sequence const& seq)
+        {
+            typedef typename result_of::begin<Sequence const>::type Iterator;
+            Iterator iter = fusion::begin(seq);
+            this->assign_from_iter(iter);
+            return *this;
+        }
+
+        template <typename Iterator>
+        void assign_from_iter(Iterator const& iter)
+        {
+            car = *iter;
+            cdr.assign_from_iter(fusion::next(iter));
+        }
+
+        car_type car;
+        cdr_type cdr;
+    };
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/container/list/cons_iterator.hpp b/3rdParty/Boost/src/boost/fusion/container/list/cons_iterator.hpp
new file mode 100644
index 0000000..1eff153
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/list/cons_iterator.hpp
@@ -0,0 +1,89 @@
+/*=============================================================================
+    Copyright (c) 2005 Joel de Guzman
+    Copyright (c) 2005 Eric Niebler
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_CONS_ITERATOR_07172005_0849)
+#define FUSION_CONS_ITERATOR_07172005_0849
+
+#include <boost/type_traits/add_const.hpp>
+#include <boost/fusion/support/iterator_base.hpp>
+#include <boost/fusion/container/list/detail/deref_impl.hpp>
+#include <boost/fusion/container/list/detail/next_impl.hpp>
+#include <boost/fusion/container/list/detail/value_of_impl.hpp>
+#include <boost/fusion/container/list/detail/equal_to_impl.hpp>
+#include <boost/fusion/container/list/list_fwd.hpp>
+
+namespace boost { namespace fusion
+{
+    struct nil;
+    struct cons_iterator_tag;
+    struct forward_traversal_tag;
+
+    template <typename Cons>
+    struct cons_iterator_identity;
+
+    template <typename Cons = nil>
+    struct cons_iterator : iterator_base<cons_iterator<Cons> >
+    {
+        typedef cons_iterator_tag fusion_tag;
+        typedef forward_traversal_tag category;
+        typedef Cons cons_type;
+        typedef cons_iterator_identity<
+            typename add_const<Cons>::type> 
+        identity;
+
+        explicit cons_iterator(cons_type& in_cons)
+            : cons(in_cons) {}
+
+        cons_type& cons;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        cons_iterator& operator= (cons_iterator const&);
+    };
+
+    struct nil_iterator : iterator_base<nil_iterator>
+    {
+        typedef forward_traversal_tag category;
+        typedef cons_iterator_tag fusion_tag;
+        typedef nil cons_type;
+        typedef cons_iterator_identity<
+            add_const<nil>::type> 
+        identity;
+        nil_iterator() {}
+        explicit nil_iterator(nil const&) {}
+    };
+
+    template <>
+    struct cons_iterator<nil> : nil_iterator 
+    {
+        cons_iterator() {}
+        explicit cons_iterator(nil const&) {}
+    };
+
+    template <>
+    struct cons_iterator<nil const> : nil_iterator 
+    {
+        cons_iterator() {}
+        explicit cons_iterator(nil const&) {}
+    };
+
+    template <>
+    struct cons_iterator<list<> > : nil_iterator 
+    {
+        cons_iterator() {}
+        explicit cons_iterator(nil const&) {}
+    };
+
+    template <>
+    struct cons_iterator<list<> const> : nil_iterator 
+    {
+        cons_iterator() {}
+        explicit cons_iterator(nil const&) {}
+    };
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/container/list/convert.hpp b/3rdParty/Boost/src/boost/fusion/container/list/convert.hpp
new file mode 100644
index 0000000..418158c
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/list/convert.hpp
@@ -0,0 +1,56 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_CONVERT_09232005_1215)
+#define FUSION_CONVERT_09232005_1215
+
+#include <boost/fusion/container/list/cons.hpp>
+#include <boost/fusion/container/list/detail/build_cons.hpp>
+#include <boost/fusion/container/list/detail/convert_impl.hpp>
+#include <boost/fusion/sequence/intrinsic/empty.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/sequence/intrinsic/end.hpp>
+
+namespace boost { namespace fusion
+{
+    namespace result_of
+    {
+        template <typename Sequence>
+        struct as_list
+        {
+            typedef typename
+                detail::build_cons<
+                    typename result_of::begin<Sequence>::type
+                  , typename result_of::end<Sequence>::type
+                >
+            build_cons;
+
+            typedef typename build_cons::type type;
+
+            static type
+            call(Sequence& seq)
+            {
+                return build_cons::call(fusion::begin(seq), fusion::end(seq));
+            }
+        };
+    }
+
+    template <typename Sequence>
+    inline typename result_of::as_list<Sequence>::type
+    as_list(Sequence& seq)
+    {
+        return result_of::as_list<Sequence>::call(seq);
+    }
+
+    template <typename Sequence>
+    inline typename result_of::as_list<Sequence const>::type
+    as_list(Sequence const& seq)
+    {
+        return result_of::as_list<Sequence const>::call(seq);
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/container/list/detail/at_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/list/detail/at_impl.hpp
new file mode 100644
index 0000000..4dee15d
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/list/detail/at_impl.hpp
@@ -0,0 +1,132 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_AT_IMPL_07172005_0726)
+#define FUSION_AT_IMPL_07172005_0726
+
+#include <boost/fusion/support/detail/access.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/add_const.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace fusion
+{
+    namespace detail
+    {
+        template <typename Cons>
+        struct cons_deref
+        {
+            typedef typename Cons::car_type type;
+        };
+
+        template <typename Cons, int I>
+        struct cons_advance
+        {
+            typedef typename
+                cons_advance<Cons, I-1>::type::cdr_type
+            type;
+        };
+
+        template <typename Cons>
+        struct cons_advance<Cons, 0>
+        {
+            typedef Cons type;
+        };
+
+        template <typename Cons>
+        struct cons_advance<Cons, 1>
+        {
+            typedef typename Cons::cdr_type type;
+        };
+
+        template <typename Cons>
+        struct cons_advance<Cons, 2>
+        {
+#if BOOST_WORKAROUND(BOOST_MSVC, > 1400) // VC8 and above
+            typedef typename Cons::cdr_type::cdr_type type;
+#else
+            typedef typename Cons::cdr_type _a;
+            typedef typename _a::cdr_type type;
+#endif
+        };
+
+        template <typename Cons>
+        struct cons_advance<Cons, 3>
+        {
+#if BOOST_WORKAROUND(BOOST_MSVC, > 1400) // VC8 and above
+            typedef typename Cons::cdr_type::cdr_type::cdr_type type;
+#else
+            typedef typename Cons::cdr_type _a;
+            typedef typename _a::cdr_type _b;
+            typedef typename _b::cdr_type type;
+#endif
+        };
+
+        template <typename Cons>
+        struct cons_advance<Cons, 4>
+        {
+#if BOOST_WORKAROUND(BOOST_MSVC, > 1400) // VC8 and above
+            typedef typename Cons::cdr_type::cdr_type::cdr_type::cdr_type type;
+#else
+            typedef typename Cons::cdr_type _a;
+            typedef typename _a::cdr_type _b;
+            typedef typename _b::cdr_type _c;
+            typedef typename _c::cdr_type type;
+#endif
+        };
+    }
+
+    struct cons_tag;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct at_impl;
+
+        template <>
+        struct at_impl<cons_tag>
+        {
+            template <typename Sequence, typename N>
+            struct apply
+            {
+                typedef detail::cons_deref<
+                    typename detail::cons_advance<Sequence, N::value>::type>
+                element;
+
+                typedef typename
+                    mpl::eval_if<
+                        is_const<Sequence>
+                      , detail::cref_result<element>
+                      , detail::ref_result<element>
+                    >::type
+                type;
+
+                template <typename Cons, int N2>
+                static type
+                call(Cons& s, mpl::int_<N2>)
+                {
+                    return call(s.cdr, mpl::int_<N2-1>());
+                }
+
+                template <typename Cons>
+                static type
+                call(Cons& s, mpl::int_<0>)
+                {
+                    return s.car;
+                }
+
+                static type
+                call(Sequence& s)
+                {
+                    return call(s, mpl::int_<N::value>());
+                }
+            };
+        };
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/container/list/detail/begin_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/list/detail/begin_impl.hpp
new file mode 100644
index 0000000..a22c9a3
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/list/detail/begin_impl.hpp
@@ -0,0 +1,49 @@
+/*=============================================================================
+    Copyright (c) 2005 Joel de Guzman
+    Copyright (c) 2005 Eric Niebler
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_BEGIN_IMPL_07172005_0824)
+#define FUSION_BEGIN_IMPL_07172005_0824
+
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_const.hpp>
+
+namespace boost { namespace fusion
+{
+    struct nil;
+
+    struct cons_tag;
+
+    template <typename Car, typename Cdr>
+    struct cons;
+
+    template <typename Cons>
+    struct cons_iterator;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct begin_impl;
+
+        template <>
+        struct begin_impl<cons_tag>
+        {
+            template <typename Sequence>
+            struct apply
+            {
+                typedef cons_iterator<Sequence> type;
+    
+                static type
+                call(Sequence& t)
+                {
+                    return type(t);
+                }
+            };
+        };
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/container/list/detail/build_cons.hpp b/3rdParty/Boost/src/boost/fusion/container/list/detail/build_cons.hpp
new file mode 100644
index 0000000..8e6276e
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/list/detail/build_cons.hpp
@@ -0,0 +1,58 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_BUILD_CONS_09232005_1222)
+#define FUSION_BUILD_CONS_09232005_1222
+
+#include <boost/fusion/container/list/cons.hpp>
+#include <boost/fusion/iterator/equal_to.hpp>
+#include <boost/fusion/iterator/next.hpp>
+#include <boost/fusion/iterator/value_of.hpp>
+#include <boost/fusion/iterator/deref.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+    template <
+        typename First
+      , typename Last
+      , bool is_empty = result_of::equal_to<First, Last>::value>
+    struct build_cons;
+
+    template <typename First, typename Last>
+    struct build_cons<First, Last, true>
+    {
+        typedef nil type;
+        
+        static nil
+        call(First const&, Last const&)
+        {
+            return nil();
+        }
+    };
+
+    template <typename First, typename Last>
+    struct build_cons<First, Last, false>
+    {
+        typedef  
+            build_cons<typename result_of::next<First>::type, Last>
+        next_build_cons;
+
+        typedef cons<
+            typename result_of::value_of<First>::type
+          , typename next_build_cons::type> 
+        type;
+
+        static type
+        call(First const& f, Last const& l)
+        {
+            typename result_of::deref<First>::type v = *f;
+            return type(v, next_build_cons::call(fusion::next(f), l));
+        }
+    };
+
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/container/list/detail/convert_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/list/detail/convert_impl.hpp
new file mode 100644
index 0000000..cfe7a1d
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/list/detail/convert_impl.hpp
@@ -0,0 +1,51 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2005-2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_CONVERT_IMPL_09232005_1215)
+#define FUSION_CONVERT_IMPL_09232005_1215
+
+#include <boost/fusion/container/list/cons.hpp>
+#include <boost/fusion/container/list/detail/build_cons.hpp>
+#include <boost/fusion/sequence/intrinsic/empty.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/sequence/intrinsic/end.hpp>
+
+namespace boost { namespace fusion
+{
+    struct cons_tag;
+
+    namespace extension
+    {
+        template <typename T>
+        struct convert_impl;
+
+        template <>
+        struct convert_impl<cons_tag>
+        {
+            template <typename Sequence>
+            struct apply
+            {
+                typedef typename
+                    detail::build_cons<
+                        typename result_of::begin<Sequence>::type
+                      , typename result_of::end<Sequence>::type
+                    >
+                build_cons;
+
+                typedef typename build_cons::type type;
+
+                static type
+                call(Sequence& seq)
+                {
+                    return build_cons::call(fusion::begin(seq), fusion::end(seq));
+                }
+            };
+        };
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/container/list/detail/deref_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/list/detail/deref_impl.hpp
new file mode 100644
index 0000000..5292dce
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/list/detail/deref_impl.hpp
@@ -0,0 +1,52 @@
+/*=============================================================================
+    Copyright (c) 2005 Joel de Guzman
+    Copyright (c) 2005 Eric Niebler
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_DEREF_IMPL_07172005_0831)
+#define FUSION_DEREF_IMPL_07172005_0831
+
+#include <boost/mpl/eval_if.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/add_const.hpp>
+#include <boost/type_traits/add_reference.hpp>
+
+namespace boost { namespace fusion
+{
+    struct cons_iterator_tag;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct deref_impl;
+
+        template <>
+        struct deref_impl<cons_iterator_tag>
+        {
+            template <typename Iterator>
+            struct apply 
+            {
+                typedef typename Iterator::cons_type cons_type;
+                typedef typename cons_type::car_type value_type;
+    
+                typedef typename mpl::eval_if<
+                    is_const<cons_type>
+                  , add_reference<typename add_const<value_type>::type>
+                  , add_reference<value_type> >::type
+                type;
+    
+                static type
+                call(Iterator const& i)
+                {
+                    return i.cons.car;
+                }
+            };
+        };
+    }
+}}
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/container/list/detail/empty_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/list/detail/empty_impl.hpp
new file mode 100644
index 0000000..5c92c73
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/list/detail/empty_impl.hpp
@@ -0,0 +1,37 @@
+/*=============================================================================
+    Copyright (c) 2007 Tobias Schwinger
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_FUSION_SEQUENCE_EMPTY_IMPL_HPP_INCLUDED)
+#define BOOST_FUSION_SEQUENCE_EMPTY_IMPL_HPP_INCLUDED
+
+#include <boost/type_traits/is_convertible.hpp>
+
+namespace boost { namespace fusion
+{
+    struct cons_tag;
+
+    struct nil;
+
+    template <typename Car, typename Cdr>
+    struct cons;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct empty_impl;
+
+        template <>
+        struct empty_impl<cons_tag>
+        {
+            template <typename Sequence>
+            struct apply
+                : boost::is_convertible<Sequence, nil>
+            {};
+        };
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/container/list/detail/end_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/list/detail/end_impl.hpp
new file mode 100644
index 0000000..03b5e21
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/list/detail/end_impl.hpp
@@ -0,0 +1,51 @@
+/*=============================================================================
+    Copyright (c) 2005 Joel de Guzman
+    Copyright (c) 2005 Eric Niebler
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_END_IMPL_07172005_0828)
+#define FUSION_END_IMPL_07172005_0828
+
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_const.hpp>
+
+namespace boost { namespace fusion
+{
+    struct nil;
+
+    struct cons_tag;
+
+    template <typename Car, typename Cdr>
+    struct cons;
+
+    template <typename Cons>
+    struct cons_iterator;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct end_impl;
+
+        template <>
+        struct end_impl<cons_tag>
+        {
+            template <typename Sequence>
+            struct apply 
+            {
+                typedef cons_iterator<
+                    typename mpl::if_<is_const<Sequence>, nil const, nil>::type>
+                type;
+    
+                static type
+                call(Sequence&)
+                {
+                    return type();
+                }
+            };
+        };
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/container/list/detail/equal_to_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/list/detail/equal_to_impl.hpp
new file mode 100644
index 0000000..1192588
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/list/detail/equal_to_impl.hpp
@@ -0,0 +1,39 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_EQUAL_TO_IMPL_09172005_1120)
+#define FUSION_EQUAL_TO_IMPL_09172005_1120
+
+#include <boost/type_traits/is_same.hpp>
+#include <boost/mpl/equal_to.hpp>
+#include <boost/mpl/and.hpp>
+
+namespace boost { namespace fusion
+{
+    struct cons_iterator_tag;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct equal_to_impl;
+
+        template <>
+        struct equal_to_impl<cons_iterator_tag>
+        {
+            template <typename I1, typename I2>
+            struct apply             
+                : is_same<
+                    typename I1::identity
+                  , typename I2::identity
+                >
+            {
+            };
+        };
+    }
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/container/list/detail/next_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/list/detail/next_impl.hpp
new file mode 100644
index 0000000..dafa83c
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/list/detail/next_impl.hpp
@@ -0,0 +1,59 @@
+/*=============================================================================
+    Copyright (c) 2005 Joel de Guzman
+    Copyright (c) 2005 Eric Niebler
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_NEXT_IMPL_07172005_0836)
+#define FUSION_NEXT_IMPL_07172005_0836
+
+#include <boost/fusion/iterator/next.hpp>
+#include <boost/fusion/iterator/equal_to.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/add_const.hpp>
+
+namespace boost { namespace fusion
+{
+    struct cons_iterator_tag;
+
+    template <typename Cons>
+    struct cons_iterator;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct next_impl;
+
+        template <>
+        struct next_impl<cons_iterator_tag>
+        {
+            template <typename Iterator>
+            struct apply
+            {
+                typedef typename Iterator::cons_type cons_type;
+                typedef typename cons_type::cdr_type cdr_type;
+    
+                typedef cons_iterator<
+                    typename mpl::eval_if<
+                        is_const<cons_type>
+                      , add_const<cdr_type>
+                      , mpl::identity<cdr_type>
+                    >::type>
+                type;
+    
+                static type
+                call(Iterator const& i)
+                {
+                    return type(i.cons.cdr);
+                }
+            };
+        };
+    }
+}}
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/container/list/detail/value_at_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/list/detail/value_at_impl.hpp
new file mode 100644
index 0000000..5f0ff16
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/list/detail/value_at_impl.hpp
@@ -0,0 +1,42 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_VALUE_AT_IMPL_07172005_0952)
+#define FUSION_VALUE_AT_IMPL_07172005_0952
+
+#include <boost/fusion/support/detail/access.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace fusion
+{
+    struct cons_tag;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct value_at_impl;
+
+        template <>
+        struct value_at_impl<cons_tag>
+        {
+            template <typename Sequence, typename N>
+            struct apply 
+            {
+                typedef typename 
+                    mpl::eval_if<
+                        mpl::bool_<N::value == 0>
+                      , mpl::identity<typename Sequence::car_type>
+                      , apply<typename Sequence::cdr_type, mpl::int_<N::value-1> >
+                    >::type
+                type;
+            };
+        };
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/container/list/detail/value_of_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/list/detail/value_of_impl.hpp
new file mode 100644
index 0000000..f8175c6
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/list/detail/value_of_impl.hpp
@@ -0,0 +1,36 @@
+/*=============================================================================
+    Copyright (c) 2005 Joel de Guzman
+    Copyright (c) 2005 Eric Niebler
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_VALUE_OF_IMPL_07172005_0838)
+#define FUSION_VALUE_OF_IMPL_07172005_0838
+
+namespace boost { namespace fusion
+{
+    struct cons_iterator_tag;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct value_of_impl;
+
+        template <>
+        struct value_of_impl<cons_iterator_tag>
+        {
+            template <typename Iterator>
+            struct apply 
+            {
+                typedef typename Iterator::cons_type cons_type;
+                typedef typename cons_type::car_type type;
+            };
+        };
+    }
+
+}}
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/container/list/limits.hpp b/3rdParty/Boost/src/boost/fusion/container/list/limits.hpp
new file mode 100644
index 0000000..20ff6dd
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/list/limits.hpp
@@ -0,0 +1,19 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_LIST_LIMITS_07172005_0112)
+#define FUSION_LIST_LIMITS_07172005_0112
+
+#if !defined(FUSION_MAX_LIST_SIZE)
+# define FUSION_MAX_LIST_SIZE 10
+#else
+# if FUSION_MAX_LIST_SIZE < 3
+#   undef FUSION_MAX_LIST_SIZE
+#   define FUSION_MAX_LIST_SIZE 10
+# endif
+#endif
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/container/list/list_fwd.hpp b/3rdParty/Boost/src/boost/fusion/container/list/list_fwd.hpp
new file mode 100644
index 0000000..90c088b
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/list/list_fwd.hpp
@@ -0,0 +1,24 @@
+/*=============================================================================
+    Copyright (c) 2005 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_LIST_FORWARD_07172005_0224)
+#define FUSION_LIST_FORWARD_07172005_0224
+
+#include <boost/fusion/container/list/limits.hpp>
+#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
+
+namespace boost { namespace fusion
+{
+    struct void_;
+
+    template <
+        BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
+            FUSION_MAX_LIST_SIZE, typename T, void_)
+    >
+    struct list;
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/container/map/limits.hpp b/3rdParty/Boost/src/boost/fusion/container/map/limits.hpp
new file mode 100644
index 0000000..738abff
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/map/limits.hpp
@@ -0,0 +1,25 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_MAP_LIMITS_07212005_1104)
+#define FUSION_MAP_LIMITS_07212005_1104
+
+#include <boost/fusion/container/vector/limits.hpp>
+
+#if !defined(FUSION_MAX_MAP_SIZE)
+# define FUSION_MAX_MAP_SIZE FUSION_MAX_VECTOR_SIZE
+#else
+# if FUSION_MAX_MAP_SIZE < 3
+#   undef FUSION_MAX_MAP_SIZE
+#   if (FUSION_MAX_VECTOR_SIZE > 10)
+#       define FUSION_MAX_MAP_SIZE 10
+#   else
+#       define FUSION_MAX_MAP_SIZE FUSION_MAX_VECTOR_SIZE
+#   endif
+# endif
+#endif
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/container/map/map_fwd.hpp b/3rdParty/Boost/src/boost/fusion/container/map/map_fwd.hpp
new file mode 100644
index 0000000..d8a9c1b
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/map/map_fwd.hpp
@@ -0,0 +1,26 @@
+/*=============================================================================
+    Copyright (c) 2005 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_MAP_FORWARD_07212005_1105)
+#define FUSION_MAP_FORWARD_07212005_1105
+
+#include <boost/fusion/container/map/limits.hpp>
+#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
+
+namespace boost { namespace fusion
+{
+    struct void_;
+    struct map_tag;
+    struct map_iterator_tag;
+
+    template <
+        BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
+            FUSION_MAX_MAP_SIZE, typename T, void_)
+    >
+    struct map;
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/container/set/limits.hpp b/3rdParty/Boost/src/boost/fusion/container/set/limits.hpp
new file mode 100644
index 0000000..35eb080
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/set/limits.hpp
@@ -0,0 +1,25 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_SET_LIMITS_09162005_1103)
+#define FUSION_SET_LIMITS_09162005_1103
+
+#include <boost/fusion/container/vector/limits.hpp>
+
+#if !defined(FUSION_MAX_SET_SIZE)
+# define FUSION_MAX_SET_SIZE FUSION_MAX_VECTOR_SIZE
+#else
+# if FUSION_MAX_SET_SIZE < 3
+#   undef FUSION_MAX_SET_SIZE
+#   if (FUSION_MAX_VECTOR_SIZE > 10)
+#       define FUSION_MAX_SET_SIZE 10
+#   else
+#       define FUSION_MAX_SET_SIZE FUSION_MAX_VECTOR_SIZE
+#   endif
+# endif
+#endif
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/container/set/set_fwd.hpp b/3rdParty/Boost/src/boost/fusion/container/set/set_fwd.hpp
new file mode 100644
index 0000000..082422f
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/set/set_fwd.hpp
@@ -0,0 +1,26 @@
+/*=============================================================================
+    Copyright (c) 2005 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_SET_FORWARD_09162005_1102)
+#define FUSION_SET_FORWARD_09162005_1102
+
+#include <boost/fusion/container/set/limits.hpp>
+#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
+
+namespace boost { namespace fusion
+{
+    struct void_;
+    struct set_tag;
+    struct set_iterator_tag;
+
+    template <
+        BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
+            FUSION_MAX_SET_SIZE, typename T, void_)
+    >
+    struct set;
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/container/vector.hpp b/3rdParty/Boost/src/boost/fusion/container/vector.hpp
new file mode 100644
index 0000000..389a102
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/vector.hpp
@@ -0,0 +1,21 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_CLASS_VECTOR_10022005_0602)
+#define FUSION_SEQUENCE_CLASS_VECTOR_10022005_0602
+
+#include <boost/fusion/container/vector/limits.hpp>
+#include <boost/fusion/container/vector/vector10.hpp>
+#include <boost/fusion/container/vector/vector20.hpp>
+#include <boost/fusion/container/vector/vector30.hpp>
+#include <boost/fusion/container/vector/vector40.hpp>
+#include <boost/fusion/container/vector/vector50.hpp>
+#include <boost/fusion/container/vector/vector.hpp>
+#include <boost/fusion/container/vector/vector_fwd.hpp>
+#include <boost/fusion/container/vector/vector_iterator.hpp>
+#include <boost/fusion/container/vector/convert.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/convert.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/convert.hpp
new file mode 100644
index 0000000..a31578a
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/vector/convert.hpp
@@ -0,0 +1,47 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_CONVERT_09222005_1104)
+#define FUSION_CONVERT_09222005_1104
+
+#include <boost/fusion/container/vector/detail/as_vector.hpp>
+#include <boost/fusion/container/vector/detail/convert_impl.hpp>
+#include <boost/fusion/container/vector/vector.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/sequence/intrinsic/size.hpp>
+
+namespace boost { namespace fusion
+{
+    namespace result_of
+    {
+        template <typename Sequence>
+        struct as_vector
+        {
+            typedef typename detail::as_vector<result_of::size<Sequence>::value> gen;
+            typedef typename gen::
+                template apply<typename result_of::begin<Sequence>::type>::type
+            type;
+        };
+    }
+
+    template <typename Sequence>
+    inline typename result_of::as_vector<Sequence>::type
+    as_vector(Sequence& seq)
+    {
+        typedef typename result_of::as_vector<Sequence>::gen gen;
+        return gen::call(fusion::begin(seq));
+    }
+
+    template <typename Sequence>
+    inline typename result_of::as_vector<Sequence const>::type
+    as_vector(Sequence const& seq)
+    {
+        typedef typename result_of::as_vector<Sequence const>::gen gen;
+        return gen::call(fusion::begin(seq));
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/detail/advance_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/detail/advance_impl.hpp
new file mode 100644
index 0000000..c2c97b1
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/vector/detail/advance_impl.hpp
@@ -0,0 +1,42 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_ADVANCE_IMPL_09172005_1156)
+#define FUSION_ADVANCE_IMPL_09172005_1156
+
+namespace boost { namespace fusion
+{
+    struct vector_iterator_tag;
+
+    template <typename Vector, int N>
+    struct vector_iterator;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct advance_impl;
+    
+        template <>
+        struct advance_impl<vector_iterator_tag>
+        {
+            template <typename Iterator, typename N>
+            struct apply
+            {
+                typedef typename Iterator::index index;
+                typedef typename Iterator::vector vector;
+                typedef vector_iterator<vector, index::value+N::value> type;
+    
+                static type
+                call(Iterator const& i)
+                {
+                    return type(i.vec);
+                }
+            };
+        };
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/detail/as_vector.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/detail/as_vector.hpp
new file mode 100644
index 0000000..a70fd4a
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/vector/detail/as_vector.hpp
@@ -0,0 +1,101 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef BOOST_PP_IS_ITERATING
+#if !defined(FUSION_AS_VECTOR_09222005_0950)
+#define FUSION_AS_VECTOR_09222005_0950
+
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/repeat.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/inc.hpp>
+#include <boost/preprocessor/dec.hpp>
+#include <boost/fusion/container/vector/vector.hpp>
+#include <boost/fusion/iterator/value_of.hpp>
+#include <boost/fusion/iterator/deref.hpp>
+#include <boost/fusion/iterator/next.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+    template <int size>
+    struct as_vector;
+
+    template <>
+    struct as_vector<0>
+    {
+        template <typename Iterator>
+        struct apply
+        {
+            typedef vector0<> type;
+        };
+
+        template <typename Iterator>
+        static typename apply<Iterator>::type
+        call(Iterator)
+        {
+            return vector0<>();
+        }
+    };
+
+#define BOOST_FUSION_NEXT_ITERATOR(z, n, data)                                  \
+    typedef typename fusion::result_of::next<BOOST_PP_CAT(I, n)>::type          \
+        BOOST_PP_CAT(I, BOOST_PP_INC(n));
+
+#define BOOST_FUSION_NEXT_CALL_ITERATOR(z, n, data)                             \
+    typename gen::BOOST_PP_CAT(I, BOOST_PP_INC(n))                              \
+        BOOST_PP_CAT(i, BOOST_PP_INC(n)) = fusion::next(BOOST_PP_CAT(i, n));
+
+#define BOOST_FUSION_VALUE_OF_ITERATOR(z, n, data)                              \
+    typedef typename fusion::result_of::value_of<BOOST_PP_CAT(I, n)>::type      \
+        BOOST_PP_CAT(T, n);
+
+#define BOOST_PP_FILENAME_1 <boost/fusion/container/vector/detail/as_vector.hpp>
+#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_VECTOR_SIZE)
+#include BOOST_PP_ITERATE()
+
+#undef BOOST_FUSION_NEXT_ITERATOR
+#undef BOOST_FUSION_NEXT_CALL_ITERATOR
+#undef BOOST_FUSION_VALUE_OF_ITERATOR
+
+}}}
+
+#endif
+#else // defined(BOOST_PP_IS_ITERATING)
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Preprocessor vertical repetition code
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#define N BOOST_PP_ITERATION()
+
+    template <>
+    struct as_vector<N>
+    {
+        template <typename I0>
+        struct apply
+        {
+            BOOST_PP_REPEAT(N, BOOST_FUSION_NEXT_ITERATOR, _)
+            BOOST_PP_REPEAT(N, BOOST_FUSION_VALUE_OF_ITERATOR, _)
+            typedef BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM_PARAMS(N, T)> type;
+        };
+
+        template <typename Iterator>
+        static typename apply<Iterator>::type
+        call(Iterator const& i0)
+        {
+            typedef apply<Iterator> gen;
+            typedef typename gen::type result;
+            BOOST_PP_REPEAT(BOOST_PP_DEC(N), BOOST_FUSION_NEXT_CALL_ITERATOR, _)
+            return result(BOOST_PP_ENUM_PARAMS(N, *i));
+        }
+    };
+
+#undef N
+#endif // defined(BOOST_PP_IS_ITERATING)
+
diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/detail/at_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/detail/at_impl.hpp
new file mode 100644
index 0000000..1366ec9
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/vector/detail/at_impl.hpp
@@ -0,0 +1,56 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_AT_IMPL_05042005_0741)
+#define FUSION_AT_IMPL_05042005_0741
+
+#include <boost/fusion/support/detail/access.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/mpl/at.hpp>
+#include <boost/mpl/int.hpp>
+
+namespace boost { namespace fusion
+{
+    struct vector_tag;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct at_impl;
+
+        template <>
+        struct at_impl<vector_tag>
+        {
+            template <typename Sequence, typename N>
+            struct apply 
+            {
+                typedef mpl::at<typename Sequence::types, N> element;
+                typedef typename detail::ref_result<element>::type type;
+    
+                static type
+                call(Sequence& v)
+                {
+                    return v.at_impl(N());
+                }
+            };
+
+            template <typename Sequence, typename N>
+            struct apply <Sequence const, N>
+            {
+                typedef mpl::at<typename Sequence::types, N> element;
+                typedef typename detail::cref_result<element>::type type;
+    
+                static type
+                call(Sequence const& v)
+                {
+                    return v.at_impl(N());
+                }
+            };
+        };
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/detail/begin_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/detail/begin_impl.hpp
new file mode 100644
index 0000000..d2d687b
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/vector/detail/begin_impl.hpp
@@ -0,0 +1,39 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_BEGIN_IMPL_05042005_1136)
+#define FUSION_BEGIN_IMPL_05042005_1136
+
+#include <boost/fusion/container/vector/vector_iterator.hpp>
+
+namespace boost { namespace fusion
+{
+    struct vector_tag;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct begin_impl;
+
+        template <>
+        struct begin_impl<vector_tag>
+        {
+            template <typename Sequence>
+            struct apply 
+            {
+                typedef vector_iterator<Sequence, 0> type;
+    
+                static type
+                call(Sequence& v)
+                {
+                    return type(v);
+                }
+            };
+        };
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/detail/convert_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/detail/convert_impl.hpp
new file mode 100644
index 0000000..5e1d080
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/vector/detail/convert_impl.hpp
@@ -0,0 +1,45 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2005-2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_CONVERT_IMPL_09222005_1104)
+#define FUSION_CONVERT_IMPL_09222005_1104
+
+#include <boost/fusion/container/vector/detail/as_vector.hpp>
+#include <boost/fusion/container/vector/vector.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/sequence/intrinsic/size.hpp>
+
+namespace boost { namespace fusion
+{
+    struct vector_tag;
+
+    namespace extension
+    {
+        template <typename T>
+        struct convert_impl;
+
+        template <>
+        struct convert_impl<vector_tag>
+        {
+            template <typename Sequence>
+            struct apply
+            {
+                typedef typename detail::as_vector<result_of::size<Sequence>::value> gen;
+                typedef typename gen::
+                    template apply<typename result_of::begin<Sequence>::type>::type
+                type;
+
+                static type call(Sequence& seq)
+                {
+                    return gen::call(fusion::begin(seq));
+                }
+            };
+        };
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/detail/deref_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/detail/deref_impl.hpp
new file mode 100644
index 0000000..bd9f3d0
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/vector/detail/deref_impl.hpp
@@ -0,0 +1,53 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_DEREF_IMPL_05042005_1037)
+#define FUSION_DEREF_IMPL_05042005_1037
+
+#include <boost/mpl/at.hpp>
+#include <boost/fusion/support/detail/access.hpp>
+#include <boost/type_traits/is_const.hpp>
+
+namespace boost { namespace fusion
+{
+    struct vector_iterator_tag;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct deref_impl;
+
+        template <>
+        struct deref_impl<vector_iterator_tag>
+        {
+            template <typename Iterator>
+            struct apply 
+            {
+                typedef typename Iterator::vector vector;
+                typedef typename Iterator::index index;
+                typedef typename mpl::at<
+                    typename vector::types, index> 
+                element;
+                
+                typedef typename
+                    mpl::eval_if<
+                        is_const<vector>
+                      , fusion::detail::cref_result<element>
+                      , fusion::detail::ref_result<element>
+                    >::type
+                type;
+
+                static type
+                call(Iterator const& i)
+                {
+                    return i.vec.at_impl(index());
+                }
+            };
+        };
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/detail/distance_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/detail/distance_impl.hpp
new file mode 100644
index 0000000..9664d5c
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/vector/detail/distance_impl.hpp
@@ -0,0 +1,41 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_DISTANCE_IMPL_09172005_0751)
+#define FUSION_DISTANCE_IMPL_09172005_0751
+
+#include <boost/mpl/minus.hpp>
+
+namespace boost { namespace fusion
+{
+    struct vector_iterator_tag;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct distance_impl;
+
+        template <>
+        struct distance_impl<vector_iterator_tag>
+        {
+            template <typename First, typename Last>
+            struct apply : mpl::minus<typename Last::index, typename First::index>
+            {    
+                static typename mpl::minus<
+                    typename Last::index, typename First::index>::type
+                call(First const&, Last const&)
+                {
+                    typedef typename mpl::minus<
+                        typename Last::index, typename First::index>::type 
+                    result;
+                    return result();
+                }
+            };
+        };
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/detail/end_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/detail/end_impl.hpp
new file mode 100644
index 0000000..f33282d
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/vector/detail/end_impl.hpp
@@ -0,0 +1,40 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_END_IMPL_05042005_1142)
+#define FUSION_END_IMPL_05042005_1142
+
+#include <boost/fusion/container/vector/vector_iterator.hpp>
+
+namespace boost { namespace fusion
+{
+    struct vector_tag;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct end_impl;
+
+        template <>
+        struct end_impl<vector_tag>
+        {
+            template <typename Sequence>
+            struct apply 
+            {
+                typedef typename Sequence::size size;
+                typedef vector_iterator<Sequence, size::value> type;
+    
+                static type
+                call(Sequence& v)
+                {
+                    return type(v);
+                }
+            };
+        };
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/detail/equal_to_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/detail/equal_to_impl.hpp
new file mode 100644
index 0000000..5ff81c6
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/vector/detail/equal_to_impl.hpp
@@ -0,0 +1,39 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_EQUAL_TO_IMPL_05052005_1215)
+#define FUSION_EQUAL_TO_IMPL_05052005_1215
+
+#include <boost/type_traits/is_same.hpp>
+#include <boost/mpl/equal_to.hpp>
+#include <boost/mpl/and.hpp>
+
+namespace boost { namespace fusion
+{
+    struct vector_iterator_tag;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct equal_to_impl;
+
+        template <>
+        struct equal_to_impl<vector_iterator_tag>
+        {
+            template <typename I1, typename I2>
+            struct apply             
+                : is_same<
+                    typename I1::identity
+                  , typename I2::identity
+                >
+            {
+            };
+        };
+    }
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/detail/next_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/detail/next_impl.hpp
new file mode 100644
index 0000000..b11cfdb
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/vector/detail/next_impl.hpp
@@ -0,0 +1,43 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_NEXT_IMPL_05042005_1058)
+#define FUSION_NEXT_IMPL_05042005_1058
+
+#include <boost/fusion/container/vector/vector_iterator.hpp>
+
+namespace boost { namespace fusion
+{
+    struct vector_iterator_tag;
+    template <typename Vector, int N>
+    struct vector_iterator;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct next_impl;
+
+        template <>
+        struct next_impl<vector_iterator_tag>
+        {
+            template <typename Iterator>
+            struct apply 
+            {
+                typedef typename Iterator::vector vector;
+                typedef typename Iterator::index index;
+                typedef vector_iterator<vector, index::value+1> type;
+
+                static type
+                call(Iterator const& i)
+                {
+                    return type(i.vec);
+                }
+            };
+        };
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/detail/prior_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/detail/prior_impl.hpp
new file mode 100644
index 0000000..610591b
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/vector/detail/prior_impl.hpp
@@ -0,0 +1,43 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_PRIOR_IMPL_05042005_1145)
+#define FUSION_PRIOR_IMPL_05042005_1145
+
+#include <boost/fusion/container/vector/vector_iterator.hpp>
+
+namespace boost { namespace fusion
+{
+    struct vector_iterator_tag;
+    template <typename Vector, int N>
+    struct vector_iterator;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct prior_impl;
+
+        template <>
+        struct prior_impl<vector_iterator_tag>
+        {
+            template <typename Iterator>
+            struct apply 
+            {
+                typedef typename Iterator::vector vector;
+                typedef typename Iterator::index index;
+                typedef vector_iterator<vector, index::value-1> type;
+
+                static type
+                call(Iterator const& i)
+                {
+                    return type(i.vec);
+                }
+            };
+        };
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/detail/value_at_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/detail/value_at_impl.hpp
new file mode 100644
index 0000000..0178054
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/vector/detail/value_at_impl.hpp
@@ -0,0 +1,33 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_VALUE_AT_IMPL_05052005_0232)
+#define FUSION_VALUE_AT_IMPL_05052005_0232
+
+#include <boost/mpl/at.hpp>
+
+namespace boost { namespace fusion
+{
+    struct vector_tag;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct value_at_impl;
+
+        template <>
+        struct value_at_impl<vector_tag>
+        {
+            template <typename Sequence, typename N>
+            struct apply 
+            {
+                typedef typename mpl::at<typename Sequence::types, N>::type type;
+            };
+        };
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/detail/value_of_impl.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/detail/value_of_impl.hpp
new file mode 100644
index 0000000..3a775fb
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/vector/detail/value_of_impl.hpp
@@ -0,0 +1,37 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_VALUE_OF_IMPL_05052005_1128)
+#define FUSION_VALUE_OF_IMPL_05052005_1128
+
+#include <boost/mpl/at.hpp>
+
+namespace boost { namespace fusion
+{
+    struct vector_iterator_tag;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct value_of_impl;
+
+        template <>
+        struct value_of_impl<vector_iterator_tag>
+        {
+            template <typename Iterator>
+            struct apply 
+            {
+                typedef typename Iterator::vector vector;
+                typedef typename Iterator::index index;
+                typedef typename mpl::at<
+                    typename vector::types, index>::type
+                type;
+            };
+        };
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/detail/vector_forward_ctor.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/detail/vector_forward_ctor.hpp
new file mode 100644
index 0000000..e4680bb
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/vector/detail/vector_forward_ctor.hpp
@@ -0,0 +1,39 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef BOOST_PP_IS_ITERATING
+#if !defined(FUSION_VECTOR_FORWARD_CTOR_07122005_1123)
+#define FUSION_VECTOR_FORWARD_CTOR_07122005_1123
+
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+
+#define BOOST_PP_FILENAME_1 \
+    <boost/fusion/container/vector/detail/vector_forward_ctor.hpp>
+#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_VECTOR_SIZE)
+#include BOOST_PP_ITERATE()
+
+#endif
+#else // defined(BOOST_PP_IS_ITERATING)
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Preprocessor vertical repetition code
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#define N BOOST_PP_ITERATION()
+
+#if N == 1
+    explicit
+#endif
+    vector(BOOST_PP_ENUM_BINARY_PARAMS(
+        N, typename detail::call_param<T, >::type _))
+        : vec(BOOST_PP_ENUM_PARAMS(N, _)) {}
+
+#undef N
+#endif // defined(BOOST_PP_IS_ITERATING)
+
diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/detail/vector_n.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/detail/vector_n.hpp
new file mode 100644
index 0000000..33484c5
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/vector/detail/vector_n.hpp
@@ -0,0 +1,149 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+// No include guard. This file is meant to be included many times
+
+#if !defined(FUSION_MACRO_05042005)
+#define FUSION_MACRO_05042005
+
+#define FUSION_MEMBER_DEFAULT_INIT(z, n, _)     m##n()
+#define FUSION_MEMBER_INIT(z, n, _)             m##n(_##n)
+#define FUSION_COPY_INIT(z, n, _)               m##n(other.m##n)
+#define FUSION_MEMBER_DECL(z, n, _)             T##n m##n;
+
+#define FUSION_MEMBER_ASSIGN(z, n, _)                                           \
+    this->BOOST_PP_CAT(m, n) = vec.BOOST_PP_CAT(m, n);
+
+#define FUSION_DEREF_MEMBER_ASSIGN(z, n, _)                                     \
+    this->BOOST_PP_CAT(m, n) = *BOOST_PP_CAT(i, n);
+
+#define FUSION_AT_IMPL(z, n, _)                                                 \
+    typename add_reference<T##n>::type                                          \
+        at_impl(mpl::int_<n>) { return this->m##n; }                            \
+    typename add_reference<typename add_const<T##n>::type>::type                \
+        at_impl(mpl::int_<n>) const { return this->m##n; }
+
+#define FUSION_ITER_DECL_VAR(z, n, _)                                           \
+    typedef typename result_of::next<                                           \
+        BOOST_PP_CAT(I, BOOST_PP_DEC(n))>::type BOOST_PP_CAT(I, n);             \
+    BOOST_PP_CAT(I, n) BOOST_PP_CAT(i, n)                                       \
+        = fusion::next(BOOST_PP_CAT(i, BOOST_PP_DEC(n)));
+
+#endif
+
+#define N BOOST_PP_ITERATION()
+
+    template <BOOST_PP_ENUM_PARAMS(N, typename T)>
+    struct BOOST_PP_CAT(vector_data, N)
+    {
+        BOOST_PP_CAT(vector_data, N)()
+            : BOOST_PP_ENUM(N, FUSION_MEMBER_DEFAULT_INIT, _) {}
+
+        BOOST_PP_CAT(vector_data, N)(
+            BOOST_PP_ENUM_BINARY_PARAMS(
+                N, typename detail::call_param<T, >::type _))
+            : BOOST_PP_ENUM(N, FUSION_MEMBER_INIT, _) {}
+
+        BOOST_PP_CAT(vector_data, N)(
+            BOOST_PP_CAT(vector_data, N) const& other)
+            : BOOST_PP_ENUM(N, FUSION_COPY_INIT, _) {}
+
+        BOOST_PP_CAT(vector_data, N)&
+        operator=(BOOST_PP_CAT(vector_data, N) const& vec)
+        {
+            BOOST_PP_REPEAT(N, FUSION_MEMBER_ASSIGN, _)
+            return *this;
+        }
+
+        template <typename Sequence>
+        static BOOST_PP_CAT(vector_data, N)
+        init_from_sequence(Sequence const& seq)
+        {
+            typedef typename result_of::begin<Sequence const>::type I0;
+            I0 i0 = fusion::begin(seq);
+            BOOST_PP_REPEAT_FROM_TO(1, N, FUSION_ITER_DECL_VAR, _)
+            return BOOST_PP_CAT(vector_data, N)(BOOST_PP_ENUM_PARAMS(N, *i));
+        }
+
+        BOOST_PP_REPEAT(N, FUSION_MEMBER_DECL, _)
+    };
+
+    template <BOOST_PP_ENUM_PARAMS(N, typename T)>
+    struct BOOST_PP_CAT(vector, N)
+      : BOOST_PP_CAT(vector_data, N)<BOOST_PP_ENUM_PARAMS(N, T)>
+      , sequence_base<BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM_PARAMS(N, T)> >
+    {
+        typedef BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM_PARAMS(N, T)> this_type;
+        typedef BOOST_PP_CAT(vector_data, N)<BOOST_PP_ENUM_PARAMS(N, T)> base_type;
+        typedef mpl::BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM_PARAMS(N, T)> types;
+        typedef vector_tag fusion_tag;
+        typedef fusion_sequence_tag tag; // this gets picked up by MPL
+        typedef mpl::false_ is_view;
+        typedef random_access_traversal_tag category;
+        typedef mpl::int_<N> size;
+
+        BOOST_PP_CAT(vector, N)() {}
+
+#if (N == 1)
+        explicit
+#endif
+        BOOST_PP_CAT(vector, N)(
+            BOOST_PP_ENUM_BINARY_PARAMS(
+                N, typename detail::call_param<T, >::type _))
+            : base_type(BOOST_PP_ENUM_PARAMS(N, _)) {}
+
+        template <BOOST_PP_ENUM_PARAMS(N, typename U)>
+        BOOST_PP_CAT(vector, N)(
+            BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM_PARAMS(N, U)> const& vec)
+            : base_type(BOOST_PP_ENUM_PARAMS(N, vec.m)) {}
+
+        template <typename Sequence>
+        BOOST_PP_CAT(vector, N)(
+            Sequence const& seq
+#if (N == 1)
+          , typename disable_if<is_convertible<Sequence, T0> >::type* /*dummy*/ = 0
+#endif
+            )
+            : base_type(base_type::init_from_sequence(seq)) {}
+
+        template <BOOST_PP_ENUM_PARAMS(N, typename U)>
+        BOOST_PP_CAT(vector, N)&
+        operator=(BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM_PARAMS(N, U)> const& vec)
+        {
+            BOOST_PP_REPEAT(N, FUSION_MEMBER_ASSIGN, _)
+            return *this;
+        }
+
+        template <typename Sequence>
+        typename disable_if<is_convertible<Sequence, T0>, this_type&>::type
+        operator=(Sequence const& seq)
+        {
+            typedef typename result_of::begin<Sequence const>::type I0;
+            I0 i0 = fusion::begin(seq);
+            BOOST_PP_REPEAT_FROM_TO(1, N, FUSION_ITER_DECL_VAR, _)
+            BOOST_PP_REPEAT(N, FUSION_DEREF_MEMBER_ASSIGN, _)
+            return *this;
+        }
+
+        BOOST_PP_REPEAT(N, FUSION_AT_IMPL, _)
+
+        template<typename I>
+        typename add_reference<typename mpl::at<types, I>::type>::type
+        at_impl(I)
+        {
+            return this->at_impl(mpl::int_<I::value>());
+        }
+
+        template<typename I>
+        typename add_reference<typename add_const<typename mpl::at<types, I>::type>::type>::type
+        at_impl(I) const
+        {
+            return this->at_impl(mpl::int_<I::value>());
+        }
+    };
+
+#undef N
+
diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/detail/vector_n_chooser.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/detail/vector_n_chooser.hpp
new file mode 100644
index 0000000..f4b85d8
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/vector/detail/vector_n_chooser.hpp
@@ -0,0 +1,81 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef BOOST_PP_IS_ITERATING
+#if !defined(FUSION_VECTOR_N_CHOOSER_07072005_1248)
+#define FUSION_VECTOR_N_CHOOSER_07072005_1248
+
+#include <boost/fusion/container/vector/limits.hpp>
+
+//  include vector0..N where N is FUSION_MAX_VECTOR_SIZE
+#include <boost/fusion/container/vector/vector10.hpp>
+#if (FUSION_MAX_VECTOR_SIZE > 10)
+#include <boost/fusion/container/vector/vector20.hpp>
+#endif
+#if (FUSION_MAX_VECTOR_SIZE > 20)
+#include <boost/fusion/container/vector/vector30.hpp>
+#endif
+#if (FUSION_MAX_VECTOR_SIZE > 30)
+#include <boost/fusion/container/vector/vector40.hpp>
+#endif
+#if (FUSION_MAX_VECTOR_SIZE > 40)
+#include <boost/fusion/container/vector/vector50.hpp>
+#endif
+
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/arithmetic/dec.hpp>
+#include <boost/preprocessor/arithmetic/sub.hpp>
+#include <boost/preprocessor/facilities/intercept.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_trailing_params.hpp>
+
+namespace boost { namespace fusion
+{
+    struct void_;
+}}
+
+namespace boost { namespace fusion { namespace detail
+{
+    template <BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, typename T)>
+    struct vector_n_chooser
+    {
+        typedef BOOST_PP_CAT(vector, FUSION_MAX_VECTOR_SIZE)<BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, T)> type;
+    };
+
+    template <>
+    struct vector_n_chooser<BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, void_ BOOST_PP_INTERCEPT)>
+    {
+        typedef vector0<> type;
+    };
+
+#define BOOST_PP_FILENAME_1 \
+    <boost/fusion/container/vector/detail/vector_n_chooser.hpp>
+#define BOOST_PP_ITERATION_LIMITS (1, BOOST_PP_DEC(FUSION_MAX_VECTOR_SIZE))
+#include BOOST_PP_ITERATE()
+
+}}}
+
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Preprocessor vertical repetition code
+//
+///////////////////////////////////////////////////////////////////////////////
+#else // defined(BOOST_PP_IS_ITERATING)
+
+#define N BOOST_PP_ITERATION()
+
+    template <BOOST_PP_ENUM_PARAMS(N, typename T)>
+    struct vector_n_chooser<
+        BOOST_PP_ENUM_PARAMS(N, T)
+        BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_SUB(FUSION_MAX_VECTOR_SIZE, N), void_ BOOST_PP_INTERCEPT)>
+    {
+        typedef BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM_PARAMS(N, T)> type;
+    };
+
+#undef N
+#endif // defined(BOOST_PP_IS_ITERATING)
diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/limits.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/limits.hpp
new file mode 100644
index 0000000..0e7e3a0
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/vector/limits.hpp
@@ -0,0 +1,19 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_VECTOR_LIMITS_07072005_1246)
+#define FUSION_VECTOR_LIMITS_07072005_1246
+
+#if !defined(FUSION_MAX_VECTOR_SIZE)
+# define FUSION_MAX_VECTOR_SIZE 10
+#else
+# if FUSION_MAX_VECTOR_SIZE < 3
+#   undef FUSION_MAX_VECTOR_SIZE
+#   define FUSION_MAX_VECTOR_SIZE 10
+# endif
+#endif
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/vector.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/vector.hpp
new file mode 100644
index 0000000..8eaa6a6
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/vector/vector.hpp
@@ -0,0 +1,151 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_VECTOR_07072005_1244)
+#define FUSION_VECTOR_07072005_1244
+
+#include <boost/fusion/container/vector/vector_fwd.hpp>
+#include <boost/fusion/container/vector/detail/vector_n_chooser.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/mpl/at.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/type_traits/add_const.hpp>
+#include <boost/type_traits/is_base_of.hpp>
+#include <boost/detail/workaround.hpp>
+
+namespace boost { namespace fusion
+{
+    struct void_;
+    struct fusion_sequence_tag;
+
+    template <BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, typename T)>
+    struct vector
+        : sequence_base<vector<BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, T)> >
+    {
+    private:
+
+        typedef typename detail::vector_n_chooser<
+            BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, T)>::type
+        vector_n;
+
+        template <BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, typename U)>
+        friend struct vector;
+
+    public:
+
+        typedef typename vector_n::types types;
+        typedef typename vector_n::fusion_tag fusion_tag;
+        typedef typename vector_n::tag tag;
+        typedef typename vector_n::size size;
+        typedef typename vector_n::category category;
+        typedef typename vector_n::is_view is_view;
+
+        vector()
+            : vec() {}
+
+        template <BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, typename U)>
+        vector(vector<BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, U)> const& rhs)
+            : vec(rhs.vec) {}
+
+        vector(vector const& rhs)
+            : vec(rhs.vec) {}
+
+        template <typename Sequence>
+        vector(Sequence const& rhs)
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1600)
+            : vec(ctor_helper(rhs, is_base_of<vector, Sequence>())) {}
+#else
+            : vec(rhs) {}
+#endif
+
+        //  Expand a couple of forwarding constructors for arguments
+        //  of type (T0), (T0, T1), (T0, T1, T2) etc. Example:
+        //
+        //  vector(
+        //      typename detail::call_param<T0>::type _0
+        //    , typename detail::call_param<T1>::type _1)
+        //    : vec(_0, _1) {}
+        #include <boost/fusion/container/vector/detail/vector_forward_ctor.hpp>
+
+        template <BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, typename U)>
+        vector&
+        operator=(vector<BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, U)> const& rhs)
+        {
+            vec = rhs.vec;
+            return *this;
+        }
+
+        template <typename T>
+        vector&
+        operator=(T const& rhs)
+        {
+            vec = rhs;
+            return *this;
+        }
+
+        template <int N>
+        typename add_reference<
+            typename mpl::at_c<types, N>::type
+        >::type
+        at_impl(mpl::int_<N> index)
+        {
+            return vec.at_impl(index);
+        }
+
+        template <int N>
+        typename add_reference<
+            typename add_const<
+                typename mpl::at_c<types, N>::type
+            >::type
+        >::type
+        at_impl(mpl::int_<N> index) const
+        {
+            return vec.at_impl(index);
+        }
+
+        template <typename I>
+        typename add_reference<
+            typename mpl::at<types, I>::type
+        >::type
+        at_impl(I /*index*/)
+        {
+            return vec.at_impl(mpl::int_<I::value>());
+        }
+
+        template<typename I>
+        typename add_reference<
+            typename add_const<
+                typename mpl::at<types, I>::type
+            >::type
+        >::type
+        at_impl(I /*index*/) const
+        {
+            return vec.at_impl(mpl::int_<I::value>());
+        }
+
+    private:
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1600)
+        static vector_n const&
+        ctor_helper(vector const& rhs, mpl::true_)
+        {
+            return rhs.vec;
+        }
+
+        template <typename T>
+        static T const&
+        ctor_helper(T const& rhs, mpl::false_)
+        {
+            return rhs;
+        }
+#endif
+
+        vector_n vec;
+    };
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/vector10.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/vector10.hpp
new file mode 100644
index 0000000..f1af70d
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/vector/vector10.hpp
@@ -0,0 +1,67 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_VECTOR10_05042005_0257)
+#define FUSION_VECTOR10_05042005_0257
+
+#include <boost/fusion/support/sequence_base.hpp>
+#include <boost/fusion/support/detail/access.hpp>
+#include <boost/fusion/iterator/next.hpp>
+#include <boost/fusion/iterator/deref.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/container/vector/detail/at_impl.hpp>
+#include <boost/fusion/container/vector/detail/value_at_impl.hpp>
+#include <boost/fusion/container/vector/detail/begin_impl.hpp>
+#include <boost/fusion/container/vector/detail/end_impl.hpp>
+
+#include <boost/mpl/void.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/at.hpp>
+#include <boost/mpl/vector/vector10.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/utility/enable_if.hpp>
+
+#include <boost/preprocessor/dec.hpp>
+#include <boost/preprocessor/iteration/iterate.hpp>
+#include <boost/preprocessor/repetition/enum.hpp>
+#include <boost/preprocessor/repetition/enum_shifted.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+
+namespace boost { namespace fusion
+{
+    struct vector_tag;
+    struct fusion_sequence_tag;
+    struct random_access_traversal_tag;
+
+    template <typename Dummy = void>
+    struct vector0 : sequence_base<vector0<Dummy> >
+    {
+        typedef mpl::vector0<> types;
+        typedef vector_tag fusion_tag;
+        typedef fusion_sequence_tag tag; // this gets picked up by MPL
+        typedef mpl::false_ is_view;
+        typedef random_access_traversal_tag category;
+        typedef mpl::int_<0> size;
+
+        vector0() {}
+
+        template<typename Sequence>
+        vector0(Sequence const& /*seq*/)
+        {}
+    };
+
+// expand vector1 to vector10
+#define BOOST_PP_FILENAME_1 <boost/fusion/container/vector/detail/vector_n.hpp>
+#define BOOST_PP_ITERATION_LIMITS (1, 10)
+#include BOOST_PP_ITERATE()
+
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/vector20.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/vector20.hpp
new file mode 100644
index 0000000..be71100
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/vector/vector20.hpp
@@ -0,0 +1,50 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_VECTOR20_05052005_0205)
+#define FUSION_VECTOR20_05052005_0205
+
+#include <boost/fusion/support/sequence_base.hpp>
+#include <boost/fusion/support/detail/access.hpp>
+#include <boost/fusion/iterator/next.hpp>
+#include <boost/fusion/iterator/deref.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/container/vector/detail/at_impl.hpp>
+#include <boost/fusion/container/vector/detail/value_at_impl.hpp>
+#include <boost/fusion/container/vector/detail/begin_impl.hpp>
+#include <boost/fusion/container/vector/detail/end_impl.hpp>
+
+#include <boost/mpl/void.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/at.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/vector/vector20.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/utility/enable_if.hpp>
+
+#include <boost/preprocessor/dec.hpp>
+#include <boost/preprocessor/iteration/iterate.hpp>
+#include <boost/preprocessor/repetition/enum.hpp>
+#include <boost/preprocessor/repetition/enum_shifted.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+
+namespace boost { namespace fusion
+{
+    struct vector_tag;
+    struct fusion_sequence_tag;
+    struct random_access_traversal_tag;
+
+// expand vector11 to vector20
+#define BOOST_PP_FILENAME_1 <boost/fusion/container/vector/detail/vector_n.hpp>
+#define BOOST_PP_ITERATION_LIMITS (11, 20)
+#include BOOST_PP_ITERATE()
+
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/vector30.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/vector30.hpp
new file mode 100644
index 0000000..efbe929
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/vector/vector30.hpp
@@ -0,0 +1,50 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_VECTOR30_05052005_0206)
+#define FUSION_VECTOR30_05052005_0206
+
+#include <boost/fusion/support/sequence_base.hpp>
+#include <boost/fusion/support/detail/access.hpp>
+#include <boost/fusion/iterator/next.hpp>
+#include <boost/fusion/iterator/deref.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/container/vector/detail/at_impl.hpp>
+#include <boost/fusion/container/vector/detail/value_at_impl.hpp>
+#include <boost/fusion/container/vector/detail/begin_impl.hpp>
+#include <boost/fusion/container/vector/detail/end_impl.hpp>
+
+#include <boost/mpl/void.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/at.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/vector/vector30.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/utility/enable_if.hpp>
+
+#include <boost/preprocessor/dec.hpp>
+#include <boost/preprocessor/iteration/iterate.hpp>
+#include <boost/preprocessor/repetition/enum.hpp>
+#include <boost/preprocessor/repetition/enum_shifted.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+
+namespace boost { namespace fusion
+{
+    struct vector_tag;
+    struct fusion_sequence_tag;
+    struct random_access_traversal_tag;
+ 
+// expand vector21 to vector30
+#define BOOST_PP_FILENAME_1 <boost/fusion/container/vector/detail/vector_n.hpp>
+#define BOOST_PP_ITERATION_LIMITS (21, 30)
+#include BOOST_PP_ITERATE()
+
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/vector40.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/vector40.hpp
new file mode 100644
index 0000000..b72a23c
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/vector/vector40.hpp
@@ -0,0 +1,50 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_VECTOR40_05052005_0208)
+#define FUSION_VECTOR40_05052005_0208
+
+#include <boost/fusion/support/sequence_base.hpp>
+#include <boost/fusion/support/detail/access.hpp>
+#include <boost/fusion/iterator/next.hpp>
+#include <boost/fusion/iterator/deref.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/container/vector/detail/at_impl.hpp>
+#include <boost/fusion/container/vector/detail/value_at_impl.hpp>
+#include <boost/fusion/container/vector/detail/begin_impl.hpp>
+#include <boost/fusion/container/vector/detail/end_impl.hpp>
+
+#include <boost/mpl/void.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/at.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/vector/vector40.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/utility/enable_if.hpp>
+
+#include <boost/preprocessor/dec.hpp>
+#include <boost/preprocessor/iteration/iterate.hpp>
+#include <boost/preprocessor/repetition/enum.hpp>
+#include <boost/preprocessor/repetition/enum_shifted.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+
+namespace boost { namespace fusion
+{
+    struct vector_tag;
+    struct fusion_sequence_tag;
+    struct random_access_traversal_tag;
+
+// expand vector31 to vector40
+#define BOOST_PP_FILENAME_1 <boost/fusion/container/vector/detail/vector_n.hpp>
+#define BOOST_PP_ITERATION_LIMITS (31, 40)
+#include BOOST_PP_ITERATE()
+
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/vector50.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/vector50.hpp
new file mode 100644
index 0000000..ab8515d
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/vector/vector50.hpp
@@ -0,0 +1,50 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_VECTOR50_05052005_0207)
+#define FUSION_VECTOR50_05052005_0207
+
+#include <boost/fusion/support/sequence_base.hpp>
+#include <boost/fusion/support/detail/access.hpp>
+#include <boost/fusion/iterator/next.hpp>
+#include <boost/fusion/iterator/deref.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/container/vector/detail/at_impl.hpp>
+#include <boost/fusion/container/vector/detail/value_at_impl.hpp>
+#include <boost/fusion/container/vector/detail/begin_impl.hpp>
+#include <boost/fusion/container/vector/detail/end_impl.hpp>
+
+#include <boost/mpl/void.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/at.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/vector/vector50.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/utility/enable_if.hpp>
+
+#include <boost/preprocessor/dec.hpp>
+#include <boost/preprocessor/iteration/iterate.hpp>
+#include <boost/preprocessor/repetition/enum.hpp>
+#include <boost/preprocessor/repetition/enum_shifted.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+
+namespace boost { namespace fusion
+{
+    struct vector_tag;
+    struct fusion_sequence_tag;
+    struct random_access_traversal_tag;
+
+// expand vector41 to vector50
+#define BOOST_PP_FILENAME_1 <boost/fusion/container/vector/detail/vector_n.hpp>
+#define BOOST_PP_ITERATION_LIMITS (41, 50)
+#include BOOST_PP_ITERATE()
+
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/vector_fwd.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/vector_fwd.hpp
new file mode 100644
index 0000000..2c4848d
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/vector/vector_fwd.hpp
@@ -0,0 +1,25 @@
+/*=============================================================================
+    Copyright (c) 1999-2003 Jaakko Jarvi
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_VECTOR_FORWARD_07072005_0125)
+#define FUSION_VECTOR_FORWARD_07072005_0125
+
+#include <boost/fusion/container/vector/limits.hpp>
+#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
+
+namespace boost { namespace fusion
+{
+    struct void_;
+
+    template <
+        BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
+            FUSION_MAX_VECTOR_SIZE, typename T, void_)
+    >
+    struct vector;
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/container/vector/vector_iterator.hpp b/3rdParty/Boost/src/boost/fusion/container/vector/vector_iterator.hpp
new file mode 100644
index 0000000..8faa13a
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/container/vector/vector_iterator.hpp
@@ -0,0 +1,50 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_VECTOR_ITERATOR_05042005_0635)
+#define FUSION_VECTOR_ITERATOR_05042005_0635
+
+#include <boost/fusion/support/iterator_base.hpp>
+#include <boost/fusion/container/vector/detail/deref_impl.hpp>
+#include <boost/fusion/container/vector/detail/value_of_impl.hpp>
+#include <boost/fusion/container/vector/detail/next_impl.hpp>
+#include <boost/fusion/container/vector/detail/prior_impl.hpp>
+#include <boost/fusion/container/vector/detail/equal_to_impl.hpp>
+#include <boost/fusion/container/vector/detail/distance_impl.hpp>
+#include <boost/fusion/container/vector/detail/advance_impl.hpp>
+#include <boost/type_traits/add_const.hpp>
+#include <boost/mpl/int.hpp>
+
+namespace boost { namespace fusion
+{
+    struct vector_iterator_tag;
+    struct random_access_traversal_tag;
+
+    template <typename Vector, int N>
+    struct vector_iterator_identity;
+
+    template <typename Vector, int N>
+    struct vector_iterator : iterator_base<vector_iterator<Vector, N> >
+    {
+        typedef mpl::int_<N> index;
+        typedef Vector vector;
+        typedef vector_iterator_tag fusion_tag;
+        typedef random_access_traversal_tag category;
+        typedef vector_iterator_identity<
+            typename add_const<Vector>::type, N> identity;
+
+        vector_iterator(Vector& in_vec)
+            : vec(in_vec) {}
+        Vector& vec;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        vector_iterator& operator= (vector_iterator const&);
+    };
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/include/any.hpp b/3rdParty/Boost/src/boost/fusion/include/any.hpp
new file mode 100644
index 0000000..e5c7306
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/include/any.hpp
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_INCLUDE_ANY)
+#define FUSION_INCLUDE_ANY
+
+#include <boost/fusion/algorithm/query/any.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/include/as_list.hpp b/3rdParty/Boost/src/boost/fusion/include/as_list.hpp
new file mode 100644
index 0000000..6c477d2
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/include/as_list.hpp
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_INCLUDE_AS_LIST)
+#define FUSION_INCLUDE_AS_LIST
+
+#include <boost/fusion/container/list/convert.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/include/as_vector.hpp b/3rdParty/Boost/src/boost/fusion/include/as_vector.hpp
new file mode 100644
index 0000000..4c9b39d
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/include/as_vector.hpp
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_INCLUDE_AS_VECTOR)
+#define FUSION_INCLUDE_AS_VECTOR
+
+#include <boost/fusion/container/vector/convert.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/include/at.hpp b/3rdParty/Boost/src/boost/fusion/include/at.hpp
new file mode 100644
index 0000000..eacd7bb
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/include/at.hpp
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_INCLUDE_AT)
+#define FUSION_INCLUDE_AT
+
+#include <boost/fusion/sequence/intrinsic/at.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/include/begin.hpp b/3rdParty/Boost/src/boost/fusion/include/begin.hpp
new file mode 100644
index 0000000..53361fb
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/include/begin.hpp
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_INCLUDE_BEGIN)
+#define FUSION_INCLUDE_BEGIN
+
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/include/category_of.hpp b/3rdParty/Boost/src/boost/fusion/include/category_of.hpp
new file mode 100644
index 0000000..c390686
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/include/category_of.hpp
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_INCLUDE_CATEGORY_OF)
+#define FUSION_INCLUDE_CATEGORY_OF
+
+#include <boost/fusion/support/category_of.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/include/cons.hpp b/3rdParty/Boost/src/boost/fusion/include/cons.hpp
new file mode 100644
index 0000000..853eb6d
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/include/cons.hpp
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_INCLUDE_CONS)
+#define FUSION_INCLUDE_CONS
+
+#include <boost/fusion/container/list/cons.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/include/end.hpp b/3rdParty/Boost/src/boost/fusion/include/end.hpp
new file mode 100644
index 0000000..61d65de
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/include/end.hpp
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_INCLUDE_END)
+#define FUSION_INCLUDE_END
+
+#include <boost/fusion/sequence/intrinsic/end.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/include/filter_if.hpp b/3rdParty/Boost/src/boost/fusion/include/filter_if.hpp
new file mode 100644
index 0000000..31fdec5
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/include/filter_if.hpp
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_INCLUDE_FILTER_IF)
+#define FUSION_INCLUDE_FILTER_IF
+
+#include <boost/fusion/algorithm/transformation/filter_if.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/include/fold.hpp b/3rdParty/Boost/src/boost/fusion/include/fold.hpp
new file mode 100644
index 0000000..40bf3a7
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/include/fold.hpp
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_INCLUDE_FOLD)
+#define FUSION_INCLUDE_FOLD
+
+#include <boost/fusion/algorithm/iteration/fold.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/include/for_each.hpp b/3rdParty/Boost/src/boost/fusion/include/for_each.hpp
new file mode 100644
index 0000000..b20578e
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/include/for_each.hpp
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_INCLUDE_FOR_EACH)
+#define FUSION_INCLUDE_FOR_EACH
+
+#include <boost/fusion/algorithm/iteration/for_each.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/include/intrinsic.hpp b/3rdParty/Boost/src/boost/fusion/include/intrinsic.hpp
new file mode 100644
index 0000000..c9d7871
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/include/intrinsic.hpp
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_INCLUDE_INTRINSIC)
+#define FUSION_INCLUDE_INTRINSIC
+
+#include <boost/fusion/sequence/intrinsic.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/include/is_sequence.hpp b/3rdParty/Boost/src/boost/fusion/include/is_sequence.hpp
new file mode 100644
index 0000000..a7f2b4d
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/include/is_sequence.hpp
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_INCLUDE_IS_SEQUENCE)
+#define FUSION_INCLUDE_IS_SEQUENCE
+
+#include <boost/fusion/support/is_sequence.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/include/is_view.hpp b/3rdParty/Boost/src/boost/fusion/include/is_view.hpp
new file mode 100644
index 0000000..5ebc347
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/include/is_view.hpp
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_INCLUDE_IS_VIEW)
+#define FUSION_INCLUDE_IS_VIEW
+
+#include <boost/fusion/support/is_view.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/include/iterator_base.hpp b/3rdParty/Boost/src/boost/fusion/include/iterator_base.hpp
new file mode 100644
index 0000000..bbd3532
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/include/iterator_base.hpp
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_INCLUDE_ITERATOR_BASE)
+#define FUSION_INCLUDE_ITERATOR_BASE
+
+#include <boost/fusion/support/iterator_base.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/include/make_vector.hpp b/3rdParty/Boost/src/boost/fusion/include/make_vector.hpp
new file mode 100644
index 0000000..b165ba3
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/include/make_vector.hpp
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_INCLUDE_MAKE_VECTOR)
+#define FUSION_INCLUDE_MAKE_VECTOR
+
+#include <boost/fusion/container/generation/make_vector.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/include/mpl.hpp b/3rdParty/Boost/src/boost/fusion/include/mpl.hpp
new file mode 100644
index 0000000..8a1cbfd
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/include/mpl.hpp
@@ -0,0 +1,13 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_INCLUDE_MPL)
+#define FUSION_INCLUDE_MPL
+
+#include <boost/fusion/adapted/mpl.hpp>
+#include <boost/fusion/mpl.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/include/next.hpp b/3rdParty/Boost/src/boost/fusion/include/next.hpp
new file mode 100644
index 0000000..6188c65
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/include/next.hpp
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_INCLUDE_NEXT)
+#define FUSION_INCLUDE_NEXT
+
+#include <boost/fusion/iterator/next.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/include/pop_back.hpp b/3rdParty/Boost/src/boost/fusion/include/pop_back.hpp
new file mode 100644
index 0000000..b5a808c
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/include/pop_back.hpp
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_INCLUDE_POP_BACK)
+#define FUSION_INCLUDE_POP_BACK
+
+#include <boost/fusion/algorithm/transformation/pop_back.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/include/pop_front.hpp b/3rdParty/Boost/src/boost/fusion/include/pop_front.hpp
new file mode 100644
index 0000000..7df977e
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/include/pop_front.hpp
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_INCLUDE_POP_FRONT)
+#define FUSION_INCLUDE_POP_FRONT
+
+#include <boost/fusion/algorithm/transformation/pop_front.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/include/prior.hpp b/3rdParty/Boost/src/boost/fusion/include/prior.hpp
new file mode 100644
index 0000000..b18a55a
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/include/prior.hpp
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_INCLUDE_PRIOR)
+#define FUSION_INCLUDE_PRIOR
+
+#include <boost/fusion/iterator/prior.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/include/push_back.hpp b/3rdParty/Boost/src/boost/fusion/include/push_back.hpp
new file mode 100644
index 0000000..4908e87
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/include/push_back.hpp
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_INCLUDE_PUSH_BACK)
+#define FUSION_INCLUDE_PUSH_BACK
+
+#include <boost/fusion/algorithm/transformation/push_back.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/include/push_front.hpp b/3rdParty/Boost/src/boost/fusion/include/push_front.hpp
new file mode 100644
index 0000000..5a9cfa5
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/include/push_front.hpp
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_INCLUDE_PUSH_FRONT)
+#define FUSION_INCLUDE_PUSH_FRONT
+
+#include <boost/fusion/algorithm/transformation/push_front.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/include/reverse.hpp b/3rdParty/Boost/src/boost/fusion/include/reverse.hpp
new file mode 100644
index 0000000..3f9fd78
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/include/reverse.hpp
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_INCLUDE_REVERSE)
+#define FUSION_INCLUDE_REVERSE
+
+#include <boost/fusion/algorithm/transformation/reverse.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/include/single_view.hpp b/3rdParty/Boost/src/boost/fusion/include/single_view.hpp
new file mode 100644
index 0000000..a95d04a
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/include/single_view.hpp
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_INCLUDE_SINGLE_VIEW)
+#define FUSION_INCLUDE_SINGLE_VIEW
+
+#include <boost/fusion/view/single_view.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/include/size.hpp b/3rdParty/Boost/src/boost/fusion/include/size.hpp
new file mode 100644
index 0000000..02d2a00
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/include/size.hpp
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_INCLUDE_SIZE)
+#define FUSION_INCLUDE_SIZE
+
+#include <boost/fusion/sequence/intrinsic/size.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/include/tag_of_fwd.hpp b/3rdParty/Boost/src/boost/fusion/include/tag_of_fwd.hpp
new file mode 100644
index 0000000..fbc7ebe
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/include/tag_of_fwd.hpp
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_INCLUDE_TAG_OF_FWD)
+#define FUSION_INCLUDE_TAG_OF_FWD
+
+#include <boost/fusion/support/tag_of_fwd.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/include/transform.hpp b/3rdParty/Boost/src/boost/fusion/include/transform.hpp
new file mode 100644
index 0000000..2b66c4f
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/include/transform.hpp
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_INCLUDE_TRANSFORM)
+#define FUSION_INCLUDE_TRANSFORM
+
+#include <boost/fusion/algorithm/transformation/transform.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/include/transform_view.hpp b/3rdParty/Boost/src/boost/fusion/include/transform_view.hpp
new file mode 100644
index 0000000..3aceaae
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/include/transform_view.hpp
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_INCLUDE_TRANSFORM_VIEW)
+#define FUSION_INCLUDE_TRANSFORM_VIEW
+
+#include <boost/fusion/view/transform_view.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/include/value_at.hpp b/3rdParty/Boost/src/boost/fusion/include/value_at.hpp
new file mode 100644
index 0000000..da5745d
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/include/value_at.hpp
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_INCLUDE_VALUE_AT)
+#define FUSION_INCLUDE_VALUE_AT
+
+#include <boost/fusion/sequence/intrinsic/value_at.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/include/value_of.hpp b/3rdParty/Boost/src/boost/fusion/include/value_of.hpp
new file mode 100644
index 0000000..4f2bef9
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/include/value_of.hpp
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_INCLUDE_VALUE_OF)
+#define FUSION_INCLUDE_VALUE_OF
+
+#include <boost/fusion/iterator/value_of.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/include/vector.hpp b/3rdParty/Boost/src/boost/fusion/include/vector.hpp
new file mode 100644
index 0000000..689c2f8
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/include/vector.hpp
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_INCLUDE_VECTOR)
+#define FUSION_INCLUDE_VECTOR
+
+#include <boost/fusion/container/vector.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/include/void.hpp b/3rdParty/Boost/src/boost/fusion/include/void.hpp
new file mode 100644
index 0000000..b3e9cf2
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/include/void.hpp
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_INCLUDE_VOID)
+#define FUSION_INCLUDE_VOID
+
+#include <boost/fusion/support/void.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/iterator/advance.hpp b/3rdParty/Boost/src/boost/fusion/iterator/advance.hpp
new file mode 100644
index 0000000..56ed60b
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/iterator/advance.hpp
@@ -0,0 +1,92 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_ADVANCE_09172005_1146)
+#define FUSION_ADVANCE_09172005_1146
+
+#include <boost/fusion/iterator/detail/advance.hpp>
+#include <boost/fusion/support/category_of.hpp>
+
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/fusion/support/tag_of.hpp>
+
+namespace boost { namespace fusion
+{
+    struct random_access_traversal_tag;
+        
+    // Special tags:
+    struct iterator_facade_tag; // iterator facade tag
+    struct boost_array_iterator_tag; // boost::array iterator tag
+    struct mpl_iterator_tag; // mpl sequence iterator tag
+    struct std_pair_iterator_tag; // std::pair iterator tag
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct advance_impl
+        {
+            // default implementation
+            template <typename Iterator, typename N>
+            struct apply :
+                mpl::if_c<
+                    (N::value > 0)
+                  , advance_detail::forward<Iterator, N::value>
+                  , advance_detail::backward<Iterator, N::value>
+                >::type
+            {
+                BOOST_MPL_ASSERT_NOT((traits::is_random_access<Iterator>));
+            };
+        };
+
+        template <>
+        struct advance_impl<iterator_facade_tag>
+        {
+            template <typename Iterator, typename N>
+            struct apply : Iterator::template advance<Iterator, N> {};
+        };
+
+        template <>
+        struct advance_impl<boost_array_iterator_tag>;
+
+        template <>
+        struct advance_impl<mpl_iterator_tag>;
+
+        template <>
+        struct advance_impl<std_pair_iterator_tag>;
+    }
+    
+    namespace result_of
+    {
+        template <typename Iterator, int N>
+        struct advance_c
+            : extension::advance_impl<typename detail::tag_of<Iterator>::type>::template apply<Iterator, mpl::int_<N> >
+        {};
+
+        template <typename Iterator, typename N>
+        struct advance
+            : extension::advance_impl<typename detail::tag_of<Iterator>::type>::template apply<Iterator, N>
+        {};
+    }
+
+    template <int N, typename Iterator>
+    inline typename result_of::advance_c<Iterator, N>::type const
+    advance_c(Iterator const& i)
+    {
+        return result_of::advance_c<Iterator, N>::call(i);
+    }
+
+    template<typename N, typename Iterator>
+    inline typename result_of::advance<Iterator, N>::type const
+    advance(Iterator const& i)
+    {
+        return result_of::advance<Iterator, N>::call(i);
+    }
+
+}} // namespace boost::fusion
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/iterator/deref.hpp b/3rdParty/Boost/src/boost/fusion/iterator/deref.hpp
new file mode 100644
index 0000000..2d5f04e
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/iterator/deref.hpp
@@ -0,0 +1,72 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_DEREF_05042005_1019)
+#define FUSION_DEREF_05042005_1019
+
+#include <boost/fusion/support/iterator_base.hpp>
+#include <boost/fusion/support/tag_of.hpp>
+
+namespace boost { namespace fusion
+{
+    // Special tags:
+    struct iterator_facade_tag; // iterator facade tag
+    struct boost_array_iterator_tag; // boost::array iterator tag
+    struct mpl_iterator_tag; // mpl sequence iterator tag
+    struct std_pair_iterator_tag; // std::pair iterator tag
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct deref_impl
+        {
+            template <typename Iterator>
+            struct apply {};
+        };
+
+        template <>
+        struct deref_impl<iterator_facade_tag>
+        {
+            template <typename Iterator>
+            struct apply : Iterator::template deref<Iterator> {};
+       };
+
+        template <>
+        struct deref_impl<boost_array_iterator_tag>;
+
+        template <>
+        struct deref_impl<mpl_iterator_tag>;
+
+        template <>
+        struct deref_impl<std_pair_iterator_tag>;
+    }
+
+    namespace result_of
+    {
+        template <typename Iterator>
+        struct deref
+            : extension::deref_impl<typename detail::tag_of<Iterator>::type>::
+                template apply<Iterator>
+        {};
+    }
+
+    template <typename Iterator>
+    typename result_of::deref<Iterator>::type
+    deref(Iterator const& i)
+    {
+        typedef result_of::deref<Iterator> deref_meta;
+        return deref_meta::call(i);
+    }
+
+    template <typename Iterator>
+    typename result_of::deref<Iterator>::type
+    operator*(iterator_base<Iterator> const& i)
+    {
+        return fusion::deref(i.cast());
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/iterator/deref_data.hpp b/3rdParty/Boost/src/boost/fusion/iterator/deref_data.hpp
new file mode 100644
index 0000000..09ba439
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/iterator/deref_data.hpp
@@ -0,0 +1,49 @@
+/*=============================================================================
+    Copyright (c) 2009 Christopher Schmidt
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ITERATOR_DEREF_DATA_HPP
+#define BOOST_FUSION_ITERATOR_DEREF_DATA_HPP
+
+#include <boost/fusion/support/tag_of.hpp>
+
+namespace boost { namespace fusion
+{
+    struct iterator_facade_tag;
+
+    namespace extension
+    {
+        template <typename>
+        struct deref_data_impl;
+
+        template <>
+        struct deref_data_impl<iterator_facade_tag>
+        {
+            template <typename It>
+            struct apply
+              : It::template deref_data<It>
+            {};
+       };
+    }
+
+    namespace result_of
+    {
+        template <typename It>
+        struct deref_data
+          : extension::deref_data_impl<typename traits::tag_of<It>::type>::
+                template apply<It>
+        {};
+    }
+
+    template <typename It>
+    typename result_of::deref_data<It>::type
+    deref_data(It const& it)
+    {
+        return result_of::deref_data<It>::call(it);
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/iterator/detail/adapt_deref_traits.hpp b/3rdParty/Boost/src/boost/fusion/iterator/detail/adapt_deref_traits.hpp
new file mode 100644
index 0000000..d683c28
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/iterator/detail/adapt_deref_traits.hpp
@@ -0,0 +1,34 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_ADAPT_DEREF_TRAITS_05062005_0900)
+#define FUSION_ADAPT_DEREF_TRAITS_05062005_0900
+
+#include <boost/fusion/iterator/deref.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+    struct adapt_deref_traits
+    {
+        template <typename Iterator>
+        struct apply
+        {
+            typedef typename
+                result_of::deref<typename Iterator::first_type>::type
+            type;
+
+            static type
+            call(Iterator const& i)
+            {
+                return *i.first;
+            }
+        };
+    };
+}}}
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/iterator/detail/adapt_value_traits.hpp b/3rdParty/Boost/src/boost/fusion/iterator/detail/adapt_value_traits.hpp
new file mode 100644
index 0000000..a7d72f5
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/iterator/detail/adapt_value_traits.hpp
@@ -0,0 +1,28 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_ADAPT_VALUE_TRAITS_05062005_0859)
+#define FUSION_ADAPT_VALUE_TRAITS_05062005_0859
+
+#include <boost/fusion/iterator/value_of.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+    struct adapt_value_traits
+    {
+        template <typename Iterator>
+        struct apply
+        {
+            typedef typename
+                result_of::value_of<typename Iterator::first_type>::type
+            type;
+        };
+    };
+}}}
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/iterator/detail/advance.hpp b/3rdParty/Boost/src/boost/fusion/iterator/detail/advance.hpp
new file mode 100644
index 0000000..900608f
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/iterator/detail/advance.hpp
@@ -0,0 +1,102 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_ADVANCE_09172005_1149)
+#define FUSION_ADVANCE_09172005_1149
+
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/fusion/iterator/next.hpp>
+#include <boost/fusion/iterator/prior.hpp>
+
+namespace boost { namespace fusion { namespace advance_detail
+{
+    // Default advance implementation, perform next(i)
+    // or prior(i) N times.
+
+    template <typename Iterator, int N>
+    struct forward;
+
+    template <typename Iterator, int N>
+    struct next_forward
+    {
+        typedef typename
+            forward<
+                typename result_of::next<Iterator>::type
+              , N-1
+            >::type
+        type;
+    };
+
+    template <typename Iterator, int N>
+    struct forward
+    {
+        typedef typename
+            mpl::eval_if_c<
+                (N == 0)
+              , mpl::identity<Iterator>
+              , next_forward<Iterator, N>
+            >::type
+        type;
+
+        static type const&
+        call(type const& i)
+        {
+            return i;
+        }
+
+        template <typename I>
+        static type
+        call(I const& i)
+        {
+            return call(fusion::next(i));
+        }
+    };
+
+    template <typename Iterator, int N>
+    struct backward;
+
+    template <typename Iterator, int N>
+    struct next_backward
+    {
+        typedef typename
+            backward<
+                typename result_of::prior<Iterator>::type
+              , N+1
+            >::type
+        type;
+    };
+
+    template <typename Iterator, int N>
+    struct backward
+    {
+        typedef typename
+            mpl::eval_if_c<
+                (N == 0)
+              , mpl::identity<Iterator>
+              , next_backward<Iterator, N>
+            >::type
+        type;
+
+        static type const&
+        call(type const& i)
+        {
+            return i;
+        }
+
+        template <typename I>
+        static type
+        call(I const& i)
+        {
+            return call(fusion::prior(i));
+        }
+    };
+
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/iterator/detail/distance.hpp b/3rdParty/Boost/src/boost/fusion/iterator/detail/distance.hpp
new file mode 100644
index 0000000..e4c0a5e
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/iterator/detail/distance.hpp
@@ -0,0 +1,64 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_DISTANCE_09172005_0730)
+#define FUSION_DISTANCE_09172005_0730
+
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/next.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/fusion/iterator/next.hpp>
+#include <boost/fusion/iterator/equal_to.hpp>
+
+namespace boost { namespace fusion { namespace distance_detail
+{
+    // Default distance implementation, linear
+    // search for the Last iterator.
+
+    template <typename First, typename Last>
+    struct linear_distance;
+
+    template <typename First, typename Last>
+    struct next_distance
+    {
+        typedef typename 
+            mpl::next<
+                typename linear_distance<
+                    typename result_of::next<First>::type
+                  , Last
+                >::type
+            >::type 
+        type;
+    };
+
+    template <typename First, typename Last>
+    struct linear_distance
+        : mpl::eval_if<
+            result_of::equal_to<First, Last>
+          , mpl::identity<mpl::int_<0> >
+          , next_distance<First, Last>
+        >::type
+    {
+        typedef typename
+            mpl::eval_if<
+                result_of::equal_to<First, Last>
+              , mpl::identity<mpl::int_<0> >
+              , next_distance<First, Last>
+            >::type
+        type;
+
+        static type
+        call(First const&, Last const&)
+        {
+            return type();
+        }
+    };
+
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/iterator/distance.hpp b/3rdParty/Boost/src/boost/fusion/iterator/distance.hpp
new file mode 100644
index 0000000..0cfa414
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/iterator/distance.hpp
@@ -0,0 +1,81 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_DISTANCE_09172005_0721)
+#define FUSION_DISTANCE_09172005_0721
+
+#include <boost/fusion/iterator/detail/distance.hpp>
+#include <boost/fusion/support/category_of.hpp>
+
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+#include <boost/fusion/support/tag_of.hpp>
+
+namespace boost { namespace fusion
+{
+    struct random_access_traversal_tag;
+
+    // Special tags:
+    struct iterator_facade_tag; // iterator facade tag
+    struct boost_array_iterator_tag; // boost::array iterator tag
+    struct mpl_iterator_tag; // mpl sequence iterator tag
+    struct std_pair_iterator_tag; // std::pair iterator tag
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct distance_impl
+        {
+            // default implementation
+            template <typename First, typename Last>
+            struct apply : distance_detail::linear_distance<First, Last> 
+            {
+                BOOST_MPL_ASSERT_NOT((traits::is_random_access<First>));
+                BOOST_MPL_ASSERT_NOT((traits::is_random_access<Last>));
+            };
+        };
+
+        template <>
+        struct distance_impl<iterator_facade_tag>
+        {
+            template <typename First, typename Last>
+            struct apply : First::template distance<First, Last> {};
+        };
+
+        template <>
+        struct distance_impl<boost_array_iterator_tag>;
+
+        template <>
+        struct distance_impl<mpl_iterator_tag>;
+
+        template <>
+        struct distance_impl<std_pair_iterator_tag>;
+    }
+
+    namespace result_of
+    {
+        template <typename First, typename Last>
+        struct distance
+          : extension::distance_impl<typename detail::tag_of<First>::type>::
+                template apply<First, Last>
+        {
+            typedef typename extension::distance_impl<typename detail::tag_of<First>::type>:: 
+            template apply<First, Last>::type distance_application;
+            BOOST_STATIC_CONSTANT(int, value = distance_application::value);
+        };
+    }
+        
+    template <typename First, typename Last>
+    inline typename result_of::distance<First, Last>::type
+    distance(First const& a, Last const& b)
+    {
+        return result_of::distance<First, Last>::call(a,b);
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/iterator/equal_to.hpp b/3rdParty/Boost/src/boost/fusion/iterator/equal_to.hpp
new file mode 100644
index 0000000..a038741
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/iterator/equal_to.hpp
@@ -0,0 +1,93 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_EQUAL_TO_05052005_1208)
+#define FUSION_EQUAL_TO_05052005_1208
+
+#include <boost/type_traits/is_same.hpp>
+#include <boost/fusion/support/tag_of.hpp>
+#include <boost/type_traits/add_const.hpp>
+#include <boost/fusion/support/is_iterator.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/utility/enable_if.hpp>
+
+namespace boost { namespace fusion
+{
+    // Special tags:
+    struct iterator_facade_tag; // iterator facade tag
+    struct boost_array_iterator_tag; // boost::array iterator tag
+    struct mpl_iterator_tag; // mpl sequence iterator tag
+    struct std_pair_iterator_tag; // std::pair iterator tag
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct equal_to_impl
+        {
+            // default implementation
+            template <typename I1, typename I2>
+            struct apply
+                : is_same<typename add_const<I1>::type, typename add_const<I2>::type>
+            {};
+        };
+
+        template <>
+        struct equal_to_impl<iterator_facade_tag>
+        {
+            template <typename I1, typename I2>
+            struct apply : I1::template equal_to<I1, I2> {};
+        };
+
+        template <>
+        struct equal_to_impl<boost_array_iterator_tag>;
+
+        template <>
+        struct equal_to_impl<mpl_iterator_tag>;
+
+        template <>
+        struct equal_to_impl<std_pair_iterator_tag>;
+    }
+
+    namespace result_of
+    {
+        template <typename I1, typename I2>
+        struct equal_to
+            : extension::equal_to_impl<typename detail::tag_of<I1>::type>::
+                template apply<I1, I2>
+        {};
+    }
+
+    namespace iterator_operators
+    {
+        template <typename Iter1, typename Iter2>
+        inline typename 
+        enable_if<
+            mpl::and_<is_fusion_iterator<Iter1>, is_fusion_iterator<Iter2> >
+            , bool
+            >::type
+        operator==(Iter1 const&, Iter2 const&)
+        {
+            return result_of::equal_to<Iter1, Iter2>::value;
+        }
+
+        template <typename Iter1, typename Iter2>
+        inline typename 
+        enable_if<
+            mpl::and_<is_fusion_iterator<Iter1>, is_fusion_iterator<Iter2> >
+            , bool
+            >::type
+        operator!=(Iter1 const&, Iter2 const&)
+        {
+            return !result_of::equal_to<Iter1, Iter2>::value;
+        }
+    }
+
+    using iterator_operators::operator==;
+    using iterator_operators::operator!=;
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/iterator/iterator_facade.hpp b/3rdParty/Boost/src/boost/fusion/iterator/iterator_facade.hpp
new file mode 100644
index 0000000..fa74f8d
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/iterator/iterator_facade.hpp
@@ -0,0 +1,57 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_ITERATOR_FACADE_09252006_1011)
+#define FUSION_ITERATOR_FACADE_09252006_1011
+
+#include <boost/fusion/support/iterator_base.hpp>
+#include <boost/fusion/iterator/detail/advance.hpp>
+#include <boost/fusion/iterator/detail/distance.hpp>
+#include <boost/fusion/support/category_of.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/mpl/assert.hpp>
+
+namespace boost { namespace fusion
+{
+    struct iterator_facade_tag;
+
+    template <typename Derived, typename Category>
+    struct iterator_facade : iterator_base<Derived>
+    {
+        typedef iterator_facade_tag fusion_tag;
+        typedef Derived derived_type;
+        typedef Category category;
+
+        // default implementation
+        template <typename I1, typename I2>
+        struct equal_to // default implementation
+            : is_same<
+                typename I1::derived_type
+              , typename I2::derived_type
+            >
+        {};
+
+        // default implementation
+        template <typename Iterator, typename N>
+        struct advance :
+            mpl::if_c<
+                (N::value > 0)
+              , advance_detail::forward<Iterator, N::value>
+              , advance_detail::backward<Iterator, N::value>
+            >::type
+        {
+            BOOST_MPL_ASSERT_NOT((traits::is_random_access<Iterator>));
+        };
+
+        // default implementation
+        template <typename First, typename Last>
+        struct distance :
+            distance_detail::linear_distance<First, Last>
+        {};
+    };
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/iterator/key_of.hpp b/3rdParty/Boost/src/boost/fusion/iterator/key_of.hpp
new file mode 100644
index 0000000..64c2f86
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/iterator/key_of.hpp
@@ -0,0 +1,42 @@
+/*=============================================================================
+    Copyright (c) 2009 Christopher Schmidt
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ITERATOR_KEY_OF_HPP
+#define BOOST_FUSION_ITERATOR_KEY_OF_HPP
+
+#include <boost/fusion/support/tag_of.hpp>
+
+namespace boost { namespace fusion
+{
+    struct iterator_facade_tag;
+
+    namespace extension
+    {
+        template <typename>
+        struct key_of_impl;
+
+        template <>
+        struct key_of_impl<iterator_facade_tag>
+        {
+            template <typename It>
+            struct apply
+              : It::template key_of<It>
+            {};
+        };
+    }
+
+    namespace result_of
+    {
+        template <typename It>
+        struct key_of
+          : extension::key_of_impl<typename traits::tag_of<It>::type>::
+                template apply<It>
+        {};
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/iterator/mpl.hpp b/3rdParty/Boost/src/boost/fusion/iterator/mpl.hpp
new file mode 100644
index 0000000..2709bd2
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/iterator/mpl.hpp
@@ -0,0 +1,13 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_ITERATOR_MPL_10022005_0557)
+#define FUSION_ITERATOR_MPL_10022005_0557
+
+#include <boost/fusion/iterator/mpl/convert_iterator.hpp>
+#include <boost/fusion/iterator/mpl/fusion_iterator.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/iterator/mpl/convert_iterator.hpp b/3rdParty/Boost/src/boost/fusion/iterator/mpl/convert_iterator.hpp
new file mode 100644
index 0000000..6cec510
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/iterator/mpl/convert_iterator.hpp
@@ -0,0 +1,58 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_CONVERT_ITERATOR_05062005_1218)
+#define FUSION_CONVERT_ITERATOR_05062005_1218
+
+#include <boost/fusion/support/is_iterator.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace fusion
+{
+    template <typename Iterator>
+    struct mpl_iterator; // forward declaration
+
+    //  Test T. If it is a fusion iterator, return a reference to it.
+    //  else, assume it is an mpl iterator.
+
+    template <typename T>
+    struct convert_iterator
+    {
+        typedef typename
+            mpl::if_<
+                is_fusion_iterator<T>
+              , T
+              , mpl_iterator<T>
+            >::type
+        type;
+
+        static T const&
+        call(T const& x, mpl::true_)
+        {
+            return x;
+        }
+
+        static mpl_iterator<T>
+        call(T const& /*x*/, mpl::false_)
+        {
+            return mpl_iterator<T>();
+        }
+
+        static typename
+            mpl::if_<
+                is_fusion_iterator<T>
+              , T const&
+              , mpl_iterator<T>
+            >::type
+        call(T const& x)
+        {
+            return call(x, is_fusion_iterator<T>());
+        }
+    };
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/iterator/mpl/fusion_iterator.hpp b/3rdParty/Boost/src/boost/fusion/iterator/mpl/fusion_iterator.hpp
new file mode 100644
index 0000000..b18ef8f
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/iterator/mpl/fusion_iterator.hpp
@@ -0,0 +1,79 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_FUSION_ITERATOR_10012005_1551)
+#define FUSION_FUSION_ITERATOR_10012005_1551
+
+#include <boost/fusion/iterator/value_of.hpp>
+#include <boost/fusion/iterator/next.hpp>
+#include <boost/fusion/iterator/prior.hpp>
+#include <boost/fusion/iterator/advance.hpp>
+#include <boost/fusion/iterator/distance.hpp>
+#include <boost/fusion/support/category_of.hpp>
+#include <boost/mpl/next_prior.hpp>
+#include <boost/mpl/advance_fwd.hpp>
+#include <boost/mpl/distance_fwd.hpp>
+#include <boost/mpl/iterator_tags.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/type_traits/is_base_of.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+
+template<class Category>
+struct to_mpl_category {
+    typedef typename mpl::eval_if<
+        is_base_of<random_access_traversal_tag, Category>,
+        mpl::random_access_iterator_tag,
+        mpl::eval_if<
+            is_base_of<bidirectional_traversal_tag, Category>,
+            mpl::bidirectional_iterator_tag,
+            mpl::forward_iterator_tag
+        >
+    >::type type;
+};
+
+}}}
+
+namespace boost { namespace mpl
+{
+    template <typename Iterator>
+    struct fusion_iterator
+    {
+        typedef typename fusion::result_of::value_of<Iterator>::type type;
+        typedef typename fusion::traits::category_of<Iterator>::type fusion_category;
+        typedef typename fusion::detail::to_mpl_category<fusion_category>::type category;
+        typedef Iterator iterator;
+    };
+
+    template <typename Iterator>
+    struct next<fusion_iterator<Iterator> >
+    {
+        typedef fusion_iterator<typename fusion::result_of::next<Iterator>::type> type;
+    };
+
+    template <typename Iterator>
+    struct prior<fusion_iterator<Iterator> >
+    {
+        typedef fusion_iterator<typename fusion::result_of::prior<Iterator>::type> type;
+    };
+
+    template <typename Iterator, typename N>
+    struct advance<fusion_iterator<Iterator>, N>
+    {
+        typedef fusion_iterator<typename fusion::result_of::advance<Iterator, N>::type> type;
+    };
+
+    template <typename First, typename Last>
+    struct distance<fusion_iterator<First>, fusion_iterator<Last> >
+        : fusion::result_of::distance<First, Last>
+    {};
+
+}}
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/iterator/next.hpp b/3rdParty/Boost/src/boost/fusion/iterator/next.hpp
new file mode 100644
index 0000000..d2cf63d
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/iterator/next.hpp
@@ -0,0 +1,63 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_NEXT_05042005_1101)
+#define FUSION_NEXT_05042005_1101
+
+#include <boost/fusion/support/tag_of.hpp>
+
+namespace boost { namespace fusion
+{
+    // Special tags:
+    struct iterator_facade_tag; // iterator facade tag
+    struct boost_array_iterator_tag; // boost::array iterator tag
+    struct mpl_iterator_tag; // mpl sequence iterator tag
+    struct std_pair_iterator_tag; // std::pair iterator tag
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct next_impl
+        {
+            template <typename Iterator>
+            struct apply {};
+        };
+
+        template <>
+        struct next_impl<iterator_facade_tag>
+        {
+            template <typename Iterator>
+            struct apply : Iterator::template next<Iterator> {};
+        };
+
+        template <>
+        struct next_impl<boost_array_iterator_tag>;
+
+        template <>
+        struct next_impl<mpl_iterator_tag>;
+
+        template <>
+        struct next_impl<std_pair_iterator_tag>;
+    }
+
+    namespace result_of
+    {
+        template <typename Iterator>
+        struct next
+            : extension::next_impl<typename detail::tag_of<Iterator>::type>::
+                template apply<Iterator>
+        {};
+    }
+
+    template <typename Iterator>
+    typename result_of::next<Iterator>::type const
+    next(Iterator const& i)
+    {
+        return result_of::next<Iterator>::call(i);
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/iterator/prior.hpp b/3rdParty/Boost/src/boost/fusion/iterator/prior.hpp
new file mode 100644
index 0000000..a8b9fd6
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/iterator/prior.hpp
@@ -0,0 +1,63 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_PRIOR_05042005_1144)
+#define FUSION_PRIOR_05042005_1144
+
+#include <boost/fusion/support/tag_of.hpp>
+
+namespace boost { namespace fusion
+{
+    // Special tags:
+    struct iterator_facade_tag; // iterator facade tag
+    struct boost_array_iterator_tag; // boost::array iterator tag
+    struct mpl_iterator_tag; // mpl sequence iterator tag
+    struct std_pair_iterator_tag; // std::pair iterator tag
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct prior_impl
+        {
+            template <typename Iterator>
+            struct apply {};
+        };
+
+        template <>
+        struct prior_impl<iterator_facade_tag>
+        {
+            template <typename Iterator>
+            struct apply : Iterator::template prior<Iterator> {};
+        };
+
+        template <>
+        struct prior_impl<boost_array_iterator_tag>;
+
+        template <>
+        struct prior_impl<mpl_iterator_tag>;
+
+        template <>
+        struct prior_impl<std_pair_iterator_tag>;
+    }
+
+    namespace result_of
+    {
+        template <typename Iterator>
+        struct prior
+            : extension::prior_impl<typename detail::tag_of<Iterator>::type>::
+                template apply<Iterator>
+        {};
+    }
+
+    template <typename Iterator>
+    typename result_of::prior<Iterator>::type const
+    prior(Iterator const& i)
+    {
+        return result_of::prior<Iterator>::call(i);
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/iterator/value_of.hpp b/3rdParty/Boost/src/boost/fusion/iterator/value_of.hpp
new file mode 100644
index 0000000..478e4d2
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/iterator/value_of.hpp
@@ -0,0 +1,57 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_VALUE_OF_05052005_1126)
+#define FUSION_VALUE_OF_05052005_1126
+
+#include <boost/fusion/support/iterator_base.hpp>
+#include <boost/fusion/support/tag_of.hpp>
+
+namespace boost { namespace fusion
+{
+    // Special tags:
+    struct iterator_facade_tag; // iterator facade tag
+    struct boost_array_iterator_tag; // boost::array iterator tag
+    struct mpl_iterator_tag; // mpl sequence iterator tag
+    struct std_pair_iterator_tag; // std::pair iterator tag
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct value_of_impl
+        {
+            template <typename Iterator>
+            struct apply {};
+        };
+
+        template <>
+        struct value_of_impl<iterator_facade_tag>
+        {
+            template <typename Iterator>
+            struct apply : Iterator::template value_of<Iterator> {};
+        };
+
+        template <>
+        struct value_of_impl<boost_array_iterator_tag>;
+
+        template <>
+        struct value_of_impl<mpl_iterator_tag>;
+
+        template <>
+        struct value_of_impl<std_pair_iterator_tag>;
+    }
+
+    namespace result_of
+    {
+        template <typename Iterator>
+        struct value_of
+            : extension::value_of_impl<typename detail::tag_of<Iterator>::type>::
+                template apply<Iterator>
+        {};
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/iterator/value_of_data.hpp b/3rdParty/Boost/src/boost/fusion/iterator/value_of_data.hpp
new file mode 100644
index 0000000..4a8316d
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/iterator/value_of_data.hpp
@@ -0,0 +1,42 @@
+/*=============================================================================
+    Copyright (c) 2009 Christopher Schmidt
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ITERATOR_VALUE_OF_DATA_HPP
+#define BOOST_FUSION_ITERATOR_VALUE_OF_DATA_HPP
+
+#include <boost/fusion/support/tag_of.hpp>
+
+namespace boost { namespace fusion
+{
+    struct iterator_facade_tag;
+
+    namespace extension
+    {
+        template <typename>
+        struct value_of_data_impl;
+
+        template <>
+        struct value_of_data_impl<iterator_facade_tag>
+        {
+            template <typename It>
+            struct apply
+              : It::template value_of_data<It>
+            {};
+        };
+    }
+
+    namespace result_of
+    {
+        template <typename It>
+        struct value_of_data
+          : extension::value_of_data_impl<typename traits::tag_of<It>::type>::
+                template apply<It>
+        {};
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/mpl.hpp b/3rdParty/Boost/src/boost/fusion/mpl.hpp
new file mode 100644
index 0000000..e499df9
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/mpl.hpp
@@ -0,0 +1,32 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_MPL_09172006_2049)
+#define FUSION_MPL_09172006_2049
+
+// The fusion <--> MPL link headers
+#include <boost/fusion/iterator/mpl.hpp>
+#include <boost/fusion/adapted/mpl.hpp>
+
+#include <boost/fusion/mpl/at.hpp>
+#include <boost/fusion/mpl/back.hpp>
+#include <boost/fusion/mpl/begin.hpp>
+#include <boost/fusion/mpl/clear.hpp>
+#include <boost/fusion/mpl/empty.hpp>
+#include <boost/fusion/mpl/end.hpp>
+#include <boost/fusion/mpl/erase.hpp>
+#include <boost/fusion/mpl/erase_key.hpp>
+#include <boost/fusion/mpl/front.hpp>
+#include <boost/fusion/mpl/has_key.hpp>
+#include <boost/fusion/mpl/insert.hpp>
+#include <boost/fusion/mpl/insert_range.hpp>
+#include <boost/fusion/mpl/pop_back.hpp>
+#include <boost/fusion/mpl/pop_front.hpp>
+#include <boost/fusion/mpl/push_back.hpp>
+#include <boost/fusion/mpl/push_front.hpp>
+#include <boost/fusion/mpl/size.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/mpl/at.hpp b/3rdParty/Boost/src/boost/fusion/mpl/at.hpp
new file mode 100644
index 0000000..a164bb3
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/mpl/at.hpp
@@ -0,0 +1,33 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_AT_10022005_1616)
+#define FUSION_AT_10022005_1616
+
+#include <boost/mpl/at.hpp>
+#include <boost/fusion/sequence/intrinsic/value_at.hpp>
+
+namespace boost { 
+namespace fusion
+{
+    struct fusion_sequence_tag;
+}
+
+namespace mpl
+{
+    template <typename Tag>
+    struct at_impl;
+
+    template <>
+    struct at_impl<fusion::fusion_sequence_tag>
+    {
+        template <typename Sequence, typename N>
+        struct apply : fusion::result_of::value_at<Sequence, N> {};
+    };
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/mpl/back.hpp b/3rdParty/Boost/src/boost/fusion/mpl/back.hpp
new file mode 100644
index 0000000..1f5197e
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/mpl/back.hpp
@@ -0,0 +1,32 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_BACK_10022005_1620)
+#define FUSION_BACK_10022005_1620
+
+#include <boost/mpl/back.hpp>
+#include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/fusion/iterator/prior.hpp>
+#include <boost/fusion/iterator/value_of.hpp>
+
+namespace boost { namespace mpl
+{
+    template <typename Tag>
+    struct back_impl;
+
+    template <>
+    struct back_impl<fusion::fusion_sequence_tag>
+    {
+        template <typename Sequence>
+        struct apply : 
+            fusion::result_of::value_of<
+                typename fusion::result_of::prior<
+                    typename fusion::result_of::end<Sequence>::type
+                >::type> {};
+    };
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/mpl/begin.hpp b/3rdParty/Boost/src/boost/fusion/mpl/begin.hpp
new file mode 100644
index 0000000..be8b314
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/mpl/begin.hpp
@@ -0,0 +1,31 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_BEGIN_10022005_1620)
+#define FUSION_BEGIN_10022005_1620
+
+#include <boost/mpl/begin_end.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/adapted/mpl/detail/begin_impl.hpp>
+#include <boost/fusion/iterator/mpl/fusion_iterator.hpp>
+
+namespace boost { namespace mpl
+{
+    template <typename Tag>
+    struct begin_impl;
+
+    template <>
+    struct begin_impl<fusion::fusion_sequence_tag>
+    {
+        template <typename Sequence>
+        struct apply
+        {
+            typedef fusion_iterator<typename fusion::result_of::begin<Sequence>::type> type;
+        };
+    };
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/mpl/clear.hpp b/3rdParty/Boost/src/boost/fusion/mpl/clear.hpp
new file mode 100644
index 0000000..14b3489
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/mpl/clear.hpp
@@ -0,0 +1,33 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_CLEAR_10022005_1817)
+#define FUSION_CLEAR_10022005_1817
+
+#include <boost/mpl/clear.hpp>
+#include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/mpl/detail/clear.hpp>
+
+namespace boost { namespace mpl
+{
+    template <typename Tag>
+    struct clear_impl;
+
+    template <>
+    struct clear_impl<fusion::fusion_sequence_tag>
+    {
+        template <typename Sequence>
+        struct apply
+        {            
+            typedef typename 
+                fusion::detail::clear<typename fusion::detail::tag_of<Sequence>::type>::type 
+            type;
+        };
+    };
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/mpl/detail/clear.hpp b/3rdParty/Boost/src/boost/fusion/mpl/detail/clear.hpp
new file mode 100644
index 0000000..d8c32d5
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/mpl/detail/clear.hpp
@@ -0,0 +1,46 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_CLEAR_10022005_1442)
+#define FUSION_CLEAR_10022005_1442
+
+#include <boost/fusion/container/vector/vector_fwd.hpp>
+#include <boost/fusion/container/list/list_fwd.hpp>
+#include <boost/fusion/container/map/map_fwd.hpp>
+#include <boost/fusion/container/set/set_fwd.hpp>
+#include <boost/fusion/container/deque/deque_fwd.hpp>
+
+namespace boost { namespace fusion
+{
+    struct cons_tag;
+    struct map_tag;
+    struct set_tag;
+    struct vector_tag;
+    struct deque_tag;
+
+    namespace detail
+    {
+        template <typename Tag>
+        struct clear;
+
+        template <>
+        struct clear<cons_tag> : mpl::identity<list<> > {};
+
+        template <>
+        struct clear<map_tag> : mpl::identity<map<> > {};
+
+        template <>
+        struct clear<set_tag> : mpl::identity<set<> > {};
+
+        template <>
+        struct clear<vector_tag> : mpl::identity<vector<> > {};
+
+        template <>
+        struct clear<deque_tag> : mpl::identity<deque<> > {};
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/mpl/empty.hpp b/3rdParty/Boost/src/boost/fusion/mpl/empty.hpp
new file mode 100644
index 0000000..a0e27d6
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/mpl/empty.hpp
@@ -0,0 +1,26 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_EMPTY_10022005_1619)
+#define FUSION_EMPTY_10022005_1619
+
+#include <boost/mpl/empty.hpp>
+#include <boost/fusion/sequence/intrinsic/empty.hpp>
+
+namespace boost { namespace mpl
+{
+    template <typename Tag>
+    struct empty_impl;
+
+    template <>
+    struct empty_impl<fusion::fusion_sequence_tag>
+    {
+        template <typename Sequence>
+        struct apply : fusion::result_of::empty<Sequence> {};
+    };
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/mpl/end.hpp b/3rdParty/Boost/src/boost/fusion/mpl/end.hpp
new file mode 100644
index 0000000..ed3320b
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/mpl/end.hpp
@@ -0,0 +1,31 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_END_10022005_1619)
+#define FUSION_END_10022005_1619
+
+#include <boost/mpl/begin_end.hpp>
+#include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/fusion/adapted/mpl/detail/end_impl.hpp>
+#include <boost/fusion/iterator/mpl/fusion_iterator.hpp>
+
+namespace boost { namespace mpl
+{
+    template <typename Tag>
+    struct end_impl;
+
+    template <>
+    struct end_impl<fusion::fusion_sequence_tag>
+    {
+        template <typename Sequence>
+        struct apply
+        {
+            typedef fusion_iterator<typename fusion::result_of::end<Sequence>::type> type;
+        };
+    };
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/mpl/erase.hpp b/3rdParty/Boost/src/boost/fusion/mpl/erase.hpp
new file mode 100644
index 0000000..a8b092a
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/mpl/erase.hpp
@@ -0,0 +1,39 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_ERASE_10022005_1835)
+#define FUSION_ERASE_10022005_1835
+
+#include <boost/mpl/erase.hpp>
+#include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/algorithm/transformation/erase.hpp>
+#include <boost/fusion/sequence/convert.hpp>
+
+namespace boost { namespace mpl
+{
+    template <typename Tag>
+    struct erase_impl;
+
+    template <>
+    struct erase_impl<fusion::fusion_sequence_tag>
+    {
+        template <typename Sequence, typename First, typename Last>
+        struct apply
+        {
+            typedef typename
+                fusion::result_of::erase<Sequence, First, Last>::type
+            result;
+
+            typedef typename
+                fusion::result_of::convert<
+                    typename fusion::detail::tag_of<Sequence>::type, result>::type
+            type;
+        };
+    };
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/mpl/erase_key.hpp b/3rdParty/Boost/src/boost/fusion/mpl/erase_key.hpp
new file mode 100644
index 0000000..3cda268
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/mpl/erase_key.hpp
@@ -0,0 +1,39 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_ERASE_KEY_10022005_1907)
+#define FUSION_ERASE_KEY_10022005_1907
+
+#include <boost/mpl/erase_key.hpp>
+#include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/algorithm/transformation/erase_key.hpp>
+#include <boost/fusion/sequence/convert.hpp>
+
+namespace boost { namespace mpl
+{
+    template <typename Tag>
+    struct erase_key_impl;
+
+    template <>
+    struct erase_key_impl<fusion::fusion_sequence_tag>
+    {
+        template <typename Sequence, typename Key>
+        struct apply
+        {
+            typedef typename
+                fusion::result_of::erase_key<Sequence, Key>::type
+            result;
+
+            typedef typename
+                fusion::result_of::convert<
+                    typename fusion::detail::tag_of<Sequence>::type, result>::type
+            type;
+        };
+    };
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/mpl/front.hpp b/3rdParty/Boost/src/boost/fusion/mpl/front.hpp
new file mode 100644
index 0000000..97a26f7
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/mpl/front.hpp
@@ -0,0 +1,28 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_FRONT_10022005_1618)
+#define FUSION_FRONT_10022005_1618
+
+#include <boost/mpl/front.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/iterator/value_of.hpp>
+
+namespace boost { namespace mpl
+{
+    template <typename Tag>
+    struct front_impl;
+
+    template <>
+    struct front_impl<fusion::fusion_sequence_tag>
+    {
+        template <typename Sequence>
+        struct apply : 
+            fusion::result_of::value_of<typename fusion::result_of::begin<Sequence>::type> {};
+    };
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/mpl/has_key.hpp b/3rdParty/Boost/src/boost/fusion/mpl/has_key.hpp
new file mode 100644
index 0000000..beac7c6
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/mpl/has_key.hpp
@@ -0,0 +1,27 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_HAS_KEY_10022005_1617)
+#define FUSION_HAS_KEY_10022005_1617
+
+#include <boost/mpl/has_key.hpp>
+#include <boost/fusion/sequence/intrinsic/has_key.hpp>
+
+namespace boost { namespace mpl
+{
+    template <typename Tag>
+    struct has_key_impl;
+
+    template <>
+    struct has_key_impl<fusion::fusion_sequence_tag>
+    {
+        template <typename Sequence, typename Key>
+        struct apply : fusion::result_of::has_key<Sequence, Key> {};
+    };
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/mpl/insert.hpp b/3rdParty/Boost/src/boost/fusion/mpl/insert.hpp
new file mode 100644
index 0000000..76918ce
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/mpl/insert.hpp
@@ -0,0 +1,39 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_INSERT_10022005_1837)
+#define FUSION_INSERT_10022005_1837
+
+#include <boost/mpl/insert.hpp>
+#include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/algorithm/transformation/insert.hpp>
+#include <boost/fusion/sequence/convert.hpp>
+
+namespace boost { namespace mpl
+{
+    template <typename Tag>
+    struct insert_impl;
+
+    template <>
+    struct insert_impl<fusion::fusion_sequence_tag>
+    {
+        template <typename Sequence, typename Pos, typename T>
+        struct apply
+        {
+            typedef typename
+                fusion::result_of::insert<Sequence, Pos, T>::type
+            result;
+
+            typedef typename
+                fusion::result_of::convert<
+                    typename fusion::detail::tag_of<Sequence>::type, result>::type
+            type;
+        };
+    };
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/mpl/insert_range.hpp b/3rdParty/Boost/src/boost/fusion/mpl/insert_range.hpp
new file mode 100644
index 0000000..4da3936
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/mpl/insert_range.hpp
@@ -0,0 +1,39 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_INSERT_RANGE_10022005_1838)
+#define FUSION_INSERT_RANGE_10022005_1838
+
+#include <boost/mpl/insert_range.hpp>
+#include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/algorithm/transformation/insert_range.hpp>
+#include <boost/fusion/sequence/convert.hpp>
+
+namespace boost { namespace mpl
+{
+    template <typename Tag>
+    struct insert_range_impl;
+
+    template <>
+    struct insert_range_impl<fusion::fusion_sequence_tag>
+    {
+        template <typename Sequence, typename Pos, typename Range>
+        struct apply
+        {
+            typedef typename
+                fusion::result_of::insert_range<Sequence, Pos, Range>::type
+            result;
+
+            typedef typename
+                fusion::result_of::convert<
+                    typename fusion::detail::tag_of<Sequence>::type, result>::type
+            type;
+        };
+    };
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/mpl/pop_back.hpp b/3rdParty/Boost/src/boost/fusion/mpl/pop_back.hpp
new file mode 100644
index 0000000..84bd75a
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/mpl/pop_back.hpp
@@ -0,0 +1,39 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_POP_BACK_10022005_1801)
+#define FUSION_POP_BACK_10022005_1801
+
+#include <boost/mpl/pop_back.hpp>
+#include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/algorithm/transformation/pop_back.hpp>
+#include <boost/fusion/sequence/convert.hpp>
+
+namespace boost { namespace mpl
+{
+    template <typename Tag>
+    struct pop_back_impl;
+
+    template <>
+    struct pop_back_impl<fusion::fusion_sequence_tag>
+    {
+        template <typename Sequence>
+        struct apply
+        {
+            typedef typename
+                fusion::result_of::pop_back<Sequence>::type
+            result;
+
+            typedef typename
+                fusion::result_of::convert<
+                    typename fusion::detail::tag_of<Sequence>::type, result>::type
+            type;
+        };
+    };
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/mpl/pop_front.hpp b/3rdParty/Boost/src/boost/fusion/mpl/pop_front.hpp
new file mode 100644
index 0000000..ffe6c30
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/mpl/pop_front.hpp
@@ -0,0 +1,39 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_POP_FRONT_10022005_1800)
+#define FUSION_POP_FRONT_10022005_1800
+
+#include <boost/mpl/pop_front.hpp>
+#include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/algorithm/transformation/pop_front.hpp>
+#include <boost/fusion/sequence/convert.hpp>
+
+namespace boost { namespace mpl
+{
+    template <typename Tag>
+    struct pop_front_impl;
+
+    template <>
+    struct pop_front_impl<fusion::fusion_sequence_tag>
+    {
+        template <typename Sequence>
+        struct apply
+        {
+            typedef typename
+                fusion::result_of::pop_front<Sequence>::type
+            result;
+
+            typedef typename
+                fusion::result_of::convert<
+                    typename fusion::detail::tag_of<Sequence>::type, result>::type
+            type;
+        };
+    };
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/mpl/push_back.hpp b/3rdParty/Boost/src/boost/fusion/mpl/push_back.hpp
new file mode 100644
index 0000000..e96faa0
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/mpl/push_back.hpp
@@ -0,0 +1,39 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_PUSH_BACK_10022005_1647)
+#define FUSION_PUSH_BACK_10022005_1647
+
+#include <boost/mpl/push_back.hpp>
+#include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/algorithm/transformation/push_back.hpp>
+#include <boost/fusion/sequence/convert.hpp>
+
+namespace boost { namespace mpl
+{
+    template <typename Tag>
+    struct push_back_impl;
+
+    template <>
+    struct push_back_impl<fusion::fusion_sequence_tag>
+    {
+        template <typename Sequence, typename T>
+        struct apply
+        {
+            typedef typename
+                fusion::result_of::push_back<Sequence, T>::type
+            result;
+
+            typedef typename
+                fusion::result_of::convert<
+                    typename fusion::detail::tag_of<Sequence>::type, result>::type
+            type;
+        };
+    };
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/mpl/push_front.hpp b/3rdParty/Boost/src/boost/fusion/mpl/push_front.hpp
new file mode 100644
index 0000000..c508d65
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/mpl/push_front.hpp
@@ -0,0 +1,39 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_PUSH_FRONT_10022005_1720)
+#define FUSION_PUSH_FRONT_10022005_1720
+
+#include <boost/mpl/push_front.hpp>
+#include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/algorithm/transformation/push_front.hpp>
+#include <boost/fusion/sequence/convert.hpp>
+
+namespace boost { namespace mpl
+{
+    template <typename Tag>
+    struct push_front_impl;
+
+    template <>
+    struct push_front_impl<fusion::fusion_sequence_tag>
+    {
+        template <typename Sequence, typename T>
+        struct apply
+        {
+            typedef typename
+                fusion::result_of::push_front<Sequence, T>::type
+            result;
+
+            typedef typename
+                fusion::result_of::convert<
+                    typename fusion::detail::tag_of<Sequence>::type, result>::type
+            type;
+        };
+    };
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/mpl/size.hpp b/3rdParty/Boost/src/boost/fusion/mpl/size.hpp
new file mode 100644
index 0000000..2c72428
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/mpl/size.hpp
@@ -0,0 +1,26 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_SIZE_10022005_1617)
+#define FUSION_SIZE_10022005_1617
+
+#include <boost/mpl/size.hpp>
+#include <boost/fusion/sequence/intrinsic/size.hpp>
+
+namespace boost { namespace mpl
+{
+    template <typename Tag>
+    struct size_impl;
+
+    template <>
+    struct size_impl<fusion::fusion_sequence_tag>
+    {
+        template <typename Sequence>
+        struct apply : fusion::result_of::size<Sequence> {};
+    };
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/sequence/comparison/enable_comparison.hpp b/3rdParty/Boost/src/boost/fusion/sequence/comparison/enable_comparison.hpp
new file mode 100644
index 0000000..d7d9538
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/sequence/comparison/enable_comparison.hpp
@@ -0,0 +1,34 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_ENABLE_COMPARISON_09232005_1958)
+#define FUSION_ENABLE_COMPARISON_09232005_1958
+
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/equal_to.hpp>
+#include <boost/fusion/support/sequence_base.hpp>
+#include <boost/fusion/support/is_sequence.hpp>
+#include <boost/fusion/sequence/intrinsic/size.hpp>
+
+namespace boost { namespace fusion { namespace traits
+{
+    template <typename Seq1, typename Seq2, typename Enable = void>
+    struct enable_equality
+        : mpl::or_<traits::is_sequence<Seq1>, traits::is_sequence<Seq2> >
+    {};
+
+    template <typename Seq1, typename Seq2, typename Enable = void>
+    struct enable_comparison
+        : mpl::and_<
+            mpl::or_<traits::is_sequence<Seq1>, traits::is_sequence<Seq2> >
+          , mpl::equal_to<result_of::size<Seq1>, result_of::size<Seq2> >
+        >
+    {};
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/sequence/convert.hpp b/3rdParty/Boost/src/boost/fusion/sequence/convert.hpp
new file mode 100644
index 0000000..a6e3ccc
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/sequence/convert.hpp
@@ -0,0 +1,48 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_CONVERT_10022005_1442)
+#define FUSION_CONVERT_10022005_1442
+
+namespace boost { namespace fusion
+{
+    namespace extension
+    {
+        template <typename Tag>
+        struct convert_impl;
+    }
+
+    namespace result_of
+    {
+        template <typename Tag, typename Sequence>
+        struct convert
+        {
+            typedef typename extension::convert_impl<Tag> gen;
+
+            typedef typename
+                gen::template apply<Sequence>::type
+            type;
+        };
+    }
+
+    template <typename Tag, typename Sequence>
+    inline typename result_of::convert<Tag, Sequence>::type
+    convert(Sequence& seq)
+    {
+        typedef typename result_of::convert<Tag, Sequence>::gen gen;
+        return gen::call(seq);
+    }
+
+    template <typename Tag, typename Sequence>
+    inline typename result_of::convert<Tag, Sequence const>::type
+    convert(Sequence const& seq)
+    {
+        typedef typename result_of::convert<Tag, Sequence const>::gen gen;
+        return gen::call(seq);
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/sequence/intrinsic.hpp b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic.hpp
new file mode 100644
index 0000000..8c5f4ab
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic.hpp
@@ -0,0 +1,22 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_INTRINSIC_10022005_0618)
+#define FUSION_SEQUENCE_INTRINSIC_10022005_0618
+
+#include <boost/fusion/sequence/intrinsic/at.hpp>
+#include <boost/fusion/sequence/intrinsic/back.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/sequence/intrinsic/empty.hpp>
+#include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/fusion/sequence/intrinsic/front.hpp>
+#include <boost/fusion/sequence/intrinsic/has_key.hpp>
+#include <boost/fusion/sequence/intrinsic/size.hpp>
+#include <boost/fusion/sequence/intrinsic/value_at.hpp>
+#include <boost/fusion/sequence/intrinsic/at_key.hpp>
+#include <boost/fusion/sequence/intrinsic/value_at_key.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/at.hpp b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/at.hpp
new file mode 100644
index 0000000..9ccbfc6
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/at.hpp
@@ -0,0 +1,106 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_AT_05042005_0722)
+#define FUSION_AT_05042005_0722
+
+#include <boost/mpl/int.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/support/detail/access.hpp>
+
+namespace boost { namespace fusion
+{
+    // Special tags:
+    struct sequence_facade_tag;
+    struct boost_tuple_tag; // boost::tuples::tuple tag
+    struct boost_array_tag; // boost::array tag
+    struct mpl_sequence_tag; // mpl sequence tag
+    struct std_pair_tag; // std::pair tag
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct at_impl
+        {
+            template <typename Sequence, typename N>
+            struct apply;
+        };
+
+        template <>
+        struct at_impl<sequence_facade_tag>
+        {
+            template <typename Sequence, typename N>
+            struct apply : Sequence::template at<Sequence, N> {};
+        };
+
+        template <>
+        struct at_impl<boost_tuple_tag>;
+
+        template <>
+        struct at_impl<boost_array_tag>;
+
+        template <>
+        struct at_impl<mpl_sequence_tag>;
+
+        template <>
+        struct at_impl<std_pair_tag>;
+    }
+
+    namespace result_of
+    {
+        template <typename Sequence, typename N>
+        struct at 
+            : extension::at_impl<typename detail::tag_of<Sequence>::type>::
+                template apply<Sequence, N>
+        {};
+
+        template <typename Sequence, int N>
+        struct at_c
+            : at<Sequence, mpl::int_<N> >
+        {};
+    }
+
+
+    template <typename N, typename Sequence>
+    inline typename 
+        lazy_disable_if<
+            is_const<Sequence>
+          , result_of::at<Sequence, N>
+        >::type
+    at(Sequence& seq)
+    {
+        return result_of::at<Sequence, N>::call(seq);
+    }
+
+    template <typename N, typename Sequence>
+    inline typename result_of::at<Sequence const, N>::type
+    at(Sequence const& seq)
+    {
+        return result_of::at<Sequence const, N>::call(seq);
+    }
+
+    template <int N, typename Sequence>
+    inline typename 
+        lazy_disable_if<
+            is_const<Sequence>
+          , result_of::at_c<Sequence, N>
+        >::type
+    at_c(Sequence& seq)
+    {
+        return fusion::at<mpl::int_<N> >(seq);
+    }
+
+    template <int N, typename Sequence>
+    inline typename result_of::at_c<Sequence const, N>::type
+    at_c(Sequence const& seq)
+    {
+        return fusion::at<mpl::int_<N> >(seq);
+    }
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/at_key.hpp b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/at_key.hpp
new file mode 100644
index 0000000..30fefe0
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/at_key.hpp
@@ -0,0 +1,92 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_FUSION_AT_KEY_20060304_1755)
+#define BOOST_FUSION_AT_KEY_20060304_1755
+
+#include <boost/type_traits/is_const.hpp>
+#include <boost/fusion/algorithm/query/find.hpp>
+#include <boost/fusion/iterator/deref_data.hpp>
+#include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/support/detail/access.hpp>
+
+namespace boost { namespace fusion
+{
+    // Special tags:
+    struct sequence_facade_tag;
+    struct boost_array_tag; // boost::array tag
+    struct mpl_sequence_tag; // mpl sequence tag
+    struct std_pair_tag; // std::pair tag
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct at_key_impl
+        {
+            template <typename Seq, typename Key>
+            struct apply
+            {
+                typedef typename
+                    result_of::deref_data<
+                        typename result_of::find<Seq, Key>::type
+                    >::type
+                type;
+
+                static type
+                call(Seq& seq)
+                {
+                    return fusion::deref_data(fusion::find<Key>(seq));
+                }
+            };
+        };
+
+        template <>
+        struct at_key_impl<sequence_facade_tag>
+        {
+            template <typename Sequence, typename Key>
+            struct apply : Sequence::template at_key_impl<Sequence, Key> {};
+        };
+
+        template <>
+        struct at_key_impl<boost_array_tag>;
+
+        template <>
+        struct at_key_impl<mpl_sequence_tag>;
+
+        template <>
+        struct at_key_impl<std_pair_tag>;
+    }
+
+    namespace result_of
+    {
+        template <typename Sequence, typename Key>
+        struct at_key
+            : extension::at_key_impl<typename detail::tag_of<Sequence>::type>::
+                template apply<Sequence, Key>
+        {};
+    }
+
+    template <typename Key, typename Sequence>
+    inline typename 
+        lazy_disable_if<
+            is_const<Sequence>
+          , result_of::at_key<Sequence, Key>
+        >::type
+    at_key(Sequence& seq)
+    {
+        return result_of::at_key<Sequence, Key>::call(seq);
+    }
+
+    template <typename Key, typename Sequence>
+    inline typename result_of::at_key<Sequence const, Key>::type
+    at_key(Sequence const& seq)
+    {
+        return result_of::at_key<Sequence const, Key>::call(seq);
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/back.hpp b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/back.hpp
new file mode 100644
index 0000000..1f3567f
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/back.hpp
@@ -0,0 +1,42 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_BACK_09162005_0350)
+#define FUSION_BACK_09162005_0350
+
+#include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/fusion/iterator/prior.hpp>
+#include <boost/fusion/iterator/deref.hpp>
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace fusion
+{
+    struct fusion_sequence_tag;
+
+    namespace result_of
+    {
+        template <typename Sequence>
+        struct back
+            : result_of::deref<typename result_of::prior<typename result_of::end<Sequence>::type>::type>
+        {};
+    }
+    
+    template <typename Sequence>
+    inline typename result_of::back<Sequence>::type
+    back(Sequence& seq)
+    {
+        return *fusion::prior(fusion::end(seq));
+    }
+
+    template <typename Sequence>
+    inline typename result_of::back<Sequence const>::type
+    back(Sequence const& seq)
+    {
+        return *fusion::prior(fusion::end(seq));
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/begin.hpp b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/begin.hpp
new file mode 100644
index 0000000..c9ece3a
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/begin.hpp
@@ -0,0 +1,84 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_BEGIN_04052005_1132)
+#define FUSION_BEGIN_04052005_1132
+
+#include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/support/is_sequence.hpp>
+#include <boost/utility/enable_if.hpp>
+
+namespace boost { namespace fusion
+{
+    // Special tags:
+    struct sequence_facade_tag; // iterator facade tag
+    struct boost_tuple_tag; // boost::tuples::tuple tag
+    struct boost_array_tag; // boost::array tag
+    struct mpl_sequence_tag; // mpl sequence tag
+    struct std_pair_tag; // std::pair tag
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct begin_impl
+        {
+            template <typename Sequence>
+            struct apply;
+        };
+
+        template <>
+        struct begin_impl<sequence_facade_tag>
+        {
+            template <typename Sequence>
+            struct apply : Sequence::template begin<Sequence> {};
+        };
+
+        template <>
+        struct begin_impl<boost_tuple_tag>;
+
+        template <>
+        struct begin_impl<boost_array_tag>;
+
+        template <>
+        struct begin_impl<mpl_sequence_tag>;
+
+        template <>
+        struct begin_impl<std_pair_tag>;
+    }
+
+    namespace result_of
+    {
+        template <typename Sequence>
+        struct begin
+            : extension::begin_impl<typename detail::tag_of<Sequence>::type>::
+                template apply<Sequence>
+        {};
+    }
+
+    template <typename Sequence>
+    inline typename
+        lazy_enable_if<
+            traits::is_sequence<Sequence>
+          , result_of::begin<Sequence>
+        >::type const
+    begin(Sequence& seq)
+    {
+        return result_of::begin<Sequence>::call(seq);
+    }
+
+    template <typename Sequence>
+    inline typename
+        lazy_enable_if<
+            traits::is_sequence<Sequence>
+          , result_of::begin<Sequence const>
+        >::type const
+    begin(Sequence const& seq)
+    {
+        return result_of::begin<Sequence const>::call(seq);
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/empty.hpp b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/empty.hpp
new file mode 100644
index 0000000..2390a49
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/empty.hpp
@@ -0,0 +1,60 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_EMPTY_09162005_0335)
+#define FUSION_EMPTY_09162005_0335
+
+#include <boost/fusion/sequence/intrinsic/size.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/fusion/support/tag_of.hpp>
+
+namespace boost { namespace fusion
+{
+    // Special tags:
+    struct sequence_facade_tag;
+    struct mpl_sequence_tag; // mpl sequence tag
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct empty_impl
+        {
+            template <typename Sequence>
+            struct apply 
+                : mpl::bool_<(result_of::size<Sequence>::value == 0)>
+            {};
+        };
+
+        template <>
+        struct empty_impl<sequence_facade_tag>
+        {
+            template <typename Sequence>
+            struct apply : Sequence::template empty<Sequence> {};
+        };
+
+        template <>
+        struct empty_impl<mpl_sequence_tag>;
+    }
+
+    namespace result_of
+    {
+        template <typename Sequence>
+        struct empty 
+            : extension::empty_impl<typename detail::tag_of<Sequence>::type>::
+                template apply<Sequence>
+        {};
+    }
+
+    template <typename Sequence>
+    inline typename result_of::empty<Sequence>::type
+    empty(Sequence const&)
+    {
+        typedef typename result_of::empty<Sequence>::type result;
+        return result();
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/end.hpp b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/end.hpp
new file mode 100644
index 0000000..0247671
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/end.hpp
@@ -0,0 +1,84 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_END_04052005_1141)
+#define FUSION_END_04052005_1141
+
+#include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/support/is_sequence.hpp>
+#include <boost/utility/enable_if.hpp>
+
+namespace boost { namespace fusion
+{
+    // Special tags:
+    struct sequence_facade_tag;
+    struct boost_tuple_tag; // boost::tuples::tuple tag
+    struct boost_array_tag; // boost::array tag
+    struct mpl_sequence_tag; // mpl sequence tag
+    struct std_pair_tag; // std::pair tag
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct end_impl
+        {
+            template <typename Sequence>
+            struct apply;
+        };
+
+        template <>
+        struct end_impl<sequence_facade_tag>
+        {
+            template <typename Sequence>
+            struct apply : Sequence::template end<Sequence> {};
+        };
+
+        template <>
+        struct end_impl<boost_tuple_tag>;
+
+        template <>
+        struct end_impl<boost_array_tag>;
+
+        template <>
+        struct end_impl<mpl_sequence_tag>;
+
+        template <>
+        struct end_impl<std_pair_tag>;
+    }
+
+    namespace result_of
+    {
+        template <typename Sequence>
+        struct end
+            : extension::end_impl<typename detail::tag_of<Sequence>::type>::
+                template apply<Sequence>
+        {};
+    }
+
+    template <typename Sequence>
+    inline typename
+        lazy_enable_if<
+            traits::is_sequence<Sequence>
+          , result_of::end<Sequence>
+        >::type const
+    end(Sequence& seq)
+    {
+        return result_of::end<Sequence>::call(seq);
+    }
+
+    template <typename Sequence>
+    inline typename
+        lazy_enable_if<
+            traits::is_sequence<Sequence>
+          , result_of::end<Sequence const>
+        >::type const
+    end(Sequence const& seq)
+    {
+        return result_of::end<Sequence const>::call(seq);
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/ext_/segments.hpp b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/ext_/segments.hpp
new file mode 100644
index 0000000..58f148f
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/ext_/segments.hpp
@@ -0,0 +1,56 @@
+/*=============================================================================
+    Copyright (c) 2006 Eric Niebler
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_SEGMENTS_04052005_1141)
+#define FUSION_SEGMENTS_04052005_1141
+
+#include <boost/fusion/support/tag_of.hpp>
+
+namespace boost { namespace fusion
+{
+    // segments: returns a sequence of sequences
+    namespace extension
+    {
+        template <typename Tag>
+        struct segments_impl
+        {
+            template <typename Sequence>
+            struct apply {};
+        };
+    }
+
+    namespace result_of
+    {
+        template <typename Sequence>
+        struct segments
+        {
+            typedef typename
+                extension::segments_impl<typename traits::tag_of<Sequence>::type>::
+                    template apply<Sequence>::type
+            type;
+        };
+    }
+
+    template <typename Sequence>
+    typename result_of::segments<Sequence>::type
+    segments(Sequence & seq)
+    {
+        return
+            extension::segments_impl<typename traits::tag_of<Sequence>::type>::
+                template apply<Sequence>::call(seq);
+    }
+
+    template <typename Sequence>
+    typename result_of::segments<Sequence const>::type
+    segments(Sequence const& seq)
+    {
+        return
+            extension::segments_impl<typename traits::tag_of<Sequence>::type>::
+                template apply<Sequence const>::call(seq);
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/ext_/size_s.hpp b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/ext_/size_s.hpp
new file mode 100644
index 0000000..8b61746
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/ext_/size_s.hpp
@@ -0,0 +1,57 @@
+/*=============================================================================
+    Copyright (c) 2006 Eric Niebler
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_SIZE_S_08112006_1141)
+#define FUSION_SIZE_S_08112006_1141
+
+#include <boost/mpl/plus.hpp>
+#include <boost/mpl/size_t.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/fusion/algorithm/iteration/fold.hpp>
+#include <boost/fusion/support/ext_/is_segmented.hpp>
+#include <boost/fusion/sequence/intrinsic/ext_/segments.hpp>
+
+namespace boost { namespace fusion
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // calculates the size of any segmented data structure.
+    template<typename Sequence, bool IsSegmented = traits::is_segmented<Sequence>::value>
+    struct segmented_size;
+
+    namespace detail
+    {
+        struct size_plus
+        {
+            template<typename Sig>
+            struct result;
+
+            template<typename This, typename State, typename Seq>
+            struct result<This(State, Seq)>
+              : mpl::plus<
+                    segmented_size<typename remove_reference<Seq>::type>
+                  , typename remove_reference<State>::type
+                >
+            {};
+        };
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template<typename Sequence, bool IsSegmented>
+    struct segmented_size
+      : result_of::fold<
+            typename result_of::segments<Sequence>::type
+          , mpl::size_t<0>
+          , detail::size_plus
+        >::type
+    {};
+
+    template<typename Sequence>
+    struct segmented_size<Sequence, false>
+      : result_of::size<Sequence>
+    {};
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/front.hpp b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/front.hpp
new file mode 100644
index 0000000..bb79cfa
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/front.hpp
@@ -0,0 +1,41 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_FRONT_09162005_0343)
+#define FUSION_FRONT_09162005_0343
+
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/iterator/deref.hpp>
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace fusion
+{
+    struct fusion_sequence_tag;
+
+    namespace result_of
+    {
+        template <typename Sequence>
+        struct front
+            : result_of::deref<typename result_of::begin<Sequence>::type>
+        {};
+    }
+    
+    template <typename Sequence>
+    inline typename result_of::front<Sequence>::type
+    front(Sequence& seq)
+    {
+        return *fusion::begin(seq);
+    }
+
+    template <typename Sequence>
+    inline typename result_of::front<Sequence const>::type
+    front(Sequence const& seq)
+    {
+        return *fusion::begin(seq);
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/has_key.hpp b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/has_key.hpp
new file mode 100644
index 0000000..f254eb1
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/has_key.hpp
@@ -0,0 +1,78 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_HAS_KEY_09232005_1454)
+#define FUSION_HAS_KEY_09232005_1454
+
+#include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/iterator/equal_to.hpp>
+#include <boost/fusion/algorithm/query/find.hpp>
+#include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/mpl/not.hpp>
+
+namespace boost { namespace fusion
+{
+    struct void_;
+
+    // Special tags:
+    struct sequence_facade_tag;
+    struct boost_array_tag; // boost::array tag
+    struct mpl_sequence_tag; // mpl sequence tag
+    struct std_pair_tag; // std::pair tag
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct has_key_impl
+        {
+            template <typename Seq, typename Key>
+            struct apply
+              : mpl::not_<
+                    typename result_of::equal_to<
+                        typename result_of::find<Seq, Key>::type
+                      , typename result_of::end<Seq>::type
+                    >::type
+                >::type
+            {};
+        };
+
+        template <>
+        struct has_key_impl<sequence_facade_tag>
+        {
+            template <typename Sequence, typename Key>
+            struct apply : Sequence::template has_key<Sequence, Key> {};
+        };
+
+        template <>
+        struct has_key_impl<boost_array_tag>;
+
+        template <>
+        struct has_key_impl<mpl_sequence_tag>;
+
+        template <>
+        struct has_key_impl<std_pair_tag>;
+    }
+    
+    namespace result_of
+    {
+        template <typename Sequence, typename Key>
+        struct has_key 
+            : extension::has_key_impl<typename detail::tag_of<Sequence>::type>::
+                template apply<Sequence, Key>
+        {};
+    }
+
+    template <typename Key, typename Sequence>
+    inline typename result_of::has_key<Sequence, Key>::type
+    has_key(Sequence const& seq)
+    {
+        typedef typename result_of::has_key<Sequence, Key>::type result;
+        return result();
+    }
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/size.hpp b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/size.hpp
new file mode 100644
index 0000000..2a3cb7f
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/size.hpp
@@ -0,0 +1,74 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_SIZE_05052005_0214)
+#define FUSION_SIZE_05052005_0214
+
+#include <boost/mpl/int.hpp>
+#include <boost/fusion/support/tag_of.hpp>
+
+namespace boost { namespace fusion
+{
+    // Special tags:
+    struct sequence_facade_tag;
+    struct boost_tuple_tag; // boost::tuples::tuple tag
+    struct boost_array_tag; // boost::array tag
+    struct mpl_sequence_tag; // mpl sequence tag
+    struct std_pair_tag; // std::pair tag
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct size_impl
+        {
+            template <typename Sequence>
+            struct apply : Sequence::size {};
+        };
+
+        template <>
+        struct size_impl<sequence_facade_tag>
+        {
+            template <typename Sequence>
+            struct apply : Sequence::template size<Sequence> {};
+        };
+ 
+        template <>
+        struct size_impl<boost_tuple_tag>;
+ 
+        template <>
+        struct size_impl<boost_array_tag>;
+
+        template <>
+        struct size_impl<mpl_sequence_tag>;
+
+        template <>
+        struct size_impl<std_pair_tag>;
+    }
+
+    namespace result_of
+    {
+        template <typename Sequence>
+        struct size
+            : extension::size_impl<typename detail::tag_of<Sequence>::type>::
+        template apply<Sequence>
+
+        {
+            typedef typename extension::size_impl<typename detail::tag_of<Sequence>::type>::
+            template apply<Sequence>::type size_application;
+            BOOST_STATIC_CONSTANT(int, value = size_application::value);
+        };
+    }
+
+    template <typename Sequence>
+    inline typename result_of::size<Sequence>::type
+    size(Sequence const&)
+    {
+        typedef typename result_of::size<Sequence>::type result;
+        return result();
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/value_at.hpp b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/value_at.hpp
new file mode 100644
index 0000000..01cdc9d
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/value_at.hpp
@@ -0,0 +1,67 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_VALUE_AT_05052005_0229)
+#define FUSION_VALUE_AT_05052005_0229
+
+#include <boost/mpl/int.hpp>
+#include <boost/fusion/support/tag_of.hpp>
+
+namespace boost { namespace fusion
+{
+    // Special tags:
+    struct sequence_facade_tag;
+    struct boost_tuple_tag; // boost::tuples::tuple tag
+    struct boost_array_tag; // boost::array tag
+    struct mpl_sequence_tag; // mpl sequence tag
+    struct std_pair_tag; // std::pair tag
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct value_at_impl
+        {
+            template <typename Sequence, typename N>
+            struct apply;
+        };
+
+        template <>
+        struct value_at_impl<sequence_facade_tag>
+        {
+            template <typename Sequence, typename N>
+            struct apply : Sequence::template value_at<Sequence, N> {};
+        };
+
+        template <>
+        struct value_at_impl<boost_tuple_tag>;
+
+        template <>
+        struct value_at_impl<boost_array_tag>;
+
+        template <>
+        struct value_at_impl<mpl_sequence_tag>;
+
+        template <>
+        struct value_at_impl<std_pair_tag>;
+    }
+
+    namespace result_of
+    {
+        template <typename Sequence, typename N>
+        struct value_at
+            : extension::value_at_impl<typename detail::tag_of<Sequence>::type>::
+                template apply<Sequence, N>
+        {};
+
+        template <typename Sequence, int N>
+        struct value_at_c
+            : fusion::result_of::value_at<Sequence, mpl::int_<N> >
+        {};
+    }
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/value_at_key.hpp b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/value_at_key.hpp
new file mode 100644
index 0000000..d7f84cd
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/sequence/intrinsic/value_at_key.hpp
@@ -0,0 +1,65 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_VALUE_AT_KEY_05052005_0229)
+#define FUSION_VALUE_AT_KEY_05052005_0229
+
+#include <boost/mpl/int.hpp>
+#include <boost/fusion/iterator/value_of_data.hpp>
+#include <boost/fusion/algorithm/query/find.hpp>
+#include <boost/fusion/support/tag_of.hpp>
+
+namespace boost { namespace fusion
+{
+    // Special tags:
+    struct sequence_facade_tag;
+    struct boost_array_tag; // boost::array tag
+    struct mpl_sequence_tag; // mpl sequence tag
+    struct std_pair_tag; // std::pair tag
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct value_at_key_impl
+        {
+            template <typename Seq, typename Key>
+            struct apply
+              : result_of::value_of_data<
+                    typename result_of::find<Seq, Key>::type
+                >
+            {};
+        };
+
+        template <>
+        struct value_at_key_impl<sequence_facade_tag>
+        {
+            template <typename Sequence, typename Key>
+            struct apply : Sequence::template value_at_key<Sequence, Key> {};
+        };
+
+        template <>
+        struct value_at_key_impl<boost_array_tag>;
+
+        template <>
+        struct value_at_key_impl<mpl_sequence_tag>;
+
+        template <>
+        struct value_at_key_impl<std_pair_tag>;
+    }
+    
+    namespace result_of
+    {
+        template <typename Sequence, typename N>
+        struct value_at_key
+            : extension::value_at_key_impl<typename detail::tag_of<Sequence>::type>::
+                template apply<Sequence, N>
+        {};
+    }
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/support/category_of.hpp b/3rdParty/Boost/src/boost/fusion/support/category_of.hpp
new file mode 100644
index 0000000..73def5b
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/support/category_of.hpp
@@ -0,0 +1,112 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_CATEGORY_OF_07202005_0308)
+#define FUSION_CATEGORY_OF_07202005_0308
+
+#include <boost/fusion/support/detail/category_of.hpp>
+#include <boost/fusion/support/tag_of.hpp>
+#include <boost/type_traits/is_base_of.hpp>
+
+namespace boost { namespace fusion
+{
+    // Special tags:
+    struct boost_tuple_tag; // boost::tuples::tuple tag
+    struct boost_array_tag; // boost::array tag
+    struct mpl_sequence_tag; // mpl sequence tag
+    struct std_pair_tag; // std::pair tag
+
+    struct incrementable_traversal_tag {};
+
+    struct single_pass_traversal_tag
+        : incrementable_traversal_tag {};
+
+    struct forward_traversal_tag
+        : single_pass_traversal_tag {};
+
+    struct bidirectional_traversal_tag
+        : forward_traversal_tag {};
+
+    struct random_access_traversal_tag
+        : bidirectional_traversal_tag {};
+
+    struct associative_tag {};
+
+    namespace extension
+    {
+        template<typename Tag>
+        struct category_of_impl
+        {
+            template<typename T>
+            struct apply : detail::fusion_category_of<T> {};
+        };
+
+        template <>
+        struct category_of_impl<boost_tuple_tag>;
+
+        template <>
+        struct category_of_impl<boost_array_tag>;
+
+        template <>
+        struct category_of_impl<mpl_sequence_tag>;
+
+        template <>
+        struct category_of_impl<std_pair_tag>;
+    }
+
+    namespace traits
+    {
+        template <typename T>
+        struct category_of
+            : extension::category_of_impl<typename fusion::detail::tag_of<T>::type>::
+                template apply<T>
+        {};
+
+        template <typename T>
+        struct is_associative
+            : is_base_of<
+                associative_tag
+              , typename category_of<T>::type>
+        {};
+
+        template <typename T>
+        struct is_incrementable
+            : is_base_of<
+                incrementable_traversal_tag
+              , typename category_of<T>::type>
+        {};
+
+        template <typename T>
+        struct is_single_pass
+            : is_base_of<
+                single_pass_traversal_tag
+              , typename category_of<T>::type>
+        {};
+
+        template <typename T>
+        struct is_forward
+            : is_base_of<
+                forward_traversal_tag
+              , typename category_of<T>::type>
+        {};
+
+        template <typename T>
+        struct is_bidirectional
+            : is_base_of<
+                bidirectional_traversal_tag
+              , typename category_of<T>::type>
+        {};
+
+        template <typename T>
+        struct is_random_access
+            : is_base_of<
+                random_access_traversal_tag
+              , typename category_of<T>::type>
+        {};
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/support/detail/access.hpp b/3rdParty/Boost/src/boost/fusion/support/detail/access.hpp
new file mode 100644
index 0000000..af7374c
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/support/detail/access.hpp
@@ -0,0 +1,64 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_ACCESS_04182005_0737)
+#define FUSION_ACCESS_04182005_0737
+
+#include <boost/type_traits/add_const.hpp>
+#include <boost/type_traits/add_reference.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+    template <typename T>
+    struct ref_result
+    {
+        typedef typename add_reference<typename T::type>::type type;
+    };
+
+    template <typename T>
+    struct cref_result
+    {
+        typedef typename 
+            add_reference<
+                typename add_const<typename T::type>::type
+            >::type 
+        type;
+    };
+
+    template <typename T>
+    struct call_param
+    {
+        typedef T const& type;
+    };
+
+    template <typename T>
+    struct call_param<T &>
+    {
+        typedef T& type;
+    };
+
+    template <typename T>
+    struct call_param<T const>
+    {
+        typedef T const& type;
+    };
+
+    template <typename T>
+    struct call_param<T volatile>
+    {
+        typedef T const& type;
+    };
+
+    template <typename T>
+    struct call_param<T const volatile>
+    {
+        typedef T const& type;
+    };
+
+}}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/support/detail/as_fusion_element.hpp b/3rdParty/Boost/src/boost/fusion/support/detail/as_fusion_element.hpp
new file mode 100644
index 0000000..2d02064
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/support/detail/as_fusion_element.hpp
@@ -0,0 +1,47 @@
+/*=============================================================================
+    Copyright (c) 1999-2003 Jaakko Jarvi
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_AS_FUSION_ELEMENT_05052005_0338)
+#define FUSION_AS_FUSION_ELEMENT_05052005_0338
+
+#include <boost/ref.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+    template <typename T>
+    struct as_fusion_element
+    {
+        typedef T type;
+    };
+
+    template <typename T>
+    struct as_fusion_element<reference_wrapper<T> >
+    {
+        typedef T& type;
+    };
+
+    template <typename T, int N>
+    struct as_fusion_element<T[N]>
+    {
+        typedef const T(&type)[N];
+    };
+
+    template <typename T, int N>
+    struct as_fusion_element<volatile T[N]>
+    {
+        typedef const volatile T(&type)[N];
+    };
+
+    template <typename T, int N>
+    struct as_fusion_element<const volatile T[N]>
+    {
+        typedef const volatile T(&type)[N];
+    };
+
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/support/detail/category_of.hpp b/3rdParty/Boost/src/boost/fusion/support/detail/category_of.hpp
new file mode 100644
index 0000000..04102cf
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/support/detail/category_of.hpp
@@ -0,0 +1,19 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_CATEGORY_OF_07212005_1025)
+#define FUSION_CATEGORY_OF_07212005_1025
+
+namespace boost { namespace fusion { namespace detail
+{
+    template <typename T>
+    struct fusion_category_of
+    {
+        typedef typename T::category type;
+    };
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/support/detail/is_mpl_sequence.hpp b/3rdParty/Boost/src/boost/fusion/support/detail/is_mpl_sequence.hpp
new file mode 100644
index 0000000..b7e792b
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/support/detail/is_mpl_sequence.hpp
@@ -0,0 +1,27 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2005-2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_DETAIL_IS_MPL_SEQUENCE_29122006_1105)
+#define FUSION_DETAIL_IS_MPL_SEQUENCE_29122006_1105
+
+#include <boost/fusion/support/sequence_base.hpp>
+#include <boost/mpl/is_sequence.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+    template <typename T>
+    struct is_mpl_sequence
+        : mpl::and_<
+            mpl::not_<is_convertible<T, from_sequence_convertible_type> >
+          , mpl::is_sequence<T> >
+    {};
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/support/detail/is_view.hpp b/3rdParty/Boost/src/boost/fusion/support/detail/is_view.hpp
new file mode 100644
index 0000000..5fa2f24
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/support/detail/is_view.hpp
@@ -0,0 +1,19 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_IS_VIEW_03202006_0018)
+#define FUSION_IS_VIEW_03202006_0018
+
+namespace boost { namespace fusion { namespace detail
+{
+    template <typename T>
+    struct fusion_is_view
+    {
+        typedef typename T::is_view type;
+    };
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/support/detail/mpl_iterator_category.hpp b/3rdParty/Boost/src/boost/fusion/support/detail/mpl_iterator_category.hpp
new file mode 100644
index 0000000..37a7fe9
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/support/detail/mpl_iterator_category.hpp
@@ -0,0 +1,66 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_MPL_ITERATOR_CATEGORY_07212005_0923)
+#define FUSION_MPL_ITERATOR_CATEGORY_07212005_0923
+
+namespace boost { namespace mpl 
+{
+    struct forward_iterator_tag;
+    struct bidirectional_iterator_tag;
+    struct random_access_iterator_tag;
+}}
+
+namespace boost { namespace fusion
+{
+    struct forward_traversal_tag;
+    struct bidirectional_traversal_tag;
+    struct random_access_traversal_tag;
+}}
+
+namespace boost { namespace fusion { namespace detail
+{
+    template <typename Category>
+    struct mpl_iterator_category;
+    
+    template <>
+    struct mpl_iterator_category<mpl::forward_iterator_tag>
+    {
+        typedef forward_traversal_tag type;
+    };
+
+    template <>
+    struct mpl_iterator_category<mpl::bidirectional_iterator_tag>
+    {
+        typedef bidirectional_traversal_tag type;
+    };
+
+    template <>
+    struct mpl_iterator_category<mpl::random_access_iterator_tag>
+    {
+        typedef random_access_traversal_tag type;
+    };
+
+    template <>
+    struct mpl_iterator_category<forward_traversal_tag>
+    {
+        typedef forward_traversal_tag type;
+    };
+
+    template <>
+    struct mpl_iterator_category<bidirectional_traversal_tag>
+    {
+        typedef bidirectional_traversal_tag type;
+    };
+
+    template <>
+    struct mpl_iterator_category<random_access_traversal_tag>
+    {
+        typedef random_access_traversal_tag type;
+    };
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/support/ext_/is_segmented.hpp b/3rdParty/Boost/src/boost/fusion/support/ext_/is_segmented.hpp
new file mode 100644
index 0000000..63330a4
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/support/ext_/is_segmented.hpp
@@ -0,0 +1,48 @@
+/*=============================================================================
+    Copyright (c) 2006 Eric Niebler
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_IS_SEGMENTED_03202006_0015)
+#define FUSION_IS_SEGMENTED_03202006_0015
+
+#include <boost/fusion/support/tag_of.hpp>
+
+namespace boost { namespace fusion 
+{
+    // Special tags:
+    struct sequence_facade_tag;
+    struct boost_tuple_tag; // boost::tuples::tuple tag
+    struct boost_array_tag; // boost::array tag
+    struct mpl_sequence_tag; // mpl sequence tag
+    struct std_pair_tag; // std::pair tag
+    struct iterator_range_tag;
+
+    namespace extension
+    {
+        template<typename Tag>
+        struct is_segmented_impl
+        {
+            template<typename Sequence>
+            struct apply
+              : mpl::false_
+            {};
+        };
+
+        template<>
+        struct is_segmented_impl<iterator_range_tag>;
+    }
+
+    namespace traits
+    {
+        template <typename Sequence>
+        struct is_segmented
+          : extension::is_segmented_impl<typename traits::tag_of<Sequence>::type>::
+                template apply<Sequence>
+        {
+        };
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/support/is_iterator.hpp b/3rdParty/Boost/src/boost/fusion/support/is_iterator.hpp
new file mode 100644
index 0000000..9e775f4
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/support/is_iterator.hpp
@@ -0,0 +1,20 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_IS_ITERATOR_05062005_1219)
+#define FUSION_IS_ITERATOR_05062005_1219
+
+#include <boost/type_traits/is_base_of.hpp>
+
+namespace boost { namespace fusion
+{
+    struct iterator_root;
+
+    template <typename T>
+    struct is_fusion_iterator : is_base_of<iterator_root, T> {};
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/support/is_sequence.hpp b/3rdParty/Boost/src/boost/fusion/support/is_sequence.hpp
new file mode 100644
index 0000000..f57ca23
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/support/is_sequence.hpp
@@ -0,0 +1,74 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_IS_SEQUENCE_05052005_1002)
+#define FUSION_IS_SEQUENCE_05052005_1002
+
+#include <boost/fusion/support/sequence_base.hpp>
+#include <boost/fusion/support/tag_of.hpp>
+#include <boost/mpl/is_sequence.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace fusion
+{
+    // Special tags:
+    struct non_fusion_tag;
+    struct boost_tuple_tag; // boost::tuples::tuple tag
+    struct boost_array_tag; // boost::array tag
+    struct mpl_sequence_tag; // mpl sequence tag
+    struct std_pair_tag; // std::pair tag
+
+    namespace extension
+    {
+        template <typename T>
+        struct is_sequence_impl
+        {
+            template <typename Sequence>
+            struct apply
+              : is_convertible<Sequence, detail::from_sequence_convertible_type>
+            {};
+        };
+
+        template <>
+        struct is_sequence_impl<non_fusion_tag>
+        {
+            template <typename T>
+            struct apply : mpl::false_ {};
+        };
+
+        template <>
+        struct is_sequence_impl<boost_tuple_tag>;
+
+        template <>
+        struct is_sequence_impl<boost_array_tag>;
+
+        template <>
+        struct is_sequence_impl<mpl_sequence_tag>;
+
+        template <>
+        struct is_sequence_impl<std_pair_tag>;
+    }
+
+    namespace traits
+    {
+        template <typename T>
+        struct is_sequence
+          : extension::is_sequence_impl<
+                typename fusion::detail::tag_of<T>::type
+            >::template apply<T>
+        {};
+
+        template <typename Sequence, typename Enable = void>
+        struct is_native_fusion_sequence
+          : is_convertible<Sequence, detail::from_sequence_convertible_type>
+        {};
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/support/is_view.hpp b/3rdParty/Boost/src/boost/fusion/support/is_view.hpp
new file mode 100644
index 0000000..e2cf6eb
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/support/is_view.hpp
@@ -0,0 +1,63 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_IS_VIEW_03202006_0015)
+#define FUSION_IS_VIEW_03202006_0015
+
+#include <boost/fusion/support/detail/is_view.hpp>
+#include <boost/fusion/support/tag_of.hpp>
+
+namespace boost { namespace fusion
+{
+    // Special tags:
+    struct sequence_facade_tag;
+    struct boost_tuple_tag; // boost::tuples::tuple tag
+    struct boost_array_tag; // boost::array tag
+    struct mpl_sequence_tag; // mpl sequence tag
+    struct std_pair_tag; // std::pair tag
+
+    namespace extension
+    {
+        template<typename Tag>
+        struct is_view_impl
+        {
+            template <typename T>
+            struct apply
+                : detail::fusion_is_view<T>
+            {};
+        };
+
+        template <>
+        struct is_view_impl<sequence_facade_tag>
+        {
+            template <typename Sequence>
+            struct apply : Sequence::is_view {};
+        };
+
+        template <>
+        struct is_view_impl<boost_tuple_tag>;
+
+        template <>
+        struct is_view_impl<boost_array_tag>;
+
+        template <>
+        struct is_view_impl<mpl_sequence_tag>;
+
+        template <>
+        struct is_view_impl<std_pair_tag>;
+    }
+
+    namespace traits
+    {
+        template <typename T>
+        struct is_view :
+            extension::is_view_impl<typename fusion::detail::tag_of<T>::type>::
+                template apply<T>::type
+        {};
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/support/iterator_base.hpp b/3rdParty/Boost/src/boost/fusion/support/iterator_base.hpp
new file mode 100644
index 0000000..2f909b2
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/support/iterator_base.hpp
@@ -0,0 +1,31 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_ITERATOR_BASE_05042005_1008)
+#define FUSION_ITERATOR_BASE_05042005_1008
+
+namespace boost { namespace fusion
+{
+    struct iterator_root {};
+
+    template <typename Iterator>
+    struct iterator_base : iterator_root
+    {
+        Iterator const&
+        cast() const
+        {
+            return static_cast<Iterator const&>(*this);
+        }
+
+        Iterator&
+        cast()
+        {
+            return static_cast<Iterator&>(*this);
+        }
+    };
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/support/sequence_base.hpp b/3rdParty/Boost/src/boost/fusion/support/sequence_base.hpp
new file mode 100644
index 0000000..9a5186d
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/support/sequence_base.hpp
@@ -0,0 +1,54 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2007 Tobias Schwinger
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_BASE_04182005_0737)
+#define FUSION_SEQUENCE_BASE_04182005_0737
+
+#include <boost/mpl/begin_end_fwd.hpp>
+
+namespace boost { namespace fusion
+{
+    namespace detail
+    {
+        struct from_sequence_convertible_type
+        {};
+    }
+
+    template <typename Sequence>
+    struct sequence_base
+    {
+        Sequence const&
+        derived() const
+        {
+            return static_cast<Sequence const&>(*this);
+        }
+
+        Sequence&
+        derived()
+        {
+            return static_cast<Sequence&>(*this);
+        }
+
+        operator detail::from_sequence_convertible_type()const
+        {
+            return detail::from_sequence_convertible_type();
+        }
+    };
+
+    struct fusion_sequence_tag;
+}}
+
+namespace boost { namespace mpl
+{
+    // Deliberately break mpl::begin, so it doesn't lie that a Fusion sequence
+    // is not an MPL sequence by returning mpl::void_.
+    // In other words: Fusion Sequences are always MPL Sequences, but they can
+    // be incompletely defined.
+    template<> struct begin_impl< boost::fusion::fusion_sequence_tag >;
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/support/tag_of.hpp b/3rdParty/Boost/src/boost/fusion/support/tag_of.hpp
new file mode 100644
index 0000000..cba0606
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/support/tag_of.hpp
@@ -0,0 +1,75 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_TAG_OF_09232005_0845)
+#define FUSION_TAG_OF_09232005_0845
+
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/fusion/support/tag_of_fwd.hpp>
+#include <boost/fusion/support/detail/is_mpl_sequence.hpp>
+#include <boost/mpl/has_xxx.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/config/no_tr1/utility.hpp>
+
+namespace boost
+{
+    template <typename T, std::size_t N>
+    class array; // forward
+
+    namespace tuples
+    {
+        struct null_type;
+
+        template <
+            class T0, class T1, class T2, class T3, class T4,
+            class T5, class T6, class T7, class T8, class T9
+        >
+        class tuple;
+
+        template <class Head, class Tail>
+        struct cons;
+    }
+}
+
+namespace boost { namespace fusion
+{
+    struct non_fusion_tag;
+    struct mpl_sequence_tag;
+
+    namespace detail
+    {
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(fusion_tag)
+    }
+
+    namespace traits
+    {
+        template <typename Sequence, typename Active>
+        struct tag_of
+          : mpl::if_< fusion::detail::is_mpl_sequence<Sequence>,
+              mpl::identity<mpl_sequence_tag>,
+              mpl::identity<non_fusion_tag> >::type
+        {};
+
+        template <typename Sequence>
+        struct tag_of<Sequence, typename boost::enable_if<detail::has_fusion_tag<Sequence> >::type>
+        {
+            typedef typename Sequence::fusion_tag type;
+        };
+    }
+
+    namespace detail
+    {
+        template<typename T>
+        struct tag_of
+            : traits::tag_of<typename remove_const<T>::type>
+        {};
+    }
+}}
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/support/tag_of_fwd.hpp b/3rdParty/Boost/src/boost/fusion/support/tag_of_fwd.hpp
new file mode 100644
index 0000000..e6c883d
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/support/tag_of_fwd.hpp
@@ -0,0 +1,20 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2005-2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_FUSION_TAG_OF_FWD_31122005_1445)
+#define BOOST_FUSION_TAG_OF_FWD_31122005_1445
+
+namespace boost { namespace fusion
+{
+    namespace traits
+    {
+        template<typename T, typename Active = void>
+        struct tag_of;
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/support/void.hpp b/3rdParty/Boost/src/boost/fusion/support/void.hpp
new file mode 100644
index 0000000..7dd11e5
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/support/void.hpp
@@ -0,0 +1,15 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_FUSION_SUPPORT_VOID_20070706_2125)
+#define BOOST_FUSION_SUPPORT_VOID_20070706_2125
+
+namespace boost { namespace fusion
+{
+    struct void_ {};
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/view/detail/strictest_traversal.hpp b/3rdParty/Boost/src/boost/fusion/view/detail/strictest_traversal.hpp
new file mode 100644
index 0000000..0ba5d8a
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/detail/strictest_traversal.hpp
@@ -0,0 +1,68 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_STRICTEST_TRAVERSAL_20060123_2101)
+#define FUSION_STRICTEST_TRAVERSAL_20060123_2101
+
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/fusion/support/category_of.hpp>
+#include <boost/fusion/mpl.hpp>
+#include <boost/fusion/algorithm/iteration/fold.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+namespace boost { namespace fusion
+{
+    struct forward_traversal_tag;
+    struct bidirectional_traversal_tag;
+    struct random_access_traversal_tag;
+
+    namespace detail
+    {
+        template<typename Tag1, typename Tag2,
+            bool Tag1Stricter = boost::is_convertible<Tag2,Tag1>::value>
+        struct stricter_traversal
+        {
+            typedef Tag1 type;
+        };
+
+        template<typename Tag1, typename Tag2>
+        struct stricter_traversal<Tag1,Tag2,false>
+        {
+            typedef Tag2 type;
+        };
+
+        struct strictest_traversal_impl
+        {
+            template<typename Sig>
+            struct result;
+
+            template<typename StrictestSoFar, typename Next>
+            struct result<strictest_traversal_impl(StrictestSoFar, Next)>
+            {
+                typedef typename remove_reference<Next>::type next_value;
+                typedef typename remove_reference<StrictestSoFar>::type strictest_so_far;
+
+                typedef strictest_so_far tag1;
+                typedef typename traits::category_of<next_value>::type tag2;
+
+                typedef typename stricter_traversal<tag1,tag2>::type type;
+            };
+        };
+
+        template<typename Sequence>
+        struct strictest_traversal
+            : result_of::fold<
+            Sequence, fusion::random_access_traversal_tag,
+            strictest_traversal_impl>
+        {};
+
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/view/ext_/segmented_iterator.hpp b/3rdParty/Boost/src/boost/fusion/view/ext_/segmented_iterator.hpp
new file mode 100644
index 0000000..79bc707
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/ext_/segmented_iterator.hpp
@@ -0,0 +1,448 @@
+/*=============================================================================
+   Copyright (c) 2006 Eric Niebler
+
+   Use, modification and distribution is subject to the Boost Software
+   License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+   http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef FUSION_SEGMENTED_ITERATOR_EAN_05032006_1027
+#define FUSION_SEGMENTED_ITERATOR_EAN_05032006_1027
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/next_prior.hpp>
+#include <boost/mpl/placeholders.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/is_reference.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/support/is_sequence.hpp>
+#include <boost/fusion/view/filter_view.hpp>
+#include <boost/fusion/container/list/cons.hpp> // for nil
+#include <boost/fusion/container/generation/make_cons.hpp>
+#include <boost/fusion/iterator/advance.hpp>
+#include <boost/fusion/iterator/distance.hpp>
+#include <boost/fusion/sequence/intrinsic/ext_/segments.hpp>
+#include <boost/fusion/support/ext_/is_segmented.hpp>
+
+namespace boost { namespace fusion
+{
+    struct fusion_sequence_tag;
+
+    namespace detail
+    {
+        using mpl::_;
+        using mpl::not_;
+
+        ////////////////////////////////////////////////////////////////////////////
+        template<typename Sequence>
+        struct is_empty
+          : result_of::equal_to<
+                typename result_of::begin<Sequence>::type
+              , typename result_of::end<Sequence>::type
+            >
+        {};
+
+        template<typename Sequence>
+        struct is_empty<Sequence &>
+          : is_empty<Sequence>
+        {};
+
+        ////////////////////////////////////////////////////////////////////////////
+        struct not_is_empty_pred
+        {
+            template<typename Sequence>
+            struct apply
+              : not_<is_empty<Sequence> >
+            {};
+        };
+
+        struct segmented_range_tag;
+
+        ////////////////////////////////////////////////////////////////////////////
+        template<typename Sequence, typename Index, bool IsSegmented>
+        struct segmented_range
+          : sequence_base<segmented_range<Sequence, Index, IsSegmented> >
+        {
+            BOOST_MPL_ASSERT_NOT((is_reference<Sequence>));
+            typedef mpl::bool_<IsSegmented> is_segmented;
+            typedef segmented_range_tag fusion_tag;
+            typedef fusion_sequence_tag tag; // this gets picked up by MPL
+            typedef mpl::true_ is_view;
+
+            // If this is a range of segments, skip over the empty ones
+            typedef typename mpl::if_<
+                is_segmented
+              , filter_view<Sequence, not_is_empty_pred>
+              , Sequence
+            >::type sequence_non_ref_type;
+
+            typedef typename mpl::if_<
+                traits::is_view<sequence_non_ref_type>
+              , sequence_non_ref_type
+              , sequence_non_ref_type &
+            >::type sequence_type;
+
+            typedef
+                typename fusion::result_of::advance<
+                    typename fusion::result_of::begin<sequence_non_ref_type>::type
+                  , Index
+                >::type
+            iterator_type;
+
+            typedef typename traits::category_of<sequence_non_ref_type>::type category;
+
+            explicit segmented_range(Sequence &sequence_)
+              : sequence(sequence_type(sequence_))
+            {}
+
+            segmented_range(sequence_type sequence_, int)
+              : sequence(sequence_)
+            {}
+
+            iterator_type where_() const
+            {
+                return fusion::advance<Index>(
+                    fusion::begin(const_cast<sequence_non_ref_type &>(this->sequence))
+                );
+            }
+
+            sequence_type sequence;
+
+        private:
+            segmented_range &operator =(segmented_range const &);
+        };
+    }
+
+    namespace extension
+    {
+        template<>
+        struct is_segmented_impl<detail::segmented_range_tag>
+        {
+            template<typename Sequence>
+            struct apply
+              : Sequence::is_segmented
+            {};
+        };
+
+        template<>
+        struct size_impl<detail::segmented_range_tag>
+        {
+            template<typename Sequence>
+            struct apply
+              : mpl::int_<
+                    result_of::distance<
+                        typename Sequence::iterator_type
+                      , typename result_of::end<typename Sequence::sequence_non_ref_type>::type
+                    >::value
+                >
+            {};
+        };
+
+        template<>
+        struct segments_impl<detail::segmented_range_tag>
+        {
+            template<typename Sequence>
+            struct apply
+            {
+                typedef Sequence &type;
+                static type call(Sequence &seq)
+                {
+                    return seq;
+                }
+            };
+        };
+
+        template<>
+        struct begin_impl<detail::segmented_range_tag>
+        {
+            template<typename Sequence>
+            struct apply
+            {
+                typedef typename Sequence::iterator_type type;
+                static type call(Sequence &seq)
+                {
+                    return seq.where_();
+                }
+            };
+        };
+
+        template<>
+        struct end_impl<detail::segmented_range_tag>
+        {
+            template<typename Sequence>
+            struct apply
+            {
+                typedef typename Sequence::sequence_non_ref_type sequence;
+                typedef typename result_of::end<sequence>::type type;
+
+                static type call(Sequence &seq)
+                {
+                    return fusion::end(seq.sequence);
+                }
+            };
+        };
+    }
+
+    namespace detail
+    {
+        ///////////////////////////////////////////////////////////////////////
+        template<typename Range>
+        struct range_next;
+
+        template<typename Sequence, typename Index, bool IsSegmented>
+        struct range_next<segmented_range<Sequence, Index, IsSegmented> >
+        {
+            typedef typename mpl::next<Index>::type index_type;
+            typedef segmented_range<Sequence, index_type, IsSegmented> type;
+
+            static type call(segmented_range<Sequence, Index, IsSegmented> const &rng)
+            {
+                return type(rng.sequence, 0);
+            }
+        };
+
+        ///////////////////////////////////////////////////////////////////////
+        template<typename Cons>
+        struct is_range_next_empty
+          : is_empty<typename range_next<typename Cons::car_type>::type>
+        {};
+
+        template<>
+        struct is_range_next_empty<nil>
+          : mpl::true_
+        {};
+
+        ///////////////////////////////////////////////////////////////////////
+        template<typename Sequence, bool IsSegmented = traits::is_segmented<Sequence>::value>
+        struct as_segmented_range
+        {
+            typedef typename result_of::segments<Sequence>::type segments;
+            typedef typename remove_reference<segments>::type sequence;
+            typedef segmented_range<sequence, mpl::int_<0>, true> type;
+
+            static type call(Sequence &seq)
+            {
+                segments segs(fusion::segments(seq));
+                return type(segs);
+            }
+        };
+
+        template<typename Sequence>
+        struct as_segmented_range<Sequence, false>
+        {
+            typedef typename remove_reference<Sequence>::type sequence;
+            typedef segmented_range<sequence, mpl::int_<0>, false> type;
+
+            static type call(Sequence &seq)
+            {
+                return type(seq);
+            }
+        };
+
+        template<typename Sequence, typename Index, bool IsSegmented>
+        struct as_segmented_range<segmented_range<Sequence, Index, IsSegmented>, IsSegmented>
+        {
+            typedef segmented_range<Sequence, Index, IsSegmented> type;
+            static type &call(type &seq)
+            {
+                return seq;
+            }
+        };
+
+        ///////////////////////////////////////////////////////////////////////
+        template<
+            typename Sequence
+          , typename State = nil
+          , bool IsSegmented = traits::is_segmented<Sequence>::value
+        >
+        struct push_segments
+        {
+            typedef typename as_segmented_range<Sequence>::type range;
+            typedef typename result_of::begin<range>::type begin;
+            typedef typename result_of::deref<begin>::type next_ref;
+            typedef typename remove_reference<next_ref>::type next;
+            typedef push_segments<next, cons<range, State> > push;
+            typedef typename push::type type;
+
+            static type call(Sequence &seq, State const &state)
+            {
+                range rng(as_segmented_range<Sequence>::call(seq));
+                next_ref nxt(*fusion::begin(rng));
+                return push::call(nxt, fusion::make_cons(rng, state));
+            }
+        };
+
+        template<typename Sequence, typename State>
+        struct push_segments<Sequence, State, false>
+        {
+            typedef typename as_segmented_range<Sequence>::type range;
+            typedef cons<range, State> type;
+
+            static type call(Sequence &seq, State const &state)
+            {
+                range rng(as_segmented_range<Sequence>::call(seq));
+                return fusion::make_cons(rng, state);
+            }
+        };
+
+        ///////////////////////////////////////////////////////////////////////
+        template<typename State, bool IsEmpty = is_range_next_empty<State>::value>
+        struct pop_segments
+        {
+            typedef range_next<typename State::car_type> next;
+            typedef push_segments<typename next::type, typename State::cdr_type> push;
+            typedef typename push::type type;
+
+            static type call(State const &state)
+            {
+                typename next::type rng(next::call(state.car));
+                return push::call(rng, state.cdr);
+            }
+        };
+
+        template<typename State>
+        struct pop_segments<State, true>
+        {
+            typedef pop_segments<typename State::cdr_type> pop;
+            typedef typename pop::type type;
+
+            static type call(State const &state)
+            {
+                return pop::call(state.cdr);
+            }
+        };
+
+        template<>
+        struct pop_segments<nil, true>
+        {
+            typedef nil type;
+
+            static type call(nil const &)
+            {
+                return nil();
+            }
+        };
+    } // namespace detail
+
+    struct segmented_iterator_tag;
+
+    ////////////////////////////////////////////////////////////////////////////
+    template<typename Cons>
+    struct segmented_iterator
+      : fusion::iterator_base<segmented_iterator<Cons> >
+    {
+        typedef segmented_iterator_tag fusion_tag;
+        typedef fusion::forward_traversal_tag category;
+
+        typedef Cons cons_type;
+        typedef typename Cons::car_type car_type;
+        typedef typename Cons::cdr_type cdr_type;
+
+        explicit segmented_iterator(Cons const &c)
+          : cons_(c)
+        {}
+
+        cons_type const &cons() const { return this->cons_; };
+        car_type const &car() const { return this->cons_.car; };
+        cdr_type const &cdr() const { return this->cons_.cdr; };
+
+    private:
+        Cons cons_;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template<typename Sequence>
+    struct segmented_begin
+    {
+        typedef typename detail::push_segments<Sequence> push;
+        typedef segmented_iterator<typename push::type> type;
+
+        static type call(Sequence &seq)
+        {
+            return type(push::call(seq, nil()));
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template<typename Sequence>
+    struct segmented_end
+    {
+        typedef segmented_iterator<nil> type;
+
+        static type call(Sequence &)
+        {
+            return type(nil());
+        }
+    };
+
+    namespace extension
+    {
+        template<>
+        struct value_of_impl<segmented_iterator_tag>
+        {
+            template<typename Iterator>
+            struct apply
+            {
+                typedef typename result_of::begin<typename Iterator::car_type>::type begin;
+                typedef typename result_of::value_of<begin>::type type;
+            };
+        };
+
+        template<>
+        struct deref_impl<segmented_iterator_tag>
+        {
+            template<typename Iterator>
+            struct apply
+            {
+                typedef typename result_of::begin<typename Iterator::car_type>::type begin;
+                typedef typename result_of::deref<begin>::type type;
+
+                static type call(Iterator const &it)
+                {
+                    return *fusion::begin(it.car());
+                }
+            };
+        };
+
+        // discards the old head, expands the right child of the new head
+        // and pushes the result to the head of the list.
+
+        template<>
+        struct next_impl<segmented_iterator_tag>
+        {
+            template<
+                typename Iterator
+              , bool IsSegmentDone = detail::is_range_next_empty<Iterator>::value
+            >
+            struct apply
+            {
+                typedef typename Iterator::cdr_type cdr_type;
+                typedef detail::range_next<typename Iterator::car_type> next;
+                typedef segmented_iterator<cons<typename next::type, cdr_type> > type;
+
+                static type call(Iterator const &it)
+                {
+                    return type(fusion::make_cons(next::call(it.car()), it.cdr()));
+                }
+            };
+
+            template<typename Iterator>
+            struct apply<Iterator, true> // segment done, move to next segment
+            {
+                typedef typename Iterator::cdr_type cdr_type;
+                typedef typename detail::pop_segments<cdr_type> pop;
+                typedef segmented_iterator<typename pop::type> type;
+
+                static type call(Iterator const &it)
+                {
+                    return type(pop::call(it.cdr()));
+                }
+            };
+        };
+    }
+}} // namespace boost::fusion
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/view/filter_view.hpp b/3rdParty/Boost/src/boost/fusion/view/filter_view.hpp
new file mode 100644
index 0000000..c649407
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/filter_view.hpp
@@ -0,0 +1,13 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_VIEW_FILTER_VIEW_10022005_0608)
+#define FUSION_SEQUENCE_VIEW_FILTER_VIEW_10022005_0608
+
+#include <boost/fusion/view/filter_view/filter_view.hpp>
+#include <boost/fusion/view/filter_view/filter_view_iterator.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/begin_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/begin_impl.hpp
new file mode 100644
index 0000000..7d94261
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/begin_impl.hpp
@@ -0,0 +1,46 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_BEGIN_IMPL_05062005_0903)
+#define FUSION_BEGIN_IMPL_05062005_0903
+
+namespace boost { namespace fusion
+{
+    struct filter_view_tag;
+
+    template <typename Category, typename First, typename Last, typename Pred>
+    struct filter_iterator;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct begin_impl;
+
+        template <>
+        struct begin_impl<filter_view_tag>
+        {
+            template <typename Sequence>
+            struct apply
+            {
+                typedef typename Sequence::first_type first_type;
+                typedef typename Sequence::last_type last_type;
+                typedef typename Sequence::pred_type pred_type;
+                typedef typename Sequence::category category;
+                typedef filter_iterator<category, first_type, last_type, pred_type> type;
+
+                static type
+                call(Sequence& s)
+                {
+                    return type(s.first());
+                }
+            };
+        };
+    }
+}}
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/deref_data_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/deref_data_impl.hpp
new file mode 100644
index 0000000..bf721b5
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/deref_data_impl.hpp
@@ -0,0 +1,37 @@
+/*=============================================================================
+    Copyright (c) 2009 Christopher Schmidt
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_VIEW_FILTER_VIEW_DETAIL_DEREF_DATA_IMPL_HPP
+#define BOOST_FUSION_VIEW_FILTER_VIEW_DETAIL_DEREF_DATA_IMPL_HPP
+
+#include <boost/fusion/iterator/deref_data.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+    template <typename>
+    struct deref_data_impl;
+
+    template <>
+    struct deref_data_impl<filter_view_iterator_tag>
+    {
+        template <typename It>
+        struct apply
+        {
+            typedef typename
+                result_of::deref_data<typename It::first_type>::type
+            type;
+
+            static type
+            call(It const& it)
+            {
+                return fusion::deref_data(it.first);
+            }
+        };
+    };
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/deref_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/deref_impl.hpp
new file mode 100644
index 0000000..3e6447c
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/deref_impl.hpp
@@ -0,0 +1,29 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_DEREF_IMPL_05062005_0905)
+#define FUSION_DEREF_IMPL_05062005_0905
+
+#include <boost/fusion/iterator/detail/adapt_deref_traits.hpp>
+
+namespace boost { namespace fusion
+{
+    struct filter_view_iterator_tag;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct deref_impl;
+
+        template <>
+        struct deref_impl<filter_view_iterator_tag>
+            : detail::adapt_deref_traits {};
+    }
+}}
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/end_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/end_impl.hpp
new file mode 100644
index 0000000..baabbd4
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/end_impl.hpp
@@ -0,0 +1,45 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_END_IMPL_05062005_0906)
+#define FUSION_END_IMPL_05062005_0906
+
+namespace boost { namespace fusion
+{
+    struct filter_view_tag;
+
+    template <typename Category,  typename First, typename Last, typename Pred>
+    struct filter_iterator;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct end_impl;
+
+        template <>
+        struct end_impl<filter_view_tag>
+        {
+            template <typename Sequence>
+            struct apply
+            {
+                typedef typename Sequence::last_type last_type;
+                typedef typename Sequence::pred_type pred_type;
+                typedef typename Sequence::category category;
+                typedef filter_iterator<category,last_type, last_type, pred_type> type;
+
+                static type
+                call(Sequence& s)
+                {
+                    return type(s.last());
+                }
+            };
+        };
+    }
+}}
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/equal_to_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/equal_to_impl.hpp
new file mode 100644
index 0000000..5d7b293
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/equal_to_impl.hpp
@@ -0,0 +1,34 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2005-2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_FUSION_EQUAL_TO_IMPL_02012005_2133)
+#define BOOST_FUSION_EQUAL_TO_IMPL_02012005_2133
+
+namespace boost { namespace fusion 
+{
+    struct filter_view_iterator_tag;
+
+    namespace extension
+    {
+        template<typename I1, typename I2>
+        struct equal_to;
+
+        template<typename Tag>
+        struct equal_to_impl;
+
+        template<>
+        struct equal_to_impl<filter_view_iterator_tag>
+        {
+            template<typename I1, typename I2>
+            struct apply
+                : result_of::equal_to<typename I1::first_type, typename I2::first_type>
+            {};
+        };
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/key_of_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/key_of_impl.hpp
new file mode 100644
index 0000000..09d9112
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/key_of_impl.hpp
@@ -0,0 +1,28 @@
+/*=============================================================================
+    Copyright (c) 2009 Christopher Schmidt
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_VIEW_FILTER_VIEW_DETAIL_KEY_OF_IMPL_HPP
+#define BOOST_FUSION_VIEW_FILTER_VIEW_DETAIL_KEY_OF_IMPL_HPP
+
+#include <boost/fusion/iterator/key_of.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+    template <typename>
+    struct key_of_impl;
+
+    template <>
+    struct key_of_impl<filter_view_iterator_tag>
+    {
+        template <typename It>
+        struct apply
+          : result_of::key_of<typename It::first_type>
+        {};
+    };
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/next_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/next_impl.hpp
new file mode 100644
index 0000000..a436bfc
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/next_impl.hpp
@@ -0,0 +1,77 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_NEXT_IMPL_06052005_0900)
+#define FUSION_NEXT_IMPL_06052005_0900
+
+#include <boost/fusion/algorithm/query/detail/find_if.hpp>
+#include <boost/fusion/iterator/value_of.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/lambda.hpp>
+#include <boost/mpl/quote.hpp>
+#include <boost/mpl/bind.hpp>
+#include <boost/mpl/placeholders.hpp>
+
+namespace boost { namespace fusion
+{
+    struct filter_view_iterator_tag;
+
+    template <typename Category,  typename First, typename Last, typename Pred>
+    struct filter_iterator;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct next_impl;
+
+        template <>
+        struct next_impl<filter_view_iterator_tag>
+        {
+            template <typename Iterator>
+            struct apply
+            {
+                typedef typename Iterator::first_type first_type;
+                typedef typename Iterator::last_type last_type;
+                typedef typename Iterator::pred_type pred_type;
+                typedef typename Iterator::category category;
+
+                typedef typename
+                    mpl::eval_if<
+                        result_of::equal_to<first_type, last_type>
+                      , mpl::identity<last_type>
+                      , result_of::next<first_type>
+                    >::type
+                next_type;
+
+                typedef typename
+                    detail::static_find_if<
+                        next_type
+                      , last_type
+                      , mpl::bind1<
+                            typename mpl::lambda<pred_type>::type
+                          , mpl::bind1<mpl::quote1<result_of::value_of>,mpl::_1>
+                        >
+                    >
+                filter;
+
+                typedef filter_iterator<
+                    category, typename filter::type, last_type, pred_type>
+                type;
+
+                static type
+                call(Iterator const& i)
+                {
+                    return type(filter::call(i.first));
+                }
+            };
+        };
+    }
+}}
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/size_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/size_impl.hpp
new file mode 100644
index 0000000..1c5a0ac
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/size_impl.hpp
@@ -0,0 +1,38 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_SIZE_IMPL_09232005_1058)
+#define FUSION_SIZE_IMPL_09232005_1058
+
+#include <boost/fusion/iterator/distance.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/sequence/intrinsic/end.hpp>
+
+namespace boost { namespace fusion
+{
+    struct filter_view_tag;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct size_impl;
+
+        template <>
+        struct size_impl<filter_view_tag>
+        {
+            template <typename Sequence>
+            struct apply
+                : result_of::distance<
+                    typename result_of::begin<Sequence>::type
+                  , typename result_of::end<Sequence>::type>
+            {};
+        };
+    }
+}}
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/value_of_data_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/value_of_data_impl.hpp
new file mode 100644
index 0000000..38d1bdc
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/value_of_data_impl.hpp
@@ -0,0 +1,28 @@
+/*=============================================================================
+    Copyright (c) 2009 Christopher Schmidt
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_VIEW_FILTER_VIEW_DETAIL_VALUE_OF_DATA_IMPL_HPP
+#define BOOST_FUSION_VIEW_FILTER_VIEW_DETAIL_VALUE_OF_DATA_IMPL_HPP
+
+#include <boost/fusion/iterator/value_of_data.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+    template <typename>
+    struct value_of_data_impl;
+
+    template <>
+    struct value_of_data_impl<filter_view_iterator_tag>
+    {
+        template <typename It>
+        struct apply
+          : result_of::value_of_data<typename It::first_type>
+        {};
+    };
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/value_of_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/value_of_impl.hpp
new file mode 100644
index 0000000..f9188f6
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/filter_view/detail/value_of_impl.hpp
@@ -0,0 +1,29 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_VALUE_OF_IMPL_05062005_0857)
+#define FUSION_VALUE_OF_IMPL_05062005_0857
+
+#include <boost/fusion/iterator/detail/adapt_value_traits.hpp>
+
+namespace boost { namespace fusion
+{
+    struct filter_view_iterator_tag;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct value_of_impl;
+
+        template <>
+        struct value_of_impl<filter_view_iterator_tag>
+            : detail::adapt_value_traits {};
+    }
+}}
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/view/filter_view/filter_view.hpp b/3rdParty/Boost/src/boost/fusion/view/filter_view/filter_view.hpp
new file mode 100644
index 0000000..76ce031
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/filter_view/filter_view.hpp
@@ -0,0 +1,64 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_FILTER_VIEW_HPP)
+#define FUSION_SEQUENCE_FILTER_VIEW_HPP
+
+#include <boost/fusion/support/detail/access.hpp>
+#include <boost/fusion/support/sequence_base.hpp>
+#include <boost/fusion/support/is_view.hpp>
+#include <boost/fusion/view/filter_view/filter_view_iterator.hpp>
+#include <boost/fusion/view/filter_view/detail/begin_impl.hpp>
+#include <boost/fusion/view/filter_view/detail/end_impl.hpp>
+#include <boost/fusion/view/filter_view/detail/size_impl.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/inherit.hpp>
+#include <boost/mpl/identity.hpp>
+
+namespace boost { namespace fusion
+{
+    struct filter_view_tag;
+    struct forward_traversal_tag;
+    struct fusion_sequence_tag;
+
+    template <typename Sequence, typename Pred>
+    struct filter_view : sequence_base<filter_view<Sequence, Pred> >
+    {
+        typedef filter_view_tag fusion_tag;
+        typedef fusion_sequence_tag tag; // this gets picked up by MPL
+        typedef typename
+            mpl::eval_if<
+                traits::is_associative<Sequence>
+              , mpl::inherit2<forward_traversal_tag,associative_tag>
+              , mpl::identity<forward_traversal_tag>
+            >::type
+        category;
+        typedef mpl::true_ is_view;
+
+        typedef typename result_of::begin<Sequence>::type first_type;
+        typedef typename result_of::end<Sequence>::type last_type;
+        typedef Pred pred_type;
+
+        filter_view(Sequence& in_seq)
+            : seq(in_seq)
+        {}
+
+        first_type first() const { return fusion::begin(seq); }
+        last_type last() const { return fusion::end(seq); }
+        typename mpl::if_<traits::is_view<Sequence>, Sequence, Sequence&>::type seq;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        filter_view& operator= (filter_view const&);
+    };
+}}
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/view/filter_view/filter_view_iterator.hpp b/3rdParty/Boost/src/boost/fusion/view/filter_view/filter_view_iterator.hpp
new file mode 100644
index 0000000..8ce63cb
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/filter_view/filter_view_iterator.hpp
@@ -0,0 +1,70 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_FILTER_VIEW_ITERATOR_05062005_0849)
+#define FUSION_FILTER_VIEW_ITERATOR_05062005_0849
+
+#include <boost/fusion/iterator/mpl/convert_iterator.hpp>
+#include <boost/fusion/adapted/mpl/mpl_iterator.hpp>
+#include <boost/fusion/iterator/value_of.hpp>
+#include <boost/fusion/support/iterator_base.hpp>
+#include <boost/fusion/algorithm/query/detail/find_if.hpp>
+#include <boost/mpl/lambda.hpp>
+#include <boost/mpl/quote.hpp>
+#include <boost/mpl/bind.hpp>
+#include <boost/mpl/placeholders.hpp>
+
+#include <boost/fusion/view/filter_view/detail/deref_impl.hpp>
+#include <boost/fusion/view/filter_view/detail/next_impl.hpp>
+#include <boost/fusion/view/filter_view/detail/value_of_impl.hpp>
+#include <boost/fusion/view/filter_view/detail/equal_to_impl.hpp>
+#include <boost/fusion/view/filter_view/detail/deref_data_impl.hpp>
+#include <boost/fusion/view/filter_view/detail/value_of_data_impl.hpp>
+#include <boost/fusion/view/filter_view/detail/key_of_impl.hpp>
+
+namespace boost { namespace fusion
+{
+    struct filter_view_iterator_tag;
+    struct forward_traversal_tag;
+
+    template <typename Category, typename First, typename Last, typename Pred>
+    struct filter_iterator : iterator_base<filter_iterator<Category, First, Last, Pred> >
+    {
+        typedef convert_iterator<First> first_converter;
+        typedef typename first_converter::type first_iter;
+        typedef convert_iterator<Last> last_converter;
+        typedef typename last_converter::type last_iter;
+
+        typedef filter_view_iterator_tag fusion_tag;
+        typedef Category category;
+        typedef
+            detail::static_find_if<
+                first_iter
+              , last_iter
+              , mpl::bind1<
+                    typename mpl::lambda<Pred>::type
+                  , mpl::bind1<mpl::quote1<result_of::value_of>,mpl::_1>
+                >
+            >
+        filter;
+        typedef typename filter::type first_type;
+        typedef last_iter last_type;
+        typedef Pred pred_type;
+
+        filter_iterator(First const& in_first)
+            : first(filter::call(first_converter::call(in_first))) {}
+
+        first_type first;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        filter_iterator& operator= (filter_iterator const&);
+    };
+}}
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/view/iterator_range/detail/at_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/iterator_range/detail/at_impl.hpp
new file mode 100644
index 0000000..5f882aa
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/iterator_range/detail/at_impl.hpp
@@ -0,0 +1,44 @@
+/*=============================================================================
+    Copyright (c) 2007 Tobias Schwinger
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#if !defined(BOOST_FUSION_ITERATOR_RANGE_AT_IMPL_HPP_INCLUDED)
+#define BOOST_FUSION_ITERATOR_RANGE_AT_IMPL_HPP_INCLUDED
+
+#include <boost/fusion/iterator/advance.hpp>
+#include <boost/fusion/iterator/deref.hpp>
+
+namespace boost { namespace fusion
+{
+    struct iterator_range_tag;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct at_impl;
+
+        template <>
+        struct at_impl<iterator_range_tag>
+        {
+            template <typename Seq, typename N>
+            struct apply
+            {
+                typedef typename Seq::begin_type begin_type;
+                typedef typename result_of::advance<begin_type,N>::type pos;
+                typedef typename result_of::deref<pos>::type type;
+
+                static type
+                call(Seq& s)
+                {
+                    return * advance<N>(s.first);
+                }
+            };
+        };
+    }
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/view/iterator_range/detail/begin_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/iterator_range/detail/begin_impl.hpp
new file mode 100644
index 0000000..3234136
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/iterator_range/detail/begin_impl.hpp
@@ -0,0 +1,39 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_BEGIN_IMPL_05062005_1226)
+#define FUSION_BEGIN_IMPL_05062005_1226
+
+namespace boost { namespace fusion
+{
+    struct iterator_range_tag;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct begin_impl;
+
+        template <>
+        struct begin_impl<iterator_range_tag>
+        {
+            template <typename Sequence>
+            struct apply
+            {
+                typedef typename Sequence::begin_type type;
+
+                static type
+                call(Sequence& s)
+                {
+                    return s.first;
+                }
+            };
+        };
+    }
+}}
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/view/iterator_range/detail/end_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/iterator_range/detail/end_impl.hpp
new file mode 100644
index 0000000..dacbe19
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/iterator_range/detail/end_impl.hpp
@@ -0,0 +1,39 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_END_IMPL_05062005_1226)
+#define FUSION_END_IMPL_05062005_1226
+
+namespace boost { namespace fusion
+{
+    struct iterator_range_tag;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct end_impl;
+
+        template <>
+        struct end_impl<iterator_range_tag>
+        {
+            template <typename Sequence>
+            struct apply
+            {
+                typedef typename Sequence::end_type type;
+
+                static type
+                call(Sequence& s)
+                {
+                    return s.last;
+                }
+            };
+        };
+    }
+}}
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/view/iterator_range/detail/value_at_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/iterator_range/detail/value_at_impl.hpp
new file mode 100644
index 0000000..b6fe888
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/iterator_range/detail/value_at_impl.hpp
@@ -0,0 +1,38 @@
+/*=============================================================================
+    Copyright (c) 2007 Tobias Schwinger
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#if !defined(BOOST_FUSION_ITERATOR_RANGE_VALUE_AT_IMPL_HPP_INCLUDED)
+#define BOOST_FUSION_ITERATOR_RANGE_VALUE_AT_IMPL_HPP_INCLUDED
+
+#include <boost/fusion/iterator/advance.hpp>
+#include <boost/fusion/iterator/value_of.hpp>
+
+namespace boost { namespace fusion
+{
+    struct iterator_range_tag;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct value_at_impl;
+
+        template <>
+        struct value_at_impl<iterator_range_tag>
+        {
+            template <typename Seq, typename N>
+            struct apply
+            {
+                typedef typename Seq::begin_type begin_type;
+                typedef typename result_of::advance<begin_type,N>::type pos;
+                typedef typename result_of::value_of<pos>::type type;
+            };
+        };
+    }
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/view/iterator_range/iterator_range.hpp b/3rdParty/Boost/src/boost/fusion/view/iterator_range/iterator_range.hpp
new file mode 100644
index 0000000..4d16ca6
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/iterator_range/iterator_range.hpp
@@ -0,0 +1,59 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_ITERATOR_RANGE_05062005_1224)
+#define FUSION_ITERATOR_RANGE_05062005_1224
+
+#include <boost/fusion/support/detail/access.hpp>
+#include <boost/fusion/support/sequence_base.hpp>
+#include <boost/fusion/support/category_of.hpp>
+#include <boost/fusion/iterator/distance.hpp>
+#include <boost/fusion/iterator/mpl/convert_iterator.hpp>
+#include <boost/fusion/view/iterator_range/detail/begin_impl.hpp>
+#include <boost/fusion/view/iterator_range/detail/end_impl.hpp>
+#include <boost/fusion/view/iterator_range/detail/at_impl.hpp>
+#include <boost/fusion/view/iterator_range/detail/value_at_impl.hpp>
+#include <boost/fusion/adapted/mpl/mpl_iterator.hpp>
+#include <boost/config.hpp>
+
+#if defined (BOOST_MSVC)
+#  pragma warning(push)
+#  pragma warning (disable: 4512) // assignment operator could not be generated.
+#endif
+
+namespace boost { namespace fusion
+{
+    struct iterator_range_tag;
+    struct fusion_sequence_tag;
+
+    template <typename First, typename Last>
+    struct iterator_range : sequence_base<iterator_range<First, Last> >
+    {
+        typedef typename convert_iterator<First>::type begin_type;
+        typedef typename convert_iterator<Last>::type end_type;
+        typedef iterator_range_tag fusion_tag;
+        typedef fusion_sequence_tag tag; // this gets picked up by MPL
+        typedef typename result_of::distance<begin_type, end_type>::type size;
+        typedef mpl::true_ is_view;
+
+        typedef typename traits::category_of<begin_type>::type category;
+
+        iterator_range(First const& in_first, Last const& in_last)
+            : first(convert_iterator<First>::call(in_first))
+            , last(convert_iterator<Last>::call(in_last)) {}
+
+        begin_type first;
+        end_type last;
+    };
+}}
+
+#if defined (BOOST_MSVC)
+#  pragma warning(pop)
+#endif
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/begin_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/begin_impl.hpp
new file mode 100644
index 0000000..140d375
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/begin_impl.hpp
@@ -0,0 +1,67 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_BEGIN_IMPL_07162005_0115)
+#define FUSION_BEGIN_IMPL_07162005_0115
+
+#include <boost/fusion/iterator/equal_to.hpp>
+#include <boost/mpl/if.hpp>
+
+namespace boost { namespace fusion
+{
+    struct joint_view_tag;
+
+    template <typename Category, typename First, typename Last, typename Concat>
+    struct joint_view_iterator;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct begin_impl;
+
+        template <>
+        struct begin_impl<joint_view_tag>
+        {
+            template <typename Sequence>
+            struct apply
+            {
+                typedef typename Sequence::first_type first_type;
+                typedef typename Sequence::last_type last_type;
+                typedef typename Sequence::concat_type concat_type;
+                typedef typename Sequence::category category;
+                typedef result_of::equal_to<first_type, last_type> equal_to;
+
+                typedef typename
+                    mpl::if_<
+                        equal_to
+                      , concat_type
+                      , joint_view_iterator<category, first_type, last_type, concat_type>
+                    >::type
+                type;
+
+                static type
+                call(Sequence& s, mpl::true_)
+                {
+                    return s.concat();
+                }
+
+                static type
+                call(Sequence& s, mpl::false_)
+                {
+                    return type(s.first(), s.concat());
+                }
+
+                static type
+                call(Sequence& s)
+                {
+                    return call(s, equal_to());
+                }
+            };
+        };
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/deref_data_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/deref_data_impl.hpp
new file mode 100644
index 0000000..a60a125
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/deref_data_impl.hpp
@@ -0,0 +1,37 @@
+/*=============================================================================
+    Copyright (c) 2009 Christopher Schmidt
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_VIEW_JOINT_VIEW_DETAIL_DEREF_DATA_IMPL_HPP
+#define BOOST_FUSION_VIEW_JOINT_VIEW_DETAIL_DEREF_DATA_IMPL_HPP
+
+#include <boost/fusion/iterator/deref_data.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+    template <typename>
+    struct deref_data_impl;
+
+    template <>
+    struct deref_data_impl<joint_view_iterator_tag>
+    {
+        template <typename It>
+        struct apply
+        {
+            typedef typename
+                result_of::deref_data<typename It::first_type>::type
+            type;
+
+            static type
+            call(It const& it)
+            {
+                return fusion::deref_data(it.first);
+            }
+        };
+    };
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/deref_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/deref_impl.hpp
new file mode 100644
index 0000000..7eb4718
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/deref_impl.hpp
@@ -0,0 +1,29 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_DEREF_IMPL_07162005_0137)
+#define FUSION_DEREF_IMPL_07162005_0137
+
+#include <boost/fusion/iterator/detail/adapt_deref_traits.hpp>
+
+namespace boost { namespace fusion
+{
+    struct joint_view_iterator_tag;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct deref_impl;
+
+        template <>
+        struct deref_impl<joint_view_iterator_tag>
+            : detail::adapt_deref_traits {};
+    }
+}}
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/end_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/end_impl.hpp
new file mode 100644
index 0000000..5bdeb02
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/end_impl.hpp
@@ -0,0 +1,40 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_END_IMPL_07162005_0128)
+#define FUSION_END_IMPL_07162005_0128
+
+#include <boost/fusion/iterator/equal_to.hpp>
+#include <boost/mpl/if.hpp>
+
+namespace boost { namespace fusion
+{
+    struct joint_view_tag;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct end_impl;
+
+        template <>
+        struct end_impl<joint_view_tag>
+        {
+            template <typename Sequence>
+            struct apply
+            {
+                typedef typename Sequence::concat_last_type type;
+
+                static type
+                call(Sequence& s)
+                {
+                    return s.concat_last();
+                }
+            };
+        };
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/key_of_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/key_of_impl.hpp
new file mode 100644
index 0000000..e413c3d
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/key_of_impl.hpp
@@ -0,0 +1,28 @@
+/*=============================================================================
+    Copyright (c) 2009 Christopher Schmidt
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_VIEW_JOINT_VIEW_DETAIL_KEY_OF_IMPL_HPP
+#define BOOST_FUSION_VIEW_JOINT_VIEW_DETAIL_KEY_OF_IMPL_HPP
+
+#include <boost/fusion/iterator/key_of.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+    template <typename>
+    struct key_of_impl;
+
+    template <>
+    struct key_of_impl<joint_view_iterator_tag>
+    {
+        template <typename It>
+        struct apply
+          : result_of::key_of<typename It::first_type>
+        {};
+    };
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/next_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/next_impl.hpp
new file mode 100644
index 0000000..2313faa
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/next_impl.hpp
@@ -0,0 +1,71 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_NEXT_IMPL_07162005_0136)
+#define FUSION_NEXT_IMPL_07162005_0136
+
+#include <boost/fusion/iterator/next.hpp>
+#include <boost/fusion/iterator/equal_to.hpp>
+#include <boost/mpl/if.hpp>
+
+namespace boost { namespace fusion
+{
+    struct joint_view_iterator_tag;
+
+    template <typename Category, typename First, typename Last, typename Concat>
+    struct joint_view_iterator;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct next_impl;
+
+        template <>
+        struct next_impl<joint_view_iterator_tag>
+        {
+            template <typename Iterator>
+            struct apply
+            {
+                typedef typename Iterator::first_type first_type;
+                typedef typename Iterator::last_type last_type;
+                typedef typename Iterator::concat_type concat_type;
+                typedef typename Iterator::category category;
+                typedef typename result_of::next<first_type>::type next_type;
+                typedef result_of::equal_to<next_type, last_type> equal_to;
+
+                typedef typename
+                    mpl::if_<
+                        equal_to
+                      , concat_type
+                      , joint_view_iterator<category, next_type, last_type, concat_type>
+                    >::type
+                type;
+
+                static type
+                call(Iterator const& i, mpl::true_)
+                {
+                    return i.concat;
+                }
+
+                static type
+                call(Iterator const& i, mpl::false_)
+                {
+                    return type(fusion::next(i.first), i.concat);
+                }
+
+                static type
+                call(Iterator const& i)
+                {
+                    return call(i, equal_to());
+                }
+            };
+        };
+    }
+}}
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/value_of_data_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/value_of_data_impl.hpp
new file mode 100644
index 0000000..cc883d7
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/value_of_data_impl.hpp
@@ -0,0 +1,28 @@
+/*=============================================================================
+    Copyright (c) 2009 Christopher Schmidt
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_VIEW_JOINT_VIEW_DETAIL_VALUE_OF_DATA_IMPL_HPP
+#define BOOST_FUSION_VIEW_JOINT_VIEW_DETAIL_VALUE_OF_DATA_IMPL_HPP
+
+#include <boost/fusion/iterator/value_of_data.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+    template <typename>
+    struct value_of_data_impl;
+
+    template <>
+    struct value_of_data_impl<joint_view_iterator_tag>
+    {
+        template <typename It>
+        struct apply
+          : result_of::value_of_data<typename It::first_type>
+        {};
+    };
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/value_of_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/value_of_impl.hpp
new file mode 100644
index 0000000..53afe1c
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/joint_view/detail/value_of_impl.hpp
@@ -0,0 +1,29 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_VALUE_IMPL_07162005_0132)
+#define FUSION_VALUE_IMPL_07162005_0132
+
+#include <boost/fusion/iterator/detail/adapt_value_traits.hpp>
+
+namespace boost { namespace fusion
+{
+    struct joint_view_iterator_tag;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct value_of_impl;
+
+        template <>
+        struct value_of_impl<joint_view_iterator_tag>
+            : detail::adapt_value_traits {};
+    }
+}}
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/view/joint_view/joint_view.hpp b/3rdParty/Boost/src/boost/fusion/view/joint_view/joint_view.hpp
new file mode 100644
index 0000000..e0d5c09
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/joint_view/joint_view.hpp
@@ -0,0 +1,75 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_JOINT_VIEW_07162005_0140)
+#define FUSION_JOINT_VIEW_07162005_0140
+
+#include <boost/fusion/support/detail/access.hpp>
+#include <boost/fusion/support/is_view.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/fusion/sequence/intrinsic/size.hpp>
+#include <boost/fusion/view/joint_view/joint_view_iterator.hpp>
+#include <boost/fusion/view/joint_view/detail/begin_impl.hpp>
+#include <boost/fusion/view/joint_view/detail/end_impl.hpp>
+#include <boost/fusion/support/sequence_base.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/plus.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/inherit.hpp>
+#include <boost/mpl/identity.hpp>
+
+namespace boost { namespace fusion
+{
+    struct joint_view_tag;
+    struct forward_traversal_tag;
+    struct fusion_sequence_tag;
+
+    template <typename Sequence1, typename Sequence2>
+    struct joint_view : sequence_base<joint_view<Sequence1, Sequence2> >
+    {
+        typedef joint_view_tag fusion_tag;
+        typedef fusion_sequence_tag tag; // this gets picked up by MPL
+        typedef typename
+            mpl::eval_if<
+                mpl::and_<
+                    traits::is_associative<Sequence1>
+                  , traits::is_associative<Sequence2>
+                >
+              , mpl::inherit2<forward_traversal_tag,associative_tag>
+              , mpl::identity<forward_traversal_tag>
+            >::type
+        category;
+        typedef mpl::true_ is_view;
+
+        typedef typename result_of::begin<Sequence1>::type first_type;
+        typedef typename result_of::end<Sequence1>::type last_type;
+        typedef typename result_of::begin<Sequence2>::type concat_type;
+        typedef typename result_of::end<Sequence2>::type concat_last_type;
+        typedef typename mpl::plus<result_of::size<Sequence1>, result_of::size<Sequence2> >::type size;
+
+        joint_view(Sequence1& in_seq1, Sequence2& in_seq2)
+            : seq1(in_seq1)
+            , seq2(in_seq2)
+        {}
+
+        first_type first() const { return fusion::begin(seq1); }
+        concat_type concat() const { return fusion::begin(seq2); }
+        concat_last_type concat_last() const { return fusion::end(seq2); }
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        joint_view& operator= (joint_view const&);
+
+        typename mpl::if_<traits::is_view<Sequence1>, Sequence1, Sequence1&>::type seq1;
+        typename mpl::if_<traits::is_view<Sequence2>, Sequence2, Sequence2&>::type seq2;
+    };
+}}
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/view/joint_view/joint_view_iterator.hpp b/3rdParty/Boost/src/boost/fusion/view/joint_view/joint_view_iterator.hpp
new file mode 100644
index 0000000..79b4d11
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/joint_view/joint_view_iterator.hpp
@@ -0,0 +1,59 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_JOINT_VIEW_ITERATOR_07162005_0140)
+#define FUSION_JOINT_VIEW_ITERATOR_07162005_0140
+
+#include <boost/fusion/support/iterator_base.hpp>
+#include <boost/fusion/iterator/equal_to.hpp>
+#include <boost/fusion/iterator/mpl/convert_iterator.hpp>
+#include <boost/fusion/adapted/mpl/mpl_iterator.hpp>
+#include <boost/fusion/view/joint_view/detail/deref_impl.hpp>
+#include <boost/fusion/view/joint_view/detail/next_impl.hpp>
+#include <boost/fusion/view/joint_view/detail/value_of_impl.hpp>
+#include <boost/fusion/view/joint_view/detail/deref_data_impl.hpp>
+#include <boost/fusion/view/joint_view/detail/value_of_data_impl.hpp>
+#include <boost/fusion/view/joint_view/detail/key_of_impl.hpp>
+#include <boost/static_assert.hpp>
+
+namespace boost { namespace fusion
+{
+    struct joint_view_iterator_tag;
+    struct forward_traversal_tag;
+
+    template <typename Category, typename First, typename Last, typename Concat>
+    struct joint_view_iterator
+        : iterator_base<joint_view_iterator<Category, First, Last, Concat> >
+    {
+        typedef convert_iterator<First> first_converter;
+        typedef convert_iterator<Last> last_converter;
+        typedef convert_iterator<Concat> concat_converter;
+
+        typedef typename first_converter::type first_type;
+        typedef typename last_converter::type last_type;
+        typedef typename concat_converter::type concat_type;
+
+        typedef joint_view_iterator_tag fusion_tag;
+        typedef Category category;
+        BOOST_STATIC_ASSERT((!result_of::equal_to<first_type, last_type>::value));
+
+        joint_view_iterator(First const& in_first, Concat const& in_concat)
+            : first(first_converter::call(in_first))
+            , concat(concat_converter::call(in_concat))
+        {}
+
+        first_type first;
+        concat_type concat;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        joint_view_iterator& operator= (joint_view_iterator const&);
+    };
+}}
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/advance_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/advance_impl.hpp
new file mode 100644
index 0000000..8785881
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/advance_impl.hpp
@@ -0,0 +1,47 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2005-2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_ADVANCE_IMPL_14122005_2015)
+#define FUSION_ADVANCE_IMPL_14122005_2015
+
+#include <boost/fusion/iterator/advance.hpp>
+#include <boost/mpl/negate.hpp>
+
+namespace boost { namespace fusion {
+
+    struct reverse_view_iterator_tag;
+
+    template <typename Iterator>
+    struct reverse_view_iterator;
+
+    namespace extension
+    {
+        template<typename Tag>
+        struct advance_impl;
+
+        template<>
+        struct advance_impl<reverse_view_iterator_tag>
+        {
+            template<typename Iterator, typename Dist>
+            struct apply
+            {
+                typedef typename Iterator::first_type first_type;
+                typedef typename mpl::negate<Dist>::type negative_dist;
+                typedef typename result_of::advance<first_type, negative_dist>::type advanced_type;
+                typedef reverse_view_iterator<advanced_type> type;
+
+                static type
+                call(Iterator const& i)
+                {
+                    return type(boost::fusion::advance<negative_dist>(i.first));
+                }
+            };
+        };
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/at_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/at_impl.hpp
new file mode 100644
index 0000000..2e84259
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/at_impl.hpp
@@ -0,0 +1,41 @@
+/*=============================================================================
+    Copyright (c) 2009 Christopher Schmidt
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_VIEW_REVERSE_VIEW_DETAIL_AT_IMPL_HPP
+#define BOOST_FUSION_VIEW_REVERSE_VIEW_DETAIL_AT_IMPL_HPP
+
+#include <boost/fusion/sequence/intrinsic/at.hpp>
+#include <boost/mpl/minus.hpp>
+#include <boost/mpl/int.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+    template <typename>
+    struct at_impl;
+
+    template <>
+    struct at_impl<reverse_view_tag>
+    {
+        template <typename Seq, typename N>
+        struct apply
+        {
+            typedef mpl::minus<typename Seq::size, mpl::int_<1>, N> real_n;
+
+            typedef typename
+                result_of::at<typename Seq::seq_type, real_n>::type
+            type;
+
+            static type
+            call(Seq& seq)
+            {
+                return fusion::at<real_n>(seq.seq);
+            }
+        };
+    };
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/begin_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/begin_impl.hpp
new file mode 100644
index 0000000..b7968f5
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/begin_impl.hpp
@@ -0,0 +1,42 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_BEGIN_IMPL_07202005_0849)
+#define FUSION_BEGIN_IMPL_07202005_0849
+
+namespace boost { namespace fusion
+{
+    struct reverse_view_tag;
+
+    template <typename Iterator>
+    struct reverse_view_iterator;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct begin_impl;
+
+        template <>
+        struct begin_impl<reverse_view_tag>
+        {
+            template <typename Sequence>
+            struct apply
+            {
+                typedef reverse_view_iterator<typename Sequence::last_type> type;
+    
+                static type
+                call(Sequence const& s)
+                {
+                    return type(s.last());
+                }
+            };
+        };
+    }
+}}
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/deref_data_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/deref_data_impl.hpp
new file mode 100644
index 0000000..2f52bdd
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/deref_data_impl.hpp
@@ -0,0 +1,37 @@
+/*=============================================================================
+    Copyright (c) 2009 Christopher Schmidt
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_VIEW_REVERSE_VIEW_DETAIL_DEREF_DATA_IMPL_HPP
+#define BOOST_FUSION_VIEW_REVERSE_VIEW_DETAIL_DEREF_DATA_IMPL_HPP
+
+#include <boost/fusion/iterator/deref_data.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+    template <typename>
+    struct deref_data_impl;
+
+    template <>
+    struct deref_data_impl<reverse_view_iterator_tag>
+    {
+        template <typename It>
+        struct apply
+        {
+            typedef typename
+                result_of::deref_data<typename It::first_type>::type
+            type;
+
+            static type
+            call(It const& it)
+            {
+                return fusion::deref_data(it.first);
+            }
+        };
+    };
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/deref_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/deref_impl.hpp
new file mode 100644
index 0000000..97cb891
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/deref_impl.hpp
@@ -0,0 +1,48 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_DEREF_IMPL_07202005_0851)
+#define FUSION_DEREF_IMPL_07202005_0851
+
+#include <boost/fusion/iterator/deref.hpp>
+#include <boost/fusion/iterator/prior.hpp>
+
+namespace boost { namespace fusion
+{
+    struct reverse_view_iterator_tag;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct deref_impl;
+
+        template <>
+        struct deref_impl<reverse_view_iterator_tag>
+        {
+            template <typename Iterator>
+            struct apply
+            {
+                typedef typename
+                    result_of::deref<
+                        typename result_of::prior<
+                            typename Iterator::first_type
+                        >::type
+                    >::type
+                type;
+    
+                static type
+                call(Iterator const& i)
+                {
+                    return *fusion::prior(i.first);
+                }
+            };
+        };
+    }
+}}
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/distance_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/distance_impl.hpp
new file mode 100644
index 0000000..5edc749
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/distance_impl.hpp
@@ -0,0 +1,45 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2005-2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_DISTANCE_IMPL_14122005_2104)
+#define FUSION_DISTANCE_IMPL_14122005_2104
+
+#include <boost/fusion/iterator/distance.hpp>
+
+namespace boost { namespace fusion {
+
+    struct reverse_view_iterator_tag;
+
+    template <typename Iterator>
+    struct reverse_view_iterator;
+
+    namespace extension
+    {
+        template<typename Tag>
+        struct distance_impl;
+
+        template<>
+        struct distance_impl<reverse_view_iterator_tag>
+        {
+            template<typename First, typename Last>
+            struct apply
+            {
+                typedef typename First::first_type first_type;
+                typedef typename Last::first_type last_type;
+                typedef typename result_of::distance<last_type, first_type>::type type;
+
+                static type
+                call(First const& first, Last const& last)
+                {
+                    return boost::fusion::distance(last.first, first.first);
+                }
+            };
+        };
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/end_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/end_impl.hpp
new file mode 100644
index 0000000..916e49d
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/end_impl.hpp
@@ -0,0 +1,42 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_END_IMPL_07202005_0851)
+#define FUSION_END_IMPL_07202005_0851
+
+namespace boost { namespace fusion
+{
+    struct reverse_view_tag;
+
+    template <typename Iterator>
+    struct reverse_view_iterator;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct end_impl;
+
+        template <>
+        struct end_impl<reverse_view_tag>
+        {
+            template <typename Sequence>
+            struct apply
+            {
+                typedef reverse_view_iterator<typename Sequence::first_type> type;
+    
+                static type
+                call(Sequence const& s)
+                {
+                    return type(s.first());
+                }
+            };
+        };
+    }
+}}
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/key_of_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/key_of_impl.hpp
new file mode 100644
index 0000000..3d760fd
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/key_of_impl.hpp
@@ -0,0 +1,28 @@
+/*=============================================================================
+    Copyright (c) 2009 Christopher Schmidt
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_VIEW_REVERSE_VIEW_DETAIL_KEY_OF_IMPL_HPP
+#define BOOST_FUSION_VIEW_REVERSE_VIEW_DETAIL_KEY_OF_IMPL_HPP
+
+#include <boost/fusion/iterator/key_of.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+    template <typename>
+    struct key_of_impl;
+
+    template <>
+    struct key_of_impl<reverse_view_iterator_tag>
+    {
+        template <typename It>
+        struct apply
+          : result_of::key_of<typename It::it_type>
+        {};
+    };
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/next_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/next_impl.hpp
new file mode 100644
index 0000000..c036510
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/next_impl.hpp
@@ -0,0 +1,47 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_NEXT_IMPL_07202005_0856)
+#define FUSION_NEXT_IMPL_07202005_0856
+
+#include <boost/fusion/iterator/next.hpp>
+#include <boost/fusion/iterator/prior.hpp>
+
+namespace boost { namespace fusion
+{
+    struct reverse_view_iterator_tag;
+
+    template <typename Iterator>
+    struct reverse_view_iterator;
+
+    namespace extension
+    {
+        template <>
+        struct next_impl<reverse_view_iterator_tag>
+        {
+            template <typename Iterator>
+            struct apply
+            {
+                typedef typename Iterator::first_type first_type;
+                typedef typename prior_impl<typename first_type::fusion_tag>::
+                    template apply<first_type>
+                wrapped;
+    
+                typedef reverse_view_iterator<typename wrapped::type> type;
+    
+                static type
+                call(Iterator const& i)
+                {
+                    return type(wrapped::call(i.first));
+                }
+            };
+        };
+    }
+}}
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/prior_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/prior_impl.hpp
new file mode 100644
index 0000000..317054f
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/prior_impl.hpp
@@ -0,0 +1,47 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_PRIOR_IMPL_07202005_0857)
+#define FUSION_PRIOR_IMPL_07202005_0857
+
+#include <boost/fusion/iterator/next.hpp>
+#include <boost/fusion/iterator/prior.hpp>
+
+namespace boost { namespace fusion
+{
+    struct reverse_view_iterator_tag;
+
+    template <typename Iterator>
+    struct reverse_view_iterator;
+
+    namespace extension
+    {
+        template <>
+        struct prior_impl<reverse_view_iterator_tag>
+        {
+            template <typename Iterator>
+            struct apply
+            {
+                typedef typename Iterator::first_type first_type;
+                typedef typename next_impl<typename first_type::fusion_tag>::
+                    template apply<first_type>
+                wrapped;
+    
+                typedef reverse_view_iterator<typename wrapped::type> type;
+    
+                static type
+                call(Iterator const& i)
+                {
+                    return type(wrapped::call(i.first));
+                }
+            };
+        };
+    }
+}}
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/value_at_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/value_at_impl.hpp
new file mode 100644
index 0000000..90f5129
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/value_at_impl.hpp
@@ -0,0 +1,33 @@
+/*=============================================================================
+    Copyright (c) 2009 Christopher Schmidt
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_VIEW_REVERSE_VIEW_DETAIL_VALUE_AT_IMPL_HPP
+#define BOOST_FUSION_VIEW_REVERSE_VIEW_DETAIL_VALUE_AT_IMPL_HPP
+
+#include <boost/fusion/sequence/intrinsic/value_at.hpp>
+#include <boost/mpl/minus.hpp>
+#include <boost/mpl/int.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+    template <typename>
+    struct value_at_impl;
+
+    template <>
+    struct value_at_impl<reverse_view_tag>
+    {
+        template <typename Seq, typename N>
+        struct apply
+          : result_of::value_at<
+                typename Seq::seq_type
+              , mpl::minus<typename Seq::size, mpl::int_<1>, N>
+            >
+        {};
+    };
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/value_of_data_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/value_of_data_impl.hpp
new file mode 100644
index 0000000..69d310f
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/value_of_data_impl.hpp
@@ -0,0 +1,28 @@
+/*=============================================================================
+    Copyright (c) 2009 Christopher Schmidt
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_VIEW_REVERSE_VIEW_DETAIL_VALUE_OF_DATA_IMPL_HPP
+#define BOOST_FUSION_VIEW_REVERSE_VIEW_DETAIL_VALUE_OF_DATA_IMPL_HPP
+
+#include <boost/fusion/iterator/value_of_data.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+    template <typename>
+    struct value_of_data_impl;
+
+    template <>
+    struct value_of_data_impl<reverse_view_iterator_tag>
+    {
+        template <typename It>
+        struct apply
+          : result_of::value_of_data<typename It::first_type>
+        {};
+    };
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/value_of_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/value_of_impl.hpp
new file mode 100644
index 0000000..bf9b2ad
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/reverse_view/detail/value_of_impl.hpp
@@ -0,0 +1,42 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_VALUE_OF_IMPL_07202005_0900)
+#define FUSION_VALUE_OF_IMPL_07202005_0900
+
+#include <boost/fusion/iterator/value_of.hpp>
+#include <boost/fusion/iterator/prior.hpp>
+
+namespace boost { namespace fusion
+{
+    struct reverse_view_iterator_tag;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct value_of_impl;
+
+        template <>
+        struct value_of_impl<reverse_view_iterator_tag>
+        {
+            template <typename Iterator>
+            struct apply
+            {
+                typedef typename
+                    result_of::value_of<
+                        typename result_of::prior<
+                            typename Iterator::first_type
+                        >::type
+                    >::type
+                type;
+            };
+        };
+    }
+}}
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/view/reverse_view/reverse_view.hpp b/3rdParty/Boost/src/boost/fusion/view/reverse_view/reverse_view.hpp
new file mode 100644
index 0000000..f3e8ffe
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/reverse_view/reverse_view.hpp
@@ -0,0 +1,68 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_REVERSE_VIEW_07202005_0836)
+#define FUSION_REVERSE_VIEW_07202005_0836
+
+#include <boost/fusion/support/detail/access.hpp>
+#include <boost/fusion/support/is_view.hpp>
+#include <boost/fusion/support/category_of.hpp>
+#include <boost/fusion/view/reverse_view/reverse_view_iterator.hpp>
+#include <boost/fusion/view/reverse_view/detail/begin_impl.hpp>
+#include <boost/fusion/view/reverse_view/detail/end_impl.hpp>
+#include <boost/fusion/view/reverse_view/detail/at_impl.hpp>
+#include <boost/fusion/view/reverse_view/detail/value_at_impl.hpp>
+#include <boost/fusion/support/sequence_base.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/fusion/sequence/intrinsic/size.hpp>
+#include <boost/type_traits/is_base_of.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/inherit.hpp>
+#include <boost/mpl/identity.hpp>
+
+namespace boost { namespace fusion
+{
+    struct reverse_view_tag;
+    struct fusion_sequence_tag;
+
+    template <typename Sequence>
+    struct reverse_view : sequence_base<reverse_view<Sequence> >
+    {
+        typedef reverse_view_tag fusion_tag;
+        typedef fusion_sequence_tag tag; // this gets picked up by MPL
+        typedef mpl::true_ is_view;
+
+        typedef Sequence seq_type;
+        typedef typename traits::category_of<Sequence>::type category;
+        typedef typename result_of::begin<Sequence>::type first_type;
+        typedef typename result_of::end<Sequence>::type last_type;
+        typedef typename result_of::size<Sequence>::type size;
+
+        BOOST_STATIC_ASSERT((
+            is_base_of<
+                bidirectional_traversal_tag
+              , typename traits::category_of<first_type>::type>::value));
+
+        reverse_view(Sequence& in_seq)
+            : seq(in_seq)
+        {}
+
+        first_type first() const { return fusion::begin(seq); }
+        last_type last() const { return fusion::end(seq); }
+        typename mpl::if_<traits::is_view<Sequence>, Sequence, Sequence&>::type seq;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        reverse_view& operator= (reverse_view const&);
+    };
+}}
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/view/reverse_view/reverse_view_iterator.hpp b/3rdParty/Boost/src/boost/fusion/view/reverse_view/reverse_view_iterator.hpp
new file mode 100644
index 0000000..ddf2e9b
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/reverse_view/reverse_view_iterator.hpp
@@ -0,0 +1,56 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_REVERSE_VIEW_ITERATOR_07202005_0835)
+#define FUSION_REVERSE_VIEW_ITERATOR_07202005_0835
+
+#include <boost/fusion/support/iterator_base.hpp>
+#include <boost/fusion/support/category_of.hpp>
+#include <boost/fusion/iterator/mpl/convert_iterator.hpp>
+#include <boost/fusion/adapted/mpl/mpl_iterator.hpp>
+#include <boost/fusion/view/reverse_view/detail/deref_impl.hpp>
+#include <boost/fusion/view/reverse_view/detail/next_impl.hpp>
+#include <boost/fusion/view/reverse_view/detail/prior_impl.hpp>
+#include <boost/fusion/view/reverse_view/detail/advance_impl.hpp>
+#include <boost/fusion/view/reverse_view/detail/distance_impl.hpp>
+#include <boost/fusion/view/reverse_view/detail/value_of_impl.hpp>
+#include <boost/fusion/view/reverse_view/detail/deref_data_impl.hpp>
+#include <boost/fusion/view/reverse_view/detail/value_of_data_impl.hpp>
+#include <boost/fusion/view/reverse_view/detail/key_of_impl.hpp>
+#include <boost/type_traits/is_base_of.hpp>
+#include <boost/static_assert.hpp>
+
+namespace boost { namespace fusion
+{
+    struct reverse_view_iterator_tag;
+
+    template <typename First>
+    struct reverse_view_iterator
+        : iterator_base<reverse_view_iterator<First> >
+    {
+        typedef convert_iterator<First> converter;
+        typedef typename converter::type first_type;
+        typedef reverse_view_iterator_tag fusion_tag;
+        typedef typename traits::category_of<first_type>::type category;
+
+        BOOST_STATIC_ASSERT((
+            is_base_of<
+                bidirectional_traversal_tag
+              , category>::value));
+
+        reverse_view_iterator(First const& in_first)
+            : first(converter::call(in_first)) {}
+
+        first_type first;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        reverse_view_iterator& operator= (reverse_view_iterator const&);
+    };
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/fusion/view/single_view.hpp b/3rdParty/Boost/src/boost/fusion/view/single_view.hpp
new file mode 100644
index 0000000..3640fae
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/single_view.hpp
@@ -0,0 +1,13 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_SINGLE_VIEW_03192006_2216)
+#define FUSION_SINGLE_VIEW_03192006_2216
+
+#include <boost/fusion/view/single_view/single_view.hpp>
+#include <boost/fusion/view/single_view/single_view_iterator.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/view/single_view/detail/begin_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/single_view/detail/begin_impl.hpp
new file mode 100644
index 0000000..395992b
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/single_view/detail/begin_impl.hpp
@@ -0,0 +1,42 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_BEGIN_IMPL_05052005_0305)
+#define FUSION_BEGIN_IMPL_05052005_0305
+
+namespace boost { namespace fusion
+{
+    struct single_view_tag;
+
+    template <typename T>
+    struct single_view_iterator;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct begin_impl;
+
+        template <>
+        struct begin_impl<single_view_tag>
+        {
+            template <typename Sequence>
+            struct apply
+            {
+                typedef single_view_iterator<Sequence> type;
+    
+                static type
+                call(Sequence& s)
+                {
+                    return type(s);
+                }
+            };
+        };
+    }
+}}
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/view/single_view/detail/deref_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/single_view/detail/deref_impl.hpp
new file mode 100644
index 0000000..355cf6a
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/single_view/detail/deref_impl.hpp
@@ -0,0 +1,43 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_DEREF_IMPL_05052005_0258)
+#define FUSION_DEREF_IMPL_05052005_0258
+
+#include <boost/fusion/support/detail/access.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/type_traits/is_const.hpp>
+
+namespace boost { namespace fusion
+{
+    struct single_view_iterator_tag;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct deref_impl;
+
+        template <>
+        struct deref_impl<single_view_iterator_tag>
+        {
+            template <typename Iterator>
+            struct apply
+            {
+                typedef typename Iterator::value_type type;
+    
+                static type
+                call(Iterator const& i)
+                {
+                    return i.val;
+                }
+            };
+        };
+    }
+}}
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/view/single_view/detail/end_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/single_view/detail/end_impl.hpp
new file mode 100644
index 0000000..d239c24
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/single_view/detail/end_impl.hpp
@@ -0,0 +1,42 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_END_IMPL_05052005_0332)
+#define FUSION_END_IMPL_05052005_0332
+
+namespace boost { namespace fusion
+{
+    struct single_view_tag;
+
+    template <typename T>
+    struct single_view_iterator_end;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct end_impl;
+
+        template <>
+        struct end_impl<single_view_tag>
+        {
+            template <typename Sequence>
+            struct apply
+            {
+                typedef single_view_iterator_end<Sequence> type;
+    
+                static type
+                call(Sequence&)
+                {
+                    return type();
+                }
+            };
+        };
+    }
+}}
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/view/single_view/detail/next_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/single_view/detail/next_impl.hpp
new file mode 100644
index 0000000..c9cdafd
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/single_view/detail/next_impl.hpp
@@ -0,0 +1,47 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_NEXT_IMPL_05052005_0331)
+#define FUSION_NEXT_IMPL_05052005_0331
+
+namespace boost { namespace fusion
+{
+    struct single_view_iterator_tag;
+
+    template <typename SingleView>
+    struct single_view_iterator_end;
+
+    template <typename SingleView>
+    struct single_view_iterator;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct next_impl;
+
+        template <>
+        struct next_impl<single_view_iterator_tag>
+        {
+            template <typename Iterator>
+            struct apply 
+            {
+                typedef single_view_iterator_end<
+                    typename Iterator::single_view_type>
+                type;
+    
+                static type
+                call(Iterator)
+                {
+                    return type();
+                }
+            };
+        };
+    }
+}}
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/view/single_view/detail/value_of_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/single_view/detail/value_of_impl.hpp
new file mode 100644
index 0000000..f975eb1
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/single_view/detail/value_of_impl.hpp
@@ -0,0 +1,34 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_VALUE_IMPL_05052005_0324)
+#define FUSION_VALUE_IMPL_05052005_0324
+
+namespace boost { namespace fusion
+{
+    struct single_view_iterator_tag;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct value_of_impl;
+
+        template <>
+        struct value_of_impl<single_view_iterator_tag>
+        {
+            template <typename Iterator>
+            struct apply
+            {
+                typedef typename Iterator::single_view_type single_view_type;
+                typedef typename single_view_type::value_type type;
+            };
+        };
+    }
+}}
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/view/single_view/single_view.hpp b/3rdParty/Boost/src/boost/fusion/view/single_view/single_view.hpp
new file mode 100644
index 0000000..03087cd
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/single_view/single_view.hpp
@@ -0,0 +1,64 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_SINGLE_VIEW_05052005_0335)
+#define FUSION_SINGLE_VIEW_05052005_0335
+
+#include <boost/fusion/support/detail/access.hpp>
+#include <boost/fusion/support/detail/as_fusion_element.hpp>
+#include <boost/fusion/support/sequence_base.hpp>
+#include <boost/fusion/view/single_view/single_view_iterator.hpp>
+#include <boost/fusion/view/single_view/detail/begin_impl.hpp>
+#include <boost/fusion/view/single_view/detail/end_impl.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/config.hpp>
+
+#if defined (BOOST_MSVC)
+#  pragma warning(push)
+#  pragma warning (disable: 4512) // assignment operator could not be generated.
+#endif
+
+namespace boost { namespace fusion
+{
+    struct single_view_tag;
+    struct forward_traversal_tag;
+    struct fusion_sequence_tag;
+
+    template <typename T>
+    struct single_view : sequence_base<single_view<T> >
+    {
+        typedef single_view_tag fusion_tag;
+        typedef fusion_sequence_tag tag; // this gets picked up by MPL
+        typedef forward_traversal_tag category;
+        typedef mpl::true_ is_view;
+        typedef mpl::int_<1> size;
+        typedef T value_type;
+
+        single_view()
+            : val() {}
+
+        explicit single_view(typename detail::call_param<T>::type in_val)
+            : val(in_val) {}
+
+        value_type val;
+    };
+    
+    template <typename T>
+    inline single_view<typename detail::as_fusion_element<T>::type>
+    make_single_view(T const& v)
+    {
+        return single_view<typename detail::as_fusion_element<T>::type>(v);
+    }
+}}
+
+#if defined (BOOST_MSVC)
+#  pragma warning(pop)
+#endif
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/view/single_view/single_view_iterator.hpp b/3rdParty/Boost/src/boost/fusion/view/single_view/single_view_iterator.hpp
new file mode 100644
index 0000000..fa24901
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/single_view/single_view_iterator.hpp
@@ -0,0 +1,57 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_SINGLE_VIEW_ITERATOR_05052005_0340)
+#define FUSION_SINGLE_VIEW_ITERATOR_05052005_0340
+
+#include <boost/fusion/support/detail/access.hpp>
+#include <boost/fusion/support/iterator_base.hpp>
+#include <boost/fusion/view/single_view/detail/deref_impl.hpp>
+#include <boost/fusion/view/single_view/detail/next_impl.hpp>
+#include <boost/fusion/view/single_view/detail/value_of_impl.hpp>
+#include <boost/config.hpp>
+
+#if defined (BOOST_MSVC)
+#  pragma warning(push)
+#  pragma warning (disable: 4512) // assignment operator could not be generated.
+#endif
+
+namespace boost { namespace fusion
+{
+    struct single_view_iterator_tag;
+    struct forward_traversal_tag;
+
+    template <typename SingleView>
+    struct single_view_iterator_end
+        : iterator_base<single_view_iterator_end<SingleView> >
+    {
+        typedef single_view_iterator_tag fusion_tag;
+        typedef forward_traversal_tag category;
+    };
+
+    template <typename SingleView>
+    struct single_view_iterator
+        : iterator_base<single_view_iterator<SingleView> >
+    {
+        typedef single_view_iterator_tag fusion_tag;
+        typedef forward_traversal_tag category;
+        typedef typename SingleView::value_type value_type;
+        typedef SingleView single_view_type;
+
+        explicit single_view_iterator(single_view_type const& view)
+            : val(view.val) {}
+
+        value_type val;
+    };
+}}
+
+#if defined (BOOST_MSVC)
+#  pragma warning(pop)
+#endif
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/view/transform_view.hpp b/3rdParty/Boost/src/boost/fusion/view/transform_view.hpp
new file mode 100644
index 0000000..744d063
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/transform_view.hpp
@@ -0,0 +1,13 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_VIEW_TRANSFORM_VIEW_10022005_0612)
+#define FUSION_SEQUENCE_VIEW_TRANSFORM_VIEW_10022005_0612
+
+#include <boost/fusion/view/transform_view/transform_view.hpp>
+#include <boost/fusion/view/transform_view/transform_view_iterator.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/advance_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/advance_impl.hpp
new file mode 100644
index 0000000..6b32348
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/advance_impl.hpp
@@ -0,0 +1,75 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2005-2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_ADVANCE_IMPL_13122005_1906)
+#define FUSION_ADVANCE_IMPL_13122005_1906
+
+#include <boost/fusion/iterator/advance.hpp>
+
+namespace boost { namespace fusion 
+{
+    struct transform_view_iterator_tag;
+    struct transform_view_iterator2_tag;
+
+    template<typename First, typename F>
+    struct transform_view_iterator;
+
+    template <typename First1, typename First2, typename F>
+    struct transform_view_iterator2;
+
+    namespace extension
+    {
+        template<typename Tag>
+        struct advance_impl;
+
+        // Unary Version
+        template<>
+        struct advance_impl<transform_view_iterator_tag>
+        {
+            template<typename Iterator, typename Dist>
+            struct apply
+            {
+                typedef typename Iterator::first_type first_type;
+                typedef typename result_of::advance<first_type, Dist>::type advanced_type;
+                typedef typename Iterator::transform_type transform_type;
+                typedef transform_view_iterator<advanced_type, transform_type> type;
+
+                static type
+                call(Iterator const& i)
+                {
+                    return type(boost::fusion::advance<Dist>(i.first), i.f);
+                }
+            };
+        };
+
+        // Binary Version
+        template<>
+        struct advance_impl<transform_view_iterator2_tag>
+        {
+            template<typename Iterator, typename Dist>
+            struct apply
+            {
+                typedef typename Iterator::first1_type first1_type;
+                typedef typename Iterator::first2_type first2_type;
+                typedef typename result_of::advance<first1_type, Dist>::type advanced1_type;
+                typedef typename result_of::advance<first2_type, Dist>::type advanced2_type;
+                typedef typename Iterator::transform_type transform_type;
+                typedef transform_view_iterator2<advanced1_type, advanced2_type, transform_type> type;
+
+                static type
+                call(Iterator const& i)
+                {
+                    return type(
+                        boost::fusion::advance<Dist>(i.first1)
+                      , boost::fusion::advance<Dist>(i.first2), i.f);
+                }
+            };
+        };
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/apply_transform_result.hpp b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/apply_transform_result.hpp
new file mode 100644
index 0000000..73be304
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/apply_transform_result.hpp
@@ -0,0 +1,37 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2007 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_FUSION_APPLY_TRANSFORM_RESULT_02092006_1936)
+#define BOOST_FUSION_APPLY_TRANSFORM_RESULT_02092006_1936
+
+#include <boost/utility/result_of.hpp>
+
+namespace boost { namespace fusion
+{
+    struct void_;
+    
+    namespace detail
+    {
+        template <typename F>
+        struct apply_transform_result
+        {
+            template <typename T0, typename T1 = void_>
+            struct apply
+                : boost::result_of<F(T0, T1)>
+            {};
+
+            template <typename T0>
+            struct apply<T0, void_>
+                : boost::result_of<F(T0)>
+            {};
+        };
+    }
+}}
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/at_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/at_impl.hpp
new file mode 100644
index 0000000..620d96f
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/at_impl.hpp
@@ -0,0 +1,63 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2005-2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_FUSION_AT_IMPL_20061029_1946)
+#define BOOST_FUSION_AT_IMPL_20061029_1946
+
+#include <boost/mpl/apply.hpp>
+#include <boost/fusion/view/transform_view/detail/apply_transform_result.hpp>
+#include <boost/fusion/sequence/intrinsic/at.hpp>
+
+namespace boost { namespace fusion {
+    struct transform_view_tag;
+    struct transform_view2_tag;
+
+    namespace extension
+    {
+        template<typename Tag>
+        struct at_impl;
+
+        template<>
+        struct at_impl<transform_view_tag>
+        {
+            template<typename Seq, typename N>
+            struct apply
+            {
+                typedef typename Seq::transform_type F;
+                typedef detail::apply_transform_result<F> transform_type;
+                typedef typename boost::fusion::result_of::at<typename Seq::sequence_type, N>::type value_type;
+                typedef typename mpl::apply<transform_type, value_type>::type type;
+
+                static type call(Seq& seq)
+                {
+                    return seq.f(boost::fusion::at<N>(seq.seq));
+                }
+            };
+        };
+
+        template<>
+        struct at_impl<transform_view2_tag>
+        {
+            template<typename Seq, typename N>
+            struct apply
+            {
+                typedef typename Seq::transform_type F;
+                typedef detail::apply_transform_result<F> transform_type;
+                typedef typename boost::fusion::result_of::at<typename Seq::sequence1_type, N>::type value1_type;
+                typedef typename boost::fusion::result_of::at<typename Seq::sequence2_type, N>::type value2_type;
+                typedef typename mpl::apply<transform_type, value1_type, value2_type>::type type;
+
+                static type call(Seq& seq)
+                {
+                    return seq.f(boost::fusion::at<N>(seq.seq1), boost::fusion::at<N>(seq.seq2));
+                }
+            };
+        };
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/begin_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/begin_impl.hpp
new file mode 100644
index 0000000..75b0438
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/begin_impl.hpp
@@ -0,0 +1,68 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_BEGIN_IMPL_07162005_1031)
+#define FUSION_BEGIN_IMPL_07162005_1031
+
+#include <boost/fusion/view/transform_view/transform_view_fwd.hpp>
+
+namespace boost { namespace fusion
+{
+    template <typename First, typename F>
+    struct transform_view_iterator;
+
+    template <typename First1, typename First2, typename F>
+    struct transform_view_iterator2;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct begin_impl;
+
+        // Unary Version
+        template <>
+        struct begin_impl<transform_view_tag>
+        {
+            template <typename Sequence>
+            struct apply
+            {
+                typedef typename Sequence::first_type first_type;
+                typedef typename Sequence::transform_type transform_type;
+                typedef transform_view_iterator<first_type, transform_type> type;
+
+                static type
+                call(Sequence& s)
+                {
+                    return type(s.first(), s.f);
+                }
+            };
+        };
+
+        // Binary Version
+        template <>
+        struct begin_impl<transform_view2_tag>
+        {
+            template <typename Sequence>
+            struct apply
+            {
+                typedef typename Sequence::first1_type first1_type;
+                typedef typename Sequence::first2_type first2_type;
+                typedef typename Sequence::transform_type transform_type;
+                typedef transform_view_iterator2<first1_type, first2_type, transform_type> type;
+
+                static type
+                call(Sequence& s)
+                {
+                    return type(s.first1(), s.first2(), s.f);
+                }
+            };
+        };
+    }
+}}
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/deref_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/deref_impl.hpp
new file mode 100644
index 0000000..3849f80
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/deref_impl.hpp
@@ -0,0 +1,76 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_DEREF_IMPL_07162005_1026)
+#define FUSION_DEREF_IMPL_07162005_1026
+
+#include <boost/mpl/apply.hpp>
+#include <boost/fusion/iterator/deref.hpp>
+#include <boost/fusion/iterator/value_of.hpp>
+#include <boost/fusion/view/transform_view/detail/apply_transform_result.hpp>
+
+namespace boost { namespace fusion
+{
+    struct transform_view_iterator_tag;
+    struct transform_view_iterator2_tag;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct deref_impl;
+
+        // Unary Version
+        template <>
+        struct deref_impl<transform_view_iterator_tag>
+        {
+            template <typename Iterator>
+            struct apply
+            {
+                typedef typename
+                    result_of::deref<typename Iterator::first_type>::type
+                value_type;
+
+                typedef detail::apply_transform_result<typename Iterator::transform_type> transform_type;
+                typedef typename mpl::apply<transform_type, value_type>::type type;
+
+                static type
+                call(Iterator const& i)
+                {
+                    return i.f(*i.first);
+                }
+            };
+        };
+
+        // Binary Version
+        template <>
+        struct deref_impl<transform_view_iterator2_tag>
+        {
+            template <typename Iterator>
+            struct apply
+            {
+                typedef typename
+                    result_of::deref<typename Iterator::first1_type>::type
+                value1_type;
+                typedef typename
+                    result_of::deref<typename Iterator::first2_type>::type
+                value2_type;
+
+                typedef detail::apply_transform_result<typename Iterator::transform_type> transform_type;
+                typedef typename mpl::apply<transform_type, value1_type, value2_type>::type type;
+
+                static type
+                call(Iterator const& i)
+                {
+                    return i.f(*i.first1, *i.first2);
+                }
+            };
+        };    
+    }
+}}
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/distance_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/distance_impl.hpp
new file mode 100644
index 0000000..d5ae0ad
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/distance_impl.hpp
@@ -0,0 +1,59 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2005-2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_DISTANCE_IMPL_13122005_2139)
+#define FUSION_DISTANCE_IMPL_13122005_2139
+
+#include <boost/fusion/iterator/distance.hpp>
+
+namespace boost { namespace fusion {
+    
+    struct transform_view_iterator_tag;
+    struct transform_view_iterator2_tag;
+
+    namespace extension
+    {
+        template<typename Tag>
+        struct distance_impl;
+
+        // Unary Version
+        template<>
+        struct distance_impl<transform_view_iterator_tag>
+        {
+            template<typename First, typename Last>
+            struct apply
+                : result_of::distance<typename First::first_type, typename Last::first_type>
+            {
+                static 
+                typename result_of::distance<typename First::first_type, typename Last::first_type>::type
+                call(First const& first, Last const& last)
+                {
+                    return boost::fusion::distance(first.first, last.first);
+                }
+            };
+        };
+
+        // Binary Version
+        template<>
+        struct distance_impl<transform_view_iterator2_tag>
+        {
+            template<typename First, typename Last>
+            struct apply
+                : result_of::distance<typename First::first1_type, typename Last::first1_type>
+            {
+                static 
+                typename result_of::distance<typename First::first1_type, typename Last::first1_type>::type
+                call(First const& first, Last const& last)
+                {
+                    return boost::fusion::distance(first.first1, last.first1);
+                }
+            };
+        };
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/end_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/end_impl.hpp
new file mode 100644
index 0000000..465a2cb
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/end_impl.hpp
@@ -0,0 +1,68 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_END_IMPL_07162005_1028)
+#define FUSION_END_IMPL_07162005_1028
+
+#include <boost/fusion/view/transform_view/transform_view_fwd.hpp>
+
+namespace boost { namespace fusion
+{
+    template <typename First, typename F>
+    struct transform_view_iterator;
+
+    template <typename First1, typename First2, typename F>
+    struct transform_view_iterator2;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct end_impl;
+
+        // Unary Version
+        template <>
+        struct end_impl<transform_view_tag>
+        {
+            template <typename Sequence>
+            struct apply
+            {
+                typedef typename Sequence::last_type last_type;
+                typedef typename Sequence::transform_type transform_type;
+                typedef transform_view_iterator<last_type, transform_type> type;
+
+                static type
+                call(Sequence& s)
+                {
+                    return type(s.last(), s.f);
+                }
+            };
+        };
+
+        // Binary Version
+        template <>
+        struct end_impl<transform_view2_tag>
+        {
+            template <typename Sequence>
+            struct apply
+            {
+                typedef typename Sequence::last1_type last1_type;
+                typedef typename Sequence::last2_type last2_type;
+                typedef typename Sequence::transform_type transform_type;
+                typedef transform_view_iterator2<last1_type, last2_type, transform_type> type;
+
+                static type
+                call(Sequence& s)
+                {
+                    return type(s.last1(), s.last2(), s.f);
+                }
+            };
+        };
+    }
+}}
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/equal_to_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/equal_to_impl.hpp
new file mode 100644
index 0000000..063a00e
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/equal_to_impl.hpp
@@ -0,0 +1,42 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_FUSION_TRANSFORM_VIEW_ITERATOR_20070127_0957)
+#define BOOST_FUSION_TRANSFORM_VIEW_ITERATOR_20070127_0957
+
+#include <boost/fusion/iterator/equal_to.hpp>
+
+namespace boost { namespace fusion {
+
+    struct transform_view_iterator_tag;
+    struct transform_view_iterator2_tag;
+
+    namespace extension
+    {
+        template<typename Tag>
+        struct equal_to_impl;
+
+        template<>
+        struct equal_to_impl<transform_view_iterator_tag>
+        {
+            template<typename It1, typename It2>
+            struct apply
+                : result_of::equal_to<typename It1::first_type, typename It2::first_type>
+            {};
+        };
+
+        template<>
+        struct equal_to_impl<transform_view_iterator2_tag>
+        {
+            template<typename It1, typename It2>
+            struct apply
+                : result_of::equal_to<typename It1::first1_type, typename It2::first1_type>
+            {};
+        };
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/next_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/next_impl.hpp
new file mode 100644
index 0000000..4d6ec74
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/next_impl.hpp
@@ -0,0 +1,74 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_NEXT_IMPL_07162005_1029)
+#define FUSION_NEXT_IMPL_07162005_1029
+
+#include <boost/fusion/iterator/next.hpp>
+
+namespace boost { namespace fusion
+{
+    struct transform_view_iterator_tag;
+    struct transform_view_iterator2_tag;
+
+    template<typename First, typename F>
+    struct transform_view_iterator;
+
+    template <typename First1, typename First2, typename F>
+    struct transform_view_iterator2;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct next_impl;
+
+        // Unary Version
+        template <>
+        struct next_impl<transform_view_iterator_tag>
+        {
+            template <typename Iterator>
+            struct apply
+            {
+                typedef typename Iterator::first_type first_type;
+                typedef typename result_of::next<first_type>::type next_type;
+                typedef typename Iterator::transform_type transform_type;
+                typedef transform_view_iterator<next_type, transform_type> type;
+
+                static type
+                call(Iterator const& i)
+                {
+                    return type(fusion::next(i.first), i.f);
+                }
+            };
+        };
+
+        // Binary Version
+        template <>
+        struct next_impl<transform_view_iterator2_tag>
+        {
+            template <typename Iterator>
+            struct apply
+            {
+                typedef typename Iterator::first1_type first1_type;
+                typedef typename Iterator::first2_type first2_type;
+                typedef typename result_of::next<first1_type>::type next1_type;
+                typedef typename result_of::next<first2_type>::type next2_type;
+                typedef typename Iterator::transform_type transform_type;
+                typedef transform_view_iterator2<next1_type, next2_type, transform_type> type;
+
+                static type
+                call(Iterator const& i)
+                {
+                    return type(fusion::next(i.first1), fusion::next(i.first2), i.f);
+                }
+            };
+        };
+    }
+}}
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/prior_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/prior_impl.hpp
new file mode 100644
index 0000000..f7d4996
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/prior_impl.hpp
@@ -0,0 +1,73 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2005-2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_PREV_IMPL_13122005_2110)
+#define FUSION_PREV_IMPL_13122005_2110
+
+#include <boost/fusion/iterator/prior.hpp>
+
+namespace boost { namespace fusion 
+{
+    struct transform_view_iterator_tag;
+    struct transform_view_iterator2_tag;
+
+    template<typename First, typename F>
+    struct transform_view_iterator;
+
+    template <typename First1, typename First2, typename F>
+    struct transform_view_iterator2;
+
+    namespace extension
+    {
+        template<typename Tag>
+        struct prior_impl;
+
+        // Unary Version
+        template<>
+        struct prior_impl<transform_view_iterator_tag>
+        {
+            template<typename Iterator>
+            struct apply
+            {
+                typedef typename Iterator::first_type first_type;
+                typedef typename result_of::prior<first_type>::type prior_type;
+                typedef typename Iterator::transform_type transform_type;
+                typedef transform_view_iterator<prior_type, transform_type> type;
+
+                static type
+                call(Iterator const& i)
+                {
+                    return type(fusion::prior(i.first), i.f);
+                }
+            };
+        };
+
+        // Binary Version
+        template<>
+        struct prior_impl<transform_view_iterator2_tag>
+        {
+            template<typename Iterator>
+            struct apply
+            {
+                typedef typename Iterator::first1_type first1_type;
+                typedef typename Iterator::first2_type first2_type;
+                typedef typename result_of::prior<first1_type>::type prior1_type;
+                typedef typename result_of::prior<first2_type>::type prior2_type;
+                typedef typename Iterator::transform_type transform_type;
+                typedef transform_view_iterator2<prior1_type, prior2_type, transform_type> type;
+
+                static type
+                call(Iterator const& i)
+                {
+                    return type(fusion::prior(i.first1), fusion::prior(i.first2), i.f);
+                }
+            };
+        };
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/value_at_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/value_at_impl.hpp
new file mode 100644
index 0000000..bd4409f
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/value_at_impl.hpp
@@ -0,0 +1,53 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2005-2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_FUSION_VALUE_AT_IMPL_20061101_0745)
+#define BOOST_FUSION_VALUE_AT_IMPL_20061101_0745
+
+#include <boost/mpl/apply.hpp>
+#include <boost/fusion/view/transform_view/detail/apply_transform_result.hpp>
+#include <boost/fusion/sequence/intrinsic/value_at.hpp>
+
+namespace boost { namespace fusion {
+    struct transform_view_tag;
+    struct transform_view2_tag;
+
+    namespace extension
+    {
+        template<typename Tag>
+        struct value_at_impl;
+
+        template<>
+        struct value_at_impl<transform_view_tag>
+        {
+            template<typename Seq, typename N>
+            struct apply
+            {
+                typedef typename Seq::transform_type F;
+                typedef detail::apply_transform_result<F> transform_type;
+                typedef typename boost::fusion::result_of::value_at<typename Seq::sequence_type, N>::type value_type;
+                typedef typename mpl::apply<transform_type, value_type>::type type;
+            };
+        };
+
+        template<>
+        struct value_at_impl<transform_view2_tag>
+        {
+            template<typename Seq, typename N>
+            struct apply
+            {
+                typedef typename Seq::transform_type F;
+                typedef detail::apply_transform_result<F> transform_type;
+                typedef typename boost::fusion::result_of::value_at<typename Seq::sequence1_type, N>::type value1_type;
+                typedef typename boost::fusion::result_of::value_at<typename Seq::sequence2_type, N>::type value2_type;
+                typedef typename mpl::apply<transform_type, value1_type, value2_type>::type type;
+            };
+        };
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/value_of_impl.hpp b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/value_of_impl.hpp
new file mode 100644
index 0000000..08bbf20
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/transform_view/detail/value_of_impl.hpp
@@ -0,0 +1,63 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_VALUE_OF_IMPL_07162005_1030)
+#define FUSION_VALUE_OF_IMPL_07162005_1030
+
+#include <boost/mpl/apply.hpp>
+#include <boost/fusion/iterator/value_of.hpp>
+#include <boost/fusion/view/transform_view/detail/apply_transform_result.hpp>
+
+namespace boost { namespace fusion
+{
+    struct transform_view_iterator_tag;
+    struct transform_view_iterator2_tag;
+
+    namespace extension
+    {
+        template <typename Tag>
+        struct value_of_impl;
+
+        // Unary Version
+        template <>
+        struct value_of_impl<transform_view_iterator_tag>
+        {
+            template <typename Iterator>
+            struct apply
+            {
+                typedef typename
+                    result_of::value_of<typename Iterator::first_type>::type
+                value_type;
+
+                typedef detail::apply_transform_result<typename Iterator::transform_type> transform_type;
+                typedef typename mpl::apply<transform_type, value_type>::type type;
+            };
+        };
+
+        // Binary Version
+        template <>
+        struct value_of_impl<transform_view_iterator2_tag>
+        {
+            template <typename Iterator>
+            struct apply
+            {
+                typedef typename
+                    result_of::value_of<typename Iterator::first1_type>::type
+                value1_type;
+                typedef typename
+                    result_of::value_of<typename Iterator::first2_type>::type
+                value2_type;
+
+                typedef detail::apply_transform_result<typename Iterator::transform_type> transform_type;
+                typedef typename mpl::apply<transform_type, value1_type, value2_type>::type type;
+            };
+        };
+    }
+}}
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/view/transform_view/transform_view.hpp b/3rdParty/Boost/src/boost/fusion/view/transform_view/transform_view.hpp
new file mode 100644
index 0000000..3d330b7
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/transform_view/transform_view.hpp
@@ -0,0 +1,115 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_TRANSFORM_VIEW_07162005_1037)
+#define FUSION_TRANSFORM_VIEW_07162005_1037
+
+#include <boost/static_assert.hpp>
+#include <boost/fusion/support/detail/access.hpp>
+#include <boost/fusion/support/is_view.hpp>
+#include <boost/fusion/support/category_of.hpp>
+#include <boost/fusion/view/transform_view/transform_view_iterator.hpp>
+#include <boost/fusion/view/transform_view/transform_view_fwd.hpp>
+#include <boost/fusion/view/transform_view/detail/begin_impl.hpp>
+#include <boost/fusion/view/transform_view/detail/end_impl.hpp>
+#include <boost/fusion/view/transform_view/detail/at_impl.hpp>
+#include <boost/fusion/view/transform_view/detail/value_at_impl.hpp>
+#include <boost/fusion/view/detail/strictest_traversal.hpp>
+#include <boost/fusion/container/vector/vector10.hpp>
+#include <boost/fusion/sequence/intrinsic/size.hpp>
+#include <boost/fusion/support/sequence_base.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/fusion/sequence/intrinsic/size.hpp>
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace fusion
+{
+    struct void_;
+    struct transform_view_tag;
+    struct transform_view2_tag;
+    struct fusion_sequence_tag;
+
+    // Binary Version
+    template <typename Sequence1, typename Sequence2, typename F>
+    struct transform_view : sequence_base<transform_view<Sequence1, Sequence2, F> >
+    {
+        BOOST_STATIC_ASSERT(result_of::size<Sequence1>::value == result_of::size<Sequence2>::value);
+        typedef transform_view2_tag fusion_tag;
+        typedef fusion_sequence_tag tag; // this gets picked up by MPL
+        typedef mpl::true_ is_view;
+
+        typedef typename traits::category_of<Sequence1>::type category1;
+        typedef typename traits::category_of<Sequence2>::type category2;
+        typedef typename detail::strictest_traversal<
+            fusion::vector2<Sequence1, Sequence2> >::type category;
+        typedef typename result_of::begin<Sequence1>::type first1_type;
+        typedef typename result_of::begin<Sequence2>::type first2_type;
+        typedef typename result_of::end<Sequence1>::type last1_type;
+        typedef typename result_of::end<Sequence2>::type last2_type;
+        typedef typename result_of::size<Sequence1>::type size;
+        typedef Sequence1 sequence1_type;
+        typedef Sequence2 sequence2_type;
+        typedef F transform_type;
+
+        transform_view(Sequence1& in_seq1, Sequence2& in_seq2, F const& binop)
+            : f(binop)
+            , seq1(in_seq1)
+            , seq2(in_seq2)
+        {}
+
+        first1_type first1() const { return fusion::begin(seq1); }
+        first2_type first2() const { return fusion::begin(seq2); }
+        last1_type last1() const { return fusion::end(seq1); }
+        last2_type last2() const { return fusion::end(seq2); }
+
+        transform_type f;
+        typename mpl::if_<traits::is_view<Sequence1>, Sequence1, Sequence1&>::type seq1;
+        typename mpl::if_<traits::is_view<Sequence2>, Sequence2, Sequence2&>::type seq2;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        transform_view& operator= (transform_view const&);
+    };
+
+    // Unary Version
+    template <typename Sequence, typename F>
+#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
+    struct transform_view<Sequence, F, void_> : sequence_base<transform_view<Sequence, F, void_> >
+#else
+    struct transform_view<Sequence, F> : sequence_base<transform_view<Sequence, F> >
+#endif
+    {
+        typedef transform_view_tag fusion_tag;
+        typedef fusion_sequence_tag tag; // this gets picked up by MPL
+        typedef mpl::true_ is_view;
+
+        typedef typename traits::category_of<Sequence>::type category;
+        typedef typename result_of::begin<Sequence>::type first_type;
+        typedef typename result_of::end<Sequence>::type last_type;
+        typedef typename result_of::size<Sequence>::type size;
+        typedef Sequence sequence_type;
+        typedef F transform_type;
+
+        transform_view(Sequence& in_seq, F const& in_f)
+            : seq(in_seq)
+            , f(in_f)
+        {}
+
+        first_type first() const { return fusion::begin(seq); }
+        last_type last() const { return fusion::end(seq); }
+        typename mpl::if_<traits::is_view<Sequence>, Sequence, Sequence&>::type seq;
+        transform_type f;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        transform_view& operator= (transform_view const&);
+    };
+}}
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/view/transform_view/transform_view_fwd.hpp b/3rdParty/Boost/src/boost/fusion/view/transform_view/transform_view_fwd.hpp
new file mode 100644
index 0000000..7dca304
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/transform_view/transform_view_fwd.hpp
@@ -0,0 +1,22 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_TRANSFORM_VIEW_FORWARD_01052006_1839)
+#define FUSION_TRANSFORM_VIEW_FORWARD_01052006_1839
+
+namespace boost { namespace fusion
+{
+    struct void_;
+    struct transform_view_tag;
+    struct transform_view2_tag;
+
+    template <typename A, typename B, typename C = void_>
+    struct transform_view;
+}}
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/fusion/view/transform_view/transform_view_iterator.hpp b/3rdParty/Boost/src/boost/fusion/view/transform_view/transform_view_iterator.hpp
new file mode 100644
index 0000000..2c31b26
--- /dev/null
+++ b/3rdParty/Boost/src/boost/fusion/view/transform_view/transform_view_iterator.hpp
@@ -0,0 +1,77 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_TRANSFORM_VIEW_ITERATOR_07162005_1033)
+#define FUSION_TRANSFORM_VIEW_ITERATOR_07162005_1033
+
+#include <boost/fusion/support/iterator_base.hpp>
+#include <boost/fusion/support/category_of.hpp>
+#include <boost/fusion/iterator/mpl/convert_iterator.hpp>
+#include <boost/fusion/adapted/mpl/mpl_iterator.hpp>
+#include <boost/fusion/view/transform_view/detail/deref_impl.hpp>
+#include <boost/fusion/view/transform_view/detail/next_impl.hpp>
+#include <boost/fusion/view/transform_view/detail/prior_impl.hpp>
+#include <boost/fusion/view/transform_view/detail/value_of_impl.hpp>
+#include <boost/fusion/view/transform_view/detail/advance_impl.hpp>
+#include <boost/fusion/view/transform_view/detail/distance_impl.hpp>
+#include <boost/fusion/view/transform_view/detail/equal_to_impl.hpp>
+
+namespace boost { namespace fusion
+{
+    // Unary Version
+    struct transform_view_iterator_tag;
+
+    template <typename First, typename F>
+    struct transform_view_iterator
+        : iterator_base<transform_view_iterator<First, F> >
+    {
+        typedef transform_view_iterator_tag fusion_tag;
+        typedef convert_iterator<First> converter;
+        typedef typename converter::type first_type;
+        typedef typename traits::category_of<first_type>::type category;
+        typedef F transform_type;
+
+        transform_view_iterator(First const& in_first, F const& in_f)
+            : first(converter::call(in_first)), f(in_f) {}
+
+        first_type first;
+        transform_type f;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        transform_view_iterator& operator= (transform_view_iterator const&);
+    };
+
+    // Binary Version
+    struct transform_view_iterator2_tag;
+
+    template <typename First1, typename First2, typename F>
+    struct transform_view_iterator2
+        : iterator_base<transform_view_iterator2<First1, First2, F> >
+    {
+        typedef transform_view_iterator2_tag fusion_tag;
+        typedef convert_iterator<First1> converter1;
+        typedef convert_iterator<First2> converter2;
+        typedef typename converter1::type first1_type;
+        typedef typename converter2::type first2_type;
+        typedef typename traits::category_of<first1_type>::type category;
+        typedef F transform_type;
+
+        transform_view_iterator2(First1 const& in_first1, First2 const& in_first2, F const& in_f)
+            : first1(converter1::call(in_first1)), first2(converter2::call(in_first2)), f(in_f) {}
+
+        first1_type first1;
+        first2_type first2;
+        transform_type f;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        transform_view_iterator2& operator= (transform_view_iterator2 const&);
+    };
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/mpl/aux_/back_impl.hpp b/3rdParty/Boost/src/boost/mpl/aux_/back_impl.hpp
new file mode 100644
index 0000000..d151625
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/aux_/back_impl.hpp
@@ -0,0 +1,43 @@
+
+#ifndef BOOST_MPL_AUX_BACK_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_BACK_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: back_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/next_prior.hpp>
+#include <boost/mpl/deref.hpp>
+#include <boost/mpl/aux_/traits_lambda_spec.hpp>
+
+namespace boost { namespace mpl {
+
+// default implementation, requires at least bi-directional iterators;
+// conrete sequences might override it by specializing either the 
+// 'back_impl' or the primary 'back' template
+
+template< typename Tag >
+struct back_impl
+{
+    template< typename Sequence > struct apply
+    {
+        typedef typename end<Sequence>::type end_;
+        typedef typename prior<end_>::type last_;
+        typedef typename deref<last_>::type type;
+    };
+};
+
+BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1, back_impl)
+
+}}
+
+#endif // BOOST_MPL_AUX_BACK_IMPL_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/aux_/config/operators.hpp b/3rdParty/Boost/src/boost/mpl/aux_/config/operators.hpp
new file mode 100644
index 0000000..2a38a3d
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/aux_/config/operators.hpp
@@ -0,0 +1,33 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_OPERATORS_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_OPERATORS_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: operators.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/aux_/config/gcc.hpp>
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if !defined(BOOST_MPL_CFG_USE_OPERATORS_OVERLOADING) \
+    && ( BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
+        || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \
+        || BOOST_WORKAROUND(__EDG_VERSION__, <= 245) \
+        || BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, <= 0x0295) \
+        || BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600)) \
+        )
+
+#   define BOOST_MPL_CFG_USE_OPERATORS_OVERLOADING
+
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_OPERATORS_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/aux_/erase_impl.hpp b/3rdParty/Boost/src/boost/mpl/aux_/erase_impl.hpp
new file mode 100644
index 0000000..dc8a22f
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/aux_/erase_impl.hpp
@@ -0,0 +1,69 @@
+
+#ifndef BOOST_MPL_AUX_ERASE_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_ERASE_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: erase_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/clear.hpp>
+#include <boost/mpl/push_front.hpp>
+#include <boost/mpl/reverse_fold.hpp>
+#include <boost/mpl/iterator_range.hpp>
+#include <boost/mpl/next.hpp>
+#include <boost/mpl/aux_/na.hpp>
+
+namespace boost { namespace mpl {
+
+// default implementation; conrete sequences might override it by 
+// specializing either the 'erase_impl' or the primary 'erase' template
+
+template< typename Tag >
+struct erase_impl
+{
+    template<
+          typename Sequence
+        , typename First
+        , typename Last
+        >
+    struct apply
+    {
+        typedef typename if_na< Last,typename next<First>::type >::type last_;
+        
+        // 1st half: [begin, first)
+        typedef iterator_range<
+              typename begin<Sequence>::type
+            , First
+            > first_half_;
+
+        // 2nd half: [last, end) ... that is, [last + 1, end)
+        typedef iterator_range<
+              last_
+            , typename end<Sequence>::type
+            > second_half_;
+
+        typedef typename reverse_fold<
+              second_half_
+            , typename clear<Sequence>::type
+            , push_front<_,_>
+            >::type half_sequence_;
+
+        typedef typename reverse_fold<
+              first_half_
+            , half_sequence_
+            , push_front<_,_>
+            >::type type;
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_AUX_ERASE_IMPL_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/aux_/erase_key_impl.hpp b/3rdParty/Boost/src/boost/mpl/aux_/erase_key_impl.hpp
new file mode 100644
index 0000000..ffc6c1f
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/aux_/erase_key_impl.hpp
@@ -0,0 +1,32 @@
+
+#ifndef BOOST_MPL_AUX_ERASE_KEY_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_ERASE_KEY_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: erase_key_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/erase_key_fwd.hpp>
+#include <boost/mpl/aux_/traits_lambda_spec.hpp>
+
+namespace boost { namespace mpl {
+
+template< typename Tag >
+struct erase_key_impl
+{
+    template< typename Sequence, typename Key > struct apply;
+};
+
+BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(2, erase_key_impl)
+
+}}
+
+#endif // BOOST_MPL_AUX_ERASE_KEY_IMPL_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/aux_/has_key_impl.hpp b/3rdParty/Boost/src/boost/mpl/aux_/has_key_impl.hpp
new file mode 100644
index 0000000..3a12a22
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/aux_/has_key_impl.hpp
@@ -0,0 +1,34 @@
+
+#ifndef BOOST_MPL_AUX_HAS_KEY_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_HAS_KEY_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2002-2004
+// Copyright David Abrahams 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: has_key_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/has_key_fwd.hpp>
+#include <boost/mpl/aux_/traits_lambda_spec.hpp>
+
+namespace boost { namespace mpl {
+
+// no default implementation; the definition is needed to make MSVC happy 
+
+template< typename Tag > struct has_key_impl
+{
+    template< typename AssociativeSequence, typename Key > struct apply;
+};
+
+BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(2,has_key_impl)
+
+}}
+
+#endif // BOOST_MPL_AUX_HAS_KEY_IMPL_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/aux_/insert_impl.hpp b/3rdParty/Boost/src/boost/mpl/aux_/insert_impl.hpp
new file mode 100644
index 0000000..1858a9a
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/aux_/insert_impl.hpp
@@ -0,0 +1,68 @@
+
+#ifndef BOOST_MPL_INSERT_IMPL_HPP_INCLUDED
+#define BOOST_MPL_INSERT_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: insert_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/reverse_fold.hpp>
+#include <boost/mpl/iterator_range.hpp>
+#include <boost/mpl/clear.hpp>
+#include <boost/mpl/push_front.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/traits_lambda_spec.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace mpl {
+
+// default implementation; conrete sequences might override it by 
+// specializing either the 'insert_impl' or the primary 'insert' template
+
+template< typename Tag >
+struct insert_impl
+{
+    template<
+          typename Sequence
+        , typename Pos
+        , typename T
+        >
+    struct apply
+    {
+        typedef iterator_range<
+              typename begin<Sequence>::type
+            , Pos
+            > first_half_;
+
+        typedef iterator_range<
+              Pos
+            , typename end<Sequence>::type
+            > second_half_;
+
+        typedef typename reverse_fold<
+              second_half_
+            , typename clear<Sequence>::type
+            , push_front<_,_>
+            >::type half_sequence_;
+
+        typedef typename reverse_fold<
+              first_half_
+            , typename push_front<half_sequence_,T>::type
+            , push_front<_,_>
+            >::type type;
+    };
+};
+
+BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(3,insert_impl)
+
+}}
+
+#endif // BOOST_MPL_INSERT_IMPL_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/aux_/insert_range_impl.hpp b/3rdParty/Boost/src/boost/mpl/aux_/insert_range_impl.hpp
new file mode 100644
index 0000000..c1a2f54
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/aux_/insert_range_impl.hpp
@@ -0,0 +1,77 @@
+
+#ifndef BOOST_MPL_AUX_INSERT_RANGE_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_INSERT_RANGE_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: insert_range_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/copy.hpp>
+#include <boost/mpl/clear.hpp>
+#include <boost/mpl/front_inserter.hpp>
+#include <boost/mpl/joint_view.hpp>
+#include <boost/mpl/iterator_range.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/iter_push_front.hpp>
+#include <boost/mpl/aux_/traits_lambda_spec.hpp>
+#include <boost/mpl/aux_/config/forwarding.hpp>
+
+#include <boost/type_traits/same_traits.hpp>
+
+namespace boost { namespace mpl {
+
+// default implementation; conrete sequences might override it by 
+// specializing either the 'insert_range_impl' or the primary 
+// 'insert_range' template
+
+
+template< typename Tag >
+struct insert_range_impl
+{
+    template<
+          typename Sequence
+        , typename Pos
+        , typename Range
+        >
+    struct apply
+#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)
+        : reverse_copy<
+              joint_view< 
+                  iterator_range<typename begin<Sequence>::type,Pos>
+                , joint_view< 
+                      Range
+                    , iterator_range<Pos,typename end<Sequence>::type>
+                    >
+                >
+            , front_inserter< typename clear<Sequence>::type >
+            >
+    {
+#else
+    {
+        typedef typename reverse_copy<
+              joint_view< 
+                  iterator_range<typename begin<Sequence>::type,Pos>
+                , joint_view< 
+                      Range
+                    , iterator_range<Pos,typename end<Sequence>::type>
+                    >
+                >
+            , front_inserter< typename clear<Sequence>::type >
+            >::type type;
+#endif
+    };
+};
+
+BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(3,insert_range_impl)
+
+}}
+
+#endif // BOOST_MPL_AUX_INSERT_RANGE_IMPL_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/aux_/iter_push_front.hpp b/3rdParty/Boost/src/boost/mpl/aux_/iter_push_front.hpp
new file mode 100644
index 0000000..2fa4f94
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/aux_/iter_push_front.hpp
@@ -0,0 +1,36 @@
+
+#ifndef BOOST_MPL_ITER_PUSH_FRONT_HPP_INCLUDED
+#define BOOST_MPL_ITER_PUSH_FRONT_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: iter_push_front.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/push_front.hpp>
+#include <boost/mpl/deref.hpp>
+
+namespace boost { namespace mpl { namespace aux {
+
+template<
+      typename Sequence
+    , typename Iterator
+    >
+struct iter_push_front
+{
+    typedef typename push_front<
+          Sequence
+        , typename deref<Iterator>::type
+        >::type type;
+};
+
+}}}
+
+#endif // BOOST_MPL_ITER_PUSH_FRONT_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/aux_/joint_iter.hpp b/3rdParty/Boost/src/boost/mpl/aux_/joint_iter.hpp
new file mode 100644
index 0000000..e2589dc
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/aux_/joint_iter.hpp
@@ -0,0 +1,120 @@
+
+#ifndef BOOST_MPL_AUX_JOINT_ITER_HPP_INCLUDED
+#define BOOST_MPL_AUX_JOINT_ITER_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: joint_iter.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/next_prior.hpp>
+#include <boost/mpl/deref.hpp>
+#include <boost/mpl/iterator_tags.hpp>
+#include <boost/mpl/aux_/lambda_spec.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+#   include <boost/type_traits/is_same.hpp>
+#endif
+
+namespace boost { namespace mpl {
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template<
+      typename Iterator1
+    , typename LastIterator1
+    , typename Iterator2
+    >
+struct joint_iter
+{
+    typedef Iterator1 base;
+    typedef forward_iterator_tag category;
+};
+
+template<
+      typename LastIterator1
+    , typename Iterator2
+    >
+struct joint_iter<LastIterator1,LastIterator1,Iterator2>
+{
+    typedef Iterator2 base;
+    typedef forward_iterator_tag category;
+};
+
+
+template< typename I1, typename L1, typename I2 >
+struct deref< joint_iter<I1,L1,I2> >
+{
+    typedef typename joint_iter<I1,L1,I2>::base base_;
+    typedef typename deref<base_>::type type;
+};
+
+template< typename I1, typename L1, typename I2 >
+struct next< joint_iter<I1,L1,I2> >
+{
+    typedef joint_iter< typename mpl::next<I1>::type,L1,I2 > type;
+};
+
+template< typename L1, typename I2 >
+struct next< joint_iter<L1,L1,I2> >
+{
+    typedef joint_iter< L1,L1,typename mpl::next<I2>::type > type;
+};
+
+#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+template<
+      typename Iterator1
+    , typename LastIterator1
+    , typename Iterator2
+    >
+struct joint_iter;
+
+template< bool > struct joint_iter_impl
+{
+    template< typename I1, typename L1, typename I2 > struct result_
+    {
+        typedef I1 base;
+        typedef forward_iterator_tag category;
+        typedef joint_iter< typename mpl::next<I1>::type,L1,I2 > next;
+        typedef typename deref<I1>::type type;
+    };
+};
+
+template<> struct joint_iter_impl<true>
+{
+    template< typename I1, typename L1, typename I2 > struct result_
+    {
+        typedef I2 base;
+        typedef forward_iterator_tag category;
+        typedef joint_iter< L1,L1,typename mpl::next<I2>::type > next;
+        typedef typename deref<I2>::type type;
+    };
+};
+
+template<
+      typename Iterator1
+    , typename LastIterator1
+    , typename Iterator2
+    >
+struct joint_iter
+    : joint_iter_impl< is_same<Iterator1,LastIterator1>::value >
+        ::template result_<Iterator1,LastIterator1,Iterator2>
+{
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(3, joint_iter)
+
+}}
+
+#endif // BOOST_MPL_AUX_JOINT_ITER_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/aux_/order_impl.hpp b/3rdParty/Boost/src/boost/mpl/aux_/order_impl.hpp
new file mode 100644
index 0000000..7129d82
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/aux_/order_impl.hpp
@@ -0,0 +1,76 @@
+
+#ifndef BOOST_MPL_AUX_ORDER_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_ORDER_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: order_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/order_fwd.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/long.hpp>
+#include <boost/mpl/has_key.hpp>
+#include <boost/mpl/aux_/overload_names.hpp>
+#include <boost/mpl/aux_/static_cast.hpp>
+#include <boost/mpl/aux_/type_wrapper.hpp>
+#include <boost/mpl/aux_/traits_lambda_spec.hpp>
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+namespace boost { namespace mpl {
+
+// default implementation; requires 'Seq' to provide corresponding overloads 
+// of BOOST_MPL_AUX_OVERLOAD_ORDER_BY_KEY
+
+template< typename Seq, typename Key > struct x_order_impl
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \
+    || BOOST_WORKAROUND(__EDG_VERSION__, <= 245)
+{
+    BOOST_STATIC_CONSTANT(long, value = 
+          sizeof( BOOST_MPL_AUX_OVERLOAD_CALL_ORDER_BY_KEY(
+              Seq
+            , BOOST_MPL_AUX_STATIC_CAST(aux::type_wrapper<Key>*, 0)
+            ) )
+        );
+
+    typedef long_<value> type;
+
+#else // ISO98 C++
+    : long_< 
+          sizeof( BOOST_MPL_AUX_OVERLOAD_CALL_ORDER_BY_KEY(
+              Seq
+            , BOOST_MPL_AUX_STATIC_CAST(aux::type_wrapper<Key>*, 0)
+            ) )
+        >
+{
+#endif
+};
+
+template< typename Tag >
+struct order_impl
+{
+    template< typename Seq, typename Key > struct apply
+        : if_<
+              typename has_key_impl<Tag>::template apply<Seq,Key>
+            , x_order_impl<Seq,Key>
+            , void_
+            >::type
+    {
+    };
+};
+
+BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(2,order_impl)
+
+}}
+
+#endif // BOOST_MPL_AUX_ORDER_IMPL_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/aux_/overload_names.hpp b/3rdParty/Boost/src/boost/mpl/aux_/overload_names.hpp
new file mode 100644
index 0000000..0fa4a98
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/aux_/overload_names.hpp
@@ -0,0 +1,48 @@
+
+#ifndef BOOST_MPL_AUX_OVERLOAD_NAMES_HPP_INCLUDED
+#define BOOST_MPL_AUX_OVERLOAD_NAMES_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: overload_names.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/aux_/ptr_to_ref.hpp>
+#include <boost/mpl/aux_/config/operators.hpp>
+
+#if defined(BOOST_MPL_CFG_USE_OPERATORS_OVERLOADING)
+
+#   include <boost/mpl/aux_/static_cast.hpp>
+
+#   define BOOST_MPL_AUX_OVERLOAD_VALUE_BY_KEY  operator/
+#   define BOOST_MPL_AUX_OVERLOAD_ITEM_BY_ORDER operator|
+#   define BOOST_MPL_AUX_OVERLOAD_ORDER_BY_KEY  operator||
+#   define BOOST_MPL_AUX_OVERLOAD_IS_MASKED     operator%
+
+#   define BOOST_MPL_AUX_OVERLOAD_CALL_VALUE_BY_KEY(T, x)   BOOST_MPL_AUX_PTR_TO_REF(T) / x
+#   define BOOST_MPL_AUX_OVERLOAD_CALL_ITEM_BY_ORDER(T, x)  BOOST_MPL_AUX_PTR_TO_REF(T) | x
+#   define BOOST_MPL_AUX_OVERLOAD_CALL_ORDER_BY_KEY(T, x)   BOOST_MPL_AUX_PTR_TO_REF(T) || x
+#   define BOOST_MPL_AUX_OVERLOAD_CALL_IS_MASKED(T, x)      BOOST_MPL_AUX_PTR_TO_REF(T) % x
+
+#else
+
+#   define BOOST_MPL_AUX_OVERLOAD_VALUE_BY_KEY  value_by_key_
+#   define BOOST_MPL_AUX_OVERLOAD_ITEM_BY_ORDER item_by_order_
+#   define BOOST_MPL_AUX_OVERLOAD_ORDER_BY_KEY  order_by_key_
+#   define BOOST_MPL_AUX_OVERLOAD_IS_MASKED     is_masked_
+
+#   define BOOST_MPL_AUX_OVERLOAD_CALL_VALUE_BY_KEY(T, x)   T::BOOST_MPL_AUX_OVERLOAD_VALUE_BY_KEY( BOOST_MPL_AUX_PTR_TO_REF(T), x )
+#   define BOOST_MPL_AUX_OVERLOAD_CALL_ITEM_BY_ORDER(T, x)  T::BOOST_MPL_AUX_OVERLOAD_ITEM_BY_ORDER( BOOST_MPL_AUX_PTR_TO_REF(T), x )
+#   define BOOST_MPL_AUX_OVERLOAD_CALL_ORDER_BY_KEY(T, x)   T::BOOST_MPL_AUX_OVERLOAD_ORDER_BY_KEY( BOOST_MPL_AUX_PTR_TO_REF(T), x )
+#   define BOOST_MPL_AUX_OVERLOAD_CALL_IS_MASKED(T, x)      T::BOOST_MPL_AUX_OVERLOAD_IS_MASKED( BOOST_MPL_AUX_PTR_TO_REF(T), x )
+
+#endif
+
+#endif // BOOST_MPL_AUX_OVERLOAD_NAMES_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/aux_/pop_back_impl.hpp b/3rdParty/Boost/src/boost/mpl/aux_/pop_back_impl.hpp
new file mode 100644
index 0000000..b8b4a9b
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/aux_/pop_back_impl.hpp
@@ -0,0 +1,34 @@
+
+#ifndef BOOST_MPL_AUX_POP_BACK_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_POP_BACK_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: pop_back_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/pop_back_fwd.hpp>
+#include <boost/mpl/aux_/traits_lambda_spec.hpp>
+
+namespace boost { namespace mpl {
+
+// no default implementation; the definition is needed to make MSVC happy
+
+template< typename Tag >
+struct pop_back_impl
+{
+    template< typename Sequence > struct apply;
+};
+
+BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1, pop_back_impl)
+
+}}
+
+#endif // BOOST_MPL_AUX_POP_BACK_IMPL_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/aux_/pop_front_impl.hpp b/3rdParty/Boost/src/boost/mpl/aux_/pop_front_impl.hpp
new file mode 100644
index 0000000..c28db20
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/aux_/pop_front_impl.hpp
@@ -0,0 +1,44 @@
+
+#ifndef BOOST_MPL_AUX_POP_FRONT_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_POP_FRONT_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: pop_front_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/pop_front_fwd.hpp>
+#include <boost/mpl/aux_/traits_lambda_spec.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+#include <boost/mpl/aux_/config/msvc.hpp>
+
+namespace boost { namespace mpl {
+
+// no default implementation; the definition is needed to make MSVC happy
+
+template< typename Tag >
+struct pop_front_impl
+{
+    template< typename Sequence > struct apply
+    // conservatively placed, but maybe should go outside surrounding
+    // braces.
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) 
+    {
+        typedef int type;
+    }
+#endif
+    ;
+};
+
+BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1, pop_front_impl)
+
+}}
+
+#endif // BOOST_MPL_AUX_POP_FRONT_IMPL_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/aux_/ptr_to_ref.hpp b/3rdParty/Boost/src/boost/mpl/aux_/ptr_to_ref.hpp
new file mode 100644
index 0000000..3b5415c
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/aux_/ptr_to_ref.hpp
@@ -0,0 +1,46 @@
+
+#ifndef BOOST_MPL_AUX_PTR_TO_REF_HPP_INCLUDED
+#define BOOST_MPL_AUX_PTR_TO_REF_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: ptr_to_ref.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/aux_/static_cast.hpp>
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \
+    ||  ( BOOST_WORKAROUND(__EDG_VERSION__, <= 245) \
+        && !(defined(__STD_STRICT_ANSI) \
+            || defined(__STD_STRICT_ANSI_ERRORS)) )
+
+#   define BOOST_MPL_AUX_PTR_TO_REF(X) \
+    *BOOST_MPL_AUX_STATIC_CAST(X*, 0) \
+/**/
+
+#else
+
+#   define BOOST_MPL_AUX_PTR_TO_REF(X) \
+    aux::ptr_to_ref(BOOST_MPL_AUX_STATIC_CAST(X*, 0)) \
+/**/
+
+#endif
+
+
+namespace boost { namespace mpl { namespace aux {
+
+template< typename T > static T const& ptr_to_ref(T*);
+
+}}}
+
+#endif // BOOST_MPL_AUX_PTR_TO_REF_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/back.hpp b/3rdParty/Boost/src/boost/mpl/back.hpp
new file mode 100644
index 0000000..fe2158f
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/back.hpp
@@ -0,0 +1,39 @@
+
+#ifndef BOOST_MPL_BACK_HPP_INCLUDED
+#define BOOST_MPL_BACK_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: back.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/back_fwd.hpp>
+#include <boost/mpl/aux_/back_impl.hpp>
+#include <boost/mpl/sequence_tag.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace boost { namespace mpl {
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+    >
+struct back
+    : back_impl< typename sequence_tag<Sequence>::type >
+        ::template apply< Sequence >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,back,(Sequence))
+};
+
+BOOST_MPL_AUX_NA_SPEC(1, back)
+
+}}
+
+#endif // BOOST_MPL_BACK_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/base.hpp b/3rdParty/Boost/src/boost/mpl/base.hpp
new file mode 100644
index 0000000..3f7e8a4
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/base.hpp
@@ -0,0 +1,35 @@
+
+#ifndef BOOST_MPL_BASE_HPP_INCLUDED
+#define BOOST_MPL_BASE_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: base.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace boost { namespace mpl {
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T)
+    >
+struct base
+{
+    typedef typename T::base type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,base,(T))
+};
+
+BOOST_MPL_AUX_NA_SPEC(1, base)
+
+}}
+
+#endif // BOOST_MPL_BASE_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/begin.hpp b/3rdParty/Boost/src/boost/mpl/begin.hpp
new file mode 100644
index 0000000..74ae3b9
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/begin.hpp
@@ -0,0 +1,19 @@
+
+#ifndef BOOST_MPL_BEGIN_HPP_INCLUDED
+#define BOOST_MPL_BEGIN_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: begin.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/begin_end.hpp>
+
+#endif // BOOST_MPL_BEGIN_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/bitand.hpp b/3rdParty/Boost/src/boost/mpl/bitand.hpp
new file mode 100644
index 0000000..8006617
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/bitand.hpp
@@ -0,0 +1,45 @@
+
+#ifndef BOOST_MPL_BITAND_HPP_INCLUDED
+#define BOOST_MPL_BITAND_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2009
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: bitand.hpp 63520 2010-07-02 08:59:55Z agurtovoy $
+// $Date: 2010-07-02 04:59:55 -0400 (Fri, 02 Jul 2010) $
+// $Revision: 63520 $
+
+// agurt, 23/jan/10: workaround a conflict with <iso646.h> header's 
+// macros, see http://tinyurl.com/ycwdxco; 'defined(bitand)'
+// has to be checked in a separate condition, otherwise GCC complains 
+// about 'bitand' being an alternative token
+#if defined(_MSC_VER) 
+#ifndef __GCCXML__
+#if defined(bitand)
+#   pragma push_macro("bitand")
+#   undef bitand
+#   define bitand(x)
+#endif
+#endif
+#endif
+
+#define AUX778076_OP_NAME   bitand_
+#define AUX778076_OP_PREFIX bitand
+#define AUX778076_OP_TOKEN  &
+#include <boost/mpl/aux_/arithmetic_op.hpp>
+
+#if defined(_MSC_VER)
+#ifndef __GCCXML__
+#if defined(bitand)
+#   pragma pop_macro("bitand")
+#endif
+#endif
+#endif
+
+#endif // BOOST_MPL_BITAND_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/bitxor.hpp b/3rdParty/Boost/src/boost/mpl/bitxor.hpp
new file mode 100644
index 0000000..bbbc3dd
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/bitxor.hpp
@@ -0,0 +1,23 @@
+
+#ifndef BOOST_MPL_BITXOR_HPP_INCLUDED
+#define BOOST_MPL_BITXOR_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: bitxor.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#define AUX778076_OP_NAME   bitxor_
+#define AUX778076_OP_PREFIX bitxor
+#define AUX778076_OP_TOKEN  ^
+#include <boost/mpl/aux_/arithmetic_op.hpp>
+
+#endif // BOOST_MPL_BITXOR_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/empty_base.hpp b/3rdParty/Boost/src/boost/mpl/empty_base.hpp
new file mode 100644
index 0000000..ace1bdf
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/empty_base.hpp
@@ -0,0 +1,59 @@
+
+#ifndef BOOST_MPL_EMPTY_BASE_HPP_INCLUDED
+#define BOOST_MPL_EMPTY_BASE_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: empty_base.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#include <boost/type_traits/is_empty.hpp>
+
+// should be always the last #include directive
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+namespace boost { namespace mpl {
+
+// empty base class, guaranteed to have no members; inheritance from
+// 'empty_base' through the 'inherit' metafunction is a no-op - see 
+// "mpl/inherit.hpp> header for the details
+struct empty_base {};
+
+template< typename T >
+struct is_empty_base
+    : false_
+{
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+    using false_::value;
+#endif
+};
+
+template<>
+struct is_empty_base<empty_base>
+    : true_
+{
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+    using true_::value;
+#endif
+};
+
+}}
+
+namespace boost {
+BOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_empty, mpl::empty_base, true)
+}
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_MPL_EMPTY_BASE_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/end.hpp b/3rdParty/Boost/src/boost/mpl/end.hpp
new file mode 100644
index 0000000..3b7f33d
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/end.hpp
@@ -0,0 +1,19 @@
+
+#ifndef BOOST_MPL_END_HPP_INCLUDED
+#define BOOST_MPL_END_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: end.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/begin_end.hpp>
+
+#endif // BOOST_MPL_END_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/erase.hpp b/3rdParty/Boost/src/boost/mpl/erase.hpp
new file mode 100644
index 0000000..6595309
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/erase.hpp
@@ -0,0 +1,42 @@
+
+#ifndef BOOST_MPL_ERASE_HPP_INCLUDED
+#define BOOST_MPL_ERASE_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: erase.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/erase_fwd.hpp>
+#include <boost/mpl/sequence_tag.hpp>
+#include <boost/mpl/aux_/erase_impl.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/aux_/config/msvc_typename.hpp>
+
+namespace boost { namespace mpl {
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+    , typename BOOST_MPL_AUX_NA_PARAM(First)
+    , typename BOOST_MPL_AUX_NA_PARAM(Last)
+    >
+struct erase
+    : erase_impl< typename sequence_tag<Sequence>::type >
+        ::template apply< Sequence,First,Last >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(3,erase,(Sequence,First,Last))
+};
+
+BOOST_MPL_AUX_NA_SPEC(3,erase)
+
+}}
+
+#endif // BOOST_MPL_ERASE_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/erase_fwd.hpp b/3rdParty/Boost/src/boost/mpl/erase_fwd.hpp
new file mode 100644
index 0000000..0626ecb
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/erase_fwd.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_ERASE_FWD_HPP_INCLUDED
+#define BOOST_MPL_ERASE_FWD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: erase_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+namespace boost { namespace mpl {
+
+template< typename Tag > struct erase_impl;
+template< typename Sequence, typename First, typename Last > struct erase;
+
+}}
+
+#endif // BOOST_MPL_ERASE_FWD_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/erase_key.hpp b/3rdParty/Boost/src/boost/mpl/erase_key.hpp
new file mode 100644
index 0000000..84b4866
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/erase_key.hpp
@@ -0,0 +1,41 @@
+
+#ifndef BOOST_MPL_ERASE_KEY_HPP_INCLUDED
+#define BOOST_MPL_ERASE_KEY_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: erase_key.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/erase_key_fwd.hpp>
+#include <boost/mpl/sequence_tag.hpp>
+#include <boost/mpl/aux_/erase_key_impl.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/aux_/config/msvc_typename.hpp>
+
+namespace boost { namespace mpl {
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+    , typename BOOST_MPL_AUX_NA_PARAM(Key)
+    >
+struct erase_key
+    : erase_key_impl< typename sequence_tag<Sequence>::type >
+        ::template apply< Sequence,Key >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,erase_key,(Sequence,Key))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2,erase_key)
+
+}}
+
+#endif // BOOST_MPL_ERASE_KEY_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/erase_key_fwd.hpp b/3rdParty/Boost/src/boost/mpl/erase_key_fwd.hpp
new file mode 100644
index 0000000..4844893
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/erase_key_fwd.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_ERASE_KEY_FWD_HPP_INCLUDED
+#define BOOST_MPL_ERASE_KEY_FWD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: erase_key_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+namespace boost { namespace mpl {
+
+template< typename Tag > struct erase_key_impl;
+template< typename Sequence, typename Key > struct erase_key;
+
+}}
+
+#endif // BOOST_MPL_ERASE_KEY_FWD_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/has_key.hpp b/3rdParty/Boost/src/boost/mpl/has_key.hpp
new file mode 100644
index 0000000..85102ed
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/has_key.hpp
@@ -0,0 +1,41 @@
+
+#ifndef BOOST_MPL_HAS_KEY_HPP_INCLUDED
+#define BOOST_MPL_HAS_KEY_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: has_key.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/has_key_fwd.hpp>
+#include <boost/mpl/sequence_tag.hpp>
+#include <boost/mpl/aux_/has_key_impl.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace boost { namespace mpl {
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(AssociativeSequence)
+    , typename BOOST_MPL_AUX_NA_PARAM(Key)
+    >
+struct has_key
+    : has_key_impl< typename sequence_tag<AssociativeSequence>::type >
+        ::template apply<AssociativeSequence,Key>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,has_key,(AssociativeSequence,Key))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, has_key)
+
+}}
+
+#endif // BOOST_MPL_HAS_KEY_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/has_key_fwd.hpp b/3rdParty/Boost/src/boost/mpl/has_key_fwd.hpp
new file mode 100644
index 0000000..49b0fb5
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/has_key_fwd.hpp
@@ -0,0 +1,25 @@
+
+#ifndef BOOST_MPL_HAS_KEY_FWD_HPP_INCLUDED
+#define BOOST_MPL_HAS_KEY_FWD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: has_key_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+namespace boost { namespace mpl {
+
+template< typename Tag > struct has_key_impl;
+template< typename AssociativeSequence, typename Key > struct has_key;
+
+}}
+
+#endif // BOOST_MPL_HAS_KEY_FWD_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/inherit.hpp b/3rdParty/Boost/src/boost/mpl/inherit.hpp
new file mode 100644
index 0000000..39e8ae1
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/inherit.hpp
@@ -0,0 +1,229 @@
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+#ifndef BOOST_MPL_INHERIT_HPP_INCLUDED
+#define BOOST_MPL_INHERIT_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: inherit.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/empty_base.hpp>
+#   include <boost/mpl/aux_/na_spec.hpp>
+#   include <boost/mpl/aux_/lambda_support.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER inherit.hpp
+#   include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/mpl/limits/arity.hpp>
+#   include <boost/mpl/aux_/preprocessor/params.hpp>
+#   include <boost/mpl/aux_/preprocessor/default_params.hpp>
+#   include <boost/mpl/aux_/preprocessor/enum.hpp>
+#   include <boost/mpl/aux_/config/ctps.hpp>
+#   include <boost/mpl/aux_/config/dtp.hpp>
+
+#   include <boost/preprocessor/iterate.hpp>
+#   include <boost/preprocessor/dec.hpp>
+#   include <boost/preprocessor/cat.hpp>
+
+namespace boost { namespace mpl {
+
+// 'inherit<T1,T2,..,Tn>' metafunction; returns an unspecified class type
+// produced by public derivation from all metafunction's parameters 
+// (T1,T2,..,Tn), except the parameters of 'empty_base' class type; 
+// regardless the position and number of 'empty_base' parameters in the 
+// metafunction's argument list, derivation from them is always a no-op;
+// for instance:
+//      inherit<her>::type == her
+//      inherit<her,my>::type == struct unspecified : her, my {};
+//      inherit<empty_base,her>::type == her
+//      inherit<empty_base,her,empty_base,empty_base>::type == her
+//      inherit<her,empty_base,my>::type == struct unspecified : her, my {};
+//      inherit<empty_base,empty_base>::type == empty_base
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template< 
+      typename BOOST_MPL_AUX_NA_PARAM(T1)
+    , typename BOOST_MPL_AUX_NA_PARAM(T2)
+    > 
+struct inherit2
+    : T1, T2
+{
+    typedef inherit2 type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1,T2))
+};
+
+template< typename T1 > 
+struct inherit2<T1,empty_base>
+{
+    typedef T1 type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (T1,empty_base))
+};
+
+template< typename T2 > 
+struct inherit2<empty_base,T2>
+{
+    typedef T2 type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base,T2))
+};
+
+// needed to disambiguate the previous two in case when both 
+// T1 and T2 == empty_base
+template<> 
+struct inherit2<empty_base,empty_base>
+{
+    typedef empty_base type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base,empty_base))
+};
+
+#else
+
+namespace aux {
+
+template< bool C1, bool C2 >
+struct inherit2_impl
+{
+    template< typename Derived, typename T1, typename T2 > struct result_ 
+        : T1, T2
+    {
+        typedef Derived type_;
+    };
+};
+
+template<>
+struct inherit2_impl<false,true>
+{
+    template< typename Derived, typename T1, typename T2 > struct result_
+        : T1
+    {
+        typedef T1 type_;
+    };
+};
+
+template<>
+struct inherit2_impl<true,false>
+{
+    template< typename Derived, typename T1, typename T2 > struct result_
+        : T2 
+    {
+        typedef T2 type_;
+    };
+};
+
+template<>
+struct inherit2_impl<true,true>
+{
+    template< typename Derived, typename T1, typename T2 > struct result_
+    {
+        typedef T1 type_;
+    };
+};
+
+} // namespace aux
+
+template< 
+      typename BOOST_MPL_AUX_NA_PARAM(T1)
+    , typename BOOST_MPL_AUX_NA_PARAM(T2)
+    > 
+struct inherit2
+    : aux::inherit2_impl<
+          is_empty_base<T1>::value
+        , is_empty_base<T2>::value
+        >::template result_< inherit2<T1,T2>,T1,T2 >
+{
+    typedef typename inherit2::type_ type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1,T2))
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+BOOST_MPL_AUX_NA_SPEC(2, inherit2)
+
+#define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(3, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/inherit.hpp>))
+#include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_INHERIT_HPP_INCLUDED
+
+///// iteration
+
+#else
+#define n_ BOOST_PP_FRAME_ITERATION(1)
+
+template<
+      BOOST_MPL_PP_DEFAULT_PARAMS(n_, typename T, na)
+    >
+struct BOOST_PP_CAT(inherit,n_)
+    : inherit2<
+          typename BOOST_PP_CAT(inherit,BOOST_PP_DEC(n_))<
+              BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(n_), T)
+            >::type
+        , BOOST_PP_CAT(T,n_)
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          n_
+        , BOOST_PP_CAT(inherit,n_)
+        , (BOOST_MPL_PP_PARAMS(n_, T))
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC(n_, BOOST_PP_CAT(inherit,n_))
+
+#if n_ == BOOST_MPL_LIMIT_METAFUNCTION_ARITY
+/// primary template
+template<
+      BOOST_MPL_PP_DEFAULT_PARAMS(n_, typename T, empty_base)
+    >
+struct inherit
+    : BOOST_PP_CAT(inherit,n_)<BOOST_MPL_PP_PARAMS(n_, T)>
+{
+};
+
+// 'na' specialization
+template<>
+struct inherit< BOOST_MPL_PP_ENUM(5, na) >
+{
+    template<
+#if !defined(BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)
+          BOOST_MPL_PP_DEFAULT_PARAMS(n_, typename T, empty_base)
+#else
+          BOOST_MPL_PP_PARAMS(n_, typename T)
+#endif
+        >
+    struct apply
+        : inherit< BOOST_MPL_PP_PARAMS(n_, T) >
+    {
+    };
+};
+
+BOOST_MPL_AUX_NA_SPEC_LAMBDA(n_, inherit)
+BOOST_MPL_AUX_NA_SPEC_ARITY(n_, inherit)
+BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(n_, n_, inherit)
+#endif
+
+#undef n_
+#endif // BOOST_PP_IS_ITERATING
diff --git a/3rdParty/Boost/src/boost/mpl/insert.hpp b/3rdParty/Boost/src/boost/mpl/insert.hpp
new file mode 100644
index 0000000..ebc52bc
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/insert.hpp
@@ -0,0 +1,41 @@
+
+#ifndef BOOST_MPL_INSERT_HPP_INCLUDED
+#define BOOST_MPL_INSERT_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: insert.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/insert_fwd.hpp>
+#include <boost/mpl/sequence_tag.hpp>
+#include <boost/mpl/aux_/insert_impl.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace boost { namespace mpl {
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+    , typename BOOST_MPL_AUX_NA_PARAM(Pos_or_T)
+    , typename BOOST_MPL_AUX_NA_PARAM(T)
+    >
+struct insert
+    : insert_impl< typename sequence_tag<Sequence>::type >
+        ::template apply< Sequence,Pos_or_T,T >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(3,insert,(Sequence,Pos_or_T,T))
+};
+
+BOOST_MPL_AUX_NA_SPEC(3, insert)
+
+}}
+
+#endif // BOOST_MPL_INSERT_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/insert_fwd.hpp b/3rdParty/Boost/src/boost/mpl/insert_fwd.hpp
new file mode 100644
index 0000000..9c6ff64
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/insert_fwd.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_INSERT_FWD_HPP_INCLUDED
+#define BOOST_MPL_INSERT_FWD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: insert_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+namespace boost { namespace mpl {
+
+template< typename Tag > struct insert_impl;
+template< typename Sequence, typename Pos_or_T, typename T > struct insert;
+
+}}
+
+#endif // BOOST_MPL_INSERT_FWD_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/insert_range.hpp b/3rdParty/Boost/src/boost/mpl/insert_range.hpp
new file mode 100644
index 0000000..9332b9e
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/insert_range.hpp
@@ -0,0 +1,41 @@
+
+#ifndef BOOST_MPL_INSERT_RANGE_HPP_INCLUDED
+#define BOOST_MPL_INSERT_RANGE_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: insert_range.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/insert_range_fwd.hpp>
+#include <boost/mpl/sequence_tag.hpp>
+#include <boost/mpl/aux_/insert_range_impl.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace boost { namespace mpl {
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+    , typename BOOST_MPL_AUX_NA_PARAM(Pos)
+    , typename BOOST_MPL_AUX_NA_PARAM(Range)
+    >
+struct insert_range
+    : insert_range_impl< typename sequence_tag<Sequence>::type >
+        ::template apply< Sequence,Pos,Range >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(3,insert_range,(Sequence,Pos,Range))
+};
+
+BOOST_MPL_AUX_NA_SPEC(3, insert_range)
+
+}}
+
+#endif // BOOST_MPL_INSERT_RANGE_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/insert_range_fwd.hpp b/3rdParty/Boost/src/boost/mpl/insert_range_fwd.hpp
new file mode 100644
index 0000000..256d2a2
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/insert_range_fwd.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_INSERT_RANGE_FWD_HPP_INCLUDED
+#define BOOST_MPL_INSERT_RANGE_FWD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: insert_range_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+namespace boost { namespace mpl {
+
+template< typename Tag > struct insert_range_impl;
+template< typename Sequence, typename Pos, typename Range > struct insert_range;
+
+}}
+
+#endif // BOOST_MPL_INSERT_RANGE_FWD_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/joint_view.hpp b/3rdParty/Boost/src/boost/mpl/joint_view.hpp
new file mode 100644
index 0000000..dd8d91f
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/joint_view.hpp
@@ -0,0 +1,65 @@
+
+#ifndef BOOST_MPL_JOINT_VIEW_HPP_INCLUDED
+#define BOOST_MPL_JOINT_VIEW_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: joint_view.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/aux_/joint_iter.hpp>
+#include <boost/mpl/plus.hpp>
+#include <boost/mpl/size_fwd.hpp>
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+
+namespace boost { namespace mpl {
+
+namespace aux {
+struct joint_view_tag;
+}
+
+template<>
+struct size_impl< aux::joint_view_tag >
+{
+    template < typename JointView > struct apply
+      : plus<
+            size<typename JointView::sequence1_>
+          , size<typename JointView::sequence2_>
+          >
+    {};
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(Sequence1_)
+    , typename BOOST_MPL_AUX_NA_PARAM(Sequence2_)
+    >
+struct joint_view
+{
+    typedef typename mpl::begin<Sequence1_>::type   first1_;
+    typedef typename mpl::end<Sequence1_>::type     last1_;
+    typedef typename mpl::begin<Sequence2_>::type   first2_;
+    typedef typename mpl::end<Sequence2_>::type     last2_;
+
+    // agurt, 25/may/03: for the 'size_traits' implementation above
+    typedef Sequence1_ sequence1_;
+    typedef Sequence2_ sequence2_;
+
+    typedef joint_view type;
+    typedef aux::joint_view_tag tag;
+    typedef joint_iter<first1_,last1_,first2_>  begin;
+    typedef joint_iter<last1_,last1_,last2_>    end;
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, joint_view)
+
+}}
+
+#endif // BOOST_MPL_JOINT_VIEW_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/key_type_fwd.hpp b/3rdParty/Boost/src/boost/mpl/key_type_fwd.hpp
new file mode 100644
index 0000000..95f8445
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/key_type_fwd.hpp
@@ -0,0 +1,25 @@
+
+#ifndef BOOST_MPL_KEY_TYPE_FWD_HPP_INCLUDED
+#define BOOST_MPL_KEY_TYPE_FWD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: key_type_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+namespace boost { namespace mpl {
+
+template< typename Tag > struct key_type_impl;
+template< typename AssociativeSequence, typename T > struct key_type;
+
+}}
+
+#endif // BOOST_MPL_KEY_TYPE_FWD_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/limits/map.hpp b/3rdParty/Boost/src/boost/mpl/limits/map.hpp
new file mode 100644
index 0000000..1c24890
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/limits/map.hpp
@@ -0,0 +1,21 @@
+
+#ifndef BOOST_MPL_LIMITS_MAP_HPP_INCLUDED
+#define BOOST_MPL_LIMITS_MAP_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: map.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#if !defined(BOOST_MPL_LIMIT_MAP_SIZE)
+#   define BOOST_MPL_LIMIT_MAP_SIZE 20
+#endif
+
+#endif // BOOST_MPL_LIMITS_MAP_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/map.hpp b/3rdParty/Boost/src/boost/mpl/map.hpp
new file mode 100644
index 0000000..ceecbf1
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/map.hpp
@@ -0,0 +1,57 @@
+
+#ifndef BOOST_MPL_MAP_HPP_INCLUDED
+#define BOOST_MPL_MAP_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: map.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/limits/map.hpp>
+#   include <boost/mpl/aux_/na.hpp>
+#   include <boost/mpl/aux_/config/preprocessor.hpp>
+
+#   include <boost/preprocessor/inc.hpp>
+#   include <boost/preprocessor/cat.hpp>
+#   include <boost/preprocessor/stringize.hpp>
+
+#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING)
+#   define AUX778076_MAP_HEADER \
+    BOOST_PP_CAT(map, BOOST_MPL_LIMIT_MAP_SIZE).hpp \
+    /**/
+#else
+#   define AUX778076_MAP_HEADER \
+    BOOST_PP_CAT(map, BOOST_MPL_LIMIT_MAP_SIZE)##.hpp \
+    /**/
+#endif
+
+#   include BOOST_PP_STRINGIZE(boost/mpl/map/AUX778076_MAP_HEADER)
+#   undef AUX778076_MAP_HEADER
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER map.hpp
+#   include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/mpl/limits/map.hpp>
+
+#   define AUX778076_SEQUENCE_NAME map
+#   define AUX778076_SEQUENCE_LIMIT BOOST_MPL_LIMIT_MAP_SIZE
+#   include <boost/mpl/aux_/sequence_wrapper.hpp>
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_MAP_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/map/aux_/at_impl.hpp b/3rdParty/Boost/src/boost/mpl/map/aux_/at_impl.hpp
new file mode 100644
index 0000000..dcec6b2
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/map/aux_/at_impl.hpp
@@ -0,0 +1,144 @@
+
+#ifndef BOOST_MPL_MAP_AUX_AT_IMPL_HPP_INCLUDED
+#define BOOST_MPL_MAP_AUX_AT_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: at_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/at_fwd.hpp>
+#include <boost/mpl/long.hpp>
+#include <boost/mpl/map/aux_/tag.hpp>
+#include <boost/mpl/aux_/order_impl.hpp>
+#include <boost/mpl/aux_/overload_names.hpp>
+#include <boost/mpl/aux_/type_wrapper.hpp>
+#include <boost/mpl/aux_/ptr_to_ref.hpp>
+#include <boost/mpl/aux_/static_cast.hpp>
+#include <boost/mpl/aux_/config/typeof.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+
+#if !defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+#   include <boost/mpl/eval_if.hpp>
+#   include <boost/mpl/pair.hpp>
+#   include <boost/mpl/void.hpp>
+#   include <boost/mpl/aux_/config/static_constant.hpp>
+#endif
+
+namespace boost { namespace mpl {
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+
+template< typename Map, typename Key >
+struct m_at
+{
+    typedef aux::type_wrapper<Key> key_;
+    typedef __typeof__( BOOST_MPL_AUX_OVERLOAD_CALL_VALUE_BY_KEY(
+          Map
+        , BOOST_MPL_AUX_STATIC_CAST(key_*, 0)
+        ) ) type;
+};
+
+template<>
+struct at_impl< aux::map_tag >
+{
+    template< typename Map, typename Key > struct apply
+        : aux::wrapped_type< typename m_at<
+              Map
+            , Key
+            >::type >
+    {
+    };
+};
+
+// agurt 31/jan/04: two-step implementation for the sake of GCC 3.x
+template< typename Map, long order > 
+struct item_by_order_impl
+{
+    typedef __typeof__( BOOST_MPL_AUX_OVERLOAD_CALL_ITEM_BY_ORDER(
+          Map 
+        , BOOST_MPL_AUX_STATIC_CAST(long_<order>*, 0)
+        ) ) type;
+};
+
+template< typename Map, long order >
+struct item_by_order
+    : aux::wrapped_type<
+          typename item_by_order_impl<Map,order>::type
+        >
+{
+};
+
+#else // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES
+
+#   if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template< typename Map, long n > struct m_at
+{
+    typedef void_ type;
+};
+
+#   else
+
+template< long n > struct m_at_impl
+{
+    template< typename Map > struct result_
+    {
+        typedef void_ type;
+    };
+};
+
+template< typename Map, long n > struct m_at
+{
+    typedef typename m_at_impl<n>::result_<Map>::type type;
+};
+
+#   endif
+
+
+template<>
+struct at_impl< aux::map_tag >
+{
+    template< typename Map, typename Key > struct apply
+    {
+        typedef typename m_at< Map, (x_order_impl<Map,Key>::value - 2) >::type item_;       
+        typedef typename eval_if<
+              is_void_<item_>
+            , void_
+            , second<item_>
+            >::type type;
+    };
+};
+
+template< typename Map, long order > struct is_item_masked
+{
+    BOOST_STATIC_CONSTANT(bool, value = 
+          sizeof( BOOST_MPL_AUX_OVERLOAD_CALL_IS_MASKED(
+              Map
+            , BOOST_MPL_AUX_STATIC_CAST(long_<order>*, 0)
+            ) ) == sizeof(aux::yes_tag)
+        );
+};
+
+template< typename Map, long order > struct item_by_order
+{    
+    typedef typename eval_if_c< 
+          is_item_masked<Map,order>::value
+        , void_
+        , m_at<Map,(order - 2)>
+        >::type type;
+};
+
+#endif
+
+}}
+
+#endif // BOOST_MPL_SET_AUX_AT_IMPL_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/map/aux_/begin_end_impl.hpp b/3rdParty/Boost/src/boost/mpl/map/aux_/begin_end_impl.hpp
new file mode 100644
index 0000000..7e5afb9
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/map/aux_/begin_end_impl.hpp
@@ -0,0 +1,50 @@
+
+#ifndef BOOST_MPL_MAP_AUX_BEGIN_END_IMPL_HPP_INCLUDED
+#define BOOST_MPL_MAP_AUX_BEGIN_END_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: begin_end_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/begin_end_fwd.hpp>
+#include <boost/mpl/next_prior.hpp>
+#include <boost/mpl/map/aux_/iterator.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct begin_impl< aux::map_tag >
+{
+    template< typename Map > struct apply
+    {
+        typedef typename next< typename Map::order >::type max_order_;
+        typedef m_iter<
+              Map
+            , next_order<Map,1,max_order_::value>::value
+            , max_order_::value
+            > type;
+    };
+};
+
+template<>
+struct end_impl< aux::map_tag >
+{
+    template< typename Map > struct apply
+    {
+        typedef typename next< typename Map::order >::type max_order_;
+        typedef m_iter< Map,max_order_::value,max_order_::value > type;
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_MAP_AUX_BEGIN_END_IMPL_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/map/aux_/clear_impl.hpp b/3rdParty/Boost/src/boost/mpl/map/aux_/clear_impl.hpp
new file mode 100644
index 0000000..eb5ac9b
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/map/aux_/clear_impl.hpp
@@ -0,0 +1,35 @@
+
+#ifndef BOOST_MPL_MAP_AUX_CLEAR_IMPL_HPP_INCLUDED
+#define BOOST_MPL_MAP_AUX_CLEAR_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: clear_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/clear_fwd.hpp>
+#include <boost/mpl/map/aux_/map0.hpp>
+#include <boost/mpl/map/aux_/tag.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct clear_impl< aux::map_tag >
+{
+    template< typename Map > struct apply
+    {
+        typedef map0<> type;
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_MAP_AUX_CLEAR_IMPL_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/map/aux_/contains_impl.hpp b/3rdParty/Boost/src/boost/mpl/map/aux_/contains_impl.hpp
new file mode 100644
index 0000000..73a832e
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/map/aux_/contains_impl.hpp
@@ -0,0 +1,43 @@
+
+#ifndef BOOST_MPL_MAP_AUX_CONTAINS_IMPL_HPP_INCLUDED
+#define BOOST_MPL_MAP_AUX_CONTAINS_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: contains_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/contains_fwd.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/map/aux_/at_impl.hpp>
+#include <boost/mpl/map/aux_/tag.hpp>
+
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct contains_impl< aux::map_tag >
+{
+    template< typename Map, typename Pair > struct apply
+        : is_same< 
+              typename at_impl<aux::map_tag>::apply<
+                  Map
+                , typename Pair::first
+                >::type
+            , typename Pair::second
+            >
+    {
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_MAP_AUX_CONTAINS_IMPL_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/map/aux_/empty_impl.hpp b/3rdParty/Boost/src/boost/mpl/map/aux_/empty_impl.hpp
new file mode 100644
index 0000000..99dde3e
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/map/aux_/empty_impl.hpp
@@ -0,0 +1,34 @@
+
+#ifndef BOOST_MPL_MAP_AUX_EMPTY_IMPL_HPP_INCLUDED
+#define BOOST_MPL_MAP_AUX_EMPTY_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: empty_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/empty_fwd.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/map/aux_/tag.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct empty_impl< aux::map_tag >
+{
+    template< typename Map > struct apply
+        : not_< typename Map::size >
+    {
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_MAP_AUX_EMPTY_IMPL_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/map/aux_/erase_impl.hpp b/3rdParty/Boost/src/boost/mpl/map/aux_/erase_impl.hpp
new file mode 100644
index 0000000..1eae144
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/map/aux_/erase_impl.hpp
@@ -0,0 +1,41 @@
+
+#ifndef BOOST_MPL_MAP_AUX_ERASE_IMPL_HPP_INCLUDED
+#define BOOST_MPL_MAP_AUX_ERASE_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: erase_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/erase_fwd.hpp>
+#include <boost/mpl/map/aux_/erase_key_impl.hpp>
+#include <boost/mpl/map/aux_/tag.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct erase_impl< aux::map_tag >
+{
+    template< 
+          typename Map
+        , typename Pos
+        , typename unused_
+        > 
+    struct apply
+        : erase_key_impl<aux::map_tag>
+            ::apply<Map,typename Pos::type::first>
+    {
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_MAP_AUX_ERASE_IMPL_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/map/aux_/erase_key_impl.hpp b/3rdParty/Boost/src/boost/mpl/map/aux_/erase_key_impl.hpp
new file mode 100644
index 0000000..d1dbd7c
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/map/aux_/erase_key_impl.hpp
@@ -0,0 +1,53 @@
+
+#ifndef BOOST_MPL_MAP_AUX_ERASE_KEY_IMPL_HPP_INCLUDED
+#define BOOST_MPL_MAP_AUX_ERASE_KEY_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: erase_key_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/erase_key_fwd.hpp>
+#include <boost/mpl/map/aux_/has_key_impl.hpp>
+#include <boost/mpl/map/aux_/item.hpp>
+#include <boost/mpl/map/aux_/tag.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/base.hpp>
+#include <boost/mpl/eval_if.hpp>
+
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct erase_key_impl< aux::map_tag >
+{
+    template< 
+          typename Map
+        , typename Key
+        > 
+    struct apply
+        : eval_if< 
+              has_key_impl<aux::map_tag>::apply<Map,Key>
+            , eval_if< 
+                  is_same< Key,typename Map::key_ > 
+                , base<Map>
+                , identity< m_mask<Key,Map> >
+                >
+            , identity<Map>
+            >
+    {
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_MAP_AUX_ERASE_KEY_IMPL_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/map/aux_/has_key_impl.hpp b/3rdParty/Boost/src/boost/mpl/map/aux_/has_key_impl.hpp
new file mode 100644
index 0000000..70278ac
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/map/aux_/has_key_impl.hpp
@@ -0,0 +1,44 @@
+
+#ifndef BOOST_MPL_MAP_AUX_HAS_KEY_IMPL_HPP_INCLUDED
+#define BOOST_MPL_MAP_AUX_HAS_KEY_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: has_key_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/has_key_fwd.hpp>
+#include <boost/mpl/map/aux_/tag.hpp>
+#include <boost/mpl/map/aux_/at_impl.hpp>
+#include <boost/mpl/void.hpp>
+#include <boost/mpl/aux_/config/typeof.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct has_key_impl< aux::map_tag >
+{
+    template< typename Map, typename Key > struct apply
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+        : is_not_void_< 
+              typename at_impl<aux::map_tag>
+                ::apply<Map,Key>::type
+            >
+#else
+        : bool_< ( x_order_impl<Map,Key>::value > 1 ) >
+#endif
+    {
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_MAP_AUX_HAS_KEY_IMPL_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/map/aux_/include_preprocessed.hpp b/3rdParty/Boost/src/boost/mpl/map/aux_/include_preprocessed.hpp
new file mode 100644
index 0000000..bff3396
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/map/aux_/include_preprocessed.hpp
@@ -0,0 +1,53 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: include_preprocessed.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION!
+
+#include <boost/mpl/aux_/config/typeof.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+#include <boost/mpl/aux_/config/preprocessor.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/stringize.hpp>
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+#   define AUX778076_INCLUDE_DIR typeof_based
+#elif defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+#   define AUX778076_INCLUDE_DIR no_ctps
+#else
+#   define AUX778076_INCLUDE_DIR plain
+#endif
+
+#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING)
+#   define AUX778076_HEADER \
+    AUX778076_INCLUDE_DIR/BOOST_MPL_PREPROCESSED_HEADER \
+/**/
+#else
+#   define AUX778076_HEADER \
+    BOOST_PP_CAT(AUX778076_INCLUDE_DIR,/)##BOOST_MPL_PREPROCESSED_HEADER \
+/**/
+#endif
+
+#if BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(700))
+#   define AUX778076_INCLUDE_STRING BOOST_PP_STRINGIZE(boost/mpl/map/aux_/preprocessed/AUX778076_HEADER)
+#   include AUX778076_INCLUDE_STRING
+#   undef AUX778076_INCLUDE_STRING
+#else
+#   include BOOST_PP_STRINGIZE(boost/mpl/map/aux_/preprocessed/AUX778076_HEADER)
+#endif
+
+#   undef AUX778076_HEADER
+#   undef AUX778076_INCLUDE_DIR
+
+#undef BOOST_MPL_PREPROCESSED_HEADER
diff --git a/3rdParty/Boost/src/boost/mpl/map/aux_/insert_impl.hpp b/3rdParty/Boost/src/boost/mpl/map/aux_/insert_impl.hpp
new file mode 100644
index 0000000..411909f
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/map/aux_/insert_impl.hpp
@@ -0,0 +1,72 @@
+
+#ifndef BOOST_MPL_MAP_AUX_INSERT_IMPL_HPP_INCLUDED
+#define BOOST_MPL_MAP_AUX_INSERT_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: insert_impl.hpp 55751 2009-08-24 04:11:00Z agurtovoy $
+// $Date: 2009-08-24 00:11:00 -0400 (Mon, 24 Aug 2009) $
+// $Revision: 55751 $
+
+#include <boost/mpl/insert_fwd.hpp>
+#include <boost/mpl/next_prior.hpp>
+#include <boost/mpl/map/aux_/contains_impl.hpp>
+#include <boost/mpl/map/aux_/item.hpp>
+#include <boost/mpl/map/aux_/tag.hpp>
+#include <boost/mpl/aux_/na.hpp>
+#include <boost/mpl/aux_/config/typeof.hpp>
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< typename Map, typename Pair > 
+struct map_insert_impl
+    : if_< 
+          contains_impl<aux::map_tag>::apply<Map,Pair>
+        , Map
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+        , m_item<
+              typename Pair::first
+            , typename Pair::second
+            , Map
+            >
+#else
+        , m_item<
+              Map::order::value
+            , typename Pair::first
+            , typename Pair::second
+            , Map
+            >
+#endif
+        >
+{
+};
+}
+
+template<>
+struct insert_impl< aux::map_tag >
+{
+    template< 
+          typename Map
+        , typename PosOrKey
+        , typename KeyOrNA
+        > 
+    struct apply
+        : aux::map_insert_impl<
+              Map
+            , typename if_na<KeyOrNA,PosOrKey>::type
+            >
+    {
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_MAP_AUX_INSERT_IMPL_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/map/aux_/item.hpp b/3rdParty/Boost/src/boost/mpl/map/aux_/item.hpp
new file mode 100644
index 0000000..e9b5ecc
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/map/aux_/item.hpp
@@ -0,0 +1,138 @@
+
+#ifndef BOOST_MPL_MAP_AUX_ITEM_HPP_INCLUDED
+#define BOOST_MPL_MAP_AUX_ITEM_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: item.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/void.hpp>
+#include <boost/mpl/pair.hpp>
+#include <boost/mpl/long.hpp>
+#include <boost/mpl/next.hpp>
+#include <boost/mpl/prior.hpp>
+#include <boost/mpl/map/aux_/map0.hpp>
+#include <boost/mpl/aux_/order_impl.hpp>
+#include <boost/mpl/aux_/yes_no.hpp>
+#include <boost/mpl/aux_/type_wrapper.hpp>
+#include <boost/mpl/aux_/config/arrays.hpp>
+#include <boost/mpl/aux_/config/typeof.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+
+
+namespace boost { namespace mpl {
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+
+template< typename Key, typename T, typename Base >
+struct m_item
+    : Base
+{
+    typedef Key         key_;
+    typedef pair<Key,T> item;
+    typedef Base        base;
+    
+    typedef typename next< typename Base::size >::type  size;
+    typedef typename next< typename Base::order >::type order;
+
+#if defined(BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES)
+    typedef typename aux::weighted_tag<BOOST_MPL_AUX_MSVC_VALUE_WKND(order)::value>::type order_tag_;
+#else
+    typedef char (&order_tag_)[BOOST_MPL_AUX_MSVC_VALUE_WKND(order)::value];
+#endif
+
+    BOOST_MPL_AUX_MAP_OVERLOAD( aux::type_wrapper<T>, VALUE_BY_KEY, m_item, aux::type_wrapper<Key>* );
+    BOOST_MPL_AUX_MAP_OVERLOAD( aux::type_wrapper<item>, ITEM_BY_ORDER, m_item, order* );
+    BOOST_MPL_AUX_MAP_OVERLOAD( order_tag_, ORDER_BY_KEY, m_item, aux::type_wrapper<Key>* );
+};
+
+
+template< typename Key, typename Base >
+struct m_mask
+    : Base
+{
+    typedef void_   key_;
+    typedef Base    base;
+
+    typedef typename prior< typename Base::size >::type  size;
+    typedef typename x_order_impl<Base,Key>::type key_order_;
+    
+    BOOST_MPL_AUX_MAP_OVERLOAD( aux::type_wrapper<void_>, VALUE_BY_KEY, m_mask, aux::type_wrapper<Key>* );
+    BOOST_MPL_AUX_MAP_OVERLOAD( aux::type_wrapper<void_>, ITEM_BY_ORDER, m_mask, key_order_* );
+};
+
+#else // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES
+
+
+#   if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template< long n, typename Key, typename T, typename Base >
+struct m_item;
+
+#   else
+
+template< long n >
+struct m_item_impl
+{
+    template< typename Key, typename T, typename Base >
+    struct result_;
+};
+
+template< long n, typename Key, typename T, typename Base >
+struct m_item
+    : m_item_impl<n>::result_<Key,T,Base>
+{
+};
+
+
+#   endif
+
+
+template< typename Key, typename T, typename Base >
+struct m_item_
+    : Base
+{
+    typedef Key     key_;
+    typedef Base    base;
+    typedef m_item_ type;
+    
+    typedef typename next< typename Base::size >::type  size;
+    typedef typename next< typename Base::order >::type order;
+
+#if defined(BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES)
+    typedef typename aux::weighted_tag<BOOST_MPL_AUX_MSVC_VALUE_WKND(order)::value>::type order_tag_;
+#else
+    typedef char (&order_tag_)[BOOST_MPL_AUX_MSVC_VALUE_WKND(order)::value];
+#endif
+
+    BOOST_MPL_AUX_MAP_OVERLOAD( order_tag_, ORDER_BY_KEY, m_item_, aux::type_wrapper<Key>* );
+};
+
+template< typename Key, typename Base >
+struct m_mask
+    : Base
+{
+    typedef void_   key_;
+    typedef Base    base;
+
+    typedef typename prior< typename Base::size >::type  size;
+    typedef typename x_order_impl<Base,Key>::type key_order_;
+    
+    BOOST_MPL_AUX_MAP_OVERLOAD( aux::no_tag, ORDER_BY_KEY, m_mask, aux::type_wrapper<Key>* );
+    BOOST_MPL_AUX_MAP_OVERLOAD( aux::yes_tag, IS_MASKED, m_mask, key_order_* );
+};
+
+#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES
+
+}}
+
+#endif // BOOST_MPL_MAP_AUX_ITEM_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/map/aux_/iterator.hpp b/3rdParty/Boost/src/boost/mpl/map/aux_/iterator.hpp
new file mode 100644
index 0000000..4031707
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/map/aux_/iterator.hpp
@@ -0,0 +1,169 @@
+
+#ifndef BOOST_MPL_MAP_AUX_ITERATOR_HPP_INCLUDED
+#define BOOST_MPL_MAP_AUX_ITERATOR_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: iterator.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/map/aux_/map0.hpp>
+#include <boost/mpl/map/aux_/at_impl.hpp>
+#include <boost/mpl/map/aux_/tag.hpp>
+#include <boost/mpl/iterator_tags.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/next.hpp>
+#include <boost/mpl/deref.hpp>
+#include <boost/mpl/long.hpp>
+#include <boost/mpl/void.hpp>
+#include <boost/mpl/aux_/nttp_decl.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+
+namespace boost { namespace mpl {
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template< 
+      typename Map
+    , long order
+    , long max_order
+    >
+struct next_order
+    : if_< 
+          is_void_< typename item_by_order<Map,order>::type >
+        , next_order<Map,(order+1),max_order>
+        , long_<order>
+        >::type
+{
+};
+
+template< 
+      typename Map
+    , long max_order
+    >
+struct next_order<Map,max_order,max_order>
+    : long_<max_order>
+{
+};
+
+
+template< typename Map, long order, long max_order >
+struct m_iter
+{
+    typedef forward_iterator_tag category;
+    typedef typename item_by_order<Map,order>::type type;
+};
+
+template< typename Map, long max_order >
+struct m_iter<Map,max_order,max_order>
+{
+    typedef forward_iterator_tag category;
+};
+
+
+template< typename Map, long order, long max_order > 
+struct next< m_iter<Map,order,max_order> >
+{
+    typedef m_iter<
+          Map
+        , next_order<Map,order+1,max_order>::value
+        , max_order
+        > type;
+};
+
+template< typename Map, long max_order > 
+struct next< m_iter<Map,max_order,max_order> >
+{
+};
+
+#else
+
+template< 
+      typename Map
+    , BOOST_MPL_AUX_NTTP_DECL(long, order)
+    , BOOST_MPL_AUX_NTTP_DECL(long, max_order)
+    >
+struct next_order;
+
+template< 
+      typename Map
+    , BOOST_MPL_AUX_NTTP_DECL(long, order)
+    , BOOST_MPL_AUX_NTTP_DECL(long, max_order)
+    >
+struct next_order_impl
+    : if_< 
+          is_void_< typename item_by_order<Map,order>::type >
+        , next_order<Map,(order+1),max_order>
+        , long_<order>
+        >::type
+    {
+    };
+
+template< 
+      typename Map
+    , BOOST_MPL_AUX_NTTP_DECL(long, order)
+    , BOOST_MPL_AUX_NTTP_DECL(long, max_order)
+    >
+struct next_order
+    : if_c<
+          (order != max_order)
+        , next_order_impl<Map,order,max_order>
+        , long_<order>
+        >::type
+{
+};
+
+
+template<
+      typename Map
+    , BOOST_MPL_AUX_NTTP_DECL(long, order)
+    , BOOST_MPL_AUX_NTTP_DECL(long, max_order)
+    >
+struct m_iter;
+
+struct m_iter_empty_base {};
+
+template< 
+      typename Map
+    , BOOST_MPL_AUX_NTTP_DECL(long, order)
+    , BOOST_MPL_AUX_NTTP_DECL(long, max_order)
+    >
+struct m_iter_base
+{
+    typedef typename item_by_order<Map,order>::type type;
+    
+    typedef m_iter<
+          Map
+        , next_order<Map,order+1,max_order>::value
+        , max_order
+        > next;
+};
+
+template<
+      typename Map
+    , BOOST_MPL_AUX_NTTP_DECL(long, order)
+    , BOOST_MPL_AUX_NTTP_DECL(long, max_order)
+    >
+struct m_iter
+  : if_c<
+          (order == max_order)
+        , m_iter_empty_base
+        , m_iter_base<Map,order,max_order>
+        >::type
+{
+    typedef forward_iterator_tag category;
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+}}
+
+#endif // BOOST_MPL_MAP_AUX_ITERATOR_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/map/aux_/key_type_impl.hpp b/3rdParty/Boost/src/boost/mpl/map/aux_/key_type_impl.hpp
new file mode 100644
index 0000000..e8750eb
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/map/aux_/key_type_impl.hpp
@@ -0,0 +1,36 @@
+
+#ifndef BOOST_MPL_MAP_AUX_KEY_TYPE_IMPL_HPP_INCLUDED
+#define BOOST_MPL_MAP_AUX_KEY_TYPE_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: key_type_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/key_type_fwd.hpp>
+#include <boost/mpl/pair.hpp>
+#include <boost/mpl/map/aux_/tag.hpp>
+
+namespace boost {
+namespace mpl {
+
+template<>
+struct key_type_impl< aux::map_tag >
+{
+    template< typename Map, typename T > struct apply
+        : first<T>
+    {
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_MAP_AUX_KEY_TYPE_IMPL_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/map/aux_/map0.hpp b/3rdParty/Boost/src/boost/mpl/map/aux_/map0.hpp
new file mode 100644
index 0000000..9646cf8
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/map/aux_/map0.hpp
@@ -0,0 +1,74 @@
+
+#ifndef BOOST_MPL_MAP_AUX_MAP0_HPP_INCLUDED
+#define BOOST_MPL_MAP_AUX_MAP0_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: map0.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/long.hpp>
+#include <boost/mpl/void.hpp>
+#include <boost/mpl/map/aux_/tag.hpp>
+#include <boost/mpl/aux_/na.hpp>
+#include <boost/mpl/aux_/yes_no.hpp>
+#include <boost/mpl/aux_/overload_names.hpp>
+#include <boost/mpl/aux_/config/operators.hpp>
+
+#include <boost/preprocessor/cat.hpp>
+
+namespace boost { namespace mpl {
+
+#if defined(BOOST_MPL_CFG_USE_OPERATORS_OVERLOADING)
+
+#   define BOOST_MPL_AUX_MAP0_OVERLOAD(R, f, X, T) \
+    friend R BOOST_PP_CAT(BOOST_MPL_AUX_OVERLOAD_,f)(X const&, T) \
+/**/
+
+#   define BOOST_MPL_AUX_MAP_OVERLOAD(R, f, X, T) \
+    BOOST_MPL_AUX_MAP0_OVERLOAD(R, f, X, T) \
+/**/
+
+#else
+
+#   define BOOST_MPL_AUX_MAP0_OVERLOAD(R, f, X, T) \
+    static R BOOST_PP_CAT(BOOST_MPL_AUX_OVERLOAD_,f)(X const&, T) \
+/**/
+
+#   define BOOST_MPL_AUX_MAP_OVERLOAD(R, f, X, T) \
+    BOOST_MPL_AUX_MAP0_OVERLOAD(R, f, X, T); \
+    using Base::BOOST_PP_CAT(BOOST_MPL_AUX_OVERLOAD_,f) \
+/**/
+
+#endif
+
+
+template< typename Dummy = na > struct map0
+{
+    typedef map0            type;
+    typedef aux::map_tag    tag;
+    typedef void_           key_;
+    typedef long_<1>        order;
+    typedef long_<0>        size;
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+    BOOST_MPL_AUX_MAP0_OVERLOAD( aux::type_wrapper<void_>, VALUE_BY_KEY, map0<>, void const volatile* );
+    BOOST_MPL_AUX_MAP0_OVERLOAD( aux::type_wrapper<void_>, ITEM_BY_ORDER, map0<>, long_<1>* );
+    BOOST_MPL_AUX_MAP0_OVERLOAD( aux::no_tag, ORDER_BY_KEY, map0<>, void const volatile* );
+#else
+    BOOST_MPL_AUX_MAP0_OVERLOAD( aux::no_tag, ORDER_BY_KEY, map0<>, void const volatile* );
+    BOOST_MPL_AUX_MAP0_OVERLOAD( aux::no_tag, IS_MASKED, map0<>, void const volatile* );
+#endif
+};
+
+}}
+
+#endif // BOOST_MPL_MAP_AUX_MAP0_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/map/aux_/numbered.hpp b/3rdParty/Boost/src/boost/mpl/map/aux_/numbered.hpp
new file mode 100644
index 0000000..b092839
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/map/aux_/numbered.hpp
@@ -0,0 +1,110 @@
+
+// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: numbered.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#else
+
+#include <boost/mpl/aux_/config/typeof.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+#include <boost/preprocessor/enum_params.hpp>
+#include <boost/preprocessor/dec.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+#define i_ BOOST_PP_FRAME_ITERATION(1)
+
+#   define AUX778076_MAP_TAIL(map, i_, P) \
+    BOOST_PP_CAT(map,i_)< \
+          BOOST_PP_ENUM_PARAMS(i_, P) \
+        > \
+    /**/
+
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+
+template<
+      BOOST_PP_ENUM_PARAMS(i_, typename P)
+    >
+struct BOOST_PP_CAT(map,i_)
+    : m_item<
+          typename BOOST_PP_CAT(P,BOOST_PP_DEC(i_))::first
+        , typename BOOST_PP_CAT(P,BOOST_PP_DEC(i_))::second
+        , AUX778076_MAP_TAIL(map,BOOST_PP_DEC(i_),P)
+        >
+{
+    typedef BOOST_PP_CAT(map,i_) type;
+};
+
+#else // "brute force" implementation
+
+#   if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template< typename Map>
+struct m_at<Map,BOOST_PP_DEC(i_)>
+{
+    typedef typename Map::BOOST_PP_CAT(item,BOOST_PP_DEC(i_)) type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item<i_,Key,T,Base>
+    : m_item_<Key,T,Base>
+{
+    typedef pair<Key,T> BOOST_PP_CAT(item,BOOST_PP_DEC(i_));
+};
+
+#   else
+
+template<>
+struct m_at_impl<BOOST_PP_DEC(i_)>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::BOOST_PP_CAT(item,BOOST_PP_DEC(i_)) type;
+    };
+};
+
+template<>
+struct m_item_impl<i_>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_<Key,T,Base>
+    {
+        typedef pair<Key,T> BOOST_PP_CAT(item,BOOST_PP_DEC(i_));
+    };
+};
+
+#   endif
+
+template<
+      BOOST_PP_ENUM_PARAMS(i_, typename P)
+    >
+struct BOOST_PP_CAT(map,i_)
+    : m_item<
+          i_
+        , typename BOOST_PP_CAT(P,BOOST_PP_DEC(i_))::first
+        , typename BOOST_PP_CAT(P,BOOST_PP_DEC(i_))::second
+        , AUX778076_MAP_TAIL(map,BOOST_PP_DEC(i_),P)
+        >
+{
+    typedef BOOST_PP_CAT(map,i_) type;
+};
+
+#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES
+
+#   undef AUX778076_MAP_TAIL
+
+#undef i_
+
+#endif // BOOST_PP_IS_ITERATING
diff --git a/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/no_ctps/map10.hpp b/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/no_ctps/map10.hpp
new file mode 100644
index 0000000..626c456
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/no_ctps/map10.hpp
@@ -0,0 +1,350 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/map/map10.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<>
+struct m_at_impl<0>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item0 type;
+    };
+};
+
+template<>
+struct m_item_impl<1>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item0;
+    };
+};
+
+template<
+      typename P0
+    >
+struct map1
+    : m_item<
+          1
+        , typename P0::first
+        , typename P0::second
+        , map0<  >
+        >
+{
+    typedef map1 type;
+};
+
+template<>
+struct m_at_impl<1>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item1 type;
+    };
+};
+
+template<>
+struct m_item_impl<2>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item1;
+    };
+};
+
+template<
+      typename P0, typename P1
+    >
+struct map2
+    : m_item<
+          2
+        , typename P1::first
+        , typename P1::second
+        , map1<P0>
+        >
+{
+    typedef map2 type;
+};
+
+template<>
+struct m_at_impl<2>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item2 type;
+    };
+};
+
+template<>
+struct m_item_impl<3>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item2;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2
+    >
+struct map3
+    : m_item<
+          3
+        , typename P2::first
+        , typename P2::second
+        , map2< P0,P1 >
+        >
+{
+    typedef map3 type;
+};
+
+template<>
+struct m_at_impl<3>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item3 type;
+    };
+};
+
+template<>
+struct m_item_impl<4>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item3;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3
+    >
+struct map4
+    : m_item<
+          4
+        , typename P3::first
+        , typename P3::second
+        , map3< P0,P1,P2 >
+        >
+{
+    typedef map4 type;
+};
+
+template<>
+struct m_at_impl<4>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item4 type;
+    };
+};
+
+template<>
+struct m_item_impl<5>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item4;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    >
+struct map5
+    : m_item<
+          5
+        , typename P4::first
+        , typename P4::second
+        , map4< P0,P1,P2,P3 >
+        >
+{
+    typedef map5 type;
+};
+
+template<>
+struct m_at_impl<5>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item5 type;
+    };
+};
+
+template<>
+struct m_item_impl<6>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item5;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5
+    >
+struct map6
+    : m_item<
+          6
+        , typename P5::first
+        , typename P5::second
+        , map5< P0,P1,P2,P3,P4 >
+        >
+{
+    typedef map6 type;
+};
+
+template<>
+struct m_at_impl<6>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item6 type;
+    };
+};
+
+template<>
+struct m_item_impl<7>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item6;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6
+    >
+struct map7
+    : m_item<
+          7
+        , typename P6::first
+        , typename P6::second
+        , map6< P0,P1,P2,P3,P4,P5 >
+        >
+{
+    typedef map7 type;
+};
+
+template<>
+struct m_at_impl<7>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item7 type;
+    };
+};
+
+template<>
+struct m_item_impl<8>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item7;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7
+    >
+struct map8
+    : m_item<
+          8
+        , typename P7::first
+        , typename P7::second
+        , map7< P0,P1,P2,P3,P4,P5,P6 >
+        >
+{
+    typedef map8 type;
+};
+
+template<>
+struct m_at_impl<8>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item8 type;
+    };
+};
+
+template<>
+struct m_item_impl<9>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item8;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8
+    >
+struct map9
+    : m_item<
+          9
+        , typename P8::first
+        , typename P8::second
+        , map8< P0,P1,P2,P3,P4,P5,P6,P7 >
+        >
+{
+    typedef map9 type;
+};
+
+template<>
+struct m_at_impl<9>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item9 type;
+    };
+};
+
+template<>
+struct m_item_impl<10>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item9;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    >
+struct map10
+    : m_item<
+          10
+        , typename P9::first
+        , typename P9::second
+        , map9< P0,P1,P2,P3,P4,P5,P6,P7,P8 >
+        >
+{
+    typedef map10 type;
+};
+
+}}
diff --git a/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/no_ctps/map20.hpp b/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/no_ctps/map20.hpp
new file mode 100644
index 0000000..ac9e379
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/no_ctps/map20.hpp
@@ -0,0 +1,370 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/map/map20.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<>
+struct m_at_impl<10>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item10 type;
+    };
+};
+
+template<>
+struct m_item_impl<11>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item10;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10
+    >
+struct map11
+    : m_item<
+          11
+        , typename P10::first
+        , typename P10::second
+        , map10< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9 >
+        >
+{
+    typedef map11 type;
+};
+
+template<>
+struct m_at_impl<11>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item11 type;
+    };
+};
+
+template<>
+struct m_item_impl<12>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item11;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11
+    >
+struct map12
+    : m_item<
+          12
+        , typename P11::first
+        , typename P11::second
+        , map11< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10 >
+        >
+{
+    typedef map12 type;
+};
+
+template<>
+struct m_at_impl<12>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item12 type;
+    };
+};
+
+template<>
+struct m_item_impl<13>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item12;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12
+    >
+struct map13
+    : m_item<
+          13
+        , typename P12::first
+        , typename P12::second
+        , map12< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11 >
+        >
+{
+    typedef map13 type;
+};
+
+template<>
+struct m_at_impl<13>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item13 type;
+    };
+};
+
+template<>
+struct m_item_impl<14>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item13;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13
+    >
+struct map14
+    : m_item<
+          14
+        , typename P13::first
+        , typename P13::second
+        , map13< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12 >
+        >
+{
+    typedef map14 type;
+};
+
+template<>
+struct m_at_impl<14>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item14 type;
+    };
+};
+
+template<>
+struct m_item_impl<15>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item14;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    >
+struct map15
+    : m_item<
+          15
+        , typename P14::first
+        , typename P14::second
+        , map14< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13 >
+        >
+{
+    typedef map15 type;
+};
+
+template<>
+struct m_at_impl<15>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item15 type;
+    };
+};
+
+template<>
+struct m_item_impl<16>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item15;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15
+    >
+struct map16
+    : m_item<
+          16
+        , typename P15::first
+        , typename P15::second
+        , map15< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14 >
+        >
+{
+    typedef map16 type;
+};
+
+template<>
+struct m_at_impl<16>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item16 type;
+    };
+};
+
+template<>
+struct m_item_impl<17>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item16;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16
+    >
+struct map17
+    : m_item<
+          17
+        , typename P16::first
+        , typename P16::second
+        , map16< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15 >
+        >
+{
+    typedef map17 type;
+};
+
+template<>
+struct m_at_impl<17>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item17 type;
+    };
+};
+
+template<>
+struct m_item_impl<18>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item17;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17
+    >
+struct map18
+    : m_item<
+          18
+        , typename P17::first
+        , typename P17::second
+        , map17< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16 >
+        >
+{
+    typedef map18 type;
+};
+
+template<>
+struct m_at_impl<18>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item18 type;
+    };
+};
+
+template<>
+struct m_item_impl<19>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item18;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18
+    >
+struct map19
+    : m_item<
+          19
+        , typename P18::first
+        , typename P18::second
+        , map18< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17 >
+        >
+{
+    typedef map19 type;
+};
+
+template<>
+struct m_at_impl<19>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item19 type;
+    };
+};
+
+template<>
+struct m_item_impl<20>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item19;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    >
+struct map20
+    : m_item<
+          20
+        , typename P19::first
+        , typename P19::second
+        , map19< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18 >
+        >
+{
+    typedef map20 type;
+};
+
+}}
diff --git a/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/no_ctps/map30.hpp b/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/no_ctps/map30.hpp
new file mode 100644
index 0000000..5aa118f
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/no_ctps/map30.hpp
@@ -0,0 +1,390 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/map/map30.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<>
+struct m_at_impl<20>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item20 type;
+    };
+};
+
+template<>
+struct m_item_impl<21>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item20;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20
+    >
+struct map21
+    : m_item<
+          21
+        , typename P20::first
+        , typename P20::second
+        , map20< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19 >
+        >
+{
+    typedef map21 type;
+};
+
+template<>
+struct m_at_impl<21>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item21 type;
+    };
+};
+
+template<>
+struct m_item_impl<22>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item21;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21
+    >
+struct map22
+    : m_item<
+          22
+        , typename P21::first
+        , typename P21::second
+        , map21< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20 >
+        >
+{
+    typedef map22 type;
+};
+
+template<>
+struct m_at_impl<22>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item22 type;
+    };
+};
+
+template<>
+struct m_item_impl<23>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item22;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22
+    >
+struct map23
+    : m_item<
+          23
+        , typename P22::first
+        , typename P22::second
+        , map22< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21 >
+        >
+{
+    typedef map23 type;
+};
+
+template<>
+struct m_at_impl<23>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item23 type;
+    };
+};
+
+template<>
+struct m_item_impl<24>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item23;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23
+    >
+struct map24
+    : m_item<
+          24
+        , typename P23::first
+        , typename P23::second
+        , map23< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22 >
+        >
+{
+    typedef map24 type;
+};
+
+template<>
+struct m_at_impl<24>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item24 type;
+    };
+};
+
+template<>
+struct m_item_impl<25>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item24;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    >
+struct map25
+    : m_item<
+          25
+        , typename P24::first
+        , typename P24::second
+        , map24< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23 >
+        >
+{
+    typedef map25 type;
+};
+
+template<>
+struct m_at_impl<25>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item25 type;
+    };
+};
+
+template<>
+struct m_item_impl<26>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item25;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25
+    >
+struct map26
+    : m_item<
+          26
+        , typename P25::first
+        , typename P25::second
+        , map25< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24 >
+        >
+{
+    typedef map26 type;
+};
+
+template<>
+struct m_at_impl<26>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item26 type;
+    };
+};
+
+template<>
+struct m_item_impl<27>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item26;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26
+    >
+struct map27
+    : m_item<
+          27
+        , typename P26::first
+        , typename P26::second
+        , map26< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25 >
+        >
+{
+    typedef map27 type;
+};
+
+template<>
+struct m_at_impl<27>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item27 type;
+    };
+};
+
+template<>
+struct m_item_impl<28>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item27;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27
+    >
+struct map28
+    : m_item<
+          28
+        , typename P27::first
+        , typename P27::second
+        , map27< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26 >
+        >
+{
+    typedef map28 type;
+};
+
+template<>
+struct m_at_impl<28>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item28 type;
+    };
+};
+
+template<>
+struct m_item_impl<29>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item28;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28
+    >
+struct map29
+    : m_item<
+          29
+        , typename P28::first
+        , typename P28::second
+        , map28< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27 >
+        >
+{
+    typedef map29 type;
+};
+
+template<>
+struct m_at_impl<29>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item29 type;
+    };
+};
+
+template<>
+struct m_item_impl<30>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item29;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    >
+struct map30
+    : m_item<
+          30
+        , typename P29::first
+        , typename P29::second
+        , map29< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28 >
+        >
+{
+    typedef map30 type;
+};
+
+}}
diff --git a/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/no_ctps/map40.hpp b/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/no_ctps/map40.hpp
new file mode 100644
index 0000000..dca60d5
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/no_ctps/map40.hpp
@@ -0,0 +1,410 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/map/map40.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<>
+struct m_at_impl<30>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item30 type;
+    };
+};
+
+template<>
+struct m_item_impl<31>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item30;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30
+    >
+struct map31
+    : m_item<
+          31
+        , typename P30::first
+        , typename P30::second
+        , map30< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29 >
+        >
+{
+    typedef map31 type;
+};
+
+template<>
+struct m_at_impl<31>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item31 type;
+    };
+};
+
+template<>
+struct m_item_impl<32>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item31;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31
+    >
+struct map32
+    : m_item<
+          32
+        , typename P31::first
+        , typename P31::second
+        , map31< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30 >
+        >
+{
+    typedef map32 type;
+};
+
+template<>
+struct m_at_impl<32>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item32 type;
+    };
+};
+
+template<>
+struct m_item_impl<33>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item32;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32
+    >
+struct map33
+    : m_item<
+          33
+        , typename P32::first
+        , typename P32::second
+        , map32< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31 >
+        >
+{
+    typedef map33 type;
+};
+
+template<>
+struct m_at_impl<33>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item33 type;
+    };
+};
+
+template<>
+struct m_item_impl<34>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item33;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33
+    >
+struct map34
+    : m_item<
+          34
+        , typename P33::first
+        , typename P33::second
+        , map33< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32 >
+        >
+{
+    typedef map34 type;
+};
+
+template<>
+struct m_at_impl<34>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item34 type;
+    };
+};
+
+template<>
+struct m_item_impl<35>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item34;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    >
+struct map35
+    : m_item<
+          35
+        , typename P34::first
+        , typename P34::second
+        , map34< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33 >
+        >
+{
+    typedef map35 type;
+};
+
+template<>
+struct m_at_impl<35>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item35 type;
+    };
+};
+
+template<>
+struct m_item_impl<36>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item35;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35
+    >
+struct map36
+    : m_item<
+          36
+        , typename P35::first
+        , typename P35::second
+        , map35< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34 >
+        >
+{
+    typedef map36 type;
+};
+
+template<>
+struct m_at_impl<36>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item36 type;
+    };
+};
+
+template<>
+struct m_item_impl<37>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item36;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35, typename P36
+    >
+struct map37
+    : m_item<
+          37
+        , typename P36::first
+        , typename P36::second
+        , map36< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35 >
+        >
+{
+    typedef map37 type;
+};
+
+template<>
+struct m_at_impl<37>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item37 type;
+    };
+};
+
+template<>
+struct m_item_impl<38>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item37;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35, typename P36, typename P37
+    >
+struct map38
+    : m_item<
+          38
+        , typename P37::first
+        , typename P37::second
+        , map37< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36 >
+        >
+{
+    typedef map38 type;
+};
+
+template<>
+struct m_at_impl<38>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item38 type;
+    };
+};
+
+template<>
+struct m_item_impl<39>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item38;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35, typename P36, typename P37, typename P38
+    >
+struct map39
+    : m_item<
+          39
+        , typename P38::first
+        , typename P38::second
+        , map38< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37 >
+        >
+{
+    typedef map39 type;
+};
+
+template<>
+struct m_at_impl<39>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item39 type;
+    };
+};
+
+template<>
+struct m_item_impl<40>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item39;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35, typename P36, typename P37, typename P38, typename P39
+    >
+struct map40
+    : m_item<
+          40
+        , typename P39::first
+        , typename P39::second
+        , map39< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38 >
+        >
+{
+    typedef map40 type;
+};
+
+}}
diff --git a/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/no_ctps/map50.hpp b/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/no_ctps/map50.hpp
new file mode 100644
index 0000000..cd81908
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/no_ctps/map50.hpp
@@ -0,0 +1,430 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/map/map50.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<>
+struct m_at_impl<40>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item40 type;
+    };
+};
+
+template<>
+struct m_item_impl<41>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item40;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35, typename P36, typename P37, typename P38, typename P39
+    , typename P40
+    >
+struct map41
+    : m_item<
+          41
+        , typename P40::first
+        , typename P40::second
+        , map40< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39 >
+        >
+{
+    typedef map41 type;
+};
+
+template<>
+struct m_at_impl<41>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item41 type;
+    };
+};
+
+template<>
+struct m_item_impl<42>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item41;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35, typename P36, typename P37, typename P38, typename P39
+    , typename P40, typename P41
+    >
+struct map42
+    : m_item<
+          42
+        , typename P41::first
+        , typename P41::second
+        , map41< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40 >
+        >
+{
+    typedef map42 type;
+};
+
+template<>
+struct m_at_impl<42>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item42 type;
+    };
+};
+
+template<>
+struct m_item_impl<43>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item42;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35, typename P36, typename P37, typename P38, typename P39
+    , typename P40, typename P41, typename P42
+    >
+struct map43
+    : m_item<
+          43
+        , typename P42::first
+        , typename P42::second
+        , map42< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41 >
+        >
+{
+    typedef map43 type;
+};
+
+template<>
+struct m_at_impl<43>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item43 type;
+    };
+};
+
+template<>
+struct m_item_impl<44>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item43;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35, typename P36, typename P37, typename P38, typename P39
+    , typename P40, typename P41, typename P42, typename P43
+    >
+struct map44
+    : m_item<
+          44
+        , typename P43::first
+        , typename P43::second
+        , map43< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42 >
+        >
+{
+    typedef map44 type;
+};
+
+template<>
+struct m_at_impl<44>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item44 type;
+    };
+};
+
+template<>
+struct m_item_impl<45>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item44;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35, typename P36, typename P37, typename P38, typename P39
+    , typename P40, typename P41, typename P42, typename P43, typename P44
+    >
+struct map45
+    : m_item<
+          45
+        , typename P44::first
+        , typename P44::second
+        , map44< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43 >
+        >
+{
+    typedef map45 type;
+};
+
+template<>
+struct m_at_impl<45>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item45 type;
+    };
+};
+
+template<>
+struct m_item_impl<46>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item45;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35, typename P36, typename P37, typename P38, typename P39
+    , typename P40, typename P41, typename P42, typename P43, typename P44
+    , typename P45
+    >
+struct map46
+    : m_item<
+          46
+        , typename P45::first
+        , typename P45::second
+        , map45< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44 >
+        >
+{
+    typedef map46 type;
+};
+
+template<>
+struct m_at_impl<46>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item46 type;
+    };
+};
+
+template<>
+struct m_item_impl<47>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item46;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35, typename P36, typename P37, typename P38, typename P39
+    , typename P40, typename P41, typename P42, typename P43, typename P44
+    , typename P45, typename P46
+    >
+struct map47
+    : m_item<
+          47
+        , typename P46::first
+        , typename P46::second
+        , map46< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44,P45 >
+        >
+{
+    typedef map47 type;
+};
+
+template<>
+struct m_at_impl<47>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item47 type;
+    };
+};
+
+template<>
+struct m_item_impl<48>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item47;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35, typename P36, typename P37, typename P38, typename P39
+    , typename P40, typename P41, typename P42, typename P43, typename P44
+    , typename P45, typename P46, typename P47
+    >
+struct map48
+    : m_item<
+          48
+        , typename P47::first
+        , typename P47::second
+        , map47< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44,P45,P46 >
+        >
+{
+    typedef map48 type;
+};
+
+template<>
+struct m_at_impl<48>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item48 type;
+    };
+};
+
+template<>
+struct m_item_impl<49>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item48;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35, typename P36, typename P37, typename P38, typename P39
+    , typename P40, typename P41, typename P42, typename P43, typename P44
+    , typename P45, typename P46, typename P47, typename P48
+    >
+struct map49
+    : m_item<
+          49
+        , typename P48::first
+        , typename P48::second
+        , map48< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44,P45,P46,P47 >
+        >
+{
+    typedef map49 type;
+};
+
+template<>
+struct m_at_impl<49>
+{
+    template< typename Map > struct result_
+    {
+        typedef typename Map::item49 type;
+    };
+};
+
+template<>
+struct m_item_impl<50>
+{
+    template< typename Key, typename T, typename Base > struct result_
+        : m_item_< Key,T,Base >
+    {
+        typedef pair< Key,T > item49;
+    };
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35, typename P36, typename P37, typename P38, typename P39
+    , typename P40, typename P41, typename P42, typename P43, typename P44
+    , typename P45, typename P46, typename P47, typename P48, typename P49
+    >
+struct map50
+    : m_item<
+          50
+        , typename P49::first
+        , typename P49::second
+        , map49< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44,P45,P46,P47,P48 >
+        >
+{
+    typedef map50 type;
+};
+
+}}
diff --git a/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/plain/map10.hpp b/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/plain/map10.hpp
new file mode 100644
index 0000000..ce0d2fb
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/plain/map10.hpp
@@ -0,0 +1,290 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/map/map10.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template< typename Map>
+struct m_at< Map,0 >
+{
+    typedef typename Map::item0 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 1,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item0;
+};
+
+template<
+      typename P0
+    >
+struct map1
+    : m_item<
+          1
+        , typename P0::first
+        , typename P0::second
+        , map0<  >
+        >
+{
+    typedef map1 type;
+};
+
+template< typename Map>
+struct m_at< Map,1 >
+{
+    typedef typename Map::item1 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 2,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item1;
+};
+
+template<
+      typename P0, typename P1
+    >
+struct map2
+    : m_item<
+          2
+        , typename P1::first
+        , typename P1::second
+        , map1<P0>
+        >
+{
+    typedef map2 type;
+};
+
+template< typename Map>
+struct m_at< Map,2 >
+{
+    typedef typename Map::item2 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 3,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item2;
+};
+
+template<
+      typename P0, typename P1, typename P2
+    >
+struct map3
+    : m_item<
+          3
+        , typename P2::first
+        , typename P2::second
+        , map2< P0,P1 >
+        >
+{
+    typedef map3 type;
+};
+
+template< typename Map>
+struct m_at< Map,3 >
+{
+    typedef typename Map::item3 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 4,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item3;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3
+    >
+struct map4
+    : m_item<
+          4
+        , typename P3::first
+        , typename P3::second
+        , map3< P0,P1,P2 >
+        >
+{
+    typedef map4 type;
+};
+
+template< typename Map>
+struct m_at< Map,4 >
+{
+    typedef typename Map::item4 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 5,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item4;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    >
+struct map5
+    : m_item<
+          5
+        , typename P4::first
+        , typename P4::second
+        , map4< P0,P1,P2,P3 >
+        >
+{
+    typedef map5 type;
+};
+
+template< typename Map>
+struct m_at< Map,5 >
+{
+    typedef typename Map::item5 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 6,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item5;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5
+    >
+struct map6
+    : m_item<
+          6
+        , typename P5::first
+        , typename P5::second
+        , map5< P0,P1,P2,P3,P4 >
+        >
+{
+    typedef map6 type;
+};
+
+template< typename Map>
+struct m_at< Map,6 >
+{
+    typedef typename Map::item6 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 7,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item6;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6
+    >
+struct map7
+    : m_item<
+          7
+        , typename P6::first
+        , typename P6::second
+        , map6< P0,P1,P2,P3,P4,P5 >
+        >
+{
+    typedef map7 type;
+};
+
+template< typename Map>
+struct m_at< Map,7 >
+{
+    typedef typename Map::item7 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 8,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item7;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7
+    >
+struct map8
+    : m_item<
+          8
+        , typename P7::first
+        , typename P7::second
+        , map7< P0,P1,P2,P3,P4,P5,P6 >
+        >
+{
+    typedef map8 type;
+};
+
+template< typename Map>
+struct m_at< Map,8 >
+{
+    typedef typename Map::item8 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 9,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item8;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8
+    >
+struct map9
+    : m_item<
+          9
+        , typename P8::first
+        , typename P8::second
+        , map8< P0,P1,P2,P3,P4,P5,P6,P7 >
+        >
+{
+    typedef map9 type;
+};
+
+template< typename Map>
+struct m_at< Map,9 >
+{
+    typedef typename Map::item9 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 10,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item9;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    >
+struct map10
+    : m_item<
+          10
+        , typename P9::first
+        , typename P9::second
+        , map9< P0,P1,P2,P3,P4,P5,P6,P7,P8 >
+        >
+{
+    typedef map10 type;
+};
+
+}}
diff --git a/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/plain/map20.hpp b/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/plain/map20.hpp
new file mode 100644
index 0000000..e0a147c
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/plain/map20.hpp
@@ -0,0 +1,310 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/map/map20.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template< typename Map>
+struct m_at< Map,10 >
+{
+    typedef typename Map::item10 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 11,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item10;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10
+    >
+struct map11
+    : m_item<
+          11
+        , typename P10::first
+        , typename P10::second
+        , map10< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9 >
+        >
+{
+    typedef map11 type;
+};
+
+template< typename Map>
+struct m_at< Map,11 >
+{
+    typedef typename Map::item11 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 12,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item11;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11
+    >
+struct map12
+    : m_item<
+          12
+        , typename P11::first
+        , typename P11::second
+        , map11< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10 >
+        >
+{
+    typedef map12 type;
+};
+
+template< typename Map>
+struct m_at< Map,12 >
+{
+    typedef typename Map::item12 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 13,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item12;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12
+    >
+struct map13
+    : m_item<
+          13
+        , typename P12::first
+        , typename P12::second
+        , map12< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11 >
+        >
+{
+    typedef map13 type;
+};
+
+template< typename Map>
+struct m_at< Map,13 >
+{
+    typedef typename Map::item13 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 14,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item13;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13
+    >
+struct map14
+    : m_item<
+          14
+        , typename P13::first
+        , typename P13::second
+        , map13< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12 >
+        >
+{
+    typedef map14 type;
+};
+
+template< typename Map>
+struct m_at< Map,14 >
+{
+    typedef typename Map::item14 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 15,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item14;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    >
+struct map15
+    : m_item<
+          15
+        , typename P14::first
+        , typename P14::second
+        , map14< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13 >
+        >
+{
+    typedef map15 type;
+};
+
+template< typename Map>
+struct m_at< Map,15 >
+{
+    typedef typename Map::item15 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 16,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item15;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15
+    >
+struct map16
+    : m_item<
+          16
+        , typename P15::first
+        , typename P15::second
+        , map15< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14 >
+        >
+{
+    typedef map16 type;
+};
+
+template< typename Map>
+struct m_at< Map,16 >
+{
+    typedef typename Map::item16 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 17,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item16;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16
+    >
+struct map17
+    : m_item<
+          17
+        , typename P16::first
+        , typename P16::second
+        , map16< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15 >
+        >
+{
+    typedef map17 type;
+};
+
+template< typename Map>
+struct m_at< Map,17 >
+{
+    typedef typename Map::item17 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 18,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item17;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17
+    >
+struct map18
+    : m_item<
+          18
+        , typename P17::first
+        , typename P17::second
+        , map17< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16 >
+        >
+{
+    typedef map18 type;
+};
+
+template< typename Map>
+struct m_at< Map,18 >
+{
+    typedef typename Map::item18 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 19,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item18;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18
+    >
+struct map19
+    : m_item<
+          19
+        , typename P18::first
+        , typename P18::second
+        , map18< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17 >
+        >
+{
+    typedef map19 type;
+};
+
+template< typename Map>
+struct m_at< Map,19 >
+{
+    typedef typename Map::item19 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 20,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item19;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    >
+struct map20
+    : m_item<
+          20
+        , typename P19::first
+        , typename P19::second
+        , map19< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18 >
+        >
+{
+    typedef map20 type;
+};
+
+}}
diff --git a/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/plain/map30.hpp b/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/plain/map30.hpp
new file mode 100644
index 0000000..d2f2e17
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/plain/map30.hpp
@@ -0,0 +1,330 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/map/map30.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template< typename Map>
+struct m_at< Map,20 >
+{
+    typedef typename Map::item20 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 21,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item20;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20
+    >
+struct map21
+    : m_item<
+          21
+        , typename P20::first
+        , typename P20::second
+        , map20< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19 >
+        >
+{
+    typedef map21 type;
+};
+
+template< typename Map>
+struct m_at< Map,21 >
+{
+    typedef typename Map::item21 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 22,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item21;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21
+    >
+struct map22
+    : m_item<
+          22
+        , typename P21::first
+        , typename P21::second
+        , map21< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20 >
+        >
+{
+    typedef map22 type;
+};
+
+template< typename Map>
+struct m_at< Map,22 >
+{
+    typedef typename Map::item22 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 23,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item22;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22
+    >
+struct map23
+    : m_item<
+          23
+        , typename P22::first
+        , typename P22::second
+        , map22< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21 >
+        >
+{
+    typedef map23 type;
+};
+
+template< typename Map>
+struct m_at< Map,23 >
+{
+    typedef typename Map::item23 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 24,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item23;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23
+    >
+struct map24
+    : m_item<
+          24
+        , typename P23::first
+        , typename P23::second
+        , map23< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22 >
+        >
+{
+    typedef map24 type;
+};
+
+template< typename Map>
+struct m_at< Map,24 >
+{
+    typedef typename Map::item24 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 25,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item24;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    >
+struct map25
+    : m_item<
+          25
+        , typename P24::first
+        , typename P24::second
+        , map24< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23 >
+        >
+{
+    typedef map25 type;
+};
+
+template< typename Map>
+struct m_at< Map,25 >
+{
+    typedef typename Map::item25 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 26,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item25;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25
+    >
+struct map26
+    : m_item<
+          26
+        , typename P25::first
+        , typename P25::second
+        , map25< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24 >
+        >
+{
+    typedef map26 type;
+};
+
+template< typename Map>
+struct m_at< Map,26 >
+{
+    typedef typename Map::item26 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 27,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item26;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26
+    >
+struct map27
+    : m_item<
+          27
+        , typename P26::first
+        , typename P26::second
+        , map26< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25 >
+        >
+{
+    typedef map27 type;
+};
+
+template< typename Map>
+struct m_at< Map,27 >
+{
+    typedef typename Map::item27 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 28,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item27;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27
+    >
+struct map28
+    : m_item<
+          28
+        , typename P27::first
+        , typename P27::second
+        , map27< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26 >
+        >
+{
+    typedef map28 type;
+};
+
+template< typename Map>
+struct m_at< Map,28 >
+{
+    typedef typename Map::item28 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 29,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item28;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28
+    >
+struct map29
+    : m_item<
+          29
+        , typename P28::first
+        , typename P28::second
+        , map28< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27 >
+        >
+{
+    typedef map29 type;
+};
+
+template< typename Map>
+struct m_at< Map,29 >
+{
+    typedef typename Map::item29 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 30,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item29;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    >
+struct map30
+    : m_item<
+          30
+        , typename P29::first
+        , typename P29::second
+        , map29< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28 >
+        >
+{
+    typedef map30 type;
+};
+
+}}
diff --git a/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/plain/map40.hpp b/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/plain/map40.hpp
new file mode 100644
index 0000000..692f014
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/plain/map40.hpp
@@ -0,0 +1,350 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/map/map40.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template< typename Map>
+struct m_at< Map,30 >
+{
+    typedef typename Map::item30 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 31,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item30;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30
+    >
+struct map31
+    : m_item<
+          31
+        , typename P30::first
+        , typename P30::second
+        , map30< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29 >
+        >
+{
+    typedef map31 type;
+};
+
+template< typename Map>
+struct m_at< Map,31 >
+{
+    typedef typename Map::item31 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 32,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item31;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31
+    >
+struct map32
+    : m_item<
+          32
+        , typename P31::first
+        , typename P31::second
+        , map31< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30 >
+        >
+{
+    typedef map32 type;
+};
+
+template< typename Map>
+struct m_at< Map,32 >
+{
+    typedef typename Map::item32 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 33,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item32;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32
+    >
+struct map33
+    : m_item<
+          33
+        , typename P32::first
+        , typename P32::second
+        , map32< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31 >
+        >
+{
+    typedef map33 type;
+};
+
+template< typename Map>
+struct m_at< Map,33 >
+{
+    typedef typename Map::item33 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 34,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item33;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33
+    >
+struct map34
+    : m_item<
+          34
+        , typename P33::first
+        , typename P33::second
+        , map33< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32 >
+        >
+{
+    typedef map34 type;
+};
+
+template< typename Map>
+struct m_at< Map,34 >
+{
+    typedef typename Map::item34 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 35,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item34;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    >
+struct map35
+    : m_item<
+          35
+        , typename P34::first
+        , typename P34::second
+        , map34< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33 >
+        >
+{
+    typedef map35 type;
+};
+
+template< typename Map>
+struct m_at< Map,35 >
+{
+    typedef typename Map::item35 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 36,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item35;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35
+    >
+struct map36
+    : m_item<
+          36
+        , typename P35::first
+        , typename P35::second
+        , map35< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34 >
+        >
+{
+    typedef map36 type;
+};
+
+template< typename Map>
+struct m_at< Map,36 >
+{
+    typedef typename Map::item36 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 37,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item36;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35, typename P36
+    >
+struct map37
+    : m_item<
+          37
+        , typename P36::first
+        , typename P36::second
+        , map36< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35 >
+        >
+{
+    typedef map37 type;
+};
+
+template< typename Map>
+struct m_at< Map,37 >
+{
+    typedef typename Map::item37 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 38,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item37;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35, typename P36, typename P37
+    >
+struct map38
+    : m_item<
+          38
+        , typename P37::first
+        , typename P37::second
+        , map37< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36 >
+        >
+{
+    typedef map38 type;
+};
+
+template< typename Map>
+struct m_at< Map,38 >
+{
+    typedef typename Map::item38 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 39,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item38;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35, typename P36, typename P37, typename P38
+    >
+struct map39
+    : m_item<
+          39
+        , typename P38::first
+        , typename P38::second
+        , map38< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37 >
+        >
+{
+    typedef map39 type;
+};
+
+template< typename Map>
+struct m_at< Map,39 >
+{
+    typedef typename Map::item39 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 40,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item39;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35, typename P36, typename P37, typename P38, typename P39
+    >
+struct map40
+    : m_item<
+          40
+        , typename P39::first
+        , typename P39::second
+        , map39< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38 >
+        >
+{
+    typedef map40 type;
+};
+
+}}
diff --git a/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/plain/map50.hpp b/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/plain/map50.hpp
new file mode 100644
index 0000000..3bd2a25
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/plain/map50.hpp
@@ -0,0 +1,370 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/map/map50.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template< typename Map>
+struct m_at< Map,40 >
+{
+    typedef typename Map::item40 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 41,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item40;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35, typename P36, typename P37, typename P38, typename P39
+    , typename P40
+    >
+struct map41
+    : m_item<
+          41
+        , typename P40::first
+        , typename P40::second
+        , map40< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39 >
+        >
+{
+    typedef map41 type;
+};
+
+template< typename Map>
+struct m_at< Map,41 >
+{
+    typedef typename Map::item41 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 42,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item41;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35, typename P36, typename P37, typename P38, typename P39
+    , typename P40, typename P41
+    >
+struct map42
+    : m_item<
+          42
+        , typename P41::first
+        , typename P41::second
+        , map41< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40 >
+        >
+{
+    typedef map42 type;
+};
+
+template< typename Map>
+struct m_at< Map,42 >
+{
+    typedef typename Map::item42 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 43,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item42;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35, typename P36, typename P37, typename P38, typename P39
+    , typename P40, typename P41, typename P42
+    >
+struct map43
+    : m_item<
+          43
+        , typename P42::first
+        , typename P42::second
+        , map42< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41 >
+        >
+{
+    typedef map43 type;
+};
+
+template< typename Map>
+struct m_at< Map,43 >
+{
+    typedef typename Map::item43 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 44,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item43;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35, typename P36, typename P37, typename P38, typename P39
+    , typename P40, typename P41, typename P42, typename P43
+    >
+struct map44
+    : m_item<
+          44
+        , typename P43::first
+        , typename P43::second
+        , map43< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42 >
+        >
+{
+    typedef map44 type;
+};
+
+template< typename Map>
+struct m_at< Map,44 >
+{
+    typedef typename Map::item44 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 45,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item44;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35, typename P36, typename P37, typename P38, typename P39
+    , typename P40, typename P41, typename P42, typename P43, typename P44
+    >
+struct map45
+    : m_item<
+          45
+        , typename P44::first
+        , typename P44::second
+        , map44< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43 >
+        >
+{
+    typedef map45 type;
+};
+
+template< typename Map>
+struct m_at< Map,45 >
+{
+    typedef typename Map::item45 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 46,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item45;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35, typename P36, typename P37, typename P38, typename P39
+    , typename P40, typename P41, typename P42, typename P43, typename P44
+    , typename P45
+    >
+struct map46
+    : m_item<
+          46
+        , typename P45::first
+        , typename P45::second
+        , map45< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44 >
+        >
+{
+    typedef map46 type;
+};
+
+template< typename Map>
+struct m_at< Map,46 >
+{
+    typedef typename Map::item46 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 47,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item46;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35, typename P36, typename P37, typename P38, typename P39
+    , typename P40, typename P41, typename P42, typename P43, typename P44
+    , typename P45, typename P46
+    >
+struct map47
+    : m_item<
+          47
+        , typename P46::first
+        , typename P46::second
+        , map46< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44,P45 >
+        >
+{
+    typedef map47 type;
+};
+
+template< typename Map>
+struct m_at< Map,47 >
+{
+    typedef typename Map::item47 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 48,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item47;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35, typename P36, typename P37, typename P38, typename P39
+    , typename P40, typename P41, typename P42, typename P43, typename P44
+    , typename P45, typename P46, typename P47
+    >
+struct map48
+    : m_item<
+          48
+        , typename P47::first
+        , typename P47::second
+        , map47< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44,P45,P46 >
+        >
+{
+    typedef map48 type;
+};
+
+template< typename Map>
+struct m_at< Map,48 >
+{
+    typedef typename Map::item48 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 49,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item48;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35, typename P36, typename P37, typename P38, typename P39
+    , typename P40, typename P41, typename P42, typename P43, typename P44
+    , typename P45, typename P46, typename P47, typename P48
+    >
+struct map49
+    : m_item<
+          49
+        , typename P48::first
+        , typename P48::second
+        , map48< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44,P45,P46,P47 >
+        >
+{
+    typedef map49 type;
+};
+
+template< typename Map>
+struct m_at< Map,49 >
+{
+    typedef typename Map::item49 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 50,Key,T,Base >
+    : m_item_< Key,T,Base >
+{
+    typedef pair< Key,T > item49;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35, typename P36, typename P37, typename P38, typename P39
+    , typename P40, typename P41, typename P42, typename P43, typename P44
+    , typename P45, typename P46, typename P47, typename P48, typename P49
+    >
+struct map50
+    : m_item<
+          50
+        , typename P49::first
+        , typename P49::second
+        , map49< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44,P45,P46,P47,P48 >
+        >
+{
+    typedef map50 type;
+};
+
+}}
diff --git a/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/typeof_based/map10.hpp b/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/typeof_based/map10.hpp
new file mode 100644
index 0000000..e48e991
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/typeof_based/map10.hpp
@@ -0,0 +1,150 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/map/map10.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+      typename P0
+    >
+struct map1
+    : m_item<
+          typename P0::first
+        , typename P0::second
+        , map0<  >
+        >
+{
+    typedef map1 type;
+};
+
+template<
+      typename P0, typename P1
+    >
+struct map2
+    : m_item<
+          typename P1::first
+        , typename P1::second
+        , map1<P0>
+        >
+{
+    typedef map2 type;
+};
+
+template<
+      typename P0, typename P1, typename P2
+    >
+struct map3
+    : m_item<
+          typename P2::first
+        , typename P2::second
+        , map2< P0,P1 >
+        >
+{
+    typedef map3 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3
+    >
+struct map4
+    : m_item<
+          typename P3::first
+        , typename P3::second
+        , map3< P0,P1,P2 >
+        >
+{
+    typedef map4 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    >
+struct map5
+    : m_item<
+          typename P4::first
+        , typename P4::second
+        , map4< P0,P1,P2,P3 >
+        >
+{
+    typedef map5 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5
+    >
+struct map6
+    : m_item<
+          typename P5::first
+        , typename P5::second
+        , map5< P0,P1,P2,P3,P4 >
+        >
+{
+    typedef map6 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6
+    >
+struct map7
+    : m_item<
+          typename P6::first
+        , typename P6::second
+        , map6< P0,P1,P2,P3,P4,P5 >
+        >
+{
+    typedef map7 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7
+    >
+struct map8
+    : m_item<
+          typename P7::first
+        , typename P7::second
+        , map7< P0,P1,P2,P3,P4,P5,P6 >
+        >
+{
+    typedef map8 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8
+    >
+struct map9
+    : m_item<
+          typename P8::first
+        , typename P8::second
+        , map8< P0,P1,P2,P3,P4,P5,P6,P7 >
+        >
+{
+    typedef map9 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    >
+struct map10
+    : m_item<
+          typename P9::first
+        , typename P9::second
+        , map9< P0,P1,P2,P3,P4,P5,P6,P7,P8 >
+        >
+{
+    typedef map10 type;
+};
+
+}}
diff --git a/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/typeof_based/map20.hpp b/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/typeof_based/map20.hpp
new file mode 100644
index 0000000..bb8d388
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/typeof_based/map20.hpp
@@ -0,0 +1,170 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/map/map20.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10
+    >
+struct map11
+    : m_item<
+          typename P10::first
+        , typename P10::second
+        , map10< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9 >
+        >
+{
+    typedef map11 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11
+    >
+struct map12
+    : m_item<
+          typename P11::first
+        , typename P11::second
+        , map11< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10 >
+        >
+{
+    typedef map12 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12
+    >
+struct map13
+    : m_item<
+          typename P12::first
+        , typename P12::second
+        , map12< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11 >
+        >
+{
+    typedef map13 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13
+    >
+struct map14
+    : m_item<
+          typename P13::first
+        , typename P13::second
+        , map13< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12 >
+        >
+{
+    typedef map14 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    >
+struct map15
+    : m_item<
+          typename P14::first
+        , typename P14::second
+        , map14< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13 >
+        >
+{
+    typedef map15 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15
+    >
+struct map16
+    : m_item<
+          typename P15::first
+        , typename P15::second
+        , map15< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14 >
+        >
+{
+    typedef map16 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16
+    >
+struct map17
+    : m_item<
+          typename P16::first
+        , typename P16::second
+        , map16< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15 >
+        >
+{
+    typedef map17 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17
+    >
+struct map18
+    : m_item<
+          typename P17::first
+        , typename P17::second
+        , map17< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16 >
+        >
+{
+    typedef map18 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18
+    >
+struct map19
+    : m_item<
+          typename P18::first
+        , typename P18::second
+        , map18< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17 >
+        >
+{
+    typedef map19 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    >
+struct map20
+    : m_item<
+          typename P19::first
+        , typename P19::second
+        , map19< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18 >
+        >
+{
+    typedef map20 type;
+};
+
+}}
diff --git a/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/typeof_based/map30.hpp b/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/typeof_based/map30.hpp
new file mode 100644
index 0000000..6a45c0d
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/typeof_based/map30.hpp
@@ -0,0 +1,190 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/map/map30.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20
+    >
+struct map21
+    : m_item<
+          typename P20::first
+        , typename P20::second
+        , map20< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19 >
+        >
+{
+    typedef map21 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21
+    >
+struct map22
+    : m_item<
+          typename P21::first
+        , typename P21::second
+        , map21< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20 >
+        >
+{
+    typedef map22 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22
+    >
+struct map23
+    : m_item<
+          typename P22::first
+        , typename P22::second
+        , map22< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21 >
+        >
+{
+    typedef map23 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23
+    >
+struct map24
+    : m_item<
+          typename P23::first
+        , typename P23::second
+        , map23< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22 >
+        >
+{
+    typedef map24 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    >
+struct map25
+    : m_item<
+          typename P24::first
+        , typename P24::second
+        , map24< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23 >
+        >
+{
+    typedef map25 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25
+    >
+struct map26
+    : m_item<
+          typename P25::first
+        , typename P25::second
+        , map25< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24 >
+        >
+{
+    typedef map26 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26
+    >
+struct map27
+    : m_item<
+          typename P26::first
+        , typename P26::second
+        , map26< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25 >
+        >
+{
+    typedef map27 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27
+    >
+struct map28
+    : m_item<
+          typename P27::first
+        , typename P27::second
+        , map27< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26 >
+        >
+{
+    typedef map28 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28
+    >
+struct map29
+    : m_item<
+          typename P28::first
+        , typename P28::second
+        , map28< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27 >
+        >
+{
+    typedef map29 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    >
+struct map30
+    : m_item<
+          typename P29::first
+        , typename P29::second
+        , map29< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28 >
+        >
+{
+    typedef map30 type;
+};
+
+}}
diff --git a/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/typeof_based/map40.hpp b/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/typeof_based/map40.hpp
new file mode 100644
index 0000000..6fc4f4b
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/typeof_based/map40.hpp
@@ -0,0 +1,210 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/map/map40.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30
+    >
+struct map31
+    : m_item<
+          typename P30::first
+        , typename P30::second
+        , map30< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29 >
+        >
+{
+    typedef map31 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31
+    >
+struct map32
+    : m_item<
+          typename P31::first
+        , typename P31::second
+        , map31< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30 >
+        >
+{
+    typedef map32 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32
+    >
+struct map33
+    : m_item<
+          typename P32::first
+        , typename P32::second
+        , map32< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31 >
+        >
+{
+    typedef map33 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33
+    >
+struct map34
+    : m_item<
+          typename P33::first
+        , typename P33::second
+        , map33< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32 >
+        >
+{
+    typedef map34 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    >
+struct map35
+    : m_item<
+          typename P34::first
+        , typename P34::second
+        , map34< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33 >
+        >
+{
+    typedef map35 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35
+    >
+struct map36
+    : m_item<
+          typename P35::first
+        , typename P35::second
+        , map35< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34 >
+        >
+{
+    typedef map36 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35, typename P36
+    >
+struct map37
+    : m_item<
+          typename P36::first
+        , typename P36::second
+        , map36< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35 >
+        >
+{
+    typedef map37 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35, typename P36, typename P37
+    >
+struct map38
+    : m_item<
+          typename P37::first
+        , typename P37::second
+        , map37< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36 >
+        >
+{
+    typedef map38 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35, typename P36, typename P37, typename P38
+    >
+struct map39
+    : m_item<
+          typename P38::first
+        , typename P38::second
+        , map38< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37 >
+        >
+{
+    typedef map39 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35, typename P36, typename P37, typename P38, typename P39
+    >
+struct map40
+    : m_item<
+          typename P39::first
+        , typename P39::second
+        , map39< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38 >
+        >
+{
+    typedef map40 type;
+};
+
+}}
diff --git a/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/typeof_based/map50.hpp b/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/typeof_based/map50.hpp
new file mode 100644
index 0000000..7b3980d
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/map/aux_/preprocessed/typeof_based/map50.hpp
@@ -0,0 +1,230 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/map/map50.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35, typename P36, typename P37, typename P38, typename P39
+    , typename P40
+    >
+struct map41
+    : m_item<
+          typename P40::first
+        , typename P40::second
+        , map40< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39 >
+        >
+{
+    typedef map41 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35, typename P36, typename P37, typename P38, typename P39
+    , typename P40, typename P41
+    >
+struct map42
+    : m_item<
+          typename P41::first
+        , typename P41::second
+        , map41< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40 >
+        >
+{
+    typedef map42 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35, typename P36, typename P37, typename P38, typename P39
+    , typename P40, typename P41, typename P42
+    >
+struct map43
+    : m_item<
+          typename P42::first
+        , typename P42::second
+        , map42< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41 >
+        >
+{
+    typedef map43 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35, typename P36, typename P37, typename P38, typename P39
+    , typename P40, typename P41, typename P42, typename P43
+    >
+struct map44
+    : m_item<
+          typename P43::first
+        , typename P43::second
+        , map43< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42 >
+        >
+{
+    typedef map44 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35, typename P36, typename P37, typename P38, typename P39
+    , typename P40, typename P41, typename P42, typename P43, typename P44
+    >
+struct map45
+    : m_item<
+          typename P44::first
+        , typename P44::second
+        , map44< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43 >
+        >
+{
+    typedef map45 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35, typename P36, typename P37, typename P38, typename P39
+    , typename P40, typename P41, typename P42, typename P43, typename P44
+    , typename P45
+    >
+struct map46
+    : m_item<
+          typename P45::first
+        , typename P45::second
+        , map45< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44 >
+        >
+{
+    typedef map46 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35, typename P36, typename P37, typename P38, typename P39
+    , typename P40, typename P41, typename P42, typename P43, typename P44
+    , typename P45, typename P46
+    >
+struct map47
+    : m_item<
+          typename P46::first
+        , typename P46::second
+        , map46< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44,P45 >
+        >
+{
+    typedef map47 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35, typename P36, typename P37, typename P38, typename P39
+    , typename P40, typename P41, typename P42, typename P43, typename P44
+    , typename P45, typename P46, typename P47
+    >
+struct map48
+    : m_item<
+          typename P47::first
+        , typename P47::second
+        , map47< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44,P45,P46 >
+        >
+{
+    typedef map48 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35, typename P36, typename P37, typename P38, typename P39
+    , typename P40, typename P41, typename P42, typename P43, typename P44
+    , typename P45, typename P46, typename P47, typename P48
+    >
+struct map49
+    : m_item<
+          typename P48::first
+        , typename P48::second
+        , map48< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44,P45,P46,P47 >
+        >
+{
+    typedef map49 type;
+};
+
+template<
+      typename P0, typename P1, typename P2, typename P3, typename P4
+    , typename P5, typename P6, typename P7, typename P8, typename P9
+    , typename P10, typename P11, typename P12, typename P13, typename P14
+    , typename P15, typename P16, typename P17, typename P18, typename P19
+    , typename P20, typename P21, typename P22, typename P23, typename P24
+    , typename P25, typename P26, typename P27, typename P28, typename P29
+    , typename P30, typename P31, typename P32, typename P33, typename P34
+    , typename P35, typename P36, typename P37, typename P38, typename P39
+    , typename P40, typename P41, typename P42, typename P43, typename P44
+    , typename P45, typename P46, typename P47, typename P48, typename P49
+    >
+struct map50
+    : m_item<
+          typename P49::first
+        , typename P49::second
+        , map49< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44,P45,P46,P47,P48 >
+        >
+{
+    typedef map50 type;
+};
+
+}}
diff --git a/3rdParty/Boost/src/boost/mpl/map/aux_/size_impl.hpp b/3rdParty/Boost/src/boost/mpl/map/aux_/size_impl.hpp
new file mode 100644
index 0000000..70febc5
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/map/aux_/size_impl.hpp
@@ -0,0 +1,33 @@
+
+#ifndef BOOST_MPL_MAP_AUX_SIZE_IMPL_HPP_INCLUDED
+#define BOOST_MPL_MAP_AUX_SIZE_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: size_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/size_fwd.hpp>
+#include <boost/mpl/map/aux_/tag.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct size_impl< aux::map_tag >
+{
+    template< typename Map > struct apply
+        : Map::size
+    {
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_MAP_AUX_SIZE_IMPL_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/map/aux_/tag.hpp b/3rdParty/Boost/src/boost/mpl/map/aux_/tag.hpp
new file mode 100644
index 0000000..a698ddc
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/map/aux_/tag.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_MAP_AUX_TAG_HPP_INCLUDED
+#define BOOST_MPL_MAP_AUX_TAG_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: tag.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+namespace boost { namespace mpl { namespace aux {
+
+struct map_tag;
+
+}}}
+
+#endif // BOOST_MPL_MAP_AUX_TAG_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/map/aux_/value_type_impl.hpp b/3rdParty/Boost/src/boost/mpl/map/aux_/value_type_impl.hpp
new file mode 100644
index 0000000..ca77967
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/map/aux_/value_type_impl.hpp
@@ -0,0 +1,36 @@
+
+#ifndef BOOST_MPL_MAP_AUX_VALUE_TYPE_IMPL_HPP_INCLUDED
+#define BOOST_MPL_MAP_AUX_VALUE_TYPE_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: value_type_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/value_type_fwd.hpp>
+#include <boost/mpl/pair.hpp>
+#include <boost/mpl/map/aux_/tag.hpp>
+
+namespace boost {
+namespace mpl {
+
+template<>
+struct value_type_impl< aux::map_tag >
+{
+    template< typename Map, typename T > struct apply
+        : second<T>
+    {
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_MAP_AUX_VALUE_TYPE_IMPL_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/map/map0.hpp b/3rdParty/Boost/src/boost/mpl/map/map0.hpp
new file mode 100644
index 0000000..a130844
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/map/map0.hpp
@@ -0,0 +1,36 @@
+
+#ifndef BOOST_MPL_MAP_MAP0_HPP_INCLUDED
+#define BOOST_MPL_MAP_MAP0_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: map0.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/map/aux_/contains_impl.hpp>
+#include <boost/mpl/map/aux_/at_impl.hpp>
+//#include <boost/mpl/map/aux_/O1_size.hpp>
+#include <boost/mpl/map/aux_/insert_impl.hpp>
+#include <boost/mpl/map/aux_/erase_impl.hpp>
+#include <boost/mpl/map/aux_/erase_key_impl.hpp>
+#include <boost/mpl/map/aux_/has_key_impl.hpp>
+#include <boost/mpl/map/aux_/key_type_impl.hpp>
+#include <boost/mpl/map/aux_/value_type_impl.hpp>
+#include <boost/mpl/map/aux_/clear_impl.hpp>
+#include <boost/mpl/map/aux_/size_impl.hpp>
+#include <boost/mpl/map/aux_/empty_impl.hpp>
+#include <boost/mpl/map/aux_/begin_end_impl.hpp>
+#include <boost/mpl/map/aux_/iterator.hpp>
+#include <boost/mpl/map/aux_/item.hpp>
+#include <boost/mpl/map/aux_/map0.hpp>
+#include <boost/mpl/map/aux_/tag.hpp>
+
+#endif // BOOST_MPL_MAP_MAP0_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/map/map10.hpp b/3rdParty/Boost/src/boost/mpl/map/map10.hpp
new file mode 100644
index 0000000..bc9ab75
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/map/map10.hpp
@@ -0,0 +1,44 @@
+
+#ifndef BOOST_MPL_MAP_MAP10_HPP_INCLUDED
+#define BOOST_MPL_MAP_MAP10_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: map10.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/map/map0.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER map10.hpp
+#   include <boost/mpl/map/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/preprocessor/iterate.hpp>
+
+namespace boost { namespace mpl {
+
+#   define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(1, 10, <boost/mpl/map/aux_/numbered.hpp>))
+#   include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_MAP_MAP10_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/map/map20.hpp b/3rdParty/Boost/src/boost/mpl/map/map20.hpp
new file mode 100644
index 0000000..f63571e
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/map/map20.hpp
@@ -0,0 +1,44 @@
+
+#ifndef BOOST_MPL_MAP_MAP20_HPP_INCLUDED
+#define BOOST_MPL_MAP_MAP20_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: map20.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/map/map10.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER map20.hpp
+#   include <boost/mpl/map/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/preprocessor/iterate.hpp>
+
+namespace boost { namespace mpl {
+
+#   define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(11, 20, <boost/mpl/map/aux_/numbered.hpp>))
+#   include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_MAP_MAP20_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/map/map30.hpp b/3rdParty/Boost/src/boost/mpl/map/map30.hpp
new file mode 100644
index 0000000..c08b89d
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/map/map30.hpp
@@ -0,0 +1,44 @@
+
+#ifndef BOOST_MPL_MAP_MAP30_HPP_INCLUDED
+#define BOOST_MPL_MAP_MAP30_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: map30.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/map/map20.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER map30.hpp
+#   include <boost/mpl/map/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/preprocessor/iterate.hpp>
+
+namespace boost { namespace mpl {
+
+#   define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(21, 30, <boost/mpl/map/aux_/numbered.hpp>))
+#   include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_MAP_MAP30_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/map/map40.hpp b/3rdParty/Boost/src/boost/mpl/map/map40.hpp
new file mode 100644
index 0000000..426c31b
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/map/map40.hpp
@@ -0,0 +1,44 @@
+
+#ifndef BOOST_MPL_MAP_MAP40_HPP_INCLUDED
+#define BOOST_MPL_MAP_MAP40_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: map40.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/map/map30.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER map40.hpp
+#   include <boost/mpl/map/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/preprocessor/iterate.hpp>
+
+namespace boost { namespace mpl {
+
+#   define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(31, 40, <boost/mpl/map/aux_/numbered.hpp>))
+#   include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_MAP_MAP40_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/map/map50.hpp b/3rdParty/Boost/src/boost/mpl/map/map50.hpp
new file mode 100644
index 0000000..2058e54
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/map/map50.hpp
@@ -0,0 +1,44 @@
+
+#ifndef BOOST_MPL_MAP_MAP50_HPP_INCLUDED
+#define BOOST_MPL_MAP_MAP50_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: map50.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/map/map40.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER map50.hpp
+#   include <boost/mpl/map/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/preprocessor/iterate.hpp>
+
+namespace boost { namespace mpl {
+
+#   define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(41, 50, <boost/mpl/map/aux_/numbered.hpp>))
+#   include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_MAP_MAP50_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/min.hpp b/3rdParty/Boost/src/boost/mpl/min.hpp
new file mode 100644
index 0000000..23d093d
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/min.hpp
@@ -0,0 +1,19 @@
+
+#ifndef BOOST_MPL_MIN_HPP_INCLUDED
+#define BOOST_MPL_MIN_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: min.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/min_max.hpp>
+
+#endif // BOOST_MPL_MIN_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/order_fwd.hpp b/3rdParty/Boost/src/boost/mpl/order_fwd.hpp
new file mode 100644
index 0000000..313a2c3
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/order_fwd.hpp
@@ -0,0 +1,25 @@
+
+#ifndef BOOST_MPL_ORDER_FWD_HPP_INCLUDED
+#define BOOST_MPL_ORDER_FWD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: order_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+namespace boost { namespace mpl {
+
+template< typename Tag > struct order_impl;
+template< typename AssociativeSequence, typename Key > struct order;
+
+}}
+
+#endif // BOOST_MPL_ORDER_FWD_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/pop_back.hpp b/3rdParty/Boost/src/boost/mpl/pop_back.hpp
new file mode 100644
index 0000000..429fb87
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/pop_back.hpp
@@ -0,0 +1,39 @@
+
+#ifndef BOOST_MPL_POP_BACK_HPP_INCLUDED
+#define BOOST_MPL_POP_BACK_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: pop_back.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/pop_back_fwd.hpp>
+#include <boost/mpl/aux_/pop_back_impl.hpp>
+#include <boost/mpl/sequence_tag.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace boost { namespace mpl {
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+    >
+struct pop_back
+    : pop_back_impl< typename sequence_tag<Sequence>::type >
+        ::template apply< Sequence >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,pop_back,(Sequence))
+};
+
+BOOST_MPL_AUX_NA_SPEC(1, pop_back)
+
+}}
+
+#endif // BOOST_MPL_POP_BACK_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/pop_front.hpp b/3rdParty/Boost/src/boost/mpl/pop_front.hpp
new file mode 100644
index 0000000..6f6c3b9
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/pop_front.hpp
@@ -0,0 +1,39 @@
+
+#ifndef BOOST_MPL_POP_FRONT_HPP_INCLUDED
+#define BOOST_MPL_POP_FRONT_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: pop_front.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/pop_front_fwd.hpp>
+#include <boost/mpl/aux_/pop_front_impl.hpp>
+#include <boost/mpl/sequence_tag.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace boost { namespace mpl {
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+    >
+struct pop_front
+    : pop_front_impl< typename sequence_tag<Sequence>::type >
+        ::template apply< Sequence >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,pop_front,(Sequence))
+};
+
+BOOST_MPL_AUX_NA_SPEC(1, pop_front)
+
+}}
+
+#endif // BOOST_MPL_POP_FRONT_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/print.hpp b/3rdParty/Boost/src/boost/mpl/print.hpp
new file mode 100644
index 0000000..a852850
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/print.hpp
@@ -0,0 +1,74 @@
+
+#ifndef BOOST_MPL_PRINT_HPP_INCLUDED
+#define BOOST_MPL_PRINT_HPP_INCLUDED
+
+// Copyright David Abrahams 2003
+// Copyright Aleksey Gurtovoy 2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: print.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/identity.hpp>
+
+namespace boost { namespace mpl {
+  
+namespace aux {
+#if defined(BOOST_MSVC)
+# pragma warning(push, 3)
+// we only want one warning from MSVC, so turn off the other one
+# pragma warning(disable: 4307)
+#elif defined(__MWERKS__)
+# pragma warn_hidevirtual on
+   struct print_base { virtual void f() {} };
+#endif
+
+#if defined(__EDG_VERSION__)
+  template <class T>
+  struct dependent_unsigned
+  {
+      static const unsigned value = 1;
+  };
+#endif
+} // namespace aux 
+
+
+template <class T>
+struct print
+    : mpl::identity<T>
+#if defined(__MWERKS__)
+    , aux::print_base
+#endif 
+{
+#if defined(BOOST_MSVC)
+    enum { n = sizeof(T) + -1 };
+#elif defined(__MWERKS__)
+    void f(int);
+#else 
+    enum {
+        n =
+# if defined(__EDG_VERSION__)
+           aux::dependent_unsigned<T>::value > -1
+# else 
+           sizeof(T) > -1
+# endif 
+        };
+#endif 
+};
+
+#if defined(BOOST_MSVC)
+# pragma warning(pop)
+#elif defined(__MWERKS__)
+# pragma warn_hidevirtual reset
+#endif
+
+}}
+
+#endif // BOOST_MPL_PRINT_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/remove.hpp b/3rdParty/Boost/src/boost/mpl/remove.hpp
new file mode 100644
index 0000000..61f42a9
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/remove.hpp
@@ -0,0 +1,52 @@
+
+#ifndef BOOST_MPL_REMOVE_HPP_INCLUDED
+#define BOOST_MPL_REMOVE_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: remove.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/remove_if.hpp>
+#include <boost/mpl/same_as.hpp>
+#include <boost/mpl/aux_/inserter_algorithm.hpp>
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template<
+      typename Sequence
+    , typename T
+    , typename Inserter 
+    >
+struct remove_impl
+    : remove_if_impl< Sequence, same_as<T>, Inserter >
+{
+};
+
+template<
+      typename Sequence
+    , typename T
+    , typename Inserter 
+    >
+struct reverse_remove_impl
+    : reverse_remove_if_impl< Sequence, same_as<T>, Inserter >
+{
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(3, remove)
+
+}}
+
+#endif // BOOST_MPL_REMOVE_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/remove_if.hpp b/3rdParty/Boost/src/boost/mpl/remove_if.hpp
new file mode 100644
index 0000000..f707abd
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/remove_if.hpp
@@ -0,0 +1,83 @@
+
+#ifndef BOOST_MPL_REMOVE_IF_HPP_INCLUDED
+#define BOOST_MPL_REMOVE_IF_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: remove_if.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/fold.hpp>
+#include <boost/mpl/reverse_fold.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/protect.hpp>
+#include <boost/mpl/lambda.hpp>
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/aux_/inserter_algorithm.hpp>
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template< typename Pred, typename InsertOp > struct remove_if_helper
+{
+    template< typename Sequence, typename U > struct apply
+    {
+        typedef typename eval_if<
+              typename apply1<Pred,U>::type
+            , identity<Sequence>
+            , apply2<InsertOp,Sequence,U>
+            >::type type;
+    };
+};
+
+template<
+      typename Sequence
+    , typename Predicate
+    , typename Inserter
+    >
+struct remove_if_impl
+    : fold<
+          Sequence
+        , typename Inserter::state
+        , protect< aux::remove_if_helper<
+              typename lambda<Predicate>::type
+            , typename Inserter::operation
+            > >
+        >
+{
+};
+
+template<
+      typename Sequence
+    , typename Predicate
+    , typename Inserter
+    >
+struct reverse_remove_if_impl
+    : reverse_fold<
+          Sequence
+        , typename Inserter::state
+        , protect< aux::remove_if_helper<
+              typename lambda<Predicate>::type
+            , typename Inserter::operation
+            > >
+        >
+{
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(3, remove_if)
+
+}}
+
+#endif // BOOST_MPL_REMOVE_IF_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/value_type_fwd.hpp b/3rdParty/Boost/src/boost/mpl/value_type_fwd.hpp
new file mode 100644
index 0000000..96de3ad
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/value_type_fwd.hpp
@@ -0,0 +1,25 @@
+
+#ifndef BOOST_MPL_VALUE_TYPE_FWD_HPP_INCLUDED
+#define BOOST_MPL_VALUE_TYPE_FWD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: value_type_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+namespace boost { namespace mpl {
+
+template< typename Tag > struct value_type_impl;
+template< typename AssociativeSequence, typename T > struct value_type;
+
+}}
+
+#endif // BOOST_MPL_VALUE_TYPE_FWD_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/preprocessor/comparison/greater.hpp b/3rdParty/Boost/src/boost/preprocessor/comparison/greater.hpp
new file mode 100644
index 0000000..83d2fcf
--- /dev/null
+++ b/3rdParty/Boost/src/boost/preprocessor/comparison/greater.hpp
@@ -0,0 +1,38 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_COMPARISON_GREATER_HPP
+# define BOOST_PREPROCESSOR_COMPARISON_GREATER_HPP
+#
+# include <boost/preprocessor/comparison/less.hpp>
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_GREATER */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_GREATER(x, y) BOOST_PP_LESS(y, x)
+# else
+#    define BOOST_PP_GREATER(x, y) BOOST_PP_GREATER_I(x, y)
+#    define BOOST_PP_GREATER_I(x, y) BOOST_PP_LESS(y, x)
+# endif
+#
+# /* BOOST_PP_GREATER_D */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_GREATER_D(d, x, y) BOOST_PP_LESS_D(d, y, x)
+# else
+#    define BOOST_PP_GREATER_D(d, x, y) BOOST_PP_GREATER_D_I(d, x, y)
+#    define BOOST_PP_GREATER_D_I(d, x, y) BOOST_PP_LESS_D(d, y, x)
+# endif
+#
+# endif
diff --git a/3rdParty/Boost/src/boost/preprocessor/comparison/less.hpp b/3rdParty/Boost/src/boost/preprocessor/comparison/less.hpp
new file mode 100644
index 0000000..d91ea3d
--- /dev/null
+++ b/3rdParty/Boost/src/boost/preprocessor/comparison/less.hpp
@@ -0,0 +1,46 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_COMPARISON_LESS_HPP
+# define BOOST_PREPROCESSOR_COMPARISON_LESS_HPP
+#
+# include <boost/preprocessor/comparison/less_equal.hpp>
+# include <boost/preprocessor/comparison/not_equal.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/control/iif.hpp>
+# include <boost/preprocessor/logical/bitand.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
+#
+# /* BOOST_PP_LESS */
+#
+# if BOOST_PP_CONFIG_FLAGS() & (BOOST_PP_CONFIG_MWCC() | BOOST_PP_CONFIG_DMC())
+#    define BOOST_PP_LESS(x, y) BOOST_PP_BITAND(BOOST_PP_NOT_EQUAL(x, y), BOOST_PP_LESS_EQUAL(x, y))
+# elif ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_LESS(x, y) BOOST_PP_IIF(BOOST_PP_NOT_EQUAL(x, y), BOOST_PP_LESS_EQUAL, 0 BOOST_PP_TUPLE_EAT_2)(x, y)
+# else
+#    define BOOST_PP_LESS(x, y) BOOST_PP_LESS_I(x, y)
+#    define BOOST_PP_LESS_I(x, y) BOOST_PP_IIF(BOOST_PP_NOT_EQUAL(x, y), BOOST_PP_LESS_EQUAL, 0 BOOST_PP_TUPLE_EAT_2)(x, y)
+# endif
+#
+# /* BOOST_PP_LESS_D */
+#
+# if BOOST_PP_CONFIG_FLAGS() & (BOOST_PP_CONFIG_MWCC() | BOOST_PP_CONFIG_DMC())
+#    define BOOST_PP_LESS_D(d, x, y) BOOST_PP_BITAND(BOOST_PP_NOT_EQUAL(x, y), BOOST_PP_LESS_EQUAL_D(d, x, y))
+# elif ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_LESS_D(d, x, y) BOOST_PP_IIF(BOOST_PP_NOT_EQUAL(x, y), BOOST_PP_LESS_EQUAL_D, 0 BOOST_PP_TUPLE_EAT_3)(d, x, y)
+# else
+#    define BOOST_PP_LESS_D(d, x, y) BOOST_PP_LESS_D_I(d, x, y)
+#    define BOOST_PP_LESS_D_I(d, x, y) BOOST_PP_IIF(BOOST_PP_NOT_EQUAL(x, y), BOOST_PP_LESS_EQUAL_D, 0 BOOST_PP_TUPLE_EAT_3)(d, x, y)
+# endif
+#
+# endif
diff --git a/3rdParty/Boost/src/boost/preprocessor/comparison/not_equal.hpp b/3rdParty/Boost/src/boost/preprocessor/comparison/not_equal.hpp
new file mode 100644
index 0000000..b4b0eae
--- /dev/null
+++ b/3rdParty/Boost/src/boost/preprocessor/comparison/not_equal.hpp
@@ -0,0 +1,814 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_COMPARISON_NOT_EQUAL_HPP
+# define BOOST_PREPROCESSOR_COMPARISON_NOT_EQUAL_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/control/iif.hpp>
+#
+# /* BOOST_PP_NOT_EQUAL */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+#    define BOOST_PP_NOT_EQUAL(x, y) BOOST_PP_NOT_EQUAL_I(x, y)
+# else
+#    define BOOST_PP_NOT_EQUAL(x, y) BOOST_PP_NOT_EQUAL_OO((x, y))
+#    define BOOST_PP_NOT_EQUAL_OO(par) BOOST_PP_NOT_EQUAL_I ## par
+# endif
+#
+# define BOOST_PP_NOT_EQUAL_I(x, y) BOOST_PP_CAT(BOOST_PP_NOT_EQUAL_CHECK_, BOOST_PP_NOT_EQUAL_ ## x(0, BOOST_PP_NOT_EQUAL_ ## y))
+#
+# /* BOOST_PP_NOT_EQUAL_D */
+#
+# define BOOST_PP_NOT_EQUAL_D(d, x, y) BOOST_PP_NOT_EQUAL(x, y)
+#
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NIL 1
+#
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_0(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_1(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_2(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_3(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_4(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_5(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_6(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_7(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_8(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_9(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_10(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_11(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_12(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_13(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_14(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_15(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_16(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_17(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_18(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_19(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_20(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_21(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_22(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_23(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_24(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_25(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_26(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_27(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_28(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_29(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_30(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_31(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_32(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_33(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_34(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_35(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_36(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_37(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_38(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_39(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_40(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_41(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_42(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_43(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_44(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_45(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_46(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_47(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_48(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_49(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_50(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_51(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_52(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_53(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_54(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_55(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_56(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_57(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_58(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_59(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_60(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_61(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_62(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_63(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_64(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_65(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_66(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_67(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_68(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_69(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_70(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_71(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_72(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_73(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_74(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_75(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_76(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_77(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_78(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_79(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_80(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_81(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_82(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_83(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_84(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_85(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_86(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_87(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_88(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_89(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_90(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_91(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_92(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_93(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_94(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_95(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_96(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_97(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_98(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_99(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_100(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_101(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_102(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_103(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_104(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_105(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_106(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_107(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_108(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_109(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_110(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_111(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_112(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_113(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_114(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_115(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_116(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_117(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_118(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_119(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_120(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_121(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_122(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_123(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_124(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_125(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_126(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_127(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_128(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_129(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_130(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_131(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_132(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_133(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_134(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_135(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_136(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_137(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_138(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_139(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_140(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_141(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_142(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_143(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_144(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_145(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_146(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_147(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_148(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_149(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_150(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_151(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_152(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_153(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_154(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_155(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_156(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_157(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_158(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_159(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_160(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_161(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_162(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_163(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_164(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_165(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_166(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_167(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_168(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_169(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_170(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_171(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_172(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_173(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_174(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_175(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_176(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_177(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_178(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_179(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_180(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_181(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_182(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_183(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_184(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_185(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_186(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_187(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_188(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_189(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_190(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_191(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_192(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_193(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_194(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_195(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_196(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_197(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_198(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_199(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_200(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_201(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_202(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_203(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_204(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_205(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_206(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_207(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_208(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_209(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_210(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_211(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_212(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_213(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_214(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_215(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_216(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_217(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_218(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_219(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_220(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_221(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_222(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_223(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_224(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_225(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_226(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_227(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_228(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_229(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_230(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_231(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_232(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_233(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_234(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_235(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_236(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_237(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_238(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_239(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_240(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_241(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_242(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_243(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_244(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_245(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_246(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_247(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_248(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_249(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_250(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_251(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_252(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_253(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_254(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_255(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_256(c, y) 0
+#
+#if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC()
+#    define BOOST_PP_NOT_EQUAL_0(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_1(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_2(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_3(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_4(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_5(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_6(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_7(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_8(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_9(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_10(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_11(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_12(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_13(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_14(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_15(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_16(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_17(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_18(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_19(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_20(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_21(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_22(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_23(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_24(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_25(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_26(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_27(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_28(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_29(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_30(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_31(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_32(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_33(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_34(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_35(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_36(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_37(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_38(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_39(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_40(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_41(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_42(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_43(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_44(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_45(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_46(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_47(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_48(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_49(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_50(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_51(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_52(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_53(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_54(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_55(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_56(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_57(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_58(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_59(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_60(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_61(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_62(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_63(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_64(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_65(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_66(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_67(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_68(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_69(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_70(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_71(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_72(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_73(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_74(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_75(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_76(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_77(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_78(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_79(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_80(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_81(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_82(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_83(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_84(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_85(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_86(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_87(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_88(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_89(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_90(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_91(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_92(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_93(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_94(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_95(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_96(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_97(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_98(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_99(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_100(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_101(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_102(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_103(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_104(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_105(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_106(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_107(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_108(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_109(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_110(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_111(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_112(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_113(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_114(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_115(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_116(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_117(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_118(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_119(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_120(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_121(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_122(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_123(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_124(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_125(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_126(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_127(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_128(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_129(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_130(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_131(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_132(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_133(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_134(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_135(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_136(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_137(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_138(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_139(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_140(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_141(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_142(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_143(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_144(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_145(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_146(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_147(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_148(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_149(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_150(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_151(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_152(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_153(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_154(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_155(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_156(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_157(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_158(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_159(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_160(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_161(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_162(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_163(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_164(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_165(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_166(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_167(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_168(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_169(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_170(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_171(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_172(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_173(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_174(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_175(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_176(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_177(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_178(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_179(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_180(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_181(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_182(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_183(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_184(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_185(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_186(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_187(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_188(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_189(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_190(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_191(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_192(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_193(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_194(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_195(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_196(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_197(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_198(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_199(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_200(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_201(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_202(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_203(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_204(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_205(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_206(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_207(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_208(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_209(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_210(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_211(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_212(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_213(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_214(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_215(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_216(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_217(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_218(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_219(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_220(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_221(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_222(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_223(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_224(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_225(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_226(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_227(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_228(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_229(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_230(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_231(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_232(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_233(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_234(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_235(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_236(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_237(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_238(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_239(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_240(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_241(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_242(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_243(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_244(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_245(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_246(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_247(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_248(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_249(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_250(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_251(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_252(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_253(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_254(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_255(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_256(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# else
+#    define BOOST_PP_NOT_EQUAL_0(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_1(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_2(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_3(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_4(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_5(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_6(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_7(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_8(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_9(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_10(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_11(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_12(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_13(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_14(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_15(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_16(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_17(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_18(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_19(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_20(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_21(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_22(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_23(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_24(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_25(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_26(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_27(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_28(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_29(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_30(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_31(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_32(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_33(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_34(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_35(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_36(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_37(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_38(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_39(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_40(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_41(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_42(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_43(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_44(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_45(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_46(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_47(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_48(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_49(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_50(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_51(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_52(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_53(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_54(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_55(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_56(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_57(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_58(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_59(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_60(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_61(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_62(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_63(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_64(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_65(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_66(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_67(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_68(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_69(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_70(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_71(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_72(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_73(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_74(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_75(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_76(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_77(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_78(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_79(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_80(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_81(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_82(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_83(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_84(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_85(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_86(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_87(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_88(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_89(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_90(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_91(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_92(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_93(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_94(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_95(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_96(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_97(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_98(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_99(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_100(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_101(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_102(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_103(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_104(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_105(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_106(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_107(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_108(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_109(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_110(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_111(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_112(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_113(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_114(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_115(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_116(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_117(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_118(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_119(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_120(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_121(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_122(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_123(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_124(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_125(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_126(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_127(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_128(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_129(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_130(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_131(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_132(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_133(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_134(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_135(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_136(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_137(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_138(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_139(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_140(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_141(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_142(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_143(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_144(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_145(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_146(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_147(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_148(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_149(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_150(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_151(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_152(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_153(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_154(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_155(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_156(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_157(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_158(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_159(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_160(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_161(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_162(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_163(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_164(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_165(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_166(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_167(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_168(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_169(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_170(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_171(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_172(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_173(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_174(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_175(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_176(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_177(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_178(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_179(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_180(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_181(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_182(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_183(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_184(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_185(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_186(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_187(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_188(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_189(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_190(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_191(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_192(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_193(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_194(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_195(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_196(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_197(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_198(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_199(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_200(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_201(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_202(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_203(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_204(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_205(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_206(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_207(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_208(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_209(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_210(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_211(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_212(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_213(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_214(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_215(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_216(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_217(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_218(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_219(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_220(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_221(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_222(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_223(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_224(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_225(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_226(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_227(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_228(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_229(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_230(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_231(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_232(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_233(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_234(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_235(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_236(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_237(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_238(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_239(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_240(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_241(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_242(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_243(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_244(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_245(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_246(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_247(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_248(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_249(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_250(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_251(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_252(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_253(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_254(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_255(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_256(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# endif
+#
+# endif
diff --git a/3rdParty/Boost/src/boost/preprocessor/facilities/expand.hpp b/3rdParty/Boost/src/boost/preprocessor/facilities/expand.hpp
new file mode 100644
index 0000000..c8661a1
--- /dev/null
+++ b/3rdParty/Boost/src/boost/preprocessor/facilities/expand.hpp
@@ -0,0 +1,28 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_FACILITIES_EXPAND_HPP
+# define BOOST_PREPROCESSOR_FACILITIES_EXPAND_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC() && ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC()
+#    define BOOST_PP_EXPAND(x) BOOST_PP_EXPAND_I(x)
+# else
+#    define BOOST_PP_EXPAND(x) BOOST_PP_EXPAND_OO((x))
+#    define BOOST_PP_EXPAND_OO(par) BOOST_PP_EXPAND_I ## par
+# endif
+#
+# define BOOST_PP_EXPAND_I(x) x
+#
+# endif
diff --git a/3rdParty/Boost/src/boost/preprocessor/repetition/enum_shifted.hpp b/3rdParty/Boost/src/boost/preprocessor/repetition/enum_shifted.hpp
new file mode 100644
index 0000000..d5b006f
--- /dev/null
+++ b/3rdParty/Boost/src/boost/preprocessor/repetition/enum_shifted.hpp
@@ -0,0 +1,68 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPETITION_ENUM_SHIFTED_HPP
+# define BOOST_PREPROCESSOR_REPETITION_ENUM_SHIFTED_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/arithmetic/dec.hpp>
+# include <boost/preprocessor/arithmetic/inc.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/debug/error.hpp>
+# include <boost/preprocessor/detail/auto_rec.hpp>
+# include <boost/preprocessor/punctuation/comma_if.hpp>
+# include <boost/preprocessor/repetition/repeat.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/preprocessor/tuple/rem.hpp>
+#
+# /* BOOST_PP_ENUM_SHIFTED */
+#
+# if 0
+#    define BOOST_PP_ENUM_SHIFTED(count, macro, data)
+# endif
+#
+# define BOOST_PP_ENUM_SHIFTED BOOST_PP_CAT(BOOST_PP_ENUM_SHIFTED_, BOOST_PP_AUTO_REC(BOOST_PP_REPEAT_P, 4))
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_ENUM_SHIFTED_1(c, m, d) BOOST_PP_REPEAT_1(BOOST_PP_DEC(c), BOOST_PP_ENUM_SHIFTED_M_1, (m, d))
+#    define BOOST_PP_ENUM_SHIFTED_2(c, m, d) BOOST_PP_REPEAT_2(BOOST_PP_DEC(c), BOOST_PP_ENUM_SHIFTED_M_2, (m, d))
+#    define BOOST_PP_ENUM_SHIFTED_3(c, m, d) BOOST_PP_REPEAT_3(BOOST_PP_DEC(c), BOOST_PP_ENUM_SHIFTED_M_3, (m, d))
+# else
+#    define BOOST_PP_ENUM_SHIFTED_1(c, m, d) BOOST_PP_ENUM_SHIFTED_1_I(c, m, d)
+#    define BOOST_PP_ENUM_SHIFTED_2(c, m, d) BOOST_PP_ENUM_SHIFTED_1_2(c, m, d)
+#    define BOOST_PP_ENUM_SHIFTED_3(c, m, d) BOOST_PP_ENUM_SHIFTED_1_3(c, m, d)
+#    define BOOST_PP_ENUM_SHIFTED_1_I(c, m, d) BOOST_PP_REPEAT_1(BOOST_PP_DEC(c), BOOST_PP_ENUM_SHIFTED_M_1, (m, d))
+#    define BOOST_PP_ENUM_SHIFTED_2_I(c, m, d) BOOST_PP_REPEAT_2(BOOST_PP_DEC(c), BOOST_PP_ENUM_SHIFTED_M_2, (m, d))
+#    define BOOST_PP_ENUM_SHIFTED_3_I(c, m, d) BOOST_PP_REPEAT_3(BOOST_PP_DEC(c), BOOST_PP_ENUM_SHIFTED_M_3, (m, d))
+# endif
+#
+# define BOOST_PP_ENUM_SHIFTED_4(c, m, d) BOOST_PP_ERROR(0x0003)
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()
+#    define BOOST_PP_ENUM_SHIFTED_M_1(z, n, md) BOOST_PP_ENUM_SHIFTED_M_1_IM(z, n, BOOST_PP_TUPLE_REM_2 md)
+#    define BOOST_PP_ENUM_SHIFTED_M_2(z, n, md) BOOST_PP_ENUM_SHIFTED_M_2_IM(z, n, BOOST_PP_TUPLE_REM_2 md)
+#    define BOOST_PP_ENUM_SHIFTED_M_3(z, n, md) BOOST_PP_ENUM_SHIFTED_M_3_IM(z, n, BOOST_PP_TUPLE_REM_2 md)
+#    define BOOST_PP_ENUM_SHIFTED_M_1_IM(z, n, im) BOOST_PP_ENUM_SHIFTED_M_1_I(z, n, im)
+#    define BOOST_PP_ENUM_SHIFTED_M_2_IM(z, n, im) BOOST_PP_ENUM_SHIFTED_M_2_I(z, n, im)
+#    define BOOST_PP_ENUM_SHIFTED_M_3_IM(z, n, im) BOOST_PP_ENUM_SHIFTED_M_3_I(z, n, im)
+# else
+#    define BOOST_PP_ENUM_SHIFTED_M_1(z, n, md) BOOST_PP_ENUM_SHIFTED_M_1_I(z, n, BOOST_PP_TUPLE_ELEM(2, 0, md), BOOST_PP_TUPLE_ELEM(2, 1, md))
+#    define BOOST_PP_ENUM_SHIFTED_M_2(z, n, md) BOOST_PP_ENUM_SHIFTED_M_2_I(z, n, BOOST_PP_TUPLE_ELEM(2, 0, md), BOOST_PP_TUPLE_ELEM(2, 1, md))
+#    define BOOST_PP_ENUM_SHIFTED_M_3(z, n, md) BOOST_PP_ENUM_SHIFTED_M_3_I(z, n, BOOST_PP_TUPLE_ELEM(2, 0, md), BOOST_PP_TUPLE_ELEM(2, 1, md))
+# endif
+#
+# define BOOST_PP_ENUM_SHIFTED_M_1_I(z, n, m, d) BOOST_PP_COMMA_IF(n) m(z, BOOST_PP_INC(n), d)
+# define BOOST_PP_ENUM_SHIFTED_M_2_I(z, n, m, d) BOOST_PP_COMMA_IF(n) m(z, BOOST_PP_INC(n), d)
+# define BOOST_PP_ENUM_SHIFTED_M_3_I(z, n, m, d) BOOST_PP_COMMA_IF(n) m(z, BOOST_PP_INC(n), d)
+#
+# endif
diff --git a/3rdParty/Boost/src/boost/preprocessor/repetition/enum_trailing_binary_params.hpp b/3rdParty/Boost/src/boost/preprocessor/repetition/enum_trailing_binary_params.hpp
new file mode 100644
index 0000000..e201b69
--- /dev/null
+++ b/3rdParty/Boost/src/boost/preprocessor/repetition/enum_trailing_binary_params.hpp
@@ -0,0 +1,53 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPETITION_ENUM_TRAILING_BINARY_PARAMS_HPP
+# define BOOST_PREPROCESSOR_REPETITION_ENUM_TRAILING_BINARY_PARAMS_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/repetition/repeat.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/preprocessor/tuple/rem.hpp>
+#
+# /* BOOST_PP_ENUM_TRAILING_BINARY_PARAMS */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(count, p1, p2) BOOST_PP_REPEAT(count, BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_M, (p1, p2))
+# else
+#    define BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(count, p1, p2) BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_I(count, p1, p2)
+#    define BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_I(count, p1, p2) BOOST_PP_REPEAT(count, BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_M, (p1, p2))
+# endif
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()
+#    define BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_M(z, n, pp) BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_M_IM(z, n, BOOST_PP_TUPLE_REM_2 pp)
+#    define BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_M_IM(z, n, im) BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_M_I(z, n, im)
+# else
+#    define BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_M(z, n, pp) BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_M_I(z, n, BOOST_PP_TUPLE_ELEM(2, 0, pp), BOOST_PP_TUPLE_ELEM(2, 1, pp))
+# endif
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+#    define BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_M_I(z, n, p1, p2) BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_M_II(z, n, p1, p2)
+#    define BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_M_II(z, n, p1, p2) , p1 ## n p2 ## n
+# else
+#    define BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_M_I(z, n, p1, p2) , BOOST_PP_CAT(p1, n) BOOST_PP_CAT(p2, n)
+# endif
+#
+# /* BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_Z */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_Z(z, count, p1, p2) BOOST_PP_REPEAT_ ## z(count, BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_M, (p1, p2))
+# else
+#    define BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_Z(z, count, p1, p2) BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_Z_I(z, count, p1, p2)
+#    define BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_Z_I(z, count, p1, p2) BOOST_PP_REPEAT_ ## z(count, BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_M, (p1, p2))
+# endif
+#
+# endif
diff --git a/3rdParty/Boost/src/boost/preprocessor/selection/max.hpp b/3rdParty/Boost/src/boost/preprocessor/selection/max.hpp
new file mode 100644
index 0000000..407d702
--- /dev/null
+++ b/3rdParty/Boost/src/boost/preprocessor/selection/max.hpp
@@ -0,0 +1,39 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SELECTION_MAX_HPP
+# define BOOST_PREPROCESSOR_SELECTION_MAX_HPP
+#
+# include <boost/preprocessor/comparison/less_equal.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/control/iif.hpp>
+#
+# /* BOOST_PP_MAX */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_MAX(x, y) BOOST_PP_IIF(BOOST_PP_LESS_EQUAL(x, y), y, x)
+# else
+#    define BOOST_PP_MAX(x, y) BOOST_PP_MAX_I(x, y)
+#    define BOOST_PP_MAX_I(x, y) BOOST_PP_IIF(BOOST_PP_LESS_EQUAL(x, y), y, x)
+# endif
+#
+# /* BOOST_PP_MAX_D */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_MAX_D(d, x, y) BOOST_PP_IIF(BOOST_PP_LESS_EQUAL_D(d, x, y), y, x)
+# else
+#    define BOOST_PP_MAX_D(d, x, y) BOOST_PP_MAX_D_I(d, x, y)
+#    define BOOST_PP_MAX_D_I(d, x, y) BOOST_PP_IIF(BOOST_PP_LESS_EQUAL_D(d, x, y), y, x)
+# endif
+#
+# endif
diff --git a/3rdParty/Boost/src/boost/preprocessor/seq/for_each.hpp b/3rdParty/Boost/src/boost/preprocessor/seq/for_each.hpp
new file mode 100644
index 0000000..e997a9a
--- /dev/null
+++ b/3rdParty/Boost/src/boost/preprocessor/seq/for_each.hpp
@@ -0,0 +1,60 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_FOR_EACH_HPP
+# define BOOST_PREPROCESSOR_SEQ_FOR_EACH_HPP
+#
+# include <boost/preprocessor/arithmetic/dec.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/repetition/for.hpp>
+# include <boost/preprocessor/seq/seq.hpp>
+# include <boost/preprocessor/seq/size.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/preprocessor/tuple/rem.hpp>
+#
+# /* BOOST_PP_SEQ_FOR_EACH */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_SEQ_FOR_EACH(macro, data, seq) BOOST_PP_FOR((macro, data, seq (nil)), BOOST_PP_SEQ_FOR_EACH_P, BOOST_PP_SEQ_FOR_EACH_O, BOOST_PP_SEQ_FOR_EACH_M)
+# else
+#    define BOOST_PP_SEQ_FOR_EACH(macro, data, seq) BOOST_PP_SEQ_FOR_EACH_D(macro, data, seq)
+#    define BOOST_PP_SEQ_FOR_EACH_D(macro, data, seq) BOOST_PP_FOR((macro, data, seq (nil)), BOOST_PP_SEQ_FOR_EACH_P, BOOST_PP_SEQ_FOR_EACH_O, BOOST_PP_SEQ_FOR_EACH_M)
+# endif
+#
+# define BOOST_PP_SEQ_FOR_EACH_P(r, x) BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(BOOST_PP_TUPLE_ELEM(3, 2, x)))
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()
+#    define BOOST_PP_SEQ_FOR_EACH_O(r, x) BOOST_PP_SEQ_FOR_EACH_O_I x
+# else
+#    define BOOST_PP_SEQ_FOR_EACH_O(r, x) BOOST_PP_SEQ_FOR_EACH_O_I(BOOST_PP_TUPLE_ELEM(3, 0, x), BOOST_PP_TUPLE_ELEM(3, 1, x), BOOST_PP_TUPLE_ELEM(3, 2, x))
+# endif
+#
+# define BOOST_PP_SEQ_FOR_EACH_O_I(macro, data, seq) (macro, data, BOOST_PP_SEQ_TAIL(seq))
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()
+#    define BOOST_PP_SEQ_FOR_EACH_M(r, x) BOOST_PP_SEQ_FOR_EACH_M_IM(r, BOOST_PP_TUPLE_REM_3 x)
+#    define BOOST_PP_SEQ_FOR_EACH_M_IM(r, im) BOOST_PP_SEQ_FOR_EACH_M_I(r, im)
+# else
+#    define BOOST_PP_SEQ_FOR_EACH_M(r, x) BOOST_PP_SEQ_FOR_EACH_M_I(r, BOOST_PP_TUPLE_ELEM(3, 0, x), BOOST_PP_TUPLE_ELEM(3, 1, x), BOOST_PP_TUPLE_ELEM(3, 2, x))
+# endif
+#
+# define BOOST_PP_SEQ_FOR_EACH_M_I(r, macro, data, seq) macro(r, data, BOOST_PP_SEQ_HEAD(seq))
+#
+# /* BOOST_PP_SEQ_FOR_EACH_R */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_SEQ_FOR_EACH_R(r, macro, data, seq) BOOST_PP_FOR_ ## r((macro, data, seq (nil)), BOOST_PP_SEQ_FOR_EACH_P, BOOST_PP_SEQ_FOR_EACH_O, BOOST_PP_SEQ_FOR_EACH_M)
+# else
+#    define BOOST_PP_SEQ_FOR_EACH_R(r, macro, data, seq) BOOST_PP_SEQ_FOR_EACH_R_I(r, macro, data, seq)
+#    define BOOST_PP_SEQ_FOR_EACH_R_I(r, macro, data, seq) BOOST_PP_FOR_ ## r((macro, data, seq (nil)), BOOST_PP_SEQ_FOR_EACH_P, BOOST_PP_SEQ_FOR_EACH_O, BOOST_PP_SEQ_FOR_EACH_M)
+# endif
+#
+# endif
diff --git a/3rdParty/Boost/src/boost/preprocessor/seq/pop_back.hpp b/3rdParty/Boost/src/boost/preprocessor/seq/pop_back.hpp
new file mode 100644
index 0000000..54200d6
--- /dev/null
+++ b/3rdParty/Boost/src/boost/preprocessor/seq/pop_back.hpp
@@ -0,0 +1,29 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_POP_BACK_HPP
+# define BOOST_PREPROCESSOR_SEQ_POP_BACK_HPP
+#
+# include <boost/preprocessor/arithmetic/dec.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/seq/first_n.hpp>
+# include <boost/preprocessor/seq/size.hpp>
+#
+# /* BOOST_PP_SEQ_POP_BACK */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_SEQ_POP_BACK(seq) BOOST_PP_SEQ_FIRST_N(BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(seq)), seq)
+# else
+#    define BOOST_PP_SEQ_POP_BACK(seq) BOOST_PP_SEQ_POP_BACK_I(seq)
+#    define BOOST_PP_SEQ_POP_BACK_I(seq) BOOST_PP_SEQ_FIRST_N(BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(seq)), seq)
+# endif
+#
+# endif
diff --git a/3rdParty/Boost/src/boost/preprocessor/seq/push_back.hpp b/3rdParty/Boost/src/boost/preprocessor/seq/push_back.hpp
new file mode 100644
index 0000000..1938d0b
--- /dev/null
+++ b/3rdParty/Boost/src/boost/preprocessor/seq/push_back.hpp
@@ -0,0 +1,19 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_PUSH_BACK_HPP
+# define BOOST_PREPROCESSOR_SEQ_PUSH_BACK_HPP
+#
+# /* BOOST_PP_SEQ_PUSH_BACK */
+#
+# define BOOST_PP_SEQ_PUSH_BACK(seq, elem) seq(elem)
+#
+# endif
diff --git a/3rdParty/Boost/src/boost/preprocessor/seq/push_front.hpp b/3rdParty/Boost/src/boost/preprocessor/seq/push_front.hpp
new file mode 100644
index 0000000..2ce73ad
--- /dev/null
+++ b/3rdParty/Boost/src/boost/preprocessor/seq/push_front.hpp
@@ -0,0 +1,19 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_PUSH_FRONT_HPP
+# define BOOST_PREPROCESSOR_SEQ_PUSH_FRONT_HPP
+#
+# /* BOOST_PP_SEQ_PUSH_FRONT */
+#
+# define BOOST_PP_SEQ_PUSH_FRONT(seq, elem) (elem)seq
+#
+# endif
diff --git a/3rdParty/Boost/src/boost/preprocessor/seq/to_tuple.hpp b/3rdParty/Boost/src/boost/preprocessor/seq/to_tuple.hpp
new file mode 100644
index 0000000..ab38eb9
--- /dev/null
+++ b/3rdParty/Boost/src/boost/preprocessor/seq/to_tuple.hpp
@@ -0,0 +1,27 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_TO_TUPLE_HPP
+# define BOOST_PREPROCESSOR_SEQ_TO_TUPLE_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/seq/enum.hpp>
+#
+# /* BOOST_PP_SEQ_TO_TUPLE */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_SEQ_TO_TUPLE(seq) (BOOST_PP_SEQ_ENUM(seq))
+# else
+#    define BOOST_PP_SEQ_TO_TUPLE(seq) BOOST_PP_SEQ_TO_TUPLE_I(seq)
+#    define BOOST_PP_SEQ_TO_TUPLE_I(seq) (BOOST_PP_SEQ_ENUM(seq))
+# endif
+#
+# endif
diff --git a/3rdParty/Boost/src/boost/proto/args.hpp b/3rdParty/Boost/src/boost/proto/args.hpp
new file mode 100644
index 0000000..b5d07ca
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/args.hpp
@@ -0,0 +1,223 @@
+#ifndef BOOST_PP_IS_ITERATING
+    ///////////////////////////////////////////////////////////////////////////////
+    /// \file args.hpp
+    /// Contains definition of \c term\<\>, \c list1\<\>, \c list2\<\>, ...
+    /// class templates.
+    //
+    //  Copyright 2008 Eric Niebler. Distributed under the Boost
+    //  Software License, Version 1.0. (See accompanying file
+    //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+    #ifndef BOOST_PROTO_ARGS_HPP_EAN_04_01_2005
+    #define BOOST_PROTO_ARGS_HPP_EAN_04_01_2005
+
+    #include <boost/config.hpp>
+    #include <boost/detail/workaround.hpp>
+    #include <boost/preprocessor/cat.hpp>
+    #include <boost/preprocessor/arithmetic/dec.hpp>
+    #include <boost/preprocessor/iteration/iterate.hpp>
+    #include <boost/preprocessor/repetition/enum_params.hpp>
+    #include <boost/preprocessor/repetition/repeat.hpp>
+    #include <boost/preprocessor/repetition/repeat_from_to.hpp>
+    #include <boost/type_traits/is_function.hpp>
+    #include <boost/type_traits/is_abstract.hpp>
+    #include <boost/mpl/if.hpp>
+    #include <boost/mpl/or.hpp>
+    #include <boost/mpl/void.hpp>
+    #include <boost/proto/proto_fwd.hpp>
+
+    namespace boost { namespace proto
+    {
+        namespace detail
+        {
+            // All classes derived from std::ios_base have these public nested types,
+            // and are non-copyable. This is an imperfect test, but it's the best we
+            // we can do.
+            template<typename T>
+            yes_type check_is_iostream(
+                typename T::failure *
+              , typename T::Init *
+              , typename T::fmtflags *
+              , typename T::iostate *
+              , typename T::openmode *
+              , typename T::seekdir *
+            );
+
+            template<typename T>
+            no_type check_is_iostream(...);
+
+            template<typename T>
+            struct is_iostream
+            {
+                static bool const value = sizeof(yes_type) == sizeof(check_is_iostream<T>(0,0,0,0,0,0));
+                typedef mpl::bool_<value> type;
+            };
+
+            /// INTERNAL ONLY
+            // This should be a customization point. And it serves the same purpose
+            // as the is_noncopyable trait in Boost.Foreach. 
+            template<typename T>
+            struct ref_only
+              : mpl::or_<
+                    is_function<T>
+                  , is_abstract<T>
+                  , is_iostream<T>
+                >
+            {};
+
+            /// INTERNAL ONLY
+            template<typename Expr>
+            struct expr_traits
+            {
+                typedef Expr value_type;
+                typedef Expr &reference;
+                typedef Expr const &const_reference;
+            };
+
+            /// INTERNAL ONLY
+            template<typename Expr>
+            struct expr_traits<Expr &>
+            {
+                typedef Expr value_type;
+                typedef Expr &reference;
+                typedef Expr &const_reference;
+            };
+
+            /// INTERNAL ONLY
+            template<typename Expr>
+            struct expr_traits<Expr const &>
+            {
+                typedef Expr value_type;
+                typedef Expr const &reference;
+                typedef Expr const &const_reference;
+            };
+
+            /// INTERNAL ONLY
+            template<typename T>
+            struct term_traits
+            {
+                typedef T value_type;
+                typedef T &reference;
+                typedef T const &const_reference;
+            };
+
+            /// INTERNAL ONLY
+            template<typename T>
+            struct term_traits<T &>
+            {
+                typedef typename mpl::if_c<ref_only<T>::value, T &, T>::type value_type;
+                typedef T &reference;
+                typedef T &const_reference;
+            };
+
+            /// INTERNAL ONLY
+            template<typename T>
+            struct term_traits<T const &>
+            {
+                typedef T value_type;
+                typedef T const &reference;
+                typedef T const &const_reference;
+            };
+
+            /// INTERNAL ONLY
+            template<typename T, std::size_t N>
+            struct term_traits<T (&)[N]>
+            {
+                typedef T value_type[N];
+                typedef T (&reference)[N];
+                typedef T (&const_reference)[N];
+            };
+
+            /// INTERNAL ONLY
+            template<typename T, std::size_t N>
+            struct term_traits<T const (&)[N]>
+            {
+                typedef T value_type[N];
+                typedef T const (&reference)[N];
+                typedef T const (&const_reference)[N];
+            };
+
+            /// INTERNAL ONLY
+            template<typename T, std::size_t N>
+            struct term_traits<T[N]>
+            {
+                typedef T value_type[N];
+                typedef T (&reference)[N];
+                typedef T const (&const_reference)[N];
+            };
+
+            /// INTERNAL ONLY
+            template<typename T, std::size_t N>
+            struct term_traits<T const[N]>
+            {
+                typedef T value_type[N];
+                typedef T const (&reference)[N];
+                typedef T const (&const_reference)[N];
+            };
+        }
+
+        ////////////////////////////////////////////////////////////////////////////////////////////
+        #define BOOST_PROTO_DEFINE_CHILD_N(Z, N, DATA)                                              \
+            typedef BOOST_PP_CAT(Arg, N) BOOST_PP_CAT(child, N);                                    \
+            /**< INTERNAL ONLY */
+
+        #define BOOST_PROTO_DEFINE_VOID_N(z, n, data)                                               \
+            typedef mpl::void_ BOOST_PP_CAT(child, n);                                              \
+            /**< INTERNAL ONLY */
+
+        namespace argsns_
+        {
+            /// \brief A type sequence, for use as the 2nd parameter to the \c expr\<\> class template.
+            ///
+            /// A type sequence, for use as the 2nd parameter to the \c expr\<\> class template.
+            /// The types in the sequence correspond to the children of a node in an expression tree.
+            template< typename Arg0 >
+            struct term
+            {
+                BOOST_STATIC_CONSTANT(long, arity = 0);
+                typedef Arg0 child0;
+
+                #if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500))
+                BOOST_PP_REPEAT_FROM_TO(1, BOOST_PROTO_MAX_ARITY, BOOST_PROTO_DEFINE_VOID_N, ~)
+                #endif
+
+                /// INTERNAL ONLY
+                ///
+                typedef Arg0 back_;
+            };
+
+            #define BOOST_PP_ITERATION_PARAMS_1 (3, (1, BOOST_PROTO_MAX_ARITY, <boost/proto/args.hpp>))
+            #include BOOST_PP_ITERATE()
+
+            #undef BOOST_PROTO_DEFINE_CHILD_N
+        }
+        ////////////////////////////////////////////////////////////////////////////////////////////
+    }}
+    #endif
+
+#else
+
+    #define N BOOST_PP_ITERATION()
+
+        /// \brief A type sequence, for use as the 2nd parameter to the \c expr\<\> class template.
+        ///
+        /// A type sequence, for use as the 2nd parameter to the \c expr\<\> class template.
+        /// The types in the sequence correspond to the children of a node in an expression tree.
+        template< BOOST_PP_ENUM_PARAMS(N, typename Arg) >
+        struct BOOST_PP_CAT(list, N)
+        {
+            BOOST_STATIC_CONSTANT(long, arity = N);
+            BOOST_PP_REPEAT(N, BOOST_PROTO_DEFINE_CHILD_N, ~)
+
+            #if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500))
+            BOOST_PP_REPEAT_FROM_TO(N, BOOST_PROTO_MAX_ARITY, BOOST_PROTO_DEFINE_VOID_N, ~)
+            #endif
+
+            /// INTERNAL ONLY
+            ///
+            typedef BOOST_PP_CAT(Arg, BOOST_PP_DEC(N)) back_;
+        };
+
+    #undef N
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/context.hpp b/3rdParty/Boost/src/boost/proto/context.hpp
new file mode 100644
index 0000000..8ac9200
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/context.hpp
@@ -0,0 +1,16 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file context.hpp
+/// Includes all the context classes in the context/ sub-directory.
+//
+//  Copyright 2008 Eric Niebler. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROTO_CONTEXT_HPP_EAN_06_23_2007
+#define BOOST_PROTO_CONTEXT_HPP_EAN_06_23_2007
+
+#include <boost/proto/context/null.hpp>
+#include <boost/proto/context/default.hpp>
+#include <boost/proto/context/callable.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/context/callable.hpp b/3rdParty/Boost/src/boost/proto/context/callable.hpp
new file mode 100644
index 0000000..67578ca
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/context/callable.hpp
@@ -0,0 +1,320 @@
+#ifndef BOOST_PP_IS_ITERATING
+    ///////////////////////////////////////////////////////////////////////////////
+    /// \file callable.hpp
+    /// Definintion of callable_context\<\>, an evaluation context for
+    /// proto::eval() that explodes each node and calls the derived context
+    /// type with the expressions constituents. If the derived context doesn't
+    /// have an overload that handles this node, fall back to some other
+    /// context.
+    //
+    //  Copyright 2008 Eric Niebler. Distributed under the Boost
+    //  Software License, Version 1.0. (See accompanying file
+    //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+    #ifndef BOOST_PROTO_CONTEXT_CALLABLE_HPP_EAN_06_23_2007
+    #define BOOST_PROTO_CONTEXT_CALLABLE_HPP_EAN_06_23_2007
+
+    #include <boost/config.hpp>
+    #include <boost/detail/workaround.hpp>
+    #include <boost/preprocessor/cat.hpp>
+    #include <boost/preprocessor/iteration/iterate.hpp>
+    #include <boost/preprocessor/facilities/intercept.hpp>
+    #include <boost/preprocessor/repetition/repeat.hpp>
+    #include <boost/preprocessor/repetition/enum_params.hpp>
+    #include <boost/preprocessor/repetition/enum_trailing.hpp>
+    #include <boost/preprocessor/repetition/enum_trailing_params.hpp>
+    #include <boost/preprocessor/arithmetic/inc.hpp>
+    #include <boost/preprocessor/selection/max.hpp>
+    #include <boost/mpl/if.hpp>
+    #include <boost/mpl/bool.hpp>
+    #include <boost/utility/result_of.hpp>
+    #include <boost/type_traits/remove_cv.hpp>
+    #include <boost/proto/proto_fwd.hpp>
+    #include <boost/proto/traits.hpp> // for child_c
+
+    namespace boost { namespace proto
+    {
+        namespace detail
+        {
+            template<typename Context>
+            struct callable_context_wrapper
+              : remove_cv<Context>::type
+            {
+                callable_context_wrapper();
+                typedef private_type_ fun_type(...);
+                operator fun_type *() const;
+            private:
+                callable_context_wrapper &operator =(callable_context_wrapper const &);
+            };
+
+            template<typename T>
+            yes_type check_is_expr_handled(T const &);
+
+            no_type check_is_expr_handled(private_type_ const &);
+
+            template<typename Expr, typename Context, long Arity = Expr::proto_arity_c>
+            struct is_expr_handled;
+
+            template<typename Expr, typename Context>
+            struct is_expr_handled<Expr, Context, 0>
+            {
+                static callable_context_wrapper<Context> &sctx_;
+                static Expr &sexpr_;
+                static typename Expr::proto_tag &stag_;
+
+                BOOST_STATIC_CONSTANT(bool, value =
+                (
+                    sizeof(yes_type) ==
+                    sizeof(
+                        detail::check_is_expr_handled(
+                            (sctx_(stag_, proto::value(sexpr_)), 0)
+                        )
+                )));
+
+                typedef mpl::bool_<value> type;
+            };
+        }
+
+        namespace context
+        {
+            /// \brief A BinaryFunction that accepts a Proto expression and a
+            /// callable context and calls the context with the expression tag
+            /// and children as arguments, effectively fanning the expression
+            /// out.
+            ///
+            /// <tt>callable_eval\<\></tt> requires that \c Context is a
+            /// PolymorphicFunctionObject that can be invoked with \c Expr's
+            /// tag and children as expressions, as follows:
+            ///
+            /// \code
+            /// context(Expr::proto_tag(), child_c<0>(expr), child_c<1>(expr), ...)
+            /// \endcode
+            template<
+                typename Expr
+              , typename Context
+              , long Arity          // = Expr::proto_arity_c
+            >
+            struct callable_eval
+            {};
+
+            /// \brief A BinaryFunction that accepts a Proto expression and a
+            /// callable context and calls the context with the expression tag
+            /// and children as arguments, effectively fanning the expression
+            /// out.
+            ///
+            /// <tt>callable_eval\<\></tt> requires that \c Context is a
+            /// PolymorphicFunctionObject that can be invoked with \c Expr's
+            /// tag and children as expressions, as follows:
+            ///
+            /// \code
+            /// context(Expr::proto_tag(), value(expr))
+            /// \endcode
+            template<typename Expr, typename Context>
+            struct callable_eval<Expr, Context, 0>
+            {
+                typedef typename proto::result_of::value<Expr const &>::type value_type;
+
+                typedef
+                    typename BOOST_PROTO_RESULT_OF<
+                        Context(typename Expr::proto_tag, value_type)
+                    >::type
+                result_type;
+
+                /// \param expr The current expression
+                /// \param context The callable evaluation context
+                /// \return <tt>context(Expr::proto_tag(), value(expr))</tt>
+                result_type operator ()(Expr &expr, Context &context) const
+                {
+                    return context(typename Expr::proto_tag(), proto::value(expr));
+                }
+            };
+
+            /// \brief An evaluation context adaptor that makes authoring a
+            /// context a simple matter of writing function overloads, rather
+            /// then writing template specializations.
+            ///
+            /// <tt>callable_context\<\></tt> is a base class that implements
+            /// the context protocol by passing fanned-out expression nodes to
+            /// the derived context, making it easy to customize the handling
+            /// of expression types by writing function overloads. Only those
+            /// expression types needing special handling require explicit
+            /// handling. All others are dispatched to a user-specified
+            /// default context, \c DefaultCtx.
+            ///
+            /// <tt>callable_context\<\></tt> is defined simply as:
+            ///
+            /// \code
+            /// template<typename Context, typename DefaultCtx = default_context>
+            /// struct callable_context
+            /// {
+            ///    template<typename Expr, typename ThisContext = Context>
+            ///     struct eval
+            ///       : mpl::if_<
+            ///             is_expr_handled_<Expr, Context> // For exposition
+            ///           , callable_eval<Expr, ThisContext>
+            ///           , typename DefaultCtx::template eval<Expr, Context>
+            ///         >::type
+            ///     {};
+            /// };
+            /// \endcode
+            ///
+            /// The Boolean metafunction <tt>is_expr_handled_\<\></tt> uses
+            /// metaprogramming tricks to determine whether \c Context has
+            /// an overloaded function call operator that accepts the
+            /// fanned-out constituents of an expression of type \c Expr.
+            /// If so, the handling of the expression is dispatched to
+            /// <tt>callable_eval\<\></tt>. If not, it is dispatched to
+            /// the user-specified \c DefaultCtx.
+            ///
+            /// Below is an example of how to use <tt>callable_context\<\></tt>:
+            ///
+            /// \code
+            /// // An evaluation context that increments all
+            /// // integer terminals in-place.
+            /// struct increment_ints
+            ///  : callable_context<
+            ///         increment_ints const    // derived context
+            ///       , null_context const      // fall-back context
+            ///     >
+            /// {
+            ///     typedef void result_type;
+            ///
+            ///     // Handle int terminals here:
+            ///     void operator()(proto::tag::terminal, int &i) const
+            ///     {
+            ///        ++i;
+            ///     }
+            /// };
+            /// \endcode
+            ///
+            /// With \c increment_ints, we can do the following:
+            ///
+            /// \code
+            /// literal<int> i = 0, j = 10;
+            /// proto::eval( i - j * 3.14, increment_ints() );
+            ///
+            /// assert( i.get() == 1 && j.get() == 11 );
+            /// \endcode
+            template<
+                typename Context
+              , typename DefaultCtx // = default_context
+            >
+            struct callable_context
+            {
+                /// A BinaryFunction that accepts an \c Expr and a
+                /// \c Context, and either fans out the expression and passes
+                /// it to the context, or else hands off the expression to
+                /// \c DefaultCtx.
+                ///
+                /// If \c Context is a PolymorphicFunctionObject such that
+                /// it can be invoked with the tag and children of \c Expr,
+                /// as <tt>ctx(Expr::proto_tag(), child_c\<0\>(expr), child_c\<1\>(expr)...)</tt>,
+                /// then <tt>eval\<Expr, ThisContext\></tt> inherits from
+                /// <tt>callable_eval\<Expr, ThisContext\></tt>. Otherwise,
+                /// <tt>eval\<Expr, ThisContext\></tt> inherits from
+                /// <tt>DefaultCtx::eval\<Expr, Context\></tt>.
+                template<typename Expr, typename ThisContext = Context>
+                struct eval
+                  : mpl::if_c<
+                        detail::is_expr_handled<Expr, Context>::value
+                      , callable_eval<Expr, ThisContext>
+                      , typename DefaultCtx::template eval<Expr, Context>
+                    >::type
+                {};
+            };
+        }
+
+    #define BOOST_PROTO_CHILD_N_TYPE(Z, N, Expr)                                                    \
+        typedef typename proto::result_of::child_c<Expr const &, N>::type BOOST_PP_CAT(child, N);   \
+        /**/
+
+    #define BOOST_PROTO_CHILD_N(Z, N, expr)                                                         \
+        proto::child_c<N>(expr)                                                                     \
+        /**/
+
+    #define BOOST_PP_ITERATION_PARAMS_1                                                             \
+        (3, (1, BOOST_PROTO_MAX_ARITY, <boost/proto/context/callable.hpp>))                         \
+        /**/
+
+    #include BOOST_PP_ITERATE()
+
+    #undef BOOST_PROTO_CHILD_N_TYPE
+    #undef BOOST_PROTO_CHILD_N
+
+    }}
+
+    #endif
+
+#else
+
+    #define N BOOST_PP_ITERATION()
+
+        namespace detail
+        {
+            template<typename Expr, typename Context>
+            struct is_expr_handled<Expr, Context, N>
+            {
+                static callable_context_wrapper<Context> &sctx_;
+                static Expr &sexpr_;
+                static typename Expr::proto_tag &stag_;
+
+                BOOST_STATIC_CONSTANT(bool, value =
+                (
+                    sizeof(yes_type) ==
+                    sizeof(
+                        detail::check_is_expr_handled(
+                            (sctx_(
+                                stag_
+                                BOOST_PP_ENUM_TRAILING(N, BOOST_PROTO_CHILD_N, sexpr_)
+                            ), 0)
+                        )
+                )));
+
+                typedef mpl::bool_<value> type;
+            };
+        }
+
+        namespace context
+        {
+            /// \brief A BinaryFunction that accepts a Proto expression and a
+            /// callable context and calls the context with the expression tag
+            /// and children as arguments, effectively fanning the expression
+            /// out.
+            ///
+            /// <tt>callable_eval\<\></tt> requires that \c Context is a
+            /// PolymorphicFunctionObject that can be invoked with \c Expr's
+            /// tag and children as expressions, as follows:
+            ///
+            /// \code
+            /// context(Expr::proto_tag(), child_c\<0\>(expr), child_c\<1\>(expr), ...)
+            /// \endcode
+            template<typename Expr, typename Context>
+            struct callable_eval<Expr, Context, N>
+            {
+                BOOST_PP_REPEAT(N, BOOST_PROTO_CHILD_N_TYPE, Expr)
+
+                typedef
+                    typename BOOST_PROTO_RESULT_OF<
+                        Context(
+                            typename Expr::proto_tag
+                            BOOST_PP_ENUM_TRAILING_PARAMS(N, child)
+                        )
+                    >::type
+                result_type;
+
+                /// \param expr The current expression
+                /// \param context The callable evaluation context
+                /// \return <tt>context(Expr::proto_tag(), child_c\<0\>(expr), child_c\<1\>(expr), ...)</tt>
+                result_type operator ()(Expr &expr, Context &context) const
+                {
+                    return context(
+                        typename Expr::proto_tag()
+                        BOOST_PP_ENUM_TRAILING(N, BOOST_PROTO_CHILD_N, expr)
+                    );
+                }
+            };
+        }
+
+    #undef N
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/context/default.hpp b/3rdParty/Boost/src/boost/proto/context/default.hpp
new file mode 100644
index 0000000..fa13506
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/context/default.hpp
@@ -0,0 +1,463 @@
+#ifndef BOOST_PP_IS_ITERATING
+    ///////////////////////////////////////////////////////////////////////////////
+    /// \file default.hpp
+    /// Definintion of default_context, a default evaluation context for
+    /// proto::eval() that uses Boost.Typeof to deduce return types
+    /// of the built-in operators.
+    //
+    //  Copyright 2008 Eric Niebler. Distributed under the Boost
+    //  Software License, Version 1.0. (See accompanying file
+    //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+    #ifndef BOOST_PROTO_CONTEXT_DEFAULT_HPP_EAN_01_08_2007
+    #define BOOST_PROTO_CONTEXT_DEFAULT_HPP_EAN_01_08_2007
+
+    #include <boost/config.hpp>
+    #include <boost/preprocessor/arithmetic/add.hpp>
+    #include <boost/preprocessor/arithmetic/sub.hpp>
+    #include <boost/preprocessor/iteration/iterate.hpp>
+    #include <boost/preprocessor/repetition/enum.hpp>
+    #include <boost/preprocessor/repetition/enum_shifted.hpp>
+    #include <boost/utility/result_of.hpp>
+    #include <boost/type_traits/is_const.hpp>
+    #include <boost/type_traits/is_function.hpp>
+    #include <boost/type_traits/remove_reference.hpp>
+    #include <boost/type_traits/is_member_pointer.hpp>
+    #include <boost/type_traits/is_member_object_pointer.hpp>
+    #include <boost/type_traits/is_member_function_pointer.hpp>
+    #include <boost/proto/proto_fwd.hpp>
+    #include <boost/proto/tags.hpp>
+    #include <boost/proto/eval.hpp>
+    #include <boost/proto/traits.hpp> // for proto::child_c()
+    #include <boost/proto/detail/decltype.hpp>
+
+    namespace boost { namespace proto
+    {
+    /// INTERNAL ONLY
+    ///
+    #define UNREF(x) typename boost::remove_reference<x>::type
+
+        namespace context
+        {
+            template<
+                typename Expr
+              , typename Context
+              , typename Tag        // = typename Expr::proto_tag
+              , long Arity          // = Expr::proto_arity_c
+            >
+            struct default_eval
+            {};
+
+            template<typename Expr, typename Context>
+            struct default_eval<Expr, Context, tag::terminal, 0>
+            {
+                typedef
+                    typename proto::result_of::value<Expr &>::type
+                result_type;
+
+                result_type operator ()(Expr &expr, Context &) const
+                {
+                    return proto::value(expr);
+                }
+            };
+
+            /// INTERNAL ONLY
+            ///
+        #define BOOST_PROTO_UNARY_DEFAULT_EVAL(OP, TAG, MAKE)                                       \
+            template<typename Expr, typename Context>                                               \
+            struct default_eval<Expr, Context, TAG, 1>                                              \
+            {                                                                                       \
+            private:                                                                                \
+                typedef typename proto::result_of::child_c<Expr, 0>::type e0;                       \
+                typedef typename proto::result_of::eval<UNREF(e0), Context>::type r0;               \
+            public:                                                                                 \
+                BOOST_PROTO_DECLTYPE_(OP proto::detail::MAKE<r0>(), result_type)                    \
+                result_type operator ()(Expr &expr, Context &ctx) const                             \
+                {                                                                                   \
+                    return OP proto::eval(proto::child_c<0>(expr), ctx);                            \
+                }                                                                                   \
+            };                                                                                      \
+            /**/
+
+            /// INTERNAL ONLY
+            ///
+        #define BOOST_PROTO_BINARY_DEFAULT_EVAL(OP, TAG, LMAKE, RMAKE)                              \
+            template<typename Expr, typename Context>                                               \
+            struct default_eval<Expr, Context, TAG, 2>                                              \
+            {                                                                                       \
+            private:                                                                                \
+                typedef typename proto::result_of::child_c<Expr, 0>::type e0;                       \
+                typedef typename proto::result_of::child_c<Expr, 1>::type e1;                       \
+                typedef typename proto::result_of::eval<UNREF(e0), Context>::type r0;               \
+                typedef typename proto::result_of::eval<UNREF(e1), Context>::type r1;               \
+            public:                                                                                 \
+                BOOST_PROTO_DECLTYPE_(                                                              \
+                    proto::detail::LMAKE<r0>() OP proto::detail::RMAKE<r1>()                        \
+                  , result_type                                                                     \
+                )                                                                                   \
+                result_type operator ()(Expr &expr, Context &ctx) const                             \
+                {                                                                                   \
+                    return proto::eval(                                                             \
+                        proto::child_c<0>(expr), ctx) OP proto::eval(proto::child_c<1>(expr)        \
+                      , ctx                                                                         \
+                    );                                                                              \
+                }                                                                                   \
+            };                                                                                      \
+            /**/
+
+            BOOST_PROTO_UNARY_DEFAULT_EVAL(+, proto::tag::unary_plus, make)
+            BOOST_PROTO_UNARY_DEFAULT_EVAL(-, proto::tag::negate, make)
+            BOOST_PROTO_UNARY_DEFAULT_EVAL(*, proto::tag::dereference, make)
+            BOOST_PROTO_UNARY_DEFAULT_EVAL(~, proto::tag::complement, make)
+            BOOST_PROTO_UNARY_DEFAULT_EVAL(&, proto::tag::address_of, make)
+            BOOST_PROTO_UNARY_DEFAULT_EVAL(!, proto::tag::logical_not, make)
+            BOOST_PROTO_UNARY_DEFAULT_EVAL(++, proto::tag::pre_inc, make_mutable)
+            BOOST_PROTO_UNARY_DEFAULT_EVAL(--, proto::tag::pre_dec, make_mutable)
+
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(<<, proto::tag::shift_left, make_mutable, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(>>, proto::tag::shift_right, make_mutable, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(*, proto::tag::multiplies, make, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(/, proto::tag::divides, make, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(%, proto::tag::modulus, make, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(+, proto::tag::plus, make, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(-, proto::tag::minus, make, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(<, proto::tag::less, make, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(>, proto::tag::greater, make, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(<=, proto::tag::less_equal, make, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(>=, proto::tag::greater_equal, make, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(==, proto::tag::equal_to, make, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(!=, proto::tag::not_equal_to, make, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(||, proto::tag::logical_or, make, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(&&, proto::tag::logical_and, make, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(&, proto::tag::bitwise_and, make, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(|, proto::tag::bitwise_or, make, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(^, proto::tag::bitwise_xor, make, make)
+
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(=, proto::tag::assign, make_mutable, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(<<=, proto::tag::shift_left_assign, make_mutable, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(>>=, proto::tag::shift_right_assign, make_mutable, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(*=, proto::tag::multiplies_assign, make_mutable, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(/=, proto::tag::divides_assign, make_mutable, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(%=, proto::tag::modulus_assign, make_mutable, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(+=, proto::tag::plus_assign, make_mutable, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(-=, proto::tag::minus_assign, make_mutable, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(&=, proto::tag::bitwise_and_assign, make_mutable, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(|=, proto::tag::bitwise_or_assign, make_mutable, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(^=, proto::tag::bitwise_xor_assign, make_mutable, make)
+
+        #undef BOOST_PROTO_UNARY_DEFAULT_EVAL
+        #undef BOOST_PROTO_BINARY_DEFAULT_EVAL
+
+            /// INTERNAL ONLY
+            template<typename Expr, typename Context>
+            struct is_member_function_eval
+              : is_member_function_pointer<
+                    typename detail::uncvref<
+                        typename proto::result_of::eval<
+                            typename remove_reference<
+                                typename proto::result_of::child_c<Expr, 1>::type
+                            >::type
+                          , Context
+                        >::type
+                    >::type
+                >
+            {};
+
+            /// INTERNAL ONLY
+            template<typename Expr, typename Context, bool IsMemFunCall>
+            struct memfun_eval
+            {
+            private:
+                typedef typename result_of::child_c<Expr, 0>::type e0;
+                typedef typename result_of::child_c<Expr, 1>::type e1;
+                typedef typename proto::result_of::eval<UNREF(e0), Context>::type r0;
+                typedef typename proto::result_of::eval<UNREF(e1), Context>::type r1;
+            public:
+                typedef typename detail::mem_ptr_fun<r0, r1>::result_type result_type;
+                result_type operator ()(Expr &expr, Context &ctx) const
+                {
+                    return detail::mem_ptr_fun<r0, r1>()(
+                        proto::eval(proto::child_c<0>(expr), ctx)
+                      , proto::eval(proto::child_c<1>(expr), ctx)
+                    );
+                }
+            };
+
+            /// INTERNAL ONLY
+            template<typename Expr, typename Context>
+            struct memfun_eval<Expr, Context, true>
+            {
+            private:
+                typedef typename result_of::child_c<Expr, 0>::type e0;
+                typedef typename result_of::child_c<Expr, 1>::type e1;
+                typedef typename proto::result_of::eval<UNREF(e0), Context>::type r0;
+                typedef typename proto::result_of::eval<UNREF(e1), Context>::type r1;
+            public:
+                typedef detail::memfun<r0, r1> result_type;
+                result_type const operator ()(Expr &expr, Context &ctx) const
+                {
+                    return detail::memfun<r0, r1>(
+                        proto::eval(proto::child_c<0>(expr), ctx)
+                      , proto::eval(proto::child_c<1>(expr), ctx)
+                    );
+                }
+            };
+
+            template<typename Expr, typename Context>
+            struct default_eval<Expr, Context, tag::mem_ptr, 2>
+              : memfun_eval<Expr, Context, is_member_function_eval<Expr, Context>::value>
+            {};
+
+            // Handle post-increment specially.
+            template<typename Expr, typename Context>
+            struct default_eval<Expr, Context, proto::tag::post_inc, 1>
+            {
+            private:
+                typedef typename proto::result_of::child_c<Expr, 0>::type e0;
+                typedef typename proto::result_of::eval<UNREF(e0), Context>::type r0;
+            public:
+                BOOST_PROTO_DECLTYPE_(proto::detail::make_mutable<r0>() ++, result_type)
+                result_type operator ()(Expr &expr, Context &ctx) const
+                {
+                    return proto::eval(proto::child_c<0>(expr), ctx) ++;
+                }
+            };
+
+            // Handle post-decrement specially.
+            template<typename Expr, typename Context>
+            struct default_eval<Expr, Context, proto::tag::post_dec, 1>
+            {
+            private:
+                typedef typename proto::result_of::child_c<Expr, 0>::type e0;
+                typedef typename proto::result_of::eval<UNREF(e0), Context>::type r0;
+            public:
+                BOOST_PROTO_DECLTYPE_(proto::detail::make_mutable<r0>() --, result_type)
+                result_type operator ()(Expr &expr, Context &ctx) const
+                {
+                    return proto::eval(proto::child_c<0>(expr), ctx) --;
+                }
+            };
+
+            // Handle subscript specially.
+            template<typename Expr, typename Context>
+            struct default_eval<Expr, Context, proto::tag::subscript, 2>
+            {
+            private:
+                typedef typename proto::result_of::child_c<Expr, 0>::type e0;
+                typedef typename proto::result_of::child_c<Expr, 1>::type e1;
+                typedef typename proto::result_of::eval<UNREF(e0), Context>::type r0;
+                typedef typename proto::result_of::eval<UNREF(e1), Context>::type r1;
+            public:
+                BOOST_PROTO_DECLTYPE_(proto::detail::make_subscriptable<r0>()[proto::detail::make<r1>()], result_type)
+                result_type operator ()(Expr &expr, Context &ctx) const
+                {
+                    return proto::eval(proto::child_c<0>(expr), ctx)[proto::eval(proto::child_c<1>(expr), ctx)];
+                }
+            };
+
+            // Handle if_else_ specially.
+            template<typename Expr, typename Context>
+            struct default_eval<Expr, Context, proto::tag::if_else_, 3>
+            {
+            private:
+                typedef typename proto::result_of::child_c<Expr, 0>::type e0;
+                typedef typename proto::result_of::child_c<Expr, 1>::type e1;
+                typedef typename proto::result_of::child_c<Expr, 2>::type e2;
+                typedef typename proto::result_of::eval<UNREF(e0), Context>::type r0;
+                typedef typename proto::result_of::eval<UNREF(e1), Context>::type r1;
+                typedef typename proto::result_of::eval<UNREF(e2), Context>::type r2;
+            public:
+                BOOST_PROTO_DECLTYPE_(
+                    proto::detail::make<r0>()
+                  ? proto::detail::make<r1>()
+                  : proto::detail::make<r2>()
+                  , result_type
+                )
+                result_type operator ()(Expr &expr, Context &ctx) const
+                {
+                    return proto::eval(proto::child_c<0>(expr), ctx)
+                         ? proto::eval(proto::child_c<1>(expr), ctx)
+                         : proto::eval(proto::child_c<2>(expr), ctx);
+                }
+            };
+
+            // Handle comma specially.
+            template<typename Expr, typename Context>
+            struct default_eval<Expr, Context, proto::tag::comma, 2>
+            {
+            private:
+                typedef typename proto::result_of::child_c<Expr, 0>::type e0;
+                typedef typename proto::result_of::child_c<Expr, 1>::type e1;
+                typedef typename proto::result_of::eval<UNREF(e0), Context>::type r0;
+                typedef typename proto::result_of::eval<UNREF(e1), Context>::type r1;
+            public:
+                typedef typename proto::detail::comma_result<r0, r1>::type result_type;
+                result_type operator ()(Expr &expr, Context &ctx) const
+                {
+                    return proto::eval(proto::child_c<0>(expr), ctx), proto::eval(proto::child_c<1>(expr), ctx);
+                }
+            };
+
+            // Handle function specially
+            #define BOOST_PROTO_DEFAULT_EVAL_TYPE(Z, N, DATA)                                       \
+                typename proto::result_of::eval<                                                    \
+                    typename remove_reference<                                                      \
+                        typename proto::result_of::child_c<DATA, N>::type                           \
+                    >::type                                                                         \
+                  , Context                                                                         \
+                >::type                                                                             \
+                /**/
+
+            #define BOOST_PROTO_DEFAULT_EVAL(Z, N, DATA)                                            \
+                proto::eval(proto::child_c<N>(DATA), context)                                       \
+                /**/
+
+            template<typename Expr, typename Context>
+            struct default_eval<Expr, Context, proto::tag::function, 1>
+            {
+                typedef
+                    typename proto::detail::result_of_fixup<
+                        BOOST_PROTO_DEFAULT_EVAL_TYPE(~, 0, Expr)
+                    >::type
+                function_type;
+
+                typedef
+                    typename BOOST_PROTO_RESULT_OF<function_type()>::type
+                result_type;
+
+                result_type operator ()(Expr &expr, Context &context) const
+                {
+                    return BOOST_PROTO_DEFAULT_EVAL(~, 0, expr)();
+                }
+            };
+
+            template<typename Expr, typename Context>
+            struct default_eval<Expr, Context, proto::tag::function, 2>
+            {
+                typedef
+                    typename proto::detail::result_of_fixup<
+                        BOOST_PROTO_DEFAULT_EVAL_TYPE(~, 0, Expr)
+                    >::type
+                function_type;
+
+                typedef
+                    typename detail::result_of_<
+                        function_type(BOOST_PROTO_DEFAULT_EVAL_TYPE(~, 1, Expr))
+                    >::type
+                result_type;
+
+                result_type operator ()(Expr &expr, Context &context) const
+                {
+                    return this->invoke(
+                        expr
+                      , context
+                      , is_member_function_pointer<function_type>()
+                      , is_member_object_pointer<function_type>()
+                    );
+                }
+
+            private:
+                result_type invoke(Expr &expr, Context &context, mpl::false_, mpl::false_) const
+                {
+                    return BOOST_PROTO_DEFAULT_EVAL(~, 0, expr)(BOOST_PROTO_DEFAULT_EVAL(~, 1, expr));
+                }
+
+                result_type invoke(Expr &expr, Context &context, mpl::true_, mpl::false_) const
+                {
+                    BOOST_PROTO_USE_GET_POINTER();
+                    typedef typename detail::classtypeof<function_type>::type class_type;
+                    return (
+                        BOOST_PROTO_GET_POINTER(class_type, BOOST_PROTO_DEFAULT_EVAL(~, 1, expr)) ->* 
+                        BOOST_PROTO_DEFAULT_EVAL(~, 0, expr)
+                    )();
+                }
+
+                result_type invoke(Expr &expr, Context &context, mpl::false_, mpl::true_) const
+                {
+                    BOOST_PROTO_USE_GET_POINTER();
+                    typedef typename detail::classtypeof<function_type>::type class_type;
+                    return (
+                        BOOST_PROTO_GET_POINTER(class_type, BOOST_PROTO_DEFAULT_EVAL(~, 1, expr)) ->*
+                        BOOST_PROTO_DEFAULT_EVAL(~, 0, expr)
+                    );
+                }
+            };
+
+            #define BOOST_PP_ITERATION_PARAMS_1 (3, (3, BOOST_PROTO_MAX_ARITY, <boost/proto/context/default.hpp>))
+            #include BOOST_PP_ITERATE()
+
+            #undef BOOST_PROTO_DEFAULT_EVAL_TYPE
+            #undef BOOST_PROTO_DEFAULT_EVAL
+
+            /// default_context
+            ///
+            struct default_context
+            {
+                /// default_context::eval
+                ///
+                template<typename Expr, typename ThisContext = default_context const>
+                struct eval
+                  : default_eval<Expr, ThisContext>
+                {};
+            };
+
+        } // namespace context
+
+    }} // namespace boost::proto
+
+    #undef UNREF
+
+    #endif
+
+#else
+
+    #define N BOOST_PP_ITERATION()
+
+        template<typename Expr, typename Context>
+        struct default_eval<Expr, Context, proto::tag::function, N>
+        {
+            typedef
+                typename proto::detail::result_of_fixup<
+                    BOOST_PROTO_DEFAULT_EVAL_TYPE(~, 0, Expr)
+                >::type
+            function_type;
+
+            typedef
+                typename BOOST_PROTO_RESULT_OF<
+                    function_type(BOOST_PP_ENUM_SHIFTED(N, BOOST_PROTO_DEFAULT_EVAL_TYPE, Expr))
+                >::type
+            result_type;
+
+            result_type operator ()(Expr &expr, Context &context) const
+            {
+                return this->invoke(expr, context, is_member_function_pointer<function_type>());
+            }
+
+        private:
+            result_type invoke(Expr &expr, Context &context, mpl::false_) const
+            {
+                return BOOST_PROTO_DEFAULT_EVAL(~, 0, expr)(
+                    BOOST_PP_ENUM_SHIFTED(N, BOOST_PROTO_DEFAULT_EVAL, expr)
+                );
+            }
+
+            result_type invoke(Expr &expr, Context &context, mpl::true_) const
+            {
+                #define M0(Z, M, DATA)                                                              \
+                    BOOST_PROTO_DEFAULT_EVAL(Z, BOOST_PP_ADD(M, 2), DATA)                           \
+                    /**/
+
+                BOOST_PROTO_USE_GET_POINTER();
+                typedef typename detail::classtypeof<function_type>::type class_type;
+                return (
+                    BOOST_PROTO_GET_POINTER(class_type, BOOST_PROTO_DEFAULT_EVAL(~, 1, expr)) ->*
+                    BOOST_PROTO_DEFAULT_EVAL(~, 0, expr)
+                )(BOOST_PP_ENUM(BOOST_PP_SUB(N, 2), M0, expr));
+
+                #undef M0
+            }
+        };
+
+    #undef N
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/context/null.hpp b/3rdParty/Boost/src/boost/proto/context/null.hpp
new file mode 100644
index 0000000..4906578
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/context/null.hpp
@@ -0,0 +1,85 @@
+#ifndef BOOST_PP_IS_ITERATING
+    ///////////////////////////////////////////////////////////////////////////////
+    /// \file null.hpp
+    /// Definintion of null_context\<\>, an evaluation context for
+    /// proto::eval() that simply evaluates each child expression, doesn't
+    /// combine the results at all, and returns void.
+    //
+    //  Copyright 2008 Eric Niebler. Distributed under the Boost
+    //  Software License, Version 1.0. (See accompanying file
+    //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+    #ifndef BOOST_PROTO_CONTEXT_NULL_HPP_EAN_06_24_2007
+    #define BOOST_PROTO_CONTEXT_NULL_HPP_EAN_06_24_2007
+
+    #include <boost/preprocessor/iteration/iterate.hpp>
+    #include <boost/preprocessor/repetition/repeat.hpp>
+    #include <boost/proto/proto_fwd.hpp>
+    #include <boost/proto/eval.hpp>
+    #include <boost/proto/traits.hpp>
+
+    namespace boost { namespace proto { namespace context
+    {
+
+        template<
+            typename Expr
+          , typename Context
+          , long Arity          // = Expr::proto_arity_c
+        >
+        struct null_eval
+        {};
+
+        template<typename Expr, typename Context>
+        struct null_eval<Expr, Context, 0>
+        {
+            typedef void result_type;
+            void operator()(Expr &, Context &) const
+            {}
+        };
+
+    #define BOOST_PROTO_EVAL_N(Z, N, DATA)                                                          \
+        proto::eval(proto::child_c<N>(expr), ctx);                                                    \
+        /**/
+
+    #define BOOST_PP_ITERATION_PARAMS_1                                                             \
+        (3, (1, BOOST_PROTO_MAX_ARITY, <boost/proto/context/null.hpp>))                   \
+        /**/
+
+    #include BOOST_PP_ITERATE()
+
+    #undef BOOST_PROTO_EVAL_N
+
+        /// null_context
+        ///
+        struct null_context
+        {
+            /// null_context::eval
+            ///
+            template<typename Expr, typename ThisContext = null_context const>
+            struct eval
+              : null_eval<Expr, ThisContext>
+            {};
+        };
+
+    }}}
+
+    #endif
+
+#else
+
+    #define N BOOST_PP_ITERATION()
+
+        template<typename Expr, typename Context>
+        struct null_eval<Expr, Context, N>
+        {
+            typedef void result_type;
+
+            void operator ()(Expr &expr, Context &ctx) const
+            {
+                BOOST_PP_REPEAT(N, BOOST_PROTO_EVAL_N, ~)
+            }
+        };
+
+    #undef N
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/core.hpp b/3rdParty/Boost/src/boost/proto/core.hpp
new file mode 100644
index 0000000..615e7e8
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/core.hpp
@@ -0,0 +1,30 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file core.hpp
+/// Includes the core of Proto. Not included are the contexts, transforms and
+/// debugging utilities.
+//
+//  Copyright 2008 Eric Niebler. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROTO_CORE_HPP_EAN_04_01_2005
+#define BOOST_PROTO_CORE_HPP_EAN_04_01_2005
+
+#include <boost/proto/proto_fwd.hpp>
+#include <boost/proto/args.hpp>
+#include <boost/proto/tags.hpp>
+#include <boost/proto/eval.hpp>
+#include <boost/proto/expr.hpp>
+#include <boost/proto/repeat.hpp>
+#include <boost/proto/traits.hpp>
+#include <boost/proto/domain.hpp>
+#include <boost/proto/fusion.hpp>
+#include <boost/proto/matches.hpp>
+#include <boost/proto/extends.hpp>
+#include <boost/proto/literal.hpp>
+#include <boost/proto/generate.hpp>
+#include <boost/proto/operators.hpp>
+#include <boost/proto/deep_copy.hpp>
+#include <boost/proto/make_expr.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/debug.hpp b/3rdParty/Boost/src/boost/proto/debug.hpp
new file mode 100644
index 0000000..87f138a
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/debug.hpp
@@ -0,0 +1,264 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file debug.hpp
+/// Utilities for debugging Proto expression trees
+//
+//  Copyright 2008 Eric Niebler. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROTO_DEBUG_HPP_EAN_12_31_2006
+#define BOOST_PROTO_DEBUG_HPP_EAN_12_31_2006
+
+#include <iostream>
+#include <boost/preprocessor/stringize.hpp>
+#include <boost/ref.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/proto/proto_fwd.hpp>
+#include <boost/proto/traits.hpp>
+#include <boost/proto/matches.hpp>
+#include <boost/proto/fusion.hpp>
+#include <boost/fusion/algorithm/iteration/for_each.hpp>
+#include <boost/detail/sp_typeinfo.hpp>
+
+namespace boost { namespace proto
+{
+    namespace tag
+    {
+    #define BOOST_PROTO_DEFINE_TAG_INSERTION(Tag)                               \
+        /** \brief INTERNAL ONLY */                                             \
+        inline std::ostream &operator <<(std::ostream &sout, Tag const &)       \
+        {                                                                       \
+            return sout << BOOST_PP_STRINGIZE(Tag);                             \
+        }                                                                       \
+        /**/
+
+        BOOST_PROTO_DEFINE_TAG_INSERTION(terminal)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(unary_plus)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(negate)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(dereference)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(complement)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(address_of)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(logical_not)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(pre_inc)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(pre_dec)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(post_inc)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(post_dec)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(shift_left)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(shift_right)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(multiplies)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(divides)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(modulus)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(plus)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(minus)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(less)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(greater)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(less_equal)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(greater_equal)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(equal_to)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(not_equal_to)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(logical_or)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(logical_and)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(bitwise_and)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(bitwise_or)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(bitwise_xor)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(comma)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(mem_ptr)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(assign)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(shift_left_assign)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(shift_right_assign)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(multiplies_assign)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(divides_assign)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(modulus_assign)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(plus_assign)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(minus_assign)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(bitwise_and_assign)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(bitwise_or_assign)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(bitwise_xor_assign)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(subscript)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(member)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(if_else_)
+        BOOST_PROTO_DEFINE_TAG_INSERTION(function)
+
+    #undef BOOST_PROTO_DEFINE_TAG_INSERTION
+    }
+
+    namespace hidden_detail_
+    {
+        struct ostream_wrapper
+        {
+            ostream_wrapper(std::ostream &sout)
+              : sout_(sout)
+            {}
+
+            std::ostream &sout_;
+        };
+
+        struct named_any
+        {
+            template<typename T>
+            named_any(T const &)
+              : name_(BOOST_SP_TYPEID(T).name())
+            {}
+
+            char const *name_;
+        };
+
+        inline std::ostream &operator <<(ostream_wrapper sout_wrap, named_any t)
+        {
+            return sout_wrap.sout_ << t.name_;
+        }
+    }
+
+    namespace detail
+    {
+        struct display_expr_impl
+        {
+            explicit display_expr_impl(std::ostream &sout, int depth = 0)
+              : depth_(depth)
+              , first_(true)
+              , sout_(sout)
+            {}
+
+            template<typename Expr>
+            void operator()(Expr const &expr) const
+            {
+                this->impl(expr, mpl::long_<arity_of<Expr>::value>());
+            }
+
+        private:
+            display_expr_impl(display_expr_impl const &);
+            display_expr_impl &operator =(display_expr_impl const &);
+
+            template<typename Expr>
+            void impl(Expr const &expr, mpl::long_<0>) const
+            {
+                using namespace hidden_detail_;
+                typedef typename tag_of<Expr>::type tag;
+                this->sout_.width(this->depth_);
+                this->sout_ << (this->first_? "" : ", ");
+                this->sout_ << tag() << "(" << proto::value(expr) << ")\n";
+                this->first_ = false;
+            }
+
+            template<typename Expr, typename Arity>
+            void impl(Expr const &expr, Arity) const
+            {
+                using namespace hidden_detail_;
+                typedef typename tag_of<Expr>::type tag;
+                this->sout_.width(this->depth_);
+                this->sout_ << (this->first_? "" : ", ");
+                this->sout_ << tag() << "(\n";
+                display_expr_impl display(this->sout_, this->depth_ + 4);
+                fusion::for_each(expr, display);
+                this->sout_.width(this->depth_);
+                this->sout_ << "" << ")\n";
+                this->first_ = false;
+            }
+
+            int depth_;
+            mutable bool first_;
+            std::ostream &sout_;
+        };
+    }
+
+    namespace functional
+    {
+        /// \brief Pretty-print a Proto expression tree.
+        ///
+        /// A PolymorphicFunctionObject which accepts a Proto expression
+        /// tree and pretty-prints it to an \c ostream for debugging
+        /// purposes.
+        struct display_expr
+        {
+            BOOST_PROTO_CALLABLE()
+
+            typedef void result_type;
+
+            /// \param sout  The \c ostream to which the expression tree
+            ///              will be written.
+            /// \param depth The starting indentation depth for this node.
+            ///              Children nodes will be displayed at a starting
+            ///              depth of <tt>depth+4</tt>.
+            explicit display_expr(std::ostream &sout = std::cout, int depth = 0)
+              : depth_(depth)
+              , sout_(sout)
+            {}
+
+            /// \brief Pretty-print the current node in a Proto expression
+            /// tree.
+            template<typename Expr>
+            void operator()(Expr const &expr) const
+            {
+                detail::display_expr_impl(this->sout_, this->depth_)(expr);
+            }
+
+        private:
+            int depth_;
+            reference_wrapper<std::ostream> sout_;
+        };
+    }
+
+    /// \brief Pretty-print a Proto expression tree.
+    ///
+    /// \note Equivalent to <tt>functional::display_expr(0, sout)(expr)</tt>
+    /// \param expr The Proto expression tree to pretty-print
+    /// \param sout The \c ostream to which the output should be
+    ///             written. If not specified, defaults to
+    ///             <tt>std::cout</tt>.
+    template<typename Expr>
+    void display_expr(Expr const &expr, std::ostream &sout)
+    {
+        functional::display_expr(sout, 0)(expr);
+    }
+
+    /// \overload
+    ///
+    template<typename Expr>
+    void display_expr(Expr const &expr)
+    {
+        functional::display_expr()(expr);
+    }
+
+    /// \brief Assert at compile time that a particular expression
+    ///        matches the specified grammar.
+    ///
+    /// \note Equivalent to <tt>BOOST_MPL_ASSERT((proto::matches\<Expr, Grammar\>))</tt>
+    /// \param expr The Proto expression to check againts <tt>Grammar</tt>
+    template<typename Grammar, typename Expr>
+    void assert_matches(Expr const & /*expr*/)
+    {
+        BOOST_MPL_ASSERT((proto::matches<Expr, Grammar>));
+    }
+
+    /// \brief Assert at compile time that a particular expression
+    ///        does not match the specified grammar.
+    ///
+    /// \note Equivalent to <tt>BOOST_MPL_ASSERT_NOT((proto::matches\<Expr, Grammar\>))</tt>
+    /// \param expr The Proto expression to check againts <tt>Grammar</tt>
+    template<typename Grammar, typename Expr>
+    void assert_matches_not(Expr const & /*expr*/)
+    {
+        BOOST_MPL_ASSERT_NOT((proto::matches<Expr, Grammar>));
+    }
+
+    /// \brief Assert at compile time that a particular expression
+    ///        matches the specified grammar.
+    ///
+    /// \note Equivalent to <tt>proto::assert_matches\<Grammar\>(Expr)</tt>
+    /// \param Expr The Proto expression to check againts <tt>Grammar</tt>
+    /// \param Grammar The grammar used to validate Expr.
+    #define BOOST_PROTO_ASSERT_MATCHES(Expr, Grammar)                                               \
+        (true ? (void)0 : boost::proto::assert_matches<Grammar>(Expr))
+
+    /// \brief Assert at compile time that a particular expression
+    ///        does not match the specified grammar.
+    ///
+    /// \note Equivalent to <tt>proto::assert_matches_not\<Grammar\>(Expr)</tt>
+    /// \param Expr The Proto expression to check againts <tt>Grammar</tt>
+    /// \param Grammar The grammar used to validate Expr.
+    #define BOOST_PROTO_ASSERT_MATCHES_NOT(Expr, Grammar)                                           \
+        (true ? (void)0 : boost::proto::assert_matches_not<Grammar>(Expr))
+
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/deep_copy.hpp b/3rdParty/Boost/src/boost/proto/deep_copy.hpp
new file mode 100644
index 0000000..104881f
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/deep_copy.hpp
@@ -0,0 +1,213 @@
+#ifndef BOOST_PP_IS_ITERATING
+    ///////////////////////////////////////////////////////////////////////////////
+    /// \file deep_copy.hpp
+    /// Replace all nodes stored by reference by nodes stored by value.
+    //
+    //  Copyright 2008 Eric Niebler. Distributed under the Boost
+    //  Software License, Version 1.0. (See accompanying file
+    //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+    #ifndef BOOST_PROTO_DEEP_COPY_HPP_EAN_11_21_2006
+    #define BOOST_PROTO_DEEP_COPY_HPP_EAN_11_21_2006
+
+    #include <boost/preprocessor/cat.hpp>
+    #include <boost/preprocessor/repetition/enum.hpp>
+    #include <boost/preprocessor/iteration/iterate.hpp>
+    #include <boost/mpl/if.hpp>
+    #include <boost/type_traits/remove_reference.hpp>
+    #include <boost/proto/proto_fwd.hpp>
+    #include <boost/proto/args.hpp>
+    #include <boost/proto/expr.hpp>
+
+    namespace boost { namespace proto
+    {
+        namespace detail
+        {
+            template<typename Expr, long Arity = Expr::proto_arity_c>
+            struct deep_copy_impl;
+
+            template<typename Expr>
+            struct deep_copy_impl<Expr, 0>
+            {
+                typedef
+                    typename base_expr<
+                        typename Expr::proto_domain
+                      , tag::terminal
+                      , term<typename term_traits<typename Expr::proto_child0>::value_type>
+                    >::type
+                expr_type;
+
+                typedef typename Expr::proto_generator proto_generator;
+                typedef typename proto_generator::template result<proto_generator(expr_type)>::type result_type;
+
+                template<typename Expr2, typename S, typename D>
+                result_type operator()(Expr2 const &e, S const &, D const &) const
+                {
+                    return proto_generator()(expr_type::make(e.proto_base().child0));
+                }
+            };
+        }
+
+        namespace result_of
+        {
+            /// \brief A metafunction for calculating the return type
+            /// of \c proto::deep_copy().
+            ///
+            /// A metafunction for calculating the return type
+            /// of \c proto::deep_copy(). The type parameter \c Expr
+            /// should be the type of a Proto expression tree.
+            /// It should not be a reference type, nor should it
+            /// be cv-qualified.
+            template<typename Expr>
+            struct deep_copy
+            {
+                typedef
+                    typename detail::deep_copy_impl<
+                        BOOST_PROTO_UNCVREF(Expr)
+                    >::result_type
+                type;
+            };
+        }
+
+        namespace functional
+        {
+            /// \brief A PolymorphicFunctionObject type for deep-copying
+            /// Proto expression trees.
+            ///
+            /// A PolymorphicFunctionObject type for deep-copying
+            /// Proto expression trees. When a tree is deep-copied,
+            /// all internal nodes and most terminals held by reference
+            /// are instead held by value.
+            ///
+            /// \attention Terminals of reference-to-function type are
+            /// left unchanged. Terminals of reference-to-array type are
+            /// stored by value, which can cause a large amount of data
+            /// to be passed by value and stored on the stack.
+            struct deep_copy
+            {
+                BOOST_PROTO_CALLABLE()
+
+                template<typename Sig>
+                struct result;
+
+                template<typename This, typename Expr>
+                struct result<This(Expr)>
+                {
+                    typedef
+                        typename detail::deep_copy_impl<
+                            BOOST_PROTO_UNCVREF(Expr)
+                        >::result_type
+                    type;
+                };
+
+                /// \brief Deep-copies a Proto expression tree, turning all
+                /// nodes and terminals held by reference into ones held by
+                /// value.
+                template<typename Expr>
+                typename result_of::deep_copy<Expr>::type
+                operator()(Expr const &e) const
+                {
+                    return proto::detail::deep_copy_impl<Expr>()(e, 0, 0);
+                }
+            };
+        }
+
+        /// \brief A function for deep-copying
+        /// Proto expression trees.
+        ///
+        /// A function for deep-copying
+        /// Proto expression trees. When a tree is deep-copied,
+        /// all internal nodes and most terminals held by reference
+        /// are instead held by value.
+        ///
+        /// \attention Terminals of reference-to-function type are
+        /// left unchanged.
+        ///
+        /// \sa proto::functional::deep_copy.
+        template<typename Expr>
+        typename proto::result_of::deep_copy<Expr>::type
+        deep_copy(Expr const &e)
+        {
+            return proto::detail::deep_copy_impl<Expr>()(e, 0, 0);
+        }
+
+        /// \brief A PrimitiveTransform for deep-copying
+        /// Proto expression trees.
+        ///
+        /// A PrimitiveTransform for deep-copying
+        /// Proto expression trees. When a tree is deep-copied,
+        /// all internal nodes and most terminals held by reference
+        /// are instead held by value.
+        ///
+        /// \attention Terminals of reference-to-function type are
+        /// left unchanged.
+        ///
+        /// \sa proto::functional::deep_copy.
+        struct _deep_copy
+          : proto::transform<_deep_copy>
+        {
+            template<typename E, typename S, typename D>
+            struct impl
+              : detail::deep_copy_impl<BOOST_PROTO_UNCVREF(E)>
+            {};
+        };
+
+        namespace detail
+        {
+        #define BOOST_PROTO_DEFINE_DEEP_COPY_TYPE(Z, N, DATA)                                       \
+            typename deep_copy_impl<                                                                \
+                typename remove_reference<                                                          \
+                    typename Expr::BOOST_PP_CAT(proto_child, N)                                     \
+                >::type::proto_derived_expr                                                         \
+            >::result_type                                                                          \
+            /**/
+
+        #define BOOST_PROTO_DEFINE_DEEP_COPY_FUN(Z, N, DATA)                                        \
+            proto::deep_copy(e.proto_base().BOOST_PP_CAT(child, N))                                 \
+            /**/
+
+        #define BOOST_PP_ITERATION_PARAMS_1 (3, (1, BOOST_PROTO_MAX_ARITY, <boost/proto/deep_copy.hpp>))
+        #include BOOST_PP_ITERATE()
+
+        #undef BOOST_PROTO_DEFINE_DEEP_COPY_FUN
+        #undef BOOST_PROTO_DEFINE_DEEP_COPY_TYPE
+        }
+
+    }}
+
+    #endif // BOOST_PROTO_COMPILER_DEEP_COPY_HPP_EAN_11_21_2006
+
+#else
+
+    #define N BOOST_PP_ITERATION()
+
+            template<typename Expr>
+            struct deep_copy_impl<Expr, N>
+            {
+                typedef
+                    typename base_expr<
+                        typename Expr::proto_domain
+                      , typename Expr::proto_tag
+                      , BOOST_PP_CAT(list, N)<
+                            BOOST_PP_ENUM(N, BOOST_PROTO_DEFINE_DEEP_COPY_TYPE, ~)
+                        >
+                    >::type
+                expr_type;
+
+                typedef typename Expr::proto_generator proto_generator;
+                typedef typename proto_generator::template result<proto_generator(expr_type)>::type result_type;
+
+                template<typename Expr2, typename S, typename D>
+                result_type operator()(Expr2 const &e, S const &, D const &) const
+                {
+                    expr_type const that = {
+                        BOOST_PP_ENUM(N, BOOST_PROTO_DEFINE_DEEP_COPY_FUN, ~)
+                    };
+
+                    return proto_generator()(that);
+                }
+            };
+
+    #undef N
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/detail/as_expr.hpp b/3rdParty/Boost/src/boost/proto/detail/as_expr.hpp
new file mode 100644
index 0000000..1310fd2
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/detail/as_expr.hpp
@@ -0,0 +1,170 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file as_expr.hpp
+/// Contains definition of the as_expr\<\> and as_child\<\> helper class
+/// templates used to implement proto::domain's as_expr\<\> and as_child\<\>
+/// member templates.
+//
+//  Copyright 2010 Eric Niebler. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROTO_DETAIL_AS_EXPR_HPP_EAN_06_09_2010
+#define BOOST_PROTO_DETAIL_AS_EXPR_HPP_EAN_06_09_2010
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/proto/proto_fwd.hpp>
+#include <boost/proto/args.hpp>
+
+namespace boost { namespace proto { namespace detail
+{
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////
+    template<typename Generator>
+    struct base_generator
+    {
+        typedef Generator type;
+    };
+
+    template<typename Generator>
+    struct base_generator<use_basic_expr<Generator> >
+    {
+        typedef Generator type;
+    };
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////
+    template<typename T, typename Generator, bool WantsBasicExpr>
+    struct as_expr;
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////
+    template<typename T, typename Generator>
+    struct as_expr<T, Generator, false>
+    {
+        typedef typename term_traits<T &>::value_type value_type;
+        typedef proto::expr<proto::tag::terminal, term<value_type>, 0> expr_type;
+        typedef typename Generator::template result<Generator(expr_type)>::type result_type;
+
+        result_type operator()(T &t) const
+        {
+            return Generator()(expr_type::make(t));
+        }
+    };
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////
+    template<typename T, typename Generator>
+    struct as_expr<T, Generator, true>
+    {
+        typedef typename term_traits<T &>::value_type value_type;
+        typedef proto::basic_expr<proto::tag::terminal, term<value_type>, 0> expr_type;
+        typedef typename Generator::template result<Generator(expr_type)>::type result_type;
+
+        result_type operator()(T &t) const
+        {
+            return Generator()(expr_type::make(t));
+        }
+    };
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////
+    template<typename T>
+    struct as_expr<T, proto::default_generator, false>
+    {
+        typedef typename term_traits<T &>::value_type value_type;
+        typedef proto::expr<proto::tag::terminal, term<value_type>, 0> result_type;
+
+        result_type operator()(T &t) const
+        {
+            return result_type::make(t);
+        }
+    };
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////
+    template<typename T>
+    struct as_expr<T, proto::default_generator, true>
+    {
+        typedef typename term_traits<T &>::value_type value_type;
+        typedef proto::basic_expr<proto::tag::terminal, term<value_type>, 0> result_type;
+
+        result_type operator()(T &t) const
+        {
+            return result_type::make(t);
+        }
+    };
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////
+    template<typename T, typename Generator, bool WantsBasicExpr>
+    struct as_child;
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////
+    template<typename T, typename Generator>
+    struct as_child<T, Generator, false>
+    {
+    #if BOOST_WORKAROUND(BOOST_MSVC, == 1310)
+        typedef typename term_traits<T &>::reference reference;
+    #else
+        typedef T &reference;
+    #endif
+        typedef proto::expr<proto::tag::terminal, term<reference>, 0> expr_type;
+        typedef typename Generator::template result<Generator(expr_type)>::type result_type;
+
+        result_type operator()(T &t) const
+        {
+            return Generator()(expr_type::make(t));
+        }
+    };
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////
+    template<typename T, typename Generator>
+    struct as_child<T, Generator, true>
+    {
+    #if BOOST_WORKAROUND(BOOST_MSVC, == 1310)
+        typedef typename term_traits<T &>::reference reference;
+    #else
+        typedef T &reference;
+    #endif
+        typedef proto::basic_expr<proto::tag::terminal, term<reference>, 0> expr_type;
+        typedef typename Generator::template result<Generator(expr_type)>::type result_type;
+
+        result_type operator()(T &t) const
+        {
+            return Generator()(expr_type::make(t));
+        }
+    };
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////
+    template<typename T>
+    struct as_child<T, proto::default_generator, false>
+    {
+    #if BOOST_WORKAROUND(BOOST_MSVC, == 1310)
+        typedef typename term_traits<T &>::reference reference;
+    #else
+        typedef T &reference;
+    #endif
+        typedef proto::expr<proto::tag::terminal, term<reference>, 0> result_type;
+
+        result_type operator()(T &t) const
+        {
+            return result_type::make(t);
+        }
+    };
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////
+    template<typename T>
+    struct as_child<T, proto::default_generator, true>
+    {
+    #if BOOST_WORKAROUND(BOOST_MSVC, == 1310)
+        typedef typename term_traits<T &>::reference reference;
+    #else
+        typedef T &reference;
+    #endif
+        typedef proto::basic_expr<proto::tag::terminal, term<reference>, 0> result_type;
+
+        result_type operator()(T &t) const
+        {
+            return result_type::make(t);
+        }
+    };
+
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/detail/as_lvalue.hpp b/3rdParty/Boost/src/boost/proto/detail/as_lvalue.hpp
new file mode 100644
index 0000000..b4b3537
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/detail/as_lvalue.hpp
@@ -0,0 +1,32 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file as_lvalue.hpp
+/// Contains definition the as_lvalue() functions.
+//
+//  Copyright 2008 Eric Niebler. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROTO_TRANSFORM_AS_LVALUE_HPP_EAN_12_27_2007
+#define BOOST_PROTO_TRANSFORM_AS_LVALUE_HPP_EAN_12_27_2007
+
+#include <boost/proto/proto_fwd.hpp>
+
+namespace boost { namespace proto
+{
+    namespace detail
+    {
+        template<typename T>
+        T &as_lvalue(T &t)
+        {
+            return t;
+        }
+
+        template<typename T>
+        T const &as_lvalue(T const &t)
+        {
+            return t;
+        }
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/detail/decltype.hpp b/3rdParty/Boost/src/boost/proto/detail/decltype.hpp
new file mode 100644
index 0000000..b8ad6d4
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/detail/decltype.hpp
@@ -0,0 +1,522 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file decltype.hpp
+/// Contains definition the BOOST_PROTO_DECLTYPE_() macro and assorted helpers
+//
+//  Copyright 2008 Eric Niebler. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROTO_DETAIL_DECLTYPE_HPP_EAN_04_04_2008
+#define BOOST_PROTO_DETAIL_DECLTYPE_HPP_EAN_04_04_2008
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/get_pointer.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_trailing_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/preprocessor/iteration/local.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/type_traits/is_class.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/type_traits/is_function.hpp>
+#include <boost/type_traits/is_member_object_pointer.hpp>
+#include <boost/type_traits/add_const.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/typeof/typeof.hpp>
+#include <boost/utility/addressof.hpp>
+#include <boost/utility/result_of.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/proto/repeat.hpp>
+
+#ifndef BOOST_NO_DECLTYPE
+# define BOOST_PROTO_DECLTYPE_(EXPR, TYPE) typedef decltype(EXPR) TYPE;
+#else
+# define BOOST_PROTO_DECLTYPE_NESTED_TYPEDEF_TPL_(NESTED, EXPR)                                     \
+    BOOST_TYPEOF_NESTED_TYPEDEF_TPL(BOOST_PP_CAT(nested_and_hidden_, NESTED), EXPR)                 \
+    static int const sz = sizeof(boost::proto::detail::check_reference(EXPR));                      \
+    struct NESTED                                                                                   \
+      : boost::mpl::if_c<                                                                           \
+            1==sz                                                                                   \
+          , typename BOOST_PP_CAT(nested_and_hidden_, NESTED)::type &                               \
+          , typename BOOST_PP_CAT(nested_and_hidden_, NESTED)::type                                 \
+        >                                                                                           \
+    {};
+# define BOOST_PROTO_DECLTYPE_(EXPR, TYPE)                                                          \
+    BOOST_PROTO_DECLTYPE_NESTED_TYPEDEF_TPL_(BOOST_PP_CAT(nested_, TYPE), (EXPR))                   \
+    typedef typename BOOST_PP_CAT(nested_, TYPE)::type TYPE;
+#endif
+
+namespace boost { namespace proto
+{
+    namespace detail
+    {
+        namespace anyns
+        {
+            ////////////////////////////////////////////////////////////////////////////////////////////
+            struct any
+            {
+                any(...);
+                any operator=(any);
+                any operator[](any);
+                #define M0(Z, N, DATA) any operator()(BOOST_PP_ENUM_PARAMS_Z(Z, N, any BOOST_PP_INTERCEPT));
+                BOOST_PP_REPEAT(BOOST_PROTO_MAX_ARITY, M0, ~)
+                #undef M0
+
+                template<typename T>
+                operator T &() const volatile;
+
+                any operator+();
+                any operator-();
+                any operator*();
+                any operator&();
+                any operator~();
+                any operator!();
+                any operator++();
+                any operator--();
+                any operator++(int);
+                any operator--(int);
+
+                friend any operator<<(any, any);
+                friend any operator>>(any, any);
+                friend any operator*(any, any);
+                friend any operator/(any, any);
+                friend any operator%(any, any);
+                friend any operator+(any, any);
+                friend any operator-(any, any);
+                friend any operator<(any, any);
+                friend any operator>(any, any);
+                friend any operator<=(any, any);
+                friend any operator>=(any, any);
+                friend any operator==(any, any);
+                friend any operator!=(any, any);
+                friend any operator||(any, any);
+                friend any operator&&(any, any);
+                friend any operator&(any, any);
+                friend any operator|(any, any);
+                friend any operator^(any, any);
+                friend any operator,(any, any);
+                friend any operator->*(any, any);
+
+                friend any operator<<=(any, any);
+                friend any operator>>=(any, any);
+                friend any operator*=(any, any);
+                friend any operator/=(any, any);
+                friend any operator%=(any, any);
+                friend any operator+=(any, any);
+                friend any operator-=(any, any);
+                friend any operator&=(any, any);
+                friend any operator|=(any, any);
+                friend any operator^=(any, any);
+            };
+        }
+
+        using anyns::any;
+
+        ////////////////////////////////////////////////////////////////////////////////////////////
+        template<typename T>
+        struct as_mutable
+        {
+            typedef T &type;
+        };
+
+        template<typename T>
+        struct as_mutable<T &>
+        {
+            typedef T &type;
+        };
+
+        template<typename T>
+        struct as_mutable<T const &>
+        {
+            typedef T &type;
+        };
+
+        ////////////////////////////////////////////////////////////////////////////////////////////
+        template<typename T>
+        T make();
+
+        ////////////////////////////////////////////////////////////////////////////////////////////
+        template<typename T>
+        typename as_mutable<T>::type make_mutable();
+
+        ////////////////////////////////////////////////////////////////////////////////////////////
+        template<typename T>
+        struct subscript_wrapper
+          : T
+        {
+            using T::operator[];
+
+            #if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500))
+            any operator[](any const volatile &) const volatile;
+            #else
+            any operator[](any const &) const volatile;
+            #endif
+        };
+
+        ////////////////////////////////////////////////////////////////////////////////////////////
+        template<typename T>
+        struct as_subscriptable
+        {
+            typedef
+                typename mpl::if_c<
+                    is_class<T>::value
+                  , subscript_wrapper<T>
+                  , T
+                >::type
+            type;
+        };
+
+        template<typename T>
+        struct as_subscriptable<T const>
+        {
+            typedef
+                typename mpl::if_c<
+                    is_class<T>::value
+                  , subscript_wrapper<T> const
+                  , T const
+                >::type
+            type;
+        };
+
+        template<typename T>
+        struct as_subscriptable<T &>
+        {
+            typedef
+                typename mpl::if_c<
+                    is_class<T>::value
+                  , subscript_wrapper<T> &
+                  , T &
+                >::type
+            type;
+        };
+
+        template<typename T>
+        struct as_subscriptable<T const &>
+        {
+            typedef
+                typename mpl::if_c<
+                    is_class<T>::value
+                  , subscript_wrapper<T> const &
+                  , T const &
+                >::type
+            type;
+        };
+
+        ////////////////////////////////////////////////////////////////////////////////////////////
+        template<typename T>
+        typename as_subscriptable<T>::type make_subscriptable();
+
+        ////////////////////////////////////////////////////////////////////////////////////////////
+        template<typename T>
+        char check_reference(T &);
+
+        template<typename T>
+        char (&check_reference(T const &))[2];
+
+        namespace has_get_pointerns
+        {
+            using boost::get_pointer;
+            void *(&get_pointer(...))[2];
+
+            ////////////////////////////////////////////////////////////////////////////////////////////
+            template<typename T>
+            struct has_get_pointer
+            {
+                BOOST_STATIC_CONSTANT(bool, value = sizeof(void *) == sizeof(get_pointer(make<T &>())));
+                typedef mpl::bool_<value> type;
+            };
+        }
+
+        using has_get_pointerns::has_get_pointer;
+
+        ////////////////////////////////////////////////////////////////////////////////////////////
+        template<typename T>
+        struct classtypeof;
+
+        template<typename T, typename U>
+        struct classtypeof<T U::*>
+        {
+            typedef U type;
+        };
+
+        #define BOOST_PP_LOCAL_MACRO(N)                                                             \
+        template<typename T, typename U BOOST_PP_ENUM_TRAILING_PARAMS(N, typename A)>               \
+        struct classtypeof<T (U::*)(BOOST_PP_ENUM_PARAMS(N, A))>                                    \
+        {                                                                                           \
+            typedef U type;                                                                         \
+        };                                                                                          \
+        template<typename T, typename U BOOST_PP_ENUM_TRAILING_PARAMS(N, typename A)>               \
+        struct classtypeof<T (U::*)(BOOST_PP_ENUM_PARAMS(N, A)) const>                              \
+        {                                                                                           \
+            typedef U type;                                                                         \
+        };                                                                                          \
+        /**/
+        #define BOOST_PP_LOCAL_LIMITS (0, BOOST_PROTO_MAX_ARITY)
+        #include BOOST_PP_LOCAL_ITERATE()
+
+        ////////////////////////////////////////////////////////////////////////////////////////////
+        template<typename T>
+        T &lvalue(T &t)
+        {
+            return t;
+        }
+
+        template<typename T>
+        T const &lvalue(T const &t)
+        {
+            return t;
+        }
+
+        ////////////////////////////////////////////////////////////////////////////////////////////
+        template<typename U, typename V, typename T>
+        U *proto_get_pointer(T &t, V *, U *)
+        {
+            return boost::addressof(t);
+        }
+
+        template<typename U, typename V, typename T>
+        U const *proto_get_pointer(T &t, V *, U const *)
+        {
+            return boost::addressof(t);
+        }
+
+        template<typename U, typename V, typename T>
+        V *proto_get_pointer(T &t, V *, ...)
+        {
+            return get_pointer(t);
+        }
+
+        ////////////////////////////////////////////////////////////////////////////////////////////
+        #define BOOST_PROTO_USE_GET_POINTER()                                                       \
+        using namespace boost::proto::detail::get_pointerns                                         \
+        /**/
+
+        #define BOOST_PROTO_GET_POINTER(Type, Obj)                                                  \
+        boost::proto::detail::proto_get_pointer<Type>(                                              \
+            boost::proto::detail::lvalue(Obj)                                                       \
+          , (true ? 0 : get_pointer(Obj))                                                           \
+          , (true ? 0 : boost::addressof(boost::proto::detail::lvalue(Obj)))                        \
+        )                                                                                           \
+        /**/
+
+        ////////////////////////////////////////////////////////////////////////////////////////////
+        namespace get_pointerns
+        {
+            using boost::get_pointer;
+
+            template<typename T>
+            typename disable_if_c<has_get_pointer<T>::value, T *>::type
+            get_pointer(T &t)
+            {
+                return boost::addressof(t);
+            }
+
+            template<typename T>
+            typename disable_if_c<has_get_pointer<T>::value, T const *>::type
+            get_pointer(T const &t)
+            {
+                return boost::addressof(t);
+            }
+
+            char test_ptr_to_const(void *);
+            char (&test_ptr_to_const(void const *))[2];
+
+            template<typename U> char test_V_is_a_U(U *);
+            template<typename U> char test_V_is_a_U(U const *);
+            template<typename U> char (&test_V_is_a_U(...))[2];
+
+            ////////////////////////////////////////////////////////////////////////////////////////////
+            // result_of_ is a wrapper around boost::result_of that also handles "invocations" of
+            // member object pointers.
+            template<typename T, typename Void = void>
+            struct result_of_
+              : BOOST_PROTO_RESULT_OF<T>
+            {};
+
+            template<typename T, typename U, typename V>
+            struct result_of_<T U::*(V), typename enable_if_c<is_member_object_pointer<T U::*>::value>::type>
+            {
+                BOOST_STATIC_CONSTANT(bool, is_V_a_smart_ptr = 2 == sizeof(test_V_is_a_U<U>(&lvalue(make<V>()))));
+                BOOST_STATIC_CONSTANT(bool, is_ptr_to_const = 2 == sizeof(test_ptr_to_const(BOOST_PROTO_GET_POINTER(U, make<V>()))));
+
+                // If V is not a U, then it is a (smart) pointer and we can always return an lvalue.
+                // Otherwise, we can only return an lvalue if we are given one.
+                typedef
+                    typename mpl::eval_if_c<
+                        (is_V_a_smart_ptr || is_reference<V>::value)
+                      , mpl::eval_if_c<
+                            is_ptr_to_const
+                          , add_reference<typename add_const<T>::type>
+                          , add_reference<T>
+                        >
+                      , mpl::identity<T>
+                    >::type
+                type;
+            };
+
+            ////////////////////////////////////////////////////////////////////////////////////////////
+            template<
+                typename T
+              , typename U
+              , bool IsMemPtr = is_member_object_pointer<
+                    typename remove_reference<U>::type
+                >::value
+            >
+            struct mem_ptr_fun
+            {
+                BOOST_PROTO_DECLTYPE_(
+                    proto::detail::make_mutable<T>() ->* proto::detail::make<U>()
+                  , result_type
+                )
+
+                result_type operator()(
+                    typename add_reference<typename add_const<T>::type>::type t
+                  , typename add_reference<typename add_const<U>::type>::type u
+                ) const
+                {
+                    return t ->* u;
+                }
+            };
+
+            ////////////////////////////////////////////////////////////////////////////////////////////
+            template<typename T, typename U>
+            struct mem_ptr_fun<T, U, true>
+            {
+                typedef
+                    typename classtypeof<
+                        typename uncvref<U>::type
+                    >::type
+                V;
+
+                BOOST_PROTO_DECLTYPE_(
+                    BOOST_PROTO_GET_POINTER(V, proto::detail::make_mutable<T>()) ->* proto::detail::make<U>()
+                  , result_type
+                )
+
+                result_type operator()(
+                    typename add_reference<typename add_const<T>::type>::type t
+                  , U u
+                ) const
+                {
+                    return BOOST_PROTO_GET_POINTER(V, t) ->* u;
+                }
+            };
+        }
+
+        using get_pointerns::result_of_;
+        using get_pointerns::mem_ptr_fun;
+
+        ////////////////////////////////////////////////////////////////////////////////////////////
+        template<typename A0, typename A1>
+        struct comma_result
+        {
+            BOOST_PROTO_DECLTYPE_((proto::detail::make<A0>(), proto::detail::make<A1>()), type)
+        };
+
+        template<typename A0>
+        struct comma_result<A0, void>
+        {
+            typedef void type;
+        };
+
+        template<typename A1>
+        struct comma_result<void, A1>
+        {
+            typedef A1 type;
+        };
+
+        template<>
+        struct comma_result<void, void>
+        {
+            typedef void type;
+        };
+
+        ////////////////////////////////////////////////////////////////////////////////////////////
+        // normalize a function type for use with boost::result_of
+        template<typename T, typename U = T>
+        struct result_of_fixup
+          : mpl::if_c<is_function<T>::value, T *, U>
+        {};
+
+        template<typename T, typename U>
+        struct result_of_fixup<T &, U>
+          : result_of_fixup<T, T>
+        {};
+
+        template<typename T, typename U>
+        struct result_of_fixup<T const &, U>
+          : result_of_fixup<T, T>
+        {};
+
+        template<typename T, typename U>
+        struct result_of_fixup<T *, U>
+          : result_of_fixup<T, U>
+        {};
+
+        template<typename R, typename T, typename U>
+        struct result_of_fixup<R T::*, U>
+        {
+            typedef R T::*type;
+        };
+
+        template<typename T, typename U>
+        struct result_of_fixup<T const, U>
+          : result_of_fixup<T, U>
+        {};
+
+        //// Tests for result_of_fixup
+        //struct bar {};
+        //BOOST_MPL_ASSERT((is_same<bar,        result_of_fixup<bar>::type>));
+        //BOOST_MPL_ASSERT((is_same<bar const,  result_of_fixup<bar const>::type>));
+        //BOOST_MPL_ASSERT((is_same<bar,        result_of_fixup<bar &>::type>));
+        //BOOST_MPL_ASSERT((is_same<bar const,  result_of_fixup<bar const &>::type>));
+        //BOOST_MPL_ASSERT((is_same<void(*)(),  result_of_fixup<void(*)()>::type>));
+        //BOOST_MPL_ASSERT((is_same<void(*)(),  result_of_fixup<void(* const)()>::type>));
+        //BOOST_MPL_ASSERT((is_same<void(*)(),  result_of_fixup<void(* const &)()>::type>));
+        //BOOST_MPL_ASSERT((is_same<void(*)(),  result_of_fixup<void(&)()>::type>));
+
+        template<typename T, typename PMF>
+        struct memfun
+        {
+            typedef typename uncvref<PMF>::type pmf_type;
+            typedef typename classtypeof<pmf_type>::type V;
+            typedef typename BOOST_PROTO_RESULT_OF<pmf_type(T)>::type result_type;
+
+            memfun(T t, PMF p)
+              : obj(t)
+              , pmf(p)
+            {}
+
+            result_type operator()() const
+            {
+                BOOST_PROTO_USE_GET_POINTER();
+                return (BOOST_PROTO_GET_POINTER(V, obj) ->* pmf)();
+            }
+
+            #define BOOST_PROTO_LOCAL_MACRO(N, typename_A, A_const_ref, A_const_ref_a, a)           \
+            template<typename_A(N)>                                                                 \
+            result_type operator()(A_const_ref_a(N)) const                                          \
+            {                                                                                       \
+                BOOST_PROTO_USE_GET_POINTER();                                                      \
+                return (BOOST_PROTO_GET_POINTER(V, obj) ->* pmf)(a(N));                             \
+            }                                                                                       \
+            /**/
+            #define BOOST_PROTO_LOCAL_a BOOST_PROTO_a
+            #define BOOST_PROTO_LOCAL_LIMITS (1, BOOST_PROTO_MAX_ARITY)
+            #include BOOST_PROTO_LOCAL_ITERATE()
+
+        private:
+            T obj;
+            PMF pmf;
+        };
+
+    } // namespace detail
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/detail/deduce_domain.hpp b/3rdParty/Boost/src/boost/proto/detail/deduce_domain.hpp
new file mode 100644
index 0000000..4e4262d
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/detail/deduce_domain.hpp
@@ -0,0 +1,195 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file deduce_domain.hpp
+/// Contains definition of deduce_domain\<\> class templates 
+/// for finding the domain that is common among the specified
+/// domains
+//
+//  Copyright 2010 Daniel Wallin, Eric Niebler. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// Many thanks to Daniel Wallin who first implemented this code. Thanks
+// also to Jeremiah Willcock, John Bytheway and Krishna Achuthan who
+// offered alternate solutions to this tricky programming problem.
+
+#ifndef BOOST_PROTO_DEDUCE_DOMAIN_HPP_EAN_05_22_2010
+#define BOOST_PROTO_DEDUCE_DOMAIN_HPP_EAN_05_22_2010
+
+#include <boost/config.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/facilities/intercept.hpp>
+#include <boost/preprocessor/iteration/local.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/preprocessor/arithmetic/inc.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/proto/proto_fwd.hpp>
+
+#ifndef BOOST_PROTO_ASSERT_VALID_DOMAIN
+# define BOOST_PROTO_ASSERT_VALID_DOMAIN(DOM) BOOST_MPL_ASSERT_NOT((boost::is_same<DOM, boost::proto::detail::not_a_domain>))
+#endif
+
+namespace boost
+{
+    namespace proto
+    {
+        namespace detail
+        {
+            template<int N>
+            struct sized_type
+            {
+                typedef char (&type)[N];
+            };
+
+            template<typename Domain>
+            struct domain_
+              : domain_<typename Domain::proto_super_domain>
+            {
+                typedef Domain type;
+                typedef domain_<typename Domain::proto_super_domain> base;
+            #ifdef BOOST_NO_DECLTYPE
+                using base::deduce98;
+                static int const index = base::index + 1;
+                static typename sized_type<index>::type deduce98(domain_<Domain>*);
+            #else
+                using base::deduce0x;
+                static Domain deduce0x(domain_<Domain>*);
+            #endif
+            };
+
+            template<>
+            struct domain_<not_a_domain>
+            {
+                typedef not_a_domain type;
+            #ifdef BOOST_NO_DECLTYPE
+                static int const index = 1;
+                static sized_type<1>::type deduce98(void*);
+            #else
+                static not_a_domain deduce0x(void*);
+            #endif
+            };
+
+            template<>
+            struct domain_<default_domain>
+              : domain_<not_a_domain>
+            {};
+
+            sized_type<1>::type default_test(void*, void*);
+            sized_type<2>::type default_test(domain_<default_domain>*, void*);
+            sized_type<3>::type default_test(void*, domain_<default_domain>*);
+            sized_type<4>::type default_test(domain_<default_domain>*, domain_<default_domain>*);
+
+        #ifdef BOOST_NO_DECLTYPE
+            template<int N, typename Domain>
+            struct nth_domain
+              : nth_domain<N - 1, typename Domain::base>
+            {};
+
+            template<typename Domain>
+            struct nth_domain<0, Domain>
+              : Domain
+            {};
+        #endif
+
+            template<typename D0>
+            struct common_domain1
+            {
+                typedef D0 type;
+            };
+
+            template<typename E0>
+            struct deduce_domain1
+              : domain_of<E0>
+            {};
+
+            template<
+                typename D0
+              , typename D1
+              , int DefaultCase = sizeof(proto::detail::default_test((domain_<D0>*)0, (domain_<D1>*)0))
+            >
+            struct common_domain2
+            {
+            #ifdef BOOST_NO_DECLTYPE
+                static int const index = domain_<D0>::index - sizeof(domain_<D0>::deduce98((domain_<D1>*)0));
+                typedef typename nth_domain<index, domain_<D0> >::type type;
+            #else
+                typedef decltype(domain_<D0>::deduce0x((domain_<D1>*)0)) type;
+            #endif
+            };
+
+            template<typename D0, typename D1>
+            struct common_domain2<D0, D1, 2>
+            {
+                typedef D1 type;
+            };
+
+            template<typename D0, typename D1>
+            struct common_domain2<D0, D1, 3>
+            {
+                typedef D0 type;
+            };
+
+            template<typename D0>
+            struct common_domain2<D0, default_domain, 4>
+            {
+                typedef D0 type;
+            };
+
+            template<typename D1>
+            struct common_domain2<default_domain, D1, 4>
+            {
+                typedef D1 type;
+            };
+
+            template<>
+            struct common_domain2<default_domain, default_domain, 4>
+            {
+                typedef default_domain type;
+            };
+
+            template<typename E0, typename E1>
+            struct deduce_domain2
+              : common_domain2<
+                    typename domain_of<E0>::type
+                  , typename domain_of<E1>::type
+                >
+            {};
+
+            #define M0(Z, N, DATA)                                                                  \
+                typedef                                                                             \
+                    typename common_domain2<common ## N, A ## N>::type                              \
+                BOOST_PP_CAT(common, BOOST_PP_INC(N));                                              \
+                /**/
+
+            #define BOOST_PP_LOCAL_MACRO(N)                                                         \
+                template<BOOST_PP_ENUM_PARAMS(N, typename A)>                                       \
+                struct BOOST_PP_CAT(common_domain, N)                                               \
+                {                                                                                   \
+                    typedef A0 common1;                                                             \
+                    BOOST_PP_REPEAT_FROM_TO(1, N, M0, ~)                                            \
+                    typedef common ## N type;                                                       \
+                    BOOST_PROTO_ASSERT_VALID_DOMAIN(type);                                          \
+                };                                                                                  \
+                                                                                                    \
+                template<BOOST_PP_ENUM_PARAMS(N, typename E)>                                       \
+                struct BOOST_PP_CAT(deduce_domain, N)                                               \
+                  : BOOST_PP_CAT(common_domain, N)<                                                 \
+                        BOOST_PP_ENUM_BINARY_PARAMS(                                                \
+                            N                                                                       \
+                          , typename domain_of<E, >::type BOOST_PP_INTERCEPT                        \
+                        )                                                                           \
+                    >                                                                               \
+                {};                                                                                 \
+                /**/
+
+            #define BOOST_PP_LOCAL_LIMITS (3, BOOST_PROTO_MAX_ARITY)
+            #include BOOST_PP_LOCAL_ITERATE()
+
+            #undef M0
+        }
+    }
+}
+
+#endif // BOOST_PROTO_DEDUCE_DOMAIN_HPP_EAN_05_22_2010
diff --git a/3rdParty/Boost/src/boost/proto/detail/deprecated.hpp b/3rdParty/Boost/src/boost/proto/detail/deprecated.hpp
new file mode 100644
index 0000000..d8dec6d
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/detail/deprecated.hpp
@@ -0,0 +1,247 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file deprecated.hpp
+/// Definition of the deprecated BOOST_PROTO_DEFINE_FUCTION_TEMPLATE and
+/// BOOST_PROTO_DEFINE_VARARG_FUCTION_TEMPLATE macros
+//
+//  Copyright 2008 Eric Niebler. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROTO_DETAIL_DEPRECATED_HPP_EAN_11_25_2008
+#define BOOST_PROTO_DETAIL_DEPRECATED_HPP_EAN_11_25_2008
+
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/facilities/intercept.hpp>
+#include <boost/preprocessor/arithmetic/inc.hpp>
+#include <boost/preprocessor/arithmetic/dec.hpp>
+#include <boost/preprocessor/arithmetic/sub.hpp>
+#include <boost/preprocessor/punctuation/comma_if.hpp>
+#include <boost/preprocessor/control/if.hpp>
+#include <boost/preprocessor/control/expr_if.hpp>
+#include <boost/preprocessor/comparison/greater.hpp>
+#include <boost/preprocessor/tuple/elem.hpp>
+#include <boost/preprocessor/tuple/to_list.hpp>
+#include <boost/preprocessor/logical/and.hpp>
+#include <boost/preprocessor/seq/size.hpp>
+#include <boost/preprocessor/seq/enum.hpp>
+#include <boost/preprocessor/seq/seq.hpp>
+#include <boost/preprocessor/seq/to_tuple.hpp>
+#include <boost/preprocessor/seq/for_each_i.hpp>
+#include <boost/preprocessor/seq/pop_back.hpp>
+#include <boost/preprocessor/seq/push_back.hpp>
+#include <boost/preprocessor/seq/push_front.hpp>
+#include <boost/preprocessor/list/for_each_i.hpp>
+#include <boost/preprocessor/repetition/repeat.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/enum_trailing_binary_params.hpp>
+#include <boost/proto/proto_fwd.hpp>
+
+/// INTERNAL ONLY
+///
+#define BOOST_PROTO_VARARG_TEMPLATE_AUX_(R, DATA, I, ELEM)                                      \
+    (ELEM BOOST_PP_CAT(BOOST_PP_CAT(X, DATA), BOOST_PP_CAT(_, I)))                              \
+    /**/
+
+/// INTERNAL ONLY
+///
+#define BOOST_PROTO_VARARG_TEMPLATE_YES_(R, DATA, I, ELEM)                                      \
+    BOOST_PP_LIST_FOR_EACH_I_R(                                                                 \
+        R                                                                                       \
+      , BOOST_PROTO_VARARG_TEMPLATE_AUX_                                                        \
+      , I                                                                                       \
+      , BOOST_PP_TUPLE_TO_LIST(                                                                 \
+            BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(ELEM))                                               \
+          , BOOST_PP_SEQ_TO_TUPLE(BOOST_PP_SEQ_TAIL(ELEM))                                      \
+        )                                                                                       \
+    )                                                                                           \
+    /**/
+
+/// INTERNAL ONLY
+///
+#define BOOST_PROTO_VARARG_TEMPLATE_NO_(R, DATA, I, ELEM)                                       \
+    /**/
+
+/// INTERNAL ONLY
+///
+#define BOOST_PROTO_VARARG_TEMPLATE_(R, DATA, I, ELEM)                                          \
+    BOOST_PP_IF(                                                                                \
+        BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(ELEM))                                                   \
+      , BOOST_PROTO_VARARG_TEMPLATE_YES_                                                        \
+      , BOOST_PROTO_VARARG_TEMPLATE_NO_                                                         \
+    )(R, DATA, I, ELEM)                                                                         \
+    /**/
+
+/// INTERNAL ONLY
+///
+#define BOOST_PROTO_VARARG_TYPE_AUX_(R, DATA, I, ELEM)                                          \
+    (BOOST_PP_CAT(BOOST_PP_CAT(X, DATA), BOOST_PP_CAT(_, I)))                                   \
+    /**/
+
+/// INTERNAL ONLY
+///
+#define BOOST_PROTO_TEMPLATE_PARAMS_YES_(R, DATA, I, ELEM)                                      \
+    <                                                                                           \
+        BOOST_PP_SEQ_ENUM(                                                                      \
+            BOOST_PP_LIST_FOR_EACH_I_R(                                                         \
+                R                                                                               \
+              , BOOST_PROTO_VARARG_TYPE_AUX_                                                    \
+              , I                                                                               \
+              , BOOST_PP_TUPLE_TO_LIST(                                                         \
+                    BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(ELEM))                                       \
+                  , BOOST_PP_SEQ_TO_TUPLE(BOOST_PP_SEQ_TAIL(ELEM))                              \
+                )                                                                               \
+            )                                                                                   \
+        )                                                                                       \
+    >                                                                                           \
+    /**/
+
+/// INTERNAL ONLY
+///
+#define BOOST_PROTO_TEMPLATE_PARAMS_NO_(R, DATA, I, ELEM)                                       \
+    /**/
+
+/// INTERNAL ONLY
+///
+#define BOOST_PROTO_VARARG_TYPE_(R, DATA, I, ELEM)                                              \
+    BOOST_PP_COMMA_IF(I)                                                                        \
+    BOOST_PP_SEQ_HEAD(ELEM)                                                                     \
+    BOOST_PP_IF(                                                                                \
+        BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(ELEM))                                                   \
+      , BOOST_PROTO_TEMPLATE_PARAMS_YES_                                                        \
+      , BOOST_PROTO_TEMPLATE_PARAMS_NO_                                                         \
+    )(R, DATA, I, ELEM) BOOST_PP_EXPR_IF(BOOST_PP_GREATER(I, 1), const)                         \
+    /**/
+
+/// INTERNAL ONLY
+///
+#define BOOST_PROTO_VARARG_AS_EXPR_(R, DATA, I, ELEM)                                           \
+    BOOST_PP_EXPR_IF(                                                                           \
+        BOOST_PP_GREATER(I, 1)                                                                  \
+      , ((                                                                                      \
+            BOOST_PP_SEQ_HEAD(ELEM)                                                             \
+            BOOST_PP_IF(                                                                        \
+                BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(ELEM))                                           \
+              , BOOST_PROTO_TEMPLATE_PARAMS_YES_                                                \
+              , BOOST_PROTO_TEMPLATE_PARAMS_NO_                                                 \
+            )(R, DATA, I, ELEM)()                                                               \
+        ))                                                                                      \
+    )                                                                                           \
+    /**/
+
+/// INTERNAL ONLY
+///
+#define BOOST_PROTO_VARARG_AS_CHILD_(Z, N, DATA)                                                \
+    (BOOST_PP_CAT(DATA, N))                                                                     \
+    /**/
+
+/// INTERNAL ONLY
+///
+#define BOOST_PROTO_SEQ_PUSH_FRONT(SEQ, ELEM)                                                   \
+    BOOST_PP_SEQ_POP_BACK(BOOST_PP_SEQ_PUSH_FRONT(BOOST_PP_SEQ_PUSH_BACK(SEQ, _dummy_), ELEM))  \
+    /**/
+
+/// INTERNAL ONLY
+///
+#define BOOST_PROTO_VARARG_AS_PARAM_(Z, N, DATA)                                                \
+    (BOOST_PP_CAT(DATA, N))                                                                     \
+    /**/
+
+/// INTERNAL ONLY
+///
+#define BOOST_PROTO_VARARG_FUN_(Z, N, DATA)                                                     \
+    template<                                                                                   \
+        BOOST_PP_SEQ_ENUM(                                                                      \
+            BOOST_PP_SEQ_FOR_EACH_I(                                                            \
+                BOOST_PROTO_VARARG_TEMPLATE_, ~                                                 \
+              , BOOST_PP_SEQ_PUSH_FRONT(                                                        \
+                    BOOST_PROTO_SEQ_PUSH_FRONT(                                                 \
+                        BOOST_PP_TUPLE_ELEM(4, 2, DATA)                                         \
+                      , (BOOST_PP_TUPLE_ELEM(4, 3, DATA))                                       \
+                    )                                                                           \
+                  , BOOST_PP_TUPLE_ELEM(4, 1, DATA)                                             \
+                )                                                                               \
+            )                                                                                   \
+            BOOST_PP_REPEAT_ ## Z(N, BOOST_PROTO_VARARG_AS_PARAM_, typename A)                  \
+        )                                                                                       \
+    >                                                                                           \
+    typename boost::proto::result_of::make_expr<                                                \
+        BOOST_PP_SEQ_FOR_EACH_I(                                                                \
+            BOOST_PROTO_VARARG_TYPE_, ~                                                         \
+          , BOOST_PP_SEQ_PUSH_FRONT(                                                            \
+                BOOST_PROTO_SEQ_PUSH_FRONT(                                                     \
+                    BOOST_PP_TUPLE_ELEM(4, 2, DATA)                                             \
+                  , (BOOST_PP_TUPLE_ELEM(4, 3, DATA))                                           \
+                )                                                                               \
+              , BOOST_PP_TUPLE_ELEM(4, 1, DATA)                                                 \
+            )                                                                                   \
+        )                                                                                       \
+        BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_Z(Z, N, A, const & BOOST_PP_INTERCEPT)             \
+    >::type const                                                                               \
+    BOOST_PP_TUPLE_ELEM(4, 0, DATA)(BOOST_PP_ENUM_BINARY_PARAMS_Z(Z, N, A, const &a))           \
+    {                                                                                           \
+        return boost::proto::detail::make_expr_<                                                \
+            BOOST_PP_SEQ_FOR_EACH_I(                                                            \
+                BOOST_PROTO_VARARG_TYPE_, ~                                                     \
+              , BOOST_PP_SEQ_PUSH_FRONT(                                                        \
+                    BOOST_PROTO_SEQ_PUSH_FRONT(                                                 \
+                        BOOST_PP_TUPLE_ELEM(4, 2, DATA)                                         \
+                      , (BOOST_PP_TUPLE_ELEM(4, 3, DATA))                                       \
+                    )                                                                           \
+                  , BOOST_PP_TUPLE_ELEM(4, 1, DATA)                                             \
+                )                                                                               \
+            )                                                                                   \
+            BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_Z(Z, N, A, const & BOOST_PP_INTERCEPT)         \
+        >()(                                                                                    \
+            BOOST_PP_SEQ_ENUM(                                                                  \
+                BOOST_PP_SEQ_FOR_EACH_I(                                                        \
+                    BOOST_PROTO_VARARG_AS_EXPR_, ~                                              \
+                  , BOOST_PP_SEQ_PUSH_FRONT(                                                    \
+                        BOOST_PROTO_SEQ_PUSH_FRONT(                                             \
+                            BOOST_PP_TUPLE_ELEM(4, 2, DATA)                                     \
+                          , (BOOST_PP_TUPLE_ELEM(4, 3, DATA))                                   \
+                        )                                                                       \
+                      , BOOST_PP_TUPLE_ELEM(4, 1, DATA)                                         \
+                    )                                                                           \
+                )                                                                               \
+                BOOST_PP_REPEAT_ ## Z(N, BOOST_PROTO_VARARG_AS_CHILD_, a)                       \
+            )                                                                                   \
+        );                                                                                      \
+    }                                                                                           \
+    /**/
+
+/// \code
+/// BOOST_PROTO_DEFINE_FUNCTION_TEMPLATE(
+///     1
+///   , construct
+///   , boost::proto::default_domain
+///   , (boost::proto::tag::function)
+///   , ((op::construct)(typename)(int))
+/// )
+/// \endcode
+#define BOOST_PROTO_DEFINE_FUNCTION_TEMPLATE(ARGCOUNT, NAME, DOMAIN, TAG, BOUNDARGS)            \
+    BOOST_PP_REPEAT_FROM_TO(                                                                    \
+        ARGCOUNT                                                                                \
+      , BOOST_PP_INC(ARGCOUNT)                                                                  \
+      , BOOST_PROTO_VARARG_FUN_                                                                 \
+      , (NAME, TAG, BOUNDARGS, DOMAIN)                                                          \
+    )\
+    /**/
+
+/// \code
+/// BOOST_PROTO_DEFINE_VARARG_FUNCTION_TEMPLATE(
+///     construct
+///   , boost::proto::default_domain
+///   , (boost::proto::tag::function)
+///   , ((op::construct)(typename)(int))
+/// )
+/// \endcode
+#define BOOST_PROTO_DEFINE_VARARG_FUNCTION_TEMPLATE(NAME, DOMAIN, TAG, BOUNDARGS)               \
+    BOOST_PP_REPEAT(                                                                            \
+        BOOST_PP_SUB(BOOST_PP_INC(BOOST_PROTO_MAX_ARITY), BOOST_PP_SEQ_SIZE(BOUNDARGS))         \
+      , BOOST_PROTO_VARARG_FUN_                                                                 \
+      , (NAME, TAG, BOUNDARGS, DOMAIN)                                                          \
+    )                                                                                           \
+    /**/
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/detail/expr0.hpp b/3rdParty/Boost/src/boost/proto/detail/expr0.hpp
new file mode 100644
index 0000000..f1e1f25
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/detail/expr0.hpp
@@ -0,0 +1,460 @@
+///////////////////////////////////////////////////////////////////////////////
+// expr.hpp
+// Contains definition of expr\<\> class template.
+//
+//  Copyright 2008 Eric Niebler. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PP_IS_ITERATING
+#error Do not include this file directly
+#endif
+
+#define ARG_COUNT BOOST_PP_MAX(1, BOOST_PP_ITERATION())
+
+    /// \brief Simplified representation of a node in an expression tree.
+    ///
+    /// \c proto::basic_expr\<\> is a node in an expression template tree. It
+    /// is a container for its child sub-trees. It also serves as
+    /// the terminal nodes of the tree.
+    ///
+    /// \c Tag is type that represents the operation encoded by
+    ///             this expression. It is typically one of the structs
+    ///             in the \c boost::proto::tag namespace, but it doesn't
+    ///             have to be.
+    ///
+    /// \c Args is a type list representing the type of the children
+    ///             of this expression. It is an instantiation of one
+    ///             of \c proto::list1\<\>, \c proto::list2\<\>, etc. The
+    ///             child types must all themselves be either \c expr\<\>
+    ///             or <tt>proto::expr\<\>&</tt>. If \c Args is an
+    ///             instantiation of \c proto::term\<\> then this
+    ///             \c expr\<\> type represents a terminal expression;
+    ///             the parameter to the \c proto::term\<\> template
+    ///             represents the terminal's value type.
+    ///
+    /// \c Arity is an integral constant representing the number of child
+    ///             nodes this node contains. If \c Arity is 0, then this
+    ///             node is a terminal.
+    ///
+    /// \c proto::basic_expr\<\> is a valid Fusion random-access sequence, where
+    /// the elements of the sequence are the child expressions.
+    #ifdef BOOST_PROTO_DEFINE_TERMINAL
+    template<typename Tag, typename Arg0>
+    struct basic_expr<Tag, term<Arg0>, 0>
+    #else
+    template<typename Tag BOOST_PP_ENUM_TRAILING_PARAMS(ARG_COUNT, typename Arg)>
+    struct basic_expr<Tag, BOOST_PP_CAT(list, BOOST_PP_ITERATION())<BOOST_PP_ENUM_PARAMS(ARG_COUNT, Arg)>, BOOST_PP_ITERATION() >
+    #endif
+    {
+        typedef Tag proto_tag;
+        BOOST_STATIC_CONSTANT(long, proto_arity_c = BOOST_PP_ITERATION());
+        typedef mpl::long_<BOOST_PP_ITERATION() > proto_arity;
+        typedef basic_expr proto_base_expr;
+        #ifdef BOOST_PROTO_DEFINE_TERMINAL
+        typedef term<Arg0> proto_args;
+        #else
+        typedef BOOST_PP_CAT(list, BOOST_PP_ITERATION())<BOOST_PP_ENUM_PARAMS(ARG_COUNT, Arg)> proto_args;
+        #endif
+        typedef basic_expr proto_grammar;
+        typedef default_domain proto_domain;
+        typedef default_generator proto_generator;
+        typedef proto::tag::proto_expr fusion_tag;
+        typedef basic_expr proto_derived_expr;
+        typedef void proto_is_expr_; /**< INTERNAL ONLY */
+
+        BOOST_PP_REPEAT(ARG_COUNT, BOOST_PROTO_CHILD, ~)
+        BOOST_PP_REPEAT_FROM_TO(ARG_COUNT, BOOST_PROTO_MAX_ARITY, BOOST_PROTO_VOID, ~)
+
+        /// \return *this
+        ///
+        basic_expr const &proto_base() const
+        {
+            return *this;
+        }
+
+        /// \overload
+        ///
+        basic_expr &proto_base()
+        {
+            return *this;
+        }
+
+    #ifdef BOOST_PROTO_DEFINE_TERMINAL
+        /// \return A new \c expr\<\> object initialized with the specified
+        /// arguments.
+        ///
+        template<typename A0>
+        static basic_expr const make(A0 &a0)
+        {
+            return detail::make_terminal(a0, static_cast<basic_expr *>(0), static_cast<proto_args *>(0));
+        }
+
+        /// \overload
+        ///
+        template<typename A0>
+        static basic_expr const make(A0 const &a0)
+        {
+            return detail::make_terminal(a0, static_cast<basic_expr *>(0), static_cast<proto_args *>(0));
+        }
+    #else
+        /// \return A new \c expr\<\> object initialized with the specified
+        /// arguments.
+        ///
+        template<BOOST_PP_ENUM_PARAMS(ARG_COUNT, typename A)>
+        static basic_expr const make(BOOST_PP_ENUM_BINARY_PARAMS(ARG_COUNT, A, const &a))
+        {
+            basic_expr that = {BOOST_PP_ENUM_PARAMS(ARG_COUNT, a)};
+            return that;
+        }
+    #endif
+
+    #if 1 == BOOST_PP_ITERATION()
+        /// If \c Tag is \c boost::proto::tag::address_of and \c proto_child0 is
+        /// <tt>T&</tt>, then \c address_of_hack_type_ is <tt>T*</tt>.
+        /// Otherwise, it is some undefined type.
+        typedef typename detail::address_of_hack<Tag, proto_child0>::type address_of_hack_type_;
+
+        /// \return The address of <tt>this->child0</tt> if \c Tag is
+        /// \c boost::proto::tag::address_of. Otherwise, this function will
+        /// fail to compile.
+        ///
+        /// \attention Proto overloads <tt>operator&</tt>, which means that
+        /// proto-ified objects cannot have their addresses taken, unless we use
+        /// the following hack to make \c &x implicitly convertible to \c X*.
+        operator address_of_hack_type_() const
+        {
+            return boost::addressof(this->child0);
+        }
+    #else
+        /// INTERNAL ONLY
+        ///
+        typedef detail::not_a_valid_type address_of_hack_type_;
+    #endif
+    };
+
+    /// \brief Representation of a node in an expression tree.
+    ///
+    /// \c proto::expr\<\> is a node in an expression template tree. It
+    /// is a container for its child sub-trees. It also serves as
+    /// the terminal nodes of the tree.
+    ///
+    /// \c Tag is type that represents the operation encoded by
+    ///             this expression. It is typically one of the structs
+    ///             in the \c boost::proto::tag namespace, but it doesn't
+    ///             have to be.
+    ///
+    /// \c Args is a type list representing the type of the children
+    ///             of this expression. It is an instantiation of one
+    ///             of \c proto::list1\<\>, \c proto::list2\<\>, etc. The
+    ///             child types must all themselves be either \c expr\<\>
+    ///             or <tt>proto::expr\<\>&</tt>. If \c Args is an
+    ///             instantiation of \c proto::term\<\> then this
+    ///             \c expr\<\> type represents a terminal expression;
+    ///             the parameter to the \c proto::term\<\> template
+    ///             represents the terminal's value type.
+    ///
+    /// \c Arity is an integral constant representing the number of child
+    ///             nodes this node contains. If \c Arity is 0, then this
+    ///             node is a terminal.
+    ///
+    /// \c proto::expr\<\> is a valid Fusion random-access sequence, where
+    /// the elements of the sequence are the child expressions.
+    #ifdef BOOST_PROTO_DEFINE_TERMINAL
+    template<typename Tag, typename Arg0>
+    struct expr<Tag, term<Arg0>, 0>
+    #else
+    template<typename Tag BOOST_PP_ENUM_TRAILING_PARAMS(ARG_COUNT, typename Arg)>
+    struct expr<Tag, BOOST_PP_CAT(list, BOOST_PP_ITERATION())<BOOST_PP_ENUM_PARAMS(ARG_COUNT, Arg)>, BOOST_PP_ITERATION() >
+    #endif
+    {
+        typedef Tag proto_tag;
+        BOOST_STATIC_CONSTANT(long, proto_arity_c = BOOST_PP_ITERATION());
+        typedef mpl::long_<BOOST_PP_ITERATION() > proto_arity;
+        typedef expr proto_base_expr;
+        #ifdef BOOST_PROTO_DEFINE_TERMINAL
+        typedef term<Arg0> proto_args;
+        #else
+        typedef BOOST_PP_CAT(list, BOOST_PP_ITERATION())<BOOST_PP_ENUM_PARAMS(ARG_COUNT, Arg)> proto_args;
+        #endif
+        typedef basic_expr<Tag, proto_args, BOOST_PP_ITERATION() > proto_grammar;
+        typedef default_domain proto_domain;
+        typedef default_generator proto_generator;
+        typedef proto::tag::proto_expr fusion_tag;
+        typedef expr proto_derived_expr;
+        typedef void proto_is_expr_; /**< INTERNAL ONLY */
+
+        BOOST_PP_REPEAT(ARG_COUNT, BOOST_PROTO_CHILD, ~)
+        BOOST_PP_REPEAT_FROM_TO(ARG_COUNT, BOOST_PROTO_MAX_ARITY, BOOST_PROTO_VOID, ~)
+
+        /// \return *this
+        ///
+        expr const &proto_base() const
+        {
+            return *this;
+        }
+
+        /// \overload
+        ///
+        expr &proto_base()
+        {
+            return *this;
+        }
+
+    #ifdef BOOST_PROTO_DEFINE_TERMINAL
+        /// \return A new \c expr\<\> object initialized with the specified
+        /// arguments.
+        ///
+        template<typename A0>
+        static expr const make(A0 &a0)
+        {
+            return detail::make_terminal(a0, static_cast<expr *>(0), static_cast<proto_args *>(0));
+        }
+
+        /// \overload
+        ///
+        template<typename A0>
+        static expr const make(A0 const &a0)
+        {
+            return detail::make_terminal(a0, static_cast<expr *>(0), static_cast<proto_args *>(0));
+        }
+    #else
+        /// \return A new \c expr\<\> object initialized with the specified
+        /// arguments.
+        ///
+        template<BOOST_PP_ENUM_PARAMS(ARG_COUNT, typename A)>
+        static expr const make(BOOST_PP_ENUM_BINARY_PARAMS(ARG_COUNT, A, const &a))
+        {
+            expr that = {BOOST_PP_ENUM_PARAMS(ARG_COUNT, a)};
+            return that;
+        }
+    #endif
+
+    #if 1 == BOOST_PP_ITERATION()
+        /// If \c Tag is \c boost::proto::tag::address_of and \c proto_child0 is
+        /// <tt>T&</tt>, then \c address_of_hack_type_ is <tt>T*</tt>.
+        /// Otherwise, it is some undefined type.
+        typedef typename detail::address_of_hack<Tag, proto_child0>::type address_of_hack_type_;
+
+        /// \return The address of <tt>this->child0</tt> if \c Tag is
+        /// \c boost::proto::tag::address_of. Otherwise, this function will
+        /// fail to compile.
+        ///
+        /// \attention Proto overloads <tt>operator&</tt>, which means that
+        /// proto-ified objects cannot have their addresses taken, unless we use
+        /// the following hack to make \c &x implicitly convertible to \c X*.
+        operator address_of_hack_type_() const
+        {
+            return boost::addressof(this->child0);
+        }
+    #else
+        /// INTERNAL ONLY
+        ///
+        typedef detail::not_a_valid_type address_of_hack_type_;
+    #endif
+
+        /// Assignment
+        ///
+        /// \param a The rhs.
+        /// \return A new \c expr\<\> node representing an assignment of \c that to \c *this.
+        proto::expr<
+            proto::tag::assign
+          , list2<expr &, expr const &>
+          , 2
+        > const
+        operator =(expr const &a)
+        {
+            proto::expr<
+                proto::tag::assign
+              , list2<expr &, expr const &>
+              , 2
+            > that = {*this, a};
+            return that;
+        }
+
+        /// Assignment
+        ///
+        /// \param a The rhs.
+        /// \return A new \c expr\<\> node representing an assignment of \c a to \c *this.
+        template<typename A>
+        proto::expr<
+            proto::tag::assign
+          , list2<expr const &, typename result_of::as_child<A>::type>
+          , 2
+        > const
+        operator =(A &a) const
+        {
+            proto::expr<
+                proto::tag::assign
+              , list2<expr const &, typename result_of::as_child<A>::type>
+              , 2
+            > that = {*this, proto::as_child(a)};
+            return that;
+        }
+
+        /// \overload
+        ///
+        template<typename A>
+        proto::expr<
+            proto::tag::assign
+          , list2<expr const &, typename result_of::as_child<A const>::type>
+          , 2
+        > const
+        operator =(A const &a) const
+        {
+            proto::expr<
+                proto::tag::assign
+              , list2<expr const &, typename result_of::as_child<A const>::type>
+              , 2
+            > that = {*this, proto::as_child(a)};
+            return that;
+        }
+
+    #ifdef BOOST_PROTO_DEFINE_TERMINAL
+        /// \overload
+        ///
+        template<typename A>
+        proto::expr<
+            proto::tag::assign
+          , list2<expr &, typename result_of::as_child<A>::type>
+          , 2
+        > const
+        operator =(A &a)
+        {
+            proto::expr<
+                proto::tag::assign
+              , list2<expr &, typename result_of::as_child<A>::type>
+              , 2
+            > that = {*this, proto::as_child(a)};
+            return that;
+        }
+
+        /// \overload
+        ///
+        template<typename A>
+        proto::expr<
+            proto::tag::assign
+          , list2<expr &, typename result_of::as_child<A const>::type>
+          , 2
+        > const
+        operator =(A const &a)
+        {
+            proto::expr<
+                proto::tag::assign
+              , list2<expr &, typename result_of::as_child<A const>::type>
+              , 2
+            > that = {*this, proto::as_child(a)};
+            return that;
+        }
+    #endif
+
+        /// Subscript
+        ///
+        /// \param a The rhs.
+        /// \return A new \c expr\<\> node representing \c *this subscripted with \c a.
+        template<typename A>
+        proto::expr<
+            proto::tag::subscript
+          , list2<expr const &, typename result_of::as_child<A>::type>
+          , 2
+        > const
+        operator [](A &a) const
+        {
+            proto::expr<
+                proto::tag::subscript
+              , list2<expr const &, typename result_of::as_child<A>::type>
+              , 2
+            > that = {*this, proto::as_child(a)};
+            return that;
+        }
+
+        /// \overload
+        ///
+        template<typename A>
+        proto::expr<
+            proto::tag::subscript
+          , list2<expr const &, typename result_of::as_child<A const>::type>
+          , 2
+        > const
+        operator [](A const &a) const
+        {
+            proto::expr<
+                proto::tag::subscript
+              , list2<expr const &, typename result_of::as_child<A const>::type>
+              , 2
+            > that = {*this, proto::as_child(a)};
+            return that;
+        }
+
+    #ifdef BOOST_PROTO_DEFINE_TERMINAL
+        /// \overload
+        ///
+        template<typename A>
+        proto::expr<
+            proto::tag::subscript
+          , list2<expr &, typename result_of::as_child<A>::type>
+          , 2
+        > const
+        operator [](A &a)
+        {
+            proto::expr<
+                proto::tag::subscript
+              , list2<expr &, typename result_of::as_child<A>::type>
+              , 2
+            > that = {*this, proto::as_child(a)};
+            return that;
+        }
+
+        /// \overload
+        ///
+        template<typename A>
+        proto::expr<
+            proto::tag::subscript
+          , list2<expr &, typename result_of::as_child<A const>::type>
+          , 2
+        > const
+        operator [](A const &a)
+        {
+            proto::expr<
+                proto::tag::subscript
+              , list2<expr &, typename result_of::as_child<A const>::type>
+              , 2
+            > that = {*this, proto::as_child(a)};
+            return that;
+        }
+    #endif
+
+        /// Encodes the return type of \c expr\<\>::operator(), for use with \c boost::result_of\<\>
+        ///
+        template<typename Sig>
+        struct result
+        {
+            typedef typename result_of::funop<Sig, expr, default_domain>::type const type;
+        };
+
+        /// Function call
+        ///
+        /// \return A new \c expr\<\> node representing the function invocation of \c (*this)().
+        proto::expr<proto::tag::function, list1<expr const &>, 1> const
+        operator ()() const
+        {
+            proto::expr<proto::tag::function, list1<expr const &>, 1> that = {*this};
+            return that;
+        }
+
+    #ifdef BOOST_PROTO_DEFINE_TERMINAL
+        /// \overload
+        ///
+        proto::expr<proto::tag::function, list1<expr &>, 1> const
+        operator ()()
+        {
+            proto::expr<proto::tag::function, list1<expr &>, 1> that = {*this};
+            return that;
+        }
+    #endif
+
+#define BOOST_PP_ITERATION_PARAMS_2 (3, (1, BOOST_PP_DEC(BOOST_PROTO_MAX_FUNCTION_CALL_ARITY), <boost/proto/detail/expr1.hpp>))
+#include BOOST_PP_ITERATE()
+    };
+
+#undef ARG_COUNT
diff --git a/3rdParty/Boost/src/boost/proto/detail/expr1.hpp b/3rdParty/Boost/src/boost/proto/detail/expr1.hpp
new file mode 100644
index 0000000..ee50dd3
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/detail/expr1.hpp
@@ -0,0 +1,47 @@
+///////////////////////////////////////////////////////////////////////////////
+// expr1.hpp
+// Contains definition of expr\<\>::operator() overloads.
+//
+//  Copyright 2008 Eric Niebler. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PP_IS_ITERATING
+#error Do not include this file directly
+#endif
+
+#define N BOOST_PP_ITERATION()
+
+    /// \overload
+    ///
+    template<BOOST_PP_ENUM_PARAMS(N, typename A)>
+    typename result_of::BOOST_PP_CAT(funop, N)<
+        expr const
+      , default_domain BOOST_PP_ENUM_TRAILING_PARAMS(N, const A)
+    >::type const
+    operator ()(BOOST_PP_ENUM_BINARY_PARAMS(N, A, const &a)) const
+    {
+        return result_of::BOOST_PP_CAT(funop, N)<
+            expr const
+          , default_domain BOOST_PP_ENUM_TRAILING_PARAMS(N, const A)
+        >::call(*this BOOST_PP_ENUM_TRAILING_PARAMS(N, a));
+    }
+
+    #ifdef BOOST_PROTO_DEFINE_TERMINAL
+    /// \overload
+    ///
+    template<BOOST_PP_ENUM_PARAMS(N, typename A)>
+    typename result_of::BOOST_PP_CAT(funop, N)<
+        expr
+      , default_domain BOOST_PP_ENUM_TRAILING_PARAMS(N, const A)
+    >::type const
+    operator ()(BOOST_PP_ENUM_BINARY_PARAMS(N, A, const &a))
+    {
+        return result_of::BOOST_PP_CAT(funop, N)<
+            expr
+          , default_domain BOOST_PP_ENUM_TRAILING_PARAMS(N, const A)
+        >::call(*this BOOST_PP_ENUM_TRAILING_PARAMS(N, a));
+    }
+    #endif
+
+#undef N
diff --git a/3rdParty/Boost/src/boost/proto/detail/funop.hpp b/3rdParty/Boost/src/boost/proto/detail/funop.hpp
new file mode 100644
index 0000000..c6db023
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/detail/funop.hpp
@@ -0,0 +1,64 @@
+///////////////////////////////////////////////////////////////////////////////
+// funop.hpp
+// Contains definition of funop[n]\<\> class template.
+//
+//  Copyright 2008 Eric Niebler. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PP_IS_ITERATING
+#error Do not include this file directly
+#endif
+
+#define M0(Z, N, DATA)                                                                          \
+    typename proto::result_of::as_child<BOOST_PP_CAT(A, N), Domain>::type                       \
+    /**/
+
+#define M1(Z, N, DATA)                                                                          \
+    proto::as_child<Domain>(BOOST_PP_CAT(a, N))                                                 \
+    /**/
+
+    /// \brief A helper metafunction for computing the
+    /// return type of \c proto::expr\<\>::operator().
+    template<typename Expr, typename Domain BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(), typename A)>
+    struct BOOST_PP_CAT(funop, BOOST_PP_ITERATION())
+    {
+        typedef proto::expr<
+            tag::function
+          , BOOST_PP_CAT(list, BOOST_PP_INC(BOOST_PP_ITERATION()))<
+                Expr &
+                BOOST_PP_ENUM_TRAILING(BOOST_PP_ITERATION(), M0, ~)
+            >
+          , BOOST_PP_INC(BOOST_PP_ITERATION())
+        > type;
+
+        static type const call(
+            Expr &e
+            BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(BOOST_PP_ITERATION(), A, &a)
+        )
+        {
+            type that = {
+                e
+                BOOST_PP_ENUM_TRAILING(BOOST_PP_ITERATION(), M1, ~)
+            };
+            return that;
+        }
+    };
+
+    /// \brief A helper metafunction for computing the
+    /// return type of \c proto::expr\<\>::operator().
+    template<typename Expr BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(), typename A), typename This, typename Domain>
+    struct funop<Expr(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), A)), This, Domain>
+      : BOOST_PP_CAT(funop, BOOST_PP_ITERATION())<
+            typename detail::same_cv<Expr, This>::type
+          , Domain
+            BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(
+                BOOST_PP_ITERATION()
+              , typename remove_reference<A
+              , >::type BOOST_PP_INTERCEPT
+            )
+        >
+    {};
+
+#undef M0
+#undef M1
diff --git a/3rdParty/Boost/src/boost/proto/detail/ignore_unused.hpp b/3rdParty/Boost/src/boost/proto/detail/ignore_unused.hpp
new file mode 100644
index 0000000..18182cc
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/detail/ignore_unused.hpp
@@ -0,0 +1,23 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file ignore_unused.hpp
+/// Definintion of ignore_unused, a dummy function for suppressing compiler
+/// warnings
+//
+//  Copyright 2008 Eric Niebler. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROTO_DETAIL_IGNORE_UNUSED_HPP_EAN_03_03_2008
+#define BOOST_PROTO_DETAIL_IGNORE_UNUSED_HPP_EAN_03_03_2008
+
+namespace boost { namespace proto
+{
+    namespace detail
+    {
+        template<typename T>
+        inline void ignore_unused(T const &)
+        {}
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/detail/local.hpp b/3rdParty/Boost/src/boost/proto/detail/local.hpp
new file mode 100644
index 0000000..8886bbb
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/detail/local.hpp
@@ -0,0 +1,52 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file local.hpp
+/// Contains macros to ease the generation of repetitious code constructs
+//
+//  Copyright 2008 Eric Niebler. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROTO_LOCAL_MACRO
+# error "local iteration target macro is not defined"
+#endif
+
+#ifndef BOOST_PROTO_LOCAL_LIMITS
+# define BOOST_PROTO_LOCAL_LIMITS (1, BOOST_PROTO_MAX_ARITY)
+#endif
+
+#ifndef BOOST_PROTO_LOCAL_typename_A
+# define BOOST_PROTO_LOCAL_typename_A BOOST_PROTO_typename_A
+#endif
+
+#ifndef BOOST_PROTO_LOCAL_A
+# define BOOST_PROTO_LOCAL_A BOOST_PROTO_A_const_ref
+#endif
+
+#ifndef BOOST_PROTO_LOCAL_A_a
+# define BOOST_PROTO_LOCAL_A_a BOOST_PROTO_A_const_ref_a
+#endif
+
+#ifndef BOOST_PROTO_LOCAL_a
+# define BOOST_PROTO_LOCAL_a BOOST_PROTO_ref_a
+#endif
+
+#define BOOST_PP_LOCAL_LIMITS BOOST_PROTO_LOCAL_LIMITS
+
+#define BOOST_PP_LOCAL_MACRO(N)       \
+  BOOST_PROTO_LOCAL_MACRO(            \
+      N                               \
+    , BOOST_PROTO_LOCAL_typename_A    \
+    , BOOST_PROTO_LOCAL_A             \
+    , BOOST_PROTO_LOCAL_A_a           \
+    , BOOST_PROTO_LOCAL_a             \
+  )                                   \
+  /**/
+
+#include BOOST_PP_LOCAL_ITERATE()
+
+#undef BOOST_PROTO_LOCAL_MACRO
+#undef BOOST_PROTO_LOCAL_LIMITS
+#undef BOOST_PROTO_LOCAL_typename_A
+#undef BOOST_PROTO_LOCAL_A
+#undef BOOST_PROTO_LOCAL_A_a
+#undef BOOST_PROTO_LOCAL_a
diff --git a/3rdParty/Boost/src/boost/proto/detail/poly_function.hpp b/3rdParty/Boost/src/boost/proto/detail/poly_function.hpp
new file mode 100644
index 0000000..346bc14
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/detail/poly_function.hpp
@@ -0,0 +1,297 @@
+#ifndef BOOST_PP_IS_ITERATING
+    ///////////////////////////////////////////////////////////////////////////////
+    /// \file poly_function.hpp
+    /// A wrapper that makes a tr1-style function object that handles const
+    /// and non-const refs and reference_wrapper arguments, too, and forwards
+    /// the arguments on to the specified implementation.
+    //
+    //  Copyright 2008 Eric Niebler. Distributed under the Boost
+    //  Software License, Version 1.0. (See accompanying file
+    //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+    #ifndef BOOST_PROTO_DETAIL_POLY_FUNCTION_EAN_2008_05_02
+    #define BOOST_PROTO_DETAIL_POLY_FUNCTION_EAN_2008_05_02
+
+    #include <boost/ref.hpp>
+    #include <boost/mpl/bool.hpp>
+    #include <boost/mpl/void.hpp>
+    #include <boost/mpl/size_t.hpp>
+    #include <boost/mpl/eval_if.hpp>
+    #include <boost/preprocessor/cat.hpp>
+    #include <boost/preprocessor/facilities/intercept.hpp>
+    #include <boost/preprocessor/iteration/iterate.hpp>
+    #include <boost/preprocessor/repetition/enum.hpp>
+    #include <boost/preprocessor/repetition/enum_params.hpp>
+    #include <boost/preprocessor/repetition/enum_trailing_params.hpp>
+    #include <boost/preprocessor/repetition/enum_binary_params.hpp>
+    #include <boost/proto/proto_fwd.hpp>
+
+    #ifdef _MSC_VER
+    # pragma warning(push)
+    # pragma warning(disable: 4181) // const applied to reference type
+    #endif
+
+    namespace boost { namespace proto { namespace detail
+    {
+
+        ////////////////////////////////////////////////////////////////////////////////////////////////
+        template<typename T>
+        struct normalize_arg
+        {
+            typedef T type;
+            typedef T const &reference;
+        };
+
+        template<typename T>
+        struct normalize_arg<T &>
+        {
+            typedef T type;
+            typedef T const &reference;
+        };
+
+        template<typename T>
+        struct normalize_arg<T const &>
+        {
+            typedef T type;
+            typedef T const &reference;
+        };
+
+        template<typename T>
+        struct normalize_arg<boost::reference_wrapper<T> >
+        {
+            typedef T &type;
+            typedef T &reference;
+        };
+
+        template<typename T>
+        struct normalize_arg<boost::reference_wrapper<T> &>
+        {
+            typedef T &type;
+            typedef T &reference;
+        };
+
+        template<typename T>
+        struct normalize_arg<boost::reference_wrapper<T> const &>
+        {
+            typedef T &type;
+            typedef T &reference;
+        };
+
+        ////////////////////////////////////////////////////////////////////////////////////////////////
+        template<typename T>
+        struct arg
+        {
+            typedef T const &type;
+
+            arg(type t)
+              : value(t)
+            {}
+
+            operator type() const
+            {
+                return this->value;
+            }
+
+            type operator()() const
+            {
+                return *this;
+            }
+
+        private:
+            arg &operator =(arg const &);
+            type value;
+        };
+
+        template<typename T>
+        struct arg<T &>
+        {
+            typedef T &type;
+
+            arg(type t)
+              : value(t)
+            {}
+
+            operator type() const
+            {
+                return this->value;
+            }
+
+            type operator()() const
+            {
+                return *this;
+            }
+
+        private:
+            arg &operator =(arg const &);
+            type value;
+        };
+
+        ////////////////////////////////////////////////////////////////////////////////////////////////
+        template<typename T, typename Void = void>
+        struct is_poly_function
+          : mpl::false_
+        {};
+
+        template<typename T>
+        struct is_poly_function<T, typename T::is_poly_function_base_>
+          : mpl::true_
+        {};
+
+        ////////////////////////////////////////////////////////////////////////////////////////////////
+        #define BOOST_PROTO_POLY_FUNCTION()                                                         \
+            typedef void is_poly_function_base_;                                                    \
+            /**/
+
+        ////////////////////////////////////////////////////////////////////////////////////////////////
+        struct poly_function_base
+        {
+            /// INTERNAL ONLY
+            BOOST_PROTO_POLY_FUNCTION()
+        };
+
+        ////////////////////////////////////////////////////////////////////////////////////////////////
+        template<typename Derived, typename NullaryResult = void>
+        struct poly_function
+          : poly_function_base
+        {
+            template<typename Sig>
+            struct result;
+
+            template<typename This>
+            struct result<This()>
+              : Derived::template impl<>
+            {
+                typedef typename result::result_type type;
+            };
+
+            NullaryResult operator()() const
+            {
+                result<Derived const()> impl;
+                return impl();
+            }
+
+            #define BOOST_PP_ITERATION_PARAMS_1 (4, (1, BOOST_PROTO_MAX_ARITY, <boost/proto/detail/poly_function.hpp>, 0))
+            #include BOOST_PP_ITERATE()
+        };
+
+        template<typename T>
+        struct wrap_t;
+
+        typedef char poly_function_t;
+        typedef char (&mono_function_t)[2];
+        typedef char (&unknown_function_t)[3];
+
+        template<typename T> poly_function_t test_poly_function(T *, wrap_t<typename T::is_poly_function_base_> * = 0);
+        template<typename T> mono_function_t test_poly_function(T *, wrap_t<typename T::result_type> * = 0);
+        template<typename T> unknown_function_t test_poly_function(T *, ...);
+
+        ////////////////////////////////////////////////////////////////////////////////////////////////
+        template<typename Fun, typename Sig, typename Switch = mpl::size_t<sizeof(test_poly_function<Fun>(0,0))> >
+        struct poly_function_traits
+        {
+            typedef typename Fun::template result<Sig>::type result_type;
+            typedef Fun function_type;
+        };
+
+        ////////////////////////////////////////////////////////////////////////////////////////////////
+        template<typename Fun, typename Sig>
+        struct poly_function_traits<Fun, Sig, mpl::size_t<sizeof(mono_function_t)> >
+        {
+            typedef typename Fun::result_type result_type;
+            typedef Fun function_type;
+        };
+
+        ////////////////////////////////////////////////////////////////////////////////////////////////
+        template<typename PolyFunSig, bool IsPolyFunction>
+        struct as_mono_function_impl;
+
+        ////////////////////////////////////////////////////////////////////////////////////////////////
+        template<typename PolyFunSig>
+        struct as_mono_function;
+
+        #define BOOST_PP_ITERATION_PARAMS_1 (4, (1, BOOST_PROTO_MAX_ARITY, <boost/proto/detail/poly_function.hpp>, 1))
+        #include BOOST_PP_ITERATE()
+
+    }}} // namespace boost::proto::detail
+
+    #ifdef _MSC_VER
+    # pragma warning(pop)
+    #endif
+
+    #endif
+
+#elif 0 == BOOST_PP_ITERATION_FLAGS()
+
+    #define N BOOST_PP_ITERATION()
+
+            template<typename This BOOST_PP_ENUM_TRAILING_PARAMS(N, typename A)>
+            struct result<This(BOOST_PP_ENUM_PARAMS(N, A))>
+              : Derived::template impl<
+                    BOOST_PP_ENUM_BINARY_PARAMS(
+                        N
+                      , typename normalize_arg<A
+                      , >::type BOOST_PP_INTERCEPT
+                    )
+                >
+            {
+                typedef typename result::result_type type;
+            };
+
+            template<BOOST_PP_ENUM_PARAMS(N, typename A)>
+            typename result<
+                Derived const(
+                    BOOST_PP_ENUM_BINARY_PARAMS(N, A, const & BOOST_PP_INTERCEPT)
+                )
+            >::type
+            operator ()(BOOST_PP_ENUM_BINARY_PARAMS(N, A, const &a)) const
+            {
+                result<
+                    Derived const(
+                        BOOST_PP_ENUM_BINARY_PARAMS(N, A, const & BOOST_PP_INTERCEPT)
+                    )
+                > impl;
+
+                #define M0(Z, N, DATA)                                                              \
+                    static_cast<typename normalize_arg<BOOST_PP_CAT(A, N) const &>                  \
+                        ::reference>(BOOST_PP_CAT(a, N))
+                return impl(BOOST_PP_ENUM(N, M0, ~));
+                #undef M0
+            }
+
+    #undef N
+
+#elif 1 == BOOST_PP_ITERATION_FLAGS()
+
+    #define N BOOST_PP_ITERATION()
+
+        ////////////////////////////////////////////////////////////////////////////////////////////////
+        template<typename PolyFun BOOST_PP_ENUM_TRAILING_PARAMS(N, typename A)>
+        struct poly_function_traits<PolyFun, PolyFun(BOOST_PP_ENUM_PARAMS(N, A)), mpl::size_t<sizeof(poly_function_t)> >
+        {
+            typedef typename PolyFun::template impl<BOOST_PP_ENUM_PARAMS(N, const A)> function_type;
+            typedef typename function_type::result_type result_type;
+        };
+
+        ////////////////////////////////////////////////////////////////////////////////////////////////
+        template<typename PolyFun BOOST_PP_ENUM_TRAILING_PARAMS(N, typename A)>
+        struct as_mono_function_impl<PolyFun(BOOST_PP_ENUM_PARAMS(N, A)), true>
+        {
+            typedef typename PolyFun::template impl<BOOST_PP_ENUM_PARAMS(N, const A)> type;
+        };
+
+        ////////////////////////////////////////////////////////////////////////////////////////////////
+        template<typename PolyFun BOOST_PP_ENUM_TRAILING_PARAMS(N, typename A)>
+        struct as_mono_function_impl<PolyFun(BOOST_PP_ENUM_PARAMS(N, A)), false>
+        {
+            typedef PolyFun type;
+        };
+
+        ////////////////////////////////////////////////////////////////////////////////////////////////
+        template<typename PolyFun BOOST_PP_ENUM_TRAILING_PARAMS(N, typename A)>
+        struct as_mono_function<PolyFun(BOOST_PP_ENUM_PARAMS(N, A))>
+          : as_mono_function_impl<PolyFun(BOOST_PP_ENUM_PARAMS(N, A)), is_poly_function<PolyFun>::value>
+        {};
+
+    #undef N
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/domain.hpp b/3rdParty/Boost/src/boost/proto/domain.hpp
new file mode 100644
index 0000000..29626aa
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/domain.hpp
@@ -0,0 +1,319 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file domain.hpp
+/// Contains definition of domain\<\> class template and helpers for
+/// defining domains with a generator and a grammar for controlling
+/// operator overloading.
+//
+//  Copyright 2008 Eric Niebler. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROTO_DOMAIN_HPP_EAN_02_13_2007
+#define BOOST_PROTO_DOMAIN_HPP_EAN_02_13_2007
+
+#include <boost/ref.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/proto/proto_fwd.hpp>
+#include <boost/proto/generate.hpp>
+#include <boost/proto/detail/as_expr.hpp>
+#include <boost/proto/detail/deduce_domain.hpp>
+
+namespace boost { namespace proto
+{
+
+    namespace detail
+    {
+        struct not_a_generator
+        {};
+
+        struct not_a_grammar
+        {};
+
+        struct not_a_domain
+        {};
+    }
+
+    namespace domainns_
+    {
+        /// \brief For use in defining domain tags to be used
+        /// with \c proto::extends\<\>. A \e Domain associates
+        /// an expression type with a \e Generator, and optionally
+        /// a \e Grammar.
+        ///
+        /// The Generator determines how new expressions in the
+        /// domain are constructed. Typically, a generator wraps
+        /// all new expressions in a wrapper that imparts
+        /// domain-specific behaviors to expressions within its
+        /// domain. (See \c proto::extends\<\>.)
+        ///
+        /// The Grammar determines whether a given expression is
+        /// valid within the domain, and automatically disables
+        /// any operator overloads which would cause an invalid
+        /// expression to be created. By default, the Grammar
+        /// parameter defaults to the wildcard, \c proto::_, which
+        /// makes all expressions valid within the domain.
+        ///
+        /// The Super declares the domain currently being defined
+        /// to be a sub-domain of Super. Expressions in sub-domains
+        /// can be freely combined with expressions in its super-
+        /// domain (and <I>its</I> super-domain, etc.).
+        ///
+        /// Example:
+        /// \code
+        /// template<typename Expr>
+        /// struct MyExpr;
+        ///
+        /// struct MyGrammar
+        ///   : or_< terminal<_>, plus<MyGrammar, MyGrammar> >
+        /// {};
+        ///
+        /// // Define MyDomain, in which all expressions are
+        /// // wrapped in MyExpr<> and only expressions that
+        /// // conform to MyGrammar are allowed.
+        /// struct MyDomain
+        ///   : domain<generator<MyExpr>, MyGrammar>
+        /// {};
+        ///
+        /// // Use MyDomain to define MyExpr
+        /// template<typename Expr>
+        /// struct MyExpr
+        ///   : extends<Expr, MyExpr<Expr>, MyDomain>
+        /// {
+        ///     // ...
+        /// };
+        /// \endcode
+        ///
+        template<
+            typename Generator // = default_generator
+          , typename Grammar   // = proto::_
+          , typename Super     // = no_super_domain
+        >
+        struct domain
+          : Generator
+        {
+            typedef Generator proto_generator;
+            typedef Grammar   proto_grammar;
+            typedef Super     proto_super_domain;
+            typedef domain    proto_base_domain;
+
+            /// INTERNAL ONLY
+            typedef void proto_is_domain_;
+
+            /// \brief A unary MonomorphicFunctionObject that turns objects into Proto
+            /// expression objects in this domain.
+            ///
+            /// The <tt>as_expr\<\></tt> function object turns objects into Proto expressions, if
+            /// they are not already, by making them Proto terminals held by value if
+            /// possible. Objects that are already Proto expressions are left alone.
+            ///
+            /// If <tt>wants_basic_expr\<Generator\>::value</tt> is true, then let \c E be \c basic_expr;
+            /// otherwise, let \t E be \c expr. Given an lvalue \c t of type \c T:
+            ///
+            /// If \c T is not a Proto expression type the resulting terminal is
+            /// calculated as follows:
+            ///
+            ///   If \c T is a function type, an abstract type, or a type derived from
+            ///   \c std::ios_base, let \c A be <tt>T &</tt>.
+            ///   Otherwise, let \c A be the type \c T stripped of cv-qualifiers.
+            ///   Then, the result of applying <tt>as_expr\<T\>()(t)</tt> is
+            ///   <tt>Generator()(E\<tag::terminal, term\<A\> \>::make(t))</tt>.
+            ///
+            /// If \c T is a Proto expression type and its generator type is different from
+            /// \c Generator, the result is <tt>Generator()(t)</tt>.
+            ///
+            /// Otherwise, the result is \c t converted to an (un-const) rvalue.
+            ///
+            template<typename T, typename IsExpr = void, typename Callable = proto::callable>
+            struct as_expr
+              : detail::as_expr<
+                    T
+                  , typename detail::base_generator<Generator>::type
+                  , wants_basic_expr<Generator>::value
+                >
+            {
+                BOOST_PROTO_CALLABLE()
+            };
+
+            /// INTERNAL ONLY
+            ///
+            template<typename T>
+            struct as_expr<T, typename T::proto_is_expr_, proto::callable>
+            {
+                BOOST_PROTO_CALLABLE()
+                typedef typename remove_const<T>::type result_type;
+
+                result_type operator()(T &e) const
+                {
+                    return e;
+                }
+            };
+
+            /// \brief A unary MonomorphicFunctionObject that turns objects into Proto
+            /// expression objects in this domain.
+            ///
+            /// The <tt>as_child\<\></tt> function object turns objects into Proto expressions, if
+            /// they are not already, by making them Proto terminals held by reference.
+            /// Objects that are already Proto expressions are simply returned by reference.
+            ///
+            /// If <tt>wants_basic_expr\<Generator\>::value</tt> is true, then let \c E be \c basic_expr;
+            /// otherwise, let \t E be \c expr. Given an lvalue \c t of type \c T:
+            ///
+            /// If \c T is not a Proto expression type the resulting terminal is
+            /// <tt>Generator()(E\<tag::terminal, term\<T &\> \>::make(t))</tt>.
+            ///
+            /// If \c T is a Proto expression type and its generator type is different from
+            /// \c Generator, the result is <tt>Generator()(t)</tt>.
+            ///
+            /// Otherwise, the result is the lvalue \c t.
+            ///
+            template<typename T, typename IsExpr = void, typename Callable = proto::callable>
+            struct as_child
+              : detail::as_child<
+                    T
+                  , typename detail::base_generator<Generator>::type
+                  , wants_basic_expr<Generator>::value
+                >
+            {
+                BOOST_PROTO_CALLABLE()
+            };
+
+            /// INTERNAL ONLY
+            ///
+            template<typename T>
+            struct as_child<T, typename T::proto_is_expr_, proto::callable>
+            {
+                BOOST_PROTO_CALLABLE()
+                typedef T &result_type;
+
+                result_type operator()(T &e) const
+                {
+                    return e;
+                }
+            };
+        };
+
+        /// \brief The domain expressions have by default, if
+        /// \c proto::extends\<\> has not been used to associate
+        /// a domain with an expression.
+        ///
+        struct default_domain
+          : domain<>
+        {};
+
+        /// \brief A pseudo-domain for use in functions and
+        /// metafunctions that require a domain parameter. It
+        /// indicates that the domain of the parent node should
+        /// be inferred from the domains of the child nodes.
+        ///
+        /// \attention \c deduce_domain is not itself a valid domain.
+        ///
+        struct deduce_domain
+          : domain<detail::not_a_generator, detail::not_a_grammar, detail::not_a_domain>
+        {};
+
+        /// \brief Given a domain, a tag type and an argument list,
+        /// compute the type of the expression to generate. This is
+        /// either an instance of \c proto::expr\<\> or
+        /// \c proto::basic_expr\<\>.
+        ///
+        template<typename Domain, typename Tag, typename Args, bool WantsBasicExpr>
+        struct base_expr
+        {
+            typedef proto::expr<Tag, Args, Args::arity> type;
+        };
+
+        /// INTERNAL ONLY
+        ///
+        template<typename Domain, typename Tag, typename Args>
+        struct base_expr<Domain, Tag, Args, true>
+        {
+            typedef proto::basic_expr<Tag, Args, Args::arity> type;
+        };
+
+    }
+
+    /// A metafunction that returns \c mpl::true_
+    /// if the type \c T is the type of a Proto domain;
+    /// \c mpl::false_ otherwise. If \c T inherits from
+    /// \c proto::domain\<\>, \c is_domain\<T\> is
+    /// \c mpl::true_.
+    template<typename T, typename Void  /* = void*/>
+    struct is_domain
+      : mpl::false_
+    {};
+
+    /// INTERNAL ONLY
+    ///
+    template<typename T>
+    struct is_domain<T, typename T::proto_is_domain_>
+      : mpl::true_
+    {};
+
+    /// A metafunction that returns the domain of
+    /// a given type. If \c T is a Proto expression
+    /// type, it returns that expression's associated
+    /// domain. If not, it returns
+    /// \c proto::default_domain.
+    template<typename T, typename Void /* = void*/>
+    struct domain_of
+    {
+        typedef default_domain type;
+    };
+
+    /// INTERNAL ONLY
+    ///
+    template<typename T>
+    struct domain_of<T, typename T::proto_is_expr_>
+    {
+        typedef typename T::proto_domain type;
+    };
+
+    /// INTERNAL ONLY
+    ///
+    template<typename T>
+    struct domain_of<T &, void>
+    {
+        typedef typename domain_of<T>::type type;
+    };
+
+    /// INTERNAL ONLY
+    ///
+    template<typename T>
+    struct domain_of<boost::reference_wrapper<T>, void>
+    {
+        typedef typename domain_of<T>::type type;
+    };
+
+    /// INTERNAL ONLY
+    ///
+    template<typename T>
+    struct domain_of<boost::reference_wrapper<T> const, void>
+    {
+        typedef typename domain_of<T>::type type;
+    };
+
+    /// A metafunction that returns \c mpl::true_
+    /// if the type \c SubDomain is a sub-domain of
+    /// \c SuperDomain; \c mpl::false_ otherwise.
+    template<typename SubDomain, typename SuperDomain>
+    struct is_sub_domain_of
+      : is_sub_domain_of<typename SubDomain::proto_super_domain, SuperDomain>
+    {};
+
+    /// INTERNAL ONLY
+    ///
+    template<typename SuperDomain>
+    struct is_sub_domain_of<proto::no_super_domain, SuperDomain>
+      : mpl::false_
+    {};
+
+    /// INTERNAL ONLY
+    ///
+    template<typename SuperDomain>
+    struct is_sub_domain_of<SuperDomain, SuperDomain>
+      : mpl::true_
+    {};
+
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/eval.hpp b/3rdParty/Boost/src/boost/proto/eval.hpp
new file mode 100644
index 0000000..25a91aa
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/eval.hpp
@@ -0,0 +1,140 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file eval.hpp
+/// Contains the eval() expression evaluator.
+//
+//  Copyright 2008 Eric Niebler. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROTO_EVAL_HPP_EAN_03_29_2007
+#define BOOST_PROTO_EVAL_HPP_EAN_03_29_2007
+
+#include <boost/proto/proto_fwd.hpp> // BOOST_PROTO_CALLABLE
+#include <boost/type_traits/remove_reference.hpp>
+
+namespace boost { namespace proto
+{
+
+    namespace result_of
+    {
+        /// \brief A metafunction for calculating the return type
+        /// of \c proto::eval() given a certain \c Expr and \c Context
+        /// types.
+        ///
+        /// \note The types \c Expr and \c Context should not be
+        /// reference types. They may be cv-qualified, but the
+        /// cv-qualification on the \c Context parameter is ignored.
+        template<typename Expr, typename Context>
+        struct eval
+        {
+            typedef typename Context::template eval<Expr>::result_type type;
+        };
+    }
+
+    namespace functional
+    {
+        /// \brief A PolymorphicFunctionObject type for
+        /// evaluating a given Proto expression with a given
+        /// context.
+        struct eval
+        {
+            BOOST_PROTO_CALLABLE()
+
+            template<typename Sig>
+            struct result;
+
+            template<typename This, typename Expr, typename Context>
+            struct result<This(Expr, Context)>
+            {
+                typedef
+                    typename proto::result_of::eval<
+                        typename remove_reference<Expr>::type
+                      , typename remove_reference<Context>::type
+                    >::type
+                type;
+            };
+
+            /// \brief Evaluate a given Proto expression with a given
+            /// context.
+            /// \param expr The Proto expression to evaluate
+            /// \param context The context in which the expression should be
+            ///     evaluated.
+            /// \return <tt>typename Context::template eval<Expr>()(expr, context)</tt>
+            template<typename Expr, typename Context>
+            typename proto::result_of::eval<Expr, Context>::type
+            operator ()(Expr &e, Context &ctx) const
+            {
+                return typename Context::template eval<Expr>()(e, ctx);
+            }
+
+            /// \overload
+            ///
+            template<typename Expr, typename Context>
+            typename proto::result_of::eval<Expr, Context>::type
+            operator ()(Expr &e, Context const &ctx) const
+            {
+                return typename Context::template eval<Expr>()(e, ctx);
+            }
+
+            /// \overload
+            ///
+            template<typename Expr, typename Context>
+            typename proto::result_of::eval<Expr const, Context>::type
+            operator ()(Expr const &e, Context &ctx) const
+            {
+                return typename Context::template eval<Expr const>()(e, ctx);
+            }
+
+            /// \overload
+            ///
+            template<typename Expr, typename Context>
+            typename proto::result_of::eval<Expr const, Context>::type
+            operator ()(Expr const &e, Context const &ctx) const
+            {
+                return typename Context::template eval<Expr const>()(e, ctx);
+            }
+        };
+    }
+
+    /// \brief Evaluate a given Proto expression with a given
+    /// context.
+    /// \param expr The Proto expression to evaluate
+    /// \param context The context in which the expression should be
+    ///     evaluated.
+    /// \return <tt>typename Context::template eval<Expr>()(expr, context)</tt>
+    template<typename Expr, typename Context>
+    typename proto::result_of::eval<Expr, Context>::type
+    eval(Expr &e, Context &ctx)
+    {
+        return typename Context::template eval<Expr>()(e, ctx);
+    }
+
+    /// \overload
+    ///
+    template<typename Expr, typename Context>
+    typename proto::result_of::eval<Expr, Context>::type
+    eval(Expr &e, Context const &ctx)
+    {
+        return typename Context::template eval<Expr>()(e, ctx);
+    }
+
+    /// \overload
+    ///
+    template<typename Expr, typename Context>
+    typename proto::result_of::eval<Expr const, Context>::type
+    eval(Expr const &e, Context &ctx)
+    {
+        return typename Context::template eval<Expr const>()(e, ctx);
+    }
+
+    /// \overload
+    ///
+    template<typename Expr, typename Context>
+    typename proto::result_of::eval<Expr const, Context>::type
+    eval(Expr const &e, Context const &ctx)
+    {
+        return typename Context::template eval<Expr const>()(e, ctx);
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/expr.hpp b/3rdParty/Boost/src/boost/proto/expr.hpp
new file mode 100644
index 0000000..e7a92c3
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/expr.hpp
@@ -0,0 +1,162 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file expr.hpp
+/// Contains definition of expr\<\> class template.
+//
+//  Copyright 2008 Eric Niebler. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROTO_EXPR_HPP_EAN_04_01_2005
+#define BOOST_PROTO_EXPR_HPP_EAN_04_01_2005
+
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/arithmetic/dec.hpp>
+#include <boost/preprocessor/selection/max.hpp>
+#include <boost/preprocessor/iteration/iterate.hpp>
+#include <boost/preprocessor/repetition/repeat.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/preprocessor/repetition/enum_trailing.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/enum_trailing_params.hpp>
+#include <boost/preprocessor/repetition/enum_trailing_binary_params.hpp>
+#include <boost/utility/addressof.hpp>
+#include <boost/proto/proto_fwd.hpp>
+#include <boost/proto/args.hpp>
+#include <boost/proto/traits.hpp>
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma warning(push)
+# pragma warning(disable : 4510) // default constructor could not be generated
+# pragma warning(disable : 4512) // assignment operator could not be generated
+# pragma warning(disable : 4610) // user defined constructor required
+#endif
+
+namespace boost { namespace proto
+{
+
+    namespace detail
+    {
+    /// INTERNAL ONLY
+    ///
+    #define BOOST_PROTO_CHILD(Z, N, DATA)                                                       \
+        typedef BOOST_PP_CAT(Arg, N) BOOST_PP_CAT(proto_child, N);                              \
+        BOOST_PP_CAT(proto_child, N) BOOST_PP_CAT(child, N);                                    \
+        /**< INTERNAL ONLY */
+
+    /// INTERNAL ONLY
+    ///
+    #define BOOST_PROTO_VOID(Z, N, DATA)                                                        \
+        typedef void BOOST_PP_CAT(proto_child, N);                                              \
+        /**< INTERNAL ONLY */
+
+        struct not_a_valid_type
+        {
+        private:
+            not_a_valid_type()
+            {}
+        };
+        
+        template<typename Tag, typename Arg>
+        struct address_of_hack
+        {
+            typedef not_a_valid_type type;
+        };
+
+        template<typename Expr>
+        struct address_of_hack<proto::tag::address_of, Expr &>
+        {
+            typedef Expr *type;
+        };
+
+        template<typename T, typename Expr, typename Arg0>
+        Expr make_terminal(T &t, Expr *, proto::term<Arg0> *)
+        {
+            Expr that = {t};
+            return that;
+        }
+
+        template<typename T, typename Expr, typename Arg0, std::size_t N>
+        Expr make_terminal(T (&t)[N], Expr *, proto::term<Arg0[N]> *)
+        {
+            Expr that;
+            for(std::size_t i = 0; i < N; ++i)
+            {
+                that.child0[i] = t[i];
+            }
+            return that;
+        }
+
+        template<typename T, typename Expr, typename Arg0, std::size_t N>
+        Expr make_terminal(T const(&t)[N], Expr *, proto::term<Arg0[N]> *)
+        {
+            Expr that;
+            for(std::size_t i = 0; i < N; ++i)
+            {
+                that.child0[i] = t[i];
+            }
+            return that;
+        }
+
+        template<typename T, typename U>
+        struct same_cv
+        {
+            typedef U type;
+        };
+
+        template<typename T, typename U>
+        struct same_cv<T const, U>
+        {
+            typedef U const type;
+        };
+    }
+
+    namespace result_of
+    {
+        /// \brief A helper metafunction for computing the
+        /// return type of \c proto::expr\<\>::operator().
+        template<typename Sig, typename This, typename Domain>
+        struct funop;
+
+        #define BOOST_PP_ITERATION_PARAMS_1 (3, (0, BOOST_PP_DEC(BOOST_PROTO_MAX_FUNCTION_CALL_ARITY), <boost/proto/detail/funop.hpp>))
+        #include BOOST_PP_ITERATE()
+    }
+
+    namespace exprns_
+    {
+        // The expr<> specializations are actually defined here.
+        #define BOOST_PROTO_DEFINE_TERMINAL
+        #define BOOST_PP_ITERATION_PARAMS_1 (3, (0, 0, <boost/proto/detail/expr0.hpp>))
+        #include BOOST_PP_ITERATE()
+
+        #undef BOOST_PROTO_DEFINE_TERMINAL
+        #define BOOST_PP_ITERATION_PARAMS_1 (3, (1, BOOST_PROTO_MAX_ARITY, <boost/proto/detail/expr0.hpp>))
+        #include BOOST_PP_ITERATE()
+    }
+
+    #undef BOOST_PROTO_CHILD
+    #undef BOOST_PROTO_VOID
+
+    /// \brief Lets you inherit the interface of an expression
+    /// while hiding from Proto the fact that the type is a Proto
+    /// expression.
+    template<typename Expr>
+    struct unexpr
+      : Expr
+    {
+        BOOST_PROTO_UNEXPR()
+
+        explicit unexpr(Expr const &e)
+          : Expr(e)
+        {}
+        
+        using Expr::operator =;
+    };
+
+}}
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma warning(pop)
+#endif
+
+#endif // BOOST_PROTO_EXPR_HPP_EAN_04_01_2005
diff --git a/3rdParty/Boost/src/boost/proto/extends.hpp b/3rdParty/Boost/src/boost/proto/extends.hpp
new file mode 100644
index 0000000..1f7f497
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/extends.hpp
@@ -0,0 +1,654 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file extends.hpp
+/// Macros and a base class for defining end-user expression types
+//
+//  Copyright 2008 Eric Niebler. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROTO_EXTENDS_HPP_EAN_11_1_2006
+#define BOOST_PROTO_EXTENDS_HPP_EAN_11_1_2006
+
+#include <cstddef> // for offsetof
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/preprocessor/facilities/empty.hpp>
+#include <boost/preprocessor/tuple/elem.hpp>
+#include <boost/preprocessor/control/if.hpp>
+#include <boost/preprocessor/arithmetic/inc.hpp>
+#include <boost/preprocessor/arithmetic/dec.hpp>
+#include <boost/preprocessor/iteration/local.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/enum_trailing_params.hpp>
+#include <boost/preprocessor/repetition/enum_trailing_binary_params.hpp>
+#include <boost/preprocessor/seq/for_each.hpp>
+#include <boost/utility/addressof.hpp>
+#include <boost/utility/result_of.hpp>
+#include <boost/proto/proto_fwd.hpp>
+#include <boost/proto/traits.hpp>
+#include <boost/proto/expr.hpp>
+#include <boost/proto/args.hpp>
+#include <boost/proto/traits.hpp>
+#include <boost/proto/generate.hpp>
+
+#ifdef _MSC_VER
+#define BOOST_PROTO_DISABLE_MSVC_C4522 __pragma(warning(disable: 4522))
+#else
+#define BOOST_PROTO_DISABLE_MSVC_C4522 
+#endif
+
+namespace boost { namespace proto
+{
+    #ifdef __GNUC__
+    /// INTERNAL ONLY
+    ///
+    # define BOOST_PROTO_ADDROF(x) ((char const volatile*)boost::addressof(x))
+    /// INTERNAL ONLY
+    ///
+    # define BOOST_PROTO_OFFSETOF(s,m) (BOOST_PROTO_ADDROF((((s *)this)->m)) - BOOST_PROTO_ADDROF(*((s *)this)))
+    #else
+    /// INTERNAL ONLY
+    ///
+    # define BOOST_PROTO_OFFSETOF offsetof
+    #endif
+
+    /// INTERNAL ONLY
+    ///
+    #define BOOST_PROTO_CONST() const
+
+    /// INTERNAL ONLY
+    ///
+    #define BOOST_PROTO_TYPENAME() typename
+
+    /// INTERNAL ONLY
+    ///
+    #define BOOST_PROTO_TEMPLATE_YES_(Z, N) template<BOOST_PP_ENUM_PARAMS_Z(Z, N, typename A)>
+
+    /// INTERNAL ONLY
+    ///
+    #define BOOST_PROTO_TEMPLATE_NO_(Z, N)
+
+    /// INTERNAL ONLY
+    ///
+    #define BOOST_PROTO_DEFINE_FUN_OP_IMPL_(Z, N, DATA, Const)                                      \
+        BOOST_PP_IF(N, BOOST_PROTO_TEMPLATE_YES_, BOOST_PROTO_TEMPLATE_NO_)(Z, N)                   \
+        typename BOOST_PROTO_RESULT_OF<                                                              \
+            proto_generator(                                                                        \
+                typename boost::proto::result_of::BOOST_PP_CAT(funop, N)<                           \
+                    proto_derived_expr Const()                                                      \
+                  , proto_domain                                                                    \
+                    BOOST_PP_ENUM_TRAILING_PARAMS_Z(Z, N, const A)                                  \
+                >::type                                                                             \
+            )                                                                                       \
+        >::type const                                                                               \
+        operator ()(BOOST_PP_ENUM_BINARY_PARAMS_Z(Z, N, A, const &a)) Const()                       \
+        {                                                                                           \
+            typedef boost::proto::result_of::BOOST_PP_CAT(funop, N)<                                \
+                proto_derived_expr Const()                                                          \
+              , proto_domain                                                                        \
+                BOOST_PP_ENUM_TRAILING_PARAMS_Z(Z, N, const A)                                      \
+            > funop;                                                                                \
+            return proto_generator()(                                                               \
+                funop::call(                                                                        \
+                    *static_cast<proto_derived_expr Const() *>(this)                                \
+                    BOOST_PP_ENUM_TRAILING_PARAMS_Z(Z, N, a)                                        \
+                )                                                                                   \
+            );                                                                                      \
+        }                                                                                           \
+        /**/
+
+    /// INTERNAL ONLY
+    ///
+    #define BOOST_PROTO_DEFINE_FUN_OP_VARIADIC_IMPL_(Const)                                         \
+        template<typename... A>                                                                     \
+        typename BOOST_PROTO_RESULT_OF<                                                              \
+            proto_generator(                                                                        \
+                typename boost::proto::result_of::funop<                                            \
+                    proto_derived_expr Const()(A const &...)                                        \
+                  , proto_derived_expr                                                              \
+                  , proto_domain                                                                    \
+                >::type                                                                             \
+            )                                                                                       \
+        >::type const                                                                               \
+        operator ()(A const &...a) Const()                                                          \
+        {                                                                                           \
+            typedef boost::proto::result_of::funop<                                                 \
+                proto_derived_expr Const()(A const &...)                                            \
+              , proto_derived_expr                                                                  \
+              , proto_domain                                                                        \
+            > funop;                                                                                \
+            return proto_generator()(                                                               \
+                funop::call(                                                                        \
+                    *static_cast<proto_derived_expr Const() *>(this)                                \
+                  , a...                                                                            \
+                )                                                                                   \
+            );                                                                                      \
+        }                                                                                           \
+        /**/
+
+    /// INTERNAL ONLY
+    ///
+    #define BOOST_PROTO_DEFINE_FUN_OP_CONST(Z, N, DATA)                                             \
+        BOOST_PROTO_DEFINE_FUN_OP_IMPL_(Z, N, DATA, BOOST_PROTO_CONST)                              \
+        /**/
+
+    /// INTERNAL ONLY
+    ///
+    #define BOOST_PROTO_DEFINE_FUN_OP_NON_CONST(Z, N, DATA)                                         \
+        BOOST_PROTO_DEFINE_FUN_OP_IMPL_(Z, N, DATA, BOOST_PP_EMPTY)                                 \
+        /**/
+
+    /// INTERNAL ONLY
+    ///
+    #define BOOST_PROTO_DEFINE_FUN_OP(Z, N, DATA)                                                   \
+        BOOST_PROTO_DEFINE_FUN_OP_CONST(Z, N, DATA)                                                 \
+        BOOST_PROTO_DEFINE_FUN_OP_NON_CONST(Z, N, DATA)                                             \
+        /**/
+
+    /// INTERNAL ONLY
+    ///
+    #define BOOST_PROTO_EXTENDS_CHILD(Z, N, DATA)                                                   \
+        typedef                                                                                     \
+            typename proto_base_expr::BOOST_PP_CAT(proto_child, N)                                  \
+        BOOST_PP_CAT(proto_child, N);                                                               \
+        /**/
+
+    #define BOOST_PROTO_BASIC_EXTENDS_(Expr, Derived, Domain)                                       \
+        Expr proto_expr_;                                                                           \
+                                                                                                    \
+        typedef Expr proto_base_expr_; /**< INTERNAL ONLY */                                        \
+        typedef typename proto_base_expr_::proto_base_expr proto_base_expr;                         \
+        typedef Domain proto_domain;                                                                \
+        typedef Derived proto_derived_expr;                                                         \
+        typedef typename proto_base_expr::proto_tag proto_tag;                                      \
+        typedef typename proto_base_expr::proto_args proto_args;                                    \
+        typedef typename proto_base_expr::proto_arity proto_arity;                                  \
+        typedef typename proto_base_expr::proto_grammar proto_grammar;                              \
+        typedef typename proto_base_expr::address_of_hack_type_ proto_address_of_hack_type_;        \
+        typedef void proto_is_expr_; /**< INTERNAL ONLY */                                          \
+        BOOST_STATIC_CONSTANT(long, proto_arity_c = proto_base_expr::proto_arity_c);                \
+        typedef boost::proto::tag::proto_expr fusion_tag;                                           \
+        BOOST_PP_REPEAT(BOOST_PROTO_MAX_ARITY, BOOST_PROTO_EXTENDS_CHILD, ~)                        \
+                                                                                                    \
+        static proto_derived_expr const make(Expr const &e)                                         \
+        {                                                                                           \
+            proto_derived_expr that = {e};                                                          \
+            return that;                                                                            \
+        }                                                                                           \
+                                                                                                    \
+        proto_base_expr &proto_base()                                                               \
+        {                                                                                           \
+            return this->proto_expr_.proto_base();                                                  \
+        }                                                                                           \
+                                                                                                    \
+        proto_base_expr const &proto_base() const                                                   \
+        {                                                                                           \
+            return this->proto_expr_.proto_base();                                                  \
+        }                                                                                           \
+                                                                                                    \
+        operator proto_address_of_hack_type_() const                                                \
+        {                                                                                           \
+            return boost::addressof(this->proto_base().child0);                                     \
+        }                                                                                           \
+        /**/
+
+    #define BOOST_PROTO_BASIC_EXTENDS(Expr, Derived, Domain)                                        \
+        BOOST_PROTO_BASIC_EXTENDS_(Expr, Derived, Domain)                                           \
+        typedef void proto_is_aggregate_;                                                           \
+        typedef Domain::proto_generator proto_generator;                                            \
+        /**< INTERNAL ONLY */
+
+    #define BOOST_PROTO_EXTENDS_COPY_ASSIGN_IMPL_(This, Const, Typename)                            \
+        BOOST_PROTO_DISABLE_MSVC_C4522                                                              \
+        Typename() BOOST_PROTO_RESULT_OF<                                                            \
+            Typename() This::proto_generator(                                                       \
+                Typename() boost::proto::base_expr<                                                 \
+                    Typename() This::proto_domain                                                   \
+                  , boost::proto::tag::assign                                                       \
+                  , boost::proto::list2<                                                            \
+                        This &                                                                      \
+                      , This Const() &                                                              \
+                    >                                                                               \
+                >::type                                                                             \
+            )                                                                                       \
+        >::type const                                                                               \
+        operator =(This Const() &a)                                                                 \
+        {                                                                                           \
+            typedef                                                                                 \
+                Typename() boost::proto::base_expr<                                                 \
+                    Typename() This::proto_domain                                                   \
+                  , boost::proto::tag::assign                                                       \
+                  , boost::proto::list2<                                                            \
+                        This &                                                                      \
+                      , This Const() &                                                              \
+                    >                                                                               \
+                >::type                                                                             \
+            that_type;                                                                              \
+            that_type const that = {                                                                \
+                *this                                                                               \
+              , a                                                                                   \
+            };                                                                                      \
+            return Typename() This::proto_generator()(that);                                        \
+        }                                                                                           \
+        /**/
+
+        // MSVC 8.0 and higher seem to need copy-assignment operator to be overloaded on *both*
+        // const and non-const rhs arguments.
+    #if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1600)) && (BOOST_MSVC > 1310)
+        #define BOOST_PROTO_EXTENDS_COPY_ASSIGN_(This, Typename)                                    \
+            BOOST_PROTO_EXTENDS_COPY_ASSIGN_IMPL_(This, BOOST_PP_EMPTY, Typename)                   \
+            BOOST_PROTO_EXTENDS_COPY_ASSIGN_IMPL_(This, BOOST_PROTO_CONST, Typename)                \
+            /**/
+    #else
+        #define BOOST_PROTO_EXTENDS_COPY_ASSIGN_(This, Typename)                                    \
+            BOOST_PROTO_EXTENDS_COPY_ASSIGN_IMPL_(This, BOOST_PROTO_CONST, Typename)                \
+            /**/
+    #endif
+
+        /// INTERNAL ONLY
+        ///
+    #define BOOST_PROTO_EXTENDS_ASSIGN_IMPL_(ThisConst, ThatConst)                                  \
+        template<typename A>                                                                        \
+        typename BOOST_PROTO_RESULT_OF<                                                              \
+            proto_generator(                                                                        \
+                typename boost::proto::base_expr<                                                   \
+                    proto_domain                                                                    \
+                  , boost::proto::tag::assign                                                       \
+                  , boost::proto::list2<                                                            \
+                        proto_derived_expr ThisConst() &                                            \
+                      , typename boost::proto::result_of::as_child<A ThatConst(), proto_domain>::type \
+                    >                                                                               \
+                >::type                                                                             \
+            )                                                                                       \
+        >::type const                                                                               \
+        operator =(A ThatConst() &a) ThisConst()                                                    \
+        {                                                                                           \
+            typedef                                                                                 \
+                typename boost::proto::base_expr<                                                   \
+                    proto_domain                                                                    \
+                  , boost::proto::tag::assign                                                       \
+                  , boost::proto::list2<                                                            \
+                        proto_derived_expr ThisConst() &                                            \
+                      , typename boost::proto::result_of::as_child<A ThatConst(), proto_domain>::type \
+                    >                                                                               \
+                >::type                                                                             \
+            that_type;                                                                              \
+            that_type const that = {                                                                \
+                *static_cast<proto_derived_expr ThisConst() *>(this)                                \
+              , boost::proto::as_child<proto_domain>(a)                                             \
+            };                                                                                      \
+            return proto_generator()(that);                                                         \
+        }                                                                                           \
+        /**/
+
+    #define BOOST_PROTO_EXTENDS_ASSIGN_CONST_()                                                     \
+        BOOST_PROTO_EXTENDS_ASSIGN_IMPL_(BOOST_PROTO_CONST, BOOST_PP_EMPTY)                         \
+        BOOST_PROTO_EXTENDS_ASSIGN_IMPL_(BOOST_PROTO_CONST, BOOST_PROTO_CONST)                      \
+        /**/
+
+    #define BOOST_PROTO_EXTENDS_ASSIGN_NON_CONST_()                                                 \
+        BOOST_PROTO_EXTENDS_ASSIGN_IMPL_(BOOST_PP_EMPTY, BOOST_PP_EMPTY)                            \
+        BOOST_PROTO_EXTENDS_ASSIGN_IMPL_(BOOST_PP_EMPTY, BOOST_PROTO_CONST)                         \
+        /**/
+
+    #define BOOST_PROTO_EXTENDS_ASSIGN_()                                                           \
+        BOOST_PROTO_EXTENDS_ASSIGN_CONST_()                                                         \
+        BOOST_PROTO_EXTENDS_ASSIGN_NON_CONST_()                                                     \
+        /**/
+
+    #define BOOST_PROTO_EXTENDS_ASSIGN_CONST()                                                      \
+        BOOST_PROTO_EXTENDS_COPY_ASSIGN_(proto_derived_expr, BOOST_PROTO_TYPENAME)                  \
+        BOOST_PROTO_EXTENDS_ASSIGN_CONST_()                                                         \
+        /**/
+
+    #define BOOST_PROTO_EXTENDS_ASSIGN_NON_CONST()                                                  \
+        BOOST_PROTO_EXTENDS_COPY_ASSIGN_(proto_derived_expr, BOOST_PROTO_TYPENAME)                  \
+        BOOST_PROTO_EXTENDS_ASSIGN_NON_CONST_()                                                     \
+        /**/
+
+    #define BOOST_PROTO_EXTENDS_ASSIGN()                                                            \
+        BOOST_PROTO_EXTENDS_COPY_ASSIGN_(proto_derived_expr, BOOST_PROTO_TYPENAME)                  \
+        BOOST_PROTO_EXTENDS_ASSIGN_()                                                               \
+        /**/
+
+        /// INTERNAL ONLY
+        ///
+    #define BOOST_PROTO_EXTENDS_SUBSCRIPT_IMPL_(ThisConst, ThatConst)                               \
+        template<typename A>                                                                        \
+        typename BOOST_PROTO_RESULT_OF<                                                              \
+            proto_generator(                                                                        \
+                typename boost::proto::base_expr<                                                   \
+                    proto_domain                                                                    \
+                  , boost::proto::tag::subscript                                                    \
+                  , boost::proto::list2<                                                            \
+                        proto_derived_expr ThisConst() &                                            \
+                      , typename boost::proto::result_of::as_child<A ThatConst(), proto_domain>::type \
+                    >                                                                               \
+                >::type                                                                             \
+            )                                                                                       \
+        >::type const                                                                               \
+        operator [](A ThatConst() &a) ThisConst()                                                   \
+        {                                                                                           \
+            typedef                                                                                 \
+                typename boost::proto::base_expr<                                                   \
+                    proto_domain                                                                    \
+                  , boost::proto::tag::subscript                                                    \
+                  , boost::proto::list2<                                                            \
+                        proto_derived_expr ThisConst() &                                            \
+                      , typename boost::proto::result_of::as_child<A ThatConst(), proto_domain>::type \
+                    >                                                                               \
+                >::type                                                                             \
+            that_type;                                                                              \
+            that_type const that = {                                                                \
+                *static_cast<proto_derived_expr ThisConst() *>(this)                                \
+              , boost::proto::as_child<proto_domain>(a)                                             \
+            };                                                                                      \
+            return proto_generator()(that);                                                         \
+        }                                                                                           \
+        /**/
+
+    #define BOOST_PROTO_EXTENDS_SUBSCRIPT_CONST()                                                   \
+        BOOST_PROTO_EXTENDS_SUBSCRIPT_IMPL_(BOOST_PROTO_CONST, BOOST_PP_EMPTY)                      \
+        BOOST_PROTO_EXTENDS_SUBSCRIPT_IMPL_(BOOST_PROTO_CONST, BOOST_PROTO_CONST)                   \
+        /**/
+
+    #define BOOST_PROTO_EXTENDS_SUBSCRIPT_NON_CONST()                                               \
+        BOOST_PROTO_EXTENDS_SUBSCRIPT_IMPL_(BOOST_PP_EMPTY, BOOST_PP_EMPTY)                         \
+        BOOST_PROTO_EXTENDS_SUBSCRIPT_IMPL_(BOOST_PP_EMPTY, BOOST_PROTO_CONST)                      \
+        /**/
+
+    #define BOOST_PROTO_EXTENDS_SUBSCRIPT()                                                         \
+        BOOST_PROTO_EXTENDS_SUBSCRIPT_CONST()                                                       \
+        BOOST_PROTO_EXTENDS_SUBSCRIPT_NON_CONST()                                                   \
+        /**/
+
+        /// INTERNAL ONLY
+        ///
+    #define BOOST_PROTO_EXTENDS_FUNCTION_()                                                         \
+        template<typename Sig>                                                                      \
+        struct result                                                                               \
+        {                                                                                           \
+            typedef                                                                                 \
+                typename BOOST_PROTO_RESULT_OF<                                                     \
+                    proto_generator(                                                                \
+                        typename boost::proto::result_of::funop<                                    \
+                            Sig                                                                     \
+                          , proto_derived_expr                                                      \
+                          , proto_domain                                                            \
+                        >::type                                                                     \
+                    )                                                                               \
+                >::type const                                                                       \
+            type;                                                                                   \
+        };                                                                                          \
+        /**/
+
+    #ifndef BOOST_NO_VARIADIC_TEMPLATES
+        #define BOOST_PROTO_EXTENDS_FUNCTION_CONST()                                                \
+            BOOST_PROTO_EXTENDS_FUNCTION_()                                                         \
+            BOOST_PROTO_DEFINE_FUN_OP_VARIADIC_IMPL_(BOOST_PROTO_CONST)                             \
+            /**/
+
+        #define BOOST_PROTO_EXTENDS_FUNCTION_NON_CONST()                                            \
+            BOOST_PROTO_EXTENDS_FUNCTION_()                                                         \
+            BOOST_PROTO_DEFINE_FUN_OP_VARIADIC_IMPL_(BOOST_PP_EMPTY)                                \
+            /**/
+
+        #define BOOST_PROTO_EXTENDS_FUNCTION()                                                      \
+            BOOST_PROTO_EXTENDS_FUNCTION_()                                                         \
+            BOOST_PROTO_DEFINE_FUN_OP_VARIADIC_IMPL_(BOOST_PP_EMPTY)                                \
+            BOOST_PROTO_DEFINE_FUN_OP_VARIADIC_IMPL_(BOOST_PROTO_CONST)                             \
+            /**/
+    #else
+        #define BOOST_PROTO_EXTENDS_FUNCTION_CONST()                                                \
+            BOOST_PROTO_EXTENDS_FUNCTION_()                                                         \
+            BOOST_PP_REPEAT_FROM_TO(                                                                \
+                0                                                                                   \
+              , BOOST_PROTO_MAX_FUNCTION_CALL_ARITY                                                 \
+              , BOOST_PROTO_DEFINE_FUN_OP_CONST                                                     \
+              , ~                                                                                   \
+            )                                                                                       \
+            /**/
+
+        #define BOOST_PROTO_EXTENDS_FUNCTION_NON_CONST()                                            \
+            BOOST_PROTO_EXTENDS_FUNCTION_()                                                         \
+            BOOST_PP_REPEAT_FROM_TO(                                                                \
+                0                                                                                   \
+              , BOOST_PROTO_MAX_FUNCTION_CALL_ARITY                                                 \
+              , BOOST_PROTO_DEFINE_FUN_OP_NON_CONST                                                 \
+              , ~                                                                                   \
+            )                                                                                       \
+            /**/
+
+        #define BOOST_PROTO_EXTENDS_FUNCTION()                                                      \
+            BOOST_PROTO_EXTENDS_FUNCTION_()                                                         \
+            BOOST_PP_REPEAT_FROM_TO(                                                                \
+                0                                                                                   \
+              , BOOST_PROTO_MAX_FUNCTION_CALL_ARITY                                                 \
+              , BOOST_PROTO_DEFINE_FUN_OP                                                           \
+              , ~                                                                                   \
+            )                                                                                       \
+            /**/
+    #endif
+
+    #define BOOST_PROTO_EXTENDS(Expr, Derived, Domain)                                              \
+        BOOST_PROTO_BASIC_EXTENDS(Expr, Derived, Domain)                                            \
+        BOOST_PROTO_EXTENDS_ASSIGN()                                                                \
+        BOOST_PROTO_EXTENDS_SUBSCRIPT()                                                             \
+        BOOST_PROTO_EXTENDS_FUNCTION()                                                              \
+        /**/
+
+    #define BOOST_PROTO_EXTENDS_USING_ASSIGN(Derived)                                               \
+        typedef typename Derived::proto_extends proto_extends;                                      \
+        using proto_extends::operator =;                                                            \
+        BOOST_PROTO_EXTENDS_COPY_ASSIGN_(Derived, BOOST_PROTO_TYPENAME)                             \
+        /**/
+
+    #define BOOST_PROTO_EXTENDS_USING_ASSIGN_NON_DEPENDENT(Derived)                                 \
+        typedef Derived::proto_extends proto_extends;                                               \
+        using proto_extends::operator =;                                                            \
+        BOOST_PROTO_EXTENDS_COPY_ASSIGN_(Derived, BOOST_PP_EMPTY)                                   \
+        /**/
+
+    namespace exprns_
+    {
+        /// \brief Empty type to be used as a dummy template parameter of
+        ///     POD expression wrappers. It allows argument-dependent lookup
+        ///     to find Proto's operator overloads.
+        ///
+        /// \c proto::is_proto_expr allows argument-dependent lookup
+        ///     to find Proto's operator overloads. For example:
+        ///
+        /// \code
+        /// template<typename T, typename Dummy = proto::is_proto_expr>
+        /// struct my_terminal
+        /// {
+        ///     BOOST_PROTO_BASIC_EXTENDS(
+        ///         typename proto::terminal<T>::type
+        ///       , my_terminal<T>
+        ///       , default_domain
+        ///     )
+        /// };
+        ///
+        /// // ...
+        /// my_terminal<int> _1, _2;
+        /// _1 + _2; // OK, uses proto::operator+
+        /// \endcode
+        ///
+        /// Without the second \c Dummy template parameter, Proto's operator
+        /// overloads would not be considered by name lookup.
+        struct is_proto_expr
+        {};
+
+        /// \brief extends\<\> class template for adding behaviors to a Proto expression template
+        ///
+        template<
+            typename Expr
+          , typename Derived
+          , typename Domain     // = proto::default_domain
+          , long Arity          // = Expr::proto_arity_c
+        >
+        struct extends
+        {
+            extends()
+              : proto_expr_()
+            {}
+
+            extends(extends const &that)
+              : proto_expr_(that.proto_expr_)
+            {}
+
+            extends(Expr const &expr_)
+              : proto_expr_(expr_)
+            {}
+
+            typedef extends proto_extends;
+            BOOST_PROTO_BASIC_EXTENDS_(Expr, Derived, Domain)
+            typedef typename Domain::proto_generator proto_generator;
+            BOOST_PROTO_EXTENDS_ASSIGN_CONST_()
+            BOOST_PROTO_EXTENDS_SUBSCRIPT_CONST()
+
+            // Instead of using BOOST_PROTO_EXTENDS_FUNCTION, which uses
+            // nested preprocessor loops, use file iteration here to generate
+            // the operator() overloads, which is more efficient.
+            BOOST_PROTO_EXTENDS_FUNCTION_()
+
+        #ifndef BOOST_NO_VARIADIC_TEMPLATES
+            BOOST_PROTO_DEFINE_FUN_OP_VARIADIC_IMPL_(BOOST_PROTO_CONST)
+        #else
+            /// INTERNAL ONLY
+            ///
+        #define BOOST_PP_LOCAL_MACRO(N)                                                             \
+            BOOST_PROTO_DEFINE_FUN_OP_CONST(1, N, ~)                                                \
+            /**/
+
+            /// INTERNAL ONLY
+            ///
+        #define BOOST_PP_LOCAL_LIMITS (0, BOOST_PP_DEC(BOOST_PROTO_MAX_FUNCTION_CALL_ARITY))
+        #include BOOST_PP_LOCAL_ITERATE()
+
+        #endif
+        };
+
+        /// \brief extends\<\> class template for adding behaviors to a Proto expression template
+        ///
+        template<typename Expr, typename Derived, typename Domain>
+        struct extends<Expr, Derived, Domain, 0>
+        {
+            extends()
+              : proto_expr_()
+            {}
+
+            extends(extends const &that)
+              : proto_expr_(that.proto_expr_)
+            {}
+
+            extends(Expr const &expr_)
+              : proto_expr_(expr_)
+            {}
+
+            typedef extends proto_extends;
+            BOOST_PROTO_BASIC_EXTENDS_(Expr, Derived, Domain)
+            typedef typename Domain::proto_generator proto_generator;
+            BOOST_PROTO_EXTENDS_ASSIGN_()
+            BOOST_PROTO_EXTENDS_SUBSCRIPT()
+
+            // Instead of using BOOST_PROTO_EXTENDS_FUNCTION, which uses
+            // nested preprocessor loops, use file iteration here to generate
+            // the operator() overloads, which is more efficient.
+            BOOST_PROTO_EXTENDS_FUNCTION_()
+
+        #ifndef BOOST_NO_VARIADIC_TEMPLATES
+            BOOST_PROTO_DEFINE_FUN_OP_VARIADIC_IMPL_(BOOST_PP_EMPTY)
+            BOOST_PROTO_DEFINE_FUN_OP_VARIADIC_IMPL_(BOOST_PROTO_CONST)
+        #else
+
+            /// INTERNAL ONLY
+            ///
+        #define BOOST_PP_LOCAL_MACRO(N)                                                             \
+            BOOST_PROTO_DEFINE_FUN_OP(1, N, ~)                                                      \
+            /**/
+
+            /// INTERNAL ONLY
+            ///
+        #define BOOST_PP_LOCAL_LIMITS (0, BOOST_PP_DEC(BOOST_PROTO_MAX_FUNCTION_CALL_ARITY))
+        #include BOOST_PP_LOCAL_ITERATE()
+
+        #endif
+        };
+
+        /// INTERNAL ONLY
+        ///
+        template<typename This, typename Fun, typename Domain>
+        struct virtual_member
+        {
+            typedef Domain proto_domain;
+            typedef typename Domain::proto_generator proto_generator;
+            typedef virtual_member<This, Fun, Domain> proto_derived_expr;
+            typedef tag::member proto_tag;
+            typedef list2<This &, expr<tag::terminal, term<Fun> > const &> proto_args;
+            typedef mpl::long_<2> proto_arity;
+            typedef detail::not_a_valid_type proto_address_of_hack_type_;
+            typedef void proto_is_expr_; /**< INTERNAL ONLY */
+            BOOST_STATIC_CONSTANT(long, proto_arity_c = 2);
+            typedef boost::proto::tag::proto_expr fusion_tag;
+            typedef This &proto_child0;
+            typedef expr<tag::terminal, term<Fun> > const &proto_child1;
+            typedef expr<proto_tag, proto_args, proto_arity_c> proto_base_expr;
+            typedef basic_expr<proto_tag, proto_args, proto_arity_c> proto_grammar;
+            typedef void proto_is_aggregate_; /**< INTERNAL ONLY */
+
+            BOOST_PROTO_EXTENDS_ASSIGN_()
+            BOOST_PROTO_EXTENDS_SUBSCRIPT()
+            BOOST_PROTO_EXTENDS_FUNCTION()
+
+            proto_base_expr const proto_base() const
+            {
+                proto_base_expr that = {this->child0(), this->child1()};
+                return that;
+            }
+
+            proto_child0 child0() const
+            {
+                return *(This *)((char *)this - BOOST_PROTO_OFFSETOF(This, proto_member_union_start_));
+            }
+
+            proto_child1 child1() const
+            {
+                static expr<tag::terminal, term<Fun>, 0> const that = {Fun()};
+                return that;
+            }
+        };
+
+        /// INTERNAL ONLY
+        ///
+        #define BOOST_PROTO_EXTENDS_MEMBER_(R, DOMAIN, ELEM)                                            \
+            boost::proto::exprns_::virtual_member<                                                      \
+                proto_derived_expr                                                                      \
+              , BOOST_PP_TUPLE_ELEM(2, 0, ELEM)                                                         \
+              , DOMAIN                                                                                  \
+            > BOOST_PP_TUPLE_ELEM(2, 1, ELEM);                                                          \
+            /**/
+
+        /// \brief For declaring virtual data members in an extension class.
+        ///
+        #define BOOST_PROTO_EXTENDS_MEMBERS_WITH_DOMAIN(SEQ, DOMAIN)                                    \
+            union                                                                                       \
+            {                                                                                           \
+                char proto_member_union_start_;                                                         \
+                BOOST_PP_SEQ_FOR_EACH(BOOST_PROTO_EXTENDS_MEMBER_, DOMAIN, SEQ)                         \
+            };                                                                                          \
+            /**/
+
+        /// \brief For declaring virtual data members in an extension class.
+        ///
+        #define BOOST_PROTO_EXTENDS_MEMBERS(SEQ)                                                        \
+            BOOST_PROTO_EXTENDS_MEMBERS_WITH_DOMAIN(SEQ, proto_domain)                                  \
+            /**/
+
+    }
+
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/functional.hpp b/3rdParty/Boost/src/boost/proto/functional.hpp
new file mode 100644
index 0000000..e3c868c
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/functional.hpp
@@ -0,0 +1,15 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file functional.hpp
+/// Proto callables for various things
+//
+//  Copyright 2010 Eric Niebler. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROTO_FUNCTIONAL_HPP_EAN_11_27_2010
+#define BOOST_PROTO_FUNCTIONAL_HPP_EAN_11_27_2010
+
+#include <boost/proto/functional/std.hpp>
+#include <boost/proto/functional/fusion.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/functional/fusion.hpp b/3rdParty/Boost/src/boost/proto/functional/fusion.hpp
new file mode 100644
index 0000000..8aaf4ea
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/functional/fusion.hpp
@@ -0,0 +1,19 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file fusion.hpp
+/// Proto callables for things found in the Fusion library
+//
+//  Copyright 2010 Eric Niebler. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROTO_FUNCTIONAL_FUSION_HPP_EAN_11_27_2010
+#define BOOST_PROTO_FUNCTIONAL_FUSION_HPP_EAN_11_27_2010
+
+#include <boost/proto/functional/fusion/at.hpp>
+#include <boost/proto/functional/fusion/pop_back.hpp>
+#include <boost/proto/functional/fusion/pop_front.hpp>
+#include <boost/proto/functional/fusion/push_back.hpp>
+#include <boost/proto/functional/fusion/push_front.hpp>
+#include <boost/proto/functional/fusion/reverse.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/functional/fusion/at.hpp b/3rdParty/Boost/src/boost/proto/functional/fusion/at.hpp
new file mode 100644
index 0000000..328ac13
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/functional/fusion/at.hpp
@@ -0,0 +1,56 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file at.hpp
+/// Proto callables Fusion at
+//
+//  Copyright 2010 Eric Niebler. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROTO_FUNCTIONAL_FUSION_AT_HPP_EAN_11_27_2010
+#define BOOST_PROTO_FUNCTIONAL_FUSION_AT_HPP_EAN_11_27_2010
+
+#include <boost/type_traits/add_const.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/proto/proto_fwd.hpp>
+
+namespace boost { namespace proto { namespace functional
+{
+    /// \brief A PolymorphicFunctionObject type that invokes the
+    /// \c fusion::at() accessor on its argument.
+    ///
+    /// A PolymorphicFunctionObject type that invokes the
+    /// \c fusion::at() accessor on its argument.
+    struct at
+    {
+        BOOST_PROTO_CALLABLE()
+
+        template<typename Sig>
+        struct result;
+
+        template<typename This, typename Seq, typename N>
+        struct result<This(Seq, N)>
+          : fusion::result_of::at<
+                typename boost::remove_reference<Seq>::type
+              , typename boost::remove_const<typename boost::remove_reference<N>::type>::type
+            >
+        {};
+
+        template<typename Seq, typename N>
+        typename fusion::result_of::at<Seq, N>::type
+        operator ()(Seq &seq, N const & BOOST_PROTO_DISABLE_IF_IS_CONST(Seq)) const
+        {
+            return fusion::at<N>(seq);
+        }
+
+        template<typename Seq, typename N>
+        typename fusion::result_of::at<Seq const, N>::type
+        operator ()(Seq const &seq, N const &) const
+        {
+            return fusion::at<N>(seq);
+        }
+    };
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/functional/fusion/pop_back.hpp b/3rdParty/Boost/src/boost/proto/functional/fusion/pop_back.hpp
new file mode 100644
index 0000000..f3ebeb8
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/functional/fusion/pop_back.hpp
@@ -0,0 +1,60 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file pop_back.hpp
+/// Proto callables Fusion pop_back
+//
+//  Copyright 2010 Eric Niebler. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROTO_FUNCTIONAL_FUSION_POP_BACK_HPP_EAN_11_27_2010
+#define BOOST_PROTO_FUNCTIONAL_FUSION_POP_BACK_HPP_EAN_11_27_2010
+
+#include <boost/fusion/include/begin.hpp>
+#include <boost/fusion/include/end.hpp>
+#include <boost/fusion/include/prior.hpp>
+#include <boost/fusion/include/pop_back.hpp>
+#include <boost/proto/proto_fwd.hpp>
+
+namespace boost { namespace proto { namespace functional
+{
+    /// \brief A PolymorphicFunctionObject type that invokes the
+    /// \c fusion::pop_back() algorithm on its argument.
+    ///
+    /// A PolymorphicFunctionObject type that invokes the
+    /// \c fusion::pop_back() algorithm on its argument.
+    struct pop_back
+    {
+        BOOST_PROTO_CALLABLE()
+
+        template<typename Sig>
+        struct result;
+
+        template<typename This, typename Seq>
+        struct result<This(Seq)>
+          : result<This(Seq const &)>
+        {};
+
+        template<typename This, typename Seq>
+        struct result<This(Seq &)>
+          : fusion::result_of::pop_back<Seq>
+        {};
+
+        template<typename Seq>
+        typename fusion::result_of::pop_back<Seq>::type
+        operator ()(Seq &seq) const
+        {
+            // Work around a const-correctness issue in Fusion
+            typedef typename fusion::result_of::pop_back<Seq>::type result_type;
+            return result_type(fusion::begin(seq), fusion::prior(fusion::end(seq)));
+        }
+
+        template<typename Seq>
+        typename fusion::result_of::pop_back<Seq const>::type
+        operator ()(Seq const &seq) const
+        {
+            return fusion::pop_back(seq);
+        }
+    };
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/functional/fusion/pop_front.hpp b/3rdParty/Boost/src/boost/proto/functional/fusion/pop_front.hpp
new file mode 100644
index 0000000..9586f4d
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/functional/fusion/pop_front.hpp
@@ -0,0 +1,65 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file pop_front.hpp
+/// Proto callables Fusion pop_front
+//
+//  Copyright 2010 Eric Niebler. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROTO_FUNCTIONAL_FUSION_POP_FRONT_HPP_EAN_11_27_2010
+#define BOOST_PROTO_FUNCTIONAL_FUSION_POP_FRONT_HPP_EAN_11_27_2010
+
+#include <boost/fusion/include/begin.hpp>
+#include <boost/fusion/include/end.hpp>
+#include <boost/fusion/include/next.hpp>
+#include <boost/fusion/include/pop_front.hpp>
+#include <boost/proto/proto_fwd.hpp>
+
+namespace boost { namespace proto { namespace functional
+{
+    /// \brief A PolymorphicFunctionObject type that invokes the
+    /// \c fusion::pop_front() algorithm on its argument.
+    ///
+    /// A PolymorphicFunctionObject type that invokes the
+    /// \c fusion::pop_front() algorithm on its argument. This is
+    /// useful for defining a CallableTransform like \c pop_front(_)
+    /// which removes the first child from a Proto expression node.
+    /// Such a transform might be used as the first argument to the
+    /// \c proto::fold\<\> transform; that is, fold all but
+    /// the first child.
+    struct pop_front
+    {
+        BOOST_PROTO_CALLABLE()
+
+        template<typename Sig>
+        struct result;
+
+        template<typename This, typename Seq>
+        struct result<This(Seq)>
+          : result<This(Seq const &)>
+        {};
+
+        template<typename This, typename Seq>
+        struct result<This(Seq &)>
+          : fusion::result_of::pop_front<Seq>
+        {};
+
+        template<typename Seq>
+        typename fusion::result_of::pop_front<Seq>::type
+        operator ()(Seq &seq) const
+        {
+            // Work around a const-correctness issue in Fusion
+            typedef typename fusion::result_of::pop_front<Seq>::type result_type;
+            return result_type(fusion::next(fusion::begin(seq)), fusion::end(seq));
+        }
+
+        template<typename Seq>
+        typename fusion::result_of::pop_front<Seq const>::type
+        operator ()(Seq const &seq) const
+        {
+            return fusion::pop_front(seq);
+        }
+    };
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/functional/fusion/push_back.hpp b/3rdParty/Boost/src/boost/proto/functional/fusion/push_back.hpp
new file mode 100644
index 0000000..8a427ae
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/functional/fusion/push_back.hpp
@@ -0,0 +1,49 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file push_back.hpp
+/// Proto callables Fusion push_back
+//
+//  Copyright 2010 Eric Niebler. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROTO_FUNCTIONAL_FUSION_PUSH_BACK_HPP_EAN_11_27_2010
+#define BOOST_PROTO_FUNCTIONAL_FUSION_PUSH_BACK_HPP_EAN_11_27_2010
+
+#include <boost/type_traits/add_const.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/fusion/include/push_back.hpp>
+#include <boost/proto/proto_fwd.hpp>
+
+namespace boost { namespace proto { namespace functional
+{
+    /// \brief A PolymorphicFunctionObject type that invokes the
+    /// \c fusion::push_back() algorithm on its argument.
+    ///
+    /// A PolymorphicFunctionObject type that invokes the
+    /// \c fusion::push_back() algorithm on its argument.
+    struct push_back
+    {
+        BOOST_PROTO_CALLABLE()
+
+        template<typename Sig>
+        struct result;
+
+        template<typename This, typename Seq, typename T>
+        struct result<This(Seq, T)>
+          : fusion::result_of::push_back<
+                typename boost::add_const<typename boost::remove_reference<Seq>::type>::type
+              , typename boost::remove_const<typename boost::remove_reference<T>::type>::type
+            >
+        {};
+
+        template<typename Seq, typename T>
+        typename fusion::result_of::push_back<Seq const, T>::type
+        operator ()(Seq const &seq, T const &t) const
+        {
+            return fusion::push_back(seq, t);
+        }
+    };
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/functional/fusion/push_front.hpp b/3rdParty/Boost/src/boost/proto/functional/fusion/push_front.hpp
new file mode 100644
index 0000000..d17f509
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/functional/fusion/push_front.hpp
@@ -0,0 +1,49 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file push_front.hpp
+/// Proto callables Fusion push_front
+//
+//  Copyright 2010 Eric Niebler. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROTO_FUNCTIONAL_FUSION_PUSH_FRONT_HPP_EAN_11_27_2010
+#define BOOST_PROTO_FUNCTIONAL_FUSION_PUSH_FRONT_HPP_EAN_11_27_2010
+
+#include <boost/type_traits/add_const.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/fusion/include/push_front.hpp>
+#include <boost/proto/proto_fwd.hpp>
+
+namespace boost { namespace proto { namespace functional
+{
+    /// \brief A PolymorphicFunctionObject type that invokes the
+    /// \c fusion::push_front() algorithm on its argument.
+    ///
+    /// A PolymorphicFunctionObject type that invokes the
+    /// \c fusion::push_front() algorithm on its argument.
+    struct push_front
+    {
+        BOOST_PROTO_CALLABLE()
+
+        template<typename Sig>
+        struct result;
+
+        template<typename This, typename Seq, typename T>
+        struct result<This(Seq, T)>
+          : fusion::result_of::push_front<
+                typename boost::add_const<typename boost::remove_reference<Seq>::type>::type
+              , typename boost::remove_const<typename boost::remove_reference<T>::type>::type
+            >
+        {};
+
+        template<typename Seq, typename T>
+        typename fusion::result_of::push_front<Seq const, T>::type
+        operator ()(Seq const &seq, T const &t) const
+        {
+            return fusion::push_front(seq, t);
+        }
+    };
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/functional/fusion/reverse.hpp b/3rdParty/Boost/src/boost/proto/functional/fusion/reverse.hpp
new file mode 100644
index 0000000..3ed154b
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/functional/fusion/reverse.hpp
@@ -0,0 +1,60 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file reverse.hpp
+/// Proto callables Fusion reverse
+//
+//  Copyright 2010 Eric Niebler. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROTO_FUNCTIONAL_FUSION_REVERSE_HPP_EAN_11_27_2010
+#define BOOST_PROTO_FUNCTIONAL_FUSION_REVERSE_HPP_EAN_11_27_2010
+
+#include <boost/fusion/include/reverse.hpp>
+#include <boost/proto/proto_fwd.hpp>
+
+namespace boost { namespace proto { namespace functional
+{
+    /// \brief A PolymorphicFunctionObject type that invokes the
+    /// \c fusion::reverse() algorithm on its argument.
+    ///
+    /// A PolymorphicFunctionObject type that invokes the
+    /// \c fusion::reverse() algorithm on its argument. This is
+    /// useful for defining a CallableTransform like \c reverse(_)
+    /// which reverses the order of the children of a Proto
+    /// expression node.
+    struct reverse
+    {
+        BOOST_PROTO_CALLABLE()
+
+        template<typename Sig>
+        struct result;
+
+        template<typename This, typename Seq>
+        struct result<This(Seq)>
+          : result<This(Seq const &)>
+        {};
+
+        template<typename This, typename Seq>
+        struct result<This(Seq &)>
+          : fusion::result_of::reverse<Seq>
+        {};
+
+        template<typename Seq>
+        typename fusion::result_of::reverse<Seq>::type
+        operator ()(Seq &seq) const
+        {
+            // Work around a const-correctness issue in Fusion
+            typedef typename fusion::result_of::reverse<Seq>::type result_type;
+            return result_type(seq);
+        }
+
+        template<typename Seq>
+        typename fusion::result_of::reverse<Seq const>::type
+        operator ()(Seq const &seq) const
+        {
+            return fusion::reverse(seq);
+        }
+    };
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/functional/std.hpp b/3rdParty/Boost/src/boost/proto/functional/std.hpp
new file mode 100644
index 0000000..2f997ef
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/functional/std.hpp
@@ -0,0 +1,14 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file std.hpp
+/// Proto callables for things found in the std library
+//
+//  Copyright 2010 Eric Niebler. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROTO_FUNCTIONAL_STD_HPP_EAN_11_27_2010
+#define BOOST_PROTO_FUNCTIONAL_STD_HPP_EAN_11_27_2010
+
+#include <boost/proto/functional/std/utility.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/functional/std/utility.hpp b/3rdParty/Boost/src/boost/proto/functional/std/utility.hpp
new file mode 100644
index 0000000..c1270d3
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/functional/std/utility.hpp
@@ -0,0 +1,137 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file utility.hpp
+/// Proto callables for things found in the std \<utility\> header
+//
+//  Copyright 2010 Eric Niebler. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROTO_FUNCTIONAL_STD_UTILITY_HPP_EAN_11_27_2010
+#define BOOST_PROTO_FUNCTIONAL_STD_UTILITY_HPP_EAN_11_27_2010
+
+#include <utility>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/proto/proto_fwd.hpp>
+
+namespace boost { namespace proto { namespace functional
+{
+    /// \brief A PolymorphicFunctionObject type that invokes the
+    /// \c std::make_pair() algorithm on its arguments.
+    ///
+    /// A PolymorphicFunctionObject type that invokes the
+    /// \c std::make_pair() algorithm on its arguments.
+    struct make_pair
+    {
+        BOOST_PROTO_CALLABLE()
+
+        template<typename Sig>
+        struct result;
+
+        template<typename This, typename First, typename Second>
+        struct result<This(First, Second)>
+        {
+            typedef
+                std::pair<
+                    typename remove_const<typename remove_reference<First>::type>::type
+                  , typename remove_const<typename remove_reference<Second>::type>::type
+                >
+            type;
+        };
+
+        template<typename First, typename Second>
+        std::pair<First, Second> operator()(First const &first, Second const &second) const
+        {
+            return std::make_pair(first, second);
+        }
+    };
+
+    /// \brief A PolymorphicFunctionObject type that returns
+    /// the first element of a std::pair.
+    ///
+    /// A PolymorphicFunctionObject type that returns
+    /// the first element of a std::pair..
+    struct first
+    {
+        BOOST_PROTO_CALLABLE()
+
+        template<typename Sig>
+        struct result;
+
+        template<typename This, typename Pair>
+        struct result<This(Pair)>
+        {
+            typedef typename Pair::first_type type;
+        };
+
+        template<typename This, typename Pair>
+        struct result<This(Pair &)>
+        {
+            typedef typename Pair::first_type &type;
+        };
+
+        template<typename This, typename Pair>
+        struct result<This(Pair const &)>
+        {
+            typedef typename Pair::first_type const &type;
+        };
+
+        template<typename Pair>
+        typename Pair::first_type &operator()(Pair &pair) const
+        {
+            return pair.first;
+        }
+
+        template<typename Pair>
+        typename Pair::first_type const &operator()(Pair const &pair) const
+        {
+            return pair.first;
+        }
+    };
+
+    /// \brief A PolymorphicFunctionObject type that returns
+    /// the second element of a std::pair.
+    ///
+    /// A PolymorphicFunctionObject type that returns
+    /// the second element of a std::pair..
+    struct second
+    {
+        BOOST_PROTO_CALLABLE()
+
+        template<typename Sig>
+        struct result;
+
+        template<typename This, typename Pair>
+        struct result<This(Pair)>
+        {
+            typedef typename Pair::second_type type;
+        };
+
+        template<typename This, typename Pair>
+        struct result<This(Pair &)>
+        {
+            typedef typename Pair::second_type &type;
+        };
+
+        template<typename This, typename Pair>
+        struct result<This(Pair const &)>
+        {
+            typedef typename Pair::second_type const &type;
+        };
+
+        template<typename Pair>
+        typename Pair::second_type &operator()(Pair &pair) const
+        {
+            return pair.second;
+        }
+
+        template<typename Pair>
+        typename Pair::second_type const &operator()(Pair const &pair) const
+        {
+            return pair.second;
+        }
+    };
+
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/fusion.hpp b/3rdParty/Boost/src/boost/proto/fusion.hpp
new file mode 100644
index 0000000..cf50038
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/fusion.hpp
@@ -0,0 +1,694 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file fusion.hpp
+/// Make any Proto expression a valid Fusion sequence
+//
+//  Copyright 2008 Eric Niebler. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROTO_FUSION_HPP_EAN_11_04_2006
+#define BOOST_PROTO_FUSION_HPP_EAN_11_04_2006
+
+#include <boost/config.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/long.hpp>
+#include <boost/mpl/sequence_tag_fwd.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/fusion/include/is_view.hpp>
+#include <boost/fusion/include/tag_of_fwd.hpp>
+#include <boost/fusion/include/category_of.hpp>
+#include <boost/fusion/include/iterator_base.hpp>
+#include <boost/fusion/include/intrinsic.hpp>
+#include <boost/fusion/include/single_view.hpp>
+#include <boost/fusion/include/transform_view.hpp>
+#include <boost/fusion/support/ext_/is_segmented.hpp>
+#include <boost/fusion/sequence/intrinsic/ext_/segments.hpp>
+#include <boost/fusion/sequence/intrinsic/ext_/size_s.hpp>
+#include <boost/fusion/sequence/comparison/enable_comparison.hpp>
+#include <boost/fusion/view/ext_/segmented_iterator.hpp>
+#include <boost/proto/proto_fwd.hpp>
+#include <boost/proto/traits.hpp>
+#include <boost/proto/eval.hpp>
+
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable : 4510) // default constructor could not be generated
+#pragma warning(disable : 4512) // assignment operator could not be generated
+#pragma warning(disable : 4610) // can never be instantiated - user defined constructor required
+#endif
+
+namespace boost { namespace proto
+{
+    namespace detail
+    {
+        template<typename Expr, long Pos>
+        struct expr_iterator
+          : fusion::iterator_base<expr_iterator<Expr, Pos> >
+        {
+            typedef Expr expr_type;
+            typedef typename Expr::proto_tag proto_tag;
+            BOOST_STATIC_CONSTANT(long, index = Pos);
+            typedef fusion::random_access_traversal_tag category;
+            typedef tag::proto_expr_iterator fusion_tag;
+
+            expr_iterator(Expr &e)
+              : expr(e)
+            {}
+
+            Expr &expr;
+        };
+
+        template<typename Expr>
+        struct flat_view
+        {
+            typedef Expr expr_type;
+            typedef typename Expr::proto_tag proto_tag;
+            typedef fusion::forward_traversal_tag category;
+            typedef tag::proto_flat_view fusion_tag;
+
+            explicit flat_view(Expr &e)
+              : expr_(e)
+            {}
+
+            Expr &expr_;
+        };
+
+        template<typename Tag>
+        struct as_element
+        {
+            template<typename Sig>
+            struct result;
+
+            template<typename This, typename Expr>
+            struct result<This(Expr)>
+              : result<This(Expr const &)>
+            {};
+
+            template<typename This, typename Expr>
+            struct result<This(Expr &)>
+              : mpl::if_c<
+                    is_same<Tag, typename Expr::proto_tag>::value
+                  , flat_view<Expr>
+                  , fusion::single_view<Expr &>
+                >
+            {};
+
+            template<typename Expr>
+            typename result<as_element(Expr &)>::type const
+            operator ()(Expr &e) const
+            {
+                return typename result<as_element(Expr &)>::type(e);
+            }
+
+            template<typename Expr>
+            typename result<as_element(Expr const &)>::type const
+            operator ()(Expr const &e) const
+            {
+                return typename result<as_element(Expr const &)>::type(e);
+            }
+        };
+    }
+
+    namespace result_of
+    {
+        template<typename Expr>
+        struct flatten
+          : flatten<Expr const &>
+        {};
+
+        template<typename Expr>
+        struct flatten<Expr &>
+        {
+            typedef detail::flat_view<Expr> type;
+        };
+    }
+
+    namespace functional
+    {
+        /// \brief A PolymorphicFunctionObject type that returns a "flattened"
+        /// view of a Proto expression tree.
+        ///
+        /// A PolymorphicFunctionObject type that returns a "flattened"
+        /// view of a Proto expression tree. For a tree with a top-most node
+        /// tag of type \c T, the elements of the flattened sequence are
+        /// determined by recursing into each child node with the same
+        /// tag type and returning those nodes of different type. So for
+        /// instance, the Proto expression tree corresponding to the
+        /// expression <tt>a | b | c</tt> has a flattened view with elements
+        /// [a, b, c], even though the tree is grouped as
+        /// <tt>((a | b) | c)</tt>.
+        struct flatten
+        {
+            BOOST_PROTO_CALLABLE()
+
+            template<typename Sig>
+            struct result;
+
+            template<typename This, typename Expr>
+            struct result<This(Expr)>
+              : result<This(Expr const &)>
+            {};
+
+            template<typename This, typename Expr>
+            struct result<This(Expr &)>
+            {
+                typedef proto::detail::flat_view<Expr> type;
+            };
+
+            template<typename Expr>
+            proto::detail::flat_view<Expr> const
+            operator ()(Expr &e) const
+            {
+                return proto::detail::flat_view<Expr>(e);
+            }
+
+            template<typename Expr>
+            proto::detail::flat_view<Expr const> const
+            operator ()(Expr const &e) const
+            {
+                return proto::detail::flat_view<Expr const>(e);
+            }
+        };
+    }
+
+    /// \brief A function that returns a "flattened"
+    /// view of a Proto expression tree.
+    ///
+    /// For a tree with a top-most node
+    /// tag of type \c T, the elements of the flattened sequence are
+    /// determined by recursing into each child node with the same
+    /// tag type and returning those nodes of different type. So for
+    /// instance, the Proto expression tree corresponding to the
+    /// expression <tt>a | b | c</tt> has a flattened view with elements
+    /// [a, b, c], even though the tree is grouped as
+    /// <tt>((a | b) | c)</tt>.
+    template<typename Expr>
+    proto::detail::flat_view<Expr> const
+    flatten(Expr &e)
+    {
+        return proto::detail::flat_view<Expr>(e);
+    }
+
+    /// \overload
+    ///
+    template<typename Expr>
+    proto::detail::flat_view<Expr const> const
+    flatten(Expr const &e)
+    {
+        return proto::detail::flat_view<Expr const>(e);
+    }
+
+    /// INTERNAL ONLY
+    ///
+    template<typename Context>
+    struct eval_fun
+      : proto::callable
+    {
+        explicit eval_fun(Context &ctx)
+          : ctx_(ctx)
+        {}
+
+        template<typename Sig>
+        struct result;
+
+        template<typename This, typename Expr>
+        struct result<This(Expr)>
+          : result<This(Expr const &)>
+        {};
+
+        template<typename This, typename Expr>
+        struct result<This(Expr &)>
+          : proto::result_of::eval<Expr, Context>
+        {};
+
+        template<typename Expr>
+        typename proto::result_of::eval<Expr, Context>::type
+        operator ()(Expr &e) const
+        {
+            return proto::eval(e, this->ctx_);
+        }
+
+        template<typename Expr>
+        typename proto::result_of::eval<Expr const, Context>::type
+        operator ()(Expr const &e) const
+        {
+            return proto::eval(e, this->ctx_);
+        }
+
+    private:
+        Context &ctx_;
+    };
+
+    /// INTERNAL ONLY
+    ///
+    template<typename Context>
+    struct is_callable<eval_fun<Context> >
+      : mpl::true_
+    {};
+}}
+
+namespace boost { namespace fusion
+{
+    namespace extension
+    {
+        template<typename Tag>
+        struct is_sequence_impl;
+
+        template<>
+        struct is_sequence_impl<proto::tag::proto_flat_view>
+        {
+            template<typename Sequence>
+            struct apply
+              : mpl::true_
+            {};
+        };
+
+        template<>
+        struct is_sequence_impl<proto::tag::proto_expr>
+        {
+            template<typename Sequence>
+            struct apply
+              : mpl::true_
+            {};
+        };
+
+        template<typename Tag>
+        struct is_view_impl;
+
+        template<>
+        struct is_view_impl<proto::tag::proto_flat_view>
+        {
+            template<typename Sequence>
+            struct apply
+              : mpl::true_
+            {};
+        };
+
+        template<>
+        struct is_view_impl<proto::tag::proto_expr>
+        {
+            template<typename Sequence>
+            struct apply
+              : mpl::false_
+            {};
+        };
+
+        template<typename Tag>
+        struct value_of_impl;
+
+        template<>
+        struct value_of_impl<proto::tag::proto_expr_iterator>
+        {
+            template<
+                typename Iterator
+              , long Arity = proto::arity_of<typename Iterator::expr_type>::value
+            >
+            struct apply
+            {
+                typedef
+                    typename proto::result_of::child_c<
+                        typename Iterator::expr_type
+                      , Iterator::index
+                    >::value_type
+                type;
+            };
+
+            template<typename Iterator>
+            struct apply<Iterator, 0>
+            {
+                typedef
+                    typename proto::result_of::value<
+                        typename Iterator::expr_type
+                    >::value_type
+                type;
+            };
+        };
+
+        template<typename Tag>
+        struct deref_impl;
+
+        template<>
+        struct deref_impl<proto::tag::proto_expr_iterator>
+        {
+            template<
+                typename Iterator
+              , long Arity = proto::arity_of<typename Iterator::expr_type>::value
+            >
+            struct apply
+            {
+                typedef
+                    typename proto::result_of::child_c<
+                        typename Iterator::expr_type &
+                      , Iterator::index
+                    >::type
+                type;
+
+                static type call(Iterator const &iter)
+                {
+                    return proto::child_c<Iterator::index>(iter.expr);
+                }
+            };
+
+            template<typename Iterator>
+            struct apply<Iterator, 0>
+            {
+                typedef
+                    typename proto::result_of::value<
+                        typename Iterator::expr_type &
+                    >::type
+                type;
+
+                static type call(Iterator const &iter)
+                {
+                    return proto::value(iter.expr);
+                }
+            };
+        };
+
+        template<typename Tag>
+        struct advance_impl;
+
+        template<>
+        struct advance_impl<proto::tag::proto_expr_iterator>
+        {
+            template<typename Iterator, typename N>
+            struct apply
+            {
+                typedef
+                    typename proto::detail::expr_iterator<
+                        typename Iterator::expr_type
+                      , Iterator::index + N::value
+                    >
+                type;
+
+                static type call(Iterator const &iter)
+                {
+                    return type(iter.expr);
+                }
+            };
+        };
+
+        template<typename Tag>
+        struct distance_impl;
+
+        template<>
+        struct distance_impl<proto::tag::proto_expr_iterator>
+        {
+            template<typename IteratorFrom, typename IteratorTo>
+            struct apply
+              : mpl::long_<IteratorTo::index - IteratorFrom::index>
+            {};
+        };
+
+        template<typename Tag>
+        struct next_impl;
+
+        template<>
+        struct next_impl<proto::tag::proto_expr_iterator>
+        {
+            template<typename Iterator>
+            struct apply
+              : advance_impl<proto::tag::proto_expr_iterator>::template apply<Iterator, mpl::long_<1> >
+            {};
+        };
+
+        template<typename Tag>
+        struct prior_impl;
+
+        template<>
+        struct prior_impl<proto::tag::proto_expr_iterator>
+        {
+            template<typename Iterator>
+            struct apply
+              : advance_impl<proto::tag::proto_expr_iterator>::template apply<Iterator, mpl::long_<-1> >
+            {};
+        };
+
+        template<typename Tag>
+        struct category_of_impl;
+
+        template<>
+        struct category_of_impl<proto::tag::proto_expr>
+        {
+            template<typename Sequence>
+            struct apply
+            {
+                typedef random_access_traversal_tag type;
+            };
+        };
+
+        template<typename Tag>
+        struct size_impl;
+
+        template<>
+        struct size_impl<proto::tag::proto_expr>
+        {
+            template<typename Sequence>
+            struct apply
+              : mpl::long_<0 == Sequence::proto_arity_c ? 1 : Sequence::proto_arity_c>
+            {};
+        };
+
+        template<typename Tag>
+        struct begin_impl;
+
+        template<>
+        struct begin_impl<proto::tag::proto_expr>
+        {
+            template<typename Sequence>
+            struct apply
+            {
+                typedef proto::detail::expr_iterator<Sequence, 0> type;
+
+                static type call(Sequence &seq)
+                {
+                    return type(seq);
+                }
+            };
+        };
+
+        template<typename Tag>
+        struct end_impl;
+
+        template<>
+        struct end_impl<proto::tag::proto_expr>
+        {
+            template<typename Sequence>
+            struct apply
+            {
+                typedef
+                    proto::detail::expr_iterator<
+                        Sequence
+                      , 0 == Sequence::proto_arity_c ? 1 : Sequence::proto_arity_c
+                    >
+                type;
+
+                static type call(Sequence &seq)
+                {
+                    return type(seq);
+                }
+            };
+        };
+
+        template<typename Tag>
+        struct value_at_impl;
+
+        template<>
+        struct value_at_impl<proto::tag::proto_expr>
+        {
+            template<
+                typename Sequence
+              , typename Index
+              , long Arity = proto::arity_of<Sequence>::value
+            >
+            struct apply
+            {
+                typedef
+                    typename proto::result_of::child_c<
+                        Sequence
+                      , Index::value
+                    >::value_type
+                type;
+            };
+
+            template<typename Sequence, typename Index>
+            struct apply<Sequence, Index, 0>
+            {
+                typedef
+                    typename proto::result_of::value<
+                        Sequence
+                    >::value_type
+                type;
+            };
+        };
+
+        template<typename Tag>
+        struct at_impl;
+
+        template<>
+        struct at_impl<proto::tag::proto_expr>
+        {
+            template<
+                typename Sequence
+              , typename Index
+              , long Arity = proto::arity_of<Sequence>::value
+            >
+            struct apply
+            {
+                typedef
+                    typename proto::result_of::child_c<
+                        Sequence &
+                      , Index::value
+                    >::type
+                type;
+
+                static type call(Sequence &seq)
+                {
+                    return proto::child_c<Index::value>(seq);
+                }
+            };
+
+            template<typename Sequence, typename Index>
+            struct apply<Sequence, Index, 0>
+            {
+                typedef
+                    typename proto::result_of::value<
+                        Sequence &
+                    >::type
+                type;
+
+                static type call(Sequence &seq)
+                {
+                    return proto::value(seq);
+                }
+            };
+        };
+
+        template<typename Tag>
+        struct is_segmented_impl;
+
+        template<>
+        struct is_segmented_impl<proto::tag::proto_flat_view>
+        {
+            template<typename Iterator>
+            struct apply
+              : mpl::true_
+            {};
+        };
+
+        template<typename Tag>
+        struct segments_impl;
+
+        template<>
+        struct segments_impl<proto::tag::proto_flat_view>
+        {
+            template<typename Sequence>
+            struct apply
+            {
+                typedef typename Sequence::proto_tag proto_tag;
+
+                typedef fusion::transform_view<
+                    typename Sequence::expr_type
+                  , proto::detail::as_element<proto_tag>
+                > type;
+
+                static type call(Sequence &sequence)
+                {
+                    return type(sequence.expr_, proto::detail::as_element<proto_tag>());
+                }
+            };
+        };
+
+        template<>
+        struct category_of_impl<proto::tag::proto_flat_view>
+        {
+            template<typename Sequence>
+            struct apply
+            {
+                typedef forward_traversal_tag type;
+            };
+        };
+
+        template<>
+        struct begin_impl<proto::tag::proto_flat_view>
+        {
+            template<typename Sequence>
+            struct apply
+              : fusion::segmented_begin<Sequence>
+            {};
+        };
+
+        template<>
+        struct end_impl<proto::tag::proto_flat_view>
+        {
+            template<typename Sequence>
+            struct apply
+              : fusion::segmented_end<Sequence>
+            {};
+        };
+
+        template<>
+        struct size_impl<proto::tag::proto_flat_view>
+        {
+            template<typename Sequence>
+            struct apply
+              : fusion::segmented_size<Sequence>
+            {};
+        };
+
+    }
+
+    namespace traits
+    {
+        template<typename Seq1, typename Seq2>
+        struct enable_equality<
+            Seq1
+          , Seq2
+          , typename enable_if_c<
+                mpl::or_<
+                    proto::is_expr<Seq1>
+                  , proto::is_expr<Seq2>
+                >::value
+            >::type
+        >
+            : mpl::false_
+        {};
+
+        template<typename Seq1, typename Seq2>
+        struct enable_comparison<
+            Seq1
+          , Seq2
+          , typename enable_if_c<
+                mpl::or_<
+                    proto::is_expr<Seq1>
+                  , proto::is_expr<Seq2>
+                >::value
+            >::type
+        >
+          : mpl::false_
+        {};
+    }
+
+}}
+
+namespace boost { namespace mpl
+{
+    template<typename Tag, typename Args, long Arity>
+    struct sequence_tag< proto::expr<Tag, Args, Arity> >
+    {
+        typedef fusion::fusion_sequence_tag type;
+    };
+
+    template<typename Tag, typename Args, long Arity>
+    struct sequence_tag< proto::basic_expr<Tag, Args, Arity> >
+    {
+        typedef fusion::fusion_sequence_tag type;
+    };
+}} 
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/generate.hpp b/3rdParty/Boost/src/boost/proto/generate.hpp
new file mode 100644
index 0000000..5009cca
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/generate.hpp
@@ -0,0 +1,466 @@
+#ifndef BOOST_PP_IS_ITERATING
+    ///////////////////////////////////////////////////////////////////////////////
+    /// \file generate.hpp
+    /// Contains definition of generate\<\> class template, which end users can
+    /// specialize for generating domain-specific expression wrappers.
+    //
+    //  Copyright 2008 Eric Niebler. Distributed under the Boost
+    //  Software License, Version 1.0. (See accompanying file
+    //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+    #ifndef BOOST_PROTO_GENERATE_HPP_EAN_02_13_2007
+    #define BOOST_PROTO_GENERATE_HPP_EAN_02_13_2007
+
+    #include <boost/config.hpp>
+    #include <boost/version.hpp>
+    #include <boost/preprocessor/cat.hpp>
+    #include <boost/preprocessor/iteration/iterate.hpp>
+    #include <boost/preprocessor/facilities/intercept.hpp>
+    #include <boost/preprocessor/repetition/enum_params.hpp>
+    #include <boost/preprocessor/repetition/enum_binary_params.hpp>
+    #include <boost/preprocessor/repetition/enum_trailing_params.hpp>
+    #include <boost/mpl/bool.hpp>
+    #include <boost/utility/enable_if.hpp>
+    #include <boost/utility/result_of.hpp>
+    #include <boost/proto/proto_fwd.hpp>
+    #include <boost/proto/args.hpp>
+
+    namespace boost { namespace proto
+    {
+
+        namespace detail
+        {
+            template<typename Expr>
+            struct by_value_generator_;
+
+            template<typename Tag, typename Arg>
+            struct by_value_generator_<proto::expr<Tag, term<Arg>, 0> >
+            {
+                typedef
+                    proto::expr<
+                        Tag
+                      , term<typename detail::term_traits<Arg>::value_type>
+                      , 0
+                    >
+                type;
+
+                static type const call(proto::expr<Tag, term<Arg>, 0> const &e)
+                {
+                    type that = {e.child0};
+                    return that;
+                }
+            };
+
+            template<typename Tag, typename Arg>
+            struct by_value_generator_<proto::basic_expr<Tag, term<Arg>, 0> >
+            {
+                typedef
+                    proto::basic_expr<
+                        Tag
+                      , term<typename detail::term_traits<Arg>::value_type>
+                      , 0
+                    >
+                type;
+
+                static type const call(proto::basic_expr<Tag, term<Arg>, 0> const &e)
+                {
+                    type that = {e.child0};
+                    return that;
+                }
+            };
+
+        #define BOOST_PP_ITERATION_PARAMS_1 (3, (1, BOOST_PROTO_MAX_ARITY, <boost/proto/generate.hpp>))
+        #include BOOST_PP_ITERATE()
+
+        #undef BOOST_PROTO_DEFINE_BY_VALUE
+        #undef BOOST_PROTO_DEFINE_BY_VALUE_TYPE
+
+        }
+
+        /// \brief A simple generator that passes an expression
+        /// through unchanged.
+        ///
+        /// Generators are intended for use as the first template parameter
+        /// to the \c domain\<\> class template and control if and how
+        /// expressions within that domain are to be customized.
+        /// The \c default_generator makes no modifications to the expressions
+        /// passed to it.
+        struct default_generator
+        {
+            BOOST_PROTO_CALLABLE()
+
+            template<typename Sig>
+            struct result;
+
+            template<typename This, typename Expr>
+            struct result<This(Expr)>
+            {
+                typedef Expr type;
+            };
+
+            /// \param expr A Proto expression
+            /// \return expr
+            template<typename Expr>
+            #ifdef BOOST_PROTO_STRICT_RESULT_OF
+            Expr
+            #else
+            Expr const &
+            #endif
+            operator ()(Expr const &e) const
+            {
+                return e;
+            }
+        };
+
+        /// \brief A generator that wraps expressions passed
+        /// to it in the specified extension wrapper.
+        ///
+        /// Generators are intended for use as the first template parameter
+        /// to the \c domain\<\> class template and control if and how
+        /// expressions within that domain are to be customized.
+        /// \c generator\<\> wraps each expression passed to it in
+        /// the \c Extends\<\> wrapper.
+        template<template<typename> class Extends>
+        struct generator
+        {
+            BOOST_PROTO_CALLABLE()
+            BOOST_PROTO_USE_BASIC_EXPR()
+
+            template<typename Sig>
+            struct result;
+
+            template<typename This, typename Expr>
+            struct result<This(Expr)>
+            {
+                typedef Extends<Expr> type;
+            };
+
+            template<typename This, typename Expr>
+            struct result<This(Expr &)>
+            {
+                typedef Extends<Expr> type;
+            };
+
+            template<typename This, typename Expr>
+            struct result<This(Expr const &)>
+            {
+                typedef Extends<Expr> type;
+            };
+
+            /// \param expr A Proto expression
+            /// \return Extends<Expr>(expr)
+            template<typename Expr>
+            Extends<Expr> operator ()(Expr const &e) const
+            {
+                return Extends<Expr>(e);
+            }
+        };
+
+        /// \brief A generator that wraps expressions passed
+        /// to it in the specified extension wrapper and uses
+        /// aggregate initialization for the wrapper.
+        ///
+        /// Generators are intended for use as the first template parameter
+        /// to the \c domain\<\> class template and control if and how
+        /// expressions within that domain are to be customized.
+        /// \c pod_generator\<\> wraps each expression passed to it in
+        /// the \c Extends\<\> wrapper, and uses aggregate initialzation
+        /// for the wrapped object.
+        template<template<typename> class Extends>
+        struct pod_generator
+        {
+            BOOST_PROTO_CALLABLE()
+            BOOST_PROTO_USE_BASIC_EXPR()
+
+            template<typename Sig>
+            struct result;
+
+            template<typename This, typename Expr>
+            struct result<This(Expr)>
+            {
+                typedef Extends<Expr> type;
+            };
+
+            template<typename This, typename Expr>
+            struct result<This(Expr &)>
+            {
+                typedef Extends<Expr> type;
+            };
+
+            template<typename This, typename Expr>
+            struct result<This(Expr const &)>
+            {
+                typedef Extends<Expr> type;
+            };
+
+            /// \param expr The expression to wrap
+            /// \return <tt>Extends\<Expr\> that = {expr}; return that;</tt>
+            template<typename Expr>
+            Extends<Expr> operator ()(Expr const &e) const
+            {
+                Extends<Expr> that = {e};
+                return that;
+            }
+        };
+
+        /// \brief A generator that replaces child nodes held by
+        /// reference with ones held by value. Use with
+        /// \c compose_generators to forward that result to another
+        /// generator.
+        ///
+        /// Generators are intended for use as the first template parameter
+        /// to the \c domain\<\> class template and control if and how
+        /// expressions within that domain are to be customized.
+        /// \c by_value_generator ensures all child nodes are
+        /// held by value. This generator is typically composed with a
+        /// second generator for further processing, as
+        /// <tt>compose_generators\<by_value_generator, MyGenerator\></tt>.
+        struct by_value_generator
+        {
+            BOOST_PROTO_CALLABLE()
+
+            template<typename Sig>
+            struct result;
+
+            template<typename This, typename Expr>
+            struct result<This(Expr)>
+            {
+                typedef
+                    typename detail::by_value_generator_<Expr>::type
+                type;
+            };
+
+            template<typename This, typename Expr>
+            struct result<This(Expr &)>
+            {
+                typedef
+                    typename detail::by_value_generator_<Expr>::type
+                type;
+            };
+
+            template<typename This, typename Expr>
+            struct result<This(Expr const &)>
+            {
+                typedef
+                    typename detail::by_value_generator_<Expr>::type
+                type;
+            };
+
+            /// \param expr The expression to modify.
+            /// \return <tt>deep_copy(expr)</tt>
+            template<typename Expr>
+            typename result<by_value_generator(Expr)>::type operator ()(Expr const &e) const
+            {
+                return detail::by_value_generator_<Expr>::call(e);
+            }
+        };
+
+        /// \brief A composite generator that first applies one
+        /// transform to an expression and then forwards the result
+        /// on to another generator for further transformation.
+        ///
+        /// Generators are intended for use as the first template parameter
+        /// to the \c domain\<\> class template and control if and how
+        /// expressions within that domain are to be customized.
+        /// \c compose_generators\<\> is a composite generator that first
+        /// applies one transform to an expression and then forwards the
+        /// result on to another generator for further transformation.
+        template<typename First, typename Second>
+        struct compose_generators
+        {
+            BOOST_PROTO_CALLABLE()
+
+            template<typename Sig>
+            struct result;
+
+            template<typename This, typename Expr>
+            struct result<This(Expr)>
+            {
+                typedef
+                    typename Second::template result<
+                        Second(typename First::template result<First(Expr)>::type)
+                    >::type
+                type;
+            };
+
+            template<typename This, typename Expr>
+            struct result<This(Expr &)>
+            {
+                typedef
+                    typename Second::template result<
+                        Second(typename First::template result<First(Expr)>::type)
+                    >::type
+                type;
+            };
+
+            template<typename This, typename Expr>
+            struct result<This(Expr const &)>
+            {
+                typedef
+                    typename Second::template result<
+                        Second(typename First::template result<First(Expr)>::type)
+                    >::type
+                type;
+            };
+
+            /// \param expr The expression to modify.
+            /// \return Second()(First()(expr))
+            template<typename Expr>
+            typename result<compose_generators(Expr)>::type operator ()(Expr const &e) const
+            {
+                return Second()(First()(e));
+            }
+        };
+
+        /// \brief Annotate a generator to indicate that it would
+        /// prefer to be passed instances of \c proto::basic_expr\<\> rather
+        /// than \c proto::expr\<\>. <tt>use_basic_expr\<Generator\></tt> is
+        /// itself a generator.
+        ///
+        template<typename Generator>
+        struct use_basic_expr
+          : Generator
+        {
+            BOOST_PROTO_USE_BASIC_EXPR()
+        };
+
+        /// \brief Tests a generator to see whether it would prefer
+        /// to be passed instances of \c proto::basic_expr\<\> rather than
+        /// \c proto::expr\<\>.
+        ///
+        template<typename Generator, typename Void>
+        struct wants_basic_expr
+          : mpl::false_
+        {};
+
+        template<typename Generator>
+        struct wants_basic_expr<Generator, typename Generator::proto_use_basic_expr_>
+          : mpl::true_
+        {};
+
+        /// INTERNAL ONLY
+        template<>
+        struct is_callable<default_generator>
+          : mpl::true_
+        {};
+
+        /// INTERNAL ONLY
+        template<template<typename> class Extends>
+        struct is_callable<generator<Extends> >
+          : mpl::true_
+        {};
+
+        /// INTERNAL ONLY
+        template<template<typename> class Extends>
+        struct is_callable<pod_generator<Extends> >
+          : mpl::true_
+        {};
+
+        /// INTERNAL ONLY
+        template<>
+        struct is_callable<by_value_generator>
+          : mpl::true_
+        {};
+
+        /// INTERNAL ONLY
+        template<typename First, typename Second>
+        struct is_callable<compose_generators<First, Second> >
+          : mpl::true_
+        {};
+
+    }}
+
+    // Specializations of boost::result_of and boost::tr1_result_of to eliminate
+    // some unnecessary template instantiations
+    namespace boost
+    {
+        template<typename Expr>
+        struct result_of<proto::default_domain(Expr)>
+        {
+            typedef Expr type;
+        };
+
+        template<typename Expr>
+        struct result_of<proto::default_generator(Expr)>
+        {
+            typedef Expr type;
+        };
+
+        #if BOOST_VERSION >= 104400
+        template<typename Expr>
+        struct tr1_result_of<proto::default_domain(Expr)>
+        {
+            typedef Expr type;
+        };
+
+        template<typename Expr>
+        struct tr1_result_of<proto::default_generator(Expr)>
+        {
+            typedef Expr type;
+        };
+        #endif
+    }
+
+    #endif // BOOST_PROTO_GENERATE_HPP_EAN_02_13_2007
+
+#else // BOOST_PP_IS_ITERATING
+
+    #define N BOOST_PP_ITERATION()
+
+            template<typename Tag BOOST_PP_ENUM_TRAILING_PARAMS(N, typename Arg) >
+            struct by_value_generator_<
+                proto::expr<Tag, BOOST_PP_CAT(list, N)<BOOST_PP_ENUM_PARAMS(N, Arg)>, N>
+            >
+            {
+                typedef
+                    BOOST_PP_CAT(list, N)<BOOST_PP_ENUM_PARAMS(N, Arg)>
+                src_args;
+
+                typedef
+                    BOOST_PP_CAT(list, N)<
+                        BOOST_PP_ENUM_BINARY_PARAMS(N, typename uncvref<Arg, >::type BOOST_PP_INTERCEPT)
+                    >
+                dst_args;
+
+                typedef proto::expr<Tag, src_args, N> src_type;
+                typedef proto::expr<Tag, dst_args, N> type;
+
+                static type const call(src_type const &e)
+                {
+                    type that = {
+                        BOOST_PP_ENUM_PARAMS(N, e.child)
+                    };
+                    return that;
+                }
+            };
+
+            template<typename Tag BOOST_PP_ENUM_TRAILING_PARAMS(N, typename Arg) >
+            struct by_value_generator_<
+                proto::basic_expr<Tag, BOOST_PP_CAT(list, N)<BOOST_PP_ENUM_PARAMS(N, Arg)>, N>
+            >
+            {
+                typedef
+                    BOOST_PP_CAT(list, N)<BOOST_PP_ENUM_PARAMS(N, Arg)>
+                src_args;
+
+                typedef
+                    BOOST_PP_CAT(list, N)<
+                        BOOST_PP_ENUM_BINARY_PARAMS(N, typename uncvref<Arg, >::type BOOST_PP_INTERCEPT)
+                    >
+                dst_args;
+
+                typedef proto::basic_expr<Tag, src_args, N> src_type;
+                typedef proto::basic_expr<Tag, dst_args, N> type;
+
+                static type const call(src_type const &e)
+                {
+                    type that = {
+                        BOOST_PP_ENUM_PARAMS(N, e.child)
+                    };
+                    return that;
+                }
+            };
+
+    #undef N
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/literal.hpp b/3rdParty/Boost/src/boost/proto/literal.hpp
new file mode 100644
index 0000000..accab5f
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/literal.hpp
@@ -0,0 +1,112 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file literal.hpp
+/// The literal\<\> terminal wrapper, and the proto::lit() function for
+/// creating literal\<\> wrappers.
+//
+//  Copyright 2008 Eric Niebler. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROTO_LITERAL_HPP_EAN_01_03_2007
+#define BOOST_PROTO_LITERAL_HPP_EAN_01_03_2007
+
+#include <boost/config.hpp>
+#include <boost/proto/proto_fwd.hpp>
+#include <boost/proto/expr.hpp>
+#include <boost/proto/traits.hpp>
+#include <boost/proto/extends.hpp>
+
+namespace boost { namespace proto
+{
+    namespace utility
+    {
+        /// \brief A simple wrapper for a terminal, provided for
+        /// ease of use.
+        ///
+        /// A simple wrapper for a terminal, provided for
+        /// ease of use. In all cases, <tt>literal\<X\> l(x);</tt>
+        /// is equivalent to <tt>terminal\<X\>::type l = {x};</tt>.
+        ///
+        /// The \c Domain template parameter defaults to
+        /// \c proto::default_domain.
+        template<
+            typename T
+          , typename Domain // = default_domain
+        >
+        struct literal
+          : extends<basic_expr<tag::terminal, term<T>, 0>, literal<T, Domain>, Domain>
+        {
+        private:
+            typedef basic_expr<tag::terminal, term<T>, 0> terminal_type;
+            typedef extends<terminal_type, literal<T, Domain>, Domain> base_type;
+            typedef literal<T, Domain> literal_t;
+
+        public:
+            typedef typename detail::term_traits<T>::value_type       value_type;
+            typedef typename detail::term_traits<T>::reference        reference;
+            typedef typename detail::term_traits<T>::const_reference  const_reference;
+
+            literal()
+              : base_type(terminal_type::make(T()))
+            {}
+
+            template<typename U>
+            literal(U &u)
+              : base_type(terminal_type::make(u))
+            {}
+
+            template<typename U>
+            literal(U const &u)
+              : base_type(terminal_type::make(u))
+            {}
+
+            template<typename U>
+            literal(literal<U, Domain> const &u)
+              : base_type(terminal_type::make(u.get()))
+            {}
+
+            BOOST_PROTO_EXTENDS_USING_ASSIGN(literal_t)
+
+            reference get()
+            {
+                return proto::value(*this);
+            }
+
+            const_reference get() const
+            {
+                return proto::value(*this);
+            }
+        };
+    }
+
+    /// \brief A helper function for creating a \c literal\<\> wrapper.
+    /// \param t The object to wrap.
+    /// \return literal\<T &\>(t)
+    /// \attention The returned value holds the argument by reference.
+    /// \throw nothrow
+    template<typename T>
+    inline literal<T &> const lit(T &t)
+    {
+        return literal<T &>(t);
+    }
+
+    /// \overload
+    ///
+    template<typename T>
+    inline literal<T const &> const lit(T const &t)
+    {
+        #ifdef BOOST_MSVC
+        #pragma warning(push)
+        #pragma warning(disable: 4180) // warning C4180: qualifier applied to function type has no meaning; ignored
+        #endif
+
+        return literal<T const &>(t);
+
+        #ifdef BOOST_MSVC
+        #pragma warning(pop)
+        #endif
+    }
+
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/make_expr.hpp b/3rdParty/Boost/src/boost/proto/make_expr.hpp
new file mode 100644
index 0000000..75b42ba
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/make_expr.hpp
@@ -0,0 +1,821 @@
+#ifndef BOOST_PP_IS_ITERATING
+    ///////////////////////////////////////////////////////////////////////////////
+    /// \file make_expr.hpp
+    /// Definition of the \c make_expr() and \c unpack_expr() utilities for
+    /// building Proto expression nodes from child nodes or from a Fusion
+    /// sequence of child nodes, respectively.
+    //
+    //  Copyright 2008 Eric Niebler. Distributed under the Boost
+    //  Software License, Version 1.0. (See accompanying file
+    //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+    #ifndef BOOST_PROTO_MAKE_EXPR_HPP_EAN_04_01_2005
+    #define BOOST_PROTO_MAKE_EXPR_HPP_EAN_04_01_2005
+
+    #include <boost/config.hpp>
+    #include <boost/detail/workaround.hpp>
+    #include <boost/preprocessor/cat.hpp>
+    #include <boost/preprocessor/arithmetic/inc.hpp>
+    #include <boost/preprocessor/arithmetic/dec.hpp>
+    #include <boost/preprocessor/arithmetic/sub.hpp>
+    #include <boost/preprocessor/punctuation/comma_if.hpp>
+    #include <boost/preprocessor/iteration/iterate.hpp>
+    #include <boost/preprocessor/facilities/intercept.hpp>
+    #include <boost/preprocessor/repetition/enum.hpp>
+    #include <boost/preprocessor/repetition/enum_params.hpp>
+    #include <boost/preprocessor/repetition/enum_binary_params.hpp>
+    #include <boost/preprocessor/repetition/enum_shifted_params.hpp>
+    #include <boost/preprocessor/repetition/enum_trailing_params.hpp>
+    #include <boost/preprocessor/repetition/enum_trailing_binary_params.hpp>
+    #include <boost/preprocessor/repetition/repeat.hpp>
+    #include <boost/ref.hpp>
+    #include <boost/mpl/if.hpp>
+    #include <boost/mpl/assert.hpp>
+    #include <boost/mpl/eval_if.hpp>
+    #include <boost/utility/enable_if.hpp>
+    #include <boost/type_traits/add_const.hpp>
+    #include <boost/type_traits/add_reference.hpp>
+    #include <boost/type_traits/remove_cv.hpp>
+    #include <boost/proto/proto_fwd.hpp>
+    #include <boost/proto/traits.hpp>
+    #include <boost/proto/domain.hpp>
+    #include <boost/proto/generate.hpp>
+    #include <boost/fusion/include/begin.hpp>
+    #include <boost/fusion/include/next.hpp>
+    #include <boost/fusion/include/value_of.hpp>
+    #include <boost/fusion/include/size.hpp>
+    #include <boost/proto/detail/poly_function.hpp>
+    #include <boost/proto/detail/deprecated.hpp>
+
+    #ifdef _MSC_VER
+    # pragma warning(push)
+    # pragma warning(disable: 4180) // qualifier applied to function type has no meaning; ignored
+    #endif
+
+    namespace boost { namespace proto
+    {
+    /// INTERNAL ONLY
+    ///
+    #define BOOST_PROTO_AS_CHILD_TYPE(Z, N, DATA)                                                   \
+        typename boost::proto::detail::protoify<                                                    \
+            BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(3, 0, DATA), N)                                        \
+          , BOOST_PP_TUPLE_ELEM(3, 2, DATA)                                                         \
+        >::result_type                                                                              \
+        /**/
+
+    /// INTERNAL ONLY
+    ///
+    #define BOOST_PROTO_AS_CHILD(Z, N, DATA)                                                        \
+        boost::proto::detail::protoify<                                                             \
+            BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(3, 0, DATA), N)                                        \
+          , BOOST_PP_TUPLE_ELEM(3, 2, DATA)                                                         \
+        >()(BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(3, 1, DATA), N))                                       \
+        /**/
+
+    /// INTERNAL ONLY
+    ///
+    #define BOOST_PROTO_FUSION_NEXT_ITERATOR_TYPE(Z, N, DATA)                                       \
+        typedef typename fusion::result_of::next<                                                   \
+            BOOST_PP_CAT(fusion_iterator, N)>::type                                                 \
+                BOOST_PP_CAT(fusion_iterator, BOOST_PP_INC(N));                                     \
+        /**/
+
+    /// INTERNAL ONLY
+    ///
+    #define BOOST_PROTO_FUSION_ITERATORS_TYPE(N)                                                    \
+        typedef                                                                                     \
+            typename fusion::result_of::begin<Sequence const>::type                                 \
+        fusion_iterator0;                                                                           \
+        BOOST_PP_REPEAT(BOOST_PP_DEC(N), BOOST_PROTO_FUSION_NEXT_ITERATOR_TYPE, fusion_iterator)    \
+        /**/
+
+    /// INTERNAL ONLY
+    ///
+    #define BOOST_PROTO_FUSION_AT_TYPE(Z, N, DATA)                                                  \
+        typename add_const<                                                                         \
+            typename fusion::result_of::value_of<                                                   \
+                BOOST_PP_CAT(fusion_iterator, N)                                                    \
+            >::type                                                                                 \
+        >::type                                                                                     \
+        /**/
+
+    /// INTERNAL ONLY
+    ///
+    #define BOOST_PROTO_FUSION_NEXT_ITERATOR(Z, N, DATA)                                            \
+        BOOST_PP_CAT(fusion_iterator, BOOST_PP_INC(N)) BOOST_PP_CAT(it, BOOST_PP_INC(N)) =          \
+            fusion::next(BOOST_PP_CAT(it, N));                                                      \
+        /**/
+
+    /// INTERNAL ONLY
+    ///
+    #define BOOST_PROTO_FUSION_ITERATORS(N)                                                         \
+        fusion_iterator0 it0 = fusion::begin(sequence);                                             \
+        BOOST_PP_REPEAT(BOOST_PP_DEC(N), BOOST_PROTO_FUSION_NEXT_ITERATOR, fusion_iterator)         \
+        /**/
+
+    /// INTERNAL ONLY
+    ///
+    #define BOOST_PROTO_FUSION_AT(Z, N, DATA)                                                       \
+        *BOOST_PP_CAT(it, N)                                                                        \
+        /**/
+
+    /// INTERNAL ONLY
+    ///
+    #define BOOST_PROTO_FUSION_AS_CHILD_AT_TYPE(Z, N, DATA)                                         \
+        typename detail::protoify<                                                                  \
+            BOOST_PROTO_FUSION_AT_TYPE(Z, N, DATA)                                                  \
+          , Domain                                                                                  \
+        >::result_type                                                                              \
+        /**/
+
+    /// INTERNAL ONLY
+    ///
+    #define BOOST_PROTO_FUSION_AS_CHILD_AT(Z, N, DATA)                                              \
+        detail::protoify<                                                                           \
+            BOOST_PROTO_FUSION_AT_TYPE(Z, N, DATA)                                                  \
+          , Domain                                                                                  \
+        >()(BOOST_PROTO_FUSION_AT(Z, N, DATA))                                                      \
+        /**/
+
+        namespace detail
+        {
+            template<typename T, typename Domain>
+            struct protoify
+              : Domain::template as_expr<T>
+            {};
+
+            template<typename T, typename Domain>
+            struct protoify<T &, Domain>
+              : Domain::template as_child<T>
+            {};
+
+            template<typename T, typename Domain>
+            struct protoify<boost::reference_wrapper<T>, Domain>
+              : Domain::template as_child<T>
+            {};
+
+            template<typename T, typename Domain>
+            struct protoify<boost::reference_wrapper<T> const, Domain>
+              : Domain::template as_child<T>
+            {};
+
+            template<typename Tag, typename Domain, typename Sequence, std::size_t Size>
+            struct unpack_expr_
+            {};
+
+            template<typename Domain, typename Sequence>
+            struct unpack_expr_<tag::terminal, Domain, Sequence, 1u>
+            {
+                typedef
+                    typename add_const<
+                        typename fusion::result_of::value_of<
+                            typename fusion::result_of::begin<Sequence>::type
+                        >::type
+                    >::type
+                terminal_type;
+
+                typedef
+                    typename proto::detail::protoify<
+                        terminal_type
+                      , Domain
+                    >::result_type
+                type;
+
+                static type const call(Sequence const &sequence)
+                {
+                    return proto::detail::protoify<terminal_type, Domain>()(fusion::at_c<0>(sequence));
+                }
+            };
+
+            template<typename Sequence>
+            struct unpack_expr_<tag::terminal, deduce_domain, Sequence, 1u>
+              : unpack_expr_<tag::terminal, default_domain, Sequence, 1u>
+            {};
+
+            template<
+                typename Tag
+              , typename Domain
+                BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(
+                    BOOST_PROTO_MAX_ARITY
+                  , typename A
+                  , = void BOOST_PP_INTERCEPT
+                )
+              , typename _ = void
+            >
+            struct make_expr_
+            {};
+
+            template<typename Domain, typename A>
+            struct make_expr_<tag::terminal, Domain, A
+                BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PROTO_MAX_ARITY, void BOOST_PP_INTERCEPT)>
+            {
+                typedef typename proto::detail::protoify<A, Domain>::result_type result_type;
+
+                result_type operator()(typename add_reference<A>::type a) const
+                {
+                    return proto::detail::protoify<A, Domain>()(a);
+                }
+            };
+
+            template<typename A>
+            struct make_expr_<tag::terminal, deduce_domain, A
+                BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PROTO_MAX_ARITY, void BOOST_PP_INTERCEPT)>
+              : make_expr_<tag::terminal, default_domain, A>
+            {};
+
+        #define BOOST_PP_ITERATION_PARAMS_1                                                         \
+            (4, (1, BOOST_PROTO_MAX_ARITY, <boost/proto/make_expr.hpp>, 1))                         \
+            /**/
+
+        #include BOOST_PP_ITERATE()
+        }
+
+        namespace result_of
+        {
+            /// \brief Metafunction that computes the return type of the
+            /// \c make_expr() function, with a domain deduced from the
+            /// domains of the children.
+            ///
+            /// Use the <tt>result_of::make_expr\<\></tt> metafunction to
+            /// compute the return type of the \c make_expr() function.
+            ///
+            /// In this specialization, the domain is deduced from the
+            /// domains of the child types. (If
+            /// <tt>is_domain\<A0\>::value</tt> is \c true, then another
+            /// specialization is selected.)
+            template<
+                typename Tag
+              , BOOST_PP_ENUM_PARAMS(BOOST_PROTO_MAX_ARITY, typename A)
+              , typename Void1  // = void
+              , typename Void2  // = void
+            >
+            struct make_expr
+            {
+                /// Same as <tt>result_of::make_expr\<Tag, D, A0, ... AN\>::type</tt>
+                /// where \c D is the deduced domain, which is calculated as follows:
+                ///
+                /// For each \c x in <tt>[0,N)</tt> (proceeding in order beginning with
+                /// <tt>x=0</tt>), if <tt>domain_of\<Ax\>::type</tt> is not
+                /// \c default_domain, then \c D is <tt>domain_of\<Ax\>::type</tt>.
+                /// Otherwise, \c D is \c default_domain.
+                typedef
+                    typename detail::make_expr_<
+                        Tag
+                      , deduce_domain
+                        BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PROTO_MAX_ARITY, A)
+                    >::result_type
+                type;
+            };
+
+            /// \brief Metafunction that computes the return type of the
+            /// \c make_expr() function, within the specified domain.
+            ///
+            /// Use the <tt>result_of::make_expr\<\></tt> metafunction to compute
+            /// the return type of the \c make_expr() function.
+            template<
+                typename Tag
+              , typename Domain
+                BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PROTO_MAX_ARITY, typename A)
+            >
+            struct make_expr<
+                Tag
+              , Domain
+                BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PROTO_MAX_ARITY, A)
+              , typename Domain::proto_is_domain_
+            >
+            {
+                /// If \c Tag is <tt>tag::terminal</tt>, then \c type is a
+                /// typedef for <tt>boost::result_of\<Domain(expr\<tag::terminal,
+                /// term\<A0\> \>)\>::type</tt>.
+                ///
+                /// Otherwise, \c type is a typedef for <tt>boost::result_of\<Domain(expr\<Tag,
+                /// listN\< as_child\<A0\>::type, ... as_child\<AN\>::type\>)
+                /// \>::type</tt>, where \c N is the number of non-void template
+                /// arguments, and <tt>as_child\<A\>::type</tt> is evaluated as
+                /// follows:
+                ///
+                /// \li If <tt>is_expr\<A\>::value</tt> is \c true, then the
+                /// child type is \c A.
+                /// \li If \c A is <tt>B &</tt> or <tt>cv boost::reference_wrapper\<B\></tt>,
+                /// and <tt>is_expr\<B\>::value</tt> is \c true, then the
+                /// child type is <tt>B &</tt>.
+                /// \li If <tt>is_expr\<A\>::value</tt> is \c false, then the
+                /// child type is <tt>boost::result_of\<Domain(expr\<tag::terminal, term\<A\> \>
+                /// )\>::type</tt>.
+                /// \li If \c A is <tt>B &</tt> or <tt>cv boost::reference_wrapper\<B\></tt>,
+                /// and <tt>is_expr\<B\>::value</tt> is \c false, then the
+                /// child type is <tt>boost::result_of\<Domain(expr\<tag::terminal, term\<B &\> \>
+                /// )\>::type</tt>.
+                typedef
+                    typename detail::make_expr_<
+                        Tag
+                      , Domain
+                        BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PROTO_MAX_ARITY, A)
+                    >::result_type
+                type;
+            };
+
+            /// \brief Metafunction that computes the return type of the
+            /// \c unpack_expr() function, with a domain deduced from the
+            /// domains of the children.
+            ///
+            /// Use the <tt>result_of::unpack_expr\<\></tt> metafunction to
+            /// compute the return type of the \c unpack_expr() function.
+            ///
+            /// \c Sequence is a Fusion Forward Sequence.
+            ///
+            /// In this specialization, the domain is deduced from the
+            /// domains of the child types. (If
+            /// <tt>is_domain\<Sequence>::value</tt> is \c true, then another
+            /// specialization is selected.)
+            template<
+                typename Tag
+              , typename Sequence
+              , typename Void1  // = void
+              , typename Void2  // = void
+            >
+            struct unpack_expr
+            {
+                /// Let \c S be the type of a Fusion Random Access Sequence
+                /// equivalent to \c Sequence. Then \c type is the
+                /// same as <tt>result_of::make_expr\<Tag,
+                /// fusion::result_of::value_at_c\<S, 0\>::type, ...
+                /// fusion::result_of::value_at_c\<S, N-1\>::type\>::type</tt>,
+                /// where \c N is the size of \c S.
+                typedef
+                    typename detail::unpack_expr_<
+                        Tag
+                      , deduce_domain
+                      , Sequence
+                      , fusion::result_of::size<Sequence>::type::value
+                    >::type
+                type;
+            };
+
+            /// \brief Metafunction that computes the return type of the
+            /// \c unpack_expr() function, within the specified domain.
+            ///
+            /// Use the <tt>result_of::make_expr\<\></tt> metafunction to compute
+            /// the return type of the \c make_expr() function.
+            template<typename Tag, typename Domain, typename Sequence>
+            struct unpack_expr<Tag, Domain, Sequence, typename Domain::proto_is_domain_>
+            {
+                /// Let \c S be the type of a Fusion Random Access Sequence
+                /// equivalent to \c Sequence. Then \c type is the
+                /// same as <tt>result_of::make_expr\<Tag, Domain,
+                /// fusion::result_of::value_at_c\<S, 0\>::type, ...
+                /// fusion::result_of::value_at_c\<S, N-1\>::type\>::type</tt>,
+                /// where \c N is the size of \c S.
+                typedef
+                    typename detail::unpack_expr_<
+                        Tag
+                      , Domain
+                      , Sequence
+                      , fusion::result_of::size<Sequence>::type::value
+                    >::type
+                type;
+            };
+        }
+
+        namespace functional
+        {
+            /// \brief A callable function object equivalent to the
+            /// \c proto::make_expr() function.
+            ///
+            /// In all cases, <tt>functional::make_expr\<Tag, Domain\>()(a0, ... aN)</tt>
+            /// is equivalent to <tt>proto::make_expr\<Tag, Domain\>(a0, ... aN)</tt>.
+            ///
+            /// <tt>functional::make_expr\<Tag\>()(a0, ... aN)</tt>
+            /// is equivalent to <tt>proto::make_expr\<Tag\>(a0, ... aN)</tt>.
+            template<typename Tag, typename Domain  /* = deduce_domain*/>
+            struct make_expr
+            {
+                BOOST_PROTO_CALLABLE()
+                BOOST_PROTO_POLY_FUNCTION()
+
+                template<typename Sig>
+                struct result;
+
+                template<typename This, typename A0>
+                struct result<This(A0)>
+                {
+                    typedef
+                        typename result_of::make_expr<
+                            Tag
+                          , Domain
+                          , A0
+                        >::type
+                    type;
+                };
+
+                /// Construct an expression node with tag type \c Tag
+                /// and in the domain \c Domain.
+                ///
+                /// \return <tt>proto::make_expr\<Tag, Domain\>(a0,...aN)</tt>
+                template<typename A0>
+                typename result_of::make_expr<
+                    Tag
+                  , Domain
+                  , A0 const
+                >::type const
+                operator ()(A0 const &a0) const
+                {
+                    return proto::detail::make_expr_<
+                        Tag
+                      , Domain
+                      , A0 const
+                    >()(a0);
+                }
+
+                // Additional overloads generated by the preprocessor ...
+
+            #define BOOST_PP_ITERATION_PARAMS_1                                                     \
+                (4, (2, BOOST_PROTO_MAX_ARITY, <boost/proto/make_expr.hpp>, 2))                     \
+                /**/
+
+            #include BOOST_PP_ITERATE()
+
+                /// INTERNAL ONLY
+                ///
+                template<
+                    BOOST_PP_ENUM_BINARY_PARAMS(
+                        BOOST_PROTO_MAX_ARITY
+                      , typename A
+                      , = void BOOST_PP_INTERCEPT
+                    )
+                >
+                struct impl
+                  : detail::make_expr_<
+                      Tag
+                    , Domain
+                      BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PROTO_MAX_ARITY, A)
+                    >
+                {};
+            };
+
+            /// \brief A callable function object equivalent to the
+            /// \c proto::unpack_expr() function.
+            ///
+            /// In all cases, <tt>functional::unpack_expr\<Tag, Domain\>()(seq)</tt>
+            /// is equivalent to <tt>proto::unpack_expr\<Tag, Domain\>(seq)</tt>.
+            ///
+            /// <tt>functional::unpack_expr\<Tag\>()(seq)</tt>
+            /// is equivalent to <tt>proto::unpack_expr\<Tag\>(seq)</tt>.
+            template<typename Tag, typename Domain /* = deduce_domain*/>
+            struct unpack_expr
+            {
+                BOOST_PROTO_CALLABLE()
+
+                template<typename Sig>
+                struct result;
+
+                template<typename This, typename Sequence>
+                struct result<This(Sequence)>
+                {
+                    typedef
+                        typename result_of::unpack_expr<
+                            Tag
+                          , Domain
+                          , typename remove_reference<Sequence>::type
+                        >::type
+                    type;
+                };
+
+                /// Construct an expression node with tag type \c Tag
+                /// and in the domain \c Domain.
+                ///
+                /// \param sequence A Fusion Forward Sequence
+                /// \return <tt>proto::unpack_expr\<Tag, Domain\>(sequence)</tt>
+                template<typename Sequence>
+                typename result_of::unpack_expr<Tag, Domain, Sequence const>::type const
+                operator ()(Sequence const &sequence) const
+                {
+                    return proto::detail::unpack_expr_<
+                        Tag
+                      , Domain
+                      , Sequence const
+                      , fusion::result_of::size<Sequence>::type::value
+                    >::call(sequence);
+                }
+            };
+
+        } // namespace functional
+
+        /// \brief Construct an expression of the requested tag type
+        /// with a domain and with the specified arguments as children.
+        ///
+        /// This function template may be invoked either with or without
+        /// specifying a \c Domain argument. If no domain is specified,
+        /// the domain is deduced by examining in order the domains of
+        /// the given arguments and taking the first that is not
+        /// \c default_domain, if any such domain exists, or
+        /// \c default_domain otherwise.
+        ///
+        /// Let \c wrap_(x) be defined such that:
+        /// \li If \c x is a <tt>boost::reference_wrapper\<\></tt>,
+        /// \c wrap_(x) is equivalent to <tt>as_child\<Domain\>(x.get())</tt>.
+        /// \li Otherwise, \c wrap_(x) is equivalent to
+        /// <tt>as_expr\<Domain\>(x)</tt>.
+        ///
+        /// Let <tt>make_\<Tag\>(b0,...bN)</tt> be defined as
+        /// <tt>expr\<Tag, listN\<C0,...CN\> \>::make(c0,...cN)</tt>
+        /// where \c Bx is the type of \c bx.
+        ///
+        /// \return <tt>Domain()(make_\<Tag\>(wrap_(a0),...wrap_(aN)))</tt>.
+        template<typename Tag, typename A0>
+        typename lazy_disable_if<
+            is_domain<A0>
+          , result_of::make_expr<
+                Tag
+              , A0 const
+            >
+        >::type const
+        make_expr(A0 const &a0)
+        {
+            return proto::detail::make_expr_<
+                Tag
+              , deduce_domain
+              , A0 const
+            >()(a0);
+        }
+
+        /// \overload
+        ///
+        template<typename Tag, typename Domain, typename C0>
+        typename result_of::make_expr<
+            Tag
+          , Domain
+          , C0 const
+        >::type const
+        make_expr(C0 const &c0)
+        {
+            return proto::detail::make_expr_<
+                Tag
+              , Domain
+              , C0 const
+            >()(c0);
+        }
+
+        // Additional overloads generated by the preprocessor...
+
+    #define BOOST_PP_ITERATION_PARAMS_1                                                             \
+        (4, (2, BOOST_PROTO_MAX_ARITY, <boost/proto/make_expr.hpp>, 3))                             \
+        /**/
+
+    #include BOOST_PP_ITERATE()
+
+        /// \brief Construct an expression of the requested tag type
+        /// with a domain and with childres from the specified Fusion
+        /// Forward Sequence.
+        ///
+        /// This function template may be invoked either with or without
+        /// specifying a \c Domain argument. If no domain is specified,
+        /// the domain is deduced by examining in order the domains of the
+        /// elements of \c sequence and taking the first that is not
+        /// \c default_domain, if any such domain exists, or
+        /// \c default_domain otherwise.
+        ///
+        /// Let \c s be a Fusion Random Access Sequence equivalent to \c sequence.
+        /// Let <tt>wrap_\<N\>(s)</tt>, where \c s has type \c S, be defined
+        /// such that:
+        /// \li If <tt>fusion::result_of::value_at_c\<S,N\>::type</tt> is a reference,
+        /// <tt>wrap_\<N\>(s)</tt> is equivalent to
+        /// <tt>as_child\<Domain\>(fusion::at_c\<N\>(s))</tt>.
+        /// \li Otherwise, <tt>wrap_\<N\>(s)</tt> is equivalent to
+        /// <tt>as_expr\<Domain\>(fusion::at_c\<N\>(s))</tt>.
+        ///
+        /// Let <tt>make_\<Tag\>(b0,...bN)</tt> be defined as
+        /// <tt>expr\<Tag, listN\<B0,...BN\> \>::make(b0,...bN)</tt>
+        /// where \c Bx is the type of \c bx.
+        ///
+        /// \param sequence a Fusion Forward Sequence.
+        /// \return <tt>Domain()(make_\<Tag\>(wrap_\<0\>(s),...wrap_\<N-1\>(s)))</tt>,
+        /// where N is the size of \c Sequence.
+        template<typename Tag, typename Sequence>
+        typename lazy_disable_if<
+            is_domain<Sequence>
+          , result_of::unpack_expr<Tag, Sequence const>
+        >::type const
+        unpack_expr(Sequence const &sequence)
+        {
+            return proto::detail::unpack_expr_<
+                Tag
+              , deduce_domain
+              , Sequence const
+              , fusion::result_of::size<Sequence>::type::value
+            >::call(sequence);
+        }
+
+        /// \overload
+        ///
+        template<typename Tag, typename Domain, typename Sequence2>
+        typename result_of::unpack_expr<Tag, Domain, Sequence2 const>::type const
+        unpack_expr(Sequence2 const &sequence2)
+        {
+            return proto::detail::unpack_expr_<
+                Tag
+              , Domain
+              , Sequence2 const
+              , fusion::result_of::size<Sequence2>::type::value
+            >::call(sequence2);
+        }
+
+        /// INTERNAL ONLY
+        ///
+        template<typename Tag, typename Domain>
+        struct is_callable<functional::make_expr<Tag, Domain> >
+          : mpl::true_
+        {};
+
+        /// INTERNAL ONLY
+        ///
+        template<typename Tag, typename Domain>
+        struct is_callable<functional::unpack_expr<Tag, Domain> >
+          : mpl::true_
+        {};
+
+    }}
+
+    #ifdef _MSC_VER
+    # pragma warning(pop)
+    #endif
+
+    #undef BOOST_PROTO_FUSION_AT
+    #undef BOOST_PROTO_FUSION_AT_TYPE
+    #undef BOOST_PROTO_FUSION_AS_CHILD_AT
+    #undef BOOST_PROTO_FUSION_AS_CHILD_AT_TYPE
+    #undef BOOST_PROTO_FUSION_NEXT_ITERATOR
+    #undef BOOST_PROTO_FUSION_NEXT_ITERATOR_TYPE
+    #undef BOOST_PROTO_FUSION_ITERATORS
+    #undef BOOST_PROTO_FUSION_ITERATORS_TYPE
+
+    #endif // BOOST_PROTO_MAKE_EXPR_HPP_EAN_04_01_2005
+
+#elif BOOST_PP_ITERATION_FLAGS() == 1
+
+    #define N BOOST_PP_ITERATION()
+    #define M BOOST_PP_SUB(BOOST_PROTO_MAX_ARITY, N)
+
+        template<typename Tag, typename Domain BOOST_PP_ENUM_TRAILING_PARAMS(N, typename A)>
+        struct make_expr_<Tag, Domain BOOST_PP_ENUM_TRAILING_PARAMS(N, A)
+            BOOST_PP_ENUM_TRAILING_PARAMS(M, void BOOST_PP_INTERCEPT), void>
+        {
+            typedef
+                BOOST_PP_CAT(list, N)<
+                    BOOST_PP_ENUM(N, BOOST_PROTO_AS_CHILD_TYPE, (A, ~, Domain))
+                >
+            proto_args;
+
+            typedef typename base_expr<Domain, Tag, proto_args>::type expr_type;
+            typedef typename Domain::proto_generator proto_generator;
+            typedef typename proto_generator::template result<proto_generator(expr_type)>::type result_type;
+
+            result_type operator()(BOOST_PP_ENUM_BINARY_PARAMS(N, typename add_reference<A, >::type a)) const
+            {
+                expr_type const that = {
+                    BOOST_PP_ENUM(N, BOOST_PROTO_AS_CHILD, (A, a, Domain))
+                };
+                return proto_generator()(that);
+            }
+        };
+
+        template<typename Tag BOOST_PP_ENUM_TRAILING_PARAMS(N, typename A)>
+        struct make_expr_<Tag, deduce_domain BOOST_PP_ENUM_TRAILING_PARAMS(N, A)
+            BOOST_PP_ENUM_TRAILING_PARAMS(M, void BOOST_PP_INTERCEPT), void>
+          : make_expr_<
+                Tag
+              , typename BOOST_PP_CAT(deduce_domain, N)<BOOST_PP_ENUM_PARAMS(N, A)>::type
+                BOOST_PP_ENUM_TRAILING_PARAMS(N, A)
+            >
+        {};
+
+        template<typename Tag, typename Domain, typename Sequence>
+        struct unpack_expr_<Tag, Domain, Sequence, N>
+        {
+            BOOST_PROTO_FUSION_ITERATORS_TYPE(N)
+
+            typedef
+                BOOST_PP_CAT(list, N)<
+                    BOOST_PP_ENUM(N, BOOST_PROTO_FUSION_AS_CHILD_AT_TYPE, ~)
+                >
+            proto_args;
+
+            typedef typename base_expr<Domain, Tag, proto_args>::type expr_type;
+            typedef typename Domain::proto_generator proto_generator;
+            typedef typename proto_generator::template result<proto_generator(expr_type)>::type type;
+
+            static type const call(Sequence const &sequence)
+            {
+                BOOST_PROTO_FUSION_ITERATORS(N)
+                expr_type const that = {
+                    BOOST_PP_ENUM(N, BOOST_PROTO_FUSION_AS_CHILD_AT, ~)
+                };
+                return proto_generator()(that);
+            }
+        };
+
+        template<typename Tag, typename Sequence>
+        struct unpack_expr_<Tag, deduce_domain, Sequence, N>
+        {
+            BOOST_PROTO_FUSION_ITERATORS_TYPE(N)
+
+            typedef
+                unpack_expr_<
+                    Tag
+                  , typename BOOST_PP_CAT(deduce_domain, N)<
+                        BOOST_PP_ENUM(N, BOOST_PROTO_FUSION_AT_TYPE, ~)
+                    >::type
+                  , Sequence
+                  , N
+                >
+            other;
+
+            typedef typename other::type type;
+
+            static type const call(Sequence const &sequence)
+            {
+                return other::call(sequence);
+            }
+        };
+
+    #undef N
+    #undef M
+
+#elif BOOST_PP_ITERATION_FLAGS() == 2
+
+    #define N BOOST_PP_ITERATION()
+
+        template<typename This BOOST_PP_ENUM_TRAILING_PARAMS(N, typename A)>
+        struct result<This(BOOST_PP_ENUM_PARAMS(N, A))>
+        {
+            typedef
+                typename result_of::make_expr<
+                    Tag
+                  , Domain
+                    BOOST_PP_ENUM_TRAILING_PARAMS(N, A)
+                >::type
+            type;
+        };
+
+        /// \overload
+        ///
+        template<BOOST_PP_ENUM_PARAMS(N, typename A)>
+        typename result_of::make_expr<
+            Tag
+          , Domain
+            BOOST_PP_ENUM_TRAILING_PARAMS(N, const A)
+        >::type const
+        operator ()(BOOST_PP_ENUM_BINARY_PARAMS(N, const A, &a)) const
+        {
+            return proto::detail::make_expr_<
+                Tag
+              , Domain
+                BOOST_PP_ENUM_TRAILING_PARAMS(N, const A)
+            >()(BOOST_PP_ENUM_PARAMS(N, a));
+        }
+
+    #undef N
+
+#elif BOOST_PP_ITERATION_FLAGS() == 3
+
+    #define N BOOST_PP_ITERATION()
+
+        /// \overload
+        ///
+        template<typename Tag BOOST_PP_ENUM_TRAILING_PARAMS(N, typename A)>
+        typename lazy_disable_if<
+            is_domain<A0>
+          , result_of::make_expr<
+                Tag
+                BOOST_PP_ENUM_TRAILING_PARAMS(N, const A)
+            >
+        >::type const
+        make_expr(BOOST_PP_ENUM_BINARY_PARAMS(N, const A, &a))
+        {
+            return proto::detail::make_expr_<
+                Tag
+              , deduce_domain
+                BOOST_PP_ENUM_TRAILING_PARAMS(N, const A)
+            >()(BOOST_PP_ENUM_PARAMS(N, a));
+        }
+
+        /// \overload
+        ///
+        template<typename Tag, typename Domain BOOST_PP_ENUM_TRAILING_PARAMS(N, typename C)>
+        typename result_of::make_expr<
+            Tag
+          , Domain
+            BOOST_PP_ENUM_TRAILING_PARAMS(N, const C)
+        >::type const
+        make_expr(BOOST_PP_ENUM_BINARY_PARAMS(N, const C, &c))
+        {
+            return proto::detail::make_expr_<
+                Tag
+              , Domain
+                BOOST_PP_ENUM_TRAILING_PARAMS(N, const C)
+            >()(BOOST_PP_ENUM_PARAMS(N, c));
+        }
+
+    #undef N
+
+#endif // BOOST_PP_IS_ITERATING
diff --git a/3rdParty/Boost/src/boost/proto/matches.hpp b/3rdParty/Boost/src/boost/proto/matches.hpp
new file mode 100644
index 0000000..d4075b6
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/matches.hpp
@@ -0,0 +1,1117 @@
+#ifndef BOOST_PP_IS_ITERATING
+    ///////////////////////////////////////////////////////////////////////////////
+    /// \file matches.hpp
+    /// Contains definition of matches\<\> metafunction for determining if
+    /// a given expression matches a given pattern.
+    //
+    //  Copyright 2008 Eric Niebler. Distributed under the Boost
+    //  Software License, Version 1.0. (See accompanying file
+    //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+    #ifndef BOOST_PROTO_MATCHES_HPP_EAN_11_03_2006
+    #define BOOST_PROTO_MATCHES_HPP_EAN_11_03_2006
+
+    #include <boost/config.hpp>
+    #include <boost/detail/workaround.hpp>
+    #include <boost/preprocessor/cat.hpp>
+    #include <boost/preprocessor/arithmetic/dec.hpp>
+    #include <boost/preprocessor/arithmetic/sub.hpp>
+    #include <boost/preprocessor/iteration/iterate.hpp>
+    #include <boost/preprocessor/facilities/intercept.hpp>
+    #include <boost/preprocessor/punctuation/comma_if.hpp>
+    #include <boost/preprocessor/repetition/enum.hpp>
+    #include <boost/preprocessor/repetition/enum_params.hpp>
+    #include <boost/preprocessor/repetition/enum_shifted.hpp>
+    #include <boost/preprocessor/repetition/enum_binary_params.hpp>
+    #include <boost/preprocessor/repetition/enum_shifted_params.hpp>
+    #include <boost/preprocessor/repetition/enum_trailing_params.hpp>
+    #include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
+    #include <boost/preprocessor/repetition/repeat.hpp>
+    #include <boost/config.hpp>
+    #include <boost/mpl/logical.hpp>
+    #include <boost/mpl/eval_if.hpp>
+    #include <boost/mpl/aux_/template_arity.hpp>
+    #include <boost/mpl/aux_/lambda_arity_param.hpp>
+    #include <boost/utility/enable_if.hpp>
+    #if BOOST_WORKAROUND(BOOST_MSVC, == 1310)
+    #include <boost/type_traits/is_array.hpp>
+    #endif
+    #include <boost/type_traits/is_const.hpp>
+    #include <boost/type_traits/is_convertible.hpp>
+    #include <boost/type_traits/is_reference.hpp>
+    #include <boost/type_traits/is_pointer.hpp>
+    #include <boost/proto/proto_fwd.hpp>
+    #include <boost/proto/traits.hpp>
+    #include <boost/proto/transform/when.hpp>
+    #include <boost/proto/transform/impl.hpp>
+
+    // Some compilers (like GCC) need extra help figuring out a template's arity.
+    // I use MPL's BOOST_MPL_AUX_LAMBDA_ARITY_PARAM() macro to disambiguate, which
+    // which is controlled by the BOOST_MPL_LIMIT_METAFUNCTION_ARITY macro. If
+    // You define BOOST_PROTO_MAX_ARITY to be greater than
+    // BOOST_MPL_LIMIT_METAFUNCTION_ARITY on these compilers, things don't work.
+    // You must define BOOST_MPL_LIMIT_METAFUNCTION_ARITY to be greater.
+    #ifdef BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING
+    # if BOOST_PROTO_MAX_ARITY > BOOST_MPL_LIMIT_METAFUNCTION_ARITY
+    #  error BOOST_MPL_LIMIT_METAFUNCTION_ARITY must be at least as large as BOOST_PROTO_MAX_ARITY
+    # endif
+    #endif
+
+    #if defined(_MSC_VER) && (_MSC_VER >= 1020)
+    # pragma warning(push)
+    # pragma warning(disable:4305) // 'specialization' : truncation from 'const int' to 'bool'
+    #endif
+
+    namespace boost { namespace proto
+    {
+
+        namespace detail
+        {
+            template<typename Expr, typename BasicExpr, typename Grammar>
+            struct matches_;
+
+            template<bool B, typename Pred>
+            struct and_2;
+
+            template<typename And, typename Expr, typename State, typename Data>
+            struct _and_impl;
+
+            template<typename T, typename U>
+            struct array_matches
+              : mpl::false_
+            {};
+
+            template<typename T, std::size_t M>
+            struct array_matches<T[M], T *>
+              : mpl::true_
+            {};
+
+            template<typename T, std::size_t M>
+            struct array_matches<T[M], T const *>
+              : mpl::true_
+            {};
+
+            template<typename T, std::size_t M>
+            struct array_matches<T[M], T[proto::N]>
+              : mpl::true_
+            {};
+
+            template<typename T, typename U
+                BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(long Arity = mpl::aux::template_arity<U>::value)
+            >
+            struct lambda_matches
+              : mpl::false_
+            {};
+
+            template<typename T>
+            struct lambda_matches<T, proto::_ BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(-1)>
+              : mpl::true_
+            {};
+
+            template<typename T>
+            struct lambda_matches<T, T BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(-1)>
+              : mpl::true_
+            {};
+
+            template<typename T, std::size_t M, typename U>
+            struct lambda_matches<T[M], U BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(-1)>
+              : array_matches<T[M], U>
+            {};
+
+            template<typename T, std::size_t M>
+            struct lambda_matches<T[M], _ BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(-1)>
+              : mpl::true_
+            {};
+
+            template<typename T, std::size_t M>
+            struct lambda_matches<T[M], T[M] BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(-1)>
+              : mpl::true_
+            {};
+
+            template<template<typename> class T, typename Expr0, typename Grammar0>
+            struct lambda_matches<T<Expr0>, T<Grammar0> BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(1) >
+              : lambda_matches<Expr0, Grammar0>
+            {};
+
+            // vararg_matches_impl
+            template<typename Args1, typename Back, long From, long To>
+            struct vararg_matches_impl;
+
+            // vararg_matches
+            template<typename Expr, typename Args1, typename Args2, typename Back, bool Can, bool Zero, typename Void = void>
+            struct vararg_matches
+              : mpl::false_
+            {};
+
+            template<typename Expr, typename Args1, typename Args2, typename Back>
+            struct vararg_matches<Expr, Args1, Args2, Back, true, true, typename Back::proto_is_vararg_>
+              : matches_<
+                    Expr
+                  , proto::basic_expr<ignore, Args1, Args1::arity>
+                  , proto::basic_expr<ignore, Args2, Args1::arity>
+                >
+            {};
+
+            template<typename Expr, typename Args1, typename Args2, typename Back>
+            struct vararg_matches<Expr, Args1, Args2, Back, true, false, typename Back::proto_is_vararg_>
+              : and_2<
+                    matches_<
+                        Expr
+                      , proto::basic_expr<ignore, Args1, Args2::arity>
+                      , proto::basic_expr<ignore, Args2, Args2::arity>
+                    >::value
+                  , vararg_matches_impl<Args1, typename Back::proto_grammar, Args2::arity + 1, Args1::arity>
+                >
+            {};
+
+            // How terminal_matches<> handles references and cv-qualifiers.
+            // The cv and ref matter *only* if the grammar has a top-level ref.
+            //
+            // Expr       |   Grammar    |  Matches?
+            // -------------------------------------
+            // T              T             yes
+            // T &            T             yes
+            // T const &      T             yes
+            // T              T &           no
+            // T &            T &           yes
+            // T const &      T &           no
+            // T              T const &     no
+            // T &            T const &     no
+            // T const &      T const &     yes
+
+            template<typename T, typename U>
+            struct is_cv_ref_compatible
+              : mpl::true_
+            {};
+
+            template<typename T, typename U>
+            struct is_cv_ref_compatible<T, U &>
+              : mpl::false_
+            {};
+
+            template<typename T, typename U>
+            struct is_cv_ref_compatible<T &, U &>
+              : mpl::bool_<is_const<T>::value == is_const<U>::value>
+            {};
+
+        #if BOOST_WORKAROUND(BOOST_MSVC, == 1310)
+            // MSVC-7.1 has lots of problems with array types that have been
+            // deduced. Partially specializing terminal_matches<> on array types
+            // doesn't seem to work.
+            template<
+                typename T
+              , typename U
+              , bool B = is_array<BOOST_PROTO_UNCVREF(T)>::value
+            >
+            struct terminal_array_matches
+              : mpl::false_
+            {};
+
+            template<typename T, typename U, std::size_t M>
+            struct terminal_array_matches<T, U(&)[M], true>
+              : is_convertible<T, U(&)[M]>
+            {};
+
+            template<typename T, typename U>
+            struct terminal_array_matches<T, U(&)[proto::N], true>
+              : is_convertible<T, U *>
+            {};
+
+            template<typename T, typename U>
+            struct terminal_array_matches<T, U *, true>
+              : is_convertible<T, U *>
+            {};
+
+            // terminal_matches
+            template<typename T, typename U>
+            struct terminal_matches
+              : mpl::or_<
+                    mpl::and_<
+                        is_cv_ref_compatible<T, U>
+                      , lambda_matches<
+                            BOOST_PROTO_UNCVREF(T)
+                          , BOOST_PROTO_UNCVREF(U)
+                        >
+                    >
+                  , terminal_array_matches<T, U>
+                >
+            {};
+        #else
+            // terminal_matches
+            template<typename T, typename U>
+            struct terminal_matches
+              : mpl::and_<
+                    is_cv_ref_compatible<T, U>
+                  , lambda_matches<
+                        BOOST_PROTO_UNCVREF(T)
+                      , BOOST_PROTO_UNCVREF(U)
+                    >
+                >
+            {};
+
+            template<typename T, std::size_t M>
+            struct terminal_matches<T(&)[M], T(&)[proto::N]>
+              : mpl::true_
+            {};
+
+            template<typename T, std::size_t M>
+            struct terminal_matches<T(&)[M], T *>
+              : mpl::true_
+            {};
+
+            // Avoid ambiguity errors on MSVC
+            #if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500))
+            template<typename T, std::size_t M>
+            struct terminal_matches<T const (&)[M], T const[M]>
+              : mpl::true_
+            {};
+            #endif
+        #endif
+
+            template<typename T>
+            struct terminal_matches<T, T>
+              : mpl::true_
+            {};
+
+            template<typename T>
+            struct terminal_matches<T &, T>
+              : mpl::true_
+            {};
+
+            template<typename T>
+            struct terminal_matches<T const &, T>
+              : mpl::true_
+            {};
+
+            template<typename T>
+            struct terminal_matches<T, proto::_>
+              : mpl::true_
+            {};
+
+            template<typename T>
+            struct terminal_matches<T, exact<T> >
+              : mpl::true_
+            {};
+
+            template<typename T, typename U>
+            struct terminal_matches<T, proto::convertible_to<U> >
+              : is_convertible<T, U>
+            {};
+
+            // matches_
+            template<typename Expr, typename BasicExpr, typename Grammar>
+            struct matches_
+              : mpl::false_
+            {};
+
+            template<typename Expr, typename BasicExpr>
+            struct matches_< Expr, BasicExpr, proto::_ >
+              : mpl::true_
+            {};
+
+            template<typename Expr, typename Tag, typename Args1, long N1, typename Args2, long N2>
+            struct matches_< Expr, proto::basic_expr<Tag, Args1, N1>, proto::basic_expr<Tag, Args2, N2> >
+              : vararg_matches< Expr, Args1, Args2, typename Args2::back_, (N1+2 > N2), (N2 > N1) >
+            {};
+
+            template<typename Expr, typename Tag, typename Args1, long N1, typename Args2, long N2>
+            struct matches_< Expr, proto::basic_expr<Tag, Args1, N1>, proto::basic_expr<proto::_, Args2, N2> >
+              : vararg_matches< Expr, Args1, Args2, typename Args2::back_, (N1+2 > N2), (N2 > N1) >
+            {};
+
+            template<typename Expr, typename Tag, typename Args1, typename Args2>
+            struct matches_< Expr, proto::basic_expr<Tag, Args1, 0>, proto::basic_expr<Tag, Args2, 0> >
+              : terminal_matches<typename Args1::child0, typename Args2::child0>
+            {};
+
+            template<typename Expr, typename Tag, typename Args1, typename Args2, long N2>
+            struct matches_< Expr, proto::basic_expr<Tag, Args1, 0>, proto::basic_expr<proto::_, Args2, N2> >
+              : mpl::false_
+            {};
+
+            template<typename Expr, typename Tag, typename Args1, typename Args2>
+            struct matches_< Expr, proto::basic_expr<Tag, Args1, 0>, proto::basic_expr<proto::_, Args2, 0> >
+              : terminal_matches<typename Args1::child0, typename Args2::child0>
+            {};
+
+            template<typename Expr, typename Tag, typename Args1, typename Args2>
+            struct matches_< Expr, proto::basic_expr<Tag, Args1, 1>, proto::basic_expr<Tag, Args2, 1> >
+              : matches_<
+                    typename detail::expr_traits<typename Args1::child0>::value_type::proto_derived_expr
+                  , typename detail::expr_traits<typename Args1::child0>::value_type::proto_grammar
+                  , typename Args2::child0::proto_grammar
+                >
+            {};
+
+            template<typename Expr, typename Tag, typename Args1, typename Args2>
+            struct matches_< Expr, proto::basic_expr<Tag, Args1, 1>, proto::basic_expr<proto::_, Args2, 1> >
+              : matches_<
+                    typename detail::expr_traits<typename Args1::child0>::value_type::proto_derived_expr
+                  , typename detail::expr_traits<typename Args1::child0>::value_type::proto_grammar
+                  , typename Args2::child0::proto_grammar
+                >
+            {};
+
+        #define BOOST_PROTO_MATCHES_N_FUN(Z, N, DATA)                                               \
+            matches_<                                                                               \
+                typename detail::expr_traits<typename Args1::BOOST_PP_CAT(child, N)>::value_type::proto_derived_expr \
+              , typename detail::expr_traits<typename Args1::BOOST_PP_CAT(child, N)>::value_type::proto_grammar \
+              , typename Args2::BOOST_PP_CAT(child, N)::proto_grammar                               \
+            >
+
+        #define BOOST_PROTO_DEFINE_MATCHES(Z, N, DATA)                                              \
+            matches_<                                                                               \
+                Expr                                                                                \
+              , BasicExpr                                                                           \
+              , typename BOOST_PP_CAT(G, N)::proto_grammar                                          \
+            >
+
+        #define BOOST_PROTO_DEFINE_LAMBDA_MATCHES(Z, N, DATA)                                       \
+            lambda_matches<                                                                         \
+                BOOST_PP_CAT(Expr, N)                                                               \
+              , BOOST_PP_CAT(Grammar, N)                                                            \
+            >
+
+        #if BOOST_PROTO_MAX_LOGICAL_ARITY > BOOST_PROTO_MAX_ARITY
+            #define BOOST_PP_ITERATION_PARAMS_1 (4, (2, BOOST_PROTO_MAX_LOGICAL_ARITY, <boost/proto/matches.hpp>, 1))
+        #else
+            #define BOOST_PP_ITERATION_PARAMS_1 (4, (2, BOOST_PROTO_MAX_ARITY, <boost/proto/matches.hpp>, 1))
+        #endif
+        #include BOOST_PP_ITERATE()
+
+        #define BOOST_PP_ITERATION_PARAMS_1 (4, (2, BOOST_PROTO_MAX_ARITY, <boost/proto/matches.hpp>, 2))
+        #include BOOST_PP_ITERATE()
+
+        #undef BOOST_PROTO_MATCHES_N_FUN
+        #undef BOOST_PROTO_DEFINE_MATCHES
+        #undef BOOST_PROTO_DEFINE_LAMBDA_MATCHES
+
+            // handle proto::if_
+            template<typename Expr, typename Tag, typename Args, long Arity, typename If, typename Then, typename Else>
+            struct matches_<Expr, proto::basic_expr<Tag, Args, Arity>, proto::if_<If, Then, Else> >
+              : mpl::eval_if_c<
+                    remove_reference<
+                        typename when<_, If>::template impl<Expr, int, int>::result_type
+                    >::type::value
+                  , matches_<Expr, proto::basic_expr<Tag, Args, Arity>, typename Then::proto_grammar>
+                  , matches_<Expr, proto::basic_expr<Tag, Args, Arity>, typename Else::proto_grammar>
+                >::type
+            {
+                typedef
+                    typename mpl::if_c<
+                        remove_reference<
+                            typename when<_, If>::template impl<Expr, int, int>::result_type
+                        >::type::value
+                      , Then
+                      , Else
+                    >::type
+                which;
+            };
+
+            // handle degenerate cases of proto::or_
+            template<typename Expr, typename BasicExpr>
+            struct matches_<Expr, BasicExpr, or_<> >
+              : mpl::false_
+            {
+                typedef not_<_> which;
+            };
+
+            template<typename Expr, typename BasicExpr, typename G0>
+            struct matches_<Expr, BasicExpr, or_<G0> >
+              : matches_<Expr, BasicExpr, typename G0::proto_grammar>
+            {
+                typedef G0 which;
+            };
+
+            // handle degenerate cases of proto::and_
+            template<typename Expr, typename BasicExpr>
+            struct matches_<Expr, BasicExpr, and_<> >
+              : mpl::true_
+            {};
+
+            template<typename Expr, typename BasicExpr, typename G0>
+            struct matches_<Expr, BasicExpr, and_<G0> >
+              : matches_<Expr, BasicExpr, typename G0::proto_grammar>
+            {};
+
+            // handle proto::not_
+            template<typename Expr, typename BasicExpr, typename Grammar>
+            struct matches_<Expr, BasicExpr, not_<Grammar> >
+              : mpl::not_<matches_<Expr, BasicExpr, typename Grammar::proto_grammar> >
+            {};
+
+            // handle proto::switch_
+            template<typename Expr, typename Tag, typename Args, long Arity, typename Cases>
+            struct matches_<Expr, proto::basic_expr<Tag, Args, Arity>, switch_<Cases> >
+              : matches_<
+                    Expr
+                  , proto::basic_expr<Tag, Args, Arity>
+                  , typename Cases::template case_<Tag>::proto_grammar
+                >
+            {
+                typedef typename Cases::template case_<Tag> which;
+            };
+        }
+
+        /// \brief A Boolean metafunction that evaluates whether a given
+        /// expression type matches a grammar.
+        ///
+        /// <tt>matches\<Expr,Grammar\></tt> inherits (indirectly) from
+        /// \c mpl::true_ if <tt>Expr::proto_grammar</tt> matches
+        /// <tt>Grammar::proto_grammar</tt>, and from \c mpl::false_
+        /// otherwise.
+        ///
+        /// Non-terminal expressions are matched against a grammar
+        /// according to the following rules:
+        ///
+        /// \li The wildcard pattern, \c _, matches any expression.
+        /// \li An expression <tt>expr\<AT, listN\<A0,A1,...An\> \></tt>
+        ///     matches a grammar <tt>expr\<BT, listN\<B0,B1,...Bn\> \></tt>
+        ///     if \c BT is \c _ or \c AT, and if \c Ax matches \c Bx for
+        ///     each \c x in <tt>[0,n)</tt>.
+        /// \li An expression <tt>expr\<AT, listN\<A0,...An,U0,...Um\> \></tt>
+        ///     matches a grammar <tt>expr\<BT, listM\<B0,...Bn,vararg\<V\> \> \></tt>
+        ///     if \c BT is \c _ or \c AT, and if \c Ax matches \c Bx
+        ///     for each \c x in <tt>[0,n)</tt> and if \c Ux matches \c V
+        ///     for each \c x in <tt>[0,m)</tt>.
+        /// \li An expression \c E matches <tt>or_\<B0,B1,...Bn\></tt> if \c E
+        ///     matches some \c Bx for \c x in <tt>[0,n)</tt>.
+        /// \li An expression \c E matches <tt>and_\<B0,B1,...Bn\></tt> if \c E
+        ///     matches all \c Bx for \c x in <tt>[0,n)</tt>.
+        /// \li An expression \c E matches <tt>if_\<T,U,V\></tt> if
+        ///     <tt>boost::result_of\<when\<_,T\>(E,int,int)\>::type::value</tt>
+        ///     is \c true and \c E matches \c U; or, if
+        ///     <tt>boost::result_of\<when\<_,T\>(E,int,int)\>::type::value</tt>
+        ///     is \c false and \c E matches \c V. (Note: \c U defaults to \c _
+        ///     and \c V defaults to \c not_\<_\>.)
+        /// \li An expression \c E matches <tt>not_\<T\></tt> if \c E does
+        ///     not match \c T.
+        /// \li An expression \c E matches <tt>switch_\<C\></tt> if
+        ///     \c E matches <tt>C::case_\<E::proto_tag\></tt>.
+        ///
+        /// A terminal expression <tt>expr\<AT,term\<A\> \></tt> matches
+        /// a grammar <tt>expr\<BT,term\<B\> \></tt> if \c BT is \c AT or
+        /// \c proto::_ and if one of the following is true:
+        ///
+        /// \li \c B is the wildcard pattern, \c _
+        /// \li \c A is \c B
+        /// \li \c A is <tt>B &</tt>
+        /// \li \c A is <tt>B const &</tt>
+        /// \li \c B is <tt>exact\<A\></tt>
+        /// \li \c B is <tt>convertible_to\<X\></tt> and
+        ///     <tt>is_convertible\<A,X\>::value</tt> is \c true.
+        /// \li \c A is <tt>X[M]</tt> or <tt>X(&)[M]</tt> and
+        ///     \c B is <tt>X[proto::N]</tt>.
+        /// \li \c A is <tt>X(&)[M]</tt> and \c B is <tt>X(&)[proto::N]</tt>.
+        /// \li \c A is <tt>X[M]</tt> or <tt>X(&)[M]</tt> and
+        ///     \c B is <tt>X*</tt>.
+        /// \li \c B lambda-matches \c A (see below).
+        ///
+        /// A type \c B lambda-matches \c A if one of the following is true:
+        ///
+        /// \li \c B is \c A
+        /// \li \c B is the wildcard pattern, \c _
+        /// \li \c B is <tt>T\<B0,B1,...Bn\></tt> and \c A is
+        ///     <tt>T\<A0,A1,...An\></tt> and for each \c x in
+        ///     <tt>[0,n)</tt>, \c Ax and \c Bx are types
+        ///     such that \c Ax lambda-matches \c Bx
+        template<typename Expr, typename Grammar>
+        struct matches
+          : detail::matches_<
+                typename Expr::proto_derived_expr
+              , typename Expr::proto_grammar
+              , typename Grammar::proto_grammar
+            >
+        {};
+
+        /// INTERNAL ONLY
+        ///
+        template<typename Expr, typename Grammar>
+        struct matches<Expr &, Grammar>
+          : detail::matches_<
+                typename Expr::proto_derived_expr
+              , typename Expr::proto_grammar
+              , typename Grammar::proto_grammar
+            >
+        {};
+
+        /// \brief A wildcard grammar element that matches any expression,
+        /// and a transform that returns the current expression unchanged.
+        ///
+        /// The wildcard type, \c _, is a grammar element such that
+        /// <tt>matches\<E,_\>::value</tt> is \c true for any expression
+        /// type \c E.
+        ///
+        /// The wildcard can also be used as a stand-in for a template
+        /// argument when matching terminals. For instance, the following
+        /// is a grammar that will match any <tt>std::complex\<\></tt>
+        /// terminal:
+        ///
+        /// \code
+        /// BOOST_MPL_ASSERT((
+        ///     matches<
+        ///         terminal<std::complex<double> >::type
+        ///       , terminal<std::complex< _ > >
+        ///     >
+        /// ));
+        /// \endcode
+        ///
+        /// When used as a transform, \c _ returns the current expression
+        /// unchanged. For instance, in the following, \c _ is used with
+        /// the \c fold\<\> transform to fold the children of a node:
+        ///
+        /// \code
+        /// struct CountChildren
+        ///   : or_<
+        ///         // Terminals have no children
+        ///         when<terminal<_>, mpl::int_<0>()>
+        ///         // Use fold<> to count the children of non-terminals
+        ///       , otherwise<
+        ///             fold<
+        ///                 _ // <-- fold the current expression
+        ///               , mpl::int_<0>()
+        ///               , mpl::plus<_state, mpl::int_<1> >()
+        ///             >
+        ///         >
+        ///     >
+        /// {};
+        /// \endcode
+        struct _ : transform<_>
+        {
+            typedef _ proto_grammar;
+
+            template<typename Expr, typename State, typename Data>
+            struct impl : transform_impl<Expr, State, Data>
+            {
+                typedef Expr result_type;
+
+                /// \param expr An expression
+                /// \return \c e
+                #ifdef BOOST_PROTO_STRICT_RESULT_OF
+                result_type
+                #else
+                typename impl::expr_param 
+                #endif
+                operator()(
+                    typename impl::expr_param e
+                  , typename impl::state_param
+                  , typename impl::data_param
+                ) const
+                {
+                    return e;
+                }
+            };
+        };
+
+        namespace detail
+        {
+            template<typename Expr, typename State, typename Data>
+            struct _and_impl<proto::and_<>, Expr, State, Data>
+              : proto::_::impl<Expr, State, Data>
+            {};
+
+            template<typename G0, typename Expr, typename State, typename Data>
+            struct _and_impl<proto::and_<G0>, Expr, State, Data>
+              : proto::when<proto::_, G0>::template impl<Expr, State, Data>
+            {};
+        }
+
+        /// \brief Inverts the set of expressions matched by a grammar. When
+        /// used as a transform, \c not_\<\> returns the current expression
+        /// unchanged.
+        ///
+        /// If an expression type \c E does not match a grammar \c G, then
+        /// \c E \e does match <tt>not_\<G\></tt>. For example,
+        /// <tt>not_\<terminal\<_\> \></tt> will match any non-terminal.
+        template<typename Grammar>
+        struct not_ : transform<not_<Grammar> >
+        {
+            typedef not_ proto_grammar;
+
+            template<typename Expr, typename State, typename Data>
+            struct impl : transform_impl<Expr, State, Data>
+            {
+                typedef Expr result_type;
+
+                /// \param e An expression
+                /// \pre <tt>matches\<Expr,not_\>::value</tt> is \c true.
+                /// \return \c e
+                #ifdef BOOST_PROTO_STRICT_RESULT_OF
+                result_type
+                #else
+                typename impl::expr_param 
+                #endif
+                operator()(
+                    typename impl::expr_param e
+                    , typename impl::state_param
+                    , typename impl::data_param
+                ) const
+                {
+                    return e;
+                }
+            };
+        };
+
+        /// \brief Used to select one grammar or another based on the result
+        /// of a compile-time Boolean. When used as a transform, \c if_\<\>
+        /// selects between two transforms based on a compile-time Boolean.
+        ///
+        /// When <tt>if_\<If,Then,Else\></tt> is used as a grammar, \c If
+        /// must be a Proto transform and \c Then and \c Else must be grammars.
+        /// An expression type \c E matches <tt>if_\<If,Then,Else\></tt> if
+        /// <tt>boost::result_of\<when\<_,If\>(E,int,int)\>::type::value</tt>
+        /// is \c true and \c E matches \c U; or, if
+        /// <tt>boost::result_of\<when\<_,If\>(E,int,int)\>::type::value</tt>
+        /// is \c false and \c E matches \c V.
+        ///
+        /// The template parameter \c Then defaults to \c _
+        /// and \c Else defaults to \c not\<_\>, so an expression type \c E
+        /// will match <tt>if_\<If\></tt> if and only if
+        /// <tt>boost::result_of\<when\<_,If\>(E,int,int)\>::type::value</tt>
+        /// is \c true.
+        ///
+        /// \code
+        /// // A grammar that only matches integral terminals,
+        /// // using is_integral<> from Boost.Type_traits.
+        /// struct IsIntegral
+        ///   : and_<
+        ///         terminal<_>
+        ///       , if_< is_integral<_value>() >
+        ///     >
+        /// {};
+        /// \endcode
+        ///
+        /// When <tt>if_\<If,Then,Else\></tt> is used as a transform, \c If,
+        /// \c Then and \c Else must be Proto transforms. When applying
+        /// the transform to an expression \c E, state \c S and data \c V,
+        /// if <tt>boost::result_of\<when\<_,If\>(E,S,V)\>::type::value</tt>
+        /// is \c true then the \c Then transform is applied; otherwise
+        /// the \c Else transform is applied.
+        ///
+        /// \code
+        /// // Match a terminal. If the terminal is integral, return
+        /// // mpl::true_; otherwise, return mpl::false_.
+        /// struct IsIntegral2
+        ///   : when<
+        ///         terminal<_>
+        ///       , if_<
+        ///             is_integral<_value>()
+        ///           , mpl::true_()
+        ///           , mpl::false_()
+        ///         >
+        ///     >
+        /// {};
+        /// \endcode
+        template<
+            typename If
+          , typename Then   // = _
+          , typename Else   // = not_<_>
+        >
+        struct if_ : transform<if_<If, Then, Else> >
+        {
+            typedef if_ proto_grammar;
+
+            template<typename Expr, typename State, typename Data>
+            struct impl : transform_impl<Expr, State, Data>
+            {
+                typedef
+                    typename when<_, If>::template impl<Expr, State, Data>::result_type
+                condition;
+
+                typedef
+                    typename mpl::if_c<
+                        remove_reference<condition>::type::value
+                      , when<_, Then>
+                      , when<_, Else>
+                    >::type
+                which;
+
+                typedef typename which::template impl<Expr, State, Data>::result_type result_type;
+
+                /// \param e An expression
+                /// \param s The current state
+                /// \param d A data of arbitrary type
+                /// \return <tt>which::impl<Expr, State, Data>()(e, s, d)</tt>
+                result_type operator ()(
+                    typename impl::expr_param e
+                  , typename impl::state_param s
+                  , typename impl::data_param d
+                ) const
+                {
+                    return typename which::template impl<Expr, State, Data>()(e, s, d);
+                }
+            };
+        };
+
+        /// \brief For matching one of a set of alternate grammars. Alternates
+        /// tried in order to avoid ambiguity. When used as a transform, \c or_\<\>
+        /// applies the transform associated with the first grammar that matches
+        /// the expression.
+        ///
+        /// An expression type \c E matches <tt>or_\<B0,B1,...Bn\></tt> if \c E
+        /// matches any \c Bx for \c x in <tt>[0,n)</tt>.
+        ///
+        /// When applying <tt>or_\<B0,B1,...Bn\></tt> as a transform with an
+        /// expression \c e of type \c E, state \c s and data \c d, it is
+        /// equivalent to <tt>Bx()(e, s, d)</tt>, where \c x is the lowest
+        /// number such that <tt>matches\<E,Bx\>::value</tt> is \c true.
+        template<BOOST_PP_ENUM_PARAMS(BOOST_PROTO_MAX_LOGICAL_ARITY, typename G)>
+        struct or_ : transform<or_<BOOST_PP_ENUM_PARAMS(BOOST_PROTO_MAX_LOGICAL_ARITY, G)> >
+        {
+            typedef or_ proto_grammar;
+
+            /// \param e An expression
+            /// \param s The current state
+            /// \param d A data of arbitrary type
+            /// \pre <tt>matches\<Expr,or_\>::value</tt> is \c true.
+            /// \return <tt>which()(e, s, d)</tt>, where <tt>which</tt> is the
+            /// sub-grammar that matched <tt>Expr</tt>.
+
+            template<typename Expr, typename State, typename Data>
+            struct impl
+              : detail::matches_<
+                    typename Expr::proto_derived_expr
+                  , typename Expr::proto_grammar
+                  , or_
+                >::which::template impl<Expr, State, Data>
+            {};
+
+            template<typename Expr, typename State, typename Data>
+            struct impl<Expr &, State, Data>
+              : detail::matches_<
+                    typename Expr::proto_derived_expr
+                  , typename Expr::proto_grammar
+                  , or_
+                >::which::template impl<Expr &, State, Data>
+            {};
+        };
+
+        /// \brief For matching all of a set of grammars. When used as a
+        /// transform, \c and_\<\> applies the transforms associated with
+        /// the each grammar in the set, and returns the result of the last.
+        ///
+        /// An expression type \c E matches <tt>and_\<B0,B1,...Bn\></tt> if \c E
+        /// matches all \c Bx for \c x in <tt>[0,n)</tt>.
+        ///
+        /// When applying <tt>and_\<B0,B1,...Bn\></tt> as a transform with an
+        /// expression \c e, state \c s and data \c d, it is
+        /// equivalent to <tt>(B0()(e, s, d),B1()(e, s, d),...Bn()(e, s, d))</tt>.
+        template<BOOST_PP_ENUM_PARAMS(BOOST_PROTO_MAX_LOGICAL_ARITY, typename G)>
+        struct and_ : transform<and_<BOOST_PP_ENUM_PARAMS(BOOST_PROTO_MAX_LOGICAL_ARITY, G)> >
+        {
+            typedef and_ proto_grammar;
+
+            template<typename Expr, typename State, typename Data>
+            struct impl
+              : detail::_and_impl<and_, Expr, State, Data>
+            {};
+        };
+
+        /// \brief For matching one of a set of alternate grammars, which
+        /// are looked up based on an expression's tag type. When used as a
+        /// transform, \c switch_\<\> applies the transform associated with
+        /// the grammar that matches the expression.
+        ///
+        /// \note \c switch_\<\> is functionally identical to \c or_\<\> but
+        /// is often more efficient. It does a fast, O(1) lookup based on an
+        /// expression's tag type to find a sub-grammar that may potentially
+        /// match the expression.
+        ///
+        /// An expression type \c E matches <tt>switch_\<C\></tt> if \c E
+        /// matches <tt>C::case_\<E::proto_tag\></tt>.
+        ///
+        /// When applying <tt>switch_\<C\></tt> as a transform with an
+        /// expression \c e of type \c E, state \c s and data \c d, it is
+        /// equivalent to <tt>C::case_\<E::proto_tag\>()(e, s, d)</tt>.
+        template<typename Cases>
+        struct switch_ : transform<switch_<Cases> >
+        {
+            typedef switch_ proto_grammar;
+
+            /// \param e An expression
+            /// \param s The current state
+            /// \param d A data of arbitrary type
+            /// \pre <tt>matches\<Expr,switch_\>::value</tt> is \c true.
+            /// \return <tt>which()(e, s, d)</tt>, where <tt>which</tt> is
+            /// <tt>Cases::case_<typename Expr::proto_tag></tt>
+
+            template<typename Expr, typename State, typename Data>
+            struct impl
+              : Cases::template case_<typename Expr::proto_tag>::template impl<Expr, State, Data>
+            {};
+
+            template<typename Expr, typename State, typename Data>
+            struct impl<Expr &, State, Data>
+              : Cases::template case_<typename Expr::proto_tag>::template impl<Expr &, State, Data>
+            {};
+        };
+
+        /// \brief For forcing exact matches of terminal types.
+        ///
+        /// By default, matching terminals ignores references and
+        /// cv-qualifiers. For instance, a terminal expression of
+        /// type <tt>terminal\<int const &\>::type</tt> will match
+        /// the grammar <tt>terminal\<int\></tt>. If that is not
+        /// desired, you can force an exact match with
+        /// <tt>terminal\<exact\<int\> \></tt>. This will only
+        /// match integer terminals where the terminal is held by
+        /// value.
+        template<typename T>
+        struct exact
+        {};
+
+        /// \brief For matching terminals that are convertible to
+        /// a type.
+        ///
+        /// Use \c convertible_to\<\> to match a terminal that is
+        /// convertible to some type. For example, the grammar
+        /// <tt>terminal\<convertible_to\<int\> \></tt> will match
+        /// any terminal whose argument is convertible to an integer.
+        ///
+        /// \note The trait \c is_convertible\<\> from Boost.Type_traits
+        /// is used to determinal convertibility.
+        template<typename T>
+        struct convertible_to
+        {};
+
+        /// \brief For matching a Grammar to a variable number of
+        /// sub-expressions.
+        ///
+        /// An expression type <tt>expr\<AT, listN\<A0,...An,U0,...Um\> \></tt>
+        /// matches a grammar <tt>expr\<BT, listM\<B0,...Bn,vararg\<V\> \> \></tt>
+        /// if \c BT is \c _ or \c AT, and if \c Ax matches \c Bx
+        /// for each \c x in <tt>[0,n)</tt> and if \c Ux matches \c V
+        /// for each \c x in <tt>[0,m)</tt>.
+        ///
+        /// For example:
+        ///
+        /// \code
+        /// // Match any function call expression, irregardless
+        /// // of the number of function arguments:
+        /// struct Function
+        ///   : function< vararg<_> >
+        /// {};
+        /// \endcode
+        ///
+        /// When used as a transform, <tt>vararg\<G\></tt> applies
+        /// <tt>G</tt>'s transform.
+        template<typename Grammar>
+        struct vararg
+          : Grammar
+        {
+            /// INTERNAL ONLY
+            typedef void proto_is_vararg_;
+        };
+
+        /// INTERNAL ONLY
+        ///
+        template<BOOST_PP_ENUM_PARAMS(BOOST_PROTO_MAX_LOGICAL_ARITY, typename G)>
+        struct is_callable<or_<BOOST_PP_ENUM_PARAMS(BOOST_PROTO_MAX_LOGICAL_ARITY, G)> >
+          : mpl::true_
+        {};
+
+        /// INTERNAL ONLY
+        ///
+        template<BOOST_PP_ENUM_PARAMS(BOOST_PROTO_MAX_LOGICAL_ARITY, typename G)>
+        struct is_callable<and_<BOOST_PP_ENUM_PARAMS(BOOST_PROTO_MAX_LOGICAL_ARITY, G)> >
+          : mpl::true_
+        {};
+
+        /// INTERNAL ONLY
+        ///
+        template<typename Grammar>
+        struct is_callable<not_<Grammar> >
+          : mpl::true_
+        {};
+
+        /// INTERNAL ONLY
+        ///
+        template<typename If, typename Then, typename Else>
+        struct is_callable<if_<If, Then, Else> >
+          : mpl::true_
+        {};
+
+        /// INTERNAL ONLY
+        ///
+        template<typename Grammar>
+        struct is_callable<vararg<Grammar> >
+          : mpl::true_
+        {};
+
+        /// INTERNAL ONLY
+        ///
+        template<typename Cases>
+        struct is_callable<switch_<Cases> >
+          : mpl::true_
+        {};
+
+    }}
+
+    #if defined(_MSC_VER) && (_MSC_VER >= 1020)
+    # pragma warning(pop)
+    #endif
+
+    #endif
+
+#elif BOOST_PP_ITERATION_FLAGS() == 1
+
+    #define N BOOST_PP_ITERATION()
+
+            // Assymetry here between the handling of and_N and or_N because
+            // and_N is used by lambda_matches up to BOOST_PROTO_MAX_ARITY,
+            // regardless of how low BOOST_PROTO_MAX_LOGICAL_ARITY is.
+            template<bool B, BOOST_PP_ENUM_PARAMS(BOOST_PP_DEC(N), typename P)>
+            struct BOOST_PP_CAT(and_, N)
+            #if 2 == N
+              : mpl::bool_<P0::value>
+            {};
+            #else
+              : BOOST_PP_CAT(and_, BOOST_PP_DEC(N))<
+                    P0::value BOOST_PP_COMMA_IF(BOOST_PP_SUB(N,2))
+                    BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PP_DEC(N), P)
+                >
+            {};
+            #endif
+
+            template<BOOST_PP_ENUM_PARAMS(BOOST_PP_DEC(N), typename P)>
+            struct BOOST_PP_CAT(and_, N)<false, BOOST_PP_ENUM_PARAMS(BOOST_PP_DEC(N), P)>
+              : mpl::false_
+            {};
+
+        #if N <= BOOST_PROTO_MAX_LOGICAL_ARITY
+            template<BOOST_PP_ENUM_PARAMS(N, typename G), typename Expr, typename State, typename Data>
+            struct _and_impl<proto::and_<BOOST_PP_ENUM_PARAMS(N, G)>, Expr, State, Data>
+              : proto::transform_impl<Expr, State, Data>
+            {
+                #define M0(Z, N, DATA)                                                            \
+                typedef                                                                           \
+                    typename proto::when<proto::_, BOOST_PP_CAT(G, N)>                            \
+                        ::template impl<Expr, State, Data>                                        \
+                BOOST_PP_CAT(Gimpl, N);                                                           \
+                /**/
+                BOOST_PP_REPEAT(N, M0, ~)
+                #undef M0
+
+                typedef typename BOOST_PP_CAT(Gimpl, BOOST_PP_DEC(N))::result_type result_type;
+
+                result_type operator()(
+                    typename _and_impl::expr_param e
+                  , typename _and_impl::state_param s
+                  , typename _and_impl::data_param d
+                ) const
+                {
+                    // Fix: jfalcou - 12/29/2010
+                    // Avoid the use of comma operator here so as not to find Proto's
+                    // by accident.
+                    // expands to G0()(e,s,d); G1()(e,s,d); ... G{N-1}()(e,s,d);
+                    #define M0(Z,N,DATA) BOOST_PP_CAT(Gimpl,N)()(e,s,d);
+                    BOOST_PP_REPEAT(BOOST_PP_DEC(N),M0,~)
+                    return BOOST_PP_CAT(Gimpl,BOOST_PP_DEC(N))()(e,s,d);
+                    #undef M0
+                }
+            };
+
+            template<bool B, typename Expr, typename BasicExpr, BOOST_PP_ENUM_PARAMS(N, typename G)>
+            struct BOOST_PP_CAT(or_, N)
+            #if 2 == N
+              : mpl::bool_<matches_<Expr, BasicExpr, typename G1::proto_grammar>::value>
+            {
+                typedef G1 which;
+            };
+            #else
+              : BOOST_PP_CAT(or_, BOOST_PP_DEC(N))<
+                    matches_<Expr, BasicExpr, typename G1::proto_grammar>::value
+                  , Expr, BasicExpr, BOOST_PP_ENUM_SHIFTED_PARAMS(N, G)
+                >
+            {};
+            #endif
+
+            template<typename Expr, typename BasicExpr BOOST_PP_ENUM_TRAILING_PARAMS(N, typename G)>
+            struct BOOST_PP_CAT(or_, N)<true, Expr, BasicExpr, BOOST_PP_ENUM_PARAMS(N, G)>
+              : mpl::true_
+            {
+                typedef G0 which;
+            };
+
+            // handle proto::or_
+            template<typename Expr, typename BasicExpr BOOST_PP_ENUM_TRAILING_PARAMS(N, typename G)>
+            struct matches_<Expr, BasicExpr, proto::or_<BOOST_PP_ENUM_PARAMS(N, G)> >
+              : BOOST_PP_CAT(or_, N)<
+                    matches_<Expr, BasicExpr, typename G0::proto_grammar>::value,
+                    Expr, BasicExpr BOOST_PP_ENUM_TRAILING_PARAMS(N, G)
+                >
+            {};
+
+            // handle proto::and_
+            template<typename Expr, typename BasicExpr, BOOST_PP_ENUM_PARAMS(N, typename G)>
+            struct matches_<Expr, BasicExpr, proto::and_<BOOST_PP_ENUM_PARAMS(N, G)> >
+              : detail::BOOST_PP_CAT(and_, N)<
+                    BOOST_PROTO_DEFINE_MATCHES(~, 0, ~)::value,
+                    BOOST_PP_ENUM_SHIFTED(N, BOOST_PROTO_DEFINE_MATCHES, ~)
+                >
+            {};
+        #endif
+
+    #undef N
+
+#elif BOOST_PP_ITERATION_FLAGS() == 2
+
+    #define N BOOST_PP_ITERATION()
+
+            template<typename Args, typename Back, long To>
+            struct vararg_matches_impl<Args, Back, N, To>
+              : and_2<
+                    matches_<
+                        typename detail::expr_traits<typename Args::BOOST_PP_CAT(child, BOOST_PP_DEC(N))>::value_type::proto_derived_expr
+                      , typename detail::expr_traits<typename Args::BOOST_PP_CAT(child, BOOST_PP_DEC(N))>::value_type::proto_grammar
+                      , Back
+                    >::value
+                  , vararg_matches_impl<Args, Back, N + 1, To>
+                >
+            {};
+
+            template<typename Args, typename Back>
+            struct vararg_matches_impl<Args, Back, N, N>
+              : matches_<
+                    typename detail::expr_traits<typename Args::BOOST_PP_CAT(child, BOOST_PP_DEC(N))>::value_type::proto_derived_expr
+                  , typename detail::expr_traits<typename Args::BOOST_PP_CAT(child, BOOST_PP_DEC(N))>::value_type::proto_grammar
+                  , Back
+                >
+            {};
+
+            template<
+                template<BOOST_PP_ENUM_PARAMS(N, typename BOOST_PP_INTERCEPT)> class T
+                BOOST_PP_ENUM_TRAILING_PARAMS(N, typename Expr)
+                BOOST_PP_ENUM_TRAILING_PARAMS(N, typename Grammar)
+            >
+            struct lambda_matches<
+                T<BOOST_PP_ENUM_PARAMS(N, Expr)>
+              , T<BOOST_PP_ENUM_PARAMS(N, Grammar)>
+                BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(N)
+            >
+              : BOOST_PP_CAT(and_, N)<
+                    BOOST_PROTO_DEFINE_LAMBDA_MATCHES(~, 0, ~)::value,
+                    BOOST_PP_ENUM_SHIFTED(N, BOOST_PROTO_DEFINE_LAMBDA_MATCHES, ~)
+                >
+            {};
+
+            template<typename Expr, typename Tag, typename Args1, typename Args2>
+            struct matches_< Expr, proto::basic_expr<Tag, Args1, N>, proto::basic_expr<Tag, Args2, N> >
+              : BOOST_PP_CAT(and_, N)<
+                    BOOST_PROTO_MATCHES_N_FUN(~, 0, ~)::value,
+                    BOOST_PP_ENUM_SHIFTED(N, BOOST_PROTO_MATCHES_N_FUN, ~)
+                >
+            {};
+
+            template<typename Expr, typename Tag, typename Args1, typename Args2>
+            struct matches_< Expr, proto::basic_expr<Tag, Args1, N>, proto::basic_expr<proto::_, Args2, N> >
+              : BOOST_PP_CAT(and_, N)<
+                    BOOST_PROTO_MATCHES_N_FUN(~, 0, ~)::value,
+                    BOOST_PP_ENUM_SHIFTED(N, BOOST_PROTO_MATCHES_N_FUN, ~)
+                >
+            {};
+
+    #undef N
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/proto/operators.hpp b/3rdParty/Boost/src/boost/proto/operators.hpp
new file mode 100644
index 0000000..17d6c49
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/operators.hpp
@@ -0,0 +1,289 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file operators.hpp
+/// Contains all the overloaded operators that make it possible to build
+/// Proto expression trees.
+//
+//  Copyright 2008 Eric Niebler. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROTO_OPERATORS_HPP_EAN_04_01_2005
+#define BOOST_PROTO_OPERATORS_HPP_EAN_04_01_2005
+
+#include <boost/preprocessor/punctuation/comma.hpp>
+#include <boost/mpl/logical.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/proto/proto_fwd.hpp>
+#include <boost/proto/tags.hpp>
+#include <boost/proto/domain.hpp>
+#include <boost/proto/matches.hpp>
+#include <boost/proto/generate.hpp>
+#include <boost/proto/make_expr.hpp>
+
+namespace boost { namespace proto
+{
+    namespace detail
+    {
+        template<typename MakeExpr, typename Grammar>
+        struct lazy_matches
+          : proto::matches<typename MakeExpr::type, Grammar>
+        {};
+
+        template<typename Domain, typename Grammar, typename Trait, typename Tag, typename Arg>
+        struct enable_unary
+          : boost::lazy_enable_if_c<
+                boost::mpl::and_<
+                    Trait
+                  , lazy_matches<result_of::make_expr<Tag, default_domain, Arg &>, Grammar>
+                >::value
+              , result_of::make_expr<Tag, Domain, Arg &>
+            >
+        {};
+
+        template<typename Domain, typename Trait, typename Tag, typename Arg>
+        struct enable_unary<Domain, proto::_, Trait, Tag, Arg>
+          : boost::lazy_enable_if_c<
+                Trait::value
+              , result_of::make_expr<Tag, Domain, Arg &>
+            >
+        {};
+
+        template<typename Trait, typename Tag, typename Arg>
+        struct enable_unary<deduce_domain, not_a_grammar, Trait, Tag, Arg>
+          : enable_unary<
+                typename domain_of<Arg>::type
+              , typename domain_of<Arg>::type::proto_grammar
+              , Trait
+              , Tag
+              , Arg
+            >
+        {};
+
+        template<typename Domain, typename Grammar, typename Trait, typename Tag, typename Left, typename Right>
+        struct enable_binary
+          : boost::lazy_enable_if_c<
+                boost::mpl::and_<
+                    Trait
+                  , lazy_matches<result_of::make_expr<Tag, default_domain, Left &, Right &>, Grammar>
+                >::value
+              , result_of::make_expr<Tag, Domain, Left &, Right &>
+            >
+        {};
+
+        template<typename Domain, typename Trait, typename Tag, typename Left, typename Right>
+        struct enable_binary<Domain, proto::_, Trait, Tag, Left, Right>
+          : boost::lazy_enable_if_c<
+                Trait::value
+              , result_of::make_expr<Tag, Domain, Left &, Right &>
+            >
+        {};
+
+        template<typename Trait, typename Tag, typename Left, typename Right>
+        struct enable_binary<deduce_domain, not_a_grammar, Trait, Tag, Left, Right>
+          : enable_binary<
+                typename deduce_domain2<Left, Right>::type
+              , typename deduce_domain2<Left, Right>::type::proto_grammar
+              , Trait
+              , Tag
+              , Left
+              , Right
+            >
+        {};
+
+    } // detail
+
+#define BOOST_PROTO_UNARY_OP_IS_POSTFIX_0
+#define BOOST_PROTO_UNARY_OP_IS_POSTFIX_1 , int
+
+#define BOOST_PROTO_DEFINE_UNARY_OPERATOR(OP, TAG, TRAIT, DOMAIN, POST)                             \
+    template<typename Arg>                                                                          \
+    typename boost::proto::detail::enable_unary<                                                    \
+        DOMAIN                                                                                      \
+      , DOMAIN::proto_grammar                                                                       \
+      , BOOST_PROTO_APPLY_UNARY_(TRAIT, Arg)                                                        \
+      , TAG                                                                                         \
+      , Arg                                                                                         \
+    >::type const                                                                                   \
+    operator OP(Arg &arg BOOST_PROTO_UNARY_OP_IS_POSTFIX_ ## POST)                                  \
+    {                                                                                               \
+        return boost::proto::detail::make_expr_<TAG, DOMAIN, Arg &>()(arg);                         \
+    }                                                                                               \
+                                                                                                    \
+    template<typename Arg>                                                                          \
+    typename boost::proto::detail::enable_unary<                                                    \
+        DOMAIN                                                                                      \
+      , DOMAIN::proto_grammar                                                                       \
+      , BOOST_PROTO_APPLY_UNARY_(TRAIT, Arg)                                                        \
+      , TAG                                                                                         \
+      , Arg const                                                                                   \
+    >::type const                                                                                   \
+    operator OP(Arg const &arg BOOST_PROTO_UNARY_OP_IS_POSTFIX_ ## POST)                            \
+    {                                                                                               \
+        return boost::proto::detail::make_expr_<TAG, DOMAIN, Arg const &>()(arg);                   \
+    }                                                                                               \
+    /**/
+
+#define BOOST_PROTO_DEFINE_BINARY_OPERATOR(OP, TAG, TRAIT, DOMAIN)                                  \
+    template<typename Left, typename Right>                                                         \
+    typename boost::proto::detail::enable_binary<                                                   \
+        DOMAIN                                                                                      \
+      , DOMAIN::proto_grammar                                                                       \
+      , BOOST_PROTO_APPLY_BINARY_(TRAIT, Left, Right)                                               \
+      , TAG                                                                                         \
+      , Left                                                                                        \
+      , Right                                                                                       \
+    >::type const                                                                                   \
+    operator OP(Left &left, Right &right)                                                           \
+    {                                                                                               \
+        return boost::proto::detail::make_expr_<TAG, DOMAIN, Left &, Right &>()(left, right);       \
+    }                                                                                               \
+                                                                                                    \
+    template<typename Left, typename Right>                                                         \
+    typename boost::proto::detail::enable_binary<                                                   \
+        DOMAIN                                                                                      \
+      , DOMAIN::proto_grammar                                                                       \
+      , BOOST_PROTO_APPLY_BINARY_(TRAIT, Left, Right)                                               \
+      , TAG                                                                                         \
+      , Left                                                                                        \
+      , Right const                                                                                 \
+    >::type const                                                                                   \
+    operator OP(Left &left, Right const &right)                                                     \
+    {                                                                                               \
+        return boost::proto::detail::make_expr_<TAG, DOMAIN, Left &, Right const &>()(left, right); \
+    }                                                                                               \
+                                                                                                    \
+    template<typename Left, typename Right>                                                         \
+    typename boost::proto::detail::enable_binary<                                                   \
+        DOMAIN                                                                                      \
+      , DOMAIN::proto_grammar                                                                       \
+      , BOOST_PROTO_APPLY_BINARY_(TRAIT, Left, Right)                                               \
+      , TAG                                                                                         \
+      , Left const                                                                                  \
+      , Right                                                                                       \
+    >::type const                                                                                   \
+    operator OP(Left const &left, Right &right)                                                     \
+    {                                                                                               \
+        return boost::proto::detail::make_expr_<TAG, DOMAIN, Left const &, Right &>()(left, right); \
+    }                                                                                               \
+                                                                                                    \
+    template<typename Left, typename Right>                                                         \
+    typename boost::proto::detail::enable_binary<                                                   \
+        DOMAIN                                                                                      \
+      , DOMAIN::proto_grammar                                                                       \
+      , BOOST_PROTO_APPLY_BINARY_(TRAIT, Left, Right)                                               \
+      , TAG                                                                                         \
+      , Left const                                                                                  \
+      , Right const                                                                                 \
+    >::type const                                                                                   \
+    operator OP(Left const &left, Right const &right)                                               \
+    {                                                                                               \
+        return boost::proto::detail::make_expr_<TAG, DOMAIN, Left const &, Right const &>()(left, right);\
+    }                                                                                               \
+    /**/
+
+#define BOOST_PROTO_DEFINE_OPERATORS(TRAIT, DOMAIN)                                                 \
+    BOOST_PROTO_DEFINE_UNARY_OPERATOR(+, boost::proto::tag::unary_plus, TRAIT, DOMAIN, 0)           \
+    BOOST_PROTO_DEFINE_UNARY_OPERATOR(-, boost::proto::tag::negate, TRAIT, DOMAIN, 0)               \
+    BOOST_PROTO_DEFINE_UNARY_OPERATOR(*, boost::proto::tag::dereference, TRAIT, DOMAIN, 0)          \
+    BOOST_PROTO_DEFINE_UNARY_OPERATOR(~, boost::proto::tag::complement, TRAIT, DOMAIN, 0)           \
+    BOOST_PROTO_DEFINE_UNARY_OPERATOR(&, boost::proto::tag::address_of, TRAIT, DOMAIN, 0)           \
+    BOOST_PROTO_DEFINE_UNARY_OPERATOR(!, boost::proto::tag::logical_not, TRAIT, DOMAIN, 0)          \
+    BOOST_PROTO_DEFINE_UNARY_OPERATOR(++, boost::proto::tag::pre_inc, TRAIT, DOMAIN, 0)             \
+    BOOST_PROTO_DEFINE_UNARY_OPERATOR(--, boost::proto::tag::pre_dec, TRAIT, DOMAIN, 0)             \
+    BOOST_PROTO_DEFINE_UNARY_OPERATOR(++, boost::proto::tag::post_inc, TRAIT, DOMAIN, 1)            \
+    BOOST_PROTO_DEFINE_UNARY_OPERATOR(--, boost::proto::tag::post_dec, TRAIT, DOMAIN, 1)            \
+    BOOST_PROTO_DEFINE_BINARY_OPERATOR(<<, boost::proto::tag::shift_left, TRAIT, DOMAIN)            \
+    BOOST_PROTO_DEFINE_BINARY_OPERATOR(>>, boost::proto::tag::shift_right, TRAIT, DOMAIN)           \
+    BOOST_PROTO_DEFINE_BINARY_OPERATOR(*, boost::proto::tag::multiplies, TRAIT, DOMAIN)             \
+    BOOST_PROTO_DEFINE_BINARY_OPERATOR(/, boost::proto::tag::divides, TRAIT, DOMAIN)                \
+    BOOST_PROTO_DEFINE_BINARY_OPERATOR(%, boost::proto::tag::modulus, TRAIT, DOMAIN)                \
+    BOOST_PROTO_DEFINE_BINARY_OPERATOR(+, boost::proto::tag::plus, TRAIT, DOMAIN)                   \
+    BOOST_PROTO_DEFINE_BINARY_OPERATOR(-, boost::proto::tag::minus, TRAIT, DOMAIN)                  \
+    BOOST_PROTO_DEFINE_BINARY_OPERATOR(<, boost::proto::tag::less, TRAIT, DOMAIN)                   \
+    BOOST_PROTO_DEFINE_BINARY_OPERATOR(>, boost::proto::tag::greater, TRAIT, DOMAIN)                \
+    BOOST_PROTO_DEFINE_BINARY_OPERATOR(<=, boost::proto::tag::less_equal, TRAIT, DOMAIN)            \
+    BOOST_PROTO_DEFINE_BINARY_OPERATOR(>=, boost::proto::tag::greater_equal, TRAIT, DOMAIN)         \
+    BOOST_PROTO_DEFINE_BINARY_OPERATOR(==, boost::proto::tag::equal_to, TRAIT, DOMAIN)              \
+    BOOST_PROTO_DEFINE_BINARY_OPERATOR(!=, boost::proto::tag::not_equal_to, TRAIT, DOMAIN)          \
+    BOOST_PROTO_DEFINE_BINARY_OPERATOR(||, boost::proto::tag::logical_or, TRAIT, DOMAIN)            \
+    BOOST_PROTO_DEFINE_BINARY_OPERATOR(&&, boost::proto::tag::logical_and, TRAIT, DOMAIN)           \
+    BOOST_PROTO_DEFINE_BINARY_OPERATOR(&, boost::proto::tag::bitwise_and, TRAIT, DOMAIN)            \
+    BOOST_PROTO_DEFINE_BINARY_OPERATOR(|, boost::proto::tag::bitwise_or, TRAIT, DOMAIN)             \
+    BOOST_PROTO_DEFINE_BINARY_OPERATOR(^, boost::proto::tag::bitwise_xor, TRAIT, DOMAIN)            \
+    BOOST_PROTO_DEFINE_BINARY_OPERATOR(BOOST_PP_COMMA(), boost::proto::tag::comma, TRAIT, DOMAIN)   \
+    BOOST_PROTO_DEFINE_BINARY_OPERATOR(->*, boost::proto::tag::mem_ptr, TRAIT, DOMAIN)              \
+    BOOST_PROTO_DEFINE_BINARY_OPERATOR(<<=, boost::proto::tag::shift_left_assign, TRAIT, DOMAIN)    \
+    BOOST_PROTO_DEFINE_BINARY_OPERATOR(>>=, boost::proto::tag::shift_right_assign, TRAIT, DOMAIN)   \
+    BOOST_PROTO_DEFINE_BINARY_OPERATOR(*=, boost::proto::tag::multiplies_assign, TRAIT, DOMAIN)     \
+    BOOST_PROTO_DEFINE_BINARY_OPERATOR(/=, boost::proto::tag::divides_assign, TRAIT, DOMAIN)        \
+    BOOST_PROTO_DEFINE_BINARY_OPERATOR(%=, boost::proto::tag::modulus_assign, TRAIT, DOMAIN)        \
+    BOOST_PROTO_DEFINE_BINARY_OPERATOR(+=, boost::proto::tag::plus_assign, TRAIT, DOMAIN)           \
+    BOOST_PROTO_DEFINE_BINARY_OPERATOR(-=, boost::proto::tag::minus_assign, TRAIT, DOMAIN)          \
+    BOOST_PROTO_DEFINE_BINARY_OPERATOR(&=, boost::proto::tag::bitwise_and_assign, TRAIT, DOMAIN)    \
+    BOOST_PROTO_DEFINE_BINARY_OPERATOR(|=, boost::proto::tag::bitwise_or_assign, TRAIT, DOMAIN)     \
+    BOOST_PROTO_DEFINE_BINARY_OPERATOR(^=, boost::proto::tag::bitwise_xor_assign, TRAIT, DOMAIN)    \
+    /**/
+
+    // Extensions are a superset of Proto expressions
+    template<typename T>
+    struct is_extension
+      : is_expr<T>
+    {};
+
+    #define BOOST_PROTO_APPLY_UNARY_(TRAIT, ARG) TRAIT<ARG>
+    #define BOOST_PROTO_APPLY_BINARY_(TRAIT, LEFT, RIGHT) boost::mpl::or_<TRAIT<LEFT>, TRAIT<RIGHT> >
+
+    namespace exprns_
+    {
+        // This defines all of Proto's built-in free operator overloads
+        BOOST_PROTO_DEFINE_OPERATORS(is_extension, deduce_domain)
+
+        // if_else, for the non-overloadable ternary conditional operator ?:
+        template<typename A0, typename A1, typename A2>
+        typename result_of::make_expr<
+            tag::if_else_
+          , deduce_domain
+          , A0 const &
+          , A1 const &
+          , A2 const &
+        >::type const
+        if_else(A0 const &a0, A1 const &a1, A2 const &a2)
+        {
+            return proto::detail::make_expr_<
+                tag::if_else_
+              , deduce_domain
+              , A0 const &
+              , A1 const &
+              , A2 const &
+            >()(a0, a1, a2);
+        }
+    }
+
+    using exprns_::if_else;
+
+    #undef BOOST_PROTO_APPLY_UNARY_
+    #undef BOOST_PROTO_APPLY_BINARY_
+
+    // Redefine BOOST_PROTO_APPLY_UNARY_ and BOOST_PROTO_APPLY_BINARY_ so that end users
+    // can use BOOST_PROTO_DEFINE_OPERATORS to define Proto operator overloads that work
+    // with their own terminal types.
+
+    #define BOOST_PROTO_APPLY_UNARY_(TRAIT, ARG)                                                    \
+        boost::mpl::and_<TRAIT<ARG>, boost::mpl::not_<boost::proto::is_extension<ARG> > >           \
+        /**/
+
+    #define BOOST_PROTO_APPLY_BINARY_(TRAIT, LEFT, RIGHT)                                           \
+        boost::mpl::and_<                                                                           \
+            boost::mpl::or_<TRAIT<LEFT>, TRAIT<RIGHT> >                                             \
+          , boost::mpl::not_<                                                                       \
+                boost::mpl::or_<                                                                    \
+                    boost::proto::is_extension<LEFT>                                                \
+                  , boost::proto::is_extension<RIGHT>                                               \
+                >                                                                                   \
+            >                                                                                       \
+        >                                                                                           \
+        /**/
+
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/proto.hpp b/3rdParty/Boost/src/boost/proto/proto.hpp
new file mode 100644
index 0000000..ad2f1bb
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/proto.hpp
@@ -0,0 +1,18 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file proto.hpp
+/// Includes all of Proto.
+//
+//  Copyright 2008 Eric Niebler. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROTO_HPP_EAN_04_01_2005
+#define BOOST_PROTO_HPP_EAN_04_01_2005
+
+#include <boost/proto/core.hpp>
+#include <boost/proto/debug.hpp>
+#include <boost/proto/context.hpp>
+#include <boost/proto/transform.hpp>
+#include <boost/proto/functional.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/proto_fwd.hpp b/3rdParty/Boost/src/boost/proto/proto_fwd.hpp
new file mode 100644
index 0000000..f8d1f8f
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/proto_fwd.hpp
@@ -0,0 +1,759 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file proto_fwd.hpp
+/// Forward declarations of all of proto's public types and functions.
+//
+//  Copyright 2008 Eric Niebler. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROTO_FWD_HPP_EAN_04_01_2005
+#define BOOST_PROTO_FWD_HPP_EAN_04_01_2005
+
+#include <cstddef>
+#include <climits>
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/arithmetic/inc.hpp>
+#include <boost/preprocessor/punctuation/comma.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
+#include <boost/preprocessor/repetition/enum_trailing_binary_params.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/ref.hpp>
+#include <boost/mpl/long.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+
+#ifndef BOOST_PROTO_MAX_ARITY
+# define BOOST_PROTO_MAX_ARITY 5
+#endif
+
+#ifndef BOOST_PROTO_MAX_LOGICAL_ARITY
+# define BOOST_PROTO_MAX_LOGICAL_ARITY 8
+#endif
+
+#ifndef BOOST_PROTO_MAX_FUNCTION_CALL_ARITY
+# define BOOST_PROTO_MAX_FUNCTION_CALL_ARITY BOOST_PROTO_MAX_ARITY
+#endif
+
+#if BOOST_PROTO_MAX_ARITY < 3
+# error BOOST_PROTO_MAX_ARITY must be at least 3
+#endif
+
+#if BOOST_PROTO_MAX_FUNCTION_CALL_ARITY > BOOST_PROTO_MAX_ARITY
+# error BOOST_PROTO_MAX_FUNCTION_CALL_ARITY cannot be larger than BOOST_PROTO_MAX_ARITY
+#endif
+
+#ifndef BOOST_PROTO_BROKEN_CONST_OVERLOADS
+# if BOOST_WORKAROUND(__GNUC__, == 3) \
+  || BOOST_WORKAROUND(__EDG_VERSION__, BOOST_TESTED_AT(310))
+#  define BOOST_PROTO_BROKEN_CONST_OVERLOADS
+# endif
+#endif
+
+#ifndef BOOST_PROTO_BROKEN_CONST_QUALIFIED_FUNCTIONS
+# if BOOST_WORKAROUND(__GNUC__, == 3) \
+  || BOOST_WORKAROUND(__EDG_VERSION__, BOOST_TESTED_AT(310))
+#  define BOOST_PROTO_BROKEN_CONST_QUALIFIED_FUNCTIONS
+# endif
+#endif
+
+#ifdef BOOST_PROTO_BROKEN_CONST_OVERLOADS
+# include <boost/utility/enable_if.hpp>
+# include <boost/type_traits/is_const.hpp>
+# define BOOST_PROTO_DISABLE_IF_IS_CONST(T)\
+    , typename boost::disable_if_c<boost::is_const<T>::value, boost::proto::detail::undefined>::type * = 0
+#else
+# define BOOST_PROTO_DISABLE_IF_IS_CONST(T)
+#endif
+
+#ifdef BOOST_PROTO_BROKEN_CONST_QUALIFIED_FUNCTIONS
+# include <boost/utility/enable_if.hpp>
+# include <boost/type_traits/is_function.hpp>
+# define BOOST_PROTO_DISABLE_IF_IS_FUNCTION(T)\
+    , typename boost::disable_if_c<boost::is_function<T>::value, boost::proto::detail::undefined>::type * = 0
+#else
+# define BOOST_PROTO_DISABLE_IF_IS_FUNCTION(T)
+#endif
+
+#ifndef BOOST_PROTO_BROKEN_PTS
+# if BOOST_WORKAROUND(BOOST_MSVC, <= 1400)
+#  define BOOST_PROTO_BROKEN_PTS
+# endif
+#endif
+
+#ifdef BOOST_PROTO_USE_NORMAL_RESULT_OF
+# define BOOST_PROTO_RESULT_OF boost::result_of
+#else
+# define BOOST_PROTO_RESULT_OF boost::tr1_result_of
+#endif
+
+namespace boost { namespace proto
+{
+    namespace detail
+    {
+        typedef char yes_type;
+        typedef char (&no_type)[2];
+
+        struct dont_care;
+        struct undefined; // leave this undefined
+        struct not_a_valid_type;
+
+        struct private_type_
+        {
+            private_type_ operator ,(int) const;
+        };
+
+        template<typename T>
+        struct uncvref
+        {
+            typedef T type;
+        };
+
+        template<typename T>
+        struct uncvref<T const>
+        {
+            typedef T type;
+        };
+
+        template<typename T>
+        struct uncvref<T &>
+        {
+            typedef T type;
+        };
+
+        template<typename T>
+        struct uncvref<T const &>
+        {
+            typedef T type;
+        };
+
+        template<typename T, std::size_t N>
+        struct uncvref<T const[N]>
+        {
+            typedef T type[N];
+        };
+
+        template<typename T, std::size_t N>
+        struct uncvref<T (&)[N]>
+        {
+            typedef T type[N];
+        };
+
+        template<typename T, std::size_t N>
+        struct uncvref<T const (&)[N]>
+        {
+            typedef T type[N];
+        };
+
+        struct ignore
+        {
+            ignore()
+            {}
+
+            template<typename T>
+            ignore(T const &)
+            {}
+        };
+
+        /// INTERNAL ONLY
+        ///
+        #define BOOST_PROTO_UNCVREF(X)                                                              \
+            typename boost::proto::detail::uncvref<X>::type                                         \
+            /**/
+
+        struct _default;
+
+        struct not_a_domain;
+        struct not_a_grammar;
+        struct not_a_generator;
+    }
+
+    typedef detail::ignore const ignore;
+
+    namespace argsns_
+    {
+        template<typename Arg0>
+        struct term;
+
+        #define M0(Z, N, DATA)                                                                      \
+        template<BOOST_PP_ENUM_PARAMS_Z(Z, N, typename Arg)> struct BOOST_PP_CAT(list, N);          \
+        /**/
+        BOOST_PP_REPEAT_FROM_TO(1, BOOST_PP_INC(BOOST_PROTO_MAX_ARITY), M0, ~)
+        #undef M0
+    }
+
+    using namespace argsns_;
+
+    ///////////////////////////////////////////////////////////////////////////////
+    // Operator tags
+    namespace tag
+    {
+        struct terminal;
+        struct unary_plus;
+        struct negate;
+        struct dereference;
+        struct complement;
+        struct address_of;
+        struct logical_not;
+        struct pre_inc;
+        struct pre_dec;
+        struct post_inc;
+        struct post_dec;
+
+        struct shift_left;
+        struct shift_right;
+        struct multiplies;
+        struct divides;
+        struct modulus;
+        struct plus;
+        struct minus;
+        struct less;
+        struct greater;
+        struct less_equal;
+        struct greater_equal;
+        struct equal_to;
+        struct not_equal_to;
+        struct logical_or;
+        struct logical_and;
+        struct bitwise_and;
+        struct bitwise_or;
+        struct bitwise_xor;
+        struct comma;
+        struct mem_ptr;
+
+        struct assign;
+        struct shift_left_assign;
+        struct shift_right_assign;
+        struct multiplies_assign;
+        struct divides_assign;
+        struct modulus_assign;
+        struct plus_assign;
+        struct minus_assign;
+        struct bitwise_and_assign;
+        struct bitwise_or_assign;
+        struct bitwise_xor_assign;
+        struct subscript;
+        struct member;
+        struct if_else_;
+        struct function;
+
+        // Fusion tags
+        struct proto_expr;
+        struct proto_expr_iterator;
+        struct proto_flat_view;
+    }
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////
+    struct _;
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////
+    struct default_generator;
+
+    template<template<typename> class Extends>
+    struct generator;
+
+    template<template<typename> class Extends>
+    struct pod_generator;
+
+    struct by_value_generator;
+
+    template<typename First, typename Second>
+    struct compose_generators;
+
+    template<typename Generator, typename Void = void>
+    struct wants_basic_expr;
+
+    template<typename Generator>
+    struct use_basic_expr;
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////
+    namespace domainns_
+    {
+        typedef detail::not_a_domain no_super_domain;
+
+        template<
+            typename Generator  = default_generator
+          , typename Grammar    = proto::_
+          , typename Super      = no_super_domain
+        >
+        struct domain;
+
+        struct default_domain;
+
+        struct deduce_domain;
+
+        template<typename Domain, typename Tag, typename Args, bool WantsBasicExpr = wants_basic_expr<typename Domain::proto_generator>::value>
+        struct base_expr;
+    }
+
+    using namespace domainns_;
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////
+    namespace exprns_
+    {
+        template<typename Tag, typename Args, long Arity = Args::arity>
+        struct basic_expr;
+
+        template<typename Tag, typename Args, long Arity = Args::arity>
+        struct expr;
+
+        template<
+            typename Expr
+          , typename Derived
+          , typename Domain = default_domain
+          , long Arity = Expr::proto_arity_c
+        >
+        struct extends;
+
+        template<typename This, typename Fun, typename Domain>
+        struct virtual_member;
+        
+        struct is_proto_expr;
+    }
+    ////////////////////////////////////////////////////////////////////////////////////////////////
+
+    using exprns_::expr;
+    using exprns_::basic_expr;
+    using exprns_::extends;
+    using exprns_::is_proto_expr;
+
+    template<BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(BOOST_PROTO_MAX_LOGICAL_ARITY, typename G, void)>
+    struct or_;
+
+    template<BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(BOOST_PROTO_MAX_LOGICAL_ARITY, typename G, void)>
+    struct and_;
+
+    template<typename Grammar>
+    struct not_;
+
+    template<typename Condition, typename Then = _, typename Else = not_<_> >
+    struct if_;
+
+    template<typename Cases>
+    struct switch_;
+
+    template<typename T>
+    struct exact;
+
+    template<typename T>
+    struct convertible_to;
+
+    template<typename Grammar>
+    struct vararg;
+
+    // Boost bug https://svn.boost.org/trac/boost/ticket/4602
+    //int const N = INT_MAX;
+    int const N = (INT_MAX >> 10);
+
+    namespace context
+    {
+        struct null_context;
+
+        template<typename Expr, typename Context, long Arity = Expr::proto_arity_c>
+        struct null_eval;
+
+        struct default_context;
+
+        template<typename Expr, typename Context, typename Tag = typename Expr::proto_tag, long Arity = Expr::proto_arity_c>
+        struct default_eval;
+
+        template<typename Derived, typename DefaultCtx = default_context>
+        struct callable_context;
+
+        template<typename Expr, typename Context, long Arity = Expr::proto_arity_c>
+        struct callable_eval;
+    }
+
+    using context::null_context;
+    using context::null_eval;
+    using context::default_context;
+    using context::default_eval;
+    using context::callable_context;
+    using context::callable_eval;
+
+    namespace utility
+    {
+        template<typename T, typename Domain = default_domain>
+        struct literal;
+    }
+
+    using utility::literal;
+
+    namespace result_of
+    {
+        template<typename T, typename Domain = default_domain>
+        struct as_expr;
+
+        template<typename T, typename Domain = default_domain>
+        struct as_child;
+
+        template<typename Expr, typename N = mpl::long_<0> >
+        struct child;
+
+        template<typename Expr, long N>
+        struct child_c;
+
+        template<typename Expr>
+        struct left;
+
+        template<typename Expr>
+        struct right;
+
+        template<typename Expr>
+        struct deep_copy;
+
+        template<typename Expr, typename Context>
+        struct eval;
+
+        template<
+            typename Tag
+          , typename DomainOrA0
+            BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(
+                BOOST_PROTO_MAX_ARITY
+              , typename A
+              , = void BOOST_PP_INTERCEPT
+            )
+          , typename Void = void
+        >
+        struct make_expr;
+
+        template<typename Tag, typename DomainOrSequence, typename SequenceOrVoid = void, typename Void = void>
+        struct unpack_expr;
+
+    }
+
+    template<typename T, typename Void = void>
+    struct is_expr;
+
+    template<typename T, typename Void = void>
+    struct is_domain;
+
+    template<typename SubDomain, typename SuperDomain>
+    struct is_sub_domain_of;
+
+    template<typename Expr>
+    struct tag_of;
+
+    template<typename Expr>
+    struct arity_of;
+
+    template<typename T, typename Void = void>
+    struct domain_of;
+
+    template<typename Expr, typename Grammar>
+    struct matches;
+
+    // Generic expression metafunctions and
+    // grammar elements
+    template<typename Tag, typename Arg>
+    struct unary_expr;
+
+    template<typename Tag, typename Left, typename Right>
+    struct binary_expr;
+
+    template<typename Tag, BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(BOOST_PROTO_MAX_ARITY, typename A, void)>
+    struct nary_expr;
+
+    // Specific expression metafunctions and
+    // grammar elements, for convenience
+    template<typename T> struct terminal;
+    template<typename T> struct unary_plus;
+    template<typename T> struct negate;
+    template<typename T> struct dereference;
+    template<typename T> struct complement;
+    template<typename T> struct address_of;
+    template<typename T> struct logical_not;
+    template<typename T> struct pre_inc;
+    template<typename T> struct pre_dec;
+    template<typename T> struct post_inc;
+    template<typename T> struct post_dec;
+
+    template<typename T, typename U> struct shift_left;
+    template<typename T, typename U> struct shift_right;
+    template<typename T, typename U> struct multiplies;
+    template<typename T, typename U> struct divides;
+    template<typename T, typename U> struct modulus;
+    template<typename T, typename U> struct plus;
+    template<typename T, typename U> struct minus;
+    template<typename T, typename U> struct less;
+    template<typename T, typename U> struct greater;
+    template<typename T, typename U> struct less_equal;
+    template<typename T, typename U> struct greater_equal;
+    template<typename T, typename U> struct equal_to;
+    template<typename T, typename U> struct not_equal_to;
+    template<typename T, typename U> struct logical_or;
+    template<typename T, typename U> struct logical_and;
+    template<typename T, typename U> struct bitwise_and;
+    template<typename T, typename U> struct bitwise_or;
+    template<typename T, typename U> struct bitwise_xor;
+    template<typename T, typename U> struct comma;
+    template<typename T, typename U> struct mem_ptr;
+
+    template<typename T, typename U> struct assign;
+    template<typename T, typename U> struct shift_left_assign;
+    template<typename T, typename U> struct shift_right_assign;
+    template<typename T, typename U> struct multiplies_assign;
+    template<typename T, typename U> struct divides_assign;
+    template<typename T, typename U> struct modulus_assign;
+    template<typename T, typename U> struct plus_assign;
+    template<typename T, typename U> struct minus_assign;
+    template<typename T, typename U> struct bitwise_and_assign;
+    template<typename T, typename U> struct bitwise_or_assign;
+    template<typename T, typename U> struct bitwise_xor_assign;
+    template<typename T, typename U> struct subscript;
+    template<typename T, typename U> struct member;
+    template<typename T, typename U, typename V> struct if_else_;
+
+    template<BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(BOOST_PROTO_MAX_ARITY, typename A, void)>
+    struct function;
+
+    namespace functional
+    {
+        struct left;
+        struct right;
+        struct eval;
+        struct deep_copy;
+
+        template<typename Domain = default_domain>
+        struct as_expr;
+
+        template<typename Domain = default_domain>
+        struct as_child;
+
+        template<typename N = mpl::long_<0> >
+        struct child;
+
+        template<long N>
+        struct child_c;
+
+        template<typename Tag, typename Domain = deduce_domain>
+        struct make_expr;
+
+        template<typename Tag, typename Domain = deduce_domain>
+        struct unpack_expr;
+
+        typedef make_expr<tag::terminal>            make_terminal;
+        typedef make_expr<tag::unary_plus>          make_unary_plus;
+        typedef make_expr<tag::negate>              make_negate;
+        typedef make_expr<tag::dereference>         make_dereference;
+        typedef make_expr<tag::complement>          make_complement;
+        typedef make_expr<tag::address_of>          make_address_of;
+        typedef make_expr<tag::logical_not>         make_logical_not;
+        typedef make_expr<tag::pre_inc>             make_pre_inc;
+        typedef make_expr<tag::pre_dec>             make_pre_dec;
+        typedef make_expr<tag::post_inc>            make_post_inc;
+        typedef make_expr<tag::post_dec>            make_post_dec;
+        typedef make_expr<tag::shift_left>          make_shift_left;
+        typedef make_expr<tag::shift_right>         make_shift_right;
+        typedef make_expr<tag::multiplies>          make_multiplies;
+        typedef make_expr<tag::divides>             make_divides;
+        typedef make_expr<tag::modulus>             make_modulus;
+        typedef make_expr<tag::plus>                make_plus;
+        typedef make_expr<tag::minus>               make_minus;
+        typedef make_expr<tag::less>                make_less;
+        typedef make_expr<tag::greater>             make_greater;
+        typedef make_expr<tag::less_equal>          make_less_equal;
+        typedef make_expr<tag::greater_equal>       make_greater_equal;
+        typedef make_expr<tag::equal_to>            make_equal_to;
+        typedef make_expr<tag::not_equal_to>        make_not_equal_to;
+        typedef make_expr<tag::logical_or>          make_logical_or;
+        typedef make_expr<tag::logical_and>         make_logical_and;
+        typedef make_expr<tag::bitwise_and>         make_bitwise_and;
+        typedef make_expr<tag::bitwise_or>          make_bitwise_or;
+        typedef make_expr<tag::bitwise_xor>         make_bitwise_xor;
+        typedef make_expr<tag::comma>               make_comma;
+        typedef make_expr<tag::mem_ptr>             make_mem_ptr;
+        typedef make_expr<tag::assign>              make_assign;
+        typedef make_expr<tag::shift_left_assign>   make_shift_left_assign;
+        typedef make_expr<tag::shift_right_assign>  make_shift_right_assign;
+        typedef make_expr<tag::multiplies_assign>   make_multiplies_assign;
+        typedef make_expr<tag::divides_assign>      make_divides_assign;
+        typedef make_expr<tag::modulus_assign>      make_modulus_assign;
+        typedef make_expr<tag::plus_assign>         make_plus_assign;
+        typedef make_expr<tag::minus_assign>        make_minus_assign;
+        typedef make_expr<tag::bitwise_and_assign>  make_bitwise_and_assign;
+        typedef make_expr<tag::bitwise_or_assign>   make_bitwise_or_assign;
+        typedef make_expr<tag::bitwise_xor_assign>  make_bitwise_xor_assign;
+        typedef make_expr<tag::subscript>           make_subscript;
+        typedef make_expr<tag::if_else_>            make_if_else;
+        typedef make_expr<tag::function>            make_function;
+
+        struct flatten;
+        struct make_pair;
+        struct first;
+        struct second;
+        struct at;
+        struct pop_front;
+        struct push_front;
+        struct pop_back;
+        struct push_back;
+        struct reverse;
+    }
+
+    typedef functional::flatten     _flatten;
+    typedef functional::make_pair   _make_pair;
+    typedef functional::first       _first;
+    typedef functional::second      _second;
+    typedef functional::pop_front   _at;
+    typedef functional::pop_front   _pop_front;
+    typedef functional::push_front  _push_front;
+    typedef functional::pop_back    _pop_back;
+    typedef functional::push_back   _push_back;
+    typedef functional::reverse     _reverse;
+    typedef functional::eval        _eval;
+    struct _deep_copy;
+
+    typedef functional::make_expr<tag::terminal>           _make_terminal;
+    typedef functional::make_expr<tag::unary_plus>         _make_unary_plus;
+    typedef functional::make_expr<tag::negate>             _make_negate;
+    typedef functional::make_expr<tag::dereference>        _make_dereference;
+    typedef functional::make_expr<tag::complement>         _make_complement;
+    typedef functional::make_expr<tag::address_of>         _make_address_of;
+    typedef functional::make_expr<tag::logical_not>        _make_logical_not;
+    typedef functional::make_expr<tag::pre_inc>            _make_pre_inc;
+    typedef functional::make_expr<tag::pre_dec>            _make_pre_dec;
+    typedef functional::make_expr<tag::post_inc>           _make_post_inc;
+    typedef functional::make_expr<tag::post_dec>           _make_post_dec;
+    typedef functional::make_expr<tag::shift_left>         _make_shift_left;
+    typedef functional::make_expr<tag::shift_right>        _make_shift_right;
+    typedef functional::make_expr<tag::multiplies>         _make_multiplies;
+    typedef functional::make_expr<tag::divides>            _make_divides;
+    typedef functional::make_expr<tag::modulus>            _make_modulus;
+    typedef functional::make_expr<tag::plus>               _make_plus;
+    typedef functional::make_expr<tag::minus>              _make_minus;
+    typedef functional::make_expr<tag::less>               _make_less;
+    typedef functional::make_expr<tag::greater>            _make_greater;
+    typedef functional::make_expr<tag::less_equal>         _make_less_equal;
+    typedef functional::make_expr<tag::greater_equal>      _make_greater_equal;
+    typedef functional::make_expr<tag::equal_to>           _make_equal_to;
+    typedef functional::make_expr<tag::not_equal_to>       _make_not_equal_to;
+    typedef functional::make_expr<tag::logical_or>         _make_logical_or;
+    typedef functional::make_expr<tag::logical_and>        _make_logical_and;
+    typedef functional::make_expr<tag::bitwise_and>        _make_bitwise_and;
+    typedef functional::make_expr<tag::bitwise_or>         _make_bitwise_or;
+    typedef functional::make_expr<tag::bitwise_xor>        _make_bitwise_xor;
+    typedef functional::make_expr<tag::comma>              _make_comma;
+    typedef functional::make_expr<tag::mem_ptr>            _make_mem_ptr;
+    typedef functional::make_expr<tag::assign>             _make_assign;
+    typedef functional::make_expr<tag::shift_left_assign>  _make_shift_left_assign;
+    typedef functional::make_expr<tag::shift_right_assign> _make_shift_right_assign;
+    typedef functional::make_expr<tag::multiplies_assign>  _make_multiplies_assign;
+    typedef functional::make_expr<tag::divides_assign>     _make_divides_assign;
+    typedef functional::make_expr<tag::modulus_assign>     _make_modulus_assign;
+    typedef functional::make_expr<tag::plus_assign>        _make_plus_assign;
+    typedef functional::make_expr<tag::minus_assign>       _make_minus_assign;
+    typedef functional::make_expr<tag::bitwise_and_assign> _make_bitwise_and_assign;
+    typedef functional::make_expr<tag::bitwise_or_assign>  _make_bitwise_or_assign;
+    typedef functional::make_expr<tag::bitwise_xor_assign> _make_bitwise_xor_assign;
+    typedef functional::make_expr<tag::subscript>          _make_subscript;
+    typedef functional::make_expr<tag::if_else_>           _make_if_else;
+    typedef functional::make_expr<tag::function>           _make_function;
+
+    template<typename T>
+    struct is_callable;
+
+    template<typename T, typename Void = void>
+    struct is_transform;
+
+    template<typename T, typename Void = void>
+    struct is_aggregate;
+
+    #define BOOST_PROTO_UNEXPR() typedef int proto_is_expr_;
+    #define BOOST_PROTO_CALLABLE() typedef void proto_is_callable_;
+    #define BOOST_PROTO_AGGREGATE() typedef void proto_is_aggregate_;
+    #define BOOST_PROTO_USE_BASIC_EXPR() typedef void proto_use_basic_expr_;
+
+    struct callable
+    {
+        BOOST_PROTO_CALLABLE()
+    };
+
+    struct external_transform;
+
+    template<typename PrimitiveTransform = void, typename X = void>
+    struct transform;
+
+    template<typename Grammar, typename Fun = Grammar>
+    struct when;
+
+    template<typename Fun>
+    struct otherwise;
+
+    template<typename Fun>
+    struct call;
+
+    template<typename Fun>
+    struct make;
+
+    template<typename PrimitiveTransform>
+    struct protect;
+
+    template<typename T>
+    struct noinvoke;
+
+    template<typename Fun>
+    struct lazy;
+
+    template<typename Sequence, typename State, typename Fun>
+    struct fold;
+
+    template<typename Sequence, typename State, typename Fun>
+    struct reverse_fold;
+
+    // Q: can we replace fold_tree with fold<flatten(_), state, fun> ?
+    // A: once segmented Fusion works well.
+    template<typename Sequence, typename State, typename Fun>
+    struct fold_tree;
+
+    template<typename Sequence, typename State, typename Fun>
+    struct reverse_fold_tree;
+
+    template<typename Grammar>
+    struct pass_through;
+
+    template<typename Grammar = detail::_default>
+    struct _default;
+
+    struct _expr;
+    struct _state;
+    struct _data;
+
+    struct _value;
+
+    struct _void;
+
+    template<int I>
+    struct _child_c;
+
+    typedef _child_c<0> _child0;
+    typedef _child_c<1> _child1;
+    typedef _child0     _child;
+    typedef _child0     _left;
+    typedef _child1     _right;
+
+    // _child2, _child3, _child4, ...
+    #define M0(Z, N, DATA) typedef _child_c<N> BOOST_PP_CAT(_child, N);
+    BOOST_PP_REPEAT_FROM_TO(
+        2
+      , BOOST_PP_DEC(BOOST_PROTO_MAX_ARITY)
+      , M0
+      , ~
+    )
+    #undef M0
+
+    struct _byref;
+    struct _byval;
+
+    template<typename T>
+    struct is_extension;
+
+    //namespace exops
+    //{}
+
+    namespace exops = exprns_;
+
+}} // namespace boost::proto
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/repeat.hpp b/3rdParty/Boost/src/boost/proto/repeat.hpp
new file mode 100644
index 0000000..5624be2
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/repeat.hpp
@@ -0,0 +1,310 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file repeat.hpp
+/// Contains macros to ease the generation of repetitious code constructs
+//
+//  Copyright 2008 Eric Niebler. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROTO_REPEAT_HPP_EAN_11_24_2008
+#define BOOST_PROTO_REPEAT_HPP_EAN_11_24_2008
+
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/facilities/intercept.hpp>
+#include <boost/preprocessor/repetition/enum.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/iteration/local.hpp>
+#include <boost/preprocessor/tuple/elem.hpp>
+#include <boost/proto/proto_fwd.hpp> // for BOOST_PROTO_MAX_ARITY
+
+////////////////////////////////////////////
+/// INTERNAL ONLY
+#define BOOST_PROTO_ref_a_aux(Z, N, DATA)\
+  boost::ref(BOOST_PP_CAT(proto_a, N))
+
+/// \brief Generates a sequence like <tt>typename A0, typename A1, ...</tt>
+///
+#define BOOST_PROTO_typename_A(N)\
+  BOOST_PP_ENUM_PARAMS(N, typename proto_A)
+
+/// \brief Generates a sequence like <tt>A0 const &, A1 const &, ...</tt>
+///
+#define BOOST_PROTO_A_const_ref(N)\
+  BOOST_PP_ENUM_BINARY_PARAMS(N, proto_A, const & BOOST_PP_INTERCEPT)
+
+/// \brief Generates a sequence like <tt>A0 &, A1 &, ...</tt>
+///
+#define BOOST_PROTO_A_ref(N)\
+  BOOST_PP_ENUM_BINARY_PARAMS(N, proto_A, & BOOST_PP_INTERCEPT)
+
+/// \brief Generates a sequence like <tt>A0, A1, ...</tt>
+///
+#define BOOST_PROTO_A(N)\
+  BOOST_PP_ENUM_PARAMS(N, proto_A)
+
+/// \brief Generates a sequence like <tt>A0 const, A1 const, ...</tt>
+///
+#define BOOST_PROTO_A_const(N)\
+  BOOST_PP_ENUM_PARAMS(N, const proto_A)
+
+/// \brief Generates a sequence like <tt>A0 const &a0, A1 const &a0, ...</tt>
+///
+#define BOOST_PROTO_A_const_ref_a(N)\
+  BOOST_PP_ENUM_BINARY_PARAMS(N, proto_A, const &proto_a)
+
+/// \brief Generates a sequence like <tt>A0 &a0, A1 &a0, ...</tt>
+///
+#define BOOST_PROTO_A_ref_a(N)\
+  BOOST_PP_ENUM_BINARY_PARAMS(N, proto_A, &proto_a)
+
+/// \brief Generates a sequence like <tt>boost::ref(a0), boost::ref(a1), ...</tt>
+///
+#define BOOST_PROTO_ref_a(N)\
+  BOOST_PP_ENUM(N, BOOST_PROTO_ref_a_aux, ~)
+
+/// \brief Generates a sequence like <tt>a0, a1, ...</tt>
+///
+#define BOOST_PROTO_a(N)\
+  BOOST_PP_ENUM_PARAMS(N, proto_a)
+
+////////////////////////////////////////////
+/// INTERNAL ONLY
+#define BOOST_PROTO_invoke(Z, N, DATA)\
+  BOOST_PP_TUPLE_ELEM(5,0,DATA)(N, BOOST_PP_TUPLE_ELEM(5,1,DATA), BOOST_PP_TUPLE_ELEM(5,2,DATA), BOOST_PP_TUPLE_ELEM(5,3,DATA), BOOST_PP_TUPLE_ELEM(5,4,DATA))
+
+/// \brief Repeatedly invoke the specified macro.
+///
+/// BOOST_PROTO_REPEAT_FROM_TO_EX() is used generate the kind of repetitive code that is typical
+/// of DSELs built with Proto. BOOST_PROTO_REPEAT_FROM_TO_EX(FROM, TO, MACRO, typename_A, A, A_a, a)  is equivalent to:
+///
+/// \code
+/// MACRO(FROM, typename_A, A, A_a, a)
+/// MACRO(FROM+1, typename_A, A, A_a, a)
+/// ...
+/// MACRO(TO-1, typename_A, A, A_a, a)
+/// \endcode
+#define BOOST_PROTO_REPEAT_FROM_TO_EX(FROM, TO, MACRO, typename_A, A, A_a, a)\
+  BOOST_PP_REPEAT_FROM_TO(FROM, TO, BOOST_PROTO_invoke, (MACRO, typename_A, A, A_a, a))
+
+/// \brief Repeatedly invoke the specified macro.
+///
+/// BOOST_PROTO_REPEAT_FROM_TO() is used generate the kind of repetitive code that is typical
+/// of DSELs built with Proto. BOOST_PROTO_REPEAT_FROM_TO(FROM, TO, MACRO)  is equivalent to: 
+///
+/// \code
+/// MACRO(FROM, BOOST_PROTO_typename_A, BOOST_PROTO_A_const_ref, BOOST_PROTO_A_const_ref_a, BOOST_PROTO_ref_a)
+/// MACRO(FROM+1, BOOST_PROTO_typename_A, BOOST_PROTO_A_const_ref, BOOST_PROTO_A_const_ref_a, BOOST_PROTO_ref_a)
+/// ...
+/// MACRO(TO-1, BOOST_PROTO_typename_A, BOOST_PROTO_A_const_ref, BOOST_PROTO_A_const_ref_a, BOOST_PROTO_ref_a)
+/// \endcode
+///
+/// Example:
+///
+/** \code
+
+// Generate BOOST_PROTO_MAX_ARITY-1 overloads of the
+// following construct() function template.
+#define M0(N, typename_A, A_const_ref, A_const_ref_a, ref_a)      \ 
+template<typename T, typename_A(N)>                               \ 
+typename proto::result_of::make_expr<                             \ 
+    proto::tag::function                                          \ 
+  , construct_helper<T>                                           \ 
+  , A_const_ref(N)                                                \ 
+>::type const                                                     \ 
+construct(A_const_ref_a(N))                                       \ 
+{                                                                 \ 
+    return proto::make_expr<                                      \ 
+        proto::tag::function                                      \ 
+    >(                                                            \ 
+        construct_helper<T>()                                     \ 
+      , ref_a(N)                                                  \ 
+    );                                                            \ 
+}
+BOOST_PROTO_REPEAT_FROM_TO(1, BOOST_PROTO_MAX_ARITY, M0)
+#undef M0
+
+\endcode
+**/
+/// The above invocation of BOOST_PROTO_REPEAT_FROM_TO()  will generate
+/// the following code: 
+///
+/// \code
+/// template<typename T, typename A0>
+/// typename proto::result_of::make_expr<
+///     proto::tag::function
+///   , construct_helper<T>
+///  , A0 const &
+/// >::type const
+/// construct(A0 const & a0)
+/// {
+///     return proto::make_expr<
+///         proto::tag::function
+///     >(
+///         construct_helper<T>()
+///       , boost::ref(a0)
+///     );
+/// }
+/// 
+/// template<typename T, typename A0, typename A1>
+/// typename proto::result_of::make_expr<
+///     proto::tag::function
+///   , construct_helper<T>
+///   , A0 const &
+///   , A1 const &
+/// >::type const
+/// construct(A0 const & a0, A1 const & a1)
+/// {
+///     return proto::make_expr<
+///         proto::tag::function
+///     >(
+///         construct_helper<T>()
+///       , boost::ref(a0)
+///       , boost::ref(a1)
+///     );
+/// }
+/// 
+/// // ... and so on, up to BOOST_PROTO_MAX_ARITY-1 arguments ...
+/// \endcode
+#define BOOST_PROTO_REPEAT_FROM_TO(FROM, TO, MACRO)\
+  BOOST_PROTO_REPEAT_FROM_TO_EX(FROM, TO, MACRO, BOOST_PROTO_typename_A, BOOST_PROTO_A_const_ref, BOOST_PROTO_A_const_ref_a, BOOST_PROTO_ref_a)
+
+/// \brief Repeatedly invoke the specified macro.
+///
+/// BOOST_PROTO_REPEAT_EX() is used generate the kind of repetitive code that is typical
+/// of DSELs built with Proto. BOOST_PROTO_REPEAT_EX(MACRO, typename_A, A, A_a, a)  is equivalent to:
+///
+/// \code
+/// MACRO(1, typename_A, A, A_a, a)
+/// MACRO(2, typename_A, A, A_a, a)
+/// ...
+/// MACRO(BOOST_PROTO_MAX_ARITY, typename_A, A, A_a, a)
+/// \endcode
+#define BOOST_PROTO_REPEAT_EX(MACRO, typename_A, A, A_a, a)\
+  BOOST_PROTO_REPEAT_FROM_TO_EX(1, BOOST_PP_INC(BOOST_PROTO_MAX_ARITY), MACRO, BOOST_PROTO_typename_A, BOOST_PROTO_A_const_ref, BOOST_PROTO_A_const_ref_a, BOOST_PROTO_ref_a)
+
+/// \brief Repeatedly invoke the specified macro.
+///
+/// BOOST_PROTO_REPEAT() is used generate the kind of repetitive code that is typical
+/// of DSELs built with Proto. BOOST_PROTO_REPEAT(MACRO)  is equivalent to: 
+///
+/// \code
+/// MACRO(1, BOOST_PROTO_typename_A, BOOST_PROTO_A_const_ref, BOOST_PROTO_A_const_ref_a, BOOST_PROTO_ref_a)
+/// MACRO(2, BOOST_PROTO_typename_A, BOOST_PROTO_A_const_ref, BOOST_PROTO_A_const_ref_a, BOOST_PROTO_ref_a)
+/// ...
+/// MACRO(BOOST_PROTO_MAX_ARITY, BOOST_PROTO_typename_A, BOOST_PROTO_A_const_ref, BOOST_PROTO_A_const_ref_a, BOOST_PROTO_ref_a)
+/// \endcode
+#define BOOST_PROTO_REPEAT(MACRO)\
+  BOOST_PROTO_REPEAT_FROM_TO(1, BOOST_PP_INC(BOOST_PROTO_MAX_ARITY), MACRO)
+
+/// \brief Repeatedly invoke the specified macro.
+///
+/// BOOST_PROTO_LOCAL_ITERATE() is used generate the kind of repetitive code that is typical
+/// of DSELs built with Proto. This macro causes the user-defined macro BOOST_PROTO_LOCAL_MACRO to
+/// be expanded with values in the range specified by BOOST_PROTO_LOCAL_LIMITS.
+///
+/// Usage:
+///
+/// \code
+/// #include BOOST_PROTO_LOCAL_ITERATE()
+/// \endcode
+///
+/// Example:
+///
+/** \code
+
+// Generate BOOST_PROTO_MAX_ARITY-1 overloads of the
+// following construct() function template.
+#define BOOST_PROTO_LOCAL_MACRO(N, typename_A, A_const_ref,       \ 
+  A_const_ref_a, ref_a)                                           \ 
+template<typename T, typename_A(N)>                               \ 
+typename proto::result_of::make_expr<                             \ 
+    proto::tag::function                                          \ 
+  , construct_helper<T>                                           \ 
+  , A_const_ref(N)                                                \ 
+>::type const                                                     \ 
+construct(A_const_ref_a(N))                                       \ 
+{                                                                 \ 
+    return proto::make_expr<                                      \ 
+        proto::tag::function                                      \ 
+    >(                                                            \ 
+        construct_helper<T>()                                     \ 
+      , ref_a(N)                                                  \ 
+    );                                                            \ 
+}
+#define BOOST_PROTO_LOCAL_LIMITS (1, BOOST_PP_DEC(BOOST_PROTO_MAX_ARITY))
+#include BOOST_PROTO_LOCAL_ITERATE()
+
+\endcode
+**/
+/// The above inclusion of BOOST_PROTO_LOCAL_ITERATE() will generate
+/// the following code: 
+///
+/// \code
+/// template<typename T, typename A0>
+/// typename proto::result_of::make_expr<
+///     proto::tag::function
+///   , construct_helper<T>
+///  , A0 const &
+/// >::type const
+/// construct(A0 const & a0)
+/// {
+///     return proto::make_expr<
+///         proto::tag::function
+///     >(
+///         construct_helper<T>()
+///       , boost::ref(a0)
+///     );
+/// }
+/// 
+/// template<typename T, typename A0, typename A1>
+/// typename proto::result_of::make_expr<
+///     proto::tag::function
+///   , construct_helper<T>
+///   , A0 const &
+///   , A1 const &
+/// >::type const
+/// construct(A0 const & a0, A1 const & a1)
+/// {
+///     return proto::make_expr<
+///         proto::tag::function
+///     >(
+///         construct_helper<T>()
+///       , boost::ref(a0)
+///       , boost::ref(a1)
+///     );
+/// }
+/// 
+/// // ... and so on, up to BOOST_PROTO_MAX_ARITY-1 arguments ...
+/// \endcode
+///
+/// If BOOST_PROTO_LOCAL_LIMITS is not defined by the user, it defaults
+/// to (1, BOOST_PROTO_MAX_ARITY)
+///
+/// At each iteration, BOOST_PROTO_LOCAL_MACRO is invoked with the current
+/// iteration number and the following 4 macro parameters:
+///
+/// \li BOOST_PROTO_LOCAL_typename_A
+/// \li BOOST_PROTO_LOCAL_A
+/// \li BOOST_PROTO_LOCAL_A_a
+/// \li BOOST_PROTO_LOCAL_a
+///
+/// If these macros are not defined by the user, they default respectively to:
+///
+/// \li BOOST_PROTO_typename_A
+/// \li BOOST_PROTO_A_const_ref
+/// \li BOOST_PROTO_A_const_ref_a
+/// \li BOOST_PROTO_ref_a
+///
+/// After including BOOST_PROTO_LOCAL_ITERATE(), the following macros are
+/// automatically undefined:
+///
+/// \li BOOST_PROTO_LOCAL_MACRO
+/// \li BOOST_PROTO_LOCAL_LIMITS
+/// \li BOOST_PROTO_LOCAL_typename_A
+/// \li BOOST_PROTO_LOCAL_A
+/// \li BOOST_PROTO_LOCAL_A_a
+/// \li BOOST_PROTO_LOCAL_a
+#define BOOST_PROTO_LOCAL_ITERATE() <boost/proto/detail/local.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/tags.hpp b/3rdParty/Boost/src/boost/proto/tags.hpp
new file mode 100644
index 0000000..90d62eb
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/tags.hpp
@@ -0,0 +1,157 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file tags.hpp
+/// Contains the tags for all the overloadable operators in C++
+//
+//  Copyright 2008 Eric Niebler. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROTO_TAGS_HPP_EAN_04_01_2005
+#define BOOST_PROTO_TAGS_HPP_EAN_04_01_2005
+
+#include <boost/proto/proto_fwd.hpp>
+
+namespace boost { namespace proto { namespace tag
+{
+
+    /// Tag type for terminals; aka, leaves in the expression tree.
+    struct terminal {};
+
+    /// Tag type for the unary + operator.
+    struct unary_plus {};
+
+    /// Tag type for the unary - operator.
+    struct negate {};
+
+    /// Tag type for the unary * operator.
+    struct dereference {};
+
+    /// Tag type for the unary ~ operator.
+    struct complement {};
+
+    /// Tag type for the unary & operator.
+    struct address_of {};
+
+    /// Tag type for the unary ! operator.
+    struct logical_not {};
+
+    /// Tag type for the unary prefix ++ operator.
+    struct pre_inc {};
+
+    /// Tag type for the unary prefix -- operator.
+    struct pre_dec {};
+
+    /// Tag type for the unary postfix ++ operator.
+    struct post_inc {};
+
+    /// Tag type for the unary postfix -- operator.
+    struct post_dec {};
+
+    /// Tag type for the binary \<\< operator.
+    struct shift_left {};
+
+    /// Tag type for the binary \>\> operator.
+    struct shift_right {};
+
+    /// Tag type for the binary * operator.
+    struct multiplies {};
+
+    /// Tag type for the binary / operator.
+    struct divides {};
+
+    /// Tag type for the binary % operator.
+    struct modulus {};
+
+    /// Tag type for the binary + operator.
+    struct plus {};
+
+    /// Tag type for the binary - operator.
+    struct minus {};
+
+    /// Tag type for the binary \< operator.
+    struct less {};
+
+    /// Tag type for the binary \> operator.
+    struct greater {};
+
+    /// Tag type for the binary \<= operator.
+    struct less_equal {};
+
+    /// Tag type for the binary \>= operator.
+    struct greater_equal {};
+
+    /// Tag type for the binary == operator.
+    struct equal_to {};
+
+    /// Tag type for the binary != operator.
+    struct not_equal_to {};
+
+    /// Tag type for the binary || operator.
+    struct logical_or {};
+
+    /// Tag type for the binary && operator.
+    struct logical_and {};
+
+    /// Tag type for the binary & operator.
+    struct bitwise_and {};
+
+    /// Tag type for the binary | operator.
+    struct bitwise_or {};
+
+    /// Tag type for the binary ^ operator.
+    struct bitwise_xor {};
+
+    /// Tag type for the binary , operator.
+    struct comma {};
+
+    /// Tag type for the binary ->* operator.
+    struct mem_ptr {};
+
+    /// Tag type for the binary = operator.
+    struct assign {};
+
+    /// Tag type for the binary \<\<= operator.
+    struct shift_left_assign {};
+
+    /// Tag type for the binary \>\>= operator.
+    struct shift_right_assign {};
+
+    /// Tag type for the binary *= operator.
+    struct multiplies_assign {};
+
+    /// Tag type for the binary /= operator.
+    struct divides_assign {};
+
+    /// Tag type for the binary %= operator.
+    struct modulus_assign {};
+
+    /// Tag type for the binary += operator.
+    struct plus_assign {};
+
+    /// Tag type for the binary -= operator.
+    struct minus_assign {};
+
+    /// Tag type for the binary &= operator.
+    struct bitwise_and_assign {};
+
+    /// Tag type for the binary |= operator.
+    struct bitwise_or_assign {};
+
+    /// Tag type for the binary ^= operator.
+    struct bitwise_xor_assign {};
+
+    /// Tag type for the binary subscript operator.
+    struct subscript {};
+
+    /// Tag type for the binary virtual data members.
+    struct member {};
+
+    /// Tag type for the ternary ?: conditional operator.
+    struct if_else_ {};
+
+    /// Tag type for the n-ary function call operator.
+    struct function {};
+
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/traits.hpp b/3rdParty/Boost/src/boost/proto/traits.hpp
new file mode 100644
index 0000000..007df45
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/traits.hpp
@@ -0,0 +1,1405 @@
+#ifndef BOOST_PP_IS_ITERATING
+    ///////////////////////////////////////////////////////////////////////////////
+    /// \file traits.hpp
+    /// Contains definitions for child\<\>, child_c\<\>, left\<\>,
+    /// right\<\>, tag_of\<\>, and the helper functions child(), child_c(),
+    /// value(), left() and right().
+    //
+    //  Copyright 2008 Eric Niebler. Distributed under the Boost
+    //  Software License, Version 1.0. (See accompanying file
+    //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+    #ifndef BOOST_PROTO_ARG_TRAITS_HPP_EAN_04_01_2005
+    #define BOOST_PROTO_ARG_TRAITS_HPP_EAN_04_01_2005
+
+    #include <boost/config.hpp>
+    #include <boost/detail/workaround.hpp>
+    #include <boost/preprocessor/iteration/iterate.hpp>
+    #include <boost/preprocessor/repetition/enum.hpp>
+    #include <boost/preprocessor/repetition/enum_params.hpp>
+    #include <boost/preprocessor/repetition/enum_trailing_params.hpp>
+    #include <boost/preprocessor/repetition/repeat.hpp>
+    #include <boost/preprocessor/repetition/repeat_from_to.hpp>
+    #include <boost/preprocessor/facilities/intercept.hpp>
+    #include <boost/preprocessor/arithmetic/sub.hpp>
+    #include <boost/static_assert.hpp>
+    #include <boost/mpl/bool.hpp>
+    #include <boost/mpl/aux_/template_arity.hpp>
+    #include <boost/mpl/aux_/lambda_arity_param.hpp>
+    #include <boost/type_traits/is_pod.hpp>
+    #include <boost/type_traits/is_same.hpp>
+    #include <boost/type_traits/add_const.hpp>
+    #include <boost/proto/proto_fwd.hpp>
+    #include <boost/proto/args.hpp>
+    #include <boost/proto/domain.hpp>
+    #include <boost/proto/transform/pass_through.hpp>
+
+    #if BOOST_WORKAROUND( BOOST_MSVC, >= 1400 )
+        #pragma warning(push)
+        #pragma warning(disable: 4180) // warning C4180: qualifier applied to function type has no meaning; ignored
+    #endif
+
+    namespace boost { namespace proto
+    {
+        namespace detail
+        {
+            template<typename T, typename Void = void>
+            struct if_vararg
+            {};
+
+            template<typename T>
+            struct if_vararg<T, typename T::proto_is_vararg_>
+              : T
+            {};
+
+            template<typename T, typename Void = void>
+            struct is_callable2_
+              : mpl::false_
+            {};
+
+            template<typename T>
+            struct is_callable2_<T, typename T::proto_is_callable_>
+              : mpl::true_
+            {};
+
+            template<typename T BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(long Arity = mpl::aux::template_arity<T>::value)>
+            struct is_callable_
+              : is_callable2_<T>
+            {};
+
+        }
+
+        /// \brief Boolean metafunction which detects whether a type is
+        /// a callable function object type or not.
+        ///
+        /// <tt>is_callable\<\></tt> is used by the <tt>when\<\></tt> transform
+        /// to determine whether a function type <tt>R(A1,A2,...AN)</tt> is a
+        /// callable transform or an object transform. (The former are evaluated
+        /// using <tt>call\<\></tt> and the later with <tt>make\<\></tt>.) If
+        /// <tt>is_callable\<R\>::value</tt> is \c true, the function type is
+        /// a callable transform; otherwise, it is an object transform.
+        ///
+        /// Unless specialized for a type \c T, <tt>is_callable\<T\>::value</tt>
+        /// is computed as follows:
+        ///
+        /// \li If \c T is a template type <tt>X\<Y0,Y1,...YN\></tt>, where all \c Yx
+        /// are types for \c x in <tt>[0,N]</tt>, <tt>is_callable\<T\>::value</tt>
+        /// is <tt>is_same\<YN, proto::callable\>::value</tt>.
+        /// \li If \c T has a nested type \c proto_is_callable_ that is a typedef
+        /// for \c void, <tt>is_callable\<T\>::value</tt> is \c true. (Note: this is
+        /// the case for any type that derives from \c proto::callable.)
+        /// \li Otherwise, <tt>is_callable\<T\>::value</tt> is \c false.
+        template<typename T>
+        struct is_callable
+          : proto::detail::is_callable_<T>
+        {};
+
+        /// INTERNAL ONLY
+        ///
+        template<>
+        struct is_callable<proto::_>
+          : mpl::true_
+        {};
+
+        /// INTERNAL ONLY
+        ///
+        template<>
+        struct is_callable<proto::callable>
+          : mpl::false_
+        {};
+
+        /// INTERNAL ONLY
+        ///
+        template<typename PrimitiveTransform, typename X>
+        struct is_callable<proto::transform<PrimitiveTransform, X> >
+          : mpl::false_
+        {};
+
+        #if BOOST_WORKAROUND(__GNUC__, == 3) || (__GNUC__ == 4 && __GNUC_MINOR__ == 0)
+        // work around GCC bug
+        template<typename Tag, typename Args, long N>
+        struct is_callable<proto::expr<Tag, Args, N> >
+          : mpl::false_
+        {};
+
+        // work around GCC bug
+        template<typename Tag, typename Args, long N>
+        struct is_callable<proto::basic_expr<Tag, Args, N> >
+          : mpl::false_
+        {};
+        #endif
+
+        /// \brief Boolean metafunction which detects whether a type is
+        /// a PrimitiveTransform type or not.
+        ///
+        /// <tt>is_transform\<\></tt> is used by the <tt>call\<\></tt> transform
+        /// to determine whether the function types <tt>R()</tt>, <tt>R(A1)</tt>,
+        /// and <tt>R(A1, A2)</tt> should be passed the expression, state and data
+        /// parameters (as needed).
+        ///
+        /// Unless specialized for a type \c T, <tt>is_transform\<T\>::value</tt>
+        /// is computed as follows:
+        ///
+        /// \li If \c T has a nested type \c proto_is_transform_ that is a typedef
+        /// for \c void, <tt>is_transform\<T\>::value</tt> is \c true. (Note: this is
+        /// the case for any type that derives from an instantiation of \c proto::transform.)
+        /// \li Otherwise, <tt>is_transform\<T\>::value</tt> is \c false.
+        template<typename T, typename Void /*= void*/>
+        struct is_transform
+          : mpl::false_
+        {};
+
+        template<typename T>
+        struct is_transform<T, typename T::proto_is_transform_>
+          : mpl::true_
+        {};
+
+        /// \brief A Boolean metafunction that indicates whether a type requires
+        /// aggregate initialization.
+        ///
+        /// <tt>is_aggregate\<\></tt> is used by the <tt>make\<\></tt> transform
+        /// to determine how to construct an object of some type \c T, given some
+        /// initialization arguments <tt>a0,a1,...aN</tt>.
+        /// If <tt>is_aggregate\<T\>::value</tt> is \c true, then an object of
+        /// type T will be initialized as <tt>T t = {a0,a1,...aN};</tt>. Otherwise,
+        /// it will be initialized as <tt>T t(a0,a1,...aN)</tt>.
+        template<typename T, typename Void>
+        struct is_aggregate
+          : is_pod<T>
+        {};
+
+        /// \brief Specialization of <tt>is_aggregate\<\></tt> that indicates
+        /// that objects of <tt>expr\<\></tt> type require aggregate initialization.
+        template<typename Tag, typename Args, long N>
+        struct is_aggregate<proto::expr<Tag, Args, N>, void>
+          : mpl::true_
+        {};
+
+        template<typename Tag, typename Args, long N>
+        struct is_aggregate<proto::basic_expr<Tag, Args, N>, void>
+          : mpl::true_
+        {};
+
+        /// INTERNAL ONLY
+        template<typename T>
+        struct is_aggregate<T, typename T::proto_is_aggregate_>
+          : mpl::true_
+        {};
+
+        /// \brief A Boolean metafunction that indicates whether a given
+        /// type \c T is a Proto expression type.
+        ///
+        /// If \c T has a nested type \c proto_is_expr_ that is a typedef
+        /// for \c void, <tt>is_expr\<T\>::value</tt> is \c true. (Note, this
+        /// is the case for <tt>proto::expr\<\></tt>, any type that is derived
+        /// from <tt>proto::extends\<\></tt> or that uses the
+        /// <tt>BOOST_PROTO_BASIC_EXTENDS()</tt> macro.) Otherwise,
+        /// <tt>is_expr\<T\>::value</tt> is \c false.
+        template<typename T, typename Void /* = void*/>
+        struct is_expr
+          : mpl::false_
+        {};
+
+        /// \brief A Boolean metafunction that indicates whether a given
+        /// type \c T is a Proto expression type.
+        ///
+        /// If \c T has a nested type \c proto_is_expr_ that is a typedef
+        /// for \c void, <tt>is_expr\<T\>::value</tt> is \c true. (Note, this
+        /// is the case for <tt>proto::expr\<\></tt>, any type that is derived
+        /// from <tt>proto::extends\<\></tt> or that uses the
+        /// <tt>BOOST_PROTO_BASIC_EXTENDS()</tt> macro.) Otherwise,
+        /// <tt>is_expr\<T\>::value</tt> is \c false.
+        template<typename T>
+        struct is_expr<T, typename T::proto_is_expr_>
+          : mpl::true_
+        {};
+            
+        template<typename T>
+        struct is_expr<T &, void>
+          : is_expr<T>
+        {};
+
+        /// \brief A metafunction that returns the tag type of a
+        /// Proto expression.
+        template<typename Expr>
+        struct tag_of
+        {
+            typedef typename Expr::proto_tag type;
+        };
+
+        template<typename Expr>
+        struct tag_of<Expr &>
+        {
+            typedef typename Expr::proto_tag type;
+        };
+
+        /// \brief A metafunction that returns the arity of a
+        /// Proto expression.
+        template<typename Expr>
+        struct arity_of
+          : Expr::proto_arity
+        {};
+
+        template<typename Expr>
+        struct arity_of<Expr &>
+          : Expr::proto_arity
+        {};
+
+        namespace result_of
+        {
+            /// \brief A metafunction that computes the return type of the \c as_expr()
+            /// function.
+            template<typename T, typename Domain /*= default_domain*/>
+            struct as_expr
+            {
+                typedef typename Domain::template as_expr<T>::result_type type;
+            };
+
+            /// \brief A metafunction that computes the return type of the \c as_child()
+            /// function.
+            template<typename T, typename Domain /*= default_domain*/>
+            struct as_child
+            {
+                typedef typename Domain::template as_child<T>::result_type type;
+            };
+
+            /// \brief A metafunction that returns the type of the Nth child
+            /// of a Proto expression, where N is an MPL Integral Constant.
+            ///
+            /// <tt>result_of::child\<Expr, N\></tt> is equivalent to
+            /// <tt>result_of::child_c\<Expr, N::value\></tt>.
+            template<typename Expr, typename N /* = mpl::long_<0>*/>
+            struct child
+              : child_c<Expr, N::value>
+            {};
+
+            /// \brief A metafunction that returns the type of the value
+            /// of a terminal Proto expression.
+            ///
+            template<typename Expr>
+            struct value
+            {
+                /// Verify that we are actually operating on a terminal
+                BOOST_STATIC_ASSERT(0 == Expr::proto_arity_c);
+
+                /// The raw type of the Nth child as it is stored within
+                /// \c Expr. This may be a value or a reference
+                typedef typename Expr::proto_child0 value_type;
+
+                /// The "value" type of the child, suitable for storage by value,
+                /// computed as follows:
+                /// \li <tt>T const(&)[N]</tt> becomes <tt>T[N]</tt>
+                /// \li <tt>T[N]</tt> becomes <tt>T[N]</tt>
+                /// \li <tt>T(&)[N]</tt> becomes <tt>T[N]</tt>
+                /// \li <tt>R(&)(A0,...)</tt> becomes <tt>R(&)(A0,...)</tt>
+                /// \li <tt>T const &</tt> becomes <tt>T</tt>
+                /// \li <tt>T &</tt> becomes <tt>T</tt>
+                /// \li <tt>T</tt> becomes <tt>T</tt>
+                typedef typename detail::term_traits<typename Expr::proto_child0>::value_type type;
+            };
+
+            template<typename Expr>
+            struct value<Expr &>
+            {
+                /// Verify that we are actually operating on a terminal
+                BOOST_STATIC_ASSERT(0 == Expr::proto_arity_c);
+
+                /// The raw type of the Nth child as it is stored within
+                /// \c Expr. This may be a value or a reference
+                typedef typename Expr::proto_child0 value_type;
+
+                /// The "reference" type of the child, suitable for storage by
+                /// reference, computed as follows:
+                /// \li <tt>T const(&)[N]</tt> becomes <tt>T const(&)[N]</tt>
+                /// \li <tt>T[N]</tt> becomes <tt>T(&)[N]</tt>
+                /// \li <tt>T(&)[N]</tt> becomes <tt>T(&)[N]</tt>
+                /// \li <tt>R(&)(A0,...)</tt> becomes <tt>R(&)(A0,...)</tt>
+                /// \li <tt>T const &</tt> becomes <tt>T const &</tt>
+                /// \li <tt>T &</tt> becomes <tt>T &</tt>
+                /// \li <tt>T</tt> becomes <tt>T &</tt>
+                typedef typename detail::term_traits<typename Expr::proto_child0>::reference type;
+            };
+
+            template<typename Expr>
+            struct value<Expr const &>
+            {
+                /// Verify that we are actually operating on a terminal
+                BOOST_STATIC_ASSERT(0 == Expr::proto_arity_c);
+
+                /// The raw type of the Nth child as it is stored within
+                /// \c Expr. This may be a value or a reference
+                typedef typename Expr::proto_child0 value_type;
+
+                /// The "const reference" type of the child, suitable for storage by
+                /// const reference, computed as follows:
+                /// \li <tt>T const(&)[N]</tt> becomes <tt>T const(&)[N]</tt>
+                /// \li <tt>T[N]</tt> becomes <tt>T const(&)[N]</tt>
+                /// \li <tt>T(&)[N]</tt> becomes <tt>T(&)[N]</tt>
+                /// \li <tt>R(&)(A0,...)</tt> becomes <tt>R(&)(A0,...)</tt>
+                /// \li <tt>T const &</tt> becomes <tt>T const &</tt>
+                /// \li <tt>T &</tt> becomes <tt>T &</tt>
+                /// \li <tt>T</tt> becomes <tt>T const &</tt>
+                typedef typename detail::term_traits<typename Expr::proto_child0>::const_reference type;
+            };
+
+            /// \brief A metafunction that returns the type of the left child
+            /// of a binary Proto expression.
+            ///
+            /// <tt>result_of::left\<Expr\></tt> is equivalent to
+            /// <tt>result_of::child_c\<Expr, 0\></tt>.
+            template<typename Expr>
+            struct left
+              : child_c<Expr, 0>
+            {};
+
+            /// \brief A metafunction that returns the type of the right child
+            /// of a binary Proto expression.
+            ///
+            /// <tt>result_of::right\<Expr\></tt> is equivalent to
+            /// <tt>result_of::child_c\<Expr, 1\></tt>.
+            template<typename Expr>
+            struct right
+              : child_c<Expr, 1>
+            {};
+
+        } // namespace result_of
+
+        /// \brief A metafunction for generating terminal expression types,
+        /// a grammar element for matching terminal expressions, and a
+        /// PrimitiveTransform that returns the current expression unchanged.
+        template<typename T>
+        struct terminal
+          : proto::transform<terminal<T>, int>
+        {
+            typedef proto::expr<proto::tag::terminal, term<T>, 0> type;
+            typedef proto::basic_expr<proto::tag::terminal, term<T>, 0> proto_grammar;
+
+            template<typename Expr, typename State, typename Data>
+            struct impl : transform_impl<Expr, State, Data>
+            {
+                typedef Expr result_type;
+
+                /// \param e The current expression
+                /// \pre <tt>matches\<Expr, terminal\<T\> \>::value</tt> is \c true.
+                /// \return \c e
+                /// \throw nothrow
+                #ifdef BOOST_PROTO_STRICT_RESULT_OF
+                result_type
+                #else
+                typename impl::expr_param
+                #endif
+                operator ()(
+                    typename impl::expr_param e
+                  , typename impl::state_param
+                  , typename impl::data_param
+                ) const
+                {
+                    return e;
+                }
+            };
+
+            /// INTERNAL ONLY
+            typedef proto::tag::terminal proto_tag;
+            /// INTERNAL ONLY
+            typedef T proto_child0;
+        };
+
+        /// \brief A metafunction for generating ternary conditional expression types,
+        /// a grammar element for matching ternary conditional expressions, and a
+        /// PrimitiveTransform that dispatches to the <tt>pass_through\<\></tt>
+        /// transform.
+        template<typename T, typename U, typename V>
+        struct if_else_
+          : proto::transform<if_else_<T, U, V>, int>
+        {
+            typedef proto::expr<proto::tag::if_else_, list3<T, U, V>, 3> type;
+            typedef proto::basic_expr<proto::tag::if_else_, list3<T, U, V>, 3> proto_grammar;
+
+            template<typename Expr, typename State, typename Data>
+            struct impl
+              : detail::pass_through_impl<if_else_, Expr, State, Data>
+            {};
+
+            /// INTERNAL ONLY
+            typedef proto::tag::if_else_ proto_tag;
+            /// INTERNAL ONLY
+            typedef T proto_child0;
+            /// INTERNAL ONLY
+            typedef U proto_child1;
+            /// INTERNAL ONLY
+            typedef V proto_child2;
+        };
+
+        /// \brief A metafunction for generating nullary expression types with a
+        /// specified tag type,
+        /// a grammar element for matching nullary expressions, and a
+        /// PrimitiveTransform that returns the current expression unchanged.
+        ///
+        /// Use <tt>nullary_expr\<_, _\></tt> as a grammar element to match any
+        /// nullary expression.
+        template<typename Tag, typename T>
+        struct nullary_expr
+          : proto::transform<nullary_expr<Tag, T>, int>
+        {
+            typedef proto::expr<Tag, term<T>, 0> type;
+            typedef proto::basic_expr<Tag, term<T>, 0> proto_grammar;
+
+            template<typename Expr, typename State, typename Data>
+            struct impl : transform_impl<Expr, State, Data>
+            {
+                typedef Expr result_type;
+
+                /// \param e The current expression
+                /// \pre <tt>matches\<Expr, nullary_expr\<Tag, T\> \>::value</tt> is \c true.
+                /// \return \c e
+                /// \throw nothrow
+                #ifdef BOOST_PROTO_STRICT_RESULT_OF
+                result_type
+                #else
+                typename impl::expr_param
+                #endif
+                operator ()(
+                    typename impl::expr_param e
+                  , typename impl::state_param
+                  , typename impl::data_param
+                ) const
+                {
+                    return e;
+                }
+            };
+
+            /// INTERNAL ONLY
+            typedef Tag proto_tag;
+            /// INTERNAL ONLY
+            typedef T proto_child0;
+        };
+
+        /// \brief A metafunction for generating unary expression types with a
+        /// specified tag type,
+        /// a grammar element for matching unary expressions, and a
+        /// PrimitiveTransform that dispatches to the <tt>pass_through\<\></tt>
+        /// transform.
+        ///
+        /// Use <tt>unary_expr\<_, _\></tt> as a grammar element to match any
+        /// unary expression.
+        template<typename Tag, typename T>
+        struct unary_expr
+          : proto::transform<unary_expr<Tag, T>, int>
+        {
+            typedef proto::expr<Tag, list1<T>, 1> type;
+            typedef proto::basic_expr<Tag, list1<T>, 1> proto_grammar;
+
+            template<typename Expr, typename State, typename Data>
+            struct impl
+              : detail::pass_through_impl<unary_expr, Expr, State, Data>
+            {};
+
+            /// INTERNAL ONLY
+            typedef Tag proto_tag;
+            /// INTERNAL ONLY
+            typedef T proto_child0;
+        };
+
+        /// \brief A metafunction for generating binary expression types with a
+        /// specified tag type,
+        /// a grammar element for matching binary expressions, and a
+        /// PrimitiveTransform that dispatches to the <tt>pass_through\<\></tt>
+        /// transform.
+        ///
+        /// Use <tt>binary_expr\<_, _, _\></tt> as a grammar element to match any
+        /// binary expression.
+        template<typename Tag, typename T, typename U>
+        struct binary_expr
+          : proto::transform<binary_expr<Tag, T, U>, int>
+        {
+            typedef proto::expr<Tag, list2<T, U>, 2> type;
+            typedef proto::basic_expr<Tag, list2<T, U>, 2> proto_grammar;
+
+            template<typename Expr, typename State, typename Data>
+            struct impl
+              : detail::pass_through_impl<binary_expr, Expr, State, Data>
+            {};
+
+            /// INTERNAL ONLY
+            typedef Tag proto_tag;
+            /// INTERNAL ONLY
+            typedef T proto_child0;
+            /// INTERNAL ONLY
+            typedef U proto_child1;
+        };
+
+    #define BOOST_PROTO_DEFINE_UNARY_METAFUNCTION(Op)                                               \
+        template<typename T>                                                                        \
+        struct Op                                                                                   \
+          : proto::transform<Op<T>, int>                                                            \
+        {                                                                                           \
+            typedef proto::expr<proto::tag::Op, list1<T>, 1> type;                                  \
+            typedef proto::basic_expr<proto::tag::Op, list1<T>, 1> proto_grammar;                   \
+                                                                                                    \
+            template<typename Expr, typename State, typename Data>                                  \
+            struct impl                                                                             \
+              : detail::pass_through_impl<Op, Expr, State, Data>                                    \
+            {};                                                                                     \
+                                                                                                    \
+            typedef proto::tag::Op proto_tag;                                                       \
+            typedef T proto_child0;                                                                 \
+        };                                                                                          \
+        /**/
+
+    #define BOOST_PROTO_DEFINE_BINARY_METAFUNCTION(Op)                                              \
+        template<typename T, typename U>                                                            \
+        struct Op                                                                                   \
+          : proto::transform<Op<T, U>, int>                                                         \
+        {                                                                                           \
+            typedef proto::expr<proto::tag::Op, list2<T, U>, 2> type;                               \
+            typedef proto::basic_expr<proto::tag::Op, list2<T, U>, 2> proto_grammar;                \
+                                                                                                    \
+            template<typename Expr, typename State, typename Data>                                  \
+            struct impl                                                                             \
+              : detail::pass_through_impl<Op, Expr, State, Data>                                    \
+            {};                                                                                     \
+                                                                                                    \
+            typedef proto::tag::Op proto_tag;                                                       \
+            typedef T proto_child0;                                                                 \
+            typedef U proto_child1;                                                                 \
+        };                                                                                          \
+        /**/
+
+        BOOST_PROTO_DEFINE_UNARY_METAFUNCTION(unary_plus)
+        BOOST_PROTO_DEFINE_UNARY_METAFUNCTION(negate)
+        BOOST_PROTO_DEFINE_UNARY_METAFUNCTION(dereference)
+        BOOST_PROTO_DEFINE_UNARY_METAFUNCTION(complement)
+        BOOST_PROTO_DEFINE_UNARY_METAFUNCTION(address_of)
+        BOOST_PROTO_DEFINE_UNARY_METAFUNCTION(logical_not)
+        BOOST_PROTO_DEFINE_UNARY_METAFUNCTION(pre_inc)
+        BOOST_PROTO_DEFINE_UNARY_METAFUNCTION(pre_dec)
+        BOOST_PROTO_DEFINE_UNARY_METAFUNCTION(post_inc)
+        BOOST_PROTO_DEFINE_UNARY_METAFUNCTION(post_dec)
+
+        BOOST_PROTO_DEFINE_BINARY_METAFUNCTION(shift_left)
+        BOOST_PROTO_DEFINE_BINARY_METAFUNCTION(shift_right)
+        BOOST_PROTO_DEFINE_BINARY_METAFUNCTION(multiplies)
+        BOOST_PROTO_DEFINE_BINARY_METAFUNCTION(divides)
+        BOOST_PROTO_DEFINE_BINARY_METAFUNCTION(modulus)
+        BOOST_PROTO_DEFINE_BINARY_METAFUNCTION(plus)
+        BOOST_PROTO_DEFINE_BINARY_METAFUNCTION(minus)
+        BOOST_PROTO_DEFINE_BINARY_METAFUNCTION(less)
+        BOOST_PROTO_DEFINE_BINARY_METAFUNCTION(greater)
+        BOOST_PROTO_DEFINE_BINARY_METAFUNCTION(less_equal)
+        BOOST_PROTO_DEFINE_BINARY_METAFUNCTION(greater_equal)
+        BOOST_PROTO_DEFINE_BINARY_METAFUNCTION(equal_to)
+        BOOST_PROTO_DEFINE_BINARY_METAFUNCTION(not_equal_to)
+        BOOST_PROTO_DEFINE_BINARY_METAFUNCTION(logical_or)
+        BOOST_PROTO_DEFINE_BINARY_METAFUNCTION(logical_and)
+        BOOST_PROTO_DEFINE_BINARY_METAFUNCTION(bitwise_or)
+        BOOST_PROTO_DEFINE_BINARY_METAFUNCTION(bitwise_and)
+        BOOST_PROTO_DEFINE_BINARY_METAFUNCTION(bitwise_xor)
+        BOOST_PROTO_DEFINE_BINARY_METAFUNCTION(comma)
+        BOOST_PROTO_DEFINE_BINARY_METAFUNCTION(mem_ptr)
+        BOOST_PROTO_DEFINE_BINARY_METAFUNCTION(assign)
+        BOOST_PROTO_DEFINE_BINARY_METAFUNCTION(shift_left_assign)
+        BOOST_PROTO_DEFINE_BINARY_METAFUNCTION(shift_right_assign)
+        BOOST_PROTO_DEFINE_BINARY_METAFUNCTION(multiplies_assign)
+        BOOST_PROTO_DEFINE_BINARY_METAFUNCTION(divides_assign)
+        BOOST_PROTO_DEFINE_BINARY_METAFUNCTION(modulus_assign)
+        BOOST_PROTO_DEFINE_BINARY_METAFUNCTION(plus_assign)
+        BOOST_PROTO_DEFINE_BINARY_METAFUNCTION(minus_assign)
+        BOOST_PROTO_DEFINE_BINARY_METAFUNCTION(bitwise_or_assign)
+        BOOST_PROTO_DEFINE_BINARY_METAFUNCTION(bitwise_and_assign)
+        BOOST_PROTO_DEFINE_BINARY_METAFUNCTION(bitwise_xor_assign)
+        BOOST_PROTO_DEFINE_BINARY_METAFUNCTION(subscript)
+        BOOST_PROTO_DEFINE_BINARY_METAFUNCTION(member)
+
+    #undef BOOST_PROTO_DEFINE_UNARY_METAFUNCTION
+    #undef BOOST_PROTO_DEFINE_BINARY_METAFUNCTION
+
+    #define BOOST_PROTO_CHILD(Z, N, DATA)                                                           \
+        /** INTERNAL ONLY */                                                                        \
+        typedef BOOST_PP_CAT(DATA, N) BOOST_PP_CAT(proto_child, N);                                 \
+        /**/
+
+    #define BOOST_PP_ITERATION_PARAMS_1 (3, (0, BOOST_PROTO_MAX_ARITY, <boost/proto/traits.hpp>))
+    #include BOOST_PP_ITERATE()
+
+    #undef BOOST_PROTO_CHILD
+    #undef BOOST_PROTO_IMPLICIT_ARG
+
+        namespace functional
+        {
+            /// \brief A callable PolymorphicFunctionObject that is
+            /// equivalent to the \c as_expr() function.
+            template<typename Domain   /* = default_domain*/>
+            struct as_expr
+            {
+                BOOST_PROTO_CALLABLE()
+
+                template<typename Sig>
+                struct result;
+
+                template<typename This, typename T>
+                struct result<This(T)>
+                {
+                    typedef typename Domain::template as_expr<T>::result_type type;
+                };
+
+                template<typename This, typename T>
+                struct result<This(T &)>
+                {
+                    typedef typename Domain::template as_expr<T>::result_type type;
+                };
+
+                /// \brief Wrap an object in a Proto terminal if it isn't a
+                /// Proto expression already.
+                /// \param t The object to wrap.
+                /// \return <tt>proto::as_expr\<Domain\>(t)</tt>
+                template<typename T>
+                typename add_const<typename result<as_expr(T &)>::type>::type
+                operator ()(T &t) const
+                {
+                    return typename Domain::template as_expr<T>()(t);
+                }
+
+                /// \overload
+                ///
+                template<typename T>
+                typename add_const<typename result<as_expr(T const &)>::type>::type
+                operator ()(T const &t) const
+                {
+                    return typename Domain::template as_expr<T const>()(t);
+                }
+
+                #if BOOST_WORKAROUND(BOOST_MSVC, == 1310)
+                template<typename T, std::size_t N_>
+                typename add_const<typename result<as_expr(T (&)[N_])>::type>::type
+                operator ()(T (&t)[N_]) const
+                {
+                    return typename Domain::template as_expr<T[N_]>()(t);
+                }
+
+                template<typename T, std::size_t N_>
+                typename add_const<typename result<as_expr(T const (&)[N_])>::type>::type
+                operator ()(T const (&t)[N_]) const
+                {
+                    return typename Domain::template as_expr<T const[N_]>()(t);
+                }
+                #endif
+            };
+
+            /// \brief A callable PolymorphicFunctionObject that is
+            /// equivalent to the \c as_child() function.
+            template<typename Domain   /* = default_domain*/>
+            struct as_child
+            {
+                BOOST_PROTO_CALLABLE()
+
+                template<typename Sig>
+                struct result;
+
+                template<typename This, typename T>
+                struct result<This(T)>
+                {
+                    typedef typename Domain::template as_child<T>::result_type type;
+                };
+
+                template<typename This, typename T>
+                struct result<This(T &)>
+                {
+                    typedef typename Domain::template as_child<T>::result_type type;
+                };
+
+                /// \brief Wrap an object in a Proto terminal if it isn't a
+                /// Proto expression already.
+                /// \param t The object to wrap.
+                /// \return <tt>proto::as_child\<Domain\>(t)</tt>
+                template<typename T>
+                typename add_const<typename result<as_child(T &)>::type>::type
+                operator ()(T &t) const
+                {
+                    return typename Domain::template as_child<T>()(t);
+                }
+
+                /// \overload
+                ///
+                template<typename T>
+                typename add_const<typename result<as_child(T const &)>::type>::type
+                operator ()(T const &t) const
+                {
+                    return typename Domain::template as_child<T const>()(t);
+                }
+            };
+
+            /// \brief A callable PolymorphicFunctionObject that is
+            /// equivalent to the \c child_c() function.
+            template<long N>
+            struct child_c
+            {
+                BOOST_PROTO_CALLABLE()
+
+                template<typename Sig>
+                struct result;
+
+                template<typename This, typename Expr>
+                struct result<This(Expr)>
+                {
+                    typedef typename result_of::child_c<Expr, N>::type type;
+                };
+
+                /// \brief Return the Nth child of the given expression.
+                /// \param expr The expression node.
+                /// \pre <tt>is_expr\<Expr\>::value</tt> is \c true
+                /// \pre <tt>N \< Expr::proto_arity::value</tt>
+                /// \return <tt>proto::child_c\<N\>(expr)</tt>
+                /// \throw nothrow
+                template<typename Expr>
+                typename result_of::child_c<Expr &, N>::type
+                operator ()(Expr &e) const
+                {
+                    return result_of::child_c<Expr &, N>::call(e);
+                }
+
+                /// \overload
+                ///
+                template<typename Expr>
+                typename result_of::child_c<Expr const &, N>::type
+                operator ()(Expr const &e) const
+                {
+                    return result_of::child_c<Expr const &, N>::call(e);
+                }
+            };
+
+            /// \brief A callable PolymorphicFunctionObject that is
+            /// equivalent to the \c child() function.
+            ///
+            /// A callable PolymorphicFunctionObject that is
+            /// equivalent to the \c child() function. \c N is required
+            /// to be an MPL Integral Constant.
+            template<typename N /* = mpl::long_<0>*/>
+            struct child
+            {
+                BOOST_PROTO_CALLABLE()
+
+                template<typename Sig>
+                struct result;
+
+                template<typename This, typename Expr>
+                struct result<This(Expr)>
+                {
+                    typedef typename result_of::child<Expr, N>::type type;
+                };
+
+                /// \brief Return the Nth child of the given expression.
+                /// \param expr The expression node.
+                /// \pre <tt>is_expr\<Expr\>::value</tt> is \c true
+                /// \pre <tt>N::value \< Expr::proto_arity::value</tt>
+                /// \return <tt>proto::child\<N\>(expr)</tt>
+                /// \throw nothrow
+                template<typename Expr>
+                typename result_of::child<Expr &, N>::type
+                operator ()(Expr &e) const
+                {
+                    return result_of::child<Expr &, N>::call(e);
+                }
+
+                /// \overload
+                ///
+                template<typename Expr>
+                typename result_of::child<Expr const &, N>::type
+                operator ()(Expr const &e) const
+                {
+                    return result_of::child<Expr const &, N>::call(e);
+                }
+            };
+
+            /// \brief A callable PolymorphicFunctionObject that is
+            /// equivalent to the \c value() function.
+            struct value
+            {
+                BOOST_PROTO_CALLABLE()
+
+                template<typename Sig>
+                struct result;
+
+                template<typename This, typename Expr>
+                struct result<This(Expr)>
+                {
+                    typedef typename result_of::value<Expr>::type type;
+                };
+
+                /// \brief Return the value of the given terminal expression.
+                /// \param expr The terminal expression node.
+                /// \pre <tt>is_expr\<Expr\>::value</tt> is \c true
+                /// \pre <tt>0 == Expr::proto_arity::value</tt>
+                /// \return <tt>proto::value(expr)</tt>
+                /// \throw nothrow
+                template<typename Expr>
+                typename result_of::value<Expr &>::type
+                operator ()(Expr &e) const
+                {
+                    return e.proto_base().child0;
+                }
+
+                /// \overload
+                ///
+                template<typename Expr>
+                typename result_of::value<Expr const &>::type
+                operator ()(Expr const &e) const
+                {
+                    return e.proto_base().child0;
+                }
+            };
+
+            /// \brief A callable PolymorphicFunctionObject that is
+            /// equivalent to the \c left() function.
+            struct left
+            {
+                BOOST_PROTO_CALLABLE()
+
+                template<typename Sig>
+                struct result;
+
+                template<typename This, typename Expr>
+                struct result<This(Expr)>
+                {
+                    typedef typename result_of::left<Expr>::type type;
+                };
+
+                /// \brief Return the left child of the given binary expression.
+                /// \param expr The expression node.
+                /// \pre <tt>is_expr\<Expr\>::value</tt> is \c true
+                /// \pre <tt>2 == Expr::proto_arity::value</tt>
+                /// \return <tt>proto::left(expr)</tt>
+                /// \throw nothrow
+                template<typename Expr>
+                typename result_of::left<Expr &>::type
+                operator ()(Expr &e) const
+                {
+                    return e.proto_base().child0;
+                }
+
+                /// \overload
+                ///
+                template<typename Expr>
+                typename result_of::left<Expr const &>::type
+                operator ()(Expr const &e) const
+                {
+                    return e.proto_base().child0;
+                }
+            };
+
+            /// \brief A callable PolymorphicFunctionObject that is
+            /// equivalent to the \c right() function.
+            struct right
+            {
+                BOOST_PROTO_CALLABLE()
+
+                template<typename Sig>
+                struct result;
+
+                template<typename This, typename Expr>
+                struct result<This(Expr)>
+                {
+                    typedef typename result_of::right<Expr>::type type;
+                };
+
+                /// \brief Return the right child of the given binary expression.
+                /// \param expr The expression node.
+                /// \pre <tt>is_expr\<Expr\>::value</tt> is \c true
+                /// \pre <tt>2 == Expr::proto_arity::value</tt>
+                /// \return <tt>proto::right(expr)</tt>
+                /// \throw nothrow
+                template<typename Expr>
+                typename result_of::right<Expr &>::type
+                operator ()(Expr &e) const
+                {
+                    return e.proto_base().child1;
+                }
+
+                template<typename Expr>
+                typename result_of::right<Expr const &>::type
+                operator ()(Expr const &e) const
+                {
+                    return e.proto_base().child1;
+                }
+            };
+
+        }
+
+        /// \brief A function that wraps non-Proto expression types in Proto
+        /// terminals and leaves Proto expression types alone.
+        ///
+        /// The <tt>as_expr()</tt> function turns objects into Proto terminals if
+        /// they are not Proto expression types already. Non-Proto types are
+        /// held by value, if possible. Types which are already Proto types are
+        /// left alone and returned by reference.
+        ///
+        /// This function can be called either with an explicitly specified
+        /// \c Domain parameter (i.e., <tt>as_expr\<Domain\>(t)</tt>), or
+        /// without (i.e., <tt>as_expr(t)</tt>). If no domain is
+        /// specified, \c default_domain is assumed.
+        ///
+        /// If <tt>is_expr\<T\>::value</tt> is \c true, then the argument is
+        /// returned unmodified, by reference. Otherwise, the argument is wrapped
+        /// in a Proto terminal expression node according to the following rules.
+        /// If \c T is a function type, let \c A be <tt>T &</tt>. Otherwise, let
+        /// \c A be the type \c T stripped of cv-qualifiers. Then, \c as_expr()
+        /// returns <tt>Domain()(terminal\<A\>::type::make(t))</tt>.
+        ///
+        /// \param t The object to wrap.
+        template<typename T>
+        typename add_const<typename result_of::as_expr<T, default_domain>::type>::type
+        as_expr(T &t BOOST_PROTO_DISABLE_IF_IS_CONST(T) BOOST_PROTO_DISABLE_IF_IS_FUNCTION(T))
+        {
+            return default_domain::as_expr<T>()(t);
+        }
+
+        /// \overload
+        ///
+        template<typename T>
+        typename add_const<typename result_of::as_expr<T const, default_domain>::type>::type
+        as_expr(T const &t)
+        {
+            return default_domain::as_expr<T const>()(t);
+        }
+
+        /// \overload
+        ///
+        template<typename Domain, typename T>
+        typename add_const<typename result_of::as_expr<T, Domain>::type>::type
+        as_expr(T &t BOOST_PROTO_DISABLE_IF_IS_CONST(T) BOOST_PROTO_DISABLE_IF_IS_FUNCTION(T))
+        {
+            return typename Domain::template as_expr<T>()(t);
+        }
+
+        /// \overload
+        ///
+        template<typename Domain, typename T>
+        typename add_const<typename result_of::as_expr<T const, Domain>::type>::type
+        as_expr(T const &t)
+        {
+            return typename Domain::template as_expr<T const>()(t);
+        }
+
+        /// \brief A function that wraps non-Proto expression types in Proto
+        /// terminals (by reference) and returns Proto expression types by
+        /// reference
+        ///
+        /// The <tt>as_child()</tt> function turns objects into Proto terminals if
+        /// they are not Proto expression types already. Non-Proto types are
+        /// held by reference. Types which are already Proto types are simply
+        /// returned as-is.
+        ///
+        /// This function can be called either with an explicitly specified
+        /// \c Domain parameter (i.e., <tt>as_child\<Domain\>(t)</tt>), or
+        /// without (i.e., <tt>as_child(t)</tt>). If no domain is
+        /// specified, \c default_domain is assumed.
+        ///
+        /// If <tt>is_expr\<T\>::value</tt> is \c true, then the argument is
+        /// returned as-is. Otherwise, \c as_child() returns
+        /// <tt>Domain()(terminal\<T &\>::type::make(t))</tt>.
+        ///
+        /// \param t The object to wrap.
+        template<typename T>
+        typename add_const<typename result_of::as_child<T, default_domain>::type>::type
+        as_child(T &t BOOST_PROTO_DISABLE_IF_IS_CONST(T) BOOST_PROTO_DISABLE_IF_IS_FUNCTION(T))
+        {
+            return default_domain::as_child<T>()(t);
+        }
+
+        /// \overload
+        ///
+        template<typename T>
+        typename add_const<typename result_of::as_child<T const, default_domain>::type>::type
+        as_child(T const &t)
+        {
+            return default_domain::as_child<T const>()(t);
+        }
+
+        /// \overload
+        ///
+        template<typename Domain, typename T>
+        typename add_const<typename result_of::as_child<T, Domain>::type>::type
+        as_child(T &t BOOST_PROTO_DISABLE_IF_IS_CONST(T) BOOST_PROTO_DISABLE_IF_IS_FUNCTION(T))
+        {
+            return typename Domain::template as_child<T>()(t);
+        }
+
+        /// \overload
+        ///
+        template<typename Domain, typename T>
+        typename add_const<typename result_of::as_child<T const, Domain>::type>::type
+        as_child(T const &t)
+        {
+            return typename Domain::template as_child<T const>()(t);
+        }
+
+        /// \brief Return the Nth child of the specified Proto expression.
+        ///
+        /// Return the Nth child of the specified Proto expression. If
+        /// \c N is not specified, as in \c child(expr), then \c N is assumed
+        /// to be <tt>mpl::long_\<0\></tt>. The child is returned by
+        /// reference.
+        ///
+        /// \param expr The Proto expression.
+        /// \pre <tt>is_expr\<Expr\>::value</tt> is \c true.
+        /// \pre \c N is an MPL Integral Constant.
+        /// \pre <tt>N::value \< Expr::proto_arity::value</tt>
+        /// \throw nothrow
+        /// \return A reference to the Nth child
+        template<typename N, typename Expr>
+        typename result_of::child<Expr &, N>::type
+        child(Expr &e BOOST_PROTO_DISABLE_IF_IS_CONST(Expr))
+        {
+            return result_of::child<Expr &, N>::call(e);
+        }
+
+        /// \overload
+        ///
+        template<typename N, typename Expr>
+        typename result_of::child<Expr const &, N>::type
+        child(Expr const &e)
+        {
+            return result_of::child<Expr const &, N>::call(e);
+        }
+
+        /// \overload
+        ///
+        template<typename Expr2>
+        typename detail::expr_traits<typename Expr2::proto_base_expr::proto_child0>::reference
+        child(Expr2 &expr2 BOOST_PROTO_DISABLE_IF_IS_CONST(Expr2))
+        {
+            return expr2.proto_base().child0;
+        }
+
+        /// \overload
+        ///
+        template<typename Expr2>
+        typename detail::expr_traits<typename Expr2::proto_base_expr::proto_child0>::const_reference
+        child(Expr2 const &expr2)
+        {
+            return expr2.proto_base().child0;
+        }
+
+        /// \brief Return the Nth child of the specified Proto expression.
+        ///
+        /// Return the Nth child of the specified Proto expression. The child
+        /// is returned by reference.
+        ///
+        /// \param expr The Proto expression.
+        /// \pre <tt>is_expr\<Expr\>::value</tt> is \c true.
+        /// \pre <tt>N \< Expr::proto_arity::value</tt>
+        /// \throw nothrow
+        /// \return A reference to the Nth child
+        template<long N, typename Expr>
+        typename result_of::child_c<Expr &, N>::type
+        child_c(Expr &e BOOST_PROTO_DISABLE_IF_IS_CONST(Expr))
+        {
+            return result_of::child_c<Expr &, N>::call(e);
+        }
+
+        /// \overload
+        ///
+        template<long N, typename Expr>
+        typename result_of::child_c<Expr const &, N>::type
+        child_c(Expr const &e)
+        {
+            return result_of::child_c<Expr const &, N>::call(e);
+        }
+
+        /// \brief Return the value stored within the specified Proto
+        /// terminal expression.
+        ///
+        /// Return the the value stored within the specified Proto
+        /// terminal expression. The value is returned by
+        /// reference.
+        ///
+        /// \param expr The Proto terminal expression.
+        /// \pre <tt>N::value == 0</tt>
+        /// \throw nothrow
+        /// \return A reference to the terminal's value
+        template<typename Expr>
+        typename result_of::value<Expr &>::type
+        value(Expr &e BOOST_PROTO_DISABLE_IF_IS_CONST(Expr))
+        {
+            return e.proto_base().child0;
+        }
+
+        /// \overload
+        ///
+        template<typename Expr>
+        typename result_of::value<Expr const &>::type
+        value(Expr const &e)
+        {
+            return e.proto_base().child0;
+        }
+
+        /// \brief Return the left child of the specified binary Proto
+        /// expression.
+        ///
+        /// Return the left child of the specified binary Proto expression. The
+        /// child is returned by reference.
+        ///
+        /// \param expr The Proto expression.
+        /// \pre <tt>is_expr\<Expr\>::value</tt> is \c true.
+        /// \pre <tt>2 == Expr::proto_arity::value</tt>
+        /// \throw nothrow
+        /// \return A reference to the left child
+        template<typename Expr>
+        typename result_of::left<Expr &>::type
+        left(Expr &e BOOST_PROTO_DISABLE_IF_IS_CONST(Expr))
+        {
+            return e.proto_base().child0;
+        }
+
+        /// \overload
+        ///
+        template<typename Expr>
+        typename result_of::left<Expr const &>::type
+        left(Expr const &e)
+        {
+            return e.proto_base().child0;
+        }
+
+        /// \brief Return the right child of the specified binary Proto
+        /// expression.
+        ///
+        /// Return the right child of the specified binary Proto expression. The
+        /// child is returned by reference.
+        ///
+        /// \param expr The Proto expression.
+        /// \pre <tt>is_expr\<Expr\>::value</tt> is \c true.
+        /// \pre <tt>2 == Expr::proto_arity::value</tt>
+        /// \throw nothrow
+        /// \return A reference to the right child
+        template<typename Expr>
+        typename result_of::right<Expr &>::type
+        right(Expr &e BOOST_PROTO_DISABLE_IF_IS_CONST(Expr))
+        {
+            return e.proto_base().child1;
+        }
+
+        /// \overload
+        ///
+        template<typename Expr>
+        typename result_of::right<Expr const &>::type
+        right(Expr const &e)
+        {
+            return e.proto_base().child1;
+        }
+
+        /// INTERNAL ONLY
+        ///
+        template<typename Domain>
+        struct is_callable<functional::as_expr<Domain> >
+          : mpl::true_
+        {};
+
+        /// INTERNAL ONLY
+        ///
+        template<typename Domain>
+        struct is_callable<functional::as_child<Domain> >
+          : mpl::true_
+        {};
+
+        /// INTERNAL ONLY
+        ///
+        template<long N>
+        struct is_callable<functional::child_c<N> >
+          : mpl::true_
+        {};
+
+        /// INTERNAL ONLY
+        ///
+        template<typename N>
+        struct is_callable<functional::child<N> >
+          : mpl::true_
+        {};
+
+    }}
+
+    #if BOOST_WORKAROUND( BOOST_MSVC, >= 1400 )
+        #pragma warning(pop)
+    #endif
+
+    #endif
+
+#else // PP_IS_ITERATING
+
+    #define N BOOST_PP_ITERATION()
+    #if N > 0
+        /// \brief A metafunction for generating function-call expression types,
+        /// a grammar element for matching function-call expressions, and a
+        /// PrimitiveTransform that dispatches to the <tt>pass_through\<\></tt>
+        /// transform.
+        template<BOOST_PP_ENUM_PARAMS(N, typename A)>
+        struct function
+        #if N != BOOST_PROTO_MAX_ARITY
+        <
+            BOOST_PP_ENUM_PARAMS(N, A)
+            BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_SUB(BOOST_PROTO_MAX_ARITY, N), void BOOST_PP_INTERCEPT)
+        >
+        #endif
+          : proto::transform<
+                function<
+                    BOOST_PP_ENUM_PARAMS(N, A)
+                    BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_SUB(BOOST_PROTO_MAX_ARITY, N), void BOOST_PP_INTERCEPT)
+                >
+              , int
+            >
+        {
+            typedef proto::expr<proto::tag::function, BOOST_PP_CAT(list, N)<BOOST_PP_ENUM_PARAMS(N, A)>, N> type;
+            typedef proto::basic_expr<proto::tag::function, BOOST_PP_CAT(list, N)<BOOST_PP_ENUM_PARAMS(N, A)>, N> proto_grammar;
+
+            template<typename Expr, typename State, typename Data>
+            struct impl
+              : detail::pass_through_impl<function, Expr, State, Data>
+            {};
+
+            /// INTERNAL ONLY
+            typedef proto::tag::function proto_tag;
+            BOOST_PP_REPEAT(N, BOOST_PROTO_CHILD, A)
+            BOOST_PP_REPEAT_FROM_TO(
+                N
+              , BOOST_PROTO_MAX_ARITY
+              , BOOST_PROTO_CHILD
+              , detail::if_vararg<BOOST_PP_CAT(A, BOOST_PP_DEC(N))> BOOST_PP_INTERCEPT
+            )
+        };
+
+        /// \brief A metafunction for generating n-ary expression types with a
+        /// specified tag type,
+        /// a grammar element for matching n-ary expressions, and a
+        /// PrimitiveTransform that dispatches to the <tt>pass_through\<\></tt>
+        /// transform.
+        ///
+        /// Use <tt>nary_expr\<_, vararg\<_\> \></tt> as a grammar element to match any
+        /// n-ary expression; that is, any non-terminal.
+        template<typename Tag BOOST_PP_ENUM_TRAILING_PARAMS(N, typename A)>
+        struct nary_expr
+        #if N != BOOST_PROTO_MAX_ARITY
+        <
+            Tag
+            BOOST_PP_ENUM_TRAILING_PARAMS(N, A)
+            BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_SUB(BOOST_PROTO_MAX_ARITY, N), void BOOST_PP_INTERCEPT)
+        >
+        #endif
+          : proto::transform<
+                nary_expr<
+                    Tag
+                    BOOST_PP_ENUM_TRAILING_PARAMS(N, A)
+                    BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_SUB(BOOST_PROTO_MAX_ARITY, N), void BOOST_PP_INTERCEPT)
+                >
+              , int
+            >
+        {
+            typedef proto::expr<Tag, BOOST_PP_CAT(list, N)<BOOST_PP_ENUM_PARAMS(N, A)>, N> type;
+            typedef proto::basic_expr<Tag, BOOST_PP_CAT(list, N)<BOOST_PP_ENUM_PARAMS(N, A)>, N> proto_grammar;
+
+            template<typename Expr, typename State, typename Data>
+            struct impl
+              : detail::pass_through_impl<nary_expr, Expr, State, Data>
+            {};
+
+            /// INTERNAL ONLY
+            typedef Tag proto_tag;
+            BOOST_PP_REPEAT(N, BOOST_PROTO_CHILD, A)
+            BOOST_PP_REPEAT_FROM_TO(
+                N
+              , BOOST_PROTO_MAX_ARITY
+              , BOOST_PROTO_CHILD
+              , detail::if_vararg<BOOST_PP_CAT(A, BOOST_PP_DEC(N))> BOOST_PP_INTERCEPT
+            )
+        };
+
+        namespace detail
+        {
+            template<
+                template<BOOST_PP_ENUM_PARAMS(N, typename BOOST_PP_INTERCEPT)> class T
+              , BOOST_PP_ENUM_PARAMS(N, typename A)
+            >
+            struct is_callable_<T<BOOST_PP_ENUM_PARAMS(N, A)> BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(N)>
+              : is_same<BOOST_PP_CAT(A, BOOST_PP_DEC(N)), callable>
+            {};
+        }
+
+    #endif
+
+        namespace result_of
+        {
+            /// \brief A metafunction that returns the type of the Nth child
+            /// of a Proto expression.
+            ///
+            /// A metafunction that returns the type of the Nth child
+            /// of a Proto expression. \c N must be less than
+            /// \c Expr::proto_arity::value.
+            template<typename Expr>
+            struct child_c<Expr, N>
+            {
+                /// Verify that we are not operating on a terminal
+                BOOST_STATIC_ASSERT(0 != Expr::proto_arity_c);
+
+                /// The raw type of the Nth child as it is stored within
+                /// \c Expr. This may be a value or a reference
+                typedef typename Expr::BOOST_PP_CAT(proto_child, N) value_type;
+
+                /// The "value" type of the child, suitable for return by value,
+                /// computed as follows:
+                /// \li <tt>T const &</tt> becomes <tt>T</tt>
+                /// \li <tt>T &</tt> becomes <tt>T</tt>
+                /// \li <tt>T</tt> becomes <tt>T</tt>
+                typedef typename detail::expr_traits<typename Expr::BOOST_PP_CAT(proto_child, N)>::value_type type;
+            };
+
+            template<typename Expr>
+            struct child_c<Expr &, N>
+            {
+                /// Verify that we are not operating on a terminal
+                BOOST_STATIC_ASSERT(0 != Expr::proto_arity_c);
+
+                /// The raw type of the Nth child as it is stored within
+                /// \c Expr. This may be a value or a reference
+                typedef typename Expr::BOOST_PP_CAT(proto_child, N) value_type;
+
+                /// The "reference" type of the child, suitable for return by
+                /// reference, computed as follows:
+                /// \li <tt>T const &</tt> becomes <tt>T const &</tt>
+                /// \li <tt>T &</tt> becomes <tt>T &</tt>
+                /// \li <tt>T</tt> becomes <tt>T &</tt>
+                typedef typename detail::expr_traits<typename Expr::BOOST_PP_CAT(proto_child, N)>::reference type;
+
+                /// INTERNAL ONLY
+                ///
+                static type call(Expr &e)
+                {
+                    return e.proto_base().BOOST_PP_CAT(child, N);
+                }
+            };
+
+            template<typename Expr>
+            struct child_c<Expr const &, N>
+            {
+                /// Verify that we are not operating on a terminal
+                BOOST_STATIC_ASSERT(0 != Expr::proto_arity_c);
+
+                /// The raw type of the Nth child as it is stored within
+                /// \c Expr. This may be a value or a reference
+                typedef typename Expr::BOOST_PP_CAT(proto_child, N) value_type;
+
+                /// The "const reference" type of the child, suitable for return by
+                /// const reference, computed as follows:
+                /// \li <tt>T const &</tt> becomes <tt>T const &</tt>
+                /// \li <tt>T &</tt> becomes <tt>T &</tt>
+                /// \li <tt>T</tt> becomes <tt>T const &</tt>
+                typedef typename detail::expr_traits<typename Expr::BOOST_PP_CAT(proto_child, N)>::const_reference type;
+
+                /// INTERNAL ONLY
+                ///
+                static type call(Expr const &e)
+                {
+                    return e.proto_base().BOOST_PP_CAT(child, N);
+                }
+            };
+        }
+
+    #undef N
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/transform.hpp b/3rdParty/Boost/src/boost/proto/transform.hpp
new file mode 100644
index 0000000..d323bed
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/transform.hpp
@@ -0,0 +1,22 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file transform.hpp
+/// Includes all the transforms in the transform/ sub-directory.
+//
+//  Copyright 2008 Eric Niebler. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROTO_TRANSFORM_HPP_EAN_06_23_2007
+#define BOOST_PROTO_TRANSFORM_HPP_EAN_06_23_2007
+
+#include <boost/proto/transform/arg.hpp>
+#include <boost/proto/transform/call.hpp>
+#include <boost/proto/transform/default.hpp>
+#include <boost/proto/transform/fold.hpp>
+#include <boost/proto/transform/fold_tree.hpp>
+#include <boost/proto/transform/lazy.hpp>
+#include <boost/proto/transform/make.hpp>
+#include <boost/proto/transform/pass_through.hpp>
+#include <boost/proto/transform/when.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/transform/arg.hpp b/3rdParty/Boost/src/boost/proto/transform/arg.hpp
new file mode 100644
index 0000000..ac41fa3
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/transform/arg.hpp
@@ -0,0 +1,380 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file arg.hpp
+/// Contains definition of the argN transforms.
+//
+//  Copyright 2008 Eric Niebler. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROTO_TRANSFORM_ARG_HPP_EAN_11_01_2007
+#define BOOST_PROTO_TRANSFORM_ARG_HPP_EAN_11_01_2007
+
+#include <boost/proto/proto_fwd.hpp>
+#include <boost/proto/traits.hpp>
+#include <boost/proto/transform/impl.hpp>
+#include <boost/type_traits/is_array.hpp>
+
+namespace boost { namespace proto
+{
+
+    /// \brief A PrimitiveTransform that returns the current expression
+    /// unmodified
+    ///
+    /// Example:
+    ///
+    /// \code
+    /// proto::terminal<int>::type i = {42};
+    /// proto::terminal<int>::type & j = proto::_expr()(i);
+    /// assert( boost::addressof(i) == boost::addressof(j) );
+    /// \endcode
+    struct _expr : transform<_expr>
+    {
+        template<typename Expr, typename State, typename Data>
+        struct impl : transform_impl<Expr, State, Data>
+        {
+            typedef Expr result_type;
+
+            /// Returns the current expression.
+            /// \param e The current expression.
+            /// \return \c e
+            /// \throw nothrow
+            #ifdef BOOST_PROTO_STRICT_RESULT_OF
+            result_type
+            #else
+            typename impl::expr_param 
+            #endif
+            operator()(
+                typename impl::expr_param e
+              , typename impl::state_param
+              , typename impl::data_param
+            ) const
+            {
+                return e;
+            }
+        };
+    };
+
+    /// \brief A PrimitiveTransform that returns the current state
+    /// unmodified
+    ///
+    /// Example:
+    ///
+    /// \code
+    /// proto::terminal<int>::type i = {42};
+    /// char ch = proto::_state()(i, 'a');
+    /// assert( ch == 'a' );
+    /// \endcode
+    struct _state : transform<_state>
+    {
+        template<typename Expr, typename State, typename Data>
+        struct impl : transform_impl<Expr, State, Data>
+        {
+            typedef State result_type;
+
+            /// Returns the current state.
+            /// \param s The current state.
+            /// \return \c s
+            /// \throw nothrow
+            #ifdef BOOST_PROTO_STRICT_RESULT_OF
+            result_type
+            #else
+            typename impl::state_param 
+            #endif
+            operator ()(
+                typename impl::expr_param
+              , typename impl::state_param s
+              , typename impl::data_param
+            ) const
+            {
+                return s;
+            }
+        };
+    };
+
+    /// \brief A PrimitiveTransform that returns the current data
+    /// unmodified
+    ///
+    /// Example:
+    ///
+    /// \code
+    /// proto::terminal<int>::type i = {42};
+    /// std::string str("hello");
+    /// std::string & data = proto::_data()(i, 'a', str);
+    /// assert( &str == &data );
+    /// \endcode
+    struct _data : transform<_data>
+    {
+        template<typename Expr, typename State, typename Data>
+        struct impl : transform_impl<Expr, State, Data>
+        {
+            typedef Data result_type;
+
+            /// Returns the current data.
+            /// \param d The current data.
+            /// \return \c d
+            /// \throw nothrow
+            #ifdef BOOST_PROTO_STRICT_RESULT_OF
+            result_type
+            #else
+            typename impl::data_param 
+            #endif
+            operator ()(
+                typename impl::expr_param
+              , typename impl::state_param
+              , typename impl::data_param d
+            ) const
+            {
+                return d;
+            }
+        };
+    };
+
+    /// \brief A PrimitiveTransform that returns N-th child of the current
+    /// expression.
+    ///
+    /// Example:
+    ///
+    /// \code
+    /// proto::terminal<int>::type i = {42};
+    /// proto::terminal<int>::type & j = proto::_child_c<0>()(-i);
+    /// assert( boost::addressof(i) == boost::addressof(j) );
+    /// \endcode
+    template<int N>
+    struct _child_c : transform<_child_c<N> >
+    {
+        template<typename Expr, typename State, typename Data>
+        struct impl : transform_impl<Expr, State, Data>
+        {
+            typedef
+                typename result_of::child_c<Expr, N>::type
+            result_type;
+
+            /// Returns the N-th child of \c e
+            /// \pre <tt>arity_of\<Expr\>::value \> N</tt> 
+            /// \param e The current expression.
+            /// \return <tt>proto::child_c\<N\>(e)</tt>
+            /// \throw nothrow
+            #ifdef BOOST_PROTO_STRICT_RESULT_OF
+            result_type
+            #else
+            typename result_of::child_c<typename impl::expr_param, N>::type
+            #endif
+            operator ()(
+                typename impl::expr_param e
+              , typename impl::state_param
+              , typename impl::data_param
+            ) const
+            {
+                return proto::child_c<N>(e);
+            }
+        };
+    };
+
+    /// \brief A PrimitiveTransform that returns the value of the
+    /// current terminal expression.
+    ///
+    /// Example:
+    ///
+    /// \code
+    /// proto::terminal<int>::type i = {42};
+    /// int j = proto::_value()(i);
+    /// assert( 42 == j );
+    /// \endcode
+    struct _value : transform<_value>
+    {
+        template<typename Expr, typename State, typename Data>
+        struct impl : transform_impl<Expr, State, Data>
+        {
+            typedef
+                typename result_of::value<Expr>::type
+            result_type;
+
+            /// Returns the value of the specified terminal expression.
+            /// \pre <tt>arity_of\<Expr\>::value == 0</tt>.
+            /// \param e The current expression.
+            /// \return <tt>proto::value(e)</tt>
+            /// \throw nothrow
+            #ifdef BOOST_PROTO_STRICT_RESULT_OF
+            typename mpl::if_c<is_array<result_type>::value, result_type &, result_type>::type
+            #else
+            typename result_of::value<typename impl::expr_param>::type
+            #endif
+            operator ()(
+                typename impl::expr_param e
+              , typename impl::state_param
+              , typename impl::data_param
+            ) const
+            {
+                return proto::value(e);
+            }
+        };
+    };
+
+    /// \brief A PrimitiveTransform that does nothing
+    /// and returns void.
+    struct _void : transform<_void>
+    {
+        template<typename Expr, typename State, typename Data>
+        struct impl : transform_impl<Expr, State, Data>
+        {
+            typedef void result_type;
+
+            /// Does nothing and returns void
+            void operator ()(
+                typename impl::expr_param
+              , typename impl::state_param
+              , typename impl::data_param
+            ) const
+            {}
+        };
+    };
+
+    /// \brief A unary CallableTransform that wraps its argument
+    /// in a \c boost::reference_wrapper\<\>.
+    ///
+    /// Example:
+    ///
+    /// \code
+    /// proto::terminal<int>::type i = {42};
+    /// boost::reference_wrapper<proto::terminal<int>::type> j
+    ///     = proto::when<_, proto::_byref(_)>()(i);
+    /// assert( boost::addressof(i) == boost::addressof(j.get()) );
+    /// \endcode
+    struct _byref : callable
+    {
+        template<typename Sig>
+        struct result;
+
+        template<typename This, typename T>
+        struct result<This(T)>
+        {
+            typedef boost::reference_wrapper<T const> const type;
+        };
+
+        template<typename This, typename T>
+        struct result<This(T &)>
+        {
+            typedef boost::reference_wrapper<T> const type;
+        };
+
+        /// Wrap the parameter \c t in a \c boost::reference_wrapper\<\>
+        /// \param t The object to wrap
+        /// \return <tt>boost::ref(t)</tt>
+        /// \throw nothrow
+        template<typename T>
+        boost::reference_wrapper<T> const operator ()(T &t) const
+        {
+            return boost::reference_wrapper<T>(t);
+        }
+
+        /// \overload
+        ///
+        template<typename T>
+        boost::reference_wrapper<T const> const operator ()(T const &t) const
+        {
+            return boost::reference_wrapper<T const>(t);
+        }
+    };
+
+    /// \brief A unary CallableTransform that strips references
+    /// and \c boost::reference_wrapper\<\> from its argument.
+    ///
+    /// Example:
+    ///
+    /// \code
+    /// proto::terminal<int>::type i = {42};
+    /// int j = 67;
+    /// int k = proto::when<_, proto::_byval(proto::_state)>()(i, boost::ref(j));
+    /// assert( 67 == k );
+    /// \endcode
+    struct _byval : callable
+    {
+        template<typename Sig>
+        struct result;
+
+        template<typename This, typename T>
+        struct result<This(T)>
+        {
+            typedef T type;
+        };
+
+        template<typename This, typename T>
+        struct result<This(T &)>
+          : result<This(T)>
+        {};
+
+        template<typename This, typename T>
+        struct result<This(boost::reference_wrapper<T>)>
+          : result<This(T)>
+        {};
+
+        /// \param t The object to unref
+        /// \return <tt>t</tt>
+        /// \throw nothrow
+        template<typename T>
+        T operator ()(T const &t) const
+        {
+            return t;
+        }
+
+        /// \overload
+        ///
+        template<typename T>
+        T operator ()(boost::reference_wrapper<T> const &t) const
+        {
+            return t;
+        }
+    };
+
+    /// INTERNAL ONLY
+    ///
+    template<>
+    struct is_callable<_expr>
+      : mpl::true_
+    {};
+
+    /// INTERNAL ONLY
+    ///
+    template<>
+    struct is_callable<_state>
+      : mpl::true_
+    {};
+
+    /// INTERNAL ONLY
+    ///
+    template<>
+    struct is_callable<_data>
+      : mpl::true_
+    {};
+
+    /// INTERNAL ONLY
+    ///
+    template<int N>
+    struct is_callable<_child_c<N> >
+      : mpl::true_
+    {};
+
+    /// INTERNAL ONLY
+    ///
+    template<>
+    struct is_callable<_value>
+      : mpl::true_
+    {};
+
+    /// INTERNAL ONLY
+    ///
+    template<>
+    struct is_callable<_byref>
+      : mpl::true_
+    {};
+
+    /// INTERNAL ONLY
+    ///
+    template<>
+    struct is_callable<_byval>
+      : mpl::true_
+    {};
+
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/transform/call.hpp b/3rdParty/Boost/src/boost/proto/transform/call.hpp
new file mode 100644
index 0000000..12ac454
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/transform/call.hpp
@@ -0,0 +1,416 @@
+#ifndef BOOST_PP_IS_ITERATING
+    ///////////////////////////////////////////////////////////////////////////////
+    /// \file call.hpp
+    /// Contains definition of the call<> transform.
+    //
+    //  Copyright 2008 Eric Niebler. Distributed under the Boost
+    //  Software License, Version 1.0. (See accompanying file
+    //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+    #ifndef BOOST_PROTO_TRANSFORM_CALL_HPP_EAN_11_02_2007
+    #define BOOST_PROTO_TRANSFORM_CALL_HPP_EAN_11_02_2007
+
+    #include <boost/preprocessor/cat.hpp>
+    #include <boost/preprocessor/facilities/intercept.hpp>
+    #include <boost/preprocessor/iteration/iterate.hpp>
+    #include <boost/preprocessor/repetition/enum.hpp>
+    #include <boost/preprocessor/repetition/repeat.hpp>
+    #include <boost/preprocessor/repetition/enum_params.hpp>
+    #include <boost/preprocessor/repetition/enum_binary_params.hpp>
+    #include <boost/preprocessor/repetition/enum_trailing_params.hpp>
+    #include <boost/ref.hpp>
+    #include <boost/utility/result_of.hpp>
+    #include <boost/proto/proto_fwd.hpp>
+    #include <boost/proto/traits.hpp>
+    #include <boost/proto/transform/impl.hpp>
+    #include <boost/proto/detail/as_lvalue.hpp>
+    #include <boost/proto/detail/poly_function.hpp>
+
+    namespace boost { namespace proto
+    {
+        /// \brief Wrap \c PrimitiveTransform so that <tt>when\<\></tt> knows
+        /// it is callable. Requires that the parameter is actually a
+        /// PrimitiveTransform.
+        ///
+        /// This form of <tt>call\<\></tt> is useful for annotating an
+        /// arbitrary PrimitiveTransform as callable when using it with
+        /// <tt>when\<\></tt>. Consider the following transform, which
+        /// is parameterized with another transform.
+        ///
+        /// \code
+        /// template<typename Grammar>
+        /// struct Foo
+        ///   : when<
+        ///         unary_plus<Grammar>
+        ///       , Grammar(_child)   // May or may not work.
+        ///     >
+        /// {};
+        /// \endcode
+        ///
+        /// The problem with the above is that <tt>when\<\></tt> may or
+        /// may not recognize \c Grammar as callable, depending on how
+        /// \c Grammar is implemented. (See <tt>is_callable\<\></tt> for
+        /// a discussion of this issue.) You can guard against
+        /// the issue by wrapping \c Grammar in <tt>call\<\></tt>, such
+        /// as:
+        ///
+        /// \code
+        /// template<typename Grammar>
+        /// struct Foo
+        ///   : when<
+        ///         unary_plus<Grammar>
+        ///       , call<Grammar>(_child)   // OK, this works
+        ///     >
+        /// {};
+        /// \endcode
+        ///
+        /// The above could also have been written as:
+        ///
+        /// \code
+        /// template<typename Grammar>
+        /// struct Foo
+        ///   : when<
+        ///         unary_plus<Grammar>
+        ///       , call<Grammar(_child)>   // OK, this works, too
+        ///     >
+        /// {};
+        /// \endcode
+        template<typename PrimitiveTransform>
+        struct call
+          : PrimitiveTransform
+        {};
+
+        /// \brief Either call the PolymorphicFunctionObject with 0
+        /// arguments, or invoke the PrimitiveTransform with 3
+        /// arguments.
+        template<typename Fun>
+        struct call<Fun()> : transform<call<Fun()> >
+        {
+            /// INTERNAL ONLY
+            template<typename Expr, typename State, typename Data, bool B>
+            struct impl2
+              : transform_impl<Expr, State, Data>
+            {
+                typedef typename BOOST_PROTO_RESULT_OF<Fun()>::type result_type;
+
+                result_type operator()(
+                    typename impl2::expr_param
+                  , typename impl2::state_param
+                  , typename impl2::data_param
+                ) const
+                {
+                    return Fun()();
+                }
+            };
+
+            /// INTERNAL ONLY
+            template<typename Expr, typename State, typename Data>
+            struct impl2<Expr, State, Data, true>
+              : Fun::template impl<Expr, State, Data>
+            {};
+
+            /// Either call the PolymorphicFunctionObject \c Fun with 0 arguments; or
+            /// invoke the PrimitiveTransform \c Fun with 3 arguments: the current
+            /// expression, state, and data.
+            ///
+            /// If \c Fun is a nullary PolymorphicFunctionObject, return <tt>Fun()()</tt>.
+            /// Otherwise, return <tt>Fun()(e, s, d)</tt>.
+            ///
+            /// \param e The current expression
+            /// \param s The current state
+            /// \param d An arbitrary data
+
+            /// If \c Fun is a nullary PolymorphicFunctionObject, \c type is a typedef
+            /// for <tt>boost::result_of\<Fun()\>::type</tt>. Otherwise, it is
+            /// a typedef for <tt>boost::result_of\<Fun(Expr, State, Data)\>::type</tt>.
+            template<typename Expr, typename State, typename Data>
+            struct impl
+              : impl2<Expr, State, Data, is_transform<Fun>::value>
+            {};
+        };
+
+        /// \brief Either call the PolymorphicFunctionObject with 1
+        /// argument, or invoke the PrimitiveTransform with 3
+        /// arguments.
+        template<typename Fun, typename A0>
+        struct call<Fun(A0)> : transform<call<Fun(A0)> >
+        {
+            template<typename Expr, typename State, typename Data, bool B>
+            struct impl2
+              : transform_impl<Expr, State, Data>
+            {
+                typedef typename when<_, A0>::template impl<Expr, State, Data>::result_type a0;
+                typedef typename detail::poly_function_traits<Fun, Fun(a0)>::result_type result_type;
+                result_type operator ()(
+                    typename impl2::expr_param   e
+                  , typename impl2::state_param  s
+                  , typename impl2::data_param   d
+                ) const
+                {
+                    return typename detail::poly_function_traits<Fun, Fun(a0)>::function_type()(
+                        detail::as_lvalue(typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d))
+                    );
+                }
+            };
+
+            template<typename Expr, typename State, typename Data>
+            struct impl2<Expr, State, Data, true>
+              : transform_impl<Expr, State, Data>
+            {
+                typedef typename when<_, A0>::template impl<Expr, State, Data>::result_type a0;
+                typedef typename Fun::template impl<a0, State, Data>::result_type result_type;
+                result_type operator ()(
+                    typename impl2::expr_param   e
+                  , typename impl2::state_param  s
+                  , typename impl2::data_param   d
+                ) const
+                {
+                    return typename Fun::template impl<a0, State, Data>()(
+                        typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d)
+                      , s
+                      , d
+                    );
+                }
+            };
+            /// Let \c x be <tt>when\<_, A0\>()(e, s, d)</tt> and \c X
+            /// be the type of \c x.
+            /// If \c Fun is a unary PolymorphicFunctionObject that accepts \c x,
+            /// then \c type is a typedef for <tt>boost::result_of\<Fun(X)\>::type</tt>.
+            /// Otherwise, it is a typedef for <tt>boost::result_of\<Fun(X, State, Data)\>::type</tt>.
+
+            /// Either call the PolymorphicFunctionObject with 1 argument:
+            /// the result of applying the \c A0 transform; or
+            /// invoke the PrimitiveTransform with 3 arguments:
+            /// result of applying the \c A0 transform, the state, and the
+            /// data.
+            ///
+            /// Let \c x be <tt>when\<_, A0\>()(e, s, d)</tt>.
+            /// If \c Fun is a unary PolymorphicFunctionObject that accepts \c x,
+            /// then return <tt>Fun()(x)</tt>. Otherwise, return
+            /// <tt>Fun()(x, s, d)</tt>.
+            ///
+            /// \param e The current expression
+            /// \param s The current state
+            /// \param d An arbitrary data
+            template<typename Expr, typename State, typename Data>
+            struct impl
+              : impl2<Expr, State, Data, is_transform<Fun>::value>
+            {};
+        };
+
+        /// \brief Either call the PolymorphicFunctionObject with 2
+        /// arguments, or invoke the PrimitiveTransform with 3
+        /// arguments.
+        template<typename Fun, typename A0, typename A1>
+        struct call<Fun(A0, A1)> : transform<call<Fun(A0, A1)> >
+        {
+            template<typename Expr, typename State, typename Data, bool B>
+            struct impl2
+              : transform_impl<Expr, State, Data>
+            {
+                typedef typename when<_, A0>::template impl<Expr, State, Data>::result_type a0;
+                typedef typename when<_, A1>::template impl<Expr, State, Data>::result_type a1;
+                typedef typename detail::poly_function_traits<Fun, Fun(a0, a1)>::result_type result_type;
+                result_type operator ()(
+                    typename impl2::expr_param   e
+                  , typename impl2::state_param  s
+                  , typename impl2::data_param   d
+                ) const
+                {
+                    return typename detail::poly_function_traits<Fun, Fun(a0, a1)>::function_type()(
+                        detail::as_lvalue(typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d))
+                      , detail::as_lvalue(typename when<_, A1>::template impl<Expr, State, Data>()(e, s, d))
+                    );
+                }
+            };
+
+            template<typename Expr, typename State, typename Data>
+            struct impl2<Expr, State, Data, true>
+              : transform_impl<Expr, State, Data>
+            {
+                typedef typename when<_, A0>::template impl<Expr, State, Data>::result_type a0;
+                typedef typename when<_, A1>::template impl<Expr, State, Data>::result_type a1;
+                typedef typename Fun::template impl<a0, a1, Data>::result_type result_type;
+                result_type operator ()(
+                    typename impl2::expr_param   e
+                  , typename impl2::state_param  s
+                  , typename impl2::data_param   d
+                ) const
+                {
+                    return typename Fun::template impl<a0, a1, Data>()(
+                        typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d)
+                      , typename when<_, A1>::template impl<Expr, State, Data>()(e, s, d)
+                      , d
+                    );
+                }
+            };
+
+                /// Let \c x be <tt>when\<_, A0\>()(e, s, d)</tt> and \c X
+                /// be the type of \c x.
+                /// Let \c y be <tt>when\<_, A1\>()(e, s, d)</tt> and \c Y
+                /// be the type of \c y.
+                /// If \c Fun is a binary PolymorphicFunction object that accepts \c x
+                /// and \c y, then \c type is a typedef for
+                /// <tt>boost::result_of\<Fun(X, Y)\>::type</tt>. Otherwise, it is
+                /// a typedef for <tt>boost::result_of\<Fun(X, Y, Data)\>::type</tt>.
+
+            /// Either call the PolymorphicFunctionObject with 2 arguments:
+            /// the result of applying the \c A0 transform, and the
+            /// result of applying the \c A1 transform; or invoke the
+            /// PrimitiveTransform with 3 arguments: the result of applying
+            /// the \c A0 transform, the result of applying the \c A1
+            /// transform, and the data.
+            ///
+            /// Let \c x be <tt>when\<_, A0\>()(e, s, d)</tt>.
+            /// Let \c y be <tt>when\<_, A1\>()(e, s, d)</tt>.
+            /// If \c Fun is a binary PolymorphicFunction object that accepts \c x
+            /// and \c y, return <tt>Fun()(x, y)</tt>. Otherwise, return
+            /// <tt>Fun()(x, y, d)</tt>.
+            ///
+            /// \param e The current expression
+            /// \param s The current state
+            /// \param d An arbitrary data
+            template<typename Expr, typename State, typename Data>
+            struct impl
+              : impl2<Expr, State, Data, is_transform<Fun>::value>
+            {};
+        };
+
+        /// \brief Call the PolymorphicFunctionObject or the
+        /// PrimitiveTransform with the current expression, state
+        /// and data, transformed according to \c A0, \c A1, and
+        /// \c A2, respectively.
+        template<typename Fun, typename A0, typename A1, typename A2>
+        struct call<Fun(A0, A1, A2)> : transform<call<Fun(A0, A1, A2)> >
+        {
+            template<typename Expr, typename State, typename Data, bool B>
+            struct impl2
+              : transform_impl<Expr, State, Data>
+            {
+                typedef typename when<_, A0>::template impl<Expr, State, Data>::result_type a0;
+                typedef typename when<_, A1>::template impl<Expr, State, Data>::result_type a1;
+                typedef typename when<_, A2>::template impl<Expr, State, Data>::result_type a2;
+                typedef typename detail::poly_function_traits<Fun, Fun(a0, a1, a2)>::result_type result_type;
+                result_type operator ()(
+                    typename impl2::expr_param   e
+                  , typename impl2::state_param  s
+                  , typename impl2::data_param   d
+                ) const
+                {
+                    return typename detail::poly_function_traits<Fun, Fun(a0, a1, a2)>::function_type()(
+                        detail::as_lvalue(typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d))
+                      , detail::as_lvalue(typename when<_, A1>::template impl<Expr, State, Data>()(e, s, d))
+                      , detail::as_lvalue(typename when<_, A2>::template impl<Expr, State, Data>()(e, s, d))
+                    );
+                }
+            };
+
+            template<typename Expr, typename State, typename Data>
+            struct impl2<Expr, State, Data, true>
+              : transform_impl<Expr, State, Data>
+            {
+                typedef typename when<_, A0>::template impl<Expr, State, Data>::result_type a0;
+                typedef typename when<_, A1>::template impl<Expr, State, Data>::result_type a1;
+                typedef typename when<_, A2>::template impl<Expr, State, Data>::result_type a2;
+                typedef typename Fun::template impl<a0, a1, a2>::result_type result_type;
+                result_type operator ()(
+                    typename impl2::expr_param   e
+                  , typename impl2::state_param  s
+                  , typename impl2::data_param   d
+                ) const
+                {
+                    return typename Fun::template impl<a0, a1, a2>()(
+                        typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d)
+                      , typename when<_, A1>::template impl<Expr, State, Data>()(e, s, d)
+                      , typename when<_, A2>::template impl<Expr, State, Data>()(e, s, d)
+                    );
+                }
+            };
+
+            /// Let \c x be <tt>when\<_, A0\>()(e, s, d)</tt>.
+            /// Let \c y be <tt>when\<_, A1\>()(e, s, d)</tt>.
+            /// Let \c z be <tt>when\<_, A2\>()(e, s, d)</tt>.
+            /// Return <tt>Fun()(x, y, z)</tt>.
+            ///
+            /// \param e The current expression
+            /// \param s The current state
+            /// \param d An arbitrary data
+
+            template<typename Expr, typename State, typename Data>
+            struct impl
+              : impl2<Expr, State, Data, is_transform<Fun>::value>
+            {};
+        };
+
+        #if BOOST_PROTO_MAX_ARITY > 3
+        #define BOOST_PP_ITERATION_PARAMS_1 (3, (4, BOOST_PROTO_MAX_ARITY, <boost/proto/transform/call.hpp>))
+        #include BOOST_PP_ITERATE()
+        #endif
+
+        /// INTERNAL ONLY
+        ///
+        template<typename Fun>
+        struct is_callable<call<Fun> >
+          : mpl::true_
+        {};
+
+    }} // namespace boost::proto
+
+    #endif
+
+#else
+
+    #define N BOOST_PP_ITERATION()
+
+        /// \brief Call the PolymorphicFunctionObject \c Fun with the
+        /// current expression, state and data, transformed according
+        /// to \c A0 through \c AN.
+        template<typename Fun BOOST_PP_ENUM_TRAILING_PARAMS(N, typename A)>
+        struct call<Fun(BOOST_PP_ENUM_PARAMS(N, A))> : transform<call<Fun(BOOST_PP_ENUM_PARAMS(N, A))> >
+        {
+            template<typename Expr, typename State, typename Data>
+            struct impl : transform_impl<Expr, State, Data>
+            {
+                #define M0(Z, M, DATA)                                                              \
+                    typedef                                                                         \
+                        typename when<_, BOOST_PP_CAT(A, M)>                                        \
+                            ::template impl<Expr, State, Data>                                      \
+                        ::result_type                                                               \
+                    BOOST_PP_CAT(a, M);                                                             \
+                    /**/
+                BOOST_PP_REPEAT(N, M0, ~)
+                #undef M0
+
+                typedef
+                    typename detail::poly_function_traits<Fun, Fun(BOOST_PP_ENUM_PARAMS(N, a))>::result_type
+                result_type;
+
+                /// Let \c ax be <tt>when\<_, Ax\>()(e, s, d)</tt>
+                /// for each \c x in <tt>[0,N]</tt>.
+                /// Return <tt>Fun()(a0, a1,... aN)</tt>.
+                ///
+                /// \param e The current expression
+                /// \param s The current state
+                /// \param d An arbitrary data
+                result_type operator ()(
+                    typename impl::expr_param   e
+                  , typename impl::state_param  s
+                  , typename impl::data_param   d
+                ) const
+                {
+                    #define M0(Z, M, DATA)                                                          \
+                        detail::as_lvalue(                                                          \
+                            typename when<_, BOOST_PP_CAT(A, M)>                                    \
+                                ::template impl<Expr, State, Data>()(e, s, d))                      \
+                        /**/
+                    return typename detail::poly_function_traits<Fun, Fun(BOOST_PP_ENUM_PARAMS(N, a))>::function_type()(
+                        BOOST_PP_ENUM(N, M0, ~)
+                    );
+                    #undef M0
+                }
+            };
+        };
+
+    #undef N
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/transform/default.hpp b/3rdParty/Boost/src/boost/proto/transform/default.hpp
new file mode 100644
index 0000000..ec4a61f
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/transform/default.hpp
@@ -0,0 +1,663 @@
+#ifndef BOOST_PP_IS_ITERATING
+    ///////////////////////////////////////////////////////////////////////////////
+    /// \file default.hpp
+    /// Contains definition of the _default transform, which gives operators their
+    /// usual C++ meanings and uses Boost.Typeof to deduce return types.
+    //
+    //  Copyright 2008 Eric Niebler. Distributed under the Boost
+    //  Software License, Version 1.0. (See accompanying file
+    //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+    #ifndef BOOST_PROTO_TRANSFORM_DEFAULT_HPP_EAN_04_04_2008
+    #define BOOST_PROTO_TRANSFORM_DEFAULT_HPP_EAN_04_04_2008
+
+    #include <boost/preprocessor/iteration/iterate.hpp>
+    #include <boost/preprocessor/repetition/repeat.hpp>
+    #include <boost/preprocessor/arithmetic/add.hpp>
+    #include <boost/preprocessor/arithmetic/sub.hpp>
+    #include <boost/preprocessor/repetition/enum.hpp>
+    #include <boost/preprocessor/repetition/enum_shifted.hpp>
+    #include <boost/preprocessor/repetition/enum_shifted_params.hpp>
+    #include <boost/ref.hpp>
+    #include <boost/get_pointer.hpp>
+    #include <boost/utility/enable_if.hpp>
+    #include <boost/type_traits/is_member_pointer.hpp>
+    #include <boost/type_traits/is_member_object_pointer.hpp>
+    #include <boost/type_traits/is_member_function_pointer.hpp>
+    #include <boost/proto/proto_fwd.hpp>
+    #include <boost/proto/traits.hpp>
+    #include <boost/proto/transform/impl.hpp>
+    #include <boost/proto/transform/arg.hpp>
+    #include <boost/proto/detail/decltype.hpp>
+
+    namespace boost { namespace proto
+    {
+        namespace detail
+        {
+            template<typename Grammar, typename Tag>
+            struct default_case
+              : not_<_>
+            {};
+
+            template<typename Grammar>
+            struct default_case<Grammar, tag::terminal>
+              : when<terminal<_>, _value>
+            {};
+
+            template<typename Grammar>
+            struct default_cases
+            {
+                template<typename Tag>
+                struct case_
+                  : default_case<Grammar, Tag>
+                {};
+            };
+
+            #define BOOST_PROTO_UNARY_DEFAULT_EVAL(OP, TAG, MAKE)                                       \
+            template<typename Grammar>                                                                  \
+            struct BOOST_PP_CAT(default_, TAG)                                                          \
+              : transform<BOOST_PP_CAT(default_, TAG)<Grammar> >                                        \
+            {                                                                                           \
+                template<typename Expr, typename State, typename Data>                                  \
+                struct impl                                                                             \
+                  : transform_impl<Expr, State, Data>                                                   \
+                {                                                                                       \
+                private:                                                                                \
+                    typedef typename result_of::child_c<Expr, 0>::type e0;                              \
+                    typedef typename Grammar::template impl<e0, State, Data>::result_type r0;           \
+                public:                                                                                 \
+                    BOOST_PROTO_DECLTYPE_(OP proto::detail::MAKE<r0>(), result_type)                    \
+                    result_type operator ()(                                                            \
+                        typename impl::expr_param e                                                     \
+                      , typename impl::state_param s                                                    \
+                      , typename impl::data_param d                                                     \
+                    ) const                                                                             \
+                    {                                                                                   \
+                        typename Grammar::template impl<e0, State, Data> t0;                            \
+                        return OP t0(proto::child_c<0>(e), s, d);                                       \
+                    }                                                                                   \
+                };                                                                                      \
+            };                                                                                          \
+                                                                                                        \
+            template<typename Grammar>                                                                  \
+            struct default_case<Grammar, tag::TAG>                                                      \
+              : when<unary_expr<tag::TAG, Grammar>, BOOST_PP_CAT(default_, TAG)<Grammar> >              \
+            {};                                                                                         \
+            /**/
+
+            #define BOOST_PROTO_BINARY_DEFAULT_EVAL(OP, TAG, LMAKE, RMAKE)                              \
+            template<typename Grammar>                                                                  \
+            struct BOOST_PP_CAT(default_, TAG)                                                          \
+              : transform<BOOST_PP_CAT(default_, TAG)<Grammar> >                                        \
+            {                                                                                           \
+                template<typename Expr, typename State, typename Data>                                  \
+                struct impl                                                                             \
+                  : transform_impl<Expr, State, Data>                                                   \
+                {                                                                                       \
+                private:                                                                                \
+                    typedef typename result_of::child_c<Expr, 0>::type e0;                              \
+                    typedef typename result_of::child_c<Expr, 1>::type e1;                              \
+                    typedef typename Grammar::template impl<e0, State, Data>::result_type r0;           \
+                    typedef typename Grammar::template impl<e1, State, Data>::result_type r1;           \
+                public:                                                                                 \
+                    BOOST_PROTO_DECLTYPE_(                                                              \
+                        proto::detail::LMAKE<r0>() OP proto::detail::RMAKE<r1>()                        \
+                      , result_type                                                                     \
+                    )                                                                                   \
+                    result_type operator ()(                                                            \
+                        typename impl::expr_param e                                                     \
+                      , typename impl::state_param s                                                    \
+                      , typename impl::data_param d                                                     \
+                    ) const                                                                             \
+                    {                                                                                   \
+                        typename Grammar::template impl<e0, State, Data> t0;                            \
+                        typename Grammar::template impl<e1, State, Data> t1;                            \
+                        return t0(proto::child_c<0>(e), s, d)                                           \
+                            OP t1(proto::child_c<1>(e), s, d);                                          \
+                    }                                                                                   \
+                };                                                                                      \
+            };                                                                                          \
+                                                                                                        \
+            template<typename Grammar>                                                                  \
+            struct default_case<Grammar, tag::TAG>                                                      \
+              : when<binary_expr<tag::TAG, Grammar, Grammar>, BOOST_PP_CAT(default_, TAG)<Grammar> >    \
+            {};                                                                                         \
+            /**/
+
+            BOOST_PROTO_UNARY_DEFAULT_EVAL(+, unary_plus, make)
+            BOOST_PROTO_UNARY_DEFAULT_EVAL(-, negate, make)
+            BOOST_PROTO_UNARY_DEFAULT_EVAL(*, dereference, make)
+            BOOST_PROTO_UNARY_DEFAULT_EVAL(~, complement, make)
+            BOOST_PROTO_UNARY_DEFAULT_EVAL(&, address_of, make)
+            BOOST_PROTO_UNARY_DEFAULT_EVAL(!, logical_not, make)
+            BOOST_PROTO_UNARY_DEFAULT_EVAL(++, pre_inc, make_mutable)
+            BOOST_PROTO_UNARY_DEFAULT_EVAL(--, pre_dec, make_mutable)
+
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(<<, shift_left, make_mutable, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(>>, shift_right, make_mutable, make_mutable)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(*, multiplies, make, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(/, divides, make, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(%, modulus, make, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(+, plus, make, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(-, minus, make, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(<, less, make, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(>, greater, make, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(<=, less_equal, make, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(>=, greater_equal, make, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(==, equal_to, make, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(!=, not_equal_to, make, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(||, logical_or, make, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(&&, logical_and, make, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(&, bitwise_and, make, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(|, bitwise_or, make, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(^, bitwise_xor, make, make)
+
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(=, assign, make_mutable, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(<<=, shift_left_assign, make_mutable, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(>>=, shift_right_assign, make_mutable, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(*=, multiplies_assign, make_mutable, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(/=, divides_assign, make_mutable, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(%=, modulus_assign, make_mutable, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(+=, plus_assign, make_mutable, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(-=, minus_assign, make_mutable, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(&=, bitwise_and_assign, make_mutable, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(|=, bitwise_or_assign, make_mutable, make)
+            BOOST_PROTO_BINARY_DEFAULT_EVAL(^=, bitwise_xor_assign, make_mutable, make)
+
+            #undef BOOST_PROTO_UNARY_DEFAULT_EVAL
+            #undef BOOST_PROTO_BINARY_DEFAULT_EVAL
+
+            /// INTERNAL ONLY
+            template<typename Grammar, typename Expr, typename State, typename Data>
+            struct is_member_function_invocation
+              : is_member_function_pointer<
+                    typename uncvref<
+                        typename Grammar::template impl<
+                            typename result_of::child_c<Expr, 1>::type
+                            , State
+                            , Data
+                        >::result_type
+                    >::type
+                >
+            {};
+
+            /// INTERNAL ONLY
+            template<typename Grammar, typename Expr, typename State, typename Data, bool IsMemFunCall>
+            struct default_mem_ptr_impl
+              : transform_impl<Expr, State, Data>
+            {
+            private:
+                typedef typename result_of::child_c<Expr, 0>::type e0;
+                typedef typename result_of::child_c<Expr, 1>::type e1;
+                typedef typename Grammar::template impl<e0, State, Data>::result_type r0;
+                typedef typename Grammar::template impl<e1, State, Data>::result_type r1;
+            public:
+                typedef typename detail::mem_ptr_fun<r0, r1>::result_type result_type;
+                result_type operator ()(
+                    typename default_mem_ptr_impl::expr_param e
+                  , typename default_mem_ptr_impl::state_param s
+                  , typename default_mem_ptr_impl::data_param d
+                ) const
+                {
+                    typename Grammar::template impl<e0, State, Data> t0;
+                    typename Grammar::template impl<e1, State, Data> t1;
+                    return detail::mem_ptr_fun<r0, r1>()(
+                        t0(proto::child_c<0>(e), s, d)
+                      , t1(proto::child_c<1>(e), s, d)
+                    );
+                }
+            };
+
+            /// INTERNAL ONLY
+            template<typename Grammar, typename Expr, typename State, typename Data>
+            struct default_mem_ptr_impl<Grammar, Expr, State, Data, true>
+              : transform_impl<Expr, State, Data>
+            {
+            private:
+                typedef typename result_of::child_c<Expr, 0>::type e0;
+                typedef typename result_of::child_c<Expr, 1>::type e1;
+                typedef typename Grammar::template impl<e0, State, Data>::result_type r0;
+                typedef typename Grammar::template impl<e1, State, Data>::result_type r1;
+            public:
+                typedef detail::memfun<r0, r1> result_type;
+                result_type const operator ()(
+                    typename default_mem_ptr_impl::expr_param e
+                  , typename default_mem_ptr_impl::state_param s
+                  , typename default_mem_ptr_impl::data_param d
+                ) const
+                {
+                    typename Grammar::template impl<e0, State, Data> t0;
+                    typename Grammar::template impl<e1, State, Data> t1;
+                    return detail::memfun<r0, r1>(
+                        t0(proto::child_c<0>(e), s, d)
+                      , t1(proto::child_c<1>(e), s, d)
+                    );
+                }
+            };
+
+            template<typename Grammar>
+            struct default_mem_ptr
+              : transform<default_mem_ptr<Grammar> >
+            {
+                template<typename Expr, typename State, typename Data>
+                struct impl
+                  : default_mem_ptr_impl<
+                        Grammar
+                      , Expr
+                      , State
+                      , Data
+                      , is_member_function_invocation<Grammar, Expr, State, Data>::value
+                    >
+                {};
+            };
+
+            template<typename Grammar>
+            struct default_case<Grammar, tag::mem_ptr>
+              : when<mem_ptr<Grammar, Grammar>, default_mem_ptr<Grammar> >
+            {};
+
+            template<typename Grammar>
+            struct default_post_inc
+              : transform<default_post_inc<Grammar> >
+            {
+                template<typename Expr, typename State, typename Data>
+                struct impl
+                  : transform_impl<Expr, State, Data>
+                {
+                private:
+                    typedef typename result_of::child_c<Expr, 0>::type e0;
+                    typedef typename Grammar::template impl<e0, State, Data>::result_type r0;
+                public:
+                    BOOST_PROTO_DECLTYPE_(proto::detail::make_mutable<r0>() ++, result_type)
+                    result_type operator ()(
+                        typename impl::expr_param e
+                      , typename impl::state_param s
+                      , typename impl::data_param d
+                    ) const
+                    {
+                        typename Grammar::template impl<e0, State, Data> t0;
+                        return t0(proto::child_c<0>(e), s, d) ++;
+                    }
+                };
+            };
+
+            template<typename Grammar>
+            struct default_case<Grammar, tag::post_inc>
+              : when<post_inc<Grammar>, default_post_inc<Grammar> >
+            {};
+
+            template<typename Grammar>
+            struct default_post_dec
+              : transform<default_post_dec<Grammar> >
+            {
+                template<typename Expr, typename State, typename Data>
+                struct impl
+                  : transform_impl<Expr, State, Data>
+                {
+                private:
+                    typedef typename result_of::child_c<Expr, 0>::type e0;
+                    typedef typename Grammar::template impl<e0, State, Data>::result_type r0;
+                public:
+                    BOOST_PROTO_DECLTYPE_(proto::detail::make_mutable<r0>() --, result_type)
+                    result_type operator ()(
+                        typename impl::expr_param e
+                      , typename impl::state_param s
+                      , typename impl::data_param d
+                    ) const
+                    {
+                        typename Grammar::template impl<e0, State, Data> t0;
+                        return t0(proto::child_c<0>(e), s, d) --;
+                    }
+                };
+            };
+
+            template<typename Grammar>
+            struct default_case<Grammar, tag::post_dec>
+              : when<post_dec<Grammar>, default_post_dec<Grammar> >
+            {};
+
+            template<typename Grammar>
+            struct default_subscript
+              : transform<default_subscript<Grammar> >
+            {
+                template<typename Expr, typename State, typename Data>
+                struct impl
+                  : transform_impl<Expr, State, Data>
+                {
+                private:
+                    typedef typename result_of::child_c<Expr, 0>::type e0;
+                    typedef typename result_of::child_c<Expr, 1>::type e1;
+                    typedef typename Grammar::template impl<e0, State, Data>::result_type r0;
+                    typedef typename Grammar::template impl<e1, State, Data>::result_type r1;
+                public:
+                    BOOST_PROTO_DECLTYPE_(
+                        proto::detail::make_subscriptable<r0>() [ proto::detail::make<r1>() ]
+                      , result_type
+                    )
+                    result_type operator ()(
+                        typename impl::expr_param e
+                      , typename impl::state_param s
+                      , typename impl::data_param d
+                    ) const
+                    {
+                        typename Grammar::template impl<e0, State, Data> t0;
+                        typename Grammar::template impl<e1, State, Data> t1;
+                        return t0(proto::child_c<0>(e), s, d) [
+                               t1(proto::child_c<1>(e), s, d) ];
+                    }
+                };
+            };
+
+            template<typename Grammar>
+            struct default_case<Grammar, tag::subscript>
+              : when<subscript<Grammar, Grammar>, default_subscript<Grammar> >
+            {};
+
+            template<typename Grammar>
+            struct default_if_else_
+            {
+                template<typename Expr, typename State, typename Data>
+                struct impl
+                  : transform_impl<Expr, State, Data>
+                {
+                private:
+                    typedef typename result_of::child_c<Expr, 0>::type e0;
+                    typedef typename result_of::child_c<Expr, 1>::type e1;
+                    typedef typename result_of::child_c<Expr, 2>::type e2;
+                    typedef typename Grammar::template impl<e0, State, Data>::result_type r0;
+                    typedef typename Grammar::template impl<e1, State, Data>::result_type r1;
+                    typedef typename Grammar::template impl<e2, State, Data>::result_type r2;
+                public:
+                    BOOST_PROTO_DECLTYPE_(
+                        proto::detail::make<r0>()
+                      ? proto::detail::make<r1>()
+                      : proto::detail::make<r2>()
+                      , result_type
+                    )
+                    result_type operator ()(
+                        typename impl::expr_param e
+                      , typename impl::state_param s
+                      , typename impl::data_param d
+                    ) const
+                    {
+                        typename Grammar::template impl<e0, State, Data> t0;
+                        typename Grammar::template impl<e1, State, Data> t1;
+                        typename Grammar::template impl<e2, State, Data> t2;
+                        return t0(proto::child_c<0>(e), s, d)
+                             ? t1(proto::child_c<1>(e), s, d)
+                             : t2(proto::child_c<2>(e), s, d);
+                    }
+                };
+            };
+
+            template<typename Grammar>
+            struct default_case<Grammar, tag::if_else_>
+              : when<if_else_<Grammar, Grammar, Grammar>, default_if_else_<Grammar> >
+            {};
+
+            template<typename Grammar>
+            struct default_comma
+              : transform<default_comma<Grammar> >
+            {
+                template<typename Expr, typename State, typename Data>
+                struct impl
+                  : transform_impl<Expr, State, Data>
+                {
+                private:
+                    typedef typename result_of::child_c<Expr, 0>::type e0;
+                    typedef typename result_of::child_c<Expr, 1>::type e1;
+                    typedef typename Grammar::template impl<e0, State, Data>::result_type r0;
+                    typedef typename Grammar::template impl<e1, State, Data>::result_type r1;
+                public:
+                    typedef typename proto::detail::comma_result<r0, r1>::type result_type;
+                    result_type operator ()(
+                        typename impl::expr_param e
+                      , typename impl::state_param s
+                      , typename impl::data_param d
+                    ) const
+                    {
+                        typename Grammar::template impl<e0, State, Data> t0;
+                        typename Grammar::template impl<e1, State, Data> t1;
+                        return t0(proto::child_c<0>(e), s, d)
+                             , t1(proto::child_c<1>(e), s, d);
+                    }
+                };
+            };
+
+            template<typename Grammar>
+            struct default_case<Grammar, tag::comma>
+              : when<comma<Grammar, Grammar>, default_comma<Grammar> >
+            {};
+
+            template<typename Grammar, typename Expr, typename State, typename Data, long Arity>
+            struct default_function_impl;
+
+            template<typename Grammar>
+            struct default_function
+              : transform<default_function<Grammar> >
+            {
+                template<typename Expr, typename State, typename Data>
+                struct impl
+                  : default_function_impl<
+                        Grammar
+                      , Expr
+                      , State
+                      , Data
+                      , transform_impl<Expr, State, Data>::expr::proto_arity_c
+                    >
+                {};
+            };
+
+            template<typename Grammar>
+            struct default_case<Grammar, tag::function>
+              : when<function<Grammar, vararg<Grammar> >, default_function<Grammar> >
+            {};
+
+            #define BOOST_PROTO_DEFAULT_EVAL_TYPE(Z, N, DATA)                                       \
+                typedef                                                                             \
+                    typename result_of::child_c<DATA, N>::type                                      \
+                BOOST_PP_CAT(e, N);                                                                 \
+                                                                                                    \
+                typedef                                                                             \
+                    typename Grammar::template impl<BOOST_PP_CAT(e, N), State, Data>::result_type   \
+                BOOST_PP_CAT(r, N);                                                                 \
+                /**/
+
+            #define BOOST_PROTO_DEFAULT_EVAL(Z, N, DATA)                                            \
+                typename Grammar::template impl<BOOST_PP_CAT(e, N), State, Data>()(                 \
+                    proto::child_c<N>(DATA), s, d                                                   \
+                )                                                                                   \
+                /**/
+
+            template<typename Grammar, typename Expr, typename State, typename Data>
+            struct default_function_impl<Grammar, Expr, State, Data, 1>
+              : transform_impl<Expr, State, Data>
+            {
+                BOOST_PROTO_DEFAULT_EVAL_TYPE(~, 0, Expr)
+
+                typedef
+                    typename proto::detail::result_of_fixup<r0>::type
+                function_type;
+
+                typedef
+                    typename BOOST_PROTO_RESULT_OF<function_type()>::type
+                result_type;
+
+                result_type operator ()(
+                    typename default_function_impl::expr_param e
+                  , typename default_function_impl::state_param s
+                  , typename default_function_impl::data_param d
+                ) const
+                {
+                    return BOOST_PROTO_DEFAULT_EVAL(~, 0, e)();
+                }
+            };
+
+            template<typename Grammar, typename Expr, typename State, typename Data>
+            struct default_function_impl<Grammar, Expr, State, Data, 2>
+              : transform_impl<Expr, State, Data>
+            {
+                BOOST_PROTO_DEFAULT_EVAL_TYPE(~, 0, Expr)
+                BOOST_PROTO_DEFAULT_EVAL_TYPE(~, 1, Expr)
+
+                typedef
+                    typename proto::detail::result_of_fixup<r0>::type
+                function_type;
+
+                typedef
+                    typename detail::result_of_<function_type(r1)>::type
+                result_type;
+
+                result_type operator ()(
+                    typename default_function_impl::expr_param e
+                  , typename default_function_impl::state_param s
+                  , typename default_function_impl::data_param d
+                ) const
+                {
+                    return this->invoke(
+                        e
+                      , s
+                      , d
+                      , is_member_function_pointer<function_type>()
+                      , is_member_object_pointer<function_type>()
+                    );
+                }
+
+            private:
+                result_type invoke(
+                    typename default_function_impl::expr_param e
+                  , typename default_function_impl::state_param s
+                  , typename default_function_impl::data_param d
+                  , mpl::false_
+                  , mpl::false_
+                ) const
+                {
+                    return BOOST_PROTO_DEFAULT_EVAL(~, 0, e)(BOOST_PROTO_DEFAULT_EVAL(~, 1, e));
+                }
+
+                result_type invoke(
+                    typename default_function_impl::expr_param e
+                  , typename default_function_impl::state_param s
+                  , typename default_function_impl::data_param d
+                  , mpl::true_
+                  , mpl::false_
+                ) const
+                {
+                    BOOST_PROTO_USE_GET_POINTER();
+                    typedef typename detail::classtypeof<function_type>::type class_type;
+                    return (
+                        BOOST_PROTO_GET_POINTER(class_type, BOOST_PROTO_DEFAULT_EVAL(~, 1, e)) ->* 
+                        BOOST_PROTO_DEFAULT_EVAL(~, 0, e)
+                    )();
+                }
+
+                result_type invoke(
+                    typename default_function_impl::expr_param e
+                  , typename default_function_impl::state_param s
+                  , typename default_function_impl::data_param d
+                  , mpl::false_
+                  , mpl::true_
+                ) const
+                {
+                    BOOST_PROTO_USE_GET_POINTER();
+                    typedef typename detail::classtypeof<function_type>::type class_type;
+                    return (
+                        BOOST_PROTO_GET_POINTER(class_type, BOOST_PROTO_DEFAULT_EVAL(~, 1, e)) ->*
+                        BOOST_PROTO_DEFAULT_EVAL(~, 0, e)
+                    );
+                }
+            };
+
+            #define BOOST_PP_ITERATION_PARAMS_1 (3, (3, BOOST_PROTO_MAX_ARITY, <boost/proto/transform/default.hpp>))
+            #include BOOST_PP_ITERATE()
+
+            #undef BOOST_PROTO_DEFAULT_EVAL_TYPE
+            #undef BOOST_PROTO_DEFAULT_EVAL
+        }
+
+        template<typename Grammar /*= detail::_default*/>
+        struct _default
+          : switch_<detail::default_cases<Grammar> >
+        {};
+
+        template<typename Grammar>
+        struct is_callable<_default<Grammar> >
+          : mpl::true_
+        {};
+
+        namespace detail
+        {
+            // Loopy indirection that allows proto::_default<> to be
+            // used without specifying a Grammar argument.
+            struct _default
+              : proto::_default<>
+            {};
+        }
+
+    }}
+
+    #endif
+
+#else
+
+    #define N BOOST_PP_ITERATION()
+
+        template<typename Grammar, typename Expr, typename State, typename Data>
+        struct default_function_impl<Grammar, Expr, State, Data, N>
+          : transform_impl<Expr, State, Data>
+        {
+            BOOST_PP_REPEAT(N, BOOST_PROTO_DEFAULT_EVAL_TYPE, Expr)
+
+            typedef
+                typename proto::detail::result_of_fixup<r0>::type
+            function_type;
+
+            typedef
+                typename BOOST_PROTO_RESULT_OF<
+                    function_type(BOOST_PP_ENUM_SHIFTED_PARAMS(N, r))
+                >::type
+            result_type;
+
+            result_type operator ()(
+                typename default_function_impl::expr_param e
+              , typename default_function_impl::state_param s
+              , typename default_function_impl::data_param d
+            ) const
+            {
+                return this->invoke(e, s, d, is_member_function_pointer<function_type>());
+            }
+
+        private:
+            result_type invoke(
+                typename default_function_impl::expr_param e
+              , typename default_function_impl::state_param s
+              , typename default_function_impl::data_param d
+              , mpl::false_
+            ) const
+            {
+                return BOOST_PROTO_DEFAULT_EVAL(~, 0, e)(
+                    BOOST_PP_ENUM_SHIFTED(N, BOOST_PROTO_DEFAULT_EVAL, e)
+                );
+            }
+
+            result_type invoke(
+                typename default_function_impl::expr_param e
+              , typename default_function_impl::state_param s
+              , typename default_function_impl::data_param d
+              , mpl::true_
+            ) const
+            {
+                #define M0(Z, M, DATA) BOOST_PROTO_DEFAULT_EVAL(Z, BOOST_PP_ADD(M, 2), DATA)
+                BOOST_PROTO_USE_GET_POINTER();
+                typedef typename detail::classtypeof<function_type>::type class_type;
+                return (
+                    BOOST_PROTO_GET_POINTER(class_type, BOOST_PROTO_DEFAULT_EVAL(~, 1, e)) ->* 
+                    BOOST_PROTO_DEFAULT_EVAL(~, 0, e)
+                )(BOOST_PP_ENUM(BOOST_PP_SUB(N, 2), M0, e));
+                #undef M0
+            }
+        };
+
+    #undef N
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/transform/fold.hpp b/3rdParty/Boost/src/boost/proto/transform/fold.hpp
new file mode 100644
index 0000000..b459bc6
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/transform/fold.hpp
@@ -0,0 +1,338 @@
+#ifndef BOOST_PP_IS_ITERATING
+    ///////////////////////////////////////////////////////////////////////////////
+    /// \file fold.hpp
+    /// Contains definition of the fold<> and reverse_fold<> transforms.
+    //
+    //  Copyright 2008 Eric Niebler. Distributed under the Boost
+    //  Software License, Version 1.0. (See accompanying file
+    //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+    #ifndef BOOST_PROTO_TRANSFORM_FOLD_HPP_EAN_11_04_2007
+    #define BOOST_PROTO_TRANSFORM_FOLD_HPP_EAN_11_04_2007
+
+    #include <boost/version.hpp>
+    #include <boost/preprocessor/cat.hpp>
+    #include <boost/preprocessor/iteration/iterate.hpp>
+    #include <boost/preprocessor/arithmetic/inc.hpp>
+    #include <boost/preprocessor/arithmetic/sub.hpp>
+    #include <boost/preprocessor/repetition/repeat.hpp>
+    #include <boost/fusion/include/fold.hpp>
+    #include <boost/proto/proto_fwd.hpp>
+    #include <boost/proto/fusion.hpp>
+    #include <boost/proto/functional/fusion/reverse.hpp>
+    #include <boost/proto/traits.hpp>
+    #include <boost/proto/transform/call.hpp>
+    #include <boost/proto/transform/impl.hpp>
+
+    namespace boost { namespace proto
+    {
+        namespace detail
+        {
+            template<typename Transform, typename Data>
+            struct as_callable
+            {
+                as_callable(Data d)
+                  : d_(d)
+                {}
+
+                template<typename Sig>
+                struct result;
+
+                #if BOOST_VERSION >= 104200
+
+                template<typename This, typename State, typename Expr>
+                struct result<This(State, Expr)>
+                {
+                    typedef
+                        typename when<_, Transform>::template impl<Expr, State, Data>::result_type
+                    type;
+                };
+
+                template<typename State, typename Expr>
+                typename when<_, Transform>::template impl<Expr &, State const &, Data>::result_type
+                operator ()(State const &s, Expr &e) const
+                {
+                    return typename when<_, Transform>::template impl<Expr &, State const &, Data>()(e, s, this->d_);
+                }
+
+                #else
+
+                template<typename This, typename Expr, typename State>
+                struct result<This(Expr, State)>
+                {
+                    typedef
+                        typename when<_, Transform>::template impl<Expr, State, Data>::result_type
+                    type;
+                };
+
+                template<typename Expr, typename State>
+                typename when<_, Transform>::template impl<Expr &, State const &, Data>::result_type
+                operator ()(Expr &e, State const &s) const
+                {
+                    return typename when<_, Transform>::template impl<Expr &, State const &, Data>()(e, s, this->d_);
+                }
+
+                #endif
+
+            private:
+                Data d_;
+            };
+
+            template<
+                typename State0
+              , typename Fun
+              , typename Expr
+              , typename State
+              , typename Data
+              , long Arity = arity_of<Expr>::value
+            >
+            struct fold_impl
+            {};
+
+            template<
+                typename State0
+              , typename Fun
+              , typename Expr
+              , typename State
+              , typename Data
+              , long Arity = arity_of<Expr>::value
+            >
+            struct reverse_fold_impl
+            {};
+
+            #define BOOST_PROTO_CHILD_N_TYPE(N)\
+                BOOST_PP_CAT(proto_child, N)\
+                /**/
+
+            #define BOOST_PROTO_FOLD_STATE_TYPE(Z, N, DATA)                                     \
+                typedef                                                                         \
+                    typename when<_, Fun>::template impl<                                       \
+                        typename result_of::child_c<Expr, N>::type                              \
+                      , BOOST_PP_CAT(state, N)                                                  \
+                      , Data                                                                    \
+                    >::result_type                                                              \
+                BOOST_PP_CAT(state, BOOST_PP_INC(N));                                           \
+                /**/
+
+            #define BOOST_PROTO_FOLD_STATE(Z, N, DATA)                                          \
+                BOOST_PP_CAT(state, BOOST_PP_INC(N))                                            \
+                BOOST_PP_CAT(s, BOOST_PP_INC(N))                                                \
+                  = typename when<_, Fun>::template impl<                                       \
+                        typename result_of::child_c<Expr, N>::type                              \
+                      , BOOST_PP_CAT(state, N)                                                  \
+                      , Data                                                                    \
+                    >()(                                                                        \
+                        proto::child_c<N>(e)                                                 \
+                      , BOOST_PP_CAT(s, N)                                                      \
+                      , d                                                                    \
+                    );                                                                          \
+                /**/
+
+            #define BOOST_PROTO_REVERSE_FOLD_STATE_TYPE(Z, N, DATA)                             \
+                typedef                                                                         \
+                    typename when<_, Fun>::template impl<                                       \
+                        typename result_of::child_c<                                            \
+                            Expr                                                                \
+                          , BOOST_PP_SUB(DATA, BOOST_PP_INC(N))                                 \
+                        >::type                                                                 \
+                      , BOOST_PP_CAT(state, BOOST_PP_SUB(DATA, N))                              \
+                      , Data                                                                    \
+                    >::result_type                                                              \
+                BOOST_PP_CAT(state, BOOST_PP_SUB(DATA, BOOST_PP_INC(N)));                       \
+                /**/
+
+            #define BOOST_PROTO_REVERSE_FOLD_STATE(Z, N, DATA)                                  \
+                BOOST_PP_CAT(state, BOOST_PP_SUB(DATA, BOOST_PP_INC(N)))                        \
+                BOOST_PP_CAT(s, BOOST_PP_SUB(DATA, BOOST_PP_INC(N)))                            \
+                  = typename when<_, Fun>::template impl<                                       \
+                        typename result_of::child_c<                                            \
+                            Expr                                                                \
+                          , BOOST_PP_SUB(DATA, BOOST_PP_INC(N))                                 \
+                        >::type                                                                 \
+                      , BOOST_PP_CAT(state, BOOST_PP_SUB(DATA, N))                              \
+                      , Data                                                                    \
+                    >()(                                                                        \
+                        proto::child_c<BOOST_PP_SUB(DATA, BOOST_PP_INC(N))>(e)               \
+                      , BOOST_PP_CAT(s, BOOST_PP_SUB(DATA, N))                                  \
+                      , d                                                                    \
+                    );                                                                          \
+                /**/
+
+            #define BOOST_PP_ITERATION_PARAMS_1 (3, (1, BOOST_PROTO_MAX_ARITY, <boost/proto/transform/fold.hpp>))
+            #include BOOST_PP_ITERATE()
+
+            #undef BOOST_PROTO_REVERSE_FOLD_STATE
+            #undef BOOST_PROTO_REVERSE_FOLD_STATE_TYPE
+            #undef BOOST_PROTO_FOLD_STATE
+            #undef BOOST_PROTO_FOLD_STATE_TYPE
+            #undef BOOST_PROTO_CHILD_N_TYPE
+
+        } // namespace detail
+
+        /// \brief A PrimitiveTransform that invokes the <tt>fusion::fold\<\></tt>
+        /// algorithm to accumulate
+        template<typename Sequence, typename State0, typename Fun>
+        struct fold : transform<fold<Sequence, State0, Fun> >
+        {
+            template<typename Expr, typename State, typename Data>
+            struct impl : transform_impl<Expr, State, Data>
+            {
+                /// \brief A Fusion sequence.
+                typedef
+                    typename remove_reference<
+                        typename when<_, Sequence>::template impl<Expr, State, Data>::result_type
+                    >::type
+                sequence;
+
+                /// \brief An initial state for the fold.
+                typedef
+                    typename remove_reference<
+                        typename when<_, State0>::template impl<Expr, State, Data>::result_type
+                    >::type
+                state0;
+
+                /// \brief <tt>fun(d)(e,s) == when\<_,Fun\>()(e,s,d)</tt>
+                typedef
+                    detail::as_callable<Fun, Data>
+                fun;
+
+                typedef
+                    typename fusion::result_of::fold<
+                        sequence
+                      , state0
+                      , fun
+                    >::type
+                result_type;
+
+                /// Let \c seq be <tt>when\<_, Sequence\>()(e, s, d)</tt>, let
+                /// \c state0 be <tt>when\<_, State0\>()(e, s, d)</tt>, and
+                /// let \c fun(d) be an object such that <tt>fun(d)(e, s)</tt>
+                /// is equivalent to <tt>when\<_, Fun\>()(e, s, d)</tt>. Then, this
+                /// function returns <tt>fusion::fold(seq, state0, fun(d))</tt>.
+                ///
+                /// \param e The current expression
+                /// \param s The current state
+                /// \param d An arbitrary data
+                result_type operator ()(
+                    typename impl::expr_param   e
+                  , typename impl::state_param  s
+                  , typename impl::data_param   d
+                ) const
+                {
+                    typename when<_, Sequence>::template impl<Expr, State, Data> seq;
+                    detail::as_callable<Fun, Data> f(d);
+                    return fusion::fold(
+                        seq(e, s, d)
+                      , typename when<_, State0>::template impl<Expr, State, Data>()(e, s, d)
+                      , f
+                    );
+                }
+            };
+        };
+
+        /// \brief A PrimitiveTransform that is the same as the
+        /// <tt>fold\<\></tt> transform, except that it folds
+        /// back-to-front instead of front-to-back. It uses
+        /// the \c _reverse callable PolymorphicFunctionObject
+        /// to create a <tt>fusion::reverse_view\<\></tt> of the
+        /// sequence before invoking <tt>fusion::fold\<\></tt>.
+        template<typename Sequence, typename State0, typename Fun>
+        struct reverse_fold
+          : fold<call<_reverse(Sequence)>, State0, Fun>
+        {};
+
+        // This specialization is only for improved compile-time performance
+        // in the commom case when the Sequence transform is \c proto::_.
+        //
+        /// INTERNAL ONLY
+        ///
+        template<typename State0, typename Fun>
+        struct fold<_, State0, Fun> : transform<fold<_, State0, Fun> >
+        {
+            template<typename Expr, typename State, typename Data>
+            struct impl
+              : detail::fold_impl<State0, Fun, Expr, State, Data>
+            {};
+        };
+
+        // This specialization is only for improved compile-time performance
+        // in the commom case when the Sequence transform is \c proto::_.
+        //
+        /// INTERNAL ONLY
+        ///
+        template<typename State0, typename Fun>
+        struct reverse_fold<_, State0, Fun> : transform<reverse_fold<_, State0, Fun> >
+        {
+            template<typename Expr, typename State, typename Data>
+            struct impl
+              : detail::reverse_fold_impl<State0, Fun, Expr, State, Data>
+            {};
+        };
+
+        /// INTERNAL ONLY
+        ///
+        template<typename Sequence, typename State, typename Fun>
+        struct is_callable<fold<Sequence, State, Fun> >
+          : mpl::true_
+        {};
+
+        /// INTERNAL ONLY
+        ///
+        template<typename Sequence, typename State, typename Fun>
+        struct is_callable<reverse_fold<Sequence, State, Fun> >
+          : mpl::true_
+        {};
+
+    }}
+
+    #endif
+
+#else
+
+    #define N BOOST_PP_ITERATION()
+
+            template<typename State0, typename Fun, typename Expr, typename State, typename Data>
+            struct fold_impl<State0, Fun, Expr, State, Data, N>
+              : transform_impl<Expr, State, Data>
+            {
+                typedef typename when<_, State0>::template impl<Expr, State, Data>::result_type state0;
+                BOOST_PP_REPEAT(N, BOOST_PROTO_FOLD_STATE_TYPE, N)
+                typedef BOOST_PP_CAT(state, N) result_type;
+
+                result_type operator ()(
+                    typename fold_impl::expr_param e
+                  , typename fold_impl::state_param s
+                  , typename fold_impl::data_param d
+                ) const
+                {
+                    state0 s0 =
+                        typename when<_, State0>::template impl<Expr, State, Data>()(e, s, d);
+                    BOOST_PP_REPEAT(N, BOOST_PROTO_FOLD_STATE, N)
+                    return BOOST_PP_CAT(s, N);
+                }
+            };
+
+            template<typename State0, typename Fun, typename Expr, typename State, typename Data>
+            struct reverse_fold_impl<State0, Fun, Expr, State, Data, N>
+              : transform_impl<Expr, State, Data>
+            {
+                typedef typename when<_, State0>::template impl<Expr, State, Data>::result_type BOOST_PP_CAT(state, N);
+                BOOST_PP_REPEAT(N, BOOST_PROTO_REVERSE_FOLD_STATE_TYPE, N)
+                typedef state0 result_type;
+
+                result_type operator ()(
+                    typename reverse_fold_impl::expr_param e
+                  , typename reverse_fold_impl::state_param s
+                  , typename reverse_fold_impl::data_param d
+                ) const
+                {
+                    BOOST_PP_CAT(state, N) BOOST_PP_CAT(s, N) =
+                        typename when<_, State0>::template impl<Expr, State, Data>()(e, s, d);
+                    BOOST_PP_REPEAT(N, BOOST_PROTO_REVERSE_FOLD_STATE, N)
+                    return s0;
+                }
+            };
+
+    #undef N
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/transform/fold_tree.hpp b/3rdParty/Boost/src/boost/proto/transform/fold_tree.hpp
new file mode 100644
index 0000000..ace2c21
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/transform/fold_tree.hpp
@@ -0,0 +1,182 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file fold_tree.hpp
+/// Contains definition of the fold_tree<> and reverse_fold_tree<> transforms.
+//
+//  Copyright 2008 Eric Niebler. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROTO_TRANSFORM_FOLD_TREE_HPP_EAN_11_05_2007
+#define BOOST_PROTO_TRANSFORM_FOLD_TREE_HPP_EAN_11_05_2007
+
+#include <boost/type_traits/is_same.hpp>
+#include <boost/proto/proto_fwd.hpp>
+#include <boost/proto/traits.hpp>
+#include <boost/proto/matches.hpp>
+#include <boost/proto/transform/fold.hpp>
+#include <boost/proto/transform/impl.hpp>
+
+namespace boost { namespace proto
+{
+    namespace detail
+    {
+        template<typename Tag>
+        struct has_tag
+        {
+            template<typename Expr, typename State, typename Data, typename EnableIf = Tag>
+            struct impl
+            {
+                typedef mpl::false_ result_type;
+            };
+
+            template<typename Expr, typename State, typename Data>
+            struct impl<Expr, State, Data, typename Expr::proto_tag>
+            {
+                typedef mpl::true_ result_type;
+            };
+
+            template<typename Expr, typename State, typename Data>
+            struct impl<Expr &, State, Data, typename Expr::proto_tag>
+            {
+                typedef mpl::true_ result_type;
+            };
+        };
+
+        template<typename Tag, typename Fun>
+        struct fold_tree_
+          : if_<has_tag<Tag>, fold<_, _state, fold_tree_<Tag, Fun> >, Fun>
+        {};
+
+        template<typename Tag, typename Fun>
+        struct reverse_fold_tree_
+          : if_<has_tag<Tag>, reverse_fold<_, _state, reverse_fold_tree_<Tag, Fun> >, Fun>
+        {};
+    }
+
+    /// \brief A PrimitiveTransform that recursively applies the
+    /// <tt>fold\<\></tt> transform to sub-trees that all share a common
+    /// tag type.
+    ///
+    /// <tt>fold_tree\<\></tt> is useful for flattening trees into lists;
+    /// for example, you might use <tt>fold_tree\<\></tt> to flatten an
+    /// expression tree like <tt>a | b | c</tt> into a Fusion list like
+    /// <tt>cons(c, cons(b, cons(a)))</tt>.
+    ///
+    /// <tt>fold_tree\<\></tt> is easily understood in terms of a
+    /// <tt>recurse_if_\<\></tt> helper, defined as follows:
+    ///
+    /// \code
+    /// template<typename Tag, typename Fun>
+    /// struct recurse_if_
+    ///   : if_<
+    ///         // If the current node has type type "Tag" ...
+    ///         is_same<tag_of<_>, Tag>()
+    ///         // ... recurse, otherwise ...
+    ///       , fold<_, _state, recurse_if_<Tag, Fun> >
+    ///         // ... apply the Fun transform.
+    ///       , Fun
+    ///     >
+    /// {};
+    /// \endcode
+    ///
+    /// With <tt>recurse_if_\<\></tt> as defined above,
+    /// <tt>fold_tree\<Sequence, State0, Fun\>()(e, s, d)</tt> is
+    /// equivalent to
+    /// <tt>fold<Sequence, State0, recurse_if_<Expr::proto_tag, Fun> >()(e, s, d).</tt>
+    /// It has the effect of folding a tree front-to-back, recursing into
+    /// child nodes that share a tag type with the parent node.
+    template<typename Sequence, typename State0, typename Fun>
+    struct fold_tree
+      : transform<fold_tree<Sequence, State0, Fun> >
+    {
+        template<typename Expr, typename State, typename Data>
+        struct impl
+          : fold<
+                Sequence
+              , State0
+              , detail::fold_tree_<typename Expr::proto_tag, Fun>
+            >::template impl<Expr, State, Data>
+        {};
+
+        template<typename Expr, typename State, typename Data>
+        struct impl<Expr &, State, Data>
+          : fold<
+                Sequence
+              , State0
+              , detail::fold_tree_<typename Expr::proto_tag, Fun>
+            >::template impl<Expr &, State, Data>
+        {};
+    };
+
+    /// \brief A PrimitiveTransform that recursively applies the
+    /// <tt>reverse_fold\<\></tt> transform to sub-trees that all share
+    /// a common tag type.
+    ///
+    /// <tt>reverse_fold_tree\<\></tt> is useful for flattening trees into
+    /// lists; for example, you might use <tt>reverse_fold_tree\<\></tt> to
+    /// flatten an expression tree like <tt>a | b | c</tt> into a Fusion list
+    /// like <tt>cons(a, cons(b, cons(c)))</tt>.
+    ///
+    /// <tt>reverse_fold_tree\<\></tt> is easily understood in terms of a
+    /// <tt>recurse_if_\<\></tt> helper, defined as follows:
+    ///
+    /// \code
+    /// template<typename Tag, typename Fun>
+    /// struct recurse_if_
+    ///   : if_<
+    ///         // If the current node has type type "Tag" ...
+    ///         is_same<tag_of<_>, Tag>()
+    ///         // ... recurse, otherwise ...
+    ///       , reverse_fold<_, _state, recurse_if_<Tag, Fun> >
+    ///         // ... apply the Fun transform.
+    ///       , Fun
+    ///     >
+    /// {};
+    /// \endcode
+    ///
+    /// With <tt>recurse_if_\<\></tt> as defined above,
+    /// <tt>reverse_fold_tree\<Sequence, State0, Fun\>()(e, s, d)</tt> is
+    /// equivalent to
+    /// <tt>reverse_fold<Sequence, State0, recurse_if_<Expr::proto_tag, Fun> >()(e, s, d).</tt>
+    /// It has the effect of folding a tree back-to-front, recursing into
+    /// child nodes that share a tag type with the parent node.
+    template<typename Sequence, typename State0, typename Fun>
+    struct reverse_fold_tree
+      : transform<reverse_fold_tree<Sequence, State0, Fun> >
+    {
+        template<typename Expr, typename State, typename Data>
+        struct impl
+          : reverse_fold<
+                Sequence
+              , State0
+              , detail::reverse_fold_tree_<typename Expr::proto_tag, Fun>
+            >::template impl<Expr, State, Data>
+        {};
+
+        template<typename Expr, typename State, typename Data>
+        struct impl<Expr &, State, Data>
+          : reverse_fold<
+                Sequence
+              , State0
+              , detail::reverse_fold_tree_<typename Expr::proto_tag, Fun>
+            >::template impl<Expr &, State, Data>
+        {};
+    };
+
+    /// INTERNAL ONLY
+    ///
+    template<typename Sequence, typename State0, typename Fun>
+    struct is_callable<fold_tree<Sequence, State0, Fun> >
+      : mpl::true_
+    {};
+
+    /// INTERNAL ONLY
+    ///
+    template<typename Sequence, typename State0, typename Fun>
+    struct is_callable<reverse_fold_tree<Sequence, State0, Fun> >
+      : mpl::true_
+    {};
+
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/transform/impl.hpp b/3rdParty/Boost/src/boost/proto/transform/impl.hpp
new file mode 100644
index 0000000..22e9337
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/transform/impl.hpp
@@ -0,0 +1,189 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file impl.hpp
+/// Contains definition of transform<> and transform_impl<> helpers.
+//
+//  Copyright 2008 Eric Niebler. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROTO_TRANSFORM_IMPL_HPP_EAN_04_03_2008
+#define BOOST_PROTO_TRANSFORM_IMPL_HPP_EAN_04_03_2008
+
+#include <boost/proto/proto_fwd.hpp>
+
+namespace boost { namespace proto
+{
+    /// INTERNAL ONLY
+    ///
+    #define BOOST_PROTO_TRANSFORM_(PrimitiveTransform, X)                                                       \
+    BOOST_PROTO_CALLABLE()                                                                                      \
+    typedef X proto_is_transform_;                                                                              \
+    typedef PrimitiveTransform transform_type;                                                                  \
+                                                                                                                \
+    template<typename Sig>                                                                                      \
+    struct result                                                                                               \
+    {                                                                                                           \
+        typedef typename boost::proto::detail::apply_transform<Sig>::result_type type;                          \
+    };                                                                                                          \
+                                                                                                                \
+    template<typename Expr>                                                                                     \
+    typename boost::proto::detail::apply_transform<transform_type(Expr &)>::result_type                         \
+    operator ()(Expr &e) const                                                                                  \
+    {                                                                                                           \
+        int i = 0;                                                                                              \
+        return boost::proto::detail::apply_transform<transform_type(Expr &)>()(e, i, i);                        \
+    }                                                                                                           \
+                                                                                                                \
+    template<typename Expr, typename State>                                                                     \
+    typename boost::proto::detail::apply_transform<transform_type(Expr &, State &)>::result_type                \
+    operator ()(Expr &e, State &s) const                                                                        \
+    {                                                                                                           \
+        int i = 0;                                                                                              \
+        return boost::proto::detail::apply_transform<transform_type(Expr &, State &)>()(e, s, i);               \
+    }                                                                                                           \
+                                                                                                                \
+    template<typename Expr, typename State>                                                                     \
+    typename boost::proto::detail::apply_transform<transform_type(Expr &, State const &)>::result_type          \
+    operator ()(Expr &e, State const &s) const                                                                  \
+    {                                                                                                           \
+        int i = 0;                                                                                              \
+        return boost::proto::detail::apply_transform<transform_type(Expr &, State const &)>()(e, s, i);         \
+    }                                                                                                           \
+                                                                                                                \
+    template<typename Expr, typename State, typename Data>                                                      \
+    typename boost::proto::detail::apply_transform<transform_type(Expr &, State &, Data &)>::result_type        \
+    operator ()(Expr &e, State &s, Data &d) const                                                               \
+    {                                                                                                           \
+        return boost::proto::detail::apply_transform<transform_type(Expr &, State &, Data &)>()(e, s, d);       \
+    }                                                                                                           \
+                                                                                                                \
+    template<typename Expr, typename State, typename Data>                                                      \
+    typename boost::proto::detail::apply_transform<transform_type(Expr &, State const &, Data &)>::result_type  \
+    operator ()(Expr &e, State const &s, Data &d) const                                                         \
+    {                                                                                                           \
+        return boost::proto::detail::apply_transform<transform_type(Expr &, State const &, Data &)>()(e, s, d); \
+    }                                                                                                           \
+    /**/
+
+    #define BOOST_PROTO_TRANSFORM(PrimitiveTransform)                                                           \
+        BOOST_PROTO_TRANSFORM_(PrimitiveTransform, void)                                                        \
+        /**/
+
+    namespace detail
+    {
+        template<typename Sig>
+        struct apply_transform;
+
+        template<typename PrimitiveTransform, typename Expr>
+        struct apply_transform<PrimitiveTransform(Expr)>
+          : PrimitiveTransform::template impl<Expr, int, int>
+        {};
+
+        template<typename PrimitiveTransform, typename Expr, typename State>
+        struct apply_transform<PrimitiveTransform(Expr, State)>
+          : PrimitiveTransform::template impl<Expr, State, int>
+        {};
+
+        template<typename PrimitiveTransform, typename Expr, typename State, typename Data>
+        struct apply_transform<PrimitiveTransform(Expr, State, Data)>
+          : PrimitiveTransform::template impl<Expr, State, Data>
+        {};
+    }
+
+    template<typename PrimitiveTransform, typename X>
+    struct transform
+    {
+        BOOST_PROTO_TRANSFORM_(PrimitiveTransform, X)
+    };
+
+    template<typename Expr, typename State, typename Data>
+    struct transform_impl
+    {
+        typedef Expr const expr;
+        typedef Expr const &expr_param;
+        typedef State const state;
+        typedef State const &state_param;
+        typedef Data const data;
+        typedef Data const &data_param;
+    };
+
+    template<typename Expr, typename State, typename Data>
+    struct transform_impl<Expr &, State, Data>
+    {
+        typedef Expr expr;
+        typedef Expr &expr_param;
+        typedef State const state;
+        typedef State const &state_param;
+        typedef Data const data;
+        typedef Data const &data_param;
+    };
+
+    template<typename Expr, typename State, typename Data>
+    struct transform_impl<Expr, State &, Data>
+    {
+        typedef Expr const expr;
+        typedef Expr const &expr_param;
+        typedef State state;
+        typedef State &state_param;
+        typedef Data const data;
+        typedef Data const &data_param;
+    };
+
+    template<typename Expr, typename State, typename Data>
+    struct transform_impl<Expr, State, Data &>
+    {
+        typedef Expr const expr;
+        typedef Expr const &expr_param;
+        typedef State const state;
+        typedef State const &state_param;
+        typedef Data data;
+        typedef Data &data_param;
+    };
+
+    template<typename Expr, typename State, typename Data>
+    struct transform_impl<Expr &, State &, Data>
+    {
+        typedef Expr expr;
+        typedef Expr &expr_param;
+        typedef State state;
+        typedef State &state_param;
+        typedef Data const data;
+        typedef Data const &data_param;
+    };
+
+    template<typename Expr, typename State, typename Data>
+    struct transform_impl<Expr &, State, Data &>
+    {
+        typedef Expr expr;
+        typedef Expr &expr_param;
+        typedef State const state;
+        typedef State const &state_param;
+        typedef Data data;
+        typedef Data &data_param;
+    };
+
+    template<typename Expr, typename State, typename Data>
+    struct transform_impl<Expr, State &, Data &>
+    {
+        typedef Expr const expr;
+        typedef Expr const &expr_param;
+        typedef State state;
+        typedef State &state_param;
+        typedef Data data;
+        typedef Data &data_param;
+    };
+
+    template<typename Expr, typename State, typename Data>
+    struct transform_impl<Expr &, State &, Data &>
+    {
+        typedef Expr expr;
+        typedef Expr &expr_param;
+        typedef State state;
+        typedef State &state_param;
+        typedef Data data;
+        typedef Data &data_param;
+    };
+
+}} // namespace boost::proto
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/transform/lazy.hpp b/3rdParty/Boost/src/boost/proto/transform/lazy.hpp
new file mode 100644
index 0000000..09581a9
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/transform/lazy.hpp
@@ -0,0 +1,83 @@
+#ifndef BOOST_PP_IS_ITERATING
+    ///////////////////////////////////////////////////////////////////////////////
+    /// \file lazy.hpp
+    /// Contains definition of the lazy<> transform.
+    //
+    //  Copyright 2008 Eric Niebler. Distributed under the Boost
+    //  Software License, Version 1.0. (See accompanying file
+    //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+    #ifndef BOOST_PROTO_TRANSFORM_LAZY_HPP_EAN_12_02_2007
+    #define BOOST_PROTO_TRANSFORM_LAZY_HPP_EAN_12_02_2007
+
+    #include <boost/preprocessor/iteration/iterate.hpp>
+    #include <boost/preprocessor/repetition/enum_params.hpp>
+    #include <boost/preprocessor/repetition/enum_trailing_params.hpp>
+    #include <boost/proto/proto_fwd.hpp>
+    #include <boost/proto/transform/make.hpp>
+    #include <boost/proto/transform/call.hpp>
+    #include <boost/proto/transform/impl.hpp>
+
+    namespace boost { namespace proto
+    {
+        /// \brief A PrimitiveTransform that uses <tt>make\<\></tt> to build
+        /// a CallableTransform, and then uses <tt>call\<\></tt> to apply it.
+        ///
+        /// <tt>lazy\<\></tt> is useful as a higher-order transform, when the
+        /// transform to be applied depends on the current state of the
+        /// transformation. The invocation of the <tt>make\<\></tt> transform
+        /// evaluates any nested transforms, and the resulting type is treated
+        /// as a CallableTransform, which is evaluated with <tt>call\<\></tt>.
+        template<typename Object>
+        struct lazy : transform<lazy<Object> >
+        {
+            template<typename Expr, typename State, typename Data>
+            struct impl
+              : call<
+                    typename make<Object>::template impl<Expr, State, Data>::result_type
+                >::template impl<Expr, State, Data>
+            {};
+        };
+
+    #define BOOST_PP_ITERATION_PARAMS_1 (3, (0, BOOST_PROTO_MAX_ARITY, <boost/proto/transform/lazy.hpp>))
+    #include BOOST_PP_ITERATE()
+
+        /// INTERNAL ONLY
+        ///
+        template<typename Object>
+        struct is_callable<lazy<Object> >
+          : mpl::true_
+        {};
+
+    }}
+
+    #endif
+
+#else
+
+    #define N BOOST_PP_ITERATION()
+
+        /// \brief A PrimitiveTransform that uses <tt>make\<\></tt> to build
+        /// a CallableTransform, and then uses <tt>call\<\></tt> to apply it.
+        ///
+        /// <tt>lazy\<\></tt> is useful as a higher-order transform, when the
+        /// transform to be applied depends on the current state of the
+        /// transformation. The invocation of the <tt>make\<\></tt> transform
+        /// evaluates any nested transforms, and the resulting type is treated
+        /// as a CallableTransform, which is evaluated with <tt>call\<\></tt>.
+        template<typename Object BOOST_PP_ENUM_TRAILING_PARAMS(N, typename A)>
+        struct lazy<Object(BOOST_PP_ENUM_PARAMS(N, A))>
+          : transform<lazy<Object(BOOST_PP_ENUM_PARAMS(N, A))> >
+        {
+            template<typename Expr, typename State, typename Data>
+            struct impl
+              : call<
+                    typename make<Object>::template impl<Expr, State, Data>::result_type
+                    (BOOST_PP_ENUM_PARAMS(N, A))
+                >::template impl<Expr, State, Data>
+            {};
+        };
+
+    #undef N
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/transform/make.hpp b/3rdParty/Boost/src/boost/proto/transform/make.hpp
new file mode 100644
index 0000000..964886c
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/transform/make.hpp
@@ -0,0 +1,472 @@
+#ifndef BOOST_PP_IS_ITERATING
+    ///////////////////////////////////////////////////////////////////////////////
+    /// \file make.hpp
+    /// Contains definition of the make<> transform.
+    //
+    //  Copyright 2008 Eric Niebler. Distributed under the Boost
+    //  Software License, Version 1.0. (See accompanying file
+    //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+    #ifndef BOOST_PROTO_TRANSFORM_MAKE_HPP_EAN_12_02_2007
+    #define BOOST_PROTO_TRANSFORM_MAKE_HPP_EAN_12_02_2007
+
+    #include <boost/detail/workaround.hpp>
+    #include <boost/preprocessor/repetition/enum.hpp>
+    #include <boost/preprocessor/repetition/enum_params.hpp>
+    #include <boost/preprocessor/repetition/enum_trailing_params.hpp>
+    #include <boost/preprocessor/repetition/enum_binary_params.hpp>
+    #include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
+    #include <boost/preprocessor/repetition/repeat_from_to.hpp>
+    #include <boost/preprocessor/facilities/intercept.hpp>
+    #include <boost/preprocessor/cat.hpp>
+    #include <boost/preprocessor/iteration/iterate.hpp>
+    #include <boost/preprocessor/selection/max.hpp>
+    #include <boost/preprocessor/arithmetic/inc.hpp>
+    #include <boost/mpl/and.hpp>
+    #include <boost/mpl/aux_/has_type.hpp>
+    #include <boost/mpl/aux_/template_arity.hpp>
+    #include <boost/mpl/aux_/lambda_arity_param.hpp>
+    #include <boost/utility/result_of.hpp>
+    #include <boost/proto/proto_fwd.hpp>
+    #include <boost/proto/traits.hpp>
+    #include <boost/proto/args.hpp>
+    #include <boost/proto/transform/impl.hpp>
+    #include <boost/proto/detail/as_lvalue.hpp>
+    #include <boost/proto/detail/ignore_unused.hpp>
+
+    namespace boost { namespace proto
+    {
+        namespace detail
+        {
+            template<typename T>
+            struct is_applyable
+              : mpl::and_<is_callable<T>, is_transform<T> >
+            {};
+
+            template<typename T, bool HasType = mpl::aux::has_type<T>::value>
+            struct nested_type
+            {
+                typedef typename T::type type;
+            };
+
+            template<typename T>
+            struct nested_type<T, false>
+            {
+                typedef T type;
+            };
+
+            template<typename T, bool Applied>
+            struct nested_type_if
+            {
+                typedef T type;
+                static bool const applied = false;
+            };
+
+            template<typename T>
+            struct nested_type_if<T, true>
+              : nested_type<T>
+            {
+                static bool const applied = true;
+            };
+
+            template<
+                typename R
+              , typename Expr, typename State, typename Data
+                BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(long Arity = mpl::aux::template_arity<R>::value)
+            >
+            struct make_
+            {
+                typedef R type;
+                static bool const applied = false;
+            };
+
+            template<
+                typename R
+              , typename Expr, typename State, typename Data
+              , bool IsApplyable = is_applyable<R>::value
+            >
+            struct make_if_
+              : make_<R, Expr, State, Data>
+            {};
+
+            template<typename R, typename Expr, typename State, typename Data>
+            struct make_if_<R, Expr, State, Data, true>
+              : uncvref<typename when<_, R>::template impl<Expr, State, Data>::result_type>
+            {
+                static bool const applied = true;
+            };
+
+            #if BOOST_WORKAROUND(__GNUC__, == 3) || (__GNUC__ == 4 && __GNUC_MINOR__ == 0)
+            // work around GCC bug
+            template<typename Tag, typename Args, long N, typename Expr, typename State, typename Data>
+            struct make_if_<proto::expr<Tag, Args, N>, Expr, State, Data, false>
+            {
+                typedef proto::expr<Tag, Args, N> type;
+                static bool const applied = false;
+            };
+
+            // work around GCC bug
+            template<typename Tag, typename Args, long N, typename Expr, typename State, typename Data>
+            struct make_if_<proto::basic_expr<Tag, Args, N>, Expr, State, Data, false>
+            {
+                typedef proto::basic_expr<Tag, Args, N> type;
+                static bool const applied = false;
+            };
+            #endif
+
+            template<typename Type, bool IsAggregate = is_aggregate<Type>::value>
+            struct construct_
+            {
+                typedef Type result_type;
+
+                Type operator ()() const
+                {
+                    return Type();
+                }
+
+                #define TMP(Z, N, DATA)                                                             \
+                template<BOOST_PP_ENUM_PARAMS_Z(Z, N, typename A)>                                  \
+                Type operator ()(BOOST_PP_ENUM_BINARY_PARAMS_Z(Z, N, A, &a)) const                  \
+                {                                                                                   \
+                    return Type(BOOST_PP_ENUM_PARAMS_Z(Z, N, a));                                   \
+                }
+                BOOST_PP_REPEAT_FROM_TO(1, BOOST_PP_INC(BOOST_PROTO_MAX_ARITY), TMP, ~)
+                #undef TMP
+            };
+
+            template<typename Type>
+            struct construct_<Type, true>
+            {
+                typedef Type result_type;
+
+                Type operator ()() const
+                {
+                    return Type();
+                }
+
+                #define TMP(Z, N, DATA)                                                             \
+                template<BOOST_PP_ENUM_PARAMS_Z(Z, N, typename A)>                                  \
+                Type operator ()(BOOST_PP_ENUM_BINARY_PARAMS_Z(Z, N, A, &a)) const                  \
+                {                                                                                   \
+                    Type that = {BOOST_PP_ENUM_PARAMS_Z(Z, N, a)};                                  \
+                    return that;                                                                    \
+                }
+                BOOST_PP_REPEAT_FROM_TO(1, BOOST_PP_INC(BOOST_PROTO_MAX_ARITY), TMP, ~)
+                #undef TMP
+            };
+
+            #define TMP(Z, N, DATA)                                                                 \
+            template<typename Type BOOST_PP_ENUM_TRAILING_PARAMS_Z(Z, N, typename A)>               \
+            Type construct(BOOST_PP_ENUM_BINARY_PARAMS_Z(Z, N, A, &a))                              \
+            {                                                                                       \
+                return construct_<Type>()(BOOST_PP_ENUM_PARAMS_Z(Z, N, a));                         \
+            }
+            BOOST_PP_REPEAT(BOOST_PROTO_MAX_ARITY, TMP, ~)
+            #undef TMP
+        }
+
+        /// \brief A PrimitiveTransform which prevents another PrimitiveTransform
+        /// from being applied in an \c ObjectTransform.
+        ///
+        /// When building higher order transforms with <tt>make\<\></tt> or
+        /// <tt>lazy\<\></tt>, you sometimes would like to build types that
+        /// are parameterized with Proto transforms. In such lambda-style
+        /// transforms, Proto will unhelpfully find all nested transforms
+        /// and apply them, even if you don't want them to be applied. Consider
+        /// the following transform, which will replace the \c _ in
+        /// <tt>Bar<_>()</tt> with <tt>proto::terminal\<int\>::type</tt>:
+        ///
+        /// \code
+        /// template<typename T>
+        /// struct Bar
+        /// {};
+        /// 
+        /// struct Foo
+        ///   : proto::when<_, Bar<_>() >
+        /// {};
+        /// 
+        /// proto::terminal<int>::type i = {0};
+        /// 
+        /// int main()
+        /// {
+        ///     Foo()(i);
+        ///     std::cout << typeid(Foo()(i)).name() << std::endl;
+        /// }
+        /// \endcode
+        ///
+        /// If you actually wanted to default-construct an object of type
+        /// <tt>Bar\<_\></tt>, you would have to protect the \c _ to prevent
+        /// it from being applied. You can use <tt>proto::protect\<\></tt>
+        /// as follows:
+        ///
+        /// \code
+        /// // OK: replace anything with Bar<_>()
+        /// struct Foo
+        ///   : proto::when<_, Bar<protect<_> >() >
+        /// {};
+        /// \endcode
+        template<typename PrimitiveTransform>
+        struct protect : transform<protect<PrimitiveTransform> >
+        {
+            template<typename, typename, typename>
+            struct impl
+            {
+                typedef PrimitiveTransform result_type;
+            };
+        };
+
+        /// \brief A PrimitiveTransform which computes a type by evaluating any
+        /// nested transforms and then constructs an object of that type.
+        ///
+        /// The <tt>make\<\></tt> transform checks to see if \c Object is a template.
+        /// If it is, the template type is disassembled to find nested transforms.
+        /// Proto considers the following types to represent transforms:
+        ///
+        /// \li Function types
+        /// \li Function pointer types
+        /// \li Types for which <tt>proto::is_callable\< type \>::value</tt> is \c true
+        ///
+        /// <tt>boost::result_of\<make\<T\<X0,X1,...\> \>(Expr, State, Data)\>::type</tt>
+        /// is evaluated as follows. For each \c X in <tt>X0,X1,...</tt>, do:
+        ///
+        /// \li If \c X is a template like <tt>U\<Y0,Y1,...\></tt>, then let <tt>X'</tt>
+        ///     be <tt>boost::result_of\<make\<U\<Y0,Y1,...\> \>(Expr, State, Data)\>::type</tt>
+        ///     (which evaluates this procedure recursively). Note whether any
+        ///     substitutions took place during this operation.
+        /// \li Otherwise, if \c X is a transform, then let <tt>X'</tt> be
+        ///     <tt>boost::result_of\<when\<_, X\>(Expr, State, Data)\>::type</tt>.
+        ///     Note that a substitution took place.
+        /// \li Otherwise, let <tt>X'</tt> be \c X, and note that no substitution
+        ///     took place.
+        /// \li If any substitutions took place in any of the above steps and
+        ///     <tt>T\<X0',X1',...\></tt> has a nested <tt>::type</tt> typedef,
+        ///     the result type is <tt>T\<X0',X1',...\>::type</tt>.
+        /// \li Otherwise, the result type is <tt>T\<X0',X1',...\></tt>.
+        ///
+        /// Note that <tt>when\<\></tt> is implemented in terms of <tt>call\<\></tt>
+        /// and <tt>make\<\></tt>, so the above procedure is evaluated recursively.
+        template<typename Object>
+        struct make : transform<make<Object> >
+        {
+            template<typename Expr, typename State, typename Data>
+            struct impl : transform_impl<Expr, State, Data>
+            {
+                typedef typename detail::make_if_<Object, Expr, State, Data>::type result_type;
+
+                /// \return <tt>result_type()</tt>
+                result_type operator ()(
+                    typename impl::expr_param
+                  , typename impl::state_param
+                  , typename impl::data_param
+                ) const
+                {
+                    return result_type();
+                }
+            };
+        };
+
+        #define BOOST_PP_ITERATION_PARAMS_1 (3, (0, BOOST_PROTO_MAX_ARITY, <boost/proto/transform/make.hpp>))
+        #include BOOST_PP_ITERATE()
+
+        /// INTERNAL ONLY
+        ///
+        template<typename Object>
+        struct is_callable<make<Object> >
+          : mpl::true_
+        {};
+
+        /// INTERNAL ONLY
+        ///
+        template<typename PrimitiveTransform>
+        struct is_callable<protect<PrimitiveTransform> >
+          : mpl::true_
+        {};
+
+    }}
+
+    #endif
+
+#else
+
+    #define N BOOST_PP_ITERATION()
+
+        namespace detail
+        {
+            #if N > 0
+            #define TMP0(Z, M, DATA) make_if_<BOOST_PP_CAT(A, M), Expr, State, Data>
+            #define TMP1(Z, M, DATA) typename TMP0(Z, M, DATA) ::type
+            #define TMP2(Z, M, DATA) TMP0(Z, M, DATA) ::applied ||
+
+            template<
+                template<BOOST_PP_ENUM_PARAMS(N, typename BOOST_PP_INTERCEPT)> class R
+                BOOST_PP_ENUM_TRAILING_PARAMS(N, typename A)
+              , typename Expr, typename State, typename Data
+            >
+            struct make_<
+                R<BOOST_PP_ENUM_PARAMS(N, A)>
+              , Expr, State, Data
+                BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(N)
+            >
+              : nested_type_if<R<BOOST_PP_ENUM(N, TMP1, ~)>, (BOOST_PP_REPEAT(N, TMP2, ~) false)>
+            {};
+
+            template<
+                template<BOOST_PP_ENUM_PARAMS(N, typename BOOST_PP_INTERCEPT)> class R
+                BOOST_PP_ENUM_TRAILING_PARAMS(N, typename A)
+              , typename Expr, typename State, typename Data
+            >
+            struct make_<
+                noinvoke<R<BOOST_PP_ENUM_PARAMS(N, A)> >
+              , Expr, State, Data
+                BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(1)
+            >
+            {
+                typedef R<BOOST_PP_ENUM(N, TMP1, ~)> type;
+                static bool const applied = true;
+            };
+
+            #undef TMP0
+            #undef TMP1
+            #undef TMP2
+            #endif
+
+            template<typename R BOOST_PP_ENUM_TRAILING_PARAMS(N, typename A)>
+            struct is_applyable<R(BOOST_PP_ENUM_PARAMS(N, A))>
+              : mpl::true_
+            {};
+
+            template<typename R BOOST_PP_ENUM_TRAILING_PARAMS(N, typename A)>
+            struct is_applyable<R(*)(BOOST_PP_ENUM_PARAMS(N, A))>
+              : mpl::true_
+            {};
+
+            template<typename T, typename A>
+            struct construct_<proto::expr<T, A, N>, true>
+            {
+                typedef proto::expr<T, A, N> result_type;
+
+                template<BOOST_PP_ENUM_PARAMS(BOOST_PP_MAX(N, 1), typename A)>
+                result_type operator ()(BOOST_PP_ENUM_BINARY_PARAMS(BOOST_PP_MAX(N, 1), A, &a)) const
+                {
+                    return result_type::make(BOOST_PP_ENUM_PARAMS(BOOST_PP_MAX(N, 1), a));
+                }
+            };
+
+            template<typename T, typename A>
+            struct construct_<proto::basic_expr<T, A, N>, true>
+            {
+                typedef proto::basic_expr<T, A, N> result_type;
+
+                template<BOOST_PP_ENUM_PARAMS(BOOST_PP_MAX(N, 1), typename A)>
+                result_type operator ()(BOOST_PP_ENUM_BINARY_PARAMS(BOOST_PP_MAX(N, 1), A, &a)) const
+                {
+                    return result_type::make(BOOST_PP_ENUM_PARAMS(BOOST_PP_MAX(N, 1), a));
+                }
+            };
+        }
+
+        /// \brief A PrimitiveTransform which computes a type by evaluating any
+        /// nested transforms and then constructs an object of that type with the
+        /// current expression, state and data, transformed according
+        /// to \c A0 through \c AN.
+        template<typename Object BOOST_PP_ENUM_TRAILING_PARAMS(N, typename A)>
+        struct make<Object(BOOST_PP_ENUM_PARAMS(N, A))>
+          : transform<make<Object(BOOST_PP_ENUM_PARAMS(N, A))> >
+        {
+            template<typename Expr, typename State, typename Data>
+            struct impl : transform_impl<Expr, State, Data>
+            {
+                /// \brief <tt>boost::result_of\<make\<Object\>(Expr, State, Data)\>::type</tt>
+                typedef typename detail::make_if_<Object, Expr, State, Data>::type result_type;
+
+                /// Let \c ax be <tt>when\<_, Ax\>()(e, s, d)</tt>
+                /// for each \c x in <tt>[0,N]</tt>.
+                /// Return <tt>result_type(a0, a1,... aN)</tt>.
+                ///
+                /// \param e The current expression
+                /// \param s The current state
+                /// \param d An arbitrary data
+                result_type operator ()(
+                    typename impl::expr_param   e
+                  , typename impl::state_param  s
+                  , typename impl::data_param   d
+                ) const
+                {
+                    proto::detail::ignore_unused(e);
+                    proto::detail::ignore_unused(s);
+                    proto::detail::ignore_unused(d);
+                    return detail::construct<result_type>(
+                        #define TMP(Z, M, DATA)                                                     \
+                            detail::as_lvalue(                                                      \
+                                typename when<_, BOOST_PP_CAT(A, M)>                                \
+                                    ::template impl<Expr, State, Data>()(e, s, d)                   \
+                            )
+                        BOOST_PP_ENUM(N, TMP, DATA)
+                        #undef TMP
+                    );
+                }
+            };
+        };
+
+        #if BOOST_WORKAROUND(__GNUC__, == 3) || (__GNUC__ == 4 && __GNUC_MINOR__ == 0)
+        // work around GCC bug
+        template<typename Tag, typename Args, long Arity BOOST_PP_ENUM_TRAILING_PARAMS(N, typename A)>
+        struct make<proto::expr<Tag, Args, Arity>(BOOST_PP_ENUM_PARAMS(N, A))>
+          : transform<make<proto::expr<Tag, Args, Arity>(BOOST_PP_ENUM_PARAMS(N, A))> >
+        {
+            template<typename Expr, typename State, typename Data>
+            struct impl : transform_impl<Expr, State, Data>
+            {
+                typedef proto::expr<Tag, Args, Arity> result_type;
+
+                result_type operator ()(
+                    typename impl::expr_param   e
+                  , typename impl::state_param  s
+                  , typename impl::data_param   d
+                ) const
+                {
+                    return proto::expr<Tag, Args, Arity>::make(
+                        #define TMP(Z, M, DATA)                                                     \
+                            detail::as_lvalue(                                                      \
+                                typename when<_, BOOST_PP_CAT(A, M)>                                \
+                                    ::template impl<Expr, State, Data>()(e, s, d)                   \
+                            )
+                        BOOST_PP_ENUM(N, TMP, DATA)
+                        #undef TMP
+                    );
+                }
+            };
+        };
+
+        template<typename Tag, typename Args, long Arity BOOST_PP_ENUM_TRAILING_PARAMS(N, typename A)>
+        struct make<proto::basic_expr<Tag, Args, Arity>(BOOST_PP_ENUM_PARAMS(N, A))>
+          : transform<make<proto::basic_expr<Tag, Args, Arity>(BOOST_PP_ENUM_PARAMS(N, A))> >
+        {
+            template<typename Expr, typename State, typename Data>
+            struct impl : transform_impl<Expr, State, Data>
+            {
+                typedef proto::basic_expr<Tag, Args, Arity> result_type;
+
+                result_type operator ()(
+                    typename impl::expr_param   e
+                  , typename impl::state_param  s
+                  , typename impl::data_param   d
+                ) const
+                {
+                    return proto::basic_expr<Tag, Args, Arity>::make(
+                        #define TMP(Z, M, DATA)                                                     \
+                            detail::as_lvalue(                                                      \
+                                typename when<_, BOOST_PP_CAT(A, M)>                                \
+                                    ::template impl<Expr, State, Data>()(e, s, d)                   \
+                            )
+                        BOOST_PP_ENUM(N, TMP, DATA)
+                        #undef TMP
+                    );
+                }
+            };
+        };
+        #endif
+
+    #undef N
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/transform/pass_through.hpp b/3rdParty/Boost/src/boost/proto/transform/pass_through.hpp
new file mode 100644
index 0000000..216097b
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/transform/pass_through.hpp
@@ -0,0 +1,204 @@
+#ifndef BOOST_PP_IS_ITERATING
+    ///////////////////////////////////////////////////////////////////////////////
+    /// \file pass_through.hpp
+    ///
+    /// Definition of the pass_through transform, which is the default transform
+    /// of all of the expression generator metafunctions such as unary_plus<>, plus<>
+    /// and nary_expr<>.
+    //
+    //  Copyright 2008 Eric Niebler. Distributed under the Boost
+    //  Software License, Version 1.0. (See accompanying file
+    //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+    #ifndef BOOST_PROTO_TRANSFORM_PASS_THROUGH_HPP_EAN_12_26_2006
+    #define BOOST_PROTO_TRANSFORM_PASS_THROUGH_HPP_EAN_12_26_2006
+
+    #include <boost/preprocessor/cat.hpp>
+    #include <boost/preprocessor/repetition/enum.hpp>
+    #include <boost/preprocessor/iteration/iterate.hpp>
+    #include <boost/mpl/bool.hpp>
+    #include <boost/type_traits/remove_reference.hpp>
+    #include <boost/proto/proto_fwd.hpp>
+    #include <boost/proto/args.hpp>
+    #include <boost/proto/transform/impl.hpp>
+
+    namespace boost { namespace proto
+    {
+        namespace detail
+        {
+            template<
+                typename Grammar
+              , typename Expr
+              , typename State
+              , typename Data
+              , long Arity = arity_of<Expr>::value
+            >
+            struct pass_through_impl
+            {};
+
+            #define BOOST_PROTO_DEFINE_TRANSFORM_TYPE(Z, N, DATA)                                   \
+                typename Grammar::BOOST_PP_CAT(proto_child, N)::template impl<                      \
+                    typename result_of::child_c<Expr, N>::type                                      \
+                  , State                                                                           \
+                  , Data                                                                            \
+                >::result_type                                                                      \
+                /**/
+
+            #define BOOST_PROTO_DEFINE_TRANSFORM(Z, N, DATA)                                        \
+                typename Grammar::BOOST_PP_CAT(proto_child, N)::template impl<                      \
+                    typename result_of::child_c<Expr, N>::type                                      \
+                  , State                                                                           \
+                  , Data                                                                            \
+                >()(                                                                                \
+                    e.proto_base().BOOST_PP_CAT(child, N), s, d                                     \
+                )                                                                                   \
+                /**/
+
+            #define BOOST_PP_ITERATION_PARAMS_1 (3, (1, BOOST_PROTO_MAX_ARITY, <boost/proto/transform/pass_through.hpp>))
+            #include BOOST_PP_ITERATE()
+
+            #undef BOOST_PROTO_DEFINE_TRANSFORM
+            #undef BOOST_PROTO_DEFINE_TRANSFORM_TYPE
+
+            template<typename Grammar, typename Expr, typename State, typename Data>
+            struct pass_through_impl<Grammar, Expr, State, Data, 0>
+              : transform_impl<Expr, State, Data>
+            {
+                typedef Expr result_type;
+
+                /// \param e An expression
+                /// \return \c e
+                /// \throw nothrow
+                #ifdef BOOST_PROTO_STRICT_RESULT_OF
+                result_type
+                #else
+                typename pass_through_impl::expr_param
+                #endif
+                operator()(
+                    typename pass_through_impl::expr_param e
+                  , typename pass_through_impl::state_param
+                  , typename pass_through_impl::data_param
+                ) const
+                {
+                    return e;
+                }
+            };
+
+        } // namespace detail
+
+        /// \brief A PrimitiveTransform that transforms the child expressions
+        /// of an expression node according to the corresponding children of
+        /// a Grammar.
+        ///
+        /// Given a Grammar such as <tt>plus\<T0, T1\></tt>, an expression type
+        /// that matches the grammar such as <tt>plus\<E0, E1\>::type</tt>, a
+        /// state \c S and a data \c V, the result of applying the
+        /// <tt>pass_through\<plus\<T0, T1\> \></tt> transform is:
+        ///
+        /// \code
+        /// plus<
+        ///     T0::result<T0(E0, S, V)>::type
+        ///   , T1::result<T1(E1, S, V)>::type
+        /// >::type
+        /// \endcode
+        ///
+        /// The above demonstrates how child transforms and child expressions
+        /// are applied pairwise, and how the results are reassembled into a new
+        /// expression node with the same tag type as the original.
+        ///
+        /// The explicit use of <tt>pass_through\<\></tt> is not usually needed,
+        /// since the expression generator metafunctions such as
+        /// <tt>plus\<\></tt> have <tt>pass_through\<\></tt> as their default
+        /// transform. So, for instance, these are equivalent:
+        ///
+        /// \code
+        /// // Within a grammar definition, these are equivalent:
+        /// when< plus<X, Y>, pass_through< plus<X, Y> > >
+        /// when< plus<X, Y>, plus<X, Y> >
+        /// when< plus<X, Y> > // because of when<class X, class Y=X>
+        /// plus<X, Y>         // because plus<> is both a
+        ///                    //   grammar and a transform
+        /// \endcode
+        ///
+        /// For example, consider the following transform that promotes all
+        /// \c float terminals in an expression to \c double.
+        ///
+        /// \code
+        /// // This transform finds all float terminals in an expression and promotes
+        /// // them to doubles.
+        /// struct Promote
+        ///  : or_<
+        ///         when<terminal<float>, terminal<double>::type(_value) >
+        ///         // terminal<>'s default transform is a no-op:
+        ///       , terminal<_>
+        ///         // nary_expr<> has a pass_through<> transform:
+        ///       , nary_expr<_, vararg<Promote> >
+        ///     >
+        /// {};
+        /// \endcode
+        template<typename Grammar>
+        struct pass_through
+          : transform<pass_through<Grammar> >
+        {
+            template<typename Expr, typename State, typename Data>
+            struct impl
+              : detail::pass_through_impl<Grammar, Expr, State, Data>
+            {};
+        };
+
+        /// INTERNAL ONLY
+        ///
+        template<typename Grammar>
+        struct is_callable<pass_through<Grammar> >
+          : mpl::true_
+        {};
+
+    }} // namespace boost::proto
+
+    #endif
+
+#else
+
+    #define N BOOST_PP_ITERATION()
+
+            template<typename Grammar, typename Expr, typename State, typename Data>
+            struct pass_through_impl<Grammar, Expr, State, Data, N>
+              : transform_impl<Expr, State, Data>
+            {
+                typedef typename pass_through_impl::expr unref_expr;
+
+                typedef
+                    typename base_expr<
+                        typename unref_expr::proto_domain
+                      , typename unref_expr::proto_tag
+                      , BOOST_PP_CAT(list, N)<
+                            BOOST_PP_ENUM(N, BOOST_PROTO_DEFINE_TRANSFORM_TYPE, ~)
+                        >
+                    >::type
+                expr_type;
+
+                typedef typename unref_expr::proto_generator proto_generator;
+                typedef typename BOOST_PROTO_RESULT_OF<proto_generator(expr_type)>::type const result_type;
+
+                result_type const operator ()(
+                    typename pass_through_impl::expr_param e
+                  , typename pass_through_impl::state_param s
+                  , typename pass_through_impl::data_param d
+                ) const
+                {
+                    expr_type const that = {
+                        BOOST_PP_ENUM(N, BOOST_PROTO_DEFINE_TRANSFORM, ~)
+                    };
+                    #if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400))
+                    // Without this, MSVC complains that "that" is uninitialized,
+                    // and it actually triggers a runtime check in debug mode when
+                    // built with VC8.
+                    &that;
+                    #endif
+                    return proto_generator()(that);
+                }
+            };
+
+    #undef N
+
+#endif
diff --git a/3rdParty/Boost/src/boost/proto/transform/when.hpp b/3rdParty/Boost/src/boost/proto/transform/when.hpp
new file mode 100644
index 0000000..fc776ca
--- /dev/null
+++ b/3rdParty/Boost/src/boost/proto/transform/when.hpp
@@ -0,0 +1,278 @@
+#ifndef BOOST_PP_IS_ITERATING
+    ///////////////////////////////////////////////////////////////////////////////
+    /// \file when.hpp
+    /// Definition of when transform.
+    //
+    //  Copyright 2008 Eric Niebler. Distributed under the Boost
+    //  Software License, Version 1.0. (See accompanying file
+    //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+    #ifndef BOOST_PROTO_TRANSFORM_WHEN_HPP_EAN_10_29_2007
+    #define BOOST_PROTO_TRANSFORM_WHEN_HPP_EAN_10_29_2007
+
+    #include <boost/preprocessor/cat.hpp>
+    #include <boost/preprocessor/repetition/enum_params.hpp>
+    #include <boost/preprocessor/repetition/enum_trailing_params.hpp>
+    #include <boost/preprocessor/iteration/iterate.hpp>
+    #include <boost/mpl/at.hpp>
+    #include <boost/mpl/if.hpp>
+    #include <boost/mpl/map.hpp>
+    #include <boost/proto/proto_fwd.hpp>
+    #include <boost/proto/traits.hpp>
+    #include <boost/proto/transform/call.hpp>
+    #include <boost/proto/transform/make.hpp>
+    #include <boost/proto/transform/impl.hpp>
+
+    namespace boost { namespace proto
+    {
+        /// \brief A grammar element and a PrimitiveTransform that associates
+        /// a transform with the grammar.
+        ///
+        /// Use <tt>when\<\></tt> to override a grammar's default transform
+        /// with a custom transform. It is for used when composing larger
+        /// transforms by associating smaller transforms with individual
+        /// rules in your grammar, as in the following transform which
+        /// counts the number of terminals in an expression.
+        ///
+        /// \code
+        /// // Count the terminals in an expression tree.
+        /// // Must be invoked with initial state == mpl::int_<0>().
+        /// struct CountLeaves
+        ///   : or_<
+        ///         when<terminal<_>, mpl::next<_state>()>
+        ///       , otherwise<fold<_, _state, CountLeaves> >
+        ///     >
+        /// {};
+        /// \endcode
+        ///
+        /// In <tt>when\<G, T\></tt>, when \c T is a class type it is a
+        /// PrimitiveTransform and the following equivalencies hold:
+        ///
+        /// <tt>boost::result_of\<when\<G,T\>(E,S,V)\>::type</tt> is the same as
+        /// <tt>boost::result_of\<T(E,S,V)\>::type</tt>.
+        ///
+        /// <tt>when\<G,T\>()(e,s,d)</tt> is the same as
+        /// <tt>T()(e,s,d)</tt>.
+        template<typename Grammar, typename PrimitiveTransform /*= Grammar*/>
+        struct when
+          : PrimitiveTransform
+        {
+            typedef Grammar first;
+            typedef PrimitiveTransform second;
+            typedef typename Grammar::proto_grammar proto_grammar;
+        };
+
+        /// \brief A specialization that treats function pointer Transforms as
+        /// if they were function type Transforms.
+        ///
+        /// This specialization requires that \c Fun is actually a function type.
+        ///
+        /// This specialization is required for nested transforms such as
+        /// <tt>when\<G, T0(T1(_))\></tt>. In C++, functions that are used as
+        /// parameters to other functions automatically decay to funtion
+        /// pointer types. In other words, the type <tt>T0(T1(_))</tt> is
+        /// indistinguishable from <tt>T0(T1(*)(_))</tt>. This specialization
+        /// is required to handle these nested function pointer type transforms
+        /// properly.
+        template<typename Grammar, typename Fun>
+        struct when<Grammar, Fun *>
+          : when<Grammar, Fun>
+        {};
+
+        /// \brief Syntactic sugar for <tt>when\<_, Fun\></tt>, for use
+        /// in grammars to handle all the cases not yet handled.
+        ///
+        /// Use <tt>otherwise\<T\></tt> in your grammars as a synonym for
+        /// <tt>when\<_, T\></tt> as in the following transform which
+        /// counts the number of terminals in an expression.
+        ///
+        /// \code
+        /// // Count the terminals in an expression tree.
+        /// // Must be invoked with initial state == mpl::int_<0>().
+        /// struct CountLeaves
+        ///   : or_<
+        ///         when<terminal<_>, mpl::next<_state>()>
+        ///       , otherwise<fold<_, _state, CountLeaves> >
+        ///     >
+        /// {};
+        /// \endcode
+        template<typename Fun>
+        struct otherwise
+          : when<_, Fun>
+        {};
+
+        /// \brief This specialization uses the Data parameter as a collection
+        /// of transforms that can be indexed by the specified rule.
+        ///
+        /// Use <tt>when\<T, external_transform\></tt> in your code when you would like
+        /// to define a grammar once and use it to evaluate expressions with
+        /// many different sets of transforms. The transforms are found by
+        /// using the Data parameter as a map from rules to transforms.
+        ///
+        /// See \c action_map for an example.
+        template<typename Grammar>
+        struct when<Grammar, external_transform>
+          : proto::transform<when<Grammar, external_transform> >
+        {
+            typedef Grammar first;
+            typedef external_transform second;
+            typedef typename Grammar::proto_grammar proto_grammar;
+
+            template<typename Expr, typename State, typename Data>
+            struct impl
+              : Data::template when<Grammar>::template impl<Expr, State, Data>
+            {};
+
+            template<typename Expr, typename State, typename Data>
+            struct impl<Expr, State, Data &>
+              : Data::template when<Grammar>::template impl<Expr, State, Data &>
+            {};
+        };
+
+        /// \brief For defining a map of Rule/Transform pairs for use with
+        /// <tt>when\<T, external_transform\></tt> to make transforms external to the grammar
+        ///
+        /// The following code defines a grammar with a couple of external transforms.
+        /// It also defines an action_map that maps from rules to transforms. It then
+        /// passes that transforms map at the Data parameter to the grammar. In this way,
+        /// the behavior of the grammar can be modified post-hoc by passing a different
+        /// action_map.
+        ///
+        /// \code
+        /// struct int_terminal
+        ///   : proto::terminal<int>
+        /// {};
+        /// 
+        /// struct char_terminal
+        ///   : proto::terminal<char>
+        /// {};
+        /// 
+        /// struct my_grammar
+        ///   : proto::or_<
+        ///         proto::when< int_terminal, proto::external_transform >
+        ///       , proto::when< char_terminal, proto::external_transform >
+        ///       , proto::when<
+        ///             proto::plus< my_grammar, my_grammar >
+        ///           , proto::fold< _, int(), my_grammar >
+        ///         >
+        ///     >
+        /// {};
+        /// 
+        /// struct my_transforms
+        ///   : proto::external_transforms<
+        ///         proto::when<int_terminal, print(proto::_value)>
+        ///       , proto::when<char_terminal, print(proto::_value)>
+        ///     >
+        /// {};
+        ///
+        /// proto::literal<int> i(1);
+        /// proto::literal<char> c('a');
+        /// my_transforms trx;
+        ///
+        /// // Evaluate "i+c" using my_grammar with the specified transforms:
+        /// my_grammar()(i + c, 0, trx);
+        /// \endcode
+        template<BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(BOOST_MPL_LIMIT_MAP_SIZE, typename T, mpl::na)>
+        struct external_transforms
+        {
+            typedef mpl::map<BOOST_PP_ENUM_PARAMS(BOOST_MPL_LIMIT_MAP_SIZE, T)> map_type;
+
+            template<typename Rule>
+            struct when
+              : proto::when<_, typename mpl::at<map_type, Rule>::type>
+            {};
+        };
+
+        #define BOOST_PP_ITERATION_PARAMS_1 (3, (0, BOOST_PROTO_MAX_ARITY, <boost/proto/transform/when.hpp>))
+        #include BOOST_PP_ITERATE()
+
+        /// INTERNAL ONLY
+        ///
+        template<typename Grammar, typename Transform>
+        struct is_callable<when<Grammar, Transform> >
+          : mpl::true_
+        {};
+
+    }} // namespace boost::proto
+
+    #endif
+
+#else
+
+    #define N BOOST_PP_ITERATION()
+
+        /// \brief A grammar element and a PrimitiveTransform that associates
+        /// a transform with the grammar.
+        ///
+        /// Use <tt>when\<\></tt> to override a grammar's default transform
+        /// with a custom transform. It is for used when composing larger
+        /// transforms by associating smaller transforms with individual
+        /// rules in your grammar, as in the following transform which
+        /// counts the number of terminals in an expression.
+        ///
+        /// \code
+        /// // Count the terminals in an expression tree.
+        /// // Must be invoked with initial state == mpl::int_<0>().
+        /// struct CountLeaves
+        ///   : or_<
+        ///         when<terminal<_>, mpl::next<_state>()>
+        ///       , otherwise<fold<_, _state, CountLeaves> >
+        ///     >
+        /// {};
+        /// \endcode
+        ///
+        /// The <tt>when\<G, R(A0,A1,...)\></tt> form accepts either a
+        /// CallableTransform or an ObjectTransform as its second parameter.
+        /// <tt>when\<\></tt> uses <tt>is_callable\<R\>::value</tt> to
+        /// distinguish between the two, and uses <tt>call\<\></tt> to
+        /// evaluate CallableTransforms and <tt>make\<\></tt> to evaluate
+        /// ObjectTransforms.
+        template<typename Grammar, typename R BOOST_PP_ENUM_TRAILING_PARAMS(N, typename A)>
+        struct when<Grammar, R(BOOST_PP_ENUM_PARAMS(N, A))>
+          : transform<when<Grammar, R(BOOST_PP_ENUM_PARAMS(N, A))> >
+        {
+            typedef Grammar first;
+            typedef R second(BOOST_PP_ENUM_PARAMS(N, A));
+            typedef typename Grammar::proto_grammar proto_grammar;
+
+            // Note: do not evaluate is_callable<R> in this scope.
+            // R may be an incomplete type at this point.
+
+            template<typename Expr, typename State, typename Data>
+            struct impl : transform_impl<Expr, State, Data>
+            {
+                // OK to evaluate is_callable<R> here. R should be compete by now.
+                typedef
+                    typename mpl::if_c<
+                        is_callable<R>::value
+                      , call<R(BOOST_PP_ENUM_PARAMS(N, A))> // "R" is a function to call
+                      , make<R(BOOST_PP_ENUM_PARAMS(N, A))> // "R" is an object to construct
+                    >::type
+                which;
+
+                typedef typename which::template impl<Expr, State, Data>::result_type result_type;
+
+                /// Evaluate <tt>R(A0,A1,...)</tt> as a transform either with
+                /// <tt>call\<\></tt> or with <tt>make\<\></tt> depending on
+                /// whether <tt>is_callable\<R\>::value</tt> is \c true or
+                /// \c false.
+                ///
+                /// \param e The current expression
+                /// \param s The current state
+                /// \param d An arbitrary data
+                /// \pre <tt>matches\<Expr, Grammar\>::value</tt> is \c true
+                /// \return <tt>which()(e, s, d)</tt>
+                result_type operator ()(
+                    typename impl::expr_param   e
+                  , typename impl::state_param  s
+                  , typename impl::data_param   d
+                ) const
+                {
+                    return typename which::template impl<Expr, State, Data>()(e, s, d);
+                }
+            };
+        };
+
+    #undef N
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/lex.hpp b/3rdParty/Boost/src/boost/spirit/home/lex.hpp
new file mode 100644
index 0000000..5d95f5b
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/lex.hpp
@@ -0,0 +1,18 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEXER_MARCH_22_2007_0929PM)
+#define BOOST_SPIRIT_LEXER_MARCH_22_2007_0929PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/lex/lexer.hpp>
+#include <boost/spirit/home/lex/qi.hpp>
+#include <boost/spirit/home/lex/tokenize_and_parse.hpp>
+#include <boost/spirit/home/lex/tokenize_and_parse_attr.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/lex/argument.hpp b/3rdParty/Boost/src/boost/spirit/home/lex/argument.hpp
new file mode 100644
index 0000000..f7f6675
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/lex/argument.hpp
@@ -0,0 +1,389 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c) 2001-2011 Joel de Guzman
+//  Copyright (c)      2010 Bryce Lelbach
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_ARGUMENT_JUNE_07_2009_1106AM)
+#define BOOST_SPIRIT_LEX_ARGUMENT_JUNE_07_2009_1106AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/phoenix/core/actor.hpp>
+#include <boost/spirit/home/phoenix/core/argument.hpp>
+#include <boost/spirit/home/phoenix/core/compose.hpp>
+#include <boost/spirit/home/phoenix/core/value.hpp>
+#include <boost/spirit/home/phoenix/core/as_actor.hpp>
+#include <boost/spirit/home/phoenix/operator/self.hpp>
+#include <boost/spirit/home/support/string_traits.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/mpl/at.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/remove_const.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace lex
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  The state_getter is a Phoenix actor used to access the name of the 
+    //  current lexer state by calling get_state_name() on the context (which 
+    //  is the 4th parameter to any lexer semantic actions).
+    //
+    //  This Phoenix actor is invoked whenever the placeholder '_state' is used
+    //  as a rvalue inside a lexer semantic action:
+    //
+    //      lex::token_def<> identifier = "[a-zA-Z_][a-zA-Z0-9_]*";
+    //      this->self = identifier [ std::cout << _state ];
+    //
+    //  The example shows how to print the lexer state after matching a token
+    //  'identifier'.
+    struct state_getter
+    {
+        typedef mpl::true_ no_nullary;
+
+        template <typename Env>
+        struct result
+        {
+            typedef typename
+                remove_const<
+                    typename mpl::at_c<typename Env::args_type, 4>::type
+                >::type
+            context_type;
+
+            typedef typename context_type::state_name_type type;
+        };
+
+        template <typename Env>
+        typename result<Env>::type
+        eval(Env const& env) const
+        {
+            return fusion::at_c<4>(env.args()).get_state_name();
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  The state_setter is a Phoenix actor used to change the name of the 
+    //  current lexer state by calling set_state_name() on the context (which 
+    //  is the 4th parameter to any lexer semantic actions).
+    //
+    //  This Phoenix actor is invoked whenever the placeholder '_state' is used
+    //  as a lvalue inside a lexer semantic action:
+    //
+    //      lex::token_def<> identifier = "[a-zA-Z_][a-zA-Z0-9_]*";
+    //      this->self = identifier [ _state = "SOME_LEXER_STATE" ];
+    //
+    //  The example shows how to change the lexer state after matching a token
+    //  'identifier'.
+    template <typename Actor>
+    struct state_setter
+    {
+        typedef mpl::true_ no_nullary;
+
+        template <typename Env>
+        struct result
+        {
+            typedef void type;
+        };
+
+        template <typename Env>
+        void eval(Env const& env) const
+        {
+            typedef typename
+                remove_const<
+                    typename mpl::at_c<typename Env::args_type, 4>::type
+                >::type
+            context_type;
+
+            typedef typename context_type::state_name_type string;
+
+            fusion::at_c<4>(env.args()).set_state_name(
+                traits::get_c_string(actor_.eval(env)));
+        }
+
+        state_setter(Actor const& actor)
+          : actor_(actor) {}
+
+        // see explanation for this constructor at the end of this file
+        state_setter(phoenix::actor<state_getter>, Actor const& actor)
+          : actor_(actor) {}
+
+        Actor actor_;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  The state_context is used as a noop Phoenix actor to create the 
+    //  placeholder '_state' (see below). It is a noop actor because it is used
+    //  as a placeholder only, while it is being converted either to a 
+    //  state_getter (if used as a rvalue) or to a state_setter (if used as a 
+    //  lvalue). The conversion is achieved by specializing and overloading a 
+    //  couple of the Phoenix templates from the Phoenix expression composition
+    //  engine (see the end of this file).
+    struct state_context 
+    {
+        typedef mpl::true_ no_nullary;
+
+        template <typename Env>
+        struct result
+        {
+            typedef unused_type type;
+        };
+
+        template <typename Env>
+        unused_type
+        eval(Env const& env) const
+        {
+            return unused;
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  The value_getter is used to create the _val placeholder, which is a 
+    //  Phoenix actor used to access the value of the current token.
+    //
+    //  This Phoenix actor is invoked whenever the placeholder '_val' is used
+    //  as a rvalue inside a lexer semantic action:
+    //
+    //      lex::token_def<> identifier = "[a-zA-Z_][a-zA-Z0-9_]*";
+    //      this->self = identifier [ std::cout << _val ];
+    //
+    //  The example shows how to use _val to print the identifier name (which
+    //  is the initial token value).
+    struct value_getter
+    {
+        typedef mpl::true_ no_nullary;
+
+        template <typename Env>
+        struct result
+        {
+            typedef typename
+                remove_const<
+                    typename mpl::at_c<typename Env::args_type, 4>::type
+                >::type
+            context_type;
+
+            typedef typename context_type::get_value_type type;
+        };
+
+        template <typename Env>
+        typename result<Env>::type 
+        eval(Env const& env) const
+        {
+            return fusion::at_c<4>(env.args()).get_value();
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  The value_setter is a Phoenix actor used to change the name of the 
+    //  current lexer state by calling set_state_name() on the context (which 
+    //  is the 4th parameter to any lexer semantic actions).
+    //
+    //  This Phoenix actor is invoked whenever the placeholder '_val' is used
+    //  as a lvalue inside a lexer semantic action:
+    //
+    //      lex::token_def<> identifier = "[a-zA-Z_][a-zA-Z0-9_]*";
+    //      this->self = identifier [ _val = "identifier" ];
+    //
+    //  The example shows how to change the token value after matching a token
+    //  'identifier'.
+    template <typename Actor>
+    struct value_setter
+    {
+        typedef mpl::true_ no_nullary;
+
+        template <typename Env>
+        struct result
+        {
+            typedef void type;
+        };
+
+        template <typename Env>
+        void eval(Env const& env) const
+        {
+            fusion::at_c<4>(env.args()).set_value(actor_.eval(env));
+        }
+
+        value_setter(Actor const& actor)
+          : actor_(actor) {}
+
+        // see explanation for this constructor at the end of this file
+        value_setter(phoenix::actor<value_getter>, Actor const& actor)
+          : actor_(actor) {}
+
+        Actor actor_;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  The value_context is used as a noop Phoenix actor to create the 
+    //  placeholder '_val' (see below). It is a noop actor because it is used
+    //  as a placeholder only, while it is being converted either to a 
+    //  value_getter (if used as a rvalue) or to a value_setter (if used as a 
+    //  lvalue). The conversion is achieved by specializing and overloading a 
+    //  couple of the Phoenix templates from the Phoenix expression composition
+    //  engine (see the end of this file).
+    struct value_context 
+    {
+        typedef mpl::true_ no_nullary;
+
+        template <typename Env>
+        struct result
+        {
+            typedef unused_type type;
+        };
+
+        template <typename Env>
+        unused_type
+        eval(Env const& env) const
+        {
+            return unused;
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  The eoi_getter is used to create the _eoi placeholder, which is a 
+    //  Phoenix actor used to access the end of input iterator pointing to the 
+    //  end of the underlying input sequence.
+    //
+    //  This actor is invoked whenever the placeholder '_eoi' is used in a
+    //  lexer semantic action:
+    //
+    //      lex::token_def<> identifier = "[a-zA-Z_][a-zA-Z0-9_]*";
+    //      this->self = identifier 
+    //          [ std::cout << construct_<std::string>(_end, _eoi) ];
+    //
+    //  The example shows how to use _eoi to print all remaining input after
+    //  matching a token 'identifier'.
+    struct eoi_getter
+    {
+        typedef mpl::true_ no_nullary;
+
+        template <typename Env>
+        struct result
+        {
+            typedef typename
+                remove_const<
+                    typename mpl::at_c<typename Env::args_type, 4>::type
+                >::type
+            context_type;
+
+            typedef typename context_type::base_iterator_type const& type;
+        };
+
+        template <typename Env>
+        typename result<Env>::type 
+        eval(Env const& env) const
+        {
+            return fusion::at_c<4>(env.args()).get_eoi();
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // '_start' and '_end' may be used to access the start and the end of 
+    // the matched sequence of the current token
+    phoenix::actor<phoenix::argument<0> > const _start = phoenix::argument<0>();
+    phoenix::actor<phoenix::argument<1> > const _end = phoenix::argument<1>();
+
+    // We are reusing the placeholder '_pass' to access and change the pass
+    // status of the current match (see support/argument.hpp for its 
+    // definition).
+    using boost::spirit::_pass;
+
+    // '_tokenid' may be used to access and change the tokenid of the current 
+    // token
+    phoenix::actor<phoenix::argument<3> > const _tokenid = phoenix::argument<3>();
+
+    // '_val' may be used to access and change the token value of the current
+    // token
+    phoenix::actor<value_context> const _val = value_context();
+
+    // _state may be used to access and change the name of the current lexer 
+    // state
+    phoenix::actor<state_context> const _state = state_context();
+
+    // '_eoi' may be used to access the end of input iterator of the input 
+    // stream used by the lexer to match tokens from
+    phoenix::actor<eoi_getter> const _eoi = eoi_getter();
+
+}}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace phoenix
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  The specialization of as_actor_base<> below is needed to convert all
+    //  occurrences of _state in places where it's used as a rvalue into the 
+    //  proper Phoenix actor (spirit::state_getter) accessing the lexer state.
+    template<>
+    struct as_actor_base<actor<spirit::lex::state_context> >
+    {
+        typedef spirit::lex::state_getter type;
+
+        static spirit::lex::state_getter
+        convert(actor<spirit::lex::state_context>)
+        {
+            return spirit::lex::state_getter();
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  The specialization of as_composite<> below is needed to convert all
+    //  assignments to _state (places where it's used as a lvalue) into the
+    //  proper Phoenix actor (spirit::state_setter) allowing to change the
+    //  lexer state.
+    template <typename RHS>
+    struct as_composite<assign_eval, actor<spirit::lex::state_context>, RHS>
+    {
+        // For an assignment to _state (a spirit::state_context actor), this
+        // specialization makes Phoenix's compose() function construct a
+        // spirit::state_setter actor from 1. the LHS, a spirit::state_getter
+        // actor (due to the specialization of as_actor_base<> above),
+        // and 2. the RHS actor.
+        // This is why spirit::state_setter needs a constructor which takes
+        // a dummy spirit::state_getter as its first argument in addition
+        // to its real, second argument (the RHS actor).
+        typedef spirit::lex::state_setter<typename as_actor<RHS>::type> type;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  The specialization of as_actor_base<> below is needed to convert all
+    //  occurrences of _val in places where it's used as a rvalue into the 
+    //  proper Phoenix actor (spirit::value_getter) accessing the token value.
+    template<>
+    struct as_actor_base<actor<spirit::lex::value_context> >
+    {
+        typedef spirit::lex::value_getter type;
+
+        static spirit::lex::value_getter
+        convert(actor<spirit::lex::value_context>)
+        {
+            return spirit::lex::value_getter();
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  The specialization of as_composite<> below is needed to convert all
+    //  assignments to _val (places where it's used as a lvalue) into the
+    //  proper Phoenix actor (spirit::value_setter) allowing to change the
+    //  token value.
+    template <typename RHS>
+    struct as_composite<assign_eval, actor<spirit::lex::value_context>, RHS>
+    {
+        // For an assignment to _val (a spirit::value_context actor), this
+        // specialization makes Phoenix's compose() function construct a
+        // spirit::value_setter actor from 1. the LHS, a spirit::value_getter
+        // actor (due to the specialization of as_actor_base<> above),
+        // and 2. the RHS actor.
+        // This is why spirit::value_setter needs a constructor which takes
+        // a dummy spirit::value_getter as its first argument in addition
+        // to its real, second argument (the RHS actor).
+        typedef spirit::lex::value_setter<typename as_actor<RHS>::type> type;
+    };
+
+}}
+
+#undef SPIRIT_DECLARE_ARG
+#endif
+
diff --git a/3rdParty/Boost/src/boost/spirit/home/lex/detail/sequence_function.hpp b/3rdParty/Boost/src/boost/spirit/home/lex/detail/sequence_function.hpp
new file mode 100644
index 0000000..0f52da8
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/lex/detail/sequence_function.hpp
@@ -0,0 +1,63 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_SEQUENCE_FUNCTION_FEB_28_2007_0249PM)
+#define BOOST_SPIRIT_LEX_SEQUENCE_FUNCTION_FEB_28_2007_0249PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/lex/domain.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+
+namespace boost { namespace spirit { namespace lex { namespace detail
+{
+    template <typename LexerDef, typename String>
+    struct sequence_collect_function
+    {
+        sequence_collect_function(LexerDef& def_, String const& state_
+              , String const& targetstate_)
+          : def(def_), state(state_), targetstate(targetstate_) {}
+
+        template <typename Component>
+        bool operator()(Component const& component) const
+        {
+            component.collect(def, state, targetstate);
+            return false;     // execute for all sequence elements
+        }
+
+        LexerDef& def;
+        String const& state;
+        String const& targetstate;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        sequence_collect_function& operator= (sequence_collect_function const&);
+    };
+
+    template <typename LexerDef>
+    struct sequence_add_actions_function
+    {
+        sequence_add_actions_function(LexerDef& def_)
+          : def(def_) {}
+
+        template <typename Component>
+        bool operator()(Component const& component) const
+        {
+            component.add_actions(def);
+            return false;     // execute for all sequence elements
+        }
+
+        LexerDef& def;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        sequence_add_actions_function& operator= (sequence_add_actions_function const&);
+    };
+
+}}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/lex/domain.hpp b/3rdParty/Boost/src/boost/spirit/home/lex/domain.hpp
new file mode 100644
index 0000000..e5aec86
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/lex/domain.hpp
@@ -0,0 +1,31 @@
+//  Copyright (c) 2001-2011 Joel de Guzman
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_DOMAIN_MAR_13_2007_0140PM)
+#define BOOST_SPIRIT_LEX_DOMAIN_MAR_13_2007_0140PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/meta_compiler.hpp>
+#include <boost/spirit/home/support/info.hpp>
+
+namespace boost { namespace spirit { namespace lex
+{
+    // lex's domain
+    struct domain {};
+
+    // bring in some of spirit parts into spirit::lex
+    using spirit::unused;
+    using spirit::unused_type;
+    using spirit::compile;
+    using spirit::info;
+
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/lex/lexer.hpp b/3rdParty/Boost/src/boost/spirit/home/lex/lexer.hpp
new file mode 100644
index 0000000..535ec28
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/lex/lexer.hpp
@@ -0,0 +1,21 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEXER_MAR_22_2007_1008PM)
+#define BOOST_SPIRIT_LEXER_MAR_22_2007_1008PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/lex/lexer/terminals.hpp>
+#include <boost/spirit/home/lex/lexer/token_def.hpp>
+#include <boost/spirit/home/lex/lexer/char_token_def.hpp>
+#include <boost/spirit/home/lex/lexer/string_token_def.hpp>
+#include <boost/spirit/home/lex/lexer/sequence.hpp>
+#include <boost/spirit/home/lex/lexer/action.hpp>
+#include <boost/spirit/home/lex/lexer/lexer.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/lex/lexer/action.hpp b/3rdParty/Boost/src/boost/spirit/home/lex/lexer/action.hpp
new file mode 100644
index 0000000..8de0c87
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/lex/lexer/action.hpp
@@ -0,0 +1,97 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(SPIRIT_LEX_ACTION_NOV_18_2007_0743PM)
+#define SPIRIT_LEX_ACTION_NOV_18_2007_0743PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/lex/meta_compiler.hpp>
+#include <boost/spirit/home/lex/lexer_type.hpp>
+#include <boost/spirit/home/lex/argument.hpp>
+#include <boost/spirit/home/lex/lexer/support_functions.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace lex
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Action>
+    struct action : unary_lexer<action<Subject, Action> >
+    {
+        action(Subject const& subject, Action f)
+          : subject(subject), f(f) {}
+
+        template <typename LexerDef, typename String>
+        void collect(LexerDef& lexdef, String const& state
+          , String const& targetstate) const
+        {
+            // collect the token definition information for the token_def 
+            // this action is attached to
+            subject.collect(lexdef, state, targetstate);
+        }
+
+        template <typename LexerDef>
+        void add_actions(LexerDef& lexdef) const
+        {
+            // call to add all actions attached further down the hierarchy 
+            subject.add_actions(lexdef);
+
+            // retrieve the id of the associated token_def and register the 
+            // given semantic action with the lexer instance
+            lexdef.add_action(subject.unique_id(), subject.state(), f);
+        }
+
+        Subject subject;
+        Action f;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        action& operator= (action const&);
+    };
+
+}}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Karma action meta-compiler
+    template <>
+    struct make_component<lex::domain, tag::action>
+    {
+        template <typename Sig>
+        struct result;
+
+        template <typename This, typename Elements, typename Modifiers>
+        struct result<This(Elements, Modifiers)>
+        {
+            typedef typename
+                remove_const<typename Elements::car_type>::type
+            subject_type;
+
+            typedef typename
+                remove_const<typename Elements::cdr_type::car_type>::type
+            action_type;
+
+            typedef lex::action<subject_type, action_type> type;
+        };
+
+        template <typename Elements>
+        typename result<make_component(Elements, unused_type)>::type
+        operator()(Elements const& elements, unused_type) const
+        {
+            typename result<make_component(Elements, unused_type)>::type
+                result(elements.car, elements.cdr.car);
+            return result;
+        }
+    };
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/lex/lexer/char_token_def.hpp b/3rdParty/Boost/src/boost/spirit/home/lex/lexer/char_token_def.hpp
new file mode 100644
index 0000000..7d34100
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/lex/lexer/char_token_def.hpp
@@ -0,0 +1,186 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_CHAR_TOKEN_DEF_MAR_28_2007_0626PM)
+#define BOOST_SPIRIT_LEX_CHAR_TOKEN_DEF_MAR_28_2007_0626PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/string_traits.hpp>
+#include <boost/spirit/home/lex/domain.hpp>
+#include <boost/spirit/home/lex/lexer_type.hpp>
+#include <boost/spirit/home/lex/meta_compiler.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_terminal<lex::domain, char>               // enables 'x'
+      : mpl::true_ {};
+
+    template <>
+    struct use_terminal<lex::domain, char[2]>            // enables "x"
+      : mpl::true_ {};
+
+    template <>
+    struct use_terminal<lex::domain, wchar_t>            // enables wchar_t
+      : mpl::true_ {};
+
+    template <>
+    struct use_terminal<lex::domain, wchar_t[2]>         // enables L"x"
+      : mpl::true_ {};
+
+    template <typename CharEncoding, typename A0>
+    struct use_terminal<lex::domain
+      , terminal_ex<
+            tag::char_code<tag::char_, CharEncoding>     // enables char_('x'), char_("x")
+          , fusion::vector1<A0>
+        >
+    > : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace lex
+{ 
+    // use char_ from standard character set by default
+    using spirit::standard::char_type;
+    using spirit::standard::char_;
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  char_token_def 
+    //      represents a single character token definition
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename CharEncoding = char_encoding::standard>
+    struct char_token_def
+      : primitive_lexer<char_token_def<CharEncoding> >
+    {
+        typedef typename CharEncoding::char_type char_type;
+
+        char_token_def(char_type ch) 
+          : ch(ch), unique_id_(std::size_t(~0)), token_state_(std::size_t(~0)) 
+        {}
+
+        template <typename LexerDef, typename String>
+        void collect(LexerDef& lexdef, String const& state
+          , String const& targetstate) const
+        {
+            std::size_t state_id = lexdef.add_state(state.c_str());
+
+            // If the following assertion fires you are probably trying to use 
+            // a single char_token_def instance in more than one lexer state. 
+            // This is not possible. Please create a separate token_def instance 
+            // from the same regular expression for each lexer state it needs 
+            // to be associated with.
+            BOOST_ASSERT(
+                (std::size_t(~0) == token_state_ || state_id == token_state_) &&
+                "Can't use single char_token_def with more than one lexer state");
+
+            char_type const* target = targetstate.empty() ? 0 : targetstate.c_str();
+            if (target)
+                lexdef.add_state(target);
+
+            token_state_ = state_id;
+            unique_id_ = lexdef.add_token (state.c_str(), ch
+              , static_cast<std::size_t>(ch), target);
+        }
+
+        template <typename LexerDef>
+        void add_actions(LexerDef&) const {}
+
+        std::size_t id() const { return static_cast<std::size_t>(ch); }
+        std::size_t unique_id() const { return unique_id_; }
+        std::size_t state() const { return token_state_; }
+
+        char_type ch;
+        mutable std::size_t unique_id_;
+        mutable std::size_t token_state_;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Lexer generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename CharEncoding>
+        struct basic_literal
+        {
+            typedef char_token_def<CharEncoding> result_type;
+
+            template <typename Char>
+            result_type operator()(Char ch, unused_type) const
+            {
+                return result_type(ch);
+            }
+
+            template <typename Char>
+            result_type operator()(Char const* str, unused_type) const
+            {
+                return result_type(str[0]);
+            }
+        };
+    }
+
+    // literals: 'x', "x"
+    template <typename Modifiers>
+    struct make_primitive<char, Modifiers>
+      : detail::basic_literal<char_encoding::standard> {};
+
+    template <typename Modifiers>
+    struct make_primitive<char const(&)[2], Modifiers>
+      : detail::basic_literal<char_encoding::standard> {};
+
+    // literals: L'x', L"x"
+    template <typename Modifiers>
+    struct make_primitive<wchar_t, Modifiers>
+      : detail::basic_literal<char_encoding::standard_wide> {};
+
+    template <typename Modifiers>
+    struct make_primitive<wchar_t const(&)[2], Modifiers>
+      : detail::basic_literal<char_encoding::standard_wide> {};
+
+    // handle char_('x')
+    template <typename CharEncoding, typename Modifiers, typename A0>
+    struct make_primitive<
+        terminal_ex<
+            tag::char_code<tag::char_, CharEncoding>
+          , fusion::vector1<A0>
+        >
+      , Modifiers>
+    {
+        typedef char_token_def<CharEncoding> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(fusion::at_c<0>(term.args));
+        }
+    };
+
+    // handle char_("x")
+    template <typename CharEncoding, typename Modifiers, typename Char>
+    struct make_primitive<
+        terminal_ex<
+            tag::char_code<tag::char_, CharEncoding>
+          , fusion::vector1<Char(&)[2]>   // single char strings
+        >
+      , Modifiers>
+    {
+        typedef char_token_def<CharEncoding> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(fusion::at_c<0>(term.args)[0]);
+        }
+    };
+}}}  // namespace boost::spirit::lex
+
+#endif 
diff --git a/3rdParty/Boost/src/boost/spirit/home/lex/lexer/lexer.hpp b/3rdParty/Boost/src/boost/spirit/home/lex/lexer/lexer.hpp
new file mode 100644
index 0000000..f69cd23
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/lex/lexer/lexer.hpp
@@ -0,0 +1,381 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_LEXER_MAR_13_2007_0145PM)
+#define BOOST_SPIRIT_LEX_LEXER_MAR_13_2007_0145PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/qi/skip_over.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/qi/detail/assign_to.hpp>
+#include <boost/spirit/home/lex/reference.hpp>
+#include <boost/spirit/home/lex/meta_compiler.hpp>
+#include <boost/spirit/home/lex/lexer_type.hpp>
+#include <boost/spirit/home/lex/lexer/token_def.hpp>
+#include <boost/assert.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/detail/iterator.hpp>
+#include <boost/fusion/include/vector.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <string>
+
+namespace boost { namespace spirit { namespace lex
+{
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        ///////////////////////////////////////////////////////////////////////
+        template <typename LexerDef>
+        struct lexer_def_
+          : proto::extends<
+                typename proto::terminal<
+                   lex::reference<lexer_def_<LexerDef> const> 
+                >::type
+              , lexer_def_<LexerDef> >
+          , qi::parser<lexer_def_<LexerDef> >
+          , lex::lexer_type<lexer_def_<LexerDef> >
+        {
+        private:
+            // avoid warnings about using 'this' in constructor
+            lexer_def_& this_() { return *this; }
+
+            typedef typename LexerDef::char_type char_type;
+            typedef typename LexerDef::string_type string_type;
+            typedef typename LexerDef::id_type id_type;
+
+            typedef lex::reference<lexer_def_ const> reference_;
+            typedef typename proto::terminal<reference_>::type terminal_type;
+            typedef proto::extends<terminal_type, lexer_def_> proto_base_type;
+
+            reference_ alias() const
+            {
+                return reference_(*this);
+            }
+
+        public:
+            // Qi interface: metafunction calculating parser attribute type
+            template <typename Context, typename Iterator>
+            struct attribute
+            {
+                //  the return value of a token set contains the matched token 
+                //  id, and the corresponding pair of iterators
+                typedef typename Iterator::base_iterator_type iterator_type;
+                typedef 
+                    fusion::vector2<id_type, iterator_range<iterator_type> > 
+                type;
+            };
+
+            // Qi interface: parse functionality
+            template <typename Iterator, typename Context
+              , typename Skipper, typename Attribute>
+            bool parse(Iterator& first, Iterator const& last
+              , Context& /*context*/, Skipper const& skipper
+              , Attribute& attr) const
+            {
+                qi::skip_over(first, last, skipper);   // always do a pre-skip
+
+                if (first != last) {
+                    typedef typename 
+                        boost::detail::iterator_traits<Iterator>::value_type 
+                    token_type;
+
+                    token_type const& t = *first;
+                    if (token_is_valid(t) && t.state() == first.get_state()) {
+                    // any of the token definitions matched
+                        spirit::traits::assign_to(t, attr);
+                        ++first;
+                        return true;
+                    }
+                }
+                return false;
+            }
+
+            // Qi interface: 'what' functionality
+            template <typename Context>
+            info what(Context& /*context*/) const
+            {
+                return info("lexer");
+            }
+
+        private:
+            // allow to use the lexer.self.add("regex1", id1)("regex2", id2);
+            // syntax
+            struct adder
+            {
+                adder(lexer_def_& def_) 
+                  : def(def_) {}
+
+                // Add a token definition based on a single character as given
+                // by the first parameter, the second parameter allows to 
+                // specify the token id to use for the new token. If no token
+                // id is given the character code is used.
+                adder const& operator()(char_type c
+                  , id_type token_id = id_type()) const
+                {
+                    if (id_type() == token_id)
+                        token_id = static_cast<id_type>(c);
+                    def.def.add_token (def.state.c_str(), c, token_id
+                        , def.targetstate.empty() ? 0 : def.targetstate.c_str());
+                    return *this;
+                }
+
+                // Add a token definition based on a character sequence as 
+                // given by the first parameter, the second parameter allows to 
+                // specify the token id to use for the new token. If no token
+                // id is given this function will generate a unique id to be 
+                // used as the token's id.
+                adder const& operator()(string_type const& s
+                  , id_type token_id = id_type()) const
+                {
+                    if (id_type() == token_id)
+                        token_id = def.def.get_next_id();
+                    def.def.add_token (def.state.c_str(), s, token_id
+                        , def.targetstate.empty() ? 0 : def.targetstate.c_str());
+                    return *this;
+                }
+
+                template <typename Attribute>
+                adder const& operator()(
+                    token_def<Attribute, char_type, id_type>& tokdef
+                  , id_type token_id = id_type()) const
+                {
+                    // make sure we have a token id
+                    if (id_type() == token_id) {
+                        if (id_type() == tokdef.id()) {
+                            token_id = def.def.get_next_id();
+                            tokdef.id(token_id);
+                        }
+                        else {
+                            token_id = tokdef.id();
+                        }
+                    }
+                    else { 
+                    // the following assertion makes sure that the token_def
+                    // instance has not been assigned a different id earlier
+                        BOOST_ASSERT(id_type() == tokdef.id() 
+                                  || token_id == tokdef.id());
+                        tokdef.id(token_id);
+                    }
+
+                    def.define(tokdef);
+                    return *this;
+                }
+
+//                 template <typename F>
+//                 adder const& operator()(char_type c, id_type token_id, F act) const
+//                 {
+//                     if (id_type() == token_id)
+//                         token_id = def.def.get_next_id();
+//                     std::size_t unique_id = 
+//                         def.def.add_token (def.state.c_str(), s, token_id);
+//                     def.def.add_action(unique_id, def.state.c_str(), act);
+//                     return *this;
+//                 }
+
+                lexer_def_& def;
+
+            private:
+                // silence MSVC warning C4512: assignment operator could not be generated
+                adder& operator= (adder const&);
+            };
+            friend struct adder;
+
+            // allow to use lexer.self.add_pattern("pattern1", "regex1")(...);
+            // syntax
+            struct pattern_adder
+            {
+                pattern_adder(lexer_def_& def_) 
+                  : def(def_) {}
+
+                pattern_adder const& operator()(string_type const& p
+                  , string_type const& s) const
+                {
+                    def.def.add_pattern (def.state.c_str(), p, s);
+                    return *this;
+                }
+
+                lexer_def_& def;
+
+            private:
+                // silence MSVC warning C4512: assignment operator could not be generated
+                pattern_adder& operator= (pattern_adder const&);
+            };
+            friend struct pattern_adder;
+
+        private:
+            // Helper function to invoke the necessary 2 step compilation
+            // process on token definition expressions
+            template <typename TokenExpr>
+            void compile2pass(TokenExpr const& expr) 
+            {
+                expr.collect(def, state, targetstate);
+                expr.add_actions(def);
+            }
+
+        public:
+            ///////////////////////////////////////////////////////////////////
+            template <typename Expr>
+            void define(Expr const& expr)
+            {
+                compile2pass(compile<lex::domain>(expr));
+            }
+
+            lexer_def_(LexerDef& def_, string_type const& state_
+                  , string_type const& targetstate_ = string_type())
+              : proto_base_type(terminal_type::make(alias()))
+              , add(this_()), add_pattern(this_()), def(def_)
+              , state(state_), targetstate(targetstate_)
+            {}
+
+            // allow to switch states
+            lexer_def_ operator()(char_type const* state) const
+            {
+                return lexer_def_(def, state);
+            }
+            lexer_def_ operator()(char_type const* state
+              , char_type const* targetstate) const
+            {
+                return lexer_def_(def, state, targetstate);
+            }
+            lexer_def_ operator()(string_type const& state
+              , string_type const& targetstate = string_type()) const
+            {
+                return lexer_def_(def, state, targetstate);
+            }
+
+            // allow to assign a token definition expression
+            template <typename Expr>
+            lexer_def_& operator= (Expr const& xpr)
+            {
+                // Report invalid expression error as early as possible.
+                // If you got an error_invalid_expression error message here,
+                // then the expression (expr) is not a valid spirit lex 
+                // expression.
+                BOOST_SPIRIT_ASSERT_MATCH(lex::domain, Expr);
+
+                def.clear(state.c_str());
+                define(xpr);
+                return *this;
+            }
+
+            adder add;
+            pattern_adder add_pattern;
+
+        private:
+            LexerDef& def;
+            string_type state;
+            string_type targetstate;
+
+        private:
+            // silence MSVC warning C4512: assignment operator could not be generated
+            lexer_def_& operator= (lexer_def_ const&);
+        };
+
+        // allow to assign a token definition expression
+        template <typename LexerDef, typename Expr>
+        inline lexer_def_<LexerDef>&
+        operator+= (lexer_def_<LexerDef>& lexdef, Expr& xpr)
+        {
+            // Report invalid expression error as early as possible.
+            // If you got an error_invalid_expression error message here,
+            // then the expression (expr) is not a valid spirit lex 
+            // expression.
+            BOOST_SPIRIT_ASSERT_MATCH(lex::domain, Expr);
+
+            lexdef.define(xpr);
+            return lexdef;
+        }
+
+        template <typename LexerDef, typename Expr>
+        inline lexer_def_<LexerDef>& 
+        operator+= (lexer_def_<LexerDef>& lexdef, Expr const& xpr)
+        {
+            // Report invalid expression error as early as possible.
+            // If you got an error_invalid_expression error message here,
+            // then the expression (expr) is not a valid spirit lex 
+            // expression.
+            BOOST_SPIRIT_ASSERT_MATCH(lex::domain, Expr);
+
+            lexdef.define(xpr);
+            return lexdef;
+        }
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  The match_flags flags are used to influence different matching 
+    //  modes of the lexer
+    struct match_flags
+    {
+        enum enum_type 
+        {
+            match_default = 0,          // no flags
+            match_not_dot_newline = 1,  // the regex '.' doesn't match newlines
+            match_icase = 2             // all matching operations are case insensitive
+        };
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  This represents a lexer object
+    ///////////////////////////////////////////////////////////////////////////
+
+    ///////////////////////////////////////////////////////////////////////////
+    // This is the first token id automatically assigned by the library 
+    // if needed
+    enum tokenids 
+    {
+        min_token_id = 0x10000
+    };
+
+    template <typename Lexer>
+    class lexer : public Lexer
+    {
+    private:
+        // avoid warnings about using 'this' in constructor
+        lexer& this_() { return *this; }
+
+        std::size_t next_token_id;   // has to be an integral type
+
+    public:
+        typedef Lexer lexer_type;
+        typedef typename Lexer::id_type id_type;
+        typedef typename Lexer::char_type char_type;
+        typedef typename Lexer::iterator_type iterator_type;
+        typedef lexer base_type;
+
+        typedef detail::lexer_def_<lexer> lexer_def;
+        typedef std::basic_string<char_type> string_type;
+
+        lexer(unsigned int flags = match_flags::match_default
+            , id_type first_id = id_type(min_token_id)) 
+          : lexer_type(flags)
+          , next_token_id(first_id)
+          , self(this_(), lexer_type::initial_state()) 
+        {}
+
+        // access iterator interface
+        template <typename Iterator>
+        iterator_type begin(Iterator& first, Iterator const& last
+                , char_type const* initial_state = 0) const
+            { return this->lexer_type::begin(first, last, initial_state); }
+        iterator_type end() const 
+            { return this->lexer_type::end(); }
+
+        std::size_t map_state(char_type const* state)
+            { return this->lexer_type::add_state(state); }
+
+        //  create a unique token id
+        id_type get_next_id() { return id_type(next_token_id++); }
+
+        lexer_def self;  // allow for easy token definition
+    };
+
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/lex/lexer/lexertl/functor.hpp b/3rdParty/Boost/src/boost/spirit/home/lex/lexer/lexertl/functor.hpp
new file mode 100644
index 0000000..530bc26
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/lex/lexer/lexertl/functor.hpp
@@ -0,0 +1,297 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_LEXER_FUNCTOR_NOV_18_2007_1112PM)
+#define BOOST_SPIRIT_LEX_LEXER_FUNCTOR_NOV_18_2007_1112PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/mpl/bool.hpp>
+#include <boost/detail/iterator.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/spirit/home/lex/lexer/pass_flags.hpp>
+#include <boost/assert.hpp>
+
+#if 0 != __COMO_VERSION__ || !BOOST_WORKAROUND(BOOST_MSVC, <= 1310)
+#define BOOST_SPIRIT_STATIC_EOF 1
+#define BOOST_SPIRIT_EOF_PREFIX static
+#else
+#define BOOST_SPIRIT_EOF_PREFIX 
+#endif
+
+namespace boost { namespace spirit { namespace lex { namespace lexertl
+{ 
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  functor is a template usable as the functor object for the 
+    //  multi_pass iterator allowing to wrap a lexertl based dfa into a 
+    //  iterator based interface.
+    //  
+    //    Token:      the type of the tokens produced by this functor
+    //                this needs to expose a constructor with the following
+    //                prototype:
+    //
+    //                Token(std::size_t id, std::size_t state, 
+    //                      Iterator start, Iterator end)
+    //
+    //                where 'id' is the token id, state is the lexer state,
+    //                this token has been matched in, and 'first' and 'end'  
+    //                mark the start and the end of the token with respect 
+    //                to the underlying character stream.
+    //    FunctorData:
+    //                this is expected to encapsulate the shared part of the 
+    //                functor (see lex/lexer/lexertl/functor_data.hpp for an
+    //                example and documentation).
+    //    Iterator:   the type of the underlying iterator
+    //    SupportsActors:
+    //                this is expected to be a mpl::bool_, if mpl::true_ the
+    //                functor invokes functors which (optionally) have 
+    //                been attached to the token definitions.
+    //    SupportState:
+    //                this is expected to be a mpl::bool_, if mpl::true_ the
+    //                functor supports different lexer states, 
+    //                otherwise no lexer state is supported.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Token
+      , template <typename, typename, typename, typename> class FunctorData
+      , typename Iterator = typename Token::iterator_type
+      , typename SupportsActors = mpl::false_
+      , typename SupportsState = typename Token::has_state>
+    class functor
+    {
+    public:
+        typedef typename 
+            boost::detail::iterator_traits<Iterator>::value_type 
+        char_type;
+
+    private:
+        // Needed by compilers not implementing the resolution to DR45. For
+        // reference, see
+        // http://www.open-std.org/JTC1/SC22/WG21/docs/cwg_defects.html#45.
+        typedef typename Token::token_value_type token_value_type;
+        friend class FunctorData<Iterator, SupportsActors, SupportsState
+          , token_value_type>;
+
+        // Helper template allowing to assign a value on exit
+        template <typename T>
+        struct assign_on_exit
+        {
+            assign_on_exit(T& dst, T const& src)
+              : dst_(dst), src_(src) {}
+
+            ~assign_on_exit()
+            {
+                dst_ = src_;
+            }
+
+            T& dst_;
+            T const& src_;
+
+        private:
+            // silence MSVC warning C4512: assignment operator could not be generated
+            assign_on_exit& operator= (assign_on_exit const&);
+        };
+
+    public:
+        functor()
+#if defined(__PGI)
+          : eof()
+#endif 
+        {}
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1310)
+        // somehow VC7.1 needs this (meaningless) assignment operator
+        functor& operator=(functor const& rhs)
+        {
+            return *this;
+        }
+#endif
+
+        ///////////////////////////////////////////////////////////////////////
+        // interface to the iterator_policies::split_functor_input policy
+        typedef Token result_type;
+        typedef functor unique;
+        typedef FunctorData<Iterator, SupportsActors, SupportsState
+          , token_value_type> shared;
+
+        BOOST_SPIRIT_EOF_PREFIX result_type const eof;
+
+        ///////////////////////////////////////////////////////////////////////
+        typedef Iterator iterator_type;
+        typedef typename shared::semantic_actions_type semantic_actions_type;
+        typedef typename shared::next_token_functor next_token_functor;
+        typedef typename shared::get_state_name_type get_state_name_type;
+
+        // this is needed to wrap the semantic actions in a proper way
+        typedef typename shared::wrap_action_type wrap_action_type;
+
+        ///////////////////////////////////////////////////////////////////////
+        template <typename MultiPass>
+        static result_type& get_next(MultiPass& mp, result_type& result)
+        {
+            typedef typename result_type::id_type id_type;
+
+            shared& data = mp.shared()->ftor;
+            for(;;) 
+            {
+                if (data.get_first() == data.get_last()) 
+#if defined(BOOST_SPIRIT_STATIC_EOF)
+                    return result = eof;
+#else
+                    return result = mp.ftor.eof;
+#endif
+
+                data.reset_value();
+                Iterator end = data.get_first();
+                std::size_t unique_id = boost::lexer::npos;
+                bool prev_bol = false;
+
+                // lexer matching might change state
+                std::size_t state = data.get_state();
+                std::size_t id = data.next(end, unique_id, prev_bol);
+
+                if (boost::lexer::npos == id) {   // no match
+#if defined(BOOST_SPIRIT_LEXERTL_DEBUG)
+                    std::string next;
+                    Iterator it = data.get_first();
+                    for (std::size_t i = 0; i < 10 && it != data.get_last(); ++it, ++i)
+                        next += *it;
+
+                    std::cerr << "Not matched, in state: " << state 
+                              << ", lookahead: >" << next << "<" << std::endl;
+#endif
+                    return result = result_type(0);
+                }
+                else if (0 == id) {         // EOF reached
+#if defined(BOOST_SPIRIT_STATIC_EOF)
+                    return result = eof;
+#else
+                    return result = mp.ftor.eof;
+#endif
+                }
+
+#if defined(BOOST_SPIRIT_LEXERTL_DEBUG)
+                {
+                    std::string next;
+                    Iterator it = end;
+                    for (std::size_t i = 0; i < 10 && it != data.get_last(); ++it, ++i)
+                        next += *it;
+
+                    std::cerr << "Matched: " << id << ", in state: " 
+                              << state << ", string: >" 
+                              << std::basic_string<char_type>(data.get_first(), end) << "<"
+                              << ", lookahead: >" << next << "<" << std::endl;
+                    if (data.get_state() != state) {
+                        std::cerr << "Switched to state: " 
+                                  << data.get_state() << std::endl;
+                    }
+                }
+#endif
+                // account for a possibly pending lex::more(), i.e. moving 
+                // data.first_ back to the start of the previously matched token.
+                bool adjusted = data.adjust_start();
+
+                // invoke attached semantic actions, if defined, might change
+                // state, id, data.first_, and/or end
+                BOOST_SCOPED_ENUM(pass_flags) pass = 
+                    data.invoke_actions(state, id, unique_id, end);
+
+                if (data.has_value()) {
+                    // return matched token using the token value as set before
+                    // using data.set_value(), advancing 'data.first_' past the 
+                    // matched sequence
+                    assign_on_exit<Iterator> on_exit(data.get_first(), end);
+                    return result = result_type(id_type(id), state, data.get_value());
+                }
+                else if (pass_flags::pass_normal == pass) {
+                    // return matched token, advancing 'data.first_' past the 
+                    // matched sequence
+                    assign_on_exit<Iterator> on_exit(data.get_first(), end);
+                    return result = result_type(id_type(id), state, data.get_first(), end);
+                }
+                else if (pass_flags::pass_fail == pass) {
+#if defined(BOOST_SPIRIT_LEXERTL_DEBUG)
+                    std::cerr << "Matching forced to fail" << std::endl; 
+#endif
+                    // if the data.first_ got adjusted above, revert this adjustment
+                    if (adjusted)
+                        data.revert_adjust_start();
+
+                    // one of the semantic actions signaled no-match
+                    data.reset_bol(prev_bol);
+                    if (state != data.get_state())
+                        continue;       // retry matching if state has changed
+
+                    // if the state is unchanged repeating the match wouldn't
+                    // move the input forward, causing an infinite loop
+                    return result = result_type(0);
+                }
+
+#if defined(BOOST_SPIRIT_LEXERTL_DEBUG)
+                std::cerr << "Token ignored, continuing matching" << std::endl; 
+#endif
+            // if this token needs to be ignored, just repeat the matching,
+            // while starting right after the current match
+                data.get_first() = end;
+            }
+        }
+
+        // set_state are propagated up to the iterator interface, allowing to 
+        // manipulate the current lexer state through any of the exposed 
+        // iterators.
+        template <typename MultiPass>
+        static std::size_t set_state(MultiPass& mp, std::size_t state) 
+        { 
+            std::size_t oldstate = mp.shared()->ftor.get_state();
+            mp.shared()->ftor.set_state(state);
+
+#if defined(BOOST_SPIRIT_LEXERTL_DEBUG)
+            std::cerr << "Switching state from: " << oldstate 
+                      << " to: " << state
+                      << std::endl;
+#endif
+            return oldstate; 
+        }
+
+        template <typename MultiPass>
+        static std::size_t get_state(MultiPass& mp) 
+        { 
+            return mp.shared()->ftor.get_state();
+        }
+
+        template <typename MultiPass>
+        static std::size_t 
+        map_state(MultiPass const& mp, char_type const* statename)  
+        { 
+            return mp.shared()->ftor.get_state_id(statename);
+        }
+
+        // we don't need this, but it must be there
+        template <typename MultiPass>
+        static void destroy(MultiPass const&) {}
+    };
+
+#if defined(BOOST_SPIRIT_STATIC_EOF)
+    ///////////////////////////////////////////////////////////////////////////
+    //  eof token
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Token
+      , template <typename, typename, typename, typename> class FunctorData
+      , typename Iterator, typename SupportsActors, typename SupportsState>
+    typename functor<Token, FunctorData, Iterator, SupportsActors, SupportsState>::result_type const
+        functor<Token, FunctorData, Iterator, SupportsActors, SupportsState>::eof = 
+            typename functor<Token, FunctorData, Iterator, SupportsActors
+              , SupportsState>::result_type();
+#endif
+
+}}}}
+
+#undef BOOST_SPIRIT_EOF_PREFIX
+#undef BOOST_SPIRIT_STATIC_EOF
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/lex/lexer/lexertl/functor_data.hpp b/3rdParty/Boost/src/boost/spirit/home/lex/lexer/lexertl/functor_data.hpp
new file mode 100644
index 0000000..f611cc6
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/lex/lexer/lexertl/functor_data.hpp
@@ -0,0 +1,408 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_LEXER_FUNCTOR_DATA_JUN_10_2009_0954AM)
+#define BOOST_SPIRIT_LEX_LEXER_FUNCTOR_DATA_JUN_10_2009_0954AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/detail/lexer/generator.hpp>
+#include <boost/spirit/home/support/detail/lexer/rules.hpp>
+#include <boost/spirit/home/support/detail/lexer/state_machine.hpp>
+#include <boost/spirit/home/lex/lexer/lexertl/iterator_tokenizer.hpp>
+#include <boost/spirit/home/lex/lexer/lexertl/semantic_action_data.hpp>
+#include <boost/spirit/home/lex/lexer/lexertl/wrap_action.hpp>
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace spirit { namespace lex { namespace lexertl
+{ 
+    namespace detail
+    {
+        ///////////////////////////////////////////////////////////////////////
+        template <typename Iterator, typename HasActors, typename HasState
+          , typename TokenValue>
+        class data;    // no default specialization
+
+        ///////////////////////////////////////////////////////////////////////
+        //  neither supports state, nor actors
+        template <typename Iterator, typename TokenValue>
+        class data<Iterator, mpl::false_, mpl::false_, TokenValue>
+        {
+        protected:
+            typedef typename 
+                boost::detail::iterator_traits<Iterator>::value_type 
+            char_type;
+
+        public:
+            typedef Iterator base_iterator_type;
+            typedef iterator_range<Iterator> token_value_type;
+            typedef token_value_type get_value_type;
+            typedef std::size_t state_type;
+            typedef char_type const* state_name_type;
+            typedef unused_type semantic_actions_type;
+            typedef detail::wrap_action<unused_type, Iterator, data, std::size_t>
+                wrap_action_type;
+
+            typedef unused_type next_token_functor;
+            typedef unused_type get_state_name_type;
+
+            // initialize the shared data 
+            template <typename IterData>
+            data (IterData const& data_, Iterator& first, Iterator const& last)
+              : first_(first), last_(last)
+              , state_machine_(data_.state_machine_)
+              , rules_(data_.rules_)
+              , bol_(data_.state_machine_.data()._seen_BOL_assertion) {}
+
+            // The following functions are used by the implementation of the 
+            // placeholder '_state'.
+            template <typename Char>
+            void set_state_name (Char const*) 
+            {
+// some (random) versions of gcc instantiate this function even if it's not 
+// needed leading to false static asserts
+#if !defined(__GNUC__)
+                // If you see a compile time assertion below you're probably 
+                // using a token type not supporting lexer states (the 3rd 
+                // template parameter of the token is mpl::false_), but your 
+                // code uses state changes anyways.
+                BOOST_STATIC_ASSERT(false);
+#endif
+            }
+            char_type const* get_state_name() const { return rules_.initial(); }
+            std::size_t get_state_id (char_type const*) const
+            {
+                return 0;
+            }
+
+            // The function get_eoi() is used by the implementation of the 
+            // placeholder '_eoi'.
+            Iterator const& get_eoi() const { return last_; }
+
+            // The function less() is used by the implementation of the support
+            // function lex::less(). Its functionality is equivalent to flex'
+            // function yyless(): it returns an iterator positioned to the 
+            // nth input character beyond the current start iterator (i.e. by
+            // assigning the return value to the placeholder '_end' it is 
+            // possible to return all but the first n characters of the current 
+            // token back to the input stream. 
+            //
+            // This function does nothing as long as no semantic actions are 
+            // used.
+            Iterator const& less(Iterator const& it, int n) 
+            { 
+                // The following assertion fires most likely because you are 
+                // using lexer semantic actions without using the actor_lexer
+                // as the base class for your token definition class.
+                BOOST_ASSERT(false && 
+                    "Are you using lexer semantic actions without using the "
+                    "actor_lexer base?");
+                return it; 
+            }
+
+            // The function more() is used by the implementation of the support 
+            // function lex::more(). Its functionality is equivalent to flex'
+            // function yymore(): it tells the lexer that the next time it 
+            // matches a rule, the corresponding token should be appended onto 
+            // the current token value rather than replacing it.
+            // 
+            // These functions do nothing as long as no semantic actions are 
+            // used.
+            void more() 
+            { 
+                // The following assertion fires most likely because you are 
+                // using lexer semantic actions without using the actor_lexer
+                // as the base class for your token definition class.
+                BOOST_ASSERT(false && 
+                    "Are you using lexer semantic actions without using the "
+                    "actor_lexer base?"); 
+            }
+            bool adjust_start() { return false; }
+            void revert_adjust_start() {}
+
+            // The function lookahead() is used by the implementation of the 
+            // support function lex::lookahead. It can be used to implement 
+            // lookahead for lexer engines not supporting constructs like flex'
+            // a/b  (match a, but only when followed by b):
+            //
+            // This function does nothing as long as no semantic actions are 
+            // used.
+            bool lookahead(std::size_t id, std::size_t state = std::size_t(~0)) 
+            { 
+                // The following assertion fires most likely because you are 
+                // using lexer semantic actions without using the actor_lexer
+                // as the base class for your token definition class.
+                BOOST_ASSERT(false && 
+                    "Are you using lexer semantic actions without using the "
+                    "actor_lexer base?");
+                return false; 
+            }
+
+            // the functions next, invoke_actions, and get_state are used by 
+            // the functor implementation below
+
+            // The function next() tries to match the next token from the 
+            // underlying input sequence. 
+            std::size_t next(Iterator& end, std::size_t& unique_id, bool& prev_bol)
+            {
+                prev_bol = bol_;
+
+                typedef basic_iterator_tokeniser<Iterator> tokenizer;
+                return tokenizer::next(state_machine_, bol_, end, last_
+                  , unique_id);
+            }
+
+            // nothing to invoke, so this is empty
+            BOOST_SCOPED_ENUM(pass_flags) invoke_actions(std::size_t
+              , std::size_t, std::size_t, Iterator const&) 
+            {
+                return pass_flags::pass_normal;    // always accept
+            }
+
+            std::size_t get_state() const { return 0; }
+            void set_state(std::size_t) {}
+
+            Iterator& get_first() { return first_; }
+            Iterator const& get_first() const { return first_; }
+            Iterator const& get_last() const { return last_; }
+
+            iterator_range<Iterator> get_value() const 
+            { 
+                return iterator_range<Iterator>(first_, last_); 
+            }
+            bool has_value() const { return false; }
+            void reset_value() {}
+
+            void reset_bol(bool bol) { bol_ = bol; }
+
+        protected:
+            Iterator& first_;
+            Iterator last_;
+
+            boost::lexer::basic_state_machine<char_type> const& state_machine_;
+            boost::lexer::basic_rules<char_type> const& rules_;
+
+            bool bol_;      // helper storing whether last character was \n
+
+        private:
+            // silence MSVC warning C4512: assignment operator could not be generated
+            data& operator= (data const&);
+        };
+
+        ///////////////////////////////////////////////////////////////////////
+        //  doesn't support lexer semantic actions, but supports state
+        template <typename Iterator, typename TokenValue>
+        class data<Iterator, mpl::false_, mpl::true_, TokenValue>
+          : public data<Iterator, mpl::false_, mpl::false_, TokenValue>
+        {
+        protected:
+            typedef data<Iterator, mpl::false_, mpl::false_, TokenValue> base_type;
+            typedef typename base_type::char_type char_type;
+
+        public:
+            typedef Iterator base_iterator_type;
+            typedef iterator_range<Iterator> token_value_type;
+            typedef token_value_type get_value_type;
+            typedef typename base_type::state_type state_type;
+            typedef typename base_type::state_name_type state_name_type;
+            typedef typename base_type::semantic_actions_type 
+                semantic_actions_type;
+
+            // initialize the shared data 
+            template <typename IterData>
+            data (IterData const& data_, Iterator& first, Iterator const& last)
+              : base_type(data_, first, last)
+              , state_(0) {}
+
+            // The following functions are used by the implementation of the 
+            // placeholder '_state'.
+            void set_state_name (char_type const* new_state) 
+            { 
+                std::size_t state_id = this->rules_.state(new_state);
+
+                // If the following assertion fires you've probably been using 
+                // a lexer state name which was not defined in your token 
+                // definition.
+                BOOST_ASSERT(state_id != boost::lexer::npos);
+
+                if (state_id != boost::lexer::npos)
+                    state_ = state_id;
+            }
+            char_type const* get_state_name() const
+            {
+                return this->rules_.state(state_);
+            }
+            std::size_t get_state_id (char_type const* state) const
+            {
+                return this->rules_.state(state);
+            }
+
+            // the functions next() and get_state() are used by the functor 
+            // implementation below
+
+            // The function next() tries to match the next token from the 
+            // underlying input sequence. 
+            std::size_t next(Iterator& end, std::size_t& unique_id, bool& prev_bol)
+            {
+                prev_bol = this->bol_;
+
+                typedef basic_iterator_tokeniser<Iterator> tokenizer;
+                return tokenizer::next(this->state_machine_, state_, 
+                    this->bol_, end, this->get_eoi(), unique_id);
+            }
+
+            std::size_t& get_state() { return state_; }
+            void set_state(std::size_t state) { state_ = state; }
+
+        protected:
+            std::size_t state_;
+
+        private:
+            // silence MSVC warning C4512: assignment operator could not be generated
+            data& operator= (data const&);
+        };
+
+        ///////////////////////////////////////////////////////////////////////
+        //  does support lexer semantic actions, may support state
+        template <typename Iterator, typename HasState, typename TokenValue>
+        class data<Iterator, mpl::true_, HasState, TokenValue> 
+          : public data<Iterator, mpl::false_, HasState, TokenValue>
+        {
+        public:
+            typedef semantic_actions<Iterator, HasState, data> 
+                semantic_actions_type;
+
+        protected:
+            typedef data<Iterator, mpl::false_, HasState, TokenValue> base_type;
+            typedef typename base_type::char_type char_type;
+            typedef typename semantic_actions_type::functor_wrapper_type
+                functor_wrapper_type;
+
+        public:
+            typedef Iterator base_iterator_type;
+            typedef TokenValue token_value_type;
+            typedef TokenValue const& get_value_type;
+            typedef typename base_type::state_type state_type;
+            typedef typename base_type::state_name_type state_name_type;
+
+            typedef detail::wrap_action<functor_wrapper_type
+              , Iterator, data, std::size_t> wrap_action_type;
+
+            template <typename IterData>
+            data (IterData const& data_, Iterator& first, Iterator const& last)
+              : base_type(data_, first, last)
+              , actions_(data_.actions_), hold_()
+              , value_(iterator_range<Iterator>(first, last))
+              , has_value_(false), has_hold_(false) {}
+
+            // invoke attached semantic actions, if defined
+            BOOST_SCOPED_ENUM(pass_flags) invoke_actions(std::size_t state
+              , std::size_t& id, std::size_t unique_id, Iterator& end)
+            {
+                return actions_.invoke_actions(state, id, unique_id, end, *this); 
+            }
+
+            // The function less() is used by the implementation of the support
+            // function lex::less(). Its functionality is equivalent to flex'
+            // function yyless(): it returns an iterator positioned to the 
+            // nth input character beyond the current start iterator (i.e. by
+            // assigning the return value to the placeholder '_end' it is 
+            // possible to return all but the first n characters of the current 
+            // token back to the input stream). 
+            Iterator const& less(Iterator& it, int n) 
+            {
+                it = this->get_first();
+                std::advance(it, n);
+                return it;
+            }
+
+            // The function more() is used by the implementation of the support 
+            // function lex::more(). Its functionality is equivalent to flex'
+            // function yymore(): it tells the lexer that the next time it 
+            // matches a rule, the corresponding token should be appended onto 
+            // the current token value rather than replacing it.
+            void more()
+            {
+                hold_ = this->get_first();
+                has_hold_ = true;
+            }
+
+            // The function lookahead() is used by the implementation of the 
+            // support function lex::lookahead. It can be used to implement 
+            // lookahead for lexer engines not supporting constructs like flex'
+            // a/b  (match a, but only when followed by b)
+            bool lookahead(std::size_t id, std::size_t state = std::size_t(~0))
+            {
+                Iterator end = end_;
+                std::size_t unique_id = boost::lexer::npos;
+                bool bol = this->bol_;
+
+                if (std::size_t(~0) == state)
+                    state = this->state_;
+
+                typedef basic_iterator_tokeniser<Iterator> tokenizer;
+                return id == tokenizer::next(this->state_machine_, state, 
+                    bol, end, this->get_eoi(), unique_id);
+            }
+
+            // The adjust_start() and revert_adjust_start() are helper 
+            // functions needed to implement the functionality required for 
+            // lex::more(). It is called from the functor body below.
+            bool adjust_start()
+            {
+                if (!has_hold_)
+                    return false;
+
+                std::swap(this->get_first(), hold_);
+                has_hold_ = false;
+                return true;
+            }
+            void revert_adjust_start()
+            {
+                // this will be called only if adjust_start above returned true
+                std::swap(this->get_first(), hold_);
+                has_hold_ = true;
+            }
+
+            TokenValue const& get_value() const 
+            {
+                if (!has_value_) {
+                    value_ = iterator_range<Iterator>(this->get_first(), end_);
+                    has_value_ = true;
+                }
+                return value_;
+            }
+            template <typename Value>
+            void set_value(Value const& val)
+            {
+                value_ = val;
+                has_value_ = true;
+            }
+            void set_end(Iterator const& it)
+            {
+                end_ = it;
+            }
+            bool has_value() const { return has_value_; }
+            void reset_value() { has_value_ = false; }
+
+        protected:
+            semantic_actions_type const& actions_;
+            Iterator hold_;     // iterator needed to support lex::more()
+            Iterator end_;      // iterator pointing to end of matched token
+            mutable TokenValue value_;  // token value to use
+            mutable bool has_value_;    // 'true' if value_ is valid
+            bool has_hold_;     // 'true' if hold_ is valid
+
+        private:
+            // silence MSVC warning C4512: assignment operator could not be generated
+            data& operator= (data const&);
+        };
+    }
+}}}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/spirit/home/lex/lexer/lexertl/iterator.hpp b/3rdParty/Boost/src/boost/spirit/home/lex/lexer/lexertl/iterator.hpp
new file mode 100644
index 0000000..f2793ba
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/lex/lexer/lexertl/iterator.hpp
@@ -0,0 +1,121 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_LEXER_ITERATOR_MAR_16_2007_0353PM)
+#define BOOST_SPIRIT_LEX_LEXER_ITERATOR_MAR_16_2007_0353PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#if defined(BOOST_SPIRIT_DEBUG)
+#include <boost/spirit/home/support/iterators/detail/buf_id_check_policy.hpp>
+#else
+#include <boost/spirit/home/support/iterators/detail/no_check_policy.hpp>
+#endif
+#include <boost/spirit/home/support/iterators/detail/split_functor_input_policy.hpp>
+#include <boost/spirit/home/support/iterators/detail/ref_counted_policy.hpp>
+#include <boost/spirit/home/support/iterators/detail/split_std_deque_policy.hpp>
+#include <boost/spirit/home/support/iterators/multi_pass.hpp>
+
+namespace boost { namespace spirit { namespace lex { namespace lexertl
+{ 
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename FunctorData>
+    struct make_multi_pass
+    {
+        // Divide the given functor type into its components (unique and 
+        // shared) and build a std::pair from these parts
+        typedef std::pair<typename FunctorData::unique
+          , typename FunctorData::shared> functor_data_type;
+
+        // This is the result type returned from the iterator
+        typedef typename FunctorData::result_type result_type;
+
+        // Compose the multi_pass iterator policy type from the appropriate 
+        // policies
+        typedef iterator_policies::split_functor_input input_policy;
+        typedef iterator_policies::ref_counted ownership_policy;
+#if defined(BOOST_SPIRIT_DEBUG)
+        typedef iterator_policies::buf_id_check check_policy;
+#else
+        typedef iterator_policies::no_check check_policy;
+#endif
+        typedef iterator_policies::split_std_deque storage_policy;
+
+        typedef iterator_policies::default_policy<
+                ownership_policy, check_policy, input_policy, storage_policy>
+            policy_type;
+
+        // Compose the multi_pass iterator from the policy
+        typedef spirit::multi_pass<functor_data_type, policy_type> type;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  lexer_iterator exposes an iterator for a lexertl based dfa (lexer) 
+    //  The template parameters have the same semantics as described for the
+    //  functor above.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Functor>
+    class iterator : public make_multi_pass<Functor>::type
+    {
+    public:
+        typedef typename Functor::unique unique_functor_type;
+        typedef typename Functor::shared shared_functor_type;
+
+        typedef typename Functor::iterator_type base_iterator_type;
+        typedef typename Functor::result_type token_type;
+
+    private:
+        typedef typename make_multi_pass<Functor>::functor_data_type 
+            functor_type;
+        typedef typename make_multi_pass<Functor>::type base_type;
+        typedef typename Functor::char_type char_type;
+
+    public:
+        // create a new iterator encapsulating the lexer object to be used
+        // for tokenization
+        template <typename IteratorData>
+        iterator(IteratorData const& iterdata_, base_iterator_type& first
+              , base_iterator_type const& last, char_type const* state = 0)
+          : base_type(functor_type(unique_functor_type()
+              , shared_functor_type(iterdata_, first, last))) 
+        {
+            set_state(map_state(state));
+        }
+
+        // create an end iterator usable for end of range checking
+        iterator() {}
+
+        // (wash): < mgaunard> T it; T it2 = ++it; doesn't ocmpile
+        //         < mgaunard> this gets fixed by adding
+        iterator(const base_type& base)
+          : base_type(base) { }
+
+        // set the new required state for the underlying lexer object
+        std::size_t set_state(std::size_t state)
+        {
+            return unique_functor_type::set_state(*this, state);
+        }
+
+        // get the curent state for the underlying lexer object
+        std::size_t get_state()
+        {
+            return unique_functor_type::get_state(*this);
+        }
+
+        // map the given state name to a corresponding state id as understood
+        // by the underlying lexer object
+        std::size_t map_state(char_type const* statename)
+        {
+            return (0 != statename) 
+              ? unique_functor_type::map_state(*this, statename)
+              : 0;
+        }
+    };
+
+}}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/lex/lexer/lexertl/iterator_tokenizer.hpp b/3rdParty/Boost/src/boost/spirit/home/lex/lexer/lexertl/iterator_tokenizer.hpp
new file mode 100644
index 0000000..131cf66
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/lex/lexer/lexertl/iterator_tokenizer.hpp
@@ -0,0 +1,253 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEXERTL_ITERATOR_TOKENISER_MARCH_22_2007_0859AM)
+#define BOOST_SPIRIT_LEXERTL_ITERATOR_TOKENISER_MARCH_22_2007_0859AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/detail/iterator.hpp>
+#include <boost/spirit/home/support/detail/lexer/state_machine.hpp>
+#include <boost/spirit/home/support/detail/lexer/consts.hpp>
+#include <boost/spirit/home/support/detail/lexer/size_t.hpp>
+#include <boost/spirit/home/support/detail/lexer/char_traits.hpp>
+#include <vector>
+
+namespace boost { namespace spirit { namespace lex { namespace lexertl
+{ 
+    ///////////////////////////////////////////////////////////////////////////
+    template<typename Iterator>
+    class basic_iterator_tokeniser
+    {
+    public:
+        typedef std::vector<std::size_t> size_t_vector;
+        typedef typename boost::detail::iterator_traits<Iterator>::value_type 
+            char_type;
+
+        static std::size_t next (
+            boost::lexer::basic_state_machine<char_type> const& state_machine_
+          , std::size_t &dfa_state_, bool& bol_, Iterator &start_token_
+          , Iterator const& end_, std::size_t& unique_id_)
+        {
+            if (start_token_ == end_) 
+            {
+                unique_id_ = boost::lexer::npos;
+                return 0;
+            }
+
+            bool bol = bol_;
+
+        again:
+            std::size_t const* lookup_ = &state_machine_.data()._lookup[dfa_state_]->
+                front ();
+            std::size_t dfa_alphabet_ = state_machine_.data()._dfa_alphabet[dfa_state_];
+            std::size_t const* dfa_ = &state_machine_.data()._dfa[dfa_state_]->front ();
+
+            std::size_t const* ptr_ = dfa_ + dfa_alphabet_;
+            Iterator curr_ = start_token_;
+            bool end_state_ = *ptr_ != 0;
+            std::size_t id_ = *(ptr_ + boost::lexer::id_index);
+            std::size_t uid_ = *(ptr_ + boost::lexer::unique_id_index);
+            std::size_t end_start_state_ = dfa_state_;
+            bool end_bol_ = bol_;
+            Iterator end_token_ = start_token_;
+
+            while (curr_ != end_)
+            {
+                std::size_t const BOL_state_ = ptr_[boost::lexer::bol_index];
+                std::size_t const EOL_state_ = ptr_[boost::lexer::eol_index];
+
+                if (BOL_state_ && bol)
+                {
+                    ptr_ = &dfa_[BOL_state_ * dfa_alphabet_];
+                }
+                else if (EOL_state_ && *curr_ == '\n')
+                {
+                    ptr_ = &dfa_[EOL_state_ * dfa_alphabet_];
+                }
+                else
+                {
+                    typedef typename 
+                        boost::detail::iterator_traits<Iterator>::value_type 
+                    value_type;
+                    typedef typename 
+                        boost::lexer::char_traits<value_type>::index_type 
+                    index_type;
+
+                    index_type index = 
+                        boost::lexer::char_traits<value_type>::call(*curr_++);
+                    bol = (index == '\n') ? true : false;
+                    std::size_t const state_ = ptr_[
+                        lookup_[static_cast<std::size_t>(index)]];
+
+                    if (state_ == 0)
+                    {
+                        break;
+                    }
+
+                    ptr_ = &dfa_[state_ * dfa_alphabet_];
+                }
+
+                if (*ptr_)
+                {
+                    end_state_ = true;
+                    id_ = *(ptr_ + boost::lexer::id_index);
+                    uid_ = *(ptr_ + boost::lexer::unique_id_index);
+                    end_start_state_ = *(ptr_ + boost::lexer::state_index);
+                    end_bol_ = bol;
+                    end_token_ = curr_;
+                }
+            }
+
+            std::size_t const EOL_state_ = ptr_[boost::lexer::eol_index];
+
+            if (EOL_state_ && curr_ == end_)
+            {
+                ptr_ = &dfa_[EOL_state_ * dfa_alphabet_];
+
+                if (*ptr_)
+                {
+                    end_state_ = true;
+                    id_ = *(ptr_ + boost::lexer::id_index);
+                    uid_ = *(ptr_ + boost::lexer::unique_id_index);
+                    end_start_state_ = *(ptr_ + boost::lexer::state_index);
+                    end_bol_ = bol;
+                    end_token_ = curr_;
+                }
+            }
+
+            if (end_state_) {
+                // return longest match
+                dfa_state_ = end_start_state_;
+                start_token_ = end_token_;
+
+                if (id_ == 0)
+                {
+                    bol = end_bol_;
+                    goto again;
+                }
+                else
+                {
+                    bol_ = end_bol_;
+                }
+            }
+            else {
+                bol_ = (*start_token_ == '\n') ? true : false;
+                id_ = boost::lexer::npos;
+                uid_ = boost::lexer::npos;
+            }
+
+            unique_id_ = uid_;
+            return id_;
+        }
+
+        ///////////////////////////////////////////////////////////////////////
+        static std::size_t next (
+            boost::lexer::basic_state_machine<char_type> const& state_machine_
+          , bool& bol_, Iterator &start_token_, Iterator const& end_
+          , std::size_t& unique_id_)
+        {
+            if (start_token_ == end_)
+            {
+                unique_id_ = boost::lexer::npos;
+                return 0;
+            }
+
+            bool bol = bol_;
+            std::size_t const* lookup_ = &state_machine_.data()._lookup[0]->front();
+            std::size_t dfa_alphabet_ = state_machine_.data()._dfa_alphabet[0];
+            std::size_t const* dfa_ = &state_machine_.data()._dfa[0]->front ();
+            std::size_t const* ptr_ = dfa_ + dfa_alphabet_;
+
+            Iterator curr_ = start_token_;
+            bool end_state_ = *ptr_ != 0;
+            std::size_t id_ = *(ptr_ + boost::lexer::id_index);
+            std::size_t uid_ = *(ptr_ + boost::lexer::unique_id_index);
+            bool end_bol_ = bol_;
+            Iterator end_token_ = start_token_;
+
+            while (curr_ != end_)
+            {
+                std::size_t const BOL_state_ = ptr_[boost::lexer::bol_index];
+                std::size_t const EOL_state_ = ptr_[boost::lexer::eol_index];
+
+                if (BOL_state_ && bol)
+                {
+                    ptr_ = &dfa_[BOL_state_ * dfa_alphabet_];
+                }
+                else if (EOL_state_ && *curr_ == '\n')
+                {
+                    ptr_ = &dfa_[EOL_state_ * dfa_alphabet_];
+                }
+                else
+                {
+                    typedef typename 
+                        boost::detail::iterator_traits<Iterator>::value_type 
+                    value_type;
+                    typedef typename 
+                        boost::lexer::char_traits<value_type>::index_type 
+                    index_type;
+
+                    index_type index = 
+                        boost::lexer::char_traits<value_type>::call(*curr_++);
+                    bol = (index == '\n') ? true : false;
+                    std::size_t const state_ = ptr_[
+                        lookup_[static_cast<std::size_t>(index)]];
+
+                    if (state_ == 0)
+                    {
+                        break;
+                    }
+
+                    ptr_ = &dfa_[state_ * dfa_alphabet_];
+                }
+
+                if (*ptr_)
+                {
+                    end_state_ = true;
+                    id_ = *(ptr_ + boost::lexer::id_index);
+                    uid_ = *(ptr_ + boost::lexer::unique_id_index);
+                    end_bol_ = bol;
+                    end_token_ = curr_;
+                }
+            }
+
+            std::size_t const EOL_state_ = ptr_[boost::lexer::eol_index];
+
+            if (EOL_state_ && curr_ == end_)
+            {
+                ptr_ = &dfa_[EOL_state_ * dfa_alphabet_];
+
+                if (*ptr_)
+                {
+                    end_state_ = true;
+                    id_ = *(ptr_ + boost::lexer::id_index);
+                    uid_ = *(ptr_ + boost::lexer::unique_id_index);
+                    end_bol_ = bol;
+                    end_token_ = curr_;
+                }
+            }
+
+            if (end_state_) {
+                // return longest match
+                bol_ = end_bol_;
+                start_token_ = end_token_;
+            }
+            else {
+                bol_ = *start_token_ == '\n';
+                id_ = boost::lexer::npos;
+                uid_ = boost::lexer::npos;
+            }
+
+            unique_id_ = uid_;
+            return id_;
+        }
+    };
+
+}}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/lex/lexer/lexertl/lexer.hpp b/3rdParty/Boost/src/boost/spirit/home/lex/lexer/lexertl/lexer.hpp
new file mode 100644
index 0000000..06501d9
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/lex/lexer/lexertl/lexer.hpp
@@ -0,0 +1,386 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_LEXER_MAR_17_2007_0139PM)
+#define BOOST_SPIRIT_LEX_LEXER_MAR_17_2007_0139PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <iosfwd>
+
+#include <boost/spirit/home/support/detail/lexer/generator.hpp>
+#include <boost/spirit/home/support/detail/lexer/rules.hpp>
+#include <boost/spirit/home/support/detail/lexer/consts.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+
+#include <boost/spirit/home/lex/lexer/lexertl/token.hpp>
+#include <boost/spirit/home/lex/lexer/lexertl/functor.hpp>
+#include <boost/spirit/home/lex/lexer/lexertl/functor_data.hpp>
+#include <boost/spirit/home/lex/lexer/lexertl/iterator.hpp>
+#if defined(BOOST_SPIRIT_LEXERTL_DEBUG)
+#include <boost/spirit/home/support/detail/lexer/debug.hpp>
+#endif
+
+#include <boost/foreach.hpp>
+
+namespace boost { namespace spirit { namespace lex { namespace lexertl
+{ 
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        ///////////////////////////////////////////////////////////////////////
+        //  The must_escape function checks if the given character value needs
+        //  to be preceded by a backslash character to disable its special 
+        //  meaning in the context of a regular expression
+        ///////////////////////////////////////////////////////////////////////
+        template <typename Char>
+        inline bool must_escape(Char c)
+        {
+            // FIXME: more needed?
+            switch (c) {
+            case '+': case '/': case '*': case '?':
+            case '|':
+            case '(': case ')':
+            case '[': case ']':
+            case '{': case '}':
+            case '.':
+            case '^': case '$':
+            case '\\':
+            case '"':
+                return true;
+
+            default:
+                break;
+            }
+            return false;
+        }
+
+        ///////////////////////////////////////////////////////////////////////
+        //  The escape function returns the string representation of the given 
+        //  character value, possibly escaped with a backslash character, to 
+        //  allow it being safely used in a regular expression definition.
+        ///////////////////////////////////////////////////////////////////////
+        template <typename Char>
+        inline std::basic_string<Char> escape(Char ch) 
+        { 
+            std::basic_string<Char> result(1, ch);
+            if (detail::must_escape(ch)) 
+            {
+                typedef typename std::basic_string<Char>::size_type size_type;
+                result.insert((size_type)0, 1, '\\');
+            }
+            return result;
+        }
+
+        ///////////////////////////////////////////////////////////////////////
+        //  
+        ///////////////////////////////////////////////////////////////////////
+        inline boost::lexer::regex_flags map_flags(unsigned int flags)
+        {
+            unsigned int retval = boost::lexer::none;
+            if (flags & match_flags::match_not_dot_newline)
+                retval |= boost::lexer::dot_not_newline;
+            if (flags & match_flags::match_icase)
+                retval |= boost::lexer::icase;
+
+            return boost::lexer::regex_flags(retval);
+        }
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Lexer, typename F>
+    bool generate_static(Lexer const&, std::ostream&, char const*, F);
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  Every lexer type to be used as a lexer for Spirit has to conform to 
+    //  the following public interface:
+    //
+    //    typedefs: 
+    //        iterator_type   The type of the iterator exposed by this lexer.
+    //        token_type      The type of the tokens returned from the exposed 
+    //                        iterators.
+    //
+    //    functions:
+    //        default constructor
+    //                        Since lexers are instantiated as base classes 
+    //                        only it might be a good idea to make this 
+    //                        constructor protected.
+    //        begin, end      Return a pair of iterators, when dereferenced
+    //                        returning the sequence of tokens recognized in 
+    //                        the input stream given as the parameters to the 
+    //                        begin() function.
+    //        add_token       Should add the definition of a token to be 
+    //                        recognized by this lexer.
+    //        clear           Should delete all current token definitions
+    //                        associated with the given state of this lexer 
+    //                        object.
+    //
+    //    template parameters:
+    //        Iterator        The type of the iterator used to access the
+    //                        underlying character stream.
+    //        Token           The type of the tokens to be returned from the
+    //                        exposed token iterator.
+    //        Functor         The type of the InputPolicy to use to instantiate
+    //                        the multi_pass iterator type to be used as the 
+    //                        token iterator (returned from begin()/end()).
+    //
+    ///////////////////////////////////////////////////////////////////////////
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  The lexer class is a implementation of a Spirit.Lex lexer on 
+    //  top of Ben Hanson's lexertl library as outlined above (For more 
+    //  information about lexertl go here: http://www.benhanson.net/lexertl.html).
+    //
+    //  This class is supposed to be used as the first and only template 
+    //  parameter while instantiating instances of a lex::lexer class.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Token = token<>
+      , typename Iterator = typename Token::iterator_type
+      , typename Functor = functor<Token, lexertl::detail::data, Iterator> >
+    class lexer 
+    {
+    private:
+        struct dummy { void true_() {} };
+        typedef void (dummy::*safe_bool)();
+
+        static std::size_t const all_states_id = static_cast<std::size_t>(-2);
+
+    public:
+        operator safe_bool() const
+            { return initialized_dfa_ ? &dummy::true_ : 0; }
+
+        typedef typename boost::detail::iterator_traits<Iterator>::value_type 
+            char_type;
+        typedef std::basic_string<char_type> string_type;
+
+        typedef boost::lexer::basic_rules<char_type> basic_rules_type;
+
+        //  Every lexer type to be used as a lexer for Spirit has to conform to 
+        //  a public interface .
+        typedef Token token_type;
+        typedef typename Token::id_type id_type;
+        typedef iterator<Functor> iterator_type;
+
+    private:
+        // this type is purely used for the iterator_type construction below
+        struct iterator_data_type 
+        {
+            typedef typename Functor::semantic_actions_type semantic_actions_type;
+
+            iterator_data_type(
+                    boost::lexer::basic_state_machine<char_type> const& sm
+                  , boost::lexer::basic_rules<char_type> const& rules
+                  , semantic_actions_type const& actions)
+              : state_machine_(sm), rules_(rules), actions_(actions)
+            {}
+
+            boost::lexer::basic_state_machine<char_type> const& state_machine_;
+            boost::lexer::basic_rules<char_type> const& rules_;
+            semantic_actions_type const& actions_;
+
+        private:
+            // silence MSVC warning C4512: assignment operator could not be generated
+            iterator_data_type& operator= (iterator_data_type const&);
+        };
+
+    public:
+        //  Return the start iterator usable for iterating over the generated
+        //  tokens.
+        iterator_type begin(Iterator& first, Iterator const& last
+          , char_type const* initial_state = 0) const
+        { 
+            if (!init_dfa())    // never minimize DFA for dynamic lexers
+                return iterator_type();
+
+            iterator_data_type iterator_data(state_machine_, rules_, actions_);
+            return iterator_type(iterator_data, first, last, initial_state);
+        }
+
+        //  Return the end iterator usable to stop iterating over the generated 
+        //  tokens.
+        iterator_type end() const
+        { 
+            return iterator_type(); 
+        }
+
+    protected:
+        //  Lexer instances can be created by means of a derived class only.
+        lexer(unsigned int flags) 
+          : flags_(detail::map_flags(flags))
+          , rules_(flags_)
+          , initialized_dfa_(false)
+        {}
+
+    public:
+        // interface for token definition management
+        std::size_t add_token(char_type const* state, char_type tokendef, 
+            std::size_t token_id, char_type const* targetstate)
+        {
+            add_state(state);
+            initialized_dfa_ = false;
+            if (state == all_states())
+                return rules_.add(state, detail::escape(tokendef), token_id, rules_.dot());
+
+            if (0 == targetstate)
+                targetstate = state;
+            else
+                add_state(targetstate);
+            return rules_.add(state, detail::escape(tokendef), token_id, targetstate);
+        }
+        std::size_t add_token(char_type const* state, string_type const& tokendef, 
+            std::size_t token_id, char_type const* targetstate)
+        {
+            add_state(state);
+            initialized_dfa_ = false;
+            if (state == all_states())
+                return rules_.add(state, tokendef, token_id, rules_.dot());
+
+            if (0 == targetstate)
+                targetstate = state;
+            else
+                add_state(targetstate);
+            return rules_.add(state, tokendef, token_id, targetstate);
+        }
+
+        // interface for pattern definition management
+        void add_pattern (char_type const* state, string_type const& name,
+            string_type const& patterndef)
+        {
+            add_state(state);
+            rules_.add_macro(name.c_str(), patterndef);
+            initialized_dfa_ = false;
+        }
+
+        boost::lexer::rules const& get_rules() const { return rules_; }
+
+        void clear(char_type const* state)
+        {
+            std::size_t s = rules_.state(state);
+            if (boost::lexer::npos != s)
+                rules_.clear(state);
+            initialized_dfa_ = false;
+        }
+        std::size_t add_state(char_type const* state)
+        {
+            if (state == all_states()) 
+                return all_states_id;
+
+            std::size_t stateid = rules_.state(state);
+            if (boost::lexer::npos == stateid) {
+                stateid = rules_.add_state(state);
+                initialized_dfa_ = false;
+            }
+            return stateid;
+        }
+        string_type initial_state() const 
+        { 
+            return string_type(rules_.initial());
+        }
+        string_type all_states() const 
+        { 
+            return string_type(rules_.all_states());
+        }
+
+        //  Register a semantic action with the given id
+        template <typename F>
+        void add_action(std::size_t unique_id, std::size_t state, F act)
+        {
+            // If you see an error here stating add_action is not a member of
+            // fusion::unused_type then you are probably having semantic actions 
+            // attached to at least one token in the lexer definition without
+            // using the lex::lexertl::actor_lexer<> as its base class.
+            typedef typename Functor::wrap_action_type wrapper_type;
+            if (state == all_states_id) {
+                // add the action to all known states
+                typedef typename 
+                    basic_rules_type::string_size_t_map::value_type 
+                state_type;
+                BOOST_FOREACH(state_type const& s, rules_.statemap())
+                    actions_.add_action(unique_id, s.second, wrapper_type::call(act));
+            }
+            else {
+                actions_.add_action(unique_id, state, wrapper_type::call(act));
+            }
+        }
+//         template <typename F>
+//         void add_action(std::size_t unique_id, char_type const* state, F act)
+//         {
+//             typedef typename Functor::wrap_action_type wrapper_type;
+//             actions_.add_action(unique_id, add_state(state), wrapper_type::call(act));
+//         }
+
+        // We do not minimize the state machine by default anymore because 
+        // Ben said: "If you can afford to generate a lexer at runtime, there 
+        //            is little point in calling minimise."
+        // Go figure.
+        bool init_dfa(bool minimize = false) const
+        {
+            if (!initialized_dfa_) {
+                state_machine_.clear();
+                typedef boost::lexer::basic_generator<char_type> generator;
+                generator::build (rules_, state_machine_);
+                if (minimize)
+                    generator::minimise (state_machine_);
+
+#if defined(BOOST_SPIRIT_LEXERTL_DEBUG)
+                boost::lexer::debug::dump(state_machine_, std::cerr);
+#endif
+                initialized_dfa_ = true;
+            }
+            return true;
+        }
+
+    private:
+        // lexertl specific data
+        mutable boost::lexer::basic_state_machine<char_type> state_machine_;
+        boost::lexer::regex_flags flags_;
+        basic_rules_type rules_;
+
+        typename Functor::semantic_actions_type actions_;
+        mutable bool initialized_dfa_;
+
+        // generator functions must be able to access members directly
+        template <typename Lexer, typename F> 
+        friend bool generate_static(Lexer const&, std::ostream&, char const*, F);
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  The actor_lexer class is another implementation of a Spirit.Lex 
+    //  lexer on top of Ben Hanson's lexertl library as outlined above (For 
+    //  more information about lexertl go here: 
+    //  http://www.benhanson.net/lexertl.html).
+    //
+    //  The only difference to the lexer class above is that token_def
+    //  definitions may have semantic (lexer) actions attached while being 
+    //  defined:
+    //
+    //      int w;
+    //      token_def word = "[^ \t\n]+";
+    //      self = word[++ref(w)];        // see example: word_count_lexer
+    //
+    //  This class is supposed to be used as the first and only template 
+    //  parameter while instantiating instances of a lex::lexer class.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Token = token<>
+      , typename Iterator = typename Token::iterator_type
+      , typename Functor = functor<Token, lexertl::detail::data, Iterator, mpl::true_> >
+    class actor_lexer : public lexer<Token, Iterator, Functor>
+    {
+    protected:
+        //  Lexer instances can be created by means of a derived class only.
+        actor_lexer(unsigned int flags) 
+          : lexer<Token, Iterator, Functor>(flags) {}
+    };
+
+}}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/lex/lexer/lexertl/semantic_action_data.hpp b/3rdParty/Boost/src/boost/spirit/home/lex/lexer/lexertl/semantic_action_data.hpp
new file mode 100644
index 0000000..30748c5
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/lex/lexer/lexertl/semantic_action_data.hpp
@@ -0,0 +1,121 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_LEXER_SEMANTIC_ACTION_DATA_JUN_10_2009_0417PM)
+#define BOOST_SPIRIT_LEX_LEXER_SEMANTIC_ACTION_DATA_JUN_10_2009_0417PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/lex/lexer/pass_flags.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/function.hpp>
+#include <vector>
+
+namespace boost { namespace spirit { namespace lex { namespace lexertl
+{ 
+    namespace detail
+    {
+        ///////////////////////////////////////////////////////////////////////
+        template <typename Iterator, typename SupportsState, typename Data>
+        struct semantic_actions;
+
+        // This specialization of semantic_actions will be used if the token
+        // type (lexer definition) does not support states, which simplifies 
+        // the data structures used to store the semantic action function 
+        // objects.
+        template <typename Iterator, typename Data>
+        struct semantic_actions<Iterator, mpl::false_, Data>
+        {
+            typedef void functor_type(Iterator&, Iterator&
+              , BOOST_SCOPED_ENUM(pass_flags)&, std::size_t&, Data&);
+            typedef boost::function<functor_type> functor_wrapper_type;
+
+            // add a semantic action function object
+            template <typename F>
+            void add_action(std::size_t unique_id, std::size_t, F act) 
+            {
+                if (actions_.size() <= unique_id)
+                    actions_.resize(unique_id + 1); 
+
+                actions_[unique_id] = act;
+            }
+
+            // try to invoke a semantic action for the given token (unique_id)
+            BOOST_SCOPED_ENUM(pass_flags) invoke_actions(std::size_t /*state*/
+              , std::size_t& id, std::size_t unique_id, Iterator& end
+              , Data& data) const
+            {
+                // if there is nothing to invoke, continue with 'match'
+                if (unique_id >= actions_.size() || !actions_[unique_id]) 
+                    return pass_flags::pass_normal;
+
+                // Note: all arguments might be changed by the invoked semantic 
+                //       action
+                BOOST_SCOPED_ENUM(pass_flags) match = pass_flags::pass_normal;
+                actions_[unique_id](data.get_first(), end, match, id, data);
+                return match;
+            }
+
+            std::vector<functor_wrapper_type> actions_;
+        }; 
+
+        // This specialization of semantic_actions will be used if the token
+        // type (lexer definition) needs to support states, resulting in a more
+        // complex data structure needed for storing the semantic action 
+        // function objects.
+        template <typename Iterator, typename Data>
+        struct semantic_actions<Iterator, mpl::true_, Data>
+        {
+            typedef void functor_type(Iterator&, Iterator&
+              , BOOST_SCOPED_ENUM(pass_flags)&, std::size_t&, Data&);
+            typedef boost::function<functor_type> functor_wrapper_type;
+
+            // add a semantic action function object
+            template <typename F>
+            void add_action(std::size_t unique_id, std::size_t state, F act) 
+            {
+                if (actions_.size() <= state)
+                    actions_.resize(state + 1); 
+
+                std::vector<functor_wrapper_type>& actions (actions_[state]);
+                if (actions.size() <= unique_id)
+                    actions.resize(unique_id + 1); 
+
+                actions[unique_id] = act;
+            }
+
+            // try to invoke a semantic action for the given token (unique_id)
+            BOOST_SCOPED_ENUM(pass_flags) invoke_actions(std::size_t state
+              , std::size_t& id, std::size_t unique_id, Iterator& end
+              , Data& data) const
+            {
+                // if there is no action defined for this state, return match
+                if (state >= actions_.size())
+                    return pass_flags::pass_normal;
+
+                // if there is nothing to invoke, continue with 'match'
+                std::vector<functor_wrapper_type> const& actions = actions_[state];
+                if (unique_id >= actions.size() || !actions[unique_id]) 
+                    return pass_flags::pass_normal;
+
+                // set token value 
+                data.set_end(end);
+
+                // Note: all arguments might be changed by the invoked semantic 
+                //       action
+                BOOST_SCOPED_ENUM(pass_flags) match = pass_flags::pass_normal;
+                actions[unique_id](data.get_first(), end, match, id, data);
+                return match;
+            }
+
+            std::vector<std::vector<functor_wrapper_type> > actions_;
+        }; 
+    }
+
+}}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/lex/lexer/lexertl/token.hpp b/3rdParty/Boost/src/boost/spirit/home/lex/lexer/lexertl/token.hpp
new file mode 100644
index 0000000..a1b4a90
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/lex/lexer/lexertl/token.hpp
@@ -0,0 +1,638 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_TOKEN_FEB_10_2008_0751PM)
+#define BOOST_SPIRIT_LEX_TOKEN_FEB_10_2008_0751PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/spirit/home/qi/detail/assign_to.hpp>
+#include <boost/spirit/home/support/attributes.hpp>
+#include <boost/spirit/home/support/argument.hpp>
+#include <boost/spirit/home/support/detail/lexer/generator.hpp>
+#include <boost/spirit/home/support/detail/lexer/rules.hpp>
+#include <boost/spirit/home/support/detail/lexer/consts.hpp>
+#include <boost/fusion/include/vector.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/fusion/include/value_at.hpp>
+#include <boost/detail/iterator.hpp>
+#include <boost/variant.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/mpl/insert.hpp>
+#include <boost/mpl/begin.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/range/iterator_range.hpp>
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+#include <boost/static_assert.hpp>
+#endif
+
+#if defined(BOOST_SPIRIT_DEBUG)
+#include <iosfwd>
+#endif
+
+namespace boost { namespace spirit { namespace lex { namespace lexertl
+{ 
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  The token is the type of the objects returned by default by the 
+    //  iterator.
+    //
+    //    template parameters:
+    //        Iterator        The type of the iterator used to access the
+    //                        underlying character stream.
+    //        AttributeTypes  A mpl sequence containing the types of all 
+    //                        required different token values to be supported 
+    //                        by this token type.
+    //        HasState        A mpl::bool_ indicating, whether this token type
+    //                        should support lexer states.
+    //        Idtype          The type to use for the token id (defaults to 
+    //                        std::size_t).
+    //
+    //  It is possible to use other token types with the spirit::lex 
+    //  framework as well. If you plan to use a different type as your token 
+    //  type, you'll need to expose the following things from your token type 
+    //  to make it compatible with spirit::lex:
+    //
+    //    typedefs
+    //        iterator_type   The type of the iterator used to access the
+    //                        underlying character stream.
+    //
+    //        id_type         The type of the token id used.
+    //
+    //    methods
+    //        default constructor
+    //                        This should initialize the token as an end of 
+    //                        input token.
+    //        constructors    The prototype of the other required 
+    //                        constructors should be:
+    //
+    //              token(int)
+    //                        This constructor should initialize the token as 
+    //                        an invalid token (not carrying any specific 
+    //                        values)
+    //
+    //              where:  the int is used as a tag only and its value is 
+    //                      ignored
+    //
+    //                        and:
+    //
+    //              token(Idtype id, std::size_t state, 
+    //                    iterator_type first, iterator_type last);
+    //
+    //              where:  id:           token id
+    //                      state:        lexer state this token was matched in
+    //                      first, last:  pair of iterators marking the matched 
+    //                                    range in the underlying input stream 
+    //
+    //        accessors
+    //              id()      return the token id of the matched input sequence
+    //              id(newid) set the token id of the token instance
+    //
+    //              state()   return the lexer state this token was matched in
+    //
+    //              value()   return the token value
+    //
+    //  Additionally, you will have to implement a couple of helper functions
+    //  in the same namespace as the token type: a comparison operator==() to 
+    //  compare your token instances, a token_is_valid() function and different 
+    //  specializations of the Spirit customization point 
+    //  assign_to_attribute_from_value as shown below.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator = char const*
+      , typename AttributeTypes = mpl::vector0<>
+      , typename HasState = mpl::true_
+      , typename Idtype = std::size_t> 
+    struct token;
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  This specialization of the token type doesn't contain any item data and
+    //  doesn't support working with lexer states.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Idtype>
+    struct token<Iterator, lex::omit, mpl::false_, Idtype>
+    {
+        typedef Iterator iterator_type;
+        typedef mpl::false_ has_state;
+        typedef Idtype id_type;
+        typedef unused_type token_value_type;
+
+        //  default constructed tokens correspond to EOI tokens
+        token() : id_(id_type(boost::lexer::npos)) {}
+
+        //  construct an invalid token
+        explicit token(int) : id_(id_type(0)) {}
+
+        token(id_type id, std::size_t) : id_(id) {}
+
+        token(id_type id, std::size_t, token_value_type)
+          : id_(id) {}
+
+#if defined(BOOST_SPIRIT_DEBUG)
+        token(id_type id, std::size_t, Iterator const& first
+              , Iterator const& last)
+          : matched_(first, last)
+          , id_(id) 
+        {}
+#else
+        token(id_type id, std::size_t, Iterator const&, Iterator const&)
+          : id_(id) 
+        {}
+#endif
+
+        //  this default conversion operator is needed to allow the direct 
+        //  usage of tokens in conjunction with the primitive parsers defined 
+        //  in Qi
+        operator id_type() const { return id_; }
+
+        //  Retrieve or set the token id of this token instance. 
+        id_type id() const { return id_; }
+        void id(id_type newid) { id_ = newid; }
+
+        std::size_t state() const { return 0; }   // always '0' (INITIAL state)
+
+        bool is_valid() const 
+        { 
+            return 0 != id_ && id_type(boost::lexer::npos) != id_; 
+        }
+
+#if defined(BOOST_SPIRIT_DEBUG)
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1600)
+        // workaround for MSVC10 which has problems copying a default 
+        // constructed iterator_range
+        token& operator= (token const& rhs)
+        {
+            if (this != &rhs) 
+            {
+                id_ = rhs.id_;
+                matched_ = rhs.matched_;
+            }
+            return *this;
+        }
+#endif
+        std::pair<Iterator, Iterator> matched_;
+#endif
+
+    protected:
+        id_type id_;            // token id, 0 if nothing has been matched
+    };
+
+#if defined(BOOST_SPIRIT_DEBUG)
+    template <typename Char, typename Traits, typename Iterator
+      , typename AttributeTypes, typename HasState, typename Idtype> 
+    inline std::basic_ostream<Char, Traits>& 
+    operator<< (std::basic_ostream<Char, Traits>& os
+      , token<Iterator, AttributeTypes, HasState, Idtype> const& t)
+    {
+        if (t.is_valid()) {
+            Iterator end = t.matched_.second;
+            for (Iterator it = t.matched_.first; it != end; ++it)
+                os << *it;
+        }
+        else {
+            os << "<invalid token>";
+        }
+        return os;
+    }
+#endif
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  This specialization of the token type doesn't contain any item data but
+    //  supports working with lexer states.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Idtype>
+    struct token<Iterator, lex::omit, mpl::true_, Idtype>
+      : token<Iterator, lex::omit, mpl::false_, Idtype>
+    {
+    private:
+        typedef token<Iterator, lex::omit, mpl::false_, Idtype> base_type;
+
+    public:
+        typedef typename base_type::id_type id_type;
+        typedef Iterator iterator_type;
+        typedef mpl::true_ has_state;
+        typedef unused_type token_value_type;
+
+        //  default constructed tokens correspond to EOI tokens
+        token() : state_(boost::lexer::npos) {}
+
+        //  construct an invalid token
+        explicit token(int) : base_type(0), state_(boost::lexer::npos) {}
+
+        token(id_type id, std::size_t state)
+          : base_type(id, boost::lexer::npos), state_(state) {}
+
+        token(id_type id, std::size_t state, token_value_type)
+          : base_type(id, boost::lexer::npos, unused)
+          , state_(state) {}
+
+        token(id_type id, std::size_t state
+              , Iterator const& first, Iterator const& last)
+          : base_type(id, boost::lexer::npos, first, last)
+          , state_(state) {}
+
+        std::size_t state() const { return state_; }
+
+#if defined(BOOST_SPIRIT_DEBUG) && BOOST_WORKAROUND(BOOST_MSVC, == 1600)
+        // workaround for MSVC10 which has problems copying a default 
+        // constructed iterator_range
+        token& operator= (token const& rhs)
+        {
+            if (this != &rhs) 
+            {
+                this->base_type::operator=(static_cast<base_type const&>(rhs));
+                state_ = rhs.state_;
+            }
+            return *this;
+        }
+#endif
+
+    protected:
+        std::size_t state_;      // lexer state this token was matched in
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  The generic version of the token type derives from the 
+    //  specialization above and adds a single data member holding the item 
+    //  data carried by the token instance.
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        ///////////////////////////////////////////////////////////////////////
+        //  Meta-function to calculate the type of the variant data item to be 
+        //  stored with each token instance.
+        //
+        //  Note: The iterator pair needs to be the first type in the list of 
+        //        types supported by the generated variant type (this is being 
+        //        used to identify whether the stored data item in a particular 
+        //        token instance needs to be converted from the pair of 
+        //        iterators (see the first of the assign_to_attribute_from_value 
+        //        specializations below).
+        ///////////////////////////////////////////////////////////////////////
+        template <typename IteratorPair, typename AttributeTypes>
+        struct token_value_typesequence
+        {
+            typedef typename mpl::insert<
+                AttributeTypes
+              , typename mpl::begin<AttributeTypes>::type
+              , IteratorPair
+            >::type sequence_type;
+            typedef typename make_variant_over<sequence_type>::type type;
+        };
+
+        ///////////////////////////////////////////////////////////////////////
+        //  The type of the data item stored with a token instance is defined 
+        //  by the template parameter 'AttributeTypes' and may be:
+        //  
+        //     lex::omit:         no data item is stored with the token 
+        //                        instance (this is handled by the 
+        //                        specializations of the token class
+        //                        below)
+        //     mpl::vector0<>:    each token instance stores a pair of 
+        //                        iterators pointing to the matched input 
+        //                        sequence
+        //     mpl::vector<...>:  each token instance stores a variant being 
+        //                        able to store the pair of iterators pointing 
+        //                        to the matched input sequence, or any of the 
+        //                        types a specified in the mpl::vector<>
+        //
+        //  All this is done to ensure the token type is as small (in terms 
+        //  of its byte-size) as possible.
+        ///////////////////////////////////////////////////////////////////////
+        template <typename IteratorPair, typename AttributeTypes>
+        struct token_value_type
+          : mpl::eval_if<
+                mpl::or_<
+                    is_same<AttributeTypes, mpl::vector0<> >
+                  , is_same<AttributeTypes, mpl::vector<> > >
+              , mpl::identity<IteratorPair>
+              , token_value_typesequence<IteratorPair, AttributeTypes> >
+        {};
+    }
+
+    template <typename Iterator, typename AttributeTypes, typename HasState
+      , typename Idtype>
+    struct token : token<Iterator, lex::omit, HasState, Idtype>
+    {
+    private: // precondition assertions
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+        BOOST_STATIC_ASSERT((mpl::is_sequence<AttributeTypes>::value || 
+                            is_same<AttributeTypes, lex::omit>::value));
+#endif
+        typedef token<Iterator, lex::omit, HasState, Idtype> base_type;
+
+    protected: 
+        //  If no additional token value types are given, the the token will 
+        //  hold the plain pair of iterators pointing to the matched range
+        //  in the underlying input sequence. Otherwise the token value is 
+        //  stored as a variant and will again hold the pair of iterators but
+        //  is able to hold any of the given data types as well. The conversion 
+        //  from the iterator pair to the required data type is done when it is
+        //  accessed for the first time.
+        typedef iterator_range<Iterator> iterpair_type;
+
+    public:
+        typedef typename base_type::id_type id_type;
+        typedef typename detail::token_value_type<
+            iterpair_type, AttributeTypes
+        >::type token_value_type;
+
+        typedef Iterator iterator_type;
+
+        //  default constructed tokens correspond to EOI tokens
+        token() : value_(iterpair_type(iterator_type(), iterator_type())) {}
+
+        //  construct an invalid token
+        explicit token(int)
+          : base_type(0)
+          , value_(iterpair_type(iterator_type(), iterator_type())) {}
+
+        token(id_type id, std::size_t state, token_value_type const& value)
+          : base_type(id, state, value)
+          , value_(value) {}
+
+        token(id_type id, std::size_t state, Iterator const& first
+              , Iterator const& last)
+          : base_type(id, state, first, last)
+          , value_(iterpair_type(first, last)) {}
+
+        token_value_type& value() { return value_; }
+        token_value_type const& value() const { return value_; }
+
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1600)
+        // workaround for MSVC10 which has problems copying a default 
+        // constructed iterator_range
+        token& operator= (token const& rhs)
+        {
+            if (this != &rhs) 
+            {
+                this->base_type::operator=(static_cast<base_type const&>(rhs));
+                if (this->id_ != boost::lexer::npos && this->id_ != 0) 
+                    value_ = rhs.value_;
+            }
+            return *this;
+        }
+#endif
+
+    protected:
+        token_value_type value_; // token value, by default a pair of iterators
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  tokens are considered equal, if their id's match (these are unique)
+    template <typename Iterator, typename AttributeTypes, typename HasState
+      , typename Idtype>
+    inline bool 
+    operator== (token<Iterator, AttributeTypes, HasState, Idtype> const& lhs, 
+                token<Iterator, AttributeTypes, HasState, Idtype> const& rhs)
+    {
+        return lhs.id() == rhs.id();
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  This overload is needed by the multi_pass/functor_input_policy to 
+    //  validate a token instance. It has to be defined in the same namespace 
+    //  as the token class itself to allow ADL to find it.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename AttributeTypes, typename HasState
+      , typename Idtype>
+    inline bool 
+    token_is_valid(token<Iterator, AttributeTypes, HasState, Idtype> const& t)
+    {
+        return t.is_valid();
+    }
+}}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  We have to provide specializations for the customization point
+    //  assign_to_attribute_from_value allowing to extract the needed value 
+    //  from the token. 
+    ///////////////////////////////////////////////////////////////////////////
+
+    //  This is called from the parse function of token_def if the token_def
+    //  has been defined to carry a special attribute type
+    template <typename Attribute, typename Iterator, typename AttributeTypes
+      , typename HasState, typename Idtype>
+    struct assign_to_attribute_from_value<Attribute
+      , lex::lexertl::token<Iterator, AttributeTypes, HasState, Idtype> >
+    {
+        static void 
+        call(lex::lexertl::token<Iterator, AttributeTypes, HasState, Idtype> const& t
+          , Attribute& attr)
+        {
+        //  The goal of this function is to avoid the conversion of the pair of
+        //  iterators (to the matched character sequence) into the token value 
+        //  of the required type being done more than once. For this purpose it 
+        //  checks whether the stored value type is still the default one (pair 
+        //  of iterators) and if yes, replaces the pair of iterators with the 
+        //  converted value to be returned from subsequent calls.
+
+            if (0 == t.value().which()) {
+            //  first access to the token value
+                typedef iterator_range<Iterator> iterpair_type;
+                iterpair_type const& ip = get<iterpair_type>(t.value());
+
+            // Interestingly enough we use the assign_to() framework defined in 
+            // Spirit.Qi allowing to convert the pair of iterators to almost any 
+            // required type (assign_to(), if available, uses the standard Spirit 
+            // parsers to do the conversion).
+                spirit::traits::assign_to(ip.begin(), ip.end(), attr);
+
+            //  If you get an error during the compilation of the following 
+            //  assignment expression, you probably forgot to list one or more 
+            //  types used as token value types (in your token_def<...> 
+            //  definitions) in your definition of the token class. I.e. any token 
+            //  value type used for a token_def<...> definition has to be listed 
+            //  during the declaration of the token type to use. For instance let's 
+            //  assume we have two token_def's:
+            //
+            //      token_def<int> number; number = "...";
+            //      token_def<std::string> identifier; identifier = "...";
+            //
+            //  Then you'll have to use the following token type definition 
+            //  (assuming you are using the token class):
+            //
+            //      typedef mpl::vector<int, std::string> token_values;
+            //      typedef token<base_iter_type, token_values> token_type;
+            //
+            //  where: base_iter_type is the iterator type used to expose the 
+            //         underlying input stream.
+            //
+            //  This token_type has to be used as the second template parameter 
+            //  to the lexer class:
+            //
+            //      typedef lexer<base_iter_type, token_type> lexer_type;
+            //
+            //  again, assuming you're using the lexer<> template for your 
+            //  tokenization.
+
+                typedef lex::lexertl::token<
+                    Iterator, AttributeTypes, HasState, Idtype> token_type;
+                const_cast<token_type&>(t).value() = attr;   // re-assign value
+            }
+            else {
+            // reuse the already assigned value
+                spirit::traits::assign_to(get<Attribute>(t.value()), attr);
+            }
+        }
+    };
+
+    template <typename Attribute, typename Iterator, typename AttributeTypes
+      , typename HasState, typename Idtype>
+    struct assign_to_container_from_value<Attribute
+          , lex::lexertl::token<Iterator, AttributeTypes, HasState, Idtype> >
+      : assign_to_attribute_from_value<Attribute
+          , lex::lexertl::token<Iterator, AttributeTypes, HasState, Idtype> >
+    {};
+
+    template <typename Iterator>
+    struct assign_to_container_from_value<
+        iterator_range<Iterator>, iterator_range<Iterator> >
+    {
+        static void 
+        call(iterator_range<Iterator> const& val, iterator_range<Iterator>& attr)
+        {
+            attr = val;
+        }
+    };
+
+    //  These are called from the parse function of token_def if the token type
+    //  has no special attribute type assigned 
+    template <typename Attribute, typename Iterator, typename HasState
+      , typename Idtype>
+    struct assign_to_attribute_from_value<Attribute
+      , lex::lexertl::token<Iterator, mpl::vector0<>, HasState, Idtype> >
+    {
+        static void 
+        call(lex::lexertl::token<Iterator, mpl::vector0<>, HasState, Idtype> const& t
+          , Attribute& attr)
+        {
+            //  The default type returned by the token_def parser component (if 
+            //  it has no token value type assigned) is the pair of iterators 
+            //  to the matched character sequence.
+            spirit::traits::assign_to(t.value().begin(), t.value().end(), attr);
+        }
+    };
+
+    template <typename Attribute, typename Iterator, typename HasState
+      , typename Idtype>
+    struct assign_to_container_from_value<Attribute
+          , lex::lexertl::token<Iterator, mpl::vector0<>, HasState, Idtype> >
+      : assign_to_attribute_from_value<Attribute
+          , lex::lexertl::token<Iterator, mpl::vector0<>, HasState, Idtype> >
+    {};
+
+    // same as above but using mpl::vector<> instead of mpl::vector0<>
+    template <typename Attribute, typename Iterator, typename HasState
+      , typename Idtype>
+    struct assign_to_attribute_from_value<Attribute
+      , lex::lexertl::token<Iterator, mpl::vector<>, HasState, Idtype> >
+    {
+        static void 
+        call(lex::lexertl::token<Iterator, mpl::vector<>, HasState, Idtype> const& t
+          , Attribute& attr)
+        {
+            //  The default type returned by the token_def parser component (if 
+            //  it has no token value type assigned) is the pair of iterators 
+            //  to the matched character sequence.
+            spirit::traits::assign_to(t.value().begin(), t.value().end(), attr);
+        }
+    };
+
+    template <typename Attribute, typename Iterator, typename HasState
+      , typename Idtype>
+    struct assign_to_container_from_value<Attribute
+          , lex::lexertl::token<Iterator, mpl::vector<>, HasState, Idtype> >
+      : assign_to_attribute_from_value<Attribute
+          , lex::lexertl::token<Iterator, mpl::vector<>, HasState, Idtype> >
+    {};
+
+    //  This is called from the parse function of token_def if the token type
+    //  has been explicitly omitted (i.e. no attribute value is used), which
+    //  essentially means that every attribute gets initialized using default 
+    //  constructed values.
+    template <typename Attribute, typename Iterator, typename HasState
+      , typename Idtype>
+    struct assign_to_attribute_from_value<Attribute
+      , lex::lexertl::token<Iterator, lex::omit, HasState, Idtype> >
+    {
+        static void 
+        call(lex::lexertl::token<Iterator, lex::omit, HasState, Idtype> const& t
+          , Attribute& attr)
+        {
+            // do nothing
+        }
+    };
+
+    template <typename Attribute, typename Iterator, typename HasState
+      , typename Idtype>
+    struct assign_to_container_from_value<Attribute
+          , lex::lexertl::token<Iterator, lex::omit, HasState, Idtype> >
+      : assign_to_attribute_from_value<Attribute
+          , lex::lexertl::token<Iterator, lex::omit, HasState, Idtype> >
+    {};
+
+    //  This is called from the parse function of lexer_def_
+    template <typename Iterator, typename AttributeTypes, typename HasState
+      , typename Idtype_, typename Idtype>
+    struct assign_to_attribute_from_value<
+        fusion::vector2<Idtype_, iterator_range<Iterator> >
+      , lex::lexertl::token<Iterator, AttributeTypes, HasState, Idtype> >
+    {
+        static void 
+        call(lex::lexertl::token<Iterator, AttributeTypes, HasState, Idtype> const& t
+          , fusion::vector2<Idtype_, iterator_range<Iterator> >& attr)
+        {
+            //  The type returned by the lexer_def_ parser components is a 
+            //  fusion::vector containing the token id of the matched token 
+            //  and the pair of iterators to the matched character sequence.
+            typedef iterator_range<Iterator> iterpair_type;
+            typedef fusion::vector2<Idtype_, iterator_range<Iterator> > 
+                attribute_type;
+
+            iterpair_type const& ip = get<iterpair_type>(t.value());
+            attr = attribute_type(t.id(), get<iterpair_type>(t.value()));
+        }
+    };
+
+    template <typename Iterator, typename AttributeTypes, typename HasState
+      , typename Idtype_, typename Idtype>
+    struct assign_to_container_from_value<
+            fusion::vector2<Idtype_, iterator_range<Iterator> >
+          , lex::lexertl::token<Iterator, AttributeTypes, HasState, Idtype> >
+      : assign_to_attribute_from_value<
+            fusion::vector2<Idtype_, iterator_range<Iterator> >
+          , lex::lexertl::token<Iterator, AttributeTypes, HasState, Idtype> >
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Overload debug output for a single token, this integrates lexer tokens 
+    // with Qi's simple_trace debug facilities
+    template <typename Iterator, typename Attribute, typename HasState
+      , typename Idtype>
+    struct token_printer_debug<
+        lex::lexertl::token<Iterator, Attribute, HasState, Idtype> >
+    {
+        typedef lex::lexertl::token<Iterator, Attribute, HasState, Idtype> token_type;
+
+        template <typename Out>
+        static void print(Out& out, token_type const& val) 
+        {
+            out << '[';
+            spirit::traits::print_token(out, val.value());
+            out << ']';
+        }
+    };
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/lex/lexer/lexertl/wrap_action.hpp b/3rdParty/Boost/src/boost/spirit/home/lex/lexer/lexertl/wrap_action.hpp
new file mode 100644
index 0000000..1ef3914
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/lex/lexer/lexertl/wrap_action.hpp
@@ -0,0 +1,182 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_WRAP_ACTION_APR_19_2008_0103PM)
+#define BOOST_SPIRIT_WRAP_ACTION_APR_19_2008_0103PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/phoenix/core/actor.hpp>
+#include <boost/spirit/home/phoenix/core/argument.hpp>
+#include <boost/spirit/home/phoenix/bind.hpp>
+#include <boost/spirit/home/phoenix/scope.hpp>
+#include <boost/spirit/home/support/attributes.hpp>
+#include <boost/spirit/home/lex/lexer/pass_flags.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace lex { namespace lexertl 
+{ 
+    namespace detail
+    {
+        template <typename FunctionType, typename Iterator, typename Context
+          , typename IdType>
+        struct wrap_action
+        {
+            // plain functions with 5 arguments and function objects are not 
+            // touched at all
+            template <typename F>
+            static FunctionType call(F const& f)
+            {
+                return f;
+            }
+
+            // wrap phoenix actor
+            struct phoenix_action
+            {
+                template <typename F, typename T1, typename T2, typename T3
+                  , typename T4, typename T5>
+                struct result { typedef void type; };
+
+                template <typename Eval>
+                void operator()(phoenix::actor<Eval> const& f, Iterator& start
+                  , Iterator& end, BOOST_SCOPED_ENUM(pass_flags)& pass
+                  , IdType& id, Context& ctx) const
+                {
+                    f (start, end, pass, id, ctx);
+                }
+            };
+
+            template <typename Eval>
+            static FunctionType call(phoenix::actor<Eval> const& f)
+            {
+                using phoenix::arg_names::_1;
+                using phoenix::arg_names::_2;
+                using phoenix::arg_names::_3;
+                using phoenix::arg_names::_4;
+                using phoenix::arg_names::_5;
+                return phoenix::bind(phoenix_action(), phoenix::lambda[f], 
+                    _1, _2, _3, _4, _5);
+            }
+
+            // semantic actions with 4 arguments
+            template <typename F>
+            static void arg4_action(F* f, Iterator& start, Iterator& end
+              , BOOST_SCOPED_ENUM(pass_flags)& pass, IdType& id
+              , Context const&)
+            {
+                f(start, end, pass, id);
+            }
+
+            template <typename A0, typename A1, typename A2, typename A3>
+            static FunctionType call(void (*f)(A0, A1, A2, A3))
+            {
+                void (*pf)(void(*)(A0, A1, A2, A3)
+                  , Iterator&, Iterator&, BOOST_SCOPED_ENUM(pass_flags)&
+                  , IdType&, Context const&) = &wrap_action::arg4_action;
+
+                using phoenix::arg_names::_1;
+                using phoenix::arg_names::_2;
+                using phoenix::arg_names::_3;
+                using phoenix::arg_names::_4;
+                using phoenix::arg_names::_5;
+                return phoenix::bind(pf, f, _1, _2, _3, _4, _5);
+            }
+
+            // semantic actions with 3 arguments
+            template <typename F>
+            static void arg3_action(F* f, Iterator& start, Iterator& end
+              , BOOST_SCOPED_ENUM(pass_flags)& pass, IdType
+              , Context const&)
+            {
+                f(start, end, pass);
+            }
+
+            template <typename A0, typename A1, typename A2>
+            static FunctionType call(void (*f)(A0, A1, A2))
+            {
+                void (*pf)(void(*)(A0, A1, A2), Iterator&, Iterator&
+                  , BOOST_SCOPED_ENUM(pass_flags)&, IdType
+                  , Context const&) = &wrap_action::arg3_action;
+
+                using phoenix::arg_names::_1;
+                using phoenix::arg_names::_2;
+                using phoenix::arg_names::_3;
+                using phoenix::arg_names::_4;
+                using phoenix::arg_names::_5;
+                return phoenix::bind(pf, f, _1, _2, _3, _4, _5);
+            }
+
+            // semantic actions with 2 arguments
+            template <typename F>
+            static void arg2_action(F* f, Iterator& start, Iterator& end
+              , BOOST_SCOPED_ENUM(pass_flags)&, IdType, Context const&)
+            {
+                f (start, end);
+            }
+
+            template <typename A0, typename A1>
+            static FunctionType call(void (*f)(A0, A1))
+            {
+                void (*pf)(void(*)(A0, A1), Iterator&, Iterator&
+                  , BOOST_SCOPED_ENUM(pass_flags)&
+                  , IdType, Context const&) = &wrap_action::arg2_action;
+
+                using phoenix::arg_names::_1;
+                using phoenix::arg_names::_2;
+                using phoenix::arg_names::_3;
+                using phoenix::arg_names::_4;
+                using phoenix::arg_names::_5;
+                return phoenix::bind(pf, f, _1, _2, _3, _4, _5);
+            }
+
+            // we assume that either both iterators are to be passed to the 
+            // semantic action or none iterator at all (i.e. it's not possible 
+            // to have a lexer semantic action function taking one arguments).
+
+            // semantic actions with 0 argument
+            template <typename F>
+            static void arg0_action(F* f, Iterator&, Iterator&
+              , BOOST_SCOPED_ENUM(pass_flags)&, IdType, Context const&)
+            {
+                f();
+            }
+
+            static FunctionType call(void (*f)())
+            {
+                void (*pf)(void(*)(), Iterator&, Iterator&
+                  , BOOST_SCOPED_ENUM(pass_flags)&
+                  , IdType, Context const&) = &arg0_action;
+
+                using phoenix::arg_names::_1;
+                using phoenix::arg_names::_2;
+                using phoenix::arg_names::_3;
+                using phoenix::arg_names::_4;
+                using phoenix::arg_names::_5;
+                return phoenix::bind(pf, f, _1, _2, _3, _4, _5);
+            }
+        };
+
+        // specialization allowing to skip wrapping for lexer types not 
+        // supporting semantic actions
+        template <typename Iterator, typename Context, typename Idtype>
+        struct wrap_action<unused_type, Iterator, Context, Idtype>
+        {
+            // plain function objects are not touched at all
+            template <typename F>
+            static F const& call(F const& f)
+            {
+                return f;
+            }
+        };
+    }
+
+}}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/lex/lexer/pass_flags.hpp b/3rdParty/Boost/src/boost/spirit/home/lex/lexer/pass_flags.hpp
new file mode 100644
index 0000000..6cda3ba
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/lex/lexer/pass_flags.hpp
@@ -0,0 +1,28 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_PASS_FLAGS_JUN_09_2009_0840PM)
+#define BOOST_SPIRIT_LEX_PASS_FLAGS_JUN_09_2009_0840PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/detail/scoped_enum_emulation.hpp>
+
+namespace boost { namespace spirit { namespace lex
+{
+    ///////////////////////////////////////////////////////////////////////////
+    BOOST_SCOPED_ENUM_START(pass_flags) 
+    { 
+        pass_fail = 0,        // make the current match fail in retrospective
+        pass_normal = 1,      // continue normal token matching, that's the default 
+        pass_ignore = 2       // ignore the current token and start matching the next
+    };
+    BOOST_SCOPED_ENUM_END
+
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/lex/lexer/sequence.hpp b/3rdParty/Boost/src/boost/spirit/home/lex/lexer/sequence.hpp
new file mode 100644
index 0000000..b7fad61
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/lex/lexer/sequence.hpp
@@ -0,0 +1,72 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(SPIRIT_LEX_SEQUENCE_MAR_28_2007_0610PM)
+#define SPIRIT_LEX_SEQUENCE_MAR_28_2007_0610PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/lex/domain.hpp>
+#include <boost/spirit/home/lex/lexer_type.hpp>
+#include <boost/spirit/home/lex/meta_compiler.hpp>
+#include <boost/spirit/home/lex/detail/sequence_function.hpp>
+#include <boost/fusion/include/any.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_operator<lex::domain, proto::tag::bitwise_or>  // enables |
+      : mpl::true_ {};
+
+    template <>
+    struct flatten_tree<lex::domain, proto::tag::bitwise_or>  // flattens |
+      : mpl::true_ {};
+
+}}
+
+namespace boost { namespace spirit { namespace lex
+{
+    template <typename Elements>
+    struct sequence : nary_lexer<sequence<Elements> >
+    {
+        sequence(Elements const& elements)
+          : elements(elements) {}
+
+        template <typename LexerDef, typename String>
+        void collect(LexerDef& lexdef, String const& state
+          , String const& targetstate) const
+        {
+            typedef detail::sequence_collect_function<LexerDef, String>
+                collect_function_type;
+            collect_function_type f (lexdef, state, targetstate);
+            fusion::any(elements, f);
+        }
+
+        template <typename LexerDef>
+        void add_actions(LexerDef& lexdef) const 
+        {
+            detail::sequence_add_actions_function<LexerDef> f (lexdef);
+            fusion::any(elements, f);
+        }
+
+        Elements elements;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Lexer generator: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Elements, typename Modifiers>
+    struct make_composite<proto::tag::bitwise_or, Elements, Modifiers>
+      : make_nary_composite<Elements, sequence>
+    {};
+
+}}} // namespace boost::spirit::lex
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/lex/lexer/string_token_def.hpp b/3rdParty/Boost/src/boost/spirit/home/lex/lexer/string_token_def.hpp
new file mode 100644
index 0000000..3652958
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/lex/lexer/string_token_def.hpp
@@ -0,0 +1,146 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_STRING_TOKEN_DEF_MAR_28_2007_0722PM)
+#define BOOST_SPIRIT_LEX_STRING_TOKEN_DEF_MAR_28_2007_0722PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/string_traits.hpp>
+#include <boost/spirit/home/lex/domain.hpp>
+#include <boost/spirit/home/lex/lexer_type.hpp>
+#include <boost/spirit/home/lex/meta_compiler.hpp>
+#include <boost/type_traits/add_const.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/fusion/include/vector.hpp>
+#include <boost/fusion/include/at.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct use_terminal<lex::domain, T
+      , typename enable_if<traits::is_string<T> >::type> // enables strings
+      : mpl::true_ {};
+
+    template <typename CharEncoding, typename A0>
+    struct use_terminal<lex::domain
+      , terminal_ex<
+            tag::char_code<tag::string, CharEncoding>   // enables string(str)
+          , fusion::vector1<A0> >
+    > : traits::is_string<A0> {};
+
+}}
+
+namespace boost { namespace spirit { namespace lex
+{ 
+    // use string from standard character set by default
+    using spirit::standard::string_type;
+    using spirit::standard::string;
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  string_token_def 
+    //      represents a string based token definition
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename String, typename CharEncoding = char_encoding::standard>
+    struct string_token_def
+      : primitive_lexer<string_token_def<String, CharEncoding> >
+    {
+        typedef typename
+            remove_const<typename traits::char_type_of<String>::type>::type
+        char_type;
+        typedef std::basic_string<char_type> string_type;
+
+        string_token_def(typename add_reference<String>::type str)
+          : str_(str), id_(std::size_t(~0)), unique_id_(std::size_t(~0))
+          , token_state_(std::size_t(~0)) 
+        {}
+
+        template <typename LexerDef, typename String_>
+        void collect(LexerDef& lexdef, String_ const& state
+          , String_ const& targetstate) const
+        {
+            std::size_t state_id = lexdef.add_state(state.c_str());
+
+            // If the following assertion fires you are probably trying to use 
+            // a single string_token_def instance in more than one lexer state. 
+            // This is not possible. Please create a separate token_def instance 
+            // from the same regular expression for each lexer state it needs 
+            // to be associated with.
+            BOOST_ASSERT(
+                (std::size_t(~0) == token_state_ || state_id == token_state_) &&
+                "Can't use single string_token_def with more than one lexer state");
+
+            char_type const* target = targetstate.empty() ? 0 : targetstate.c_str();
+            if (target)
+                lexdef.add_state(target);
+
+            token_state_ = state_id;
+
+            typedef typename LexerDef::id_type id_type;
+            if (std::size_t(~0) == id_)
+                id_ = lexdef.get_next_id();
+
+            unique_id_ = lexdef.add_token (state.c_str(), str_, id_, target);
+        }
+
+        template <typename LexerDef>
+        void add_actions(LexerDef&) const {}
+
+        std::size_t id() const { return id_; }
+        std::size_t unique_id() const { return unique_id_; }
+        std::size_t state() const { return token_state_; }
+
+        string_type str_;
+        mutable std::size_t id_;
+        mutable std::size_t unique_id_;
+        mutable std::size_t token_state_;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Lex generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Modifiers>
+    struct make_primitive<T, Modifiers
+      , typename enable_if<traits::is_string<T> >::type>
+    {
+        typedef typename add_const<T>::type const_string;
+        typedef string_token_def<const_string> result_type;
+
+        result_type operator()(
+            typename add_reference<const_string>::type str, unused_type) const
+        {
+            return result_type(str);
+        }
+    };
+
+    template <typename Modifiers, typename CharEncoding, typename A0>
+    struct make_primitive<
+        terminal_ex<
+            tag::char_code<tag::string, CharEncoding>
+          , fusion::vector1<A0> >
+      , Modifiers>
+    {
+        typedef typename add_const<A0>::type const_string;
+        typedef string_token_def<const_string, CharEncoding> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(fusion::at_c<0>(term.args));
+        }
+    };
+
+}}}  // namespace boost::spirit::lex
+
+#endif 
diff --git a/3rdParty/Boost/src/boost/spirit/home/lex/lexer/support_functions.hpp b/3rdParty/Boost/src/boost/spirit/home/lex/lexer/support_functions.hpp
new file mode 100644
index 0000000..eeae6c1
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/lex/lexer/support_functions.hpp
@@ -0,0 +1,206 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(SPIRIT_LEX_SUPPORT_FUNCTIONS_JUN_08_2009_0211PM)
+#define SPIRIT_LEX_SUPPORT_FUNCTIONS_JUN_08_2009_0211PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/phoenix/core/actor.hpp>
+#include <boost/spirit/home/phoenix/core/argument.hpp>
+#include <boost/spirit/home/phoenix/core/compose.hpp>
+#include <boost/spirit/home/phoenix/core/value.hpp>
+#include <boost/spirit/home/phoenix/core/as_actor.hpp>
+#include <boost/spirit/home/support/detail/scoped_enum_emulation.hpp>
+#include <boost/spirit/home/lex/lexer/pass_flags.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace lex
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // The function object less_type is used by the implementation of the 
+    // support function lex::less(). Its functionality is equivalent to flex' 
+    // function yyless(): it returns an iterator positioned to the nth input 
+    // character beyond the current start iterator (i.e. by assigning the 
+    // return value to the placeholder '_end' it is possible to return all but
+    // the first n characters of the current token back to the input stream. 
+    //
+    //  This Phoenix actor is invoked whenever the function lex::less(n) is 
+    //  used inside a lexer semantic action:
+    //
+    //      lex::token_def<> identifier = "[a-zA-Z_][a-zA-Z0-9_]*";
+    //      this->self = identifier [ _end = lex::less(4) ];
+    //
+    //  The example shows how to limit the length of the matched identifier to 
+    //  four characters.
+    //
+    //  Note: the function lex::less() has no effect if used on it's own, you 
+    //        need to use the returned result in order to make use of its 
+    //        functionality.
+    template <typename Actor>
+    struct less_type
+    {
+        typedef mpl::true_ no_nullary;
+
+        template <typename Env>
+        struct result
+        {
+            typedef typename
+                remove_const<
+                    typename mpl::at_c<typename Env::args_type, 4>::type
+                >::type
+            context_type;
+            typedef typename context_type::base_iterator_type type;
+        };
+
+        template <typename Env>
+        typename result<Env>::type 
+        eval(Env const& env) const
+        {
+            typename result<Env>::type it;
+            return fusion::at_c<4>(env.args()).less(it, actor_());
+        }
+
+        less_type(Actor const& actor)
+          : actor_(actor) {}
+
+        Actor actor_;
+    };
+
+    //  The function lex::less() is used to create a Phoenix actor allowing to
+    //  implement functionality similar to flex' function yyless(). 
+    template <typename T>
+    inline phoenix::actor<less_type<typename phoenix::as_actor<T>::type> >
+    less(T const& v)
+    {
+        typedef typename phoenix::as_actor<T>::type actor_type;
+        return less_type<actor_type>(phoenix::as_actor<T>::convert(v));
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // The function object more_type is used by the implementation of the  
+    // support function lex::more(). Its functionality is equivalent to flex' 
+    // function yymore(): it tells the lexer that the next time it matches a 
+    // rule, the corresponding token should be appended onto the current token 
+    // value rather than replacing it.
+    //
+    //  This Phoenix actor is invoked whenever the function lex::more(n) is 
+    //  used inside a lexer semantic action:
+    //
+    //      lex::token_def<> identifier = "[a-zA-Z_][a-zA-Z0-9_]*";
+    //      this->self = identifier [ lex::more() ];
+    //
+    //  The example shows how prefix the next matched token with the matched
+    //  identifier.
+    struct more_type
+    {
+        typedef mpl::true_ no_nullary;
+
+        template <typename Env>
+        struct result
+        {
+            typedef void type;
+        };
+
+        template <typename Env>
+        void eval(Env const& env) const
+        {
+            fusion::at_c<4>(env.args()).more();
+        }
+    };
+
+    //  The function lex::more() is used to create a Phoenix actor allowing to
+    //  implement functionality similar to flex' function yymore(). 
+    inline phoenix::actor<more_type>
+    more()
+    {
+        return more_type();
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // The function object lookahead_type is used by the implementation of the  
+    // support function lex::lookahead(). Its functionality is needed to 
+    // emulate the flex' lookahead operator a/b. Use lex::lookahead() inside
+    // of lexer semantic actions to test whether the argument to this function
+    // matches the current look ahead input. lex::lookahead() can be used with
+    // either a token id or a token_def instance as its argument. It returns
+    // a bool indicating whether the look ahead has been matched.
+    template <typename IdActor, typename StateActor>
+    struct lookahead_type
+    {
+        typedef mpl::true_ no_nullary;
+
+        template <typename Env>
+        struct result
+        {
+            typedef bool type;
+        };
+
+        template <typename Env>
+        bool eval(Env const& env) const
+        {
+            return fusion::at_c<4>(env.args()).
+                lookahead(id_actor_(), state_actor_());
+        }
+
+        lookahead_type(IdActor const& id_actor, StateActor const& state_actor)
+          : id_actor_(id_actor), state_actor_(state_actor) {}
+
+        IdActor id_actor_;
+        StateActor state_actor_;
+    };
+
+    //  The function lex::lookahead() is used to create a Phoenix actor 
+    //  allowing to implement functionality similar to flex' lookahead operator
+    //  a/b. 
+    template <typename T>
+    inline phoenix::actor<
+        lookahead_type<
+            typename phoenix::as_actor<T>::type
+          , typename phoenix::as_actor<std::size_t>::type> >
+    lookahead(T const& id)
+    {
+        typedef typename phoenix::as_actor<T>::type id_actor_type;
+        typedef typename phoenix::as_actor<std::size_t>::type state_actor_type;
+
+        return lookahead_type<id_actor_type, state_actor_type>(
+            phoenix::as_actor<T>::convert(id),
+            phoenix::as_actor<std::size_t>::convert(std::size_t(~0)));
+    }
+
+    template <typename Attribute, typename Char, typename Idtype>
+    inline phoenix::actor<
+        lookahead_type<
+            typename phoenix::as_actor<Idtype>::type
+          , typename phoenix::as_actor<std::size_t>::type> >
+    lookahead(token_def<Attribute, Char, Idtype> const& tok)
+    {
+        typedef typename phoenix::as_actor<Idtype>::type id_actor_type;
+        typedef typename phoenix::as_actor<std::size_t>::type state_actor_type;
+
+        std::size_t state = tok.state();
+
+        // The following assertion fires if you pass a token_def instance to 
+        // lex::lookahead without first associating this instance with the 
+        // lexer.
+        BOOST_ASSERT(std::size_t(~0) != state && 
+            "token_def instance not associated with lexer yet");
+
+        return lookahead_type<id_actor_type, state_actor_type>(
+            phoenix::as_actor<Idtype>::convert(tok.id()),
+            phoenix::as_actor<std::size_t>::convert(state));
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    inline BOOST_SCOPED_ENUM(pass_flags) ignore()
+    {
+        return pass_flags::pass_ignore;
+    }
+
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/lex/lexer/terminals.hpp b/3rdParty/Boost/src/boost/spirit/home/lex/lexer/terminals.hpp
new file mode 100644
index 0000000..379423a
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/lex/lexer/terminals.hpp
@@ -0,0 +1,24 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_TERMINALS_APR_20_2009_0550PM)
+#define BOOST_SPIRIT_LEX_TERMINALS_APR_20_2009_0550PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/common_terminals.hpp>
+
+namespace boost { namespace spirit { namespace lex
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  Define a more convenient name for an omitted token attribute type
+    typedef spirit::omit_type omit;
+    using spirit::omit_type;
+
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/lex/lexer/token_def.hpp b/3rdParty/Boost/src/boost/spirit/home/lex/lexer/token_def.hpp
new file mode 100644
index 0000000..bb416d2
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/lex/lexer/token_def.hpp
@@ -0,0 +1,245 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_TOKEN_DEF_MAR_13_2007_0145PM)
+#define BOOST_SPIRIT_LEX_TOKEN_DEF_MAR_13_2007_0145PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/argument.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/qi/skip_over.hpp>
+#include <boost/spirit/home/qi/detail/construct.hpp>
+#include <boost/spirit/home/qi/detail/assign_to.hpp>
+#include <boost/spirit/home/lex/reference.hpp>
+#include <boost/spirit/home/lex/lexer_type.hpp>
+#include <boost/spirit/home/lex/lexer/terminals.hpp>
+
+#include <boost/fusion/include/vector.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/detail/iterator.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/variant.hpp>
+
+#include <string>
+#include <cstdlib>
+
+#if defined(BOOST_MSVC)
+# pragma warning(push)
+# pragma warning(disable: 4355) // 'this' : used in base member initializer list warning
+#endif
+
+namespace boost { namespace spirit { namespace lex
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  This component represents a token definition
+    ///////////////////////////////////////////////////////////////////////////
+    template<typename Attribute = unused_type
+      , typename Char = char
+      , typename Idtype = std::size_t>
+    struct token_def
+      : proto::extends<
+            typename proto::terminal<
+                lex::reference<token_def<Attribute, Char, Idtype> const, Idtype> 
+            >::type
+          , token_def<Attribute, Char, Idtype> >
+      , qi::parser<token_def<Attribute, Char, Idtype> >
+      , lex::lexer_type<token_def<Attribute, Char, Idtype> >
+    {
+    private:
+        // initialize proto base class
+        typedef lex::reference<token_def const, Idtype> reference_;
+        typedef typename proto::terminal<reference_>::type terminal_type;
+        typedef proto::extends<terminal_type, token_def> proto_base_type;
+
+        static std::size_t const all_states_id = static_cast<std::size_t>(-2);
+
+    public:
+        // Qi interface: meta-function calculating parser return type
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            //  The return value of the token_def is either the specified 
+            //  attribute type, or the pair of iterators from the match of the 
+            //  corresponding token (if no attribute type has been specified),
+            //  or unused_type (if omit has been specified).
+            typedef typename Iterator::base_iterator_type iterator_type;
+            typedef typename mpl::if_<
+                traits::not_is_unused<Attribute>
+              , typename mpl::if_<
+                    is_same<Attribute, lex::omit>, unused_type, Attribute
+                >::type
+              , iterator_range<iterator_type>
+            >::type type;
+        };
+
+    public:
+        // Qi interface: parse functionality
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute_>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& /*context*/, Skipper const& skipper
+          , Attribute_& attr) const
+        {
+            qi::skip_over(first, last, skipper);   // always do a pre-skip
+
+            if (first != last) {
+                typedef typename 
+                    boost::detail::iterator_traits<Iterator>::value_type 
+                token_type;
+
+                //  If the following assertion fires you probably forgot to  
+                //  associate this token definition with a lexer instance.
+                BOOST_ASSERT(std::size_t(~0) != token_state_);
+
+                token_type const& t = *first;
+                if (token_id_ == t.id() && 
+                    (all_states_id == token_state_ || token_state_ == t.state())) 
+                {
+                    spirit::traits::assign_to(t, attr);
+                    ++first;
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            if (0 == def_.which()) 
+                return info("token_def", get<string_type>(def_));
+
+            return info("token_def", get<char_type>(def_));
+        }
+
+        ///////////////////////////////////////////////////////////////////////
+        // Lex interface: collect token definitions and put it into the 
+        // provided lexer def
+        template <typename LexerDef, typename String>
+        void collect(LexerDef& lexdef, String const& state
+          , String const& targetstate) const
+        {
+            std::size_t state_id = lexdef.add_state(state.c_str());
+
+            // If the following assertion fires you are probably trying to use 
+            // a single token_def instance in more than one lexer state. This 
+            // is not possible. Please create a separate token_def instance 
+            // from the same regular expression for each lexer state it needs 
+            // to be associated with.
+            BOOST_ASSERT(
+                (std::size_t(~0) == token_state_ || state_id == token_state_) &&
+                "Can't use single token_def with more than one lexer state");
+
+            char_type const* target = targetstate.empty() ? 0 : targetstate.c_str();
+            if (target)
+                lexdef.add_state(target);
+
+            token_state_ = state_id;
+            if (0 == token_id_)
+                token_id_ = lexdef.get_next_id();
+
+            if (0 == def_.which()) {
+                unique_id_ = lexdef.add_token(state.c_str()
+                  , get<string_type>(def_), token_id_, target);
+            }
+            else {
+                unique_id_ = lexdef.add_token(state.c_str()
+                  , get<char_type>(def_), token_id_, target);
+            }
+        }
+
+        template <typename LexerDef>
+        void add_actions(LexerDef&) const {}
+
+    public:
+        typedef Char char_type;
+        typedef Idtype id_type;
+        typedef std::basic_string<char_type> string_type;
+
+        // Lex interface: constructing token definitions
+        token_def() 
+          : proto_base_type(terminal_type::make(reference_(*this)))
+          , def_('\0'), token_id_()
+          , unique_id_(std::size_t(~0)), token_state_(std::size_t(~0)) {}
+
+        token_def(token_def const& rhs) 
+          : proto_base_type(terminal_type::make(reference_(*this)))
+          , def_(rhs.def_), token_id_(rhs.token_id_)
+          , unique_id_(rhs.unique_id_), token_state_(rhs.token_state_) {}
+
+        explicit token_def(char_type def_, Idtype id_ = Idtype())
+          : proto_base_type(terminal_type::make(reference_(*this)))
+          , def_(def_)
+          , token_id_(Idtype() == id_ ? Idtype(def_) : id_)
+          , unique_id_(std::size_t(~0)), token_state_(std::size_t(~0)) {}
+
+        explicit token_def(string_type const& def_, Idtype id_ = Idtype())
+          : proto_base_type(terminal_type::make(reference_(*this)))
+          , def_(def_), token_id_(id_)
+          , unique_id_(std::size_t(~0)), token_state_(std::size_t(~0)) {}
+
+        template <typename String>
+        token_def& operator= (String const& definition)
+        {
+            def_ = definition;
+            token_id_ = Idtype();
+            unique_id_ = std::size_t(~0);
+            token_state_ = std::size_t(~0);
+            return *this;
+        }
+        token_def& operator= (token_def const& rhs)
+        {
+            def_ = rhs.def_;
+            token_id_ = rhs.token_id_;
+            unique_id_ = rhs.unique_id_;
+            token_state_ = rhs.token_state_;
+            return *this;
+        }
+
+        // general accessors 
+        Idtype const& id() const { return token_id_; }
+        void id(Idtype const& id) { token_id_ = id; }
+        std::size_t unique_id() const { return unique_id_; }
+
+        string_type definition() const 
+        { 
+            return (0 == def_.which()) ? 
+                get<string_type>(def_) : string_type(1, get<char_type>(def_));
+        }
+        std::size_t state() const { return token_state_; }
+
+    private:
+        variant<string_type, char_type> def_;
+        mutable Idtype token_id_;
+        mutable std::size_t unique_id_;
+        mutable std::size_t token_state_;
+    };
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template<typename Attribute, typename Char, typename Idtype
+      , typename Attr, typename Context, typename Iterator>
+    struct handles_container<
+            lex::token_def<Attribute, Char, Idtype>, Attr, Context, Iterator>
+      : traits::is_container<
+            typename attribute_of<
+                lex::token_def<Attribute, Char, Idtype>, Context, Iterator
+            >::type>
+    {};
+}}}
+
+#if defined(BOOST_MSVC)
+# pragma warning(pop)
+#endif
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/lex/lexer_lexertl.hpp b/3rdParty/Boost/src/boost/spirit/home/lex/lexer_lexertl.hpp
new file mode 100644
index 0000000..0706bd9
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/lex/lexer_lexertl.hpp
@@ -0,0 +1,18 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_LEXERTL_MAR_17_2007_1008PM)
+#define BOOST_SPIRIT_LEX_LEXERTL_MAR_17_2007_1008PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+//  These includes make available everything needed to use lexertl either 
+//  standalone or as a lexer component for spirit::qi
+#include <boost/spirit/home/lex.hpp>
+#include <boost/spirit/home/lex/lexer/lexertl/lexer.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/lex/lexer_type.hpp b/3rdParty/Boost/src/boost/spirit/home/lex/lexer_type.hpp
new file mode 100644
index 0000000..e58bce0
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/lex/lexer_type.hpp
@@ -0,0 +1,100 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c) 2001-2011 Joel de Guzman
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEXER_TYPE_APR_20_2009_0759PM)
+#define BOOST_SPIRIT_LEXER_TYPE_APR_20_2009_0759PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/mpl/has_xxx.hpp>
+#include <boost/spirit/home/lex/domain.hpp>
+
+namespace boost { namespace spirit { namespace lex
+{
+    template <typename Derived>
+    struct lexer_type
+    {
+        struct lexer_id;
+        typedef Derived derived_type;
+        typedef lex::domain domain;
+
+        // Requirement: l.collect(def, state, targetstate) -> void
+        //
+        //  l:           a lexer component
+        //  def:         token definition container
+        //  state:       lexer state this token definition needs to be added to
+        //  targetstate: an optional lexer state the lexer should be switched 
+        //               into after matching this token 
+
+        Derived const& derived() const
+        {
+            return *static_cast<Derived const*>(this);
+        }
+    };
+
+    template <typename Derived>
+    struct primitive_lexer : lexer_type<Derived>
+    {
+        struct primitive_lexer_id;
+    };
+
+    template <typename Derived>
+    struct unary_lexer : lexer_type<Derived>
+    {
+        struct unary_lexer_id;
+
+        // Requirement: l.subject -> subject lexer component
+        //
+        // l:   a unary lexer component
+
+        // Requirement: L::subject_type -> subject lexer component type
+        //
+        // L:   a unary lexer component type
+    };
+
+    template <typename Derived>
+    struct nary_lexer : lexer_type<Derived>
+    {
+        struct nary_lexer_id;
+
+        // Requirement: l.elements -> fusion sequence
+        //
+        // l:   a composite lexer component
+
+        // Requirement: L::elements_type -> fusion sequence
+        //
+        // L:   a composite lexer component type
+    };
+
+}}}
+
+namespace boost { namespace spirit { namespace traits // classification
+{
+    namespace detail
+    {
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(lexer_id)
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(primitive_lexer_id)
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(unary_lexer_id)
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(nary_lexer_id)
+    }
+
+    template <typename T>
+    struct is_lexer : detail::has_lexer_id<T> {};
+
+    template <typename T>
+    struct is_primitive_lexer : detail::has_primitive_lexer_id<T> {};
+
+    template <typename T>
+    struct is_unary_lexer : detail::has_unary_lexer_id<T> {};
+
+    template <typename T>
+    struct is_nary_lexer : detail::has_nary_lexer_id<T> {};
+
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/lex/meta_compiler.hpp b/3rdParty/Boost/src/boost/spirit/home/lex/meta_compiler.hpp
new file mode 100644
index 0000000..6e13d37
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/lex/meta_compiler.hpp
@@ -0,0 +1,104 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c) 2001-2011 Joel de Guzman
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_META_COMPILER_APR_20_2009_0756PM)
+#define BOOST_SPIRIT_LEX_META_COMPILER_APR_20_2009_0756PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/meta_compiler.hpp>
+#include <boost/spirit/home/lex/domain.hpp>
+#include <boost/spirit/home/lex/lexer_type.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/utility/enable_if.hpp>
+
+namespace boost { namespace spirit
+{
+    template <typename T>
+    struct use_terminal<lex::domain, T
+      , typename enable_if<traits::is_lexer<T> >::type> // enables lexers
+      : mpl::true_ {};
+
+    namespace lex
+    {
+        template <typename T, typename Modifiers, typename Enable = void>
+        struct make_primitive // by default, return it as-is
+        {
+            typedef T result_type;
+
+            template <typename T_>
+            T_& operator()(T_& val, unused_type) const
+            {
+                return val;
+            }
+
+            template <typename T_>
+            T_ const& operator()(T_ const& val, unused_type) const
+            {
+                return val;
+            }
+        };
+
+        template <typename Tag, typename Elements
+          , typename Modifiers, typename Enable = void>
+        struct make_composite;
+    }
+
+    // Lex primitive meta-compiler
+    template <>
+    struct make_component<lex::domain, proto::tag::terminal>
+    {
+        template <typename Sig>
+        struct result;
+
+        template <typename This, typename Elements, typename Modifiers>
+        struct result<This(Elements, Modifiers)>
+        {
+            typedef typename lex::make_primitive<
+                typename remove_const<typename Elements::car_type>::type,
+                typename remove_reference<Modifiers>::type>::result_type
+            type;
+        };
+
+        template <typename Elements, typename Modifiers>
+        typename result<make_component(Elements, Modifiers)>::type
+        operator()(Elements const& elements, Modifiers const& modifiers) const
+        {
+            typedef typename remove_const<typename Elements::car_type>::type term;
+            return lex::make_primitive<term, Modifiers>()(elements.car, modifiers);
+        }
+    };
+
+    // Lex composite meta-compiler
+    template <typename Tag>
+    struct make_component<lex::domain, Tag>
+    {
+        template <typename Sig>
+        struct result;
+
+        template <typename This, typename Elements, typename Modifiers>
+        struct result<This(Elements, Modifiers)>
+        {
+            typedef typename
+                lex::make_composite<Tag, Elements
+                  , typename remove_reference<Modifiers>::type>::result_type
+            type;
+        };
+
+        template <typename Elements, typename Modifiers>
+        typename result<make_component(Elements, Modifiers)>::type
+        operator()(Elements const& elements, Modifiers const& modifiers) const
+        {
+            return lex::make_composite<Tag, Elements, Modifiers>()(
+                elements, modifiers);
+        }
+    };
+
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/lex/qi.hpp b/3rdParty/Boost/src/boost/spirit/home/lex/qi.hpp
new file mode 100644
index 0000000..e5beee1
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/lex/qi.hpp
@@ -0,0 +1,18 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEXER_QI_APR_21_2009_0205PM)
+#define BOOST_SPIRIT_LEXER_QI_APR_21_2009_0205PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/lex/qi/state_switcher.hpp>
+#include <boost/spirit/home/lex/qi/in_state.hpp>
+#include <boost/spirit/home/lex/qi/plain_token.hpp>
+#include <boost/spirit/home/lex/qi/plain_tokenid.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/lex/qi/in_state.hpp b/3rdParty/Boost/src/boost/spirit/home/lex/qi/in_state.hpp
new file mode 100644
index 0000000..566d0b0
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/lex/qi/in_state.hpp
@@ -0,0 +1,33 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_IN_STATE_OCT_09_2007_0748PM)
+#define BOOST_SPIRIT_LEX_IN_STATE_OCT_09_2007_0748PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/proto/core.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace qi
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // The following is a helper template allowing to use the in_state()[] as 
+    // a skip parser
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Skipper, typename String = char const*>
+    struct in_state_skipper
+      : proto::subscript<
+            typename proto::terminal<
+                terminal_ex<tag::in_state, fusion::vector1<String> > 
+            >::type
+          , Skipper
+        >::type {};
+
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/lex/qi/plain_token.hpp b/3rdParty/Boost/src/boost/spirit/home/lex/qi/plain_token.hpp
new file mode 100644
index 0000000..7ee0b96
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/lex/qi/plain_token.hpp
@@ -0,0 +1,136 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_PLAIN_TOKEN_NOV_11_2007_0451PM)
+#define BOOST_SPIRIT_LEX_PLAIN_TOKEN_NOV_11_2007_0451PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/qi/detail/attributes.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/qi/skip_over.hpp>
+#include <boost/spirit/home/qi/domain.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/detail/assign_to.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/fusion/include/vector.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/type_traits/is_enum.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+
+    // enables token
+    template <>
+    struct use_terminal<qi::domain, tag::token>
+      : mpl::true_ {};
+
+    // enables token(id)
+    template <typename A0>
+    struct use_terminal<qi::domain
+      , terminal_ex<tag::token, fusion::vector1<A0> >
+    > : mpl::or_<is_integral<A0>, is_enum<A0> > {};
+
+    // enables *lazy* token(id)
+    template <>
+    struct use_lazy_terminal<
+        qi::domain, tag::token, 1
+    > : mpl::true_ {};
+
+}}
+
+namespace boost { namespace spirit { namespace qi
+{
+    using spirit::token;
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename TokenId>
+    struct plain_token 
+      : primitive_parser<plain_token<TokenId> >
+    {
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef typename Iterator::base_iterator_type iterator_type;
+            typedef iterator_range<iterator_type> type;
+        };
+
+        plain_token(TokenId const& id)
+          : id(id) {}
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& /*context*/, Skipper const& skipper
+          , Attribute& attr) const
+        {
+            qi::skip_over(first, last, skipper);   // always do a pre-skip
+
+            if (first != last) {
+                // simply match the token id with the id this component has 
+                // been initialized with
+
+                typedef typename 
+                    boost::detail::iterator_traits<Iterator>::value_type 
+                token_type;
+                typedef typename token_type::id_type id_type;
+
+                token_type const& t = *first;
+                if (std::size_t(~0) == t.id() || id_type(id) == t.id()) {
+                    spirit::traits::assign_to(t, attr);
+                    ++first;
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info("token");
+        }
+
+        TokenId id;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Modifiers>
+    struct make_primitive<tag::token, Modifiers>
+    {
+        typedef plain_token<std::size_t> result_type;
+
+        result_type operator()(unused_type, unused_type) const
+        {
+            return result_type(std::size_t(~0));
+        }
+    };
+
+    template <typename Modifiers, typename TokenId>
+    struct make_primitive<terminal_ex<tag::token, fusion::vector1<TokenId> >
+      , Modifiers>
+    {
+        typedef plain_token<TokenId> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(fusion::at_c<0>(term.args));
+        }
+    };
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/lex/qi/plain_tokenid.hpp b/3rdParty/Boost/src/boost/spirit/home/lex/qi/plain_tokenid.hpp
new file mode 100644
index 0000000..245defd
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/lex/qi/plain_tokenid.hpp
@@ -0,0 +1,137 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_PLAIN_TOKENID_NOV_26_2010_0944AM)
+#define BOOST_SPIRIT_LEX_PLAIN_TOKENID_NOV_26_2010_0944AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/qi/detail/attributes.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/qi/skip_over.hpp>
+#include <boost/spirit/home/qi/domain.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/detail/assign_to.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/fusion/include/vector.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/type_traits/is_enum.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+
+    // enables tokenid
+    template <>
+    struct use_terminal<qi::domain, tag::tokenid>
+      : mpl::true_ {};
+
+    // enables tokenid(id)
+    template <typename A0>
+    struct use_terminal<qi::domain
+      , terminal_ex<tag::tokenid, fusion::vector1<A0> >
+    > : mpl::or_<is_integral<A0>, is_enum<A0> > {};
+
+    // enables *lazy* tokenid(id)
+    template <>
+    struct use_lazy_terminal<
+        qi::domain, tag::tokenid, 1
+    > : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace qi
+{
+    using spirit::tokenid;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // The plain_tokenid represents a simple token defined by the lexer inside 
+    // a Qi grammar. The difference to plain_token is that it exposes the 
+    // matched token id instead of the iterator_range of the matched input.
+    template <typename TokenId>
+    struct plain_tokenid 
+      : primitive_parser<plain_tokenid<TokenId> >
+    {
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef TokenId type;
+        };
+
+        plain_tokenid(TokenId const& id)
+          : id(id) {}
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& /*context*/, Skipper const& skipper
+          , Attribute& attr) const
+        {
+            qi::skip_over(first, last, skipper);   // always do a pre-skip
+
+            if (first != last) {
+                // simply match the token id with the id this component has 
+                // been initialized with
+
+                typedef typename 
+                    boost::detail::iterator_traits<Iterator>::value_type 
+                token_type;
+                typedef typename token_type::id_type id_type;
+
+                token_type const& t = *first;
+                if (std::size_t(~0) == t.id() || id_type(id) == t.id()) {
+                    spirit::traits::assign_to(id, attr);
+                    ++first;
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info("tokenid");
+        }
+
+        TokenId id;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Modifiers>
+    struct make_primitive<tag::tokenid, Modifiers> 
+    {
+        typedef plain_token<std::size_t> result_type;
+
+        result_type operator()(unused_type, unused_type) const
+        {
+            return result_type(std::size_t(~0));
+        }
+    };
+
+    template <typename Modifiers, typename TokenId>
+    struct make_primitive<terminal_ex<tag::tokenid, fusion::vector1<TokenId> >
+      , Modifiers>
+    {
+        typedef plain_tokenid<TokenId> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(fusion::at_c<0>(term.args));
+        }
+    };
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/lex/qi/state_switcher.hpp b/3rdParty/Boost/src/boost/spirit/home/lex/qi/state_switcher.hpp
new file mode 100644
index 0000000..29bb978
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/lex/qi/state_switcher.hpp
@@ -0,0 +1,266 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c)      2010 Bryce Lelbach
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_STATE_SWITCHER_SEP_23_2007_0714PM)
+#define BOOST_SPIRIT_LEX_STATE_SWITCHER_SEP_23_2007_0714PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/qi/detail/attributes.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/string_traits.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/spirit/home/qi/skip_over.hpp>
+#include <boost/spirit/home/qi/domain.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/mpl/print.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+
+    // enables set_state(s)
+    template <typename A0>
+    struct use_terminal<qi::domain
+      , terminal_ex<tag::set_state, fusion::vector1<A0> >
+    > : traits::is_string<A0> {};
+
+    // enables *lazy* set_state(s)
+    template <>
+    struct use_lazy_terminal<
+        qi::domain, tag::set_state, 1
+    > : mpl::true_ {};
+
+    // enables in_state(s)[p]
+    template <typename A0>
+    struct use_directive<qi::domain
+      , terminal_ex<tag::in_state, fusion::vector1<A0> >
+    > : traits::is_string<A0> {};
+
+    // enables *lazy* in_state(s)[p]
+    template <>
+    struct use_lazy_directive<
+        qi::domain, tag::in_state, 1
+    > : mpl::true_ {};
+
+}}
+
+namespace boost { namespace spirit { namespace qi
+{
+    using spirit::set_state;
+    using spirit::in_state;
+
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename Iterator>
+        inline std::size_t
+        set_lexer_state(Iterator& it, std::size_t state)
+        {
+            return it.set_state(state);
+        }
+
+        template <typename Iterator, typename Char>
+        inline std::size_t
+        set_lexer_state(Iterator& it, Char const* statename)
+        {
+            std::size_t state = it.map_state(statename);
+
+            //  If the following assertion fires you probably used the
+            //  set_state(...) or in_state(...)[...] lexer state switcher with
+            //  a lexer state name unknown to the lexer (no token definitions
+            //  have been associated with this lexer state).
+            BOOST_ASSERT(std::size_t(~0) != state);
+            return it.set_state(state);
+        }
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Parser switching the state of the underlying lexer component.
+    //  This parser gets used for the set_state(...) construct.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename State>
+    struct state_switcher
+      : primitive_parser<state_switcher<State> >
+    {
+        typedef typename 
+            remove_const<typename traits::char_type_of<State>::type>::type 
+        char_type;
+        typedef std::basic_string<char_type> string_type;
+
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef unused_type type;
+        };
+
+        state_switcher(char_type const* state)
+          : state(state) {}
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& /*context*/, Skipper const& skipper
+          , Attribute& /*attr*/) const
+        {
+            qi::skip_over(first, last, skipper);   // always do a pre-skip
+
+            // just switch the state and return success
+            detail::set_lexer_state(first, state.c_str());
+            return true;
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info("set_state");
+        }
+
+        string_type state;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename Iterator>
+        struct reset_state_on_exit
+        {
+            template <typename State>
+            reset_state_on_exit(Iterator& it_, State state_)
+              : it(it_)
+              , state(detail::set_lexer_state(it_, traits::get_c_string(state_))) 
+            {}
+
+            ~reset_state_on_exit()
+            {
+                // reset the state of the underlying lexer instance
+                detail::set_lexer_state(it, state);
+            }
+
+            Iterator& it;
+            std::size_t state;
+
+        private:
+            // silence MSVC warning C4512: assignment operator could not be generated
+            reset_state_on_exit& operator= (reset_state_on_exit const&);
+        };
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser, which switches the state of the underlying lexer component
+    // for the execution of the embedded sub-parser, switching the state back
+    // afterwards. This parser gets used for the in_state(...)[p] construct.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename State>
+    struct state_switcher_context 
+      : unary_parser<state_switcher_context<Subject, State> >
+    {
+        typedef Subject subject_type;
+        typedef typename traits::char_type_of<State>::type char_type;
+        typedef typename remove_const<char_type>::type non_const_char_type;
+
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef typename
+                traits::attribute_of<subject_type, Context, Iterator>::type
+            type;
+        };
+
+        state_switcher_context(Subject const& subject
+              , typename add_reference<State>::type state)
+          : subject(subject), state(state) {}
+
+        // The following conversion constructors are needed to make the 
+        // in_state_switcher template usable
+        template <typename String>
+        state_switcher_context(
+                state_switcher_context<Subject, String> const& rhs)
+          : subject(rhs.subject), state(traits::get_c_string(rhs.state)) {}
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr) const
+        {
+            qi::skip_over(first, last, skipper);   // always do a pre-skip
+
+            // the state has to be reset at exit in any case
+            detail::reset_state_on_exit<Iterator> guard(first, state);
+            return subject.parse(first, last, context, skipper, attr);
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("in_state", subject.what(context));
+        }
+
+        Subject subject;
+        State state;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        state_switcher_context& operator= (state_switcher_context const&);
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Modifiers, typename State>
+    struct make_primitive<terminal_ex<tag::set_state, fusion::vector1<State> >
+      , Modifiers, typename enable_if<traits::is_string<State> >::type>
+    {
+        typedef typename add_const<State>::type const_string;
+        typedef state_switcher<const_string> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(traits::get_c_string(fusion::at_c<0>(term.args)));
+        }
+    };
+
+    template <typename State, typename Subject, typename Modifiers>
+    struct make_directive<terminal_ex<tag::in_state, fusion::vector1<State> >
+      , Subject, Modifiers>
+    {
+        typedef typename add_const<State>::type const_string;
+        typedef state_switcher_context<Subject, const_string> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, Subject const& subject
+          , unused_type) const
+        {
+            return result_type(subject, fusion::at_c<0>(term.args));
+        }
+    };
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename State>
+    struct has_semantic_action<qi::state_switcher_context<Subject, State> >
+      : unary_has_semantic_action<Subject> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename State, typename Attribute
+        , typename Context, typename Iterator>
+    struct handles_container<qi::state_switcher_context<Subject, State>
+          , Attribute, Context, Iterator>
+      : unary_handles_container<Subject, Attribute, Context, Iterator> {}; 
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/lex/reference.hpp b/3rdParty/Boost/src/boost/spirit/home/lex/reference.hpp
new file mode 100644
index 0000000..d1aaabf
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/lex/reference.hpp
@@ -0,0 +1,85 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c) 2001-2011 Joel de Guzman
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_REFERENCE_APR_20_2009_0827AM)
+#define BOOST_SPIRIT_LEX_REFERENCE_APR_20_2009_0827AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/lex/meta_compiler.hpp>
+#include <boost/spirit/home/lex/lexer_type.hpp>
+#include <boost/spirit/home/qi/reference.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/ref.hpp>
+
+namespace boost { namespace spirit { namespace lex
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // reference is a lexer that references another lexer (its Subject)
+    // all lexer components are at the same time
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename IdType = unused_type>
+    struct reference; 
+
+    template <typename Subject>
+    struct reference<Subject, unused_type>
+      : qi::reference<Subject>
+      , lexer_type<reference<Subject> >
+    {
+        reference(Subject& subject)
+          : qi::reference<Subject>(subject) {}
+
+        template <typename LexerDef, typename String>
+        void collect(LexerDef& lexdef, String const& state
+          , String const& targetstate) const
+        {
+            this->ref.get().collect(lexdef, state, targetstate);
+        }
+
+        template <typename LexerDef>
+        void add_actions(LexerDef& lexdef) const 
+        {
+            this->ref.get().add_actions(lexdef);
+        }
+    };
+
+    template <typename Subject, typename IdType>
+    struct reference : reference<Subject>
+    {
+        reference(Subject& subject)
+          : reference<Subject>(subject) {}
+
+        IdType id() const 
+        { 
+            return this->ref.get().id(); 
+        }
+        std::size_t unique_id() const 
+        { 
+            return this->ref.get().unique_id(); 
+        }
+        std::size_t state() const 
+        { 
+            return this->ref.get().state(); 
+        }
+    };
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename IdType
+      , typename Attribute, typename Context, typename Iterator>
+    struct handles_container<lex::reference<Subject, IdType>
+          , Attribute, Context, Iterator>
+      : handles_container<
+            typename remove_const<Subject>::type, Attribute, Context, Iterator> 
+    {};
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/lex/tokenize_and_parse.hpp b/3rdParty/Boost/src/boost/spirit/home/lex/tokenize_and_parse.hpp
new file mode 100644
index 0000000..2948abd
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/lex/tokenize_and_parse.hpp
@@ -0,0 +1,325 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEXER_PARSE_NOV_17_2007_0246PM)
+#define BOOST_SPIRIT_LEXER_PARSE_NOV_17_2007_0246PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/skip_over.hpp>
+#include <boost/spirit/home/qi/parse.hpp>
+#include <boost/spirit/home/qi/nonterminal/grammar.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/lex/lexer.hpp>
+#include <boost/mpl/assert.hpp>
+
+namespace boost { namespace spirit { namespace lex
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  Import skip_flag enumerator type from Qi namespace
+    using qi::skip_flag;
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  The tokenize_and_parse() function is one of the main Spirit API 
+    //  functions. It simplifies using a lexer as the underlying token source
+    //  while parsing a given input sequence.
+    //
+    //  The function takes a pair of iterators spanning the underlying input 
+    //  stream to parse, the lexer object (built from the token definitions) 
+    //  and a parser object (built from the parser grammar definition).
+    //
+    //  The second version of this function additionally takes an attribute to 
+    //  be used as the top level data structure instance the parser should use 
+    //  to store the recognized input to.
+    //
+    //  The function returns true if the parsing succeeded (the given input
+    //  sequence has been successfully matched by the given grammar).
+    //
+    //  first, last:    The pair of iterators spanning the underlying input 
+    //                  sequence to parse. These iterators must at least 
+    //                  conform to the requirements of the std::intput_iterator 
+    //                  category.
+    //                  On exit the iterator 'first' will be updated to the 
+    //                  position right after the last successfully matched 
+    //                  token. 
+    //  lex:            The lexer object (encoding the token definitions) to be
+    //                  used to convert the input sequence into a sequence of 
+    //                  tokens. This token sequence is passed to the parsing 
+    //                  process. The LexerExpr type must conform to the 
+    //                  lexer interface described in the corresponding section
+    //                  of the documentation.
+    //  xpr:            The grammar object (encoding the parser grammar) to be
+    //                  used to match the token sequence generated by the lex 
+    //                  object instance. The ParserExpr type must conform to 
+    //                  the grammar interface described in the corresponding 
+    //                  section of the documentation.
+    //  attr:           The top level attribute passed to the parser. It will 
+    //                  be populated during the parsing of the input sequence.
+    //                  On exit it will hold the 'parser result' corresponding 
+    //                  to the matched input sequence.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Lexer, typename ParserExpr>
+    inline bool
+    tokenize_and_parse(Iterator& first, Iterator last, Lexer const& lex,
+        ParserExpr const& xpr)
+    {
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then the expression (expr) is not a valid spirit qi expression.
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, ParserExpr);
+
+        typename Lexer::iterator_type iter = lex.begin(first, last);
+        return compile<qi::domain>(xpr).parse(
+            iter, lex.end(), unused, unused, unused);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Lexer, typename ParserExpr
+      , typename Attribute>
+    inline bool
+    tokenize_and_parse(Iterator& first, Iterator last, Lexer const& lex
+      , ParserExpr const& xpr, Attribute& attr)
+    {
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then the expression (expr) is not a valid spirit qi expression.
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, ParserExpr);
+
+        typename Lexer::iterator_type iter = lex.begin(first, last);
+        return compile<qi::domain>(xpr).parse(
+            iter, lex.end(), unused, unused, attr);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  The tokenize_and_phrase_parse() function is one of the main Spirit API 
+    //  functions. It simplifies using a lexer as the underlying token source
+    //  while phrase parsing a given input sequence.
+    //
+    //  The function takes a pair of iterators spanning the underlying input 
+    //  stream to parse, the lexer object (built from the token definitions) 
+    //  and a parser object (built from the parser grammar definition). The 
+    //  additional skipper parameter will be used as the skip parser during
+    //  the parsing process.
+    //
+    //  The second version of this function additionally takes an attribute to 
+    //  be used as the top level data structure instance the parser should use 
+    //  to store the recognized input to.
+    //
+    //  The function returns true if the parsing succeeded (the given input
+    //  sequence has been successfully matched by the given grammar).
+    //
+    //  first, last:    The pair of iterators spanning the underlying input 
+    //                  sequence to parse. These iterators must at least 
+    //                  conform to the requirements of the std::intput_iterator 
+    //                  category.
+    //                  On exit the iterator 'first' will be updated to the 
+    //                  position right after the last successfully matched 
+    //                  token. 
+    //  lex:            The lexer object (encoding the token definitions) to be
+    //                  used to convert the input sequence into a sequence of 
+    //                  tokens. This token sequence is passed to the parsing 
+    //                  process. The LexerExpr type must conform to the 
+    //                  lexer interface described in the corresponding section
+    //                  of the documentation.
+    //  xpr:            The grammar object (encoding the parser grammar) to be
+    //                  used to match the token sequence generated by the lex 
+    //                  object instance. The ParserExpr type must conform to 
+    //                  the grammar interface described in the corresponding 
+    //                  section of the documentation.
+    //  skipper:        The skip parser to be used while parsing the given 
+    //                  input sequence. Note, the skip parser will have to 
+    //                  act on the same token sequence as the main parser 
+    //                  'xpr'.
+    //  post_skip:      The post_skip flag controls whether the function will
+    //                  invoke an additional post skip after the main parser
+    //                  returned.
+    //  attr:           The top level attribute passed to the parser. It will 
+    //                  be populated during the parsing of the input sequence.
+    //                  On exit it will hold the 'parser result' corresponding 
+    //                  to the matched input sequence.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Lexer, typename ParserExpr
+      , typename Skipper>
+    inline bool
+    tokenize_and_phrase_parse(Iterator& first, Iterator last
+      , Lexer const& lex, ParserExpr const& xpr, Skipper const& skipper
+      , BOOST_SCOPED_ENUM(skip_flag) post_skip = skip_flag::postskip)
+    {
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then the expression (expr) is not a valid spirit qi expression.
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, ParserExpr);
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Skipper);
+
+        typedef
+            typename result_of::compile<qi::domain, Skipper>::type
+        skipper_type;
+        skipper_type const skipper_ = compile<qi::domain>(skipper);
+
+        typename Lexer::iterator_type iter = lex.begin(first, last);
+        typename Lexer::iterator_type end = lex.end();
+        if (!compile<qi::domain>(xpr).parse(
+                iter, end, unused, skipper_, unused))
+            return false;
+
+        // do a final post-skip
+        if (post_skip == skip_flag::postskip)
+            qi::skip_over(iter, end, skipper_);
+        return true;
+    }
+
+    template <typename Iterator, typename Lexer, typename ParserExpr
+      , typename Skipper, typename Attribute>
+    inline bool
+    tokenize_and_phrase_parse(Iterator& first, Iterator last
+      , Lexer const& lex, ParserExpr const& xpr, Skipper const& skipper
+      , BOOST_SCOPED_ENUM(skip_flag) post_skip, Attribute& attr)
+    {
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then the expression (expr) is not a valid spirit qi expression.
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, ParserExpr);
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Skipper);
+
+        typedef
+            typename result_of::compile<qi::domain, Skipper>::type
+        skipper_type;
+        skipper_type const skipper_ = compile<qi::domain>(skipper);
+
+        typename Lexer::iterator_type iter = lex.begin(first, last);
+        typename Lexer::iterator_type end = lex.end();
+        if (!compile<qi::domain>(xpr).parse(
+                iter, end, unused, skipper_, attr))
+            return false;
+
+        // do a final post-skip
+        if (post_skip == skip_flag::postskip)
+            qi::skip_over(iter, end, skipper_);
+        return true;
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Lexer, typename ParserExpr
+      , typename Skipper, typename Attribute>
+    inline bool
+    tokenize_and_phrase_parse(Iterator& first, Iterator last
+      , Lexer const& lex, ParserExpr const& xpr, Skipper const& skipper
+      , Attribute& attr)
+    {
+        return tokenize_and_phrase_parse(first, last, lex, xpr, skipper
+          , skip_flag::postskip, attr);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  The tokenize() function is one of the main Spirit API functions. It 
+    //  simplifies using a lexer to tokenize a given input sequence. It's main
+    //  purpose is to use the lexer to tokenize all the input. 
+    //
+    //  The second version below discards all generated tokens afterwards. 
+    //  This is useful whenever all the needed functionality has been 
+    //  implemented directly inside the lexer semantic actions, which are being 
+    //  executed while the tokens are matched. 
+    //
+    //  The function takes a pair of iterators spanning the underlying input 
+    //  stream to scan, the lexer object (built from the token definitions),
+    //  and a (optional) functor being called for each of the generated tokens. 
+    //
+    //  The function returns true if the scanning of the input succeeded (the 
+    //  given input sequence has been successfully matched by the given token
+    //  definitions).
+    //
+    //  first, last:    The pair of iterators spanning the underlying input 
+    //                  sequence to parse. These iterators must at least 
+    //                  conform to the requirements of the std::intput_iterator 
+    //                  category.
+    //                  On exit the iterator 'first' will be updated to the 
+    //                  position right after the last successfully matched 
+    //                  token. 
+    //  lex:            The lexer object (encoding the token definitions) to be
+    //                  used to convert the input sequence into a sequence of 
+    //                  tokens. The LexerExpr type must conform to the 
+    //                  lexer interface described in the corresponding section
+    //                  of the documentation.
+    //  f:              A functor (callable object) taking a single argument of
+    //                  the token type and returning a bool, indicating whether
+    //                  the tokenization should be canceled.
+    //  initial_state:  The name of the state the lexer should start matching.
+    //                  The default value is zero, causing the lexer to start 
+    //                  in its 'INITIAL' state.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename Token, typename F>
+        bool tokenize_callback(Token const& t, F f)
+        {
+            return f(t);
+        }
+
+        template <typename Token, typename Eval>
+        bool tokenize_callback(Token const& t, phoenix::actor<Eval> const& f)
+        {
+            f(t);
+            return true;
+        }
+
+        template <typename Token>
+        bool tokenize_callback(Token const& t, void (*f)(Token const&))
+        {
+            f(t);
+            return true;
+        }
+
+        template <typename Token>
+        bool tokenize_callback(Token const& t, bool (*f)(Token const&))
+        {
+            return f(t);
+        }
+    }
+
+    template <typename Iterator, typename Lexer, typename F>
+    inline bool
+    tokenize(Iterator& first, Iterator last, Lexer const& lex, F f
+      , typename Lexer::char_type const* initial_state = 0)
+    {
+        typedef typename Lexer::iterator_type iterator_type;
+
+        iterator_type iter = lex.begin(first, last, initial_state);
+        iterator_type end = lex.end();
+        for (/**/; iter != end && token_is_valid(*iter); ++iter) 
+        {
+            if (!detail::tokenize_callback(*iter, f))
+                return false;
+        }
+        return (iter == end) ? true : false;
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Lexer>
+    inline bool
+    tokenize(Iterator& first, Iterator last, Lexer const& lex
+      , typename Lexer::char_type const* initial_state = 0)
+    {
+        typedef typename Lexer::iterator_type iterator_type;
+
+        iterator_type iter = lex.begin(first, last, initial_state);
+        iterator_type end = lex.end();
+
+        while (iter != end && token_is_valid(*iter))
+            ++iter;
+
+        return (iter == end) ? true : false;
+    }
+
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/lex/tokenize_and_parse_attr.hpp b/3rdParty/Boost/src/boost/spirit/home/lex/tokenize_and_parse_attr.hpp
new file mode 100644
index 0000000..60d9aac
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/lex/tokenize_and_parse_attr.hpp
@@ -0,0 +1,114 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c) 2001-2011 Joel de Guzman
+//  Copyright (c) 2009 Carl Barron
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+#if !defined(BOOST_SPIRIT_LEXER_PARSE_ATTR_MAY_27_2009_0926AM)
+#define BOOST_SPIRIT_LEXER_PARSE_ATTR_MAY_27_2009_0926AM
+
+#include <boost/spirit/home/lex/tokenize_and_parse.hpp>
+
+#include <boost/fusion/include/vector.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/repetition/enum.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+
+#define BOOST_PP_FILENAME_1 <boost/spirit/home/lex/tokenize_and_parse_attr.hpp>
+#define BOOST_PP_ITERATION_LIMITS (2, SPIRIT_ARGUMENTS_LIMIT)
+#include BOOST_PP_ITERATE()
+
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Preprocessor vertical repetition code
+//
+///////////////////////////////////////////////////////////////////////////////
+#else // defined(BOOST_PP_IS_ITERATING)
+
+#define N BOOST_PP_ITERATION()
+#define BOOST_SPIRIT_QI_ATTRIBUTE_REFERENCE(z, n, A) BOOST_PP_CAT(A, n)&
+
+namespace boost { namespace spirit { namespace lex
+{
+    template <typename Iterator, typename Lexer, typename ParserExpr
+      , BOOST_PP_ENUM_PARAMS(N, typename A)>
+    inline bool
+    tokenize_and_parse(Iterator& first, Iterator last, Lexer const& lex
+      , ParserExpr const& expr, BOOST_PP_ENUM_BINARY_PARAMS(N, A, & attr))
+    {
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then the expression (expr) is not a valid spirit qi expression.
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, ParserExpr);
+
+        typedef fusion::vector<
+            BOOST_PP_ENUM(N, BOOST_SPIRIT_QI_ATTRIBUTE_REFERENCE, A)
+        > vector_type;
+
+        vector_type attr (BOOST_PP_ENUM_PARAMS(N, attr));
+        typename Lexer::iterator_type iter = lex.begin(first, last);
+        return compile<qi::domain>(expr).parse(
+            iter, lex.end(), unused, unused, attr);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Lexer, typename ParserExpr
+      , typename Skipper, BOOST_PP_ENUM_PARAMS(N, typename A)>
+    inline bool
+    tokenize_and_phrase_parse(Iterator& first, Iterator last, Lexer const& lex
+      , ParserExpr const& expr, Skipper const& skipper
+      , BOOST_SCOPED_ENUM(skip_flag) post_skip
+      , BOOST_PP_ENUM_BINARY_PARAMS(N, A, & attr))
+    {
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then either the expression (expr) or skipper is not a valid
+        // spirit qi expression.
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, ParserExpr);
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Skipper);
+
+        typedef
+            typename result_of::compile<qi::domain, Skipper>::type
+        skipper_type;
+        skipper_type const skipper_ = compile<qi::domain>(skipper);
+
+        typedef fusion::vector<
+            BOOST_PP_ENUM(N, BOOST_SPIRIT_QI_ATTRIBUTE_REFERENCE, A)
+        > vector_type;
+
+        vector_type attr (BOOST_PP_ENUM_PARAMS(N, attr));
+        typename Lexer::iterator_type iter = lex.begin(first, last);
+        if (!compile<qi::domain>(expr).parse(
+                iter, lex.end(), unused, skipper_, attr))
+            return false;
+
+        if (post_skip == skip_flag::postskip)
+            qi::skip_over(first, last, skipper_);
+        return true;
+    }
+
+    template <typename Iterator, typename Lexer, typename ParserExpr
+      , typename Skipper, BOOST_PP_ENUM_PARAMS(N, typename A)>
+    inline bool
+    tokenize_and_phrase_parse(Iterator& first, Iterator last, Lexer const& lex
+      , ParserExpr const& expr, Skipper const& skipper
+      , BOOST_PP_ENUM_BINARY_PARAMS(N, A, & attr))
+    {
+        return tokenize_and_phrase_parse(first, last, expr, skipper
+          , skip_flag::postskip, BOOST_PP_ENUM_PARAMS(N, attr));
+    }
+
+}}}
+
+#undef BOOST_SPIRIT_QI_ATTRIBUTE_REFERENCE
+#undef N
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/bind.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/bind.hpp
new file mode 100644
index 0000000..5a90d44
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/bind.hpp
@@ -0,0 +1,16 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_BIND_HPP
+#define PHOENIX_BIND_HPP
+
+#include <boost/spirit/home/phoenix/version.hpp>
+#include <boost/spirit/home/phoenix/bind/bind_function.hpp>
+#include <boost/spirit/home/phoenix/bind/bind_function_object.hpp>
+#include <boost/spirit/home/phoenix/bind/bind_member_function.hpp>
+#include <boost/spirit/home/phoenix/bind/bind_member_variable.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/bind/bind_function.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/bind/bind_function.hpp
new file mode 100644
index 0000000..9121fdc
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/bind/bind_function.hpp
@@ -0,0 +1,58 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_BIND_BIND_FUNCTION_HPP
+#define PHOENIX_BIND_BIND_FUNCTION_HPP
+
+#include <boost/spirit/home/phoenix/core/compose.hpp>
+#include <boost/spirit/home/phoenix/core/detail/function_eval.hpp>
+#include <boost/spirit/home/phoenix/bind/detail/function_ptr.hpp>
+
+namespace boost { namespace phoenix
+{
+    template <typename RT>
+    inline actor<
+        typename as_composite<
+            detail::function_eval<0>
+          , detail::function_ptr<0, RT, RT(*)()>
+        >::type>
+    bind(RT(*f)())
+    {
+        typedef detail::function_ptr<0, RT, RT(*)()> fp_type;
+        return compose<detail::function_eval<0> >(fp_type(f));
+    }
+
+    template <typename RT, typename T0, typename A0>
+    inline actor<
+        typename as_composite<
+            detail::function_eval<1>
+          , detail::function_ptr<1, RT, RT(*)(T0)>
+          , A0
+        >::type>
+    bind(RT(*f)(T0), A0 const& _0)
+    {
+        typedef detail::function_ptr<1, RT, RT(*)(T0)> fp_type;
+        return compose<detail::function_eval<1> >(fp_type(f), _0);
+    }
+
+    template <typename RT, typename T0, typename T1, typename A0, typename A1>
+    inline actor<
+        typename as_composite<
+            detail::function_eval<2>
+          , detail::function_ptr<2, RT, RT(*)(T0, T1)>
+          , A0, A1
+        >::type>
+    bind(RT(*f)(T0, T1), A0 const& _0, A1 const& _1)
+    {
+        typedef detail::function_ptr<2, RT, RT(*)(T0, T1)> fp_type;
+        return compose<detail::function_eval<2> >(fp_type(f), _0, _1);
+    }
+
+    //  Bring in the rest of the function binders
+    #include <boost/spirit/home/phoenix/bind/detail/bind_function.hpp>
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/bind/bind_function_object.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/bind/bind_function_object.hpp
new file mode 100644
index 0000000..752ae31
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/bind/bind_function_object.hpp
@@ -0,0 +1,40 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_BIND_BIND_FUNCTION_OBJECT_HPP
+#define PHOENIX_BIND_BIND_FUNCTION_OBJECT_HPP
+
+#include <boost/spirit/home/phoenix/core/compose.hpp>
+#include <boost/spirit/home/phoenix/core/detail/function_eval.hpp>
+
+namespace boost { namespace phoenix
+{
+    template <typename F>
+    inline actor<typename as_composite<detail::function_eval<0>, F>::type>
+    bind(F const& f)
+    {
+        return compose<detail::function_eval<0> >(f);
+    }
+
+    template <typename F, typename A0>
+    inline actor<typename as_composite<detail::function_eval<1>, F, A0>::type>
+    bind(F const& f, A0 const& _0)
+    {
+        return compose<detail::function_eval<1> >(f, _0);
+    }
+
+    template <typename F, typename A0, typename A1>
+    inline actor<typename as_composite<detail::function_eval<2>, F, A0, A1>::type>
+    bind(F const& f, A0 const& _0, A1 const& _1)
+    {
+        return compose<detail::function_eval<2> >(f, _0, _1);
+    }
+
+    //  Bring in the rest of the function object binders
+    #include <boost/spirit/home/phoenix/bind/detail/bind_function_object.hpp>
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/bind/bind_member_function.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/bind/bind_member_function.hpp
new file mode 100644
index 0000000..9d31a38
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/bind/bind_member_function.hpp
@@ -0,0 +1,77 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_BIND_BIND_MEMBER_FUNCTION_HPP
+#define PHOENIX_BIND_BIND_MEMBER_FUNCTION_HPP
+
+#include <boost/spirit/home/phoenix/core/reference.hpp>
+#include <boost/spirit/home/phoenix/core/compose.hpp>
+#include <boost/spirit/home/phoenix/core/detail/function_eval.hpp>
+#include <boost/spirit/home/phoenix/bind/detail/member_function_ptr.hpp>
+
+namespace boost { namespace phoenix
+{
+    template <typename RT, typename ClassT, typename ClassA>
+    inline actor<
+        typename as_composite<
+            detail::function_eval<1>
+          , detail::member_function_ptr<0, RT, RT(ClassT::*)()>
+          , ClassA
+        >::type>
+    bind(RT(ClassT::*f)(), ClassA const& obj)
+    {
+        typedef detail::member_function_ptr<0, RT, RT(ClassT::*)()> fp_type;
+        return compose<detail::function_eval<1> >(fp_type(f), obj);
+    }
+
+    template <typename RT, typename ClassT, typename ClassA>
+    inline actor<
+        typename as_composite<
+            detail::function_eval<1>
+          , detail::member_function_ptr<0, RT, RT(ClassT::*)() const>
+          , ClassA
+        >::type>
+    bind(RT(ClassT::*f)() const, ClassA const& obj)
+    {
+        typedef detail::member_function_ptr<0, RT, RT(ClassT::*)() const> fp_type;
+        return compose<detail::function_eval<1> >(fp_type(f), obj);
+    }
+
+    template <typename RT, typename ClassT>
+    inline actor<
+        typename as_composite<
+            detail::function_eval<1>
+          , detail::member_function_ptr<0, RT, RT(ClassT::*)()>
+          , actor<reference<ClassT> >
+        >::type>
+    bind(RT(ClassT::*f)(), ClassT& obj)
+    {
+        typedef detail::member_function_ptr<0, RT, RT(ClassT::*)()> fp_type;
+        return compose<detail::function_eval<1> >(
+            fp_type(f)
+          , actor<reference<ClassT> >(reference<ClassT>(obj)));
+    }
+
+    template <typename RT, typename ClassT>
+    inline actor<
+        typename as_composite<
+            detail::function_eval<1>
+          , detail::member_function_ptr<0, RT, RT(ClassT::*)() const>
+          , actor<reference<ClassT> >
+        >::type>
+    bind(RT(ClassT::*f)() const, ClassT& obj)
+    {
+        typedef detail::member_function_ptr<0, RT, RT(ClassT::*)() const> fp_type;
+        return compose<detail::function_eval<1> >(
+            fp_type(f)
+          , actor<reference<ClassT> >(reference<ClassT>(obj)));
+    }
+
+    //  Bring in the rest of the function binders
+    #include <boost/spirit/home/phoenix/bind/detail/bind_member_function.hpp>
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/bind/bind_member_variable.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/bind/bind_member_variable.hpp
new file mode 100644
index 0000000..3d11351
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/bind/bind_member_variable.hpp
@@ -0,0 +1,105 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_BIND_BIND_MEMBER_VARIABLE_HPP
+#define PHOENIX_BIND_BIND_MEMBER_VARIABLE_HPP
+
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/remove_pointer.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+
+#include <boost/spirit/home/phoenix/core/actor.hpp>
+#include <boost/spirit/home/phoenix/core/compose.hpp>
+#include <boost/spirit/home/phoenix/core/reference.hpp>
+#include <boost/spirit/home/phoenix/core/detail/function_eval.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/remove_pointer.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+
+namespace boost { namespace phoenix
+{
+    namespace detail
+    {
+        template <typename RT, typename MP>
+        struct member_variable
+        {
+            template <typename Class>
+            struct result
+            {
+                typedef typename boost::mpl::if_<
+                    boost::is_const<
+                        typename boost::remove_pointer<
+                            typename boost::remove_reference<Class>::type
+                        >::type
+                    >
+                  , const RT&
+                  , RT&
+                >::type type;
+            };
+
+            member_variable(MP mp)
+                : mp(mp) {}
+
+            template <typename Class>
+            RT& operator()(Class& obj) const
+            {
+                return obj.*mp;
+            }
+
+            template <typename Class>
+            RT& operator()(Class* obj) const
+            {
+                return obj->*mp;
+            }
+
+            template <typename Class>
+            RT const& operator()(Class const& obj) const
+            {
+                return obj.*mp;
+            }
+
+            template <typename Class>
+            RT const& operator()(Class const* obj) const
+            {
+                return obj->*mp;
+            }
+
+            MP mp;
+        };
+    }
+
+    template <typename RT, typename ClassT, typename ClassA>
+    inline actor<
+        typename as_composite<
+            detail::function_eval<1>
+          , detail::member_variable<RT, RT ClassT::*>
+          , ClassA
+        >::type>
+    bind(RT ClassT::*mp, ClassA const& obj)
+    {
+        typedef detail::member_variable<RT, RT ClassT::*> mp_type;
+        return compose<detail::function_eval<1> >(mp_type(mp), obj);
+    }
+
+    template <typename RT, typename ClassT>
+    inline actor<
+        typename as_composite<
+            detail::function_eval<1>
+          , detail::member_variable<RT, RT ClassT::*>
+          , actor<reference<ClassT> >
+        >::type>
+    bind(RT ClassT::*mp, ClassT& obj)
+    {
+        typedef detail::member_variable<RT, RT ClassT::*> mp_type;
+        return compose<detail::function_eval<1> >(
+            mp_type(mp)
+          , actor<reference<ClassT> >(reference<ClassT>(obj)));
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/bind/detail/bind_function.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/bind/detail/bind_function.hpp
new file mode 100644
index 0000000..8d6340d
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/bind/detail/bind_function.hpp
@@ -0,0 +1,53 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_PP_IS_ITERATING)
+#if !defined(PHOENIX_BIND_DETAIL_BIND_FUNCTION_HPP)
+#define PHOENIX_BIND_DETAIL_BIND_FUNCTION_HPP
+
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/dec.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+
+#define BOOST_PP_ITERATION_PARAMS_1                                             \
+    (3, (3, BOOST_PP_DEC(PHOENIX_COMPOSITE_LIMIT),                              \
+    "boost/spirit/home/phoenix/bind/detail/bind_function.hpp"))
+#include BOOST_PP_ITERATE()
+
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Preprocessor vertical repetition code
+//
+///////////////////////////////////////////////////////////////////////////////
+#else // defined(BOOST_PP_IS_ITERATING)
+
+#define N BOOST_PP_ITERATION()
+
+    template <typename RT
+      , BOOST_PP_ENUM_PARAMS(N, typename T)
+      , BOOST_PP_ENUM_PARAMS(N, typename A)>
+    inline actor<
+        typename as_composite<
+            detail::function_eval<N>
+          , detail::function_ptr<N, RT, RT(*)(BOOST_PP_ENUM_PARAMS(N, T))>
+          , BOOST_PP_ENUM_PARAMS(N, A)
+        >::type>
+    bind(RT(*f)(BOOST_PP_ENUM_PARAMS(N, T))
+      , BOOST_PP_ENUM_BINARY_PARAMS(N, A, const& _))
+    {
+        typedef detail::function_ptr<
+            N, RT, RT(*)(BOOST_PP_ENUM_PARAMS(N, T))> fp_type;
+        return compose<detail::function_eval<N> >(
+            fp_type(f), BOOST_PP_ENUM_PARAMS(N, _));
+    }
+
+#undef N
+#endif // defined(BOOST_PP_IS_ITERATING)
+
+
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/bind/detail/bind_function_object.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/bind/detail/bind_function_object.hpp
new file mode 100644
index 0000000..4e4984d
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/bind/detail/bind_function_object.hpp
@@ -0,0 +1,43 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_PP_IS_ITERATING)
+#if !defined(PHOENIX_BIND_DETAIL_BIND_FUNCTION_OBJECT_HPP)
+#define PHOENIX_BIND_DETAIL_BIND_FUNCTION_OBJECT_HPP
+
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/dec.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+
+#define BOOST_PP_ITERATION_PARAMS_1                                             \
+    (3, (3, BOOST_PP_DEC(PHOENIX_COMPOSITE_LIMIT),                              \
+    "boost/spirit/home/phoenix/bind/detail/bind_function_object.hpp"))
+#include BOOST_PP_ITERATE()
+
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Preprocessor vertical repetition code
+//
+///////////////////////////////////////////////////////////////////////////////
+#else // defined(BOOST_PP_IS_ITERATING)
+
+#define N BOOST_PP_ITERATION()
+
+    template <typename F, BOOST_PP_ENUM_PARAMS(N, typename A)>
+    inline actor<typename as_composite<detail::function_eval<N>, F
+      , BOOST_PP_ENUM_PARAMS(N, A)>::type>
+    bind(F const& f, BOOST_PP_ENUM_BINARY_PARAMS(N, A, const& _))
+    {
+        return compose<detail::function_eval<N> >(f, BOOST_PP_ENUM_PARAMS(N, _));
+    }
+
+#undef N
+#endif // defined(BOOST_PP_IS_ITERATING)
+
+
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/bind/detail/bind_member_function.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/bind/detail/bind_member_function.hpp
new file mode 100644
index 0000000..315f56f
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/bind/detail/bind_member_function.hpp
@@ -0,0 +1,132 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_PP_IS_ITERATING)
+#if !defined(PHOENIX_BIND_DETAIL_BIND_MEMBER_FUNCTION_HPP)
+#define PHOENIX_BIND_DETAIL_BIND_MEMBER_FUNCTION_HPP
+
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/dec.hpp>
+#include <boost/preprocessor/inc.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+
+#define BOOST_PP_ITERATION_PARAMS_1                                             \
+    (3, (1, BOOST_PP_DEC(BOOST_PP_DEC(PHOENIX_COMPOSITE_LIMIT)),                \
+    "boost/spirit/home/phoenix/bind/detail/bind_member_function.hpp"))
+#include BOOST_PP_ITERATE()
+
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Preprocessor vertical repetition code
+//
+///////////////////////////////////////////////////////////////////////////////
+#else // defined(BOOST_PP_IS_ITERATING)
+
+#define N BOOST_PP_ITERATION()
+
+    template <typename RT
+      , typename ClassT
+      , BOOST_PP_ENUM_PARAMS(N, typename T)
+      , typename ClassA
+      , BOOST_PP_ENUM_PARAMS(N, typename A)>
+    inline actor<
+        typename as_composite<
+            detail::function_eval<BOOST_PP_INC(N)>
+          , detail::member_function_ptr<N,
+                RT, RT(ClassT::*)(BOOST_PP_ENUM_PARAMS(N, T))>
+          , ClassA, BOOST_PP_ENUM_PARAMS(N, A)
+        >::type>
+    bind(
+        RT(ClassT::*f)(BOOST_PP_ENUM_PARAMS(N, T))
+      , ClassA const& obj
+      , BOOST_PP_ENUM_BINARY_PARAMS(N, A, const& _))
+    {
+        typedef detail::member_function_ptr<
+            N, RT, RT(ClassT::*)(BOOST_PP_ENUM_PARAMS(N, T))> fp_type;
+        return compose<detail::function_eval<BOOST_PP_INC(N)> >(
+            fp_type(f), obj, BOOST_PP_ENUM_PARAMS(N, _));
+    }
+
+    template <typename RT
+      , typename ClassT
+      , BOOST_PP_ENUM_PARAMS(N, typename T)
+      , typename ClassA
+      , BOOST_PP_ENUM_PARAMS(N, typename A)>
+    inline actor<
+        typename as_composite<
+            detail::function_eval<BOOST_PP_INC(N)>
+          , detail::member_function_ptr<N,
+                RT, RT(ClassT::*)(BOOST_PP_ENUM_PARAMS(N, T)) const>
+          , ClassA, BOOST_PP_ENUM_PARAMS(N, A)
+        >::type>
+    bind(
+        RT(ClassT::*f)(BOOST_PP_ENUM_PARAMS(N, T)) const
+      , ClassA const& obj
+      , BOOST_PP_ENUM_BINARY_PARAMS(N, A, const& _))
+    {
+        typedef detail::member_function_ptr<
+            N, RT, RT(ClassT::*)(BOOST_PP_ENUM_PARAMS(N, T)) const> fp_type;
+        return compose<detail::function_eval<BOOST_PP_INC(N)> >(
+            fp_type(f), obj, BOOST_PP_ENUM_PARAMS(N, _));
+    }
+
+    template <typename RT
+      , typename ClassT
+      , BOOST_PP_ENUM_PARAMS(N, typename T)
+      , BOOST_PP_ENUM_PARAMS(N, typename A)>
+    inline actor<
+        typename as_composite<
+            detail::function_eval<BOOST_PP_INC(N)>
+          , detail::member_function_ptr<N,
+                RT, RT(ClassT::*)(BOOST_PP_ENUM_PARAMS(N, T))>
+          , actor<reference<ClassT> >
+          , BOOST_PP_ENUM_PARAMS(N, A)
+        >::type>
+    bind(
+        RT(ClassT::*f)(BOOST_PP_ENUM_PARAMS(N, T))
+      , ClassT& obj
+      , BOOST_PP_ENUM_BINARY_PARAMS(N, A, const& _))
+    {
+        typedef detail::member_function_ptr<
+            N, RT, RT(ClassT::*)(BOOST_PP_ENUM_PARAMS(N, T))> fp_type;
+        return compose<detail::function_eval<BOOST_PP_INC(N)> >(
+            fp_type(f)
+          , actor<reference<ClassT> >(reference<ClassT>(obj))
+          , BOOST_PP_ENUM_PARAMS(N, _));
+    }
+
+    template <typename RT
+      , typename ClassT
+      , BOOST_PP_ENUM_PARAMS(N, typename T)
+      , BOOST_PP_ENUM_PARAMS(N, typename A)>
+    inline actor<
+        typename as_composite<
+            detail::function_eval<BOOST_PP_INC(N)>
+          , detail::member_function_ptr<N,
+                RT, RT(ClassT::*)(BOOST_PP_ENUM_PARAMS(N, T)) const>
+          , actor<reference<ClassT> >
+          , BOOST_PP_ENUM_PARAMS(N, A)
+        >::type>
+    bind(
+        RT(ClassT::*f)(BOOST_PP_ENUM_PARAMS(N, T)) const
+      , ClassT& obj
+      , BOOST_PP_ENUM_BINARY_PARAMS(N, A, const& _))
+    {
+        typedef detail::member_function_ptr<
+            N, RT, RT(ClassT::*)(BOOST_PP_ENUM_PARAMS(N, T)) const> fp_type;
+        return compose<detail::function_eval<BOOST_PP_INC(N)> >(
+            fp_type(f)
+          , actor<reference<ClassT> >(reference<ClassT>(obj))
+          , BOOST_PP_ENUM_PARAMS(N, _));
+    }
+
+#undef N
+#endif // defined(BOOST_PP_IS_ITERATING)
+
+
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/bind/detail/function_ptr.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/bind/detail/function_ptr.hpp
new file mode 100644
index 0000000..a2352cd
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/bind/detail/function_ptr.hpp
@@ -0,0 +1,99 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_PP_IS_ITERATING)
+#if !defined(PHOENIX_BIND_DETAIL_FUNCTION_PTR_HPP)
+#define PHOENIX_BIND_DETAIL_FUNCTION_PTR_HPP
+
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/dec.hpp>
+
+namespace boost { namespace phoenix { namespace detail
+{
+    template <int N>
+    struct function_ptr_impl
+    {
+        template <typename RT, typename FP>
+        struct impl;
+    };
+
+    template <int N, typename RT, typename FP>
+    struct function_ptr : function_ptr_impl<N>::template impl<RT, FP>
+    {
+        typedef typename function_ptr_impl<N>::template impl<RT, FP> base;
+        function_ptr(FP fp)
+            : base(fp) {}
+    };
+
+    template <>
+    struct function_ptr_impl<0>
+    {
+        template <typename RT, typename FP>
+        struct impl
+        {
+            typedef RT result_type;
+
+            impl(FP fp)
+                : fp(fp) {}
+
+            RT operator()() const
+            {
+                return fp();
+            }
+
+            FP fp;
+        };
+    };
+
+#define BOOST_PP_ITERATION_PARAMS_1                                             \
+    (3, (1, PHOENIX_COMPOSITE_LIMIT,                                            \
+    "boost/spirit/home/phoenix/bind/detail/function_ptr.hpp"))
+#include BOOST_PP_ITERATE()
+
+}}} // namespace boost::phoenix::detail
+
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Preprocessor vertical repetition code
+//
+///////////////////////////////////////////////////////////////////////////////
+#else // defined(BOOST_PP_IS_ITERATING)
+
+#define N BOOST_PP_ITERATION()
+
+    template <>
+    struct function_ptr_impl<N>
+    {
+        template <typename RT, typename FP>
+        struct impl
+        {
+            template <BOOST_PP_ENUM_PARAMS(N, typename T)>
+            struct result
+            {
+                typedef RT type;
+            };
+
+            impl(FP fp)
+                : fp(fp) {}
+
+            template <BOOST_PP_ENUM_PARAMS(N, typename A)>
+            RT operator()(BOOST_PP_ENUM_BINARY_PARAMS(N, A, & _)) const
+            {
+                return fp(BOOST_PP_ENUM_PARAMS(N, _));
+            }
+
+            FP fp;
+        };
+    };
+
+#undef N
+#endif // defined(BOOST_PP_IS_ITERATING)
+
+
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/bind/detail/member_function_ptr.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/bind/detail/member_function_ptr.hpp
new file mode 100644
index 0000000..2c11510
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/bind/detail/member_function_ptr.hpp
@@ -0,0 +1,119 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_PP_IS_ITERATING)
+#if !defined(PHOENIX_BIND_DETAIL_MEMBER_FUNCTION_PTR_HPP)
+#define PHOENIX_BIND_DETAIL_MEMBER_FUNCTION_PTR_HPP
+
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/dec.hpp>
+#include <boost/utility/addressof.hpp>
+
+namespace boost { namespace phoenix { namespace detail
+{
+    template <int N>
+    struct member_function_ptr_impl
+    {
+        template <typename RT, typename FP>
+        struct impl;
+    };
+
+    template <int N, typename RT, typename FP>
+    struct member_function_ptr
+        : member_function_ptr_impl<N>::template impl<RT, FP>
+    {
+        typedef typename member_function_ptr_impl<N>::
+            template impl<RT, FP> base;
+        member_function_ptr(FP fp)
+            : base(fp) {}
+    };
+
+    template <>
+    struct member_function_ptr_impl<0>
+    {
+        template <typename RT, typename FP>
+        struct impl
+        {
+            template <typename Class>
+            struct result
+            {
+                typedef RT type;
+            };
+
+            impl(FP fp)
+                : fp(fp) {}
+
+            template <typename Class>
+            RT operator()(Class& obj) const
+            {
+                return (obj.*fp)();
+            }
+
+            template <typename Class>
+            RT operator()(Class* obj) const
+            {
+                return (obj->*fp)();
+            }
+
+            FP fp;
+        };
+    };
+
+#define BOOST_PP_ITERATION_PARAMS_1                                             \
+    (3, (1, PHOENIX_COMPOSITE_LIMIT,                                            \
+    "boost/spirit/home/phoenix/bind/detail/member_function_ptr.hpp"))
+#include BOOST_PP_ITERATE()
+
+}}} // namespace boost::phoenix::detail
+
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Preprocessor vertical repetition code
+//
+///////////////////////////////////////////////////////////////////////////////
+#else // defined(BOOST_PP_IS_ITERATING)
+
+#define N BOOST_PP_ITERATION()
+
+    template <>
+    struct member_function_ptr_impl<N>
+    {
+        template <typename RT, typename FP>
+        struct impl
+        {
+            template <typename Class, BOOST_PP_ENUM_PARAMS(N, typename T)>
+            struct result
+            {
+                typedef RT type;
+            };
+
+            impl(FP fp)
+                : fp(fp) {}
+
+            template <typename Class, BOOST_PP_ENUM_PARAMS(N, typename A)>
+            RT operator()(Class& obj, BOOST_PP_ENUM_BINARY_PARAMS(N, A, & _)) const
+            {
+                return (obj.*fp)(BOOST_PP_ENUM_PARAMS(N, _));
+            }
+
+            template <typename Class, BOOST_PP_ENUM_PARAMS(N, typename A)>
+            RT operator()(Class* obj, BOOST_PP_ENUM_BINARY_PARAMS(N, A, & _)) const
+            {
+                return (obj->*fp)(BOOST_PP_ENUM_PARAMS(N, _));
+            }
+
+            FP fp;
+        };
+    };
+
+#undef N
+#endif // defined(BOOST_PP_IS_ITERATING)
+
+
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/core.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/core.hpp
new file mode 100644
index 0000000..7dfefb3
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/core.hpp
@@ -0,0 +1,23 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_CORE_HPP
+#define PHOENIX_CORE_HPP
+
+#include <boost/spirit/home/phoenix/version.hpp>
+#include <boost/spirit/home/phoenix/core/limits.hpp>
+#include <boost/spirit/home/phoenix/core/basic_environment.hpp>
+#include <boost/spirit/home/phoenix/core/actor.hpp>
+#include <boost/spirit/home/phoenix/core/as_actor.hpp>
+#include <boost/spirit/home/phoenix/core/is_actor.hpp>
+#include <boost/spirit/home/phoenix/core/argument.hpp>
+#include <boost/spirit/home/phoenix/core/value.hpp>
+#include <boost/spirit/home/phoenix/core/reference.hpp>
+#include <boost/spirit/home/phoenix/core/compose.hpp>
+#include <boost/spirit/home/phoenix/core/composite.hpp>
+#include <boost/spirit/home/phoenix/core/nothing.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/core/actor.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/core/actor.hpp
new file mode 100644
index 0000000..c5255dc
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/core/actor.hpp
@@ -0,0 +1,177 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_CORE_ACTOR_HPP
+#define PHOENIX_CORE_ACTOR_HPP
+
+#include <boost/spirit/home/phoenix/core/limits.hpp>
+
+#if !defined(BOOST_RESULT_OF_NUM_ARGS)
+# define BOOST_RESULT_OF_NUM_ARGS PHOENIX_ACTOR_LIMIT
+#elif (BOOST_RESULT_OF_NUM_ARGS < PHOENIX_ACTOR_LIMIT)
+# error "BOOST_RESULT_OF_NUM_ARGS < PHOENIX_ACTOR_LIMIT"
+#endif
+
+#include <boost/spirit/home/phoenix/core/basic_environment.hpp>
+#include <boost/mpl/min.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/type_traits/add_const.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/utility/result_of.hpp>
+
+namespace boost { namespace phoenix
+{
+    // phoenix::void_ is the same as fusion::void_
+    typedef fusion::void_ void_;
+
+    namespace detail
+    {
+        //  Forward declarations. These will come in when we get to the
+        //  operator module, yet, the actor's assignment operator and index
+        //  operator are required to be members.
+
+        template <typename T0, typename T1>
+        struct make_assign_composite;
+
+        template <typename T0, typename T1>
+        struct make_index_composite;
+
+        template <typename BaseT0, typename BaseT1>
+        struct comma_result;
+
+        // error no arguments supplied
+        struct error_expecting_arguments
+        {
+            template <typename T>
+            error_expecting_arguments(T const&) {}
+        };
+    }
+
+    template <typename Eval, typename Env>
+    struct eval_result
+    {
+        typedef typename Eval::template result<Env>::type type;
+    };
+
+    template <typename Eval>
+    struct actor : Eval
+    {
+        typedef actor<Eval> self_type;
+        typedef Eval eval_type;
+
+        template <class Sig> struct result {};
+
+        actor()
+            : Eval() {}
+
+        actor(Eval const& base)
+            : Eval(base) {}
+
+        template <typename T0>
+        explicit actor(T0 const& _0)
+            : Eval(_0) {}
+
+        template <typename T0, typename T1>
+        actor(T0 const& _0, T1 const& _1)
+            : Eval(_0, _1) {}
+
+        typedef typename
+            mpl::eval_if<
+                typename Eval::no_nullary // avoid calling eval_result when this is true
+              , mpl::identity<detail::error_expecting_arguments>
+              , eval_result<eval_type, basic_environment<> >
+            >::type
+        nullary_result;
+
+        nullary_result
+        operator()() const
+        {
+            return eval_type::eval(basic_environment<>());
+        }
+
+        template <class F, class A0>
+        struct result<F(A0)>
+          : eval_result<
+                eval_type
+              , basic_environment<
+                    typename remove_reference<A0>::type
+                >
+            >
+        {};
+
+        template <typename T0>
+        typename result<actor(T0&)>::type
+        operator()(T0& _0) const
+        {
+            return eval_type::eval(basic_environment<T0>(_0));
+        }
+
+        template <class F, class A0, class A1>
+        struct result<F(A0,A1)>
+          : eval_result<
+                eval_type
+              , basic_environment<
+                    typename remove_reference<A0>::type
+                  , typename remove_reference<A1>::type
+                >
+            >
+        {};
+
+        template <typename T0, typename T1>
+        typename result<actor(T0&,T1&)>::type
+        operator()(T0& _0, T1& _1) const
+        {
+            return eval_type::eval(basic_environment<T0, T1>(_0, _1));
+        }
+
+        template <typename T1>
+        typename detail::make_assign_composite<self_type, T1>::type
+        operator=(T1 const& a1) const;
+
+        template <typename T1>
+        typename detail::make_index_composite<self_type, T1>::type
+        operator[](T1 const& a1) const;
+
+        //  Bring in the rest of the constructors and function call operators
+        #include <boost/spirit/home/phoenix/core/detail/actor.hpp>
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        actor& operator= (actor const&);
+    };
+
+    //  Forward declaration: The intent to overload the comma must be
+    //  stated early on to avoid the subtle problem that arises when
+    //  the header file where the comma operator overload is defined,
+    //  is not included by the client and the client attempts to use
+    //  the comma anyway.
+
+    namespace detail
+    {
+        template <typename BaseT0, typename BaseT1>
+        struct comma_result;
+    }
+
+    template <typename BaseT0, typename BaseT1>
+    typename detail::comma_result<BaseT0, BaseT1>::type
+    operator,(actor<BaseT0> const& a0, actor<BaseT1> const& a1);
+}}
+
+namespace boost
+{
+    template <typename Eval>
+    struct result_of<phoenix::actor<Eval>()>
+    {
+        typedef typename phoenix::actor<Eval>::nullary_result type;
+    };
+
+    template <typename Eval>
+    struct result_of<phoenix::actor<Eval> const()>
+        : result_of<phoenix::actor<Eval>()>
+    {};
+}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/core/argument.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/core/argument.hpp
new file mode 100644
index 0000000..3e71f7f
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/core/argument.hpp
@@ -0,0 +1,89 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_CORE_ARGUMENT_HPP
+#define PHOENIX_CORE_ARGUMENT_HPP
+
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/preprocessor/inc.hpp>
+#include <boost/spirit/home/phoenix/core/actor.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/less.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/at.hpp>
+#include <boost/mpl/size.hpp>
+#include <boost/type_traits/add_reference.hpp>
+
+#define PHOENIX_DECLARE_ARG(z, n, data)                                         \
+    actor<argument<n> > const                                                   \
+        BOOST_PP_CAT(arg, BOOST_PP_INC(n)) = argument<n>();                     \
+    actor<argument<n> > const                                                   \
+        BOOST_PP_CAT(_, BOOST_PP_INC(n)) = argument<n>();
+
+namespace boost { namespace phoenix
+{
+    namespace detail
+    {
+        template <typename Arg>
+        struct error_argument_not_found {};
+        inline void test_invalid_argument(int) {}
+    }
+
+    template <int N>
+    struct argument
+    {
+        typedef mpl::true_ no_nullary;
+
+        template <typename Env>
+        struct result
+        {
+            typedef typename
+                fusion::result_of::at<typename Env::tie_type, mpl::int_<N> >::type
+            type;
+        };
+
+        template <typename Env>
+        typename result<Env>::type
+        eval(Env const& env) const
+        {
+            typedef typename
+                mpl::if_<
+                    mpl::less<mpl::int_<N>, mpl::size<typename Env::args_type> >
+                  , int
+                  , detail::error_argument_not_found<argument<N> >
+                >::type
+            check_out_of_bounds;
+
+            detail::test_invalid_argument(check_out_of_bounds());
+            return fusion::at_c<N>(env.args());
+        }
+    };
+
+    namespace arg_names
+    {
+    //  Phoenix style names
+        actor<argument<0> > const arg1 = argument<0>();
+        actor<argument<1> > const arg2 = argument<1>();
+        actor<argument<2> > const arg3 = argument<2>();
+
+    //  BLL style names
+        actor<argument<0> > const _1 = argument<0>();
+        actor<argument<1> > const _2 = argument<1>();
+        actor<argument<2> > const _3 = argument<2>();
+
+    //  Bring in the rest or the Phoenix style arguments (arg4 .. argN+1)
+    //  and BLL style arguments (_4 .. _N+1), using PP
+        BOOST_PP_REPEAT_FROM_TO(
+            3, PHOENIX_ARG_LIMIT, PHOENIX_DECLARE_ARG, _)
+    }
+}}
+
+#undef PHOENIX_DECLARE_ARG
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/core/as_actor.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/core/as_actor.hpp
new file mode 100644
index 0000000..36f0aac
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/core/as_actor.hpp
@@ -0,0 +1,62 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_CORE_AS_ACTOR_HPP
+#define PHOENIX_CORE_AS_ACTOR_HPP
+
+#include <boost/spirit/home/phoenix/core/actor.hpp>
+
+namespace boost { namespace phoenix
+{
+    template <typename T>
+    struct as_actor_base; // defined in value.hpp
+
+    template <typename Base>
+    struct as_actor_base<actor<Base> >
+    {
+        typedef Base type;
+
+        static Base const&
+        convert(actor<Base> const& x)
+        {
+            return x;
+        }
+    };
+
+    template <>
+    struct as_actor_base<fusion::void_>
+    {
+        typedef fusion::void_ type;
+        struct error_attempting_to_convert_void_type_to_an_actor {};
+
+        static void
+        convert(error_attempting_to_convert_void_type_to_an_actor);
+    };
+
+    template <>
+    struct as_actor_base<void>
+    {
+        typedef void type;
+        struct error_attempting_to_convert_void_type_to_an_actor {};
+
+        static void
+        convert(error_attempting_to_convert_void_type_to_an_actor);
+    };
+
+    template <typename T>
+    struct as_actor
+    {
+        typedef actor<typename as_actor_base<T>::type> type;
+
+        static type
+        convert(T const& x)
+        {
+            return as_actor_base<T>::convert(x);
+        }
+    };
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/core/basic_environment.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/core/basic_environment.hpp
new file mode 100644
index 0000000..5ef8223
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/core/basic_environment.hpp
@@ -0,0 +1,81 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_CORE_BASIC_ENVIRONMENT_HPP
+#define PHOENIX_CORE_BASIC_ENVIRONMENT_HPP
+
+#include <boost/spirit/home/phoenix/core/limits.hpp>
+#include <boost/mpl/remove.hpp>
+#include <boost/mpl/transform.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/fusion/include/as_vector.hpp>
+#include <boost/fusion/include/mpl.hpp>
+
+namespace boost { namespace phoenix
+{
+    template <
+        BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
+            PHOENIX_ARG_LIMIT, typename T, fusion::void_)>
+    class basic_environment
+    {
+        typedef
+            mpl::BOOST_PP_CAT(vector, PHOENIX_ARG_LIMIT)<
+                BOOST_PP_ENUM_PARAMS(PHOENIX_ARG_LIMIT, T)>
+        args_with_void_type;
+
+    public:
+
+        // args_type: the list of types in an mpl::sequence
+        typedef typename 
+            mpl::remove<args_with_void_type, fusion::void_>::type 
+        args_type;
+        
+        // tie_type: a fusion::tuple of references
+        typedef typename
+            fusion::result_of::as_vector<
+                typename mpl::transform<
+                    args_type, boost::add_reference<mpl::_1> 
+                >::type
+            >::type
+        tie_type;
+
+        basic_environment()
+            : args_() {}
+
+        template <typename U0>
+        explicit basic_environment(U0& _0)
+            : args_(_0) {}
+
+        template <typename U0, typename U1>
+        basic_environment(U0& _0, U1& _1)
+            : args_(_0, _1) {}
+
+        //  Bring in the rest of the constructors
+        #include <boost/spirit/home/phoenix/core/detail/basic_environment.hpp>
+
+        tie_type const& 
+        args() const
+        {
+            return args_;
+        }
+
+        tie_type& 
+        args()
+        {
+            return args_;
+        }
+
+    private:
+
+        tie_type args_;
+    };
+}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/core/compose.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/core/compose.hpp
new file mode 100644
index 0000000..d536113
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/core/compose.hpp
@@ -0,0 +1,118 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_CORE_COMPOSE_HPP
+#define PHOENIX_CORE_COMPOSE_HPP
+
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/preprocessor/repetition/enum.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
+#include <boost/spirit/home/phoenix/core/composite.hpp>
+#include <boost/spirit/home/phoenix/core/value.hpp>
+#include <boost/spirit/home/phoenix/core/as_actor.hpp>
+
+#define PHOENIX_AS_ACTOR(z, n, data)                                            \
+    typename mpl::eval_if<                                                      \
+        is_same<BOOST_PP_CAT(T, n), fusion::void_>                              \
+      , mpl::identity<fusion::void_>                                            \
+      , as_actor_base<BOOST_PP_CAT(T, n)>                                       \
+    >::type
+
+namespace boost { namespace phoenix
+{
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  as_composite<EvalPolicy, T0,... TN> metafunction
+//
+//      Create a composite given an EvalPolicy and types T0..TN.
+//      The types are converted to an actor through the as_actor
+//      metafunction (see as_actor.hpp).
+//
+///////////////////////////////////////////////////////////////////////////////
+    template <
+        typename EvalPolicy
+      , BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
+            PHOENIX_COMPOSITE_LIMIT, typename T, fusion::void_)>
+    struct as_composite
+    {
+        typedef composite<
+            EvalPolicy
+          , fusion::vector<
+                BOOST_PP_ENUM(PHOENIX_COMPOSITE_LIMIT, PHOENIX_AS_ACTOR, _)>
+        >
+        type;
+    };
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  compose functions
+//
+//      Usage:
+//
+//          compose<EvalPolicy>(_0, _1,... _N)
+//
+//      Returns a composite given an EvalPolicy and arguments _0.._N. 
+//      The arguments are converted to an actor through the as_actor
+//      metafunction (see as_actor.hpp).
+//
+///////////////////////////////////////////////////////////////////////////////
+    template <typename EvalPolicy>
+    inline actor<typename as_composite<EvalPolicy>::type>
+    compose()
+    {
+        return actor<typename as_composite<EvalPolicy>::type>();
+    }
+
+    template <typename EvalPolicy, typename T0>
+    inline actor<typename as_composite<EvalPolicy, T0>::type>
+    compose(T0 const& _0)
+    {
+        return actor<typename as_composite<EvalPolicy, T0>::type>(
+            as_actor<T0>::convert(_0)
+        );
+    }
+
+    template <typename EvalPolicy, typename T0, typename T1>
+    inline actor<typename as_composite<EvalPolicy, T0, T1>::type>
+    compose(T0 const& _0, T1 const& _1)
+    {
+        return actor<typename as_composite<EvalPolicy, T0, T1>::type>(
+            as_actor<T0>::convert(_0)
+          , as_actor<T1>::convert(_1)
+        );
+    }
+
+    //  Bring in the the rest of the compose overloads
+    #include <boost/spirit/home/phoenix/core/detail/compose.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  re_curry<EvalPolicy, T0,...TN>
+//
+//      returns the result of re currying T0..TN using EvalPolicy.
+//
+///////////////////////////////////////////////////////////////////////////////
+    template <
+        typename EvalPolicy
+      , BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
+            PHOENIX_COMPOSITE_LIMIT, typename T, fusion::void_)>
+    struct re_curry
+    {
+        typedef actor<
+            typename as_composite<
+                EvalPolicy
+              , BOOST_PP_ENUM_PARAMS(PHOENIX_COMPOSITE_LIMIT, T)>::type
+            >
+        type;
+    };
+}}
+
+#undef PHOENIX_AS_ACTOR
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/core/composite.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/core/composite.hpp
new file mode 100644
index 0000000..283bdc2
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/core/composite.hpp
@@ -0,0 +1,96 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_CORE_COMPOSITE_HPP
+#define PHOENIX_CORE_COMPOSITE_HPP
+
+#include <boost/spirit/home/phoenix/core/actor.hpp>
+#include <boost/spirit/home/phoenix/core/is_actor.hpp>
+#include <boost/fusion/include/vector.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/fusion/include/size.hpp>
+#include <boost/fusion/include/mpl.hpp>
+#include <boost/mpl/fold.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/or.hpp>
+
+namespace boost { namespace phoenix
+{
+    namespace detail
+    {
+        template <int N>
+        struct composite_eval;
+        
+        struct compute_no_nullary
+        {
+            template <typename State, typename T>
+            struct apply
+            {
+                typedef typename 
+                    mpl::or_<typename T::no_nullary, State>::type
+                type;
+            };
+        };
+    }
+
+    template <typename EvalPolicy, typename EvalTuple>
+    struct composite : EvalTuple
+    {
+        typedef EvalTuple base_type;
+        typedef composite<EvalPolicy, EvalTuple> self_type;
+        typedef EvalPolicy eval_policy_type;
+        
+        typedef typename
+            mpl::fold<
+                EvalTuple
+              , mpl::false_
+              , detail::compute_no_nullary
+            >::type
+        no_nullary;
+
+        template <typename Env>
+        struct result
+        {
+            typedef
+                typename detail::composite_eval<
+                    fusion::result_of::size<base_type>::value>::
+                template result<self_type, Env>::type
+            type;
+        };
+
+        composite()
+            : base_type() {}
+
+        composite(base_type const& base)
+            : base_type(base) {}
+
+        template <typename U0>
+        composite(U0& _0)
+            : base_type(_0) {}
+
+        template <typename U0, typename U1>
+        composite(U0& _0, U1& _1)
+            : base_type(_0, _1) {}
+
+        template <typename Env>
+        typename result<Env>::type
+        eval(Env const& env) const
+        {
+            typedef typename result<Env>::type return_type;
+            return detail::
+                composite_eval<fusion::result_of::size<base_type>::value>::template
+                    call<return_type>(*this, env);
+        }
+
+        //  Bring in the rest of the constructors
+        #include <boost/spirit/home/phoenix/core/detail/composite.hpp>
+    };
+
+    //  Bring in the detail::composite_eval<0..N> definitions
+    #include <boost/spirit/home/phoenix/core/detail/composite_eval.hpp>
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/core/detail/actor.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/core/detail/actor.hpp
new file mode 100644
index 0000000..66666c5
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/core/detail/actor.hpp
@@ -0,0 +1,65 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef BOOST_PP_IS_ITERATING
+#ifndef PHOENIX_CORE_DETAIL_ACTOR_HPP
+#define PHOENIX_CORE_DETAIL_ACTOR_HPP
+
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/facilities/intercept.hpp>
+
+#define BOOST_PP_ITERATION_PARAMS_1                                             \
+    (3, (3, PHOENIX_ACTOR_LIMIT,                                                \
+    "boost/spirit/home/phoenix/core/detail/actor.hpp"))
+#include BOOST_PP_ITERATE()
+
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Preprocessor vertical repetition code
+//
+///////////////////////////////////////////////////////////////////////////////
+#else // defined(BOOST_PP_IS_ITERATING)
+
+#define N BOOST_PP_ITERATION()
+
+    template <BOOST_PP_ENUM_PARAMS(N, typename T)>
+    actor(BOOST_PP_ENUM_BINARY_PARAMS(N, T, const& _))
+        : Eval(BOOST_PP_ENUM_PARAMS(N, _)) {}
+
+    template <typename F, BOOST_PP_ENUM_PARAMS(N, typename A)>
+    struct result<F(BOOST_PP_ENUM_PARAMS(N, A))>
+      : eval_result<
+            eval_type
+          , basic_environment<
+                BOOST_PP_ENUM_BINARY_PARAMS(
+                    N
+                  , typename remove_reference<A
+                  , >::type BOOST_PP_INTERCEPT
+                )
+            >
+        >
+    {};
+
+    template <BOOST_PP_ENUM_PARAMS(N, typename T)>
+    typename result<
+        actor(BOOST_PP_ENUM_BINARY_PARAMS(N, T, & BOOST_PP_INTERCEPT))
+    >::type
+    operator()(BOOST_PP_ENUM_BINARY_PARAMS(N, T, & _)) const
+    {
+        return eval_type::eval(
+            basic_environment<BOOST_PP_ENUM_PARAMS(N, T)>(
+                BOOST_PP_ENUM_PARAMS(N, _))
+        );
+    }
+
+#undef N
+#endif // defined(BOOST_PP_IS_ITERATING)
+
+
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/core/detail/basic_environment.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/core/detail/basic_environment.hpp
new file mode 100644
index 0000000..986ecf2
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/core/detail/basic_environment.hpp
@@ -0,0 +1,38 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef BOOST_PP_IS_ITERATING
+#ifndef PHOENIX_CORE_DETAIL_BASIC_ENVIRONMENT_HPP
+#define PHOENIX_CORE_DETAIL_BASIC_ENVIRONMENT_HPP
+
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+
+#define BOOST_PP_ITERATION_PARAMS_1                                             \
+    (3, (3, PHOENIX_ARG_LIMIT,                                                  \
+    "boost/spirit/home/phoenix/core/detail/basic_environment.hpp"))
+#include BOOST_PP_ITERATE()
+
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Preprocessor vertical repetition code
+//
+///////////////////////////////////////////////////////////////////////////////
+#else // defined(BOOST_PP_IS_ITERATING)
+
+#define N BOOST_PP_ITERATION()
+
+    template <BOOST_PP_ENUM_PARAMS(N, typename U)>
+    basic_environment(BOOST_PP_ENUM_BINARY_PARAMS(N, U, & _))
+        : args_(BOOST_PP_ENUM_PARAMS(N, _)) {}
+
+#undef N
+#endif // defined(BOOST_PP_IS_ITERATING)
+
+
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/core/detail/compose.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/core/detail/compose.hpp
new file mode 100644
index 0000000..945a3d3
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/core/detail/compose.hpp
@@ -0,0 +1,47 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef BOOST_PP_IS_ITERATING
+#ifndef PHOENIX_CORE_DETAIL_COMPOSE_DETAIL_HPP
+#define PHOENIX_CORE_DETAIL_COMPOSE_DETAIL_HPP
+
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/repetition/enum.hpp>
+
+#define PHOENIX_AS_ACTOR_CONVERT(z, n, data)                                    \
+    as_actor<BOOST_PP_CAT(T, n)>::convert(BOOST_PP_CAT(_, n))
+
+#define BOOST_PP_ITERATION_PARAMS_1                                             \
+    (3, (3, PHOENIX_COMPOSITE_LIMIT,                                            \
+    "boost/spirit/home/phoenix/core/detail/compose.hpp"))
+#include BOOST_PP_ITERATE()
+
+#undef PHOENIX_AS_ACTOR_CONVERT
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Preprocessor vertical repetition code
+//
+///////////////////////////////////////////////////////////////////////////////
+#else // defined(BOOST_PP_IS_ITERATING)
+
+#define N BOOST_PP_ITERATION()
+
+    template <typename EvalPolicy, BOOST_PP_ENUM_PARAMS(N, typename T)>
+    inline actor<
+        typename as_composite<EvalPolicy, BOOST_PP_ENUM_PARAMS(N, T)>::type>
+    compose(BOOST_PP_ENUM_BINARY_PARAMS(N, T, const& _))
+    {
+        return actor<
+            typename as_composite<EvalPolicy, BOOST_PP_ENUM_PARAMS(N, T)>::type>(
+                BOOST_PP_ENUM(N, PHOENIX_AS_ACTOR_CONVERT, _));
+    }
+
+#undef N
+#endif // defined(BOOST_PP_IS_ITERATING)
+
+
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/core/detail/composite.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/core/detail/composite.hpp
new file mode 100644
index 0000000..6970f7c
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/core/detail/composite.hpp
@@ -0,0 +1,36 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef BOOST_PP_IS_ITERATING
+#ifndef PHOENIX_CORE_DETAIL_COMPOSITE_HPP
+#define PHOENIX_CORE_DETAIL_COMPOSITE_HPP
+
+#include <boost/preprocessor/iterate.hpp>
+
+#define BOOST_PP_ITERATION_PARAMS_1                                             \
+    (3, (3, PHOENIX_COMPOSITE_LIMIT,                                            \
+    "boost/spirit/home/phoenix/core/detail/composite.hpp"))
+#include BOOST_PP_ITERATE()
+
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Preprocessor vertical repetition code
+//
+///////////////////////////////////////////////////////////////////////////////
+#else // defined(BOOST_PP_IS_ITERATING)
+
+#define N BOOST_PP_ITERATION()
+
+    template <BOOST_PP_ENUM_PARAMS(N, typename U)>
+    composite(BOOST_PP_ENUM_BINARY_PARAMS(N, U, & _))
+        : base_type(BOOST_PP_ENUM_PARAMS(N, _)) {}
+
+#undef N
+#endif // defined(BOOST_PP_IS_ITERATING)
+
+
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/core/detail/composite_eval.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/core/detail/composite_eval.hpp
new file mode 100644
index 0000000..14f12af
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/core/detail/composite_eval.hpp
@@ -0,0 +1,106 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef BOOST_PP_IS_ITERATING
+#ifndef PHOENIX_CORE_DETAIL_COMPOSITE_EVAL_HPP
+#define PHOENIX_CORE_DETAIL_COMPOSITE_EVAL_HPP
+
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/repetition/enum.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+
+    namespace detail
+    {
+        template <int N>
+        struct composite_eval;
+
+        template <>
+        struct composite_eval<0>
+        {
+            template <typename Composite, typename Env>
+            struct result
+            {
+                typedef typename Composite::eval_policy_type::
+                    template result<Env>::type
+                type;
+            };
+
+            template <typename RT, typename Composite, typename Env>
+            static RT
+            call(Composite const& /*composite*/, Env const& env)
+            {
+                typedef typename Composite::eval_policy_type eval_policy_type;
+                return eval_policy_type::template eval<RT>(env);
+            }
+        };
+
+        template <typename Actor, typename Env>
+        struct eval_is_actor
+            : is_actor<typename Actor::template result<Env>::type> {};
+
+        template <typename Actor, typename Env>
+        struct eval_is_void
+            : is_same<typename Actor::template result<Env>::type, fusion::void_> {};
+    }
+
+#define PHOENIX_GET_ACTOR_TYPE(z, n, data)                                      \
+    typedef                                                                     \
+        typename fusion::result_of::value_at_c<Composite, n>::type              \
+    BOOST_PP_CAT(actor, n);
+
+#define PHOENIX_GET_ACTOR(z, n, data)                                           \
+    fusion::at_c<n>(composite)
+
+#define BOOST_PP_ITERATION_PARAMS_1                                             \
+    (3, (1, PHOENIX_COMPOSITE_LIMIT,                                            \
+    "boost/spirit/home/phoenix/core/detail/composite_eval.hpp"))
+#include BOOST_PP_ITERATE()
+
+#undef PHOENIX_GET_ACTOR
+#undef PHOENIX_GET_ACTOR_TYPE
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Preprocessor vertical repetition code
+//
+///////////////////////////////////////////////////////////////////////////////
+#else // defined(BOOST_PP_IS_ITERATING)
+
+#define N BOOST_PP_ITERATION()
+
+    namespace detail
+    {
+        template <>
+        struct composite_eval<N>
+        {
+            template <typename Composite, typename Env>
+            struct result
+            {
+                BOOST_PP_REPEAT(N, PHOENIX_GET_ACTOR_TYPE, _)
+
+                typedef typename
+                    Composite::eval_policy_type::template result<
+                        Env, BOOST_PP_ENUM_PARAMS(N, actor)
+                    >::type
+                type;
+            };
+
+            template <typename RT, typename Composite, typename Env>
+            static RT
+            call(Composite const& composite, Env const& env)
+            {
+                typedef typename Composite::eval_policy_type eval_policy_type;
+                return eval_policy_type::template eval<RT>(
+                    env, BOOST_PP_ENUM(N, PHOENIX_GET_ACTOR, _));
+            }
+        };
+    }
+
+#undef N
+#endif // defined(BOOST_PP_IS_ITERATING)
+
+
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/core/detail/function_eval.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/core/detail/function_eval.hpp
new file mode 100644
index 0000000..711b32c
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/core/detail/function_eval.hpp
@@ -0,0 +1,142 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_PP_IS_ITERATING)
+#if !defined(PHOENIX_CORE_DETAIL_FUNCTION_EVAL_HPP)
+#define PHOENIX_CORE_DETAIL_FUNCTION_EVAL_HPP
+
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/enum.hpp>
+#include <boost/preprocessor/repeat.hpp>
+#include <boost/preprocessor/dec.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/find.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+
+// we assume that mpl::vectorN, where N = PHOENIX_COMPOSITE_LIMIT
+// is included already.
+
+namespace boost { namespace phoenix { namespace detail
+{
+    template <int N>
+    struct function_eval;
+
+    template <>
+    struct function_eval<0>
+    {
+        template <typename Env, typename F>
+        struct result
+        {
+            typedef typename
+                remove_reference<
+                    typename F::template result<Env>::type 
+                >::type
+            fn;
+            typedef typename fn::result_type type;
+        };
+
+        template <typename RT, typename Env, typename F>
+        static RT
+        eval(Env const& env, F const& f)
+        {
+            return f.eval(env)();
+        }
+    };
+
+    template <typename T>
+    T& help_rvalue_deduction(T& x)
+    {
+        return x;
+    }
+
+    template <typename T>
+    T const& help_rvalue_deduction(T const& x)
+    {
+        return x;
+    }
+
+// When we call f(_0, _1...) we remove the reference when deducing f's
+// return type. $$$ Explain why $$$
+
+#define PHOENIX_GET_ARG(z, n, data)                                             \
+    typedef typename                                                            \
+        remove_reference<                                                       \
+            typename BOOST_PP_CAT(A, n)::template result<Env>::type             \
+        >::type                                                                 \
+    BOOST_PP_CAT(a, n);
+
+#define PHOENIX_EVAL_ARG(z, n, data)                                            \
+    help_rvalue_deduction(BOOST_PP_CAT(_, n).eval(env))
+
+#define BOOST_PP_ITERATION_PARAMS_1                                             \
+    (3, (1, BOOST_PP_DEC(PHOENIX_COMPOSITE_LIMIT),                              \
+    "boost/spirit/home/phoenix/core/detail/function_eval.hpp"))
+#include BOOST_PP_ITERATE()
+
+}}} // namespace boost::phoenix::detail
+
+#undef PHOENIX_GET_ARG
+#undef PHOENIX_EVAL_ARG
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Preprocessor vertical repetition code
+//
+///////////////////////////////////////////////////////////////////////////////
+#else // defined(BOOST_PP_IS_ITERATING)
+
+#define N BOOST_PP_ITERATION()
+
+    template <>
+    struct function_eval<N>
+    {
+        template <typename Env, typename F
+          , BOOST_PP_ENUM_PARAMS(N, typename A)>
+        struct result
+        {
+            typedef typename
+                remove_reference<
+                    typename F::template result<Env>::type 
+                >::type
+            fn;
+            BOOST_PP_REPEAT(N, PHOENIX_GET_ARG, _)
+
+            typedef BOOST_PP_CAT(mpl::vector, N)
+                <BOOST_PP_ENUM_PARAMS(N, a)>
+            args;
+
+            typedef typename
+                fn::template result<BOOST_PP_ENUM_PARAMS(N, a)>
+            function_apply;
+
+            typedef typename
+                mpl::eval_if<
+                    is_same<
+                        typename mpl::find<args, fusion::void_>::type
+                      , typename mpl::end<args>::type>
+                  , function_apply
+                  , mpl::identity<fusion::void_>
+                >::type
+            type;
+        };
+
+        template <typename RT, typename Env, typename F
+          , BOOST_PP_ENUM_PARAMS(N, typename A)>
+        static RT
+        eval(Env const& env, F const& f
+          , BOOST_PP_ENUM_BINARY_PARAMS(N, A, & _))
+        {
+            return f.eval(env)(BOOST_PP_ENUM(N, PHOENIX_EVAL_ARG, _));
+        }
+    };
+
+#undef N
+#endif // defined(BOOST_PP_IS_ITERATING)
+
+
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/core/is_actor.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/core/is_actor.hpp
new file mode 100644
index 0000000..ba0e77c
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/core/is_actor.hpp
@@ -0,0 +1,29 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_CORE_IS_ACTOR_HPP
+#define PHOENIX_CORE_IS_ACTOR_HPP
+
+#include <boost/spirit/home/phoenix/core/actor.hpp>
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace phoenix
+{
+///////////////////////////////////////////////////////////////////////////////
+//
+//  is_actor<T>
+//
+//      Tests if T is an actor. Evaluates to mpl::true_ or mpl::false_
+//
+///////////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct is_actor : mpl::false_ {};
+
+    template <typename Base>
+    struct is_actor<actor<Base> > : mpl::true_ {};
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/core/limits.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/core/limits.hpp
new file mode 100644
index 0000000..50c7573
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/core/limits.hpp
@@ -0,0 +1,79 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_CORE_LIMITS_HPP
+#define PHOENIX_CORE_LIMITS_HPP
+
+#include <boost/preprocessor/dec.hpp>
+
+#if !defined(PHOENIX_LIMIT)
+# define PHOENIX_LIMIT 10
+#elif (PHOENIX_LIMIT < 5)
+# error "PHOENIX_LIMIT is set too low"
+#endif
+
+#if !defined(PHOENIX_ARG_LIMIT)
+# define PHOENIX_ARG_LIMIT PHOENIX_LIMIT
+#elif (PHOENIX_ARG_LIMIT < 5)
+# error "PHOENIX_ARG_LIMIT is set too low"
+#endif
+
+#if !defined(PHOENIX_ACTOR_LIMIT)
+# define PHOENIX_ACTOR_LIMIT PHOENIX_LIMIT
+#elif (PHOENIX_ACTOR_LIMIT > PHOENIX_ARG_LIMIT)
+# error "PHOENIX_ACTOR_LIMIT > PHOENIX_ARG_LIMIT"
+#elif (PHOENIX_ACTOR_LIMIT < 3)
+# error "PHOENIX_ACTOR_LIMIT is set too low"
+#endif
+
+#if !defined(PHOENIX_COMPOSITE_LIMIT)
+# define PHOENIX_COMPOSITE_LIMIT PHOENIX_LIMIT
+#elif (PHOENIX_COMPOSITE_LIMIT < 5)
+# error "PHOENIX_COMPOSITE_LIMIT is set too low"
+#endif
+
+#if !defined(PHOENIX_MEMBER_LIMIT)
+# define PHOENIX_MEMBER_LIMIT BOOST_PP_DEC(BOOST_PP_DEC(PHOENIX_COMPOSITE_LIMIT))
+#elif (PHOENIX_MEMBER_LIMIT > PHOENIX_COMPOSITE_LIMIT)
+# error "PHOENIX_MEMBER_LIMIT > PHOENIX_COMPOSITE_LIMIT"
+#elif (PHOENIX_MEMBER_LIMIT < 3)
+# error "PHOENIX_MEMBER_LIMIT is set too low"
+#endif
+
+#if !defined(PHOENIX_CATCH_LIMIT)
+# define PHOENIX_CATCH_LIMIT BOOST_PP_DEC(PHOENIX_COMPOSITE_LIMIT)
+#elif (PHOENIX_CATCH_LIMIT < 1)
+# error "PHOENIX_CATCH_LIMIT is set too low"
+#endif
+
+#if !defined(PHOENIX_DYNAMIC_LIMIT)
+# define PHOENIX_DYNAMIC_LIMIT PHOENIX_LIMIT
+#elif (PHOENIX_DYNAMIC_LIMIT < 1)
+# error "PHOENIX_DYNAMIC_LIMIT is set too low"
+#endif
+
+#if !defined(PHOENIX_LOCAL_LIMIT)
+# define PHOENIX_LOCAL_LIMIT PHOENIX_LIMIT
+#elif (PHOENIX_LOCAL_LIMIT < 3)
+# error "PHOENIX_LOCAL_LIMIT is set too low"
+#endif
+
+
+#if !defined(FUSION_MAX_VECTOR_SIZE)
+# define FUSION_MAX_VECTOR_SIZE PHOENIX_LIMIT
+#elif (FUSION_MAX_VECTOR_SIZE < PHOENIX_LIMIT)
+# error "FUSION_MAX_VECTOR_SIZE < PHOENIX_LIMIT"
+#endif
+
+// this include will bring in mpl::vectorN and 
+// fusion::vectorN where N is PHOENIX_LIMIT
+#include <boost/fusion/include/vector.hpp>
+
+// for some reason, this must be included now to make
+// detail/type_deduction.hpp compile. $$$ TODO: Investigate further $$$
+#include <boost/mpl/vector/vector20.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/core/nothing.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/core/nothing.hpp
new file mode 100644
index 0000000..029fbbf
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/core/nothing.hpp
@@ -0,0 +1,42 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_CORE_NOTHING_HPP
+#define PHOENIX_CORE_NOTHING_HPP
+
+#include <boost/spirit/home/phoenix/core/actor.hpp>
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace phoenix
+{
+///////////////////////////////////////////////////////////////////////////////
+//
+//  null_actor
+//
+//      A actor that does nothing (a "bum", if you will :-).
+//
+///////////////////////////////////////////////////////////////////////////////
+    struct null_actor
+    {
+        typedef mpl::false_ no_nullary;
+
+        template <typename Env>
+        struct result
+        {
+            typedef void type;
+        };
+
+        template <typename Env>
+        void
+        eval(Env const&) const
+        {
+        }
+    };
+
+    actor<null_actor> const nothing = null_actor();
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/core/reference.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/core/reference.hpp
new file mode 100644
index 0000000..2e1f588
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/core/reference.hpp
@@ -0,0 +1,80 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_CORE_REFERENCE_HPP
+#define PHOENIX_CORE_REFERENCE_HPP
+
+#include <boost/spirit/home/phoenix/core/actor.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_reference.hpp>
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace phoenix
+{
+    template <typename T>
+    struct reference
+    {
+        // $$$ TODO: a better (user friendly) static assert
+        BOOST_STATIC_ASSERT(
+            mpl::not_<is_reference<T> >::value != 0);
+
+        typedef mpl::false_ no_nullary;
+
+        template <typename Env>
+        struct result
+        {
+            typedef T& type;
+        };
+
+        reference(T& arg)
+            : ref(arg) {}
+
+        template <typename Env>
+        T& eval(Env const&) const
+        {
+            return ref;
+        }
+
+        T& ref;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        reference& operator= (reference const&);
+    };
+
+    template <typename T>
+    inline actor<reference<T> > const
+    ref(T& v)
+    {
+        return reference<T>(v);
+    }
+
+    template <typename T>
+    inline actor<reference<T const> > const
+    cref(T const& v)
+    {
+        return reference<T const>(v);
+    }
+
+    namespace detail
+    {
+        struct error_attempting_to_convert_an_actor_to_a_reference {};
+    }
+
+    template <typename Base>
+    void
+    ref(actor<Base> const& v
+        , detail::error_attempting_to_convert_an_actor_to_a_reference
+            = detail::error_attempting_to_convert_an_actor_to_a_reference());
+
+    template <typename Base>
+    void
+    cref(actor<Base> const& v
+        , detail::error_attempting_to_convert_an_actor_to_a_reference
+            = detail::error_attempting_to_convert_an_actor_to_a_reference());
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/core/value.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/core/value.hpp
new file mode 100644
index 0000000..d7030b4
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/core/value.hpp
@@ -0,0 +1,155 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_CORE_VALUE_HPP
+#define PHOENIX_CORE_VALUE_HPP
+
+#include <boost/spirit/home/phoenix/core/actor.hpp>
+#include <boost/spirit/home/phoenix/core/as_actor.hpp>
+#include <boost/static_assert.hpp>
+
+#include <boost/type_traits/is_reference.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/type_traits/add_const.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/type_traits/remove_pointer.hpp>
+#include <boost/type_traits/is_function.hpp>
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+
+namespace boost { namespace phoenix
+{
+    namespace meta
+    {
+        template<typename T>
+        struct const_ref
+            : add_reference<typename add_const<T>::type>
+        {};
+
+        template<typename T>
+        struct argument_type
+            : mpl::eval_if<
+            is_function<typename remove_pointer<T>::type>,
+            mpl::identity<T>,
+            const_ref<T> >
+        {
+            typedef T type;
+        };
+    }
+
+    template <typename T>
+    struct value 
+    {
+        BOOST_STATIC_ASSERT(
+            mpl::not_<is_reference<T> >::value != 0);
+
+        typedef mpl::false_ no_nullary;
+
+        template <typename Env>
+        struct result
+        {
+            typedef T type;
+        };
+
+        value(T const& arg)
+            : val(arg) {}
+
+        template <typename Env>
+        T const&
+        eval(Env const&) const
+        {
+            return val;
+        }
+
+        T val;
+    };
+
+    template <typename Actor>
+    struct actor_value 
+    {
+        typedef typename Actor::no_nullary no_nullary;
+
+        template <typename Env>
+        struct result
+        {
+            typedef typename 
+                remove_reference<
+                    typename eval_result<Actor, Env>::type
+                >::type
+            type;
+        };
+
+        actor_value(Actor const& actor)
+            : actor(actor) {}
+
+        template <typename Env>
+        typename result<Env>::type
+        eval(Env const& env) const
+        {
+            return actor.eval(env);
+        }
+
+        Actor actor;
+    };
+
+    template <typename T>
+    inline typename as_actor<T>::type
+    val(T const& v)
+    {
+        return as_actor<T>::convert(v);
+    }
+
+    template <typename Derived>
+    inline actor<actor_value<Derived> >
+    val(actor<Derived> const& actor)
+    {
+        return actor_value<Derived>(actor);
+    }
+
+    template <typename T>
+    struct as_actor_base
+    {
+        typedef value<T> type;
+
+        static value<T>
+        convert(typename meta::argument_type<T>::type x)
+        {
+            return value<T>(x);
+        }
+    };
+
+    // Sometimes it is necessary to auto-convert references to 
+    // a value<T>. This happens when we are re-currying. This
+    // cannot happen through the standard public actor interfaces.
+    template <typename T>
+    struct as_actor_base<T&>
+    {
+        typedef value<T> type;
+
+        static value<T>
+        convert(T& x)
+        {
+            return value<T>(x);
+        }
+    };
+
+    template <typename T, int N>
+    struct as_actor_base<T[N]>
+    {
+        typedef value<T const*> type;
+
+        static value<T const*>
+        convert(T const x[N])
+        {
+            return value<T const*>(x);
+        }
+    };
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/detail/local_reference.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/detail/local_reference.hpp
new file mode 100644
index 0000000..ad1fdb4
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/detail/local_reference.hpp
@@ -0,0 +1,44 @@
+/*=============================================================================
+    Copyright (c) 2005-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_DETAIL_LOCAL_REFERENCE_HPP
+#define PHOENIX_DETAIL_LOCAL_REFERENCE_HPP
+
+#include <boost/utility/addressof.hpp>
+
+namespace boost { namespace phoenix { namespace detail
+{
+    template <typename T>
+    struct local_reference
+    { 
+        typedef T type;
+    
+        explicit local_reference(T& t): t_(boost::addressof(t)) {}
+        operator T& () const { return *t_; }
+        local_reference& operator=(T const& x) { *t_ = x; return *this; }
+        local_reference const& operator=(T const& x) const { *t_ = x; return *this; }
+        T& get() const { return *t_; }
+        T* get_pointer() const { return t_; }
+    
+    private:
+    
+        T* t_;
+    };
+    
+    template <typename T>
+    struct unwrap_local_reference
+    {
+        typedef T type; // T should be a reference
+    };
+
+    template <typename T>
+    struct unwrap_local_reference<local_reference<T> >
+    {
+        typedef T type; // unwrap the reference; T is a value
+    };
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/detail/type_deduction.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/detail/type_deduction.hpp
new file mode 100644
index 0000000..b99ea1e
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/detail/type_deduction.hpp
@@ -0,0 +1,497 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_DETAIL_TYPE_DEDUCTION_HPP
+#define PHOENIX_DETAIL_TYPE_DEDUCTION_HPP
+
+/*=============================================================================
+
+    Return Type Deduction
+    [JDG Sept. 15, 2003]
+
+    Before C++ adopts the typeof, there is currently no way to deduce the
+    result type of an expression such as x + y. This deficiency is a major
+    problem with template metaprogramming; for example, when writing
+    forwarding functions that attempt to capture the essence of an
+    expression inside a function. Consider the std::plus<T>:
+
+        template <typename T>
+        struct plus : public binary_function<T, T, T>
+        {
+            T operator()(T const& x, T const& y) const
+            {
+                return x + y;
+            }
+        };
+
+    What's wrong with this? Well, this functor does not accurately capture
+    the behavior of the plus operator. 1) It does not handle the case where
+    x and y are of different types (e.g. x is short and y is int). 2) It
+    assumes that the arguments and return type are the same (i.e. when
+    adding a short and an int, the return type ought to be an int). Due to
+    these shortcomings, std::plus<T>(x, y) is a poor substitute for x + y.
+
+    The case where x is short and y is int does not really expose the
+    problem. We can simply use std::plus<int> and be happy that the
+    operands x and y will simply be converted to an int. The problem
+    becomes evident when an operand is a user defined type such as bigint.
+    Here, the conversion to bigint is simply not acceptable. Even if the
+    unnecessary conversion is tolerable, in generic code, it is not always
+    possible to choose the right T type that can accomodate both x and y
+    operands.
+
+    To truly model the plus operator, what we need is a polymorphic functor
+    that can take arbitrary x and y operands. Here's a rough schematic:
+
+        struct plus
+        {
+            template <typename X, typename Y>
+            unspecified-type
+            operator()(X const& x, Y const& y) const
+            {
+                return x + y;
+            }
+        };
+
+    Now, we can handle the case where X and Y are arbitrary types. We've
+    solved the first problem. To solve the second problem, we need some
+    form of return type deduction mechanism. If we had the typeof, it would
+    be something like:
+
+        template <typename X, typename Y>
+        typeof(X() + Y())
+        operator()(X const& x, Y const& y) const
+        {
+            return x + y;
+        }
+
+    Without the typeof facility, it is only possible to wrap an expression
+    such as x + y in a function or functor if we are given a hint that
+    tells us what the actual result type of such an expression is. Such a
+    hint can be in the form of a metaprogram, that, given the types of the
+    arguments, will return the result type. Example:
+
+        template <typename X, typename Y>
+        struct result_of_plus
+        {
+            typedef unspecified-type type;
+        };
+
+    Given a result_of_plus metaprogram, we can complete our polymorphic
+    plus functor:
+
+        struct plus
+        {
+            template <typename X, typename Y>
+            typename result_of_plus<X, Y>::type
+            operator()(X const& x, Y const& y) const
+            {
+                return x + y;
+            }
+        };
+
+    The process is not automatic. We have to specialize the metaprogram for
+    specific argument types. Examples:
+
+        template <>
+        struct result_of_plus<short, int>
+        {
+            typedef int type;
+        };
+
+        template <typename T>
+        struct result_of_plus<std::complex<T>, std::complex<T> >
+        {
+            typedef std::complex<T> type;
+        };
+
+    To make it easier for the user, specializations are provided for common
+    types such as primitive c++ types (e.g. int, char, double, etc.), and
+    standard types (e.g. std::complex, iostream, std containers and
+    iterators).
+
+    To further improve the ease of use, for user defined classes, we can
+    supply a few more basic specializations through metaprogramming using
+    heuristics based on canonical operator rules (Such heuristics can be
+    found in the LL and Phoenix, for example). For example, it is rather
+    common that the result of x += y is X& or the result of x || y is a
+    bool. The client is out of luck if her classes do not follow the
+    canonical rules. She'll then have to supply her own specialization.
+
+    The type deduction mechanism demostrated below approaches the problem
+    not through specialization and heuristics, but through a limited form
+    of typeof mechanism. The code does not use heuristics, hence, no
+    guessing games. The code takes advantage of the fact that, in general,
+    the result type of an expression is related to one its arguments' type.
+    For example, x + y, where x has type int and y has type double, has the
+    result type double (the second operand type). Another example, x[y]
+    where x is a vector<T> and y is a std::size_t, has the result type
+    vector<T>::reference (the vector<T>'s reference type type).
+
+    The limited form of type deduction presented can detect common
+    relations if the result of a binary or unary operation, given arguments
+    x and y with types X and Y (respectively), is X, Y, X&, Y&, X*, Y*, X
+    const*, Y const*, bool, int, unsigned, double, container and iterator
+    elements (e.g the T, where X is: T[N], T*, vector<T>, map<T>,
+    vector<T>::iterator). More arguments/return type relationships can be
+    established if needed.
+
+    A set of overloaded test(T) functions capture these argument related
+    types. Each test(T) function returns a distinct type that can be used
+    to determine the exact type of an expression.
+
+    Consider:
+
+        template <typename X, typename Y>
+        x_value_type
+        test(X const&);
+
+        template <typename X, typename Y>
+        y_value_type
+        test(Y const&);
+
+    Given an expression x + y, where x is int and y is double, the call to:
+
+        test<int, double>(x + y)
+
+    will return a y_value_type.
+
+    Now, if we rig x_value_type and y_value_type such that both have unique
+    sizes, we can use sizeof(test<X, Y>(x + y)) to determine if the result
+    type is either X or Y.
+
+    For example, if:
+
+        sizeof(test<X, Y>(x + y)) == sizeof(y_value_type)
+
+    then, we know for sure that the result of x + y has type Y.
+
+    The same basic scheme can be used to detect more argument-dependent
+    return types where the sizeof the test(T) return type is used to index
+    through a boost::mpl vector which holds each of the corresponding
+    result types.
+
+==============================================================================*/
+#include <boost/mpl/vector/vector20.hpp>
+#include <boost/mpl/at.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/is_reference.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/is_array.hpp>
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/spirit/home/phoenix/detail/local_reference.hpp>
+
+namespace boost
+{
+    struct error_cant_deduce_type {};
+}
+
+namespace boost { namespace type_deduction_detail
+{
+    typedef char(&bool_value_type)[1];
+    typedef char(&int_value_type)[2];
+    typedef char(&uint_value_type)[3];
+    typedef char(&double_value_type)[4];
+
+    typedef char(&bool_reference_type)[5];
+    typedef char(&int_reference_type)[6];
+    typedef char(&uint_reference_type)[7];
+    typedef char(&double_reference_type)[8];
+
+    typedef char(&x_value_type)[9];
+    typedef char(&x_reference_type)[10];
+    typedef char(&x_const_pointer_type)[11];
+    typedef char(&x_pointer_type)[12];
+
+    typedef char(&y_value_type)[13];
+    typedef char(&y_reference_type)[14];
+    typedef char(&y_const_pointer_type)[15];
+    typedef char(&y_pointer_type)[16];
+
+    typedef char(&container_reference_type)[17];
+    typedef char(&container_const_reference_type)[18];
+    typedef char(&container_mapped_type)[19];
+
+    typedef char(&cant_deduce_type)[20];
+
+    template <typename T, typename Plain = typename remove_cv<T>::type>
+    struct is_basic
+        : mpl::or_<
+            is_same<Plain, bool>
+          , is_same<Plain, int>
+          , is_same<Plain, unsigned>
+          , is_same<Plain, double>
+        > {};
+
+    template <typename C>
+    struct reference_type
+    {
+        typedef typename C::reference type;
+    };
+
+    template <typename T>
+    struct reference_type<T const>
+        : reference_type<T> {};
+
+    template <typename T, std::size_t N>
+    struct reference_type<T[N]>
+    {
+        typedef T& type;
+    };
+
+    template <typename T>
+    struct reference_type<T*>
+    {
+        typedef T& type;
+    };
+
+    template <typename T>
+    struct reference_type<T* const>
+    {
+        typedef T const& type;
+    };
+
+    template <typename C>
+    struct const_reference_type
+    {
+        typedef typename C::const_reference type;
+    };
+
+    template <typename C>
+    struct mapped_type
+    {
+        typedef typename C::mapped_type type;
+    };
+
+    struct asymmetric;
+
+    template <typename X, typename Y>
+    cant_deduce_type
+    test(...); // The black hole !!!
+
+    template <typename X, typename Y>
+    bool_value_type
+    test(bool const&);
+
+    template <typename X, typename Y>
+    int_value_type
+    test(int const&);
+
+    template <typename X, typename Y>
+    uint_value_type
+    test(unsigned const&);
+
+    template <typename X, typename Y>
+    double_value_type
+    test(double const&);
+
+    template <typename X, typename Y>
+    bool_reference_type
+    test(bool&);
+
+    template <typename X, typename Y>
+    int_reference_type
+    test(int&);
+
+    template <typename X, typename Y>
+    uint_reference_type
+    test(unsigned&);
+
+    template <typename X, typename Y>
+    double_reference_type
+    test(double&);
+
+    template <typename X, typename Y>
+    typename disable_if<
+        mpl::or_<is_basic<X>, is_const<X> >
+      , x_value_type
+    >::type
+    test(X const&);
+
+    template <typename X, typename Y>
+    typename disable_if<
+        is_basic<X>
+      , x_reference_type
+    >::type
+    test(X&);
+
+    template <typename X, typename Y>
+    typename disable_if<
+        mpl::or_<
+            is_basic<X>
+          , is_const<X>
+        >
+      , x_const_pointer_type
+    >::type
+    test(X const*);
+
+    template <typename X, typename Y>
+    x_pointer_type
+    test(X*);
+
+    template <typename X, typename Y>
+    typename disable_if<
+        mpl::or_<
+            is_basic<Y>
+          , is_same<Y, asymmetric>
+          , is_const<Y>
+          , is_same<X, Y>
+        >
+      , y_value_type
+    >::type
+    test(Y const&);
+
+    template <typename X, typename Y>
+    typename disable_if<
+        mpl::or_<
+            is_basic<Y>
+          , is_same<Y, asymmetric>
+          , is_same<X, Y>
+        >
+      , y_reference_type
+    >::type
+    test(Y&);
+
+    template <typename X, typename Y>
+    typename disable_if<
+        mpl::or_<
+            is_same<Y, asymmetric>
+          , is_const<Y>
+          , is_same<X, Y>
+        >
+      , y_const_pointer_type
+    >::type
+    test(Y const*);
+
+    template <typename X, typename Y>
+    typename disable_if<
+        mpl::or_<
+            is_same<Y, asymmetric>
+          , is_same<X, Y>
+        >
+      , y_pointer_type
+    >::type
+    test(Y*);
+
+    template <typename X, typename Y>
+    typename disable_if<
+        mpl::or_<
+            is_basic<typename X::value_type>
+          , is_same<typename add_reference<X>::type, typename X::reference>
+        >
+      , container_reference_type
+    >::type
+    test(typename X::reference);
+
+    template <typename X, typename Y, typename Z>
+    typename enable_if<
+        mpl::and_<
+            mpl::or_<is_array<X>, is_pointer<X> >
+          , mpl::not_<is_basic<Z> >
+          , mpl::not_<is_same<X, Z> >
+        >
+      , container_reference_type
+    >::type
+    test(Z&);
+
+    template <typename X, typename Y>
+    typename disable_if<
+        mpl::or_<
+            is_basic<typename X::value_type>
+          , is_same<typename add_reference<X>::type, typename X::const_reference>
+        >
+      , container_const_reference_type
+    >::type
+    test(typename X::const_reference);
+
+    template <typename X, typename Y>
+    typename disable_if<
+        is_basic<typename X::mapped_type>
+      , container_mapped_type
+    >::type
+    test(typename X::mapped_type);
+
+    template <typename X, typename Y>
+    struct base_result_of
+    {
+        typedef typename phoenix::detail::unwrap_local_reference<X>::type x_type_;
+        typedef typename phoenix::detail::unwrap_local_reference<Y>::type y_type_;
+        typedef typename remove_reference<x_type_>::type x_type;
+        typedef typename remove_reference<y_type_>::type y_type;
+
+        typedef mpl::vector20<
+            mpl::identity<bool>
+          , mpl::identity<int>
+          , mpl::identity<unsigned>
+          , mpl::identity<double>
+          , mpl::identity<bool&>
+          , mpl::identity<int&>
+          , mpl::identity<unsigned&>
+          , mpl::identity<double&>
+          , mpl::identity<x_type>
+          , mpl::identity<x_type&>
+          , mpl::identity<x_type const*>
+          , mpl::identity<x_type*>
+          , mpl::identity<y_type>
+          , mpl::identity<y_type&>
+          , mpl::identity<y_type const*>
+          , mpl::identity<y_type*>
+          , reference_type<x_type>
+          , const_reference_type<x_type>
+          , mapped_type<x_type>
+          , mpl::identity<error_cant_deduce_type>
+        >
+        types;
+    };
+
+}} // namespace boost::type_deduction_detail
+
+#define BOOST_RESULT_OF_COMMON(expr, name, Y, SYMMETRY)                         \
+    struct name                                                                 \
+    {                                                                           \
+        typedef type_deduction_detail::base_result_of<X, Y> base_type;          \
+        static typename base_type::x_type x;                                    \
+        static typename base_type::y_type y;                                    \
+                                                                                \
+        BOOST_STATIC_CONSTANT(int,                                              \
+            size = sizeof(                                                      \
+                type_deduction_detail::test<                                    \
+                    typename base_type::x_type                                  \
+                  , SYMMETRY                                                    \
+                >(expr)                                                         \
+            ));                                                                 \
+                                                                                \
+        BOOST_STATIC_CONSTANT(int, index = (size / sizeof(char)) - 1);          \
+                                                                                \
+        typedef typename mpl::at_c<                                             \
+            typename base_type::types, index>::type id;                         \
+        typedef typename id::type type;                                         \
+    };
+
+#define BOOST_UNARY_RESULT_OF(expr, name)                                       \
+    template <typename X>                                                       \
+    BOOST_RESULT_OF_COMMON(expr, name,                                          \
+        type_deduction_detail::asymmetric, type_deduction_detail::asymmetric)
+
+#define BOOST_BINARY_RESULT_OF(expr, name)                                      \
+    template <typename X, typename Y>                                           \
+    BOOST_RESULT_OF_COMMON(expr, name, Y, typename base_type::y_type)
+
+#define BOOST_ASYMMETRIC_BINARY_RESULT_OF(expr, name)                           \
+    template <typename X, typename Y>                                           \
+    BOOST_RESULT_OF_COMMON(expr, name, Y, type_deduction_detail::asymmetric)
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/function.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/function.hpp
new file mode 100644
index 0000000..5309d9a
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/function.hpp
@@ -0,0 +1,13 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_FUNCTION_HPP
+#define PHOENIX_FUNCTION_HPP
+
+#include <boost/spirit/home/phoenix/version.hpp>
+#include <boost/spirit/home/phoenix/function/function.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/function/detail/function_call.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/function/detail/function_call.hpp
new file mode 100644
index 0000000..622f118
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/function/detail/function_call.hpp
@@ -0,0 +1,42 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef BOOST_PP_IS_ITERATING
+#ifndef PHOENIX_FUNCTION_DETAIL_FUNCTION_CALL_HPP
+#define PHOENIX_FUNCTION_DETAIL_FUNCTION_CALL_HPP
+
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+
+#define BOOST_PP_ITERATION_PARAMS_1                                             \
+    (3, (3, BOOST_PP_DEC(PHOENIX_COMPOSITE_LIMIT),                              \
+    "boost/spirit/home/phoenix/function/detail/function_call.hpp"))
+#include BOOST_PP_ITERATE()
+
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Preprocessor vertical repetition code
+//
+///////////////////////////////////////////////////////////////////////////////
+#else // defined(BOOST_PP_IS_ITERATING)
+
+#define N BOOST_PP_ITERATION()
+
+    template <BOOST_PP_ENUM_PARAMS(N, typename A)>
+    actor<typename as_composite<detail::function_eval<N>, F
+      , BOOST_PP_ENUM_PARAMS(N, A)>::type>
+    operator()(BOOST_PP_ENUM_BINARY_PARAMS(N, A, const& _)) const
+    {
+        return compose<detail::function_eval<N> >(f, BOOST_PP_ENUM_PARAMS(N, _));
+    }
+
+#undef N
+#endif // defined(BOOST_PP_IS_ITERATING)
+
+
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/function/function.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/function/function.hpp
new file mode 100644
index 0000000..1cf4701
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/function/function.hpp
@@ -0,0 +1,48 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_FUNCTION_FUNCTION_HPP
+#define PHOENIX_FUNCTION_FUNCTION_HPP
+
+#include <boost/spirit/home/phoenix/core/compose.hpp>
+#include <boost/spirit/home/phoenix/core/detail/function_eval.hpp>
+
+namespace boost { namespace phoenix
+{
+    template <typename F>
+    struct function
+    {
+        function() : f() {}
+        function(F const& f) : f(f) {}
+
+        actor<typename as_composite<detail::function_eval<0>, F>::type>
+        operator()() const
+        {
+            return compose<detail::function_eval<0> >(f);
+        }
+
+        template <typename A0>
+        actor<typename as_composite<detail::function_eval<1>, F, A0>::type>
+        operator()(A0 const& _0) const
+        {
+            return compose<detail::function_eval<1> >(f, _0);
+        }
+
+        template <typename A0, typename A1>
+        actor<typename as_composite<detail::function_eval<2>, F, A0, A1>::type>
+        operator()(A0 const& _0, A1 const& _1) const
+        {
+            return compose<detail::function_eval<2> >(f, _0, _1);
+        }
+
+        //  Bring in the rest of the function call operators
+        #include <boost/spirit/home/phoenix/function/detail/function_call.hpp>
+
+        F f;
+    };
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/operator/detail/binary_compose.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/operator/detail/binary_compose.hpp
new file mode 100644
index 0000000..49335fd
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/operator/detail/binary_compose.hpp
@@ -0,0 +1,32 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_OPERATOR_DETAIL_BINARY_COMPOSE_HPP
+#define PHOENIX_OPERATOR_DETAIL_BINARY_COMPOSE_HPP
+
+#define PHOENIX_BINARY_COMPOSE(eval_name, op)                                   \
+    template <typename T0, typename T1>                                         \
+    inline actor<typename as_composite<eval_name, actor<T0>, actor<T1> >::type> \
+    operator op (actor<T0> const& a0, actor<T1> const& a1)                      \
+    {                                                                           \
+        return compose<eval_name>(a0, a1);                                      \
+    }                                                                           \
+                                                                                \
+    template <typename T0, typename T1>                                         \
+    inline actor<typename as_composite<eval_name, actor<T0>, T1>::type>         \
+    operator op (actor<T0> const& a0, T1 const& a1)                             \
+    {                                                                           \
+        return compose<eval_name>(a0, a1);                                      \
+    }                                                                           \
+                                                                                \
+    template <typename T0, typename T1>                                         \
+    inline actor<typename as_composite<eval_name, T0, actor<T1> >::type>        \
+    operator op (T0 const& a0, actor<T1> const& a1)                             \
+    {                                                                           \
+        return compose<eval_name>(a0, a1);                                      \
+    }
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/operator/detail/binary_eval.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/operator/detail/binary_eval.hpp
new file mode 100644
index 0000000..1789882
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/operator/detail/binary_eval.hpp
@@ -0,0 +1,44 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_OPERATOR_DETAIL_BINARY_EVAL_HPP
+#define PHOENIX_OPERATOR_DETAIL_BINARY_EVAL_HPP
+
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/spirit/home/phoenix/core/compose.hpp>
+
+#define PHOENIX_BINARY_EVAL(eval_name, op_result, expr)                         \
+    struct eval_name                                                            \
+    {                                                                           \
+        template <typename Env, typename A0, typename A1>                       \
+        struct result                                                            \
+        {                                                                       \
+            typedef typename A0::template result<Env>::type x_type;              \
+            typedef typename A1::template result<Env>::type y_type;              \
+                                                                                \
+            typedef typename                                                    \
+                mpl::eval_if<                                                   \
+                    mpl::or_<is_actor<x_type>, is_actor<y_type> >               \
+                  , re_curry<eval_name, x_type, y_type>                         \
+                  , op_result<x_type, y_type>                                   \
+                >::type                                                         \
+            type;                                                               \
+        };                                                                      \
+                                                                                \
+        template <typename RT, typename Env, typename A0, typename A1>          \
+        static RT                                                               \
+        eval(Env const& env, A0& a0, A1& a1)                                    \
+        {                                                                       \
+            return expr;                                                        \
+        }                                                                       \
+    };
+
+#undef x
+#undef y
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/operator/detail/unary_compose.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/operator/detail/unary_compose.hpp
new file mode 100644
index 0000000..fd9a8c7
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/operator/detail/unary_compose.hpp
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_OPERATOR_DETAIL_UNARY_COMPOSE_HPP
+#define PHOENIX_OPERATOR_DETAIL_UNARY_COMPOSE_HPP
+
+#define PHOENIX_UNARY_COMPOSE(eval_name, op)                                    \
+    template <typename T0>                                                      \
+    inline actor<typename as_composite<eval_name, actor<T0> >::type>            \
+    operator op (actor<T0> const& a0)                                           \
+    {                                                                           \
+        return compose<eval_name>(a0);                                          \
+    }
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/operator/detail/unary_eval.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/operator/detail/unary_eval.hpp
new file mode 100644
index 0000000..501f6df
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/operator/detail/unary_eval.hpp
@@ -0,0 +1,40 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_OPERATOR_DETAIL_UNARY_EVAL_HPP
+#define PHOENIX_OPERATOR_DETAIL_UNARY_EVAL_HPP
+
+#include <boost/mpl/eval_if.hpp>
+#include <boost/spirit/home/phoenix/core/compose.hpp>
+
+#define PHOENIX_UNARY_EVAL(eval_name, op_result, expr)                          \
+    struct eval_name                                                            \
+    {                                                                           \
+        template <typename Env, typename A0>                                    \
+        struct result                                                            \
+        {                                                                       \
+            typedef typename A0::template result<Env>::type x_type;              \
+                                                                                \
+            typedef typename                                                    \
+                mpl::eval_if<                                                   \
+                    is_actor<x_type>                                            \
+                  , re_curry<eval_name, x_type>                                 \
+                  , op_result<x_type>                                           \
+                >::type                                                         \
+            type;                                                               \
+        };                                                                      \
+                                                                                \
+        template <typename RT, typename Env, typename A0>                       \
+        static RT                                                               \
+        eval(Env const& env, A0& a0)                                            \
+        {                                                                       \
+            return expr;                                                        \
+        }                                                                       \
+    };
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/operator/self.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/operator/self.hpp
new file mode 100644
index 0000000..294adf6
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/operator/self.hpp
@@ -0,0 +1,75 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_OPERATOR_SELF_HPP
+#define PHOENIX_OPERATOR_SELF_HPP
+
+#include <boost/spirit/home/phoenix/core/composite.hpp>
+#include <boost/spirit/home/phoenix/core/compose.hpp>
+#include <boost/spirit/home/phoenix/detail/type_deduction.hpp>
+#include <boost/spirit/home/phoenix/operator/detail/unary_eval.hpp>
+#include <boost/spirit/home/phoenix/operator/detail/unary_compose.hpp>
+#include <boost/spirit/home/phoenix/operator/detail/binary_eval.hpp>
+#include <boost/spirit/home/phoenix/operator/detail/binary_compose.hpp>
+
+namespace boost { namespace phoenix
+{
+    struct reference_eval;
+    struct dereference_eval;
+    struct assign_eval;
+    struct index_eval;
+
+    BOOST_UNARY_RESULT_OF(&x, result_of_reference)
+    BOOST_UNARY_RESULT_OF(*x, result_of_dereference)
+    BOOST_BINARY_RESULT_OF(x = y, result_of_assign)
+    BOOST_ASYMMETRIC_BINARY_RESULT_OF(x[y], result_of_index)
+
+    namespace detail
+    {
+        template <typename T0, typename T1>
+        struct make_assign_composite
+        {
+            typedef actor<typename as_composite<assign_eval, T0, T1>::type> type;
+        };
+
+        template <typename T0, typename T1>
+        struct make_index_composite
+        {
+            typedef actor<typename as_composite<index_eval, T0, T1>::type> type;
+        };
+    }
+
+    template <typename Base>
+    template <typename T1>
+    typename detail::make_assign_composite<actor<Base>, T1>::type
+    actor<Base>::operator=(T1 const& a1) const
+    {
+        return compose<assign_eval>(*this, a1);
+    }
+
+    template <typename Base>
+    template <typename T1>
+    typename detail::make_index_composite<actor<Base>, T1>::type
+    actor<Base>::operator[](T1 const& a1) const
+    {
+        return compose<index_eval>(*this, a1);
+    }
+
+#define x a0.eval(env)
+#define y a1.eval(env)
+
+    PHOENIX_UNARY_EVAL(reference_eval, result_of_reference, &x)
+    PHOENIX_UNARY_EVAL(dereference_eval, result_of_dereference, *x)
+    PHOENIX_UNARY_COMPOSE(reference_eval, &)
+    PHOENIX_UNARY_COMPOSE(dereference_eval, *)
+
+    PHOENIX_BINARY_EVAL(assign_eval, result_of_assign, x = y)
+    PHOENIX_BINARY_EVAL(index_eval, result_of_index, x[y])
+}}
+
+#undef x
+#undef y
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/scope.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/scope.hpp
new file mode 100644
index 0000000..c1b9ae3
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/scope.hpp
@@ -0,0 +1,16 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_SCOPE_HPP
+#define PHOENIX_SCOPE_HPP
+
+#include <boost/spirit/home/phoenix/version.hpp>
+#include <boost/spirit/home/phoenix/scope/scoped_environment.hpp>
+#include <boost/spirit/home/phoenix/scope/lambda.hpp>
+#include <boost/spirit/home/phoenix/scope/let.hpp>
+#include <boost/spirit/home/phoenix/scope/local_variable.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/scope/detail/local_gen.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/scope/detail/local_gen.hpp
new file mode 100644
index 0000000..6a74df6
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/scope/detail/local_gen.hpp
@@ -0,0 +1,57 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef BOOST_PP_IS_ITERATING
+// Allow multiple inclusion. let.hpp and lambda.hpp will have the guards
+
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/repetition/enum.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+
+#define PHOENIX_LOCAL_GEN_PARAM(z, n, data)                                     \
+    actor<composite<assign_eval                                                 \
+  , fusion::vector<local_variable<K##n>, V##n> > > const& a##n
+
+#define PHOENIX_LOCAL_GEN_ACTOR(z, n, data)                                     \
+    fusion::at_c<1>(a##n)
+
+#define BOOST_PP_ITERATION_PARAMS_1                                             \
+    (3, (3, PHOENIX_LOCAL_LIMIT,                                                \
+    "boost/spirit/home/phoenix/scope/detail/local_gen.hpp"))
+#include BOOST_PP_ITERATE()
+
+#undef PHOENIX_LOCAL_GEN_PARAM
+#undef PHOENIX_LOCAL_GEN_ACTOR
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Preprocessor vertical repetition code
+//
+///////////////////////////////////////////////////////////////////////////////
+#else // defined(BOOST_PP_IS_ITERATING)
+
+#define N BOOST_PP_ITERATION()
+
+    template <
+        BOOST_PP_ENUM_PARAMS(N, typename K)
+      , BOOST_PP_ENUM_PARAMS(N, typename V)
+    >
+    PHOENIX_LOCAL_GEN_NAME<
+        fusion::vector<BOOST_PP_ENUM_PARAMS(N, V)>
+      , detail::map_local_index_to_tuple<BOOST_PP_ENUM_PARAMS(N, K)>
+    >
+    operator()(
+        BOOST_PP_ENUM(N, PHOENIX_LOCAL_GEN_PARAM, _)
+    ) const
+    {
+        return fusion::vector<BOOST_PP_ENUM_PARAMS(N, V)>(
+            BOOST_PP_ENUM(N, PHOENIX_LOCAL_GEN_ACTOR, _));
+    }
+
+#undef N
+#endif // defined(BOOST_PP_IS_ITERATING)
+
+
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/scope/detail/local_variable.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/scope/detail/local_variable.hpp
new file mode 100644
index 0000000..1ad7932
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/scope/detail/local_variable.hpp
@@ -0,0 +1,198 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+    Copyright (c) 2004 Daniel Wallin
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_SCOPE_DETAIL_LOCAL_VARIABLE_HPP
+#define PHOENIX_SCOPE_DETAIL_LOCAL_VARIABLE_HPP
+
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/equal_to.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/less.hpp>
+#include <boost/mpl/size.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/fusion/include/value_at.hpp>
+#include <boost/preprocessor/enum.hpp>
+#include <boost/preprocessor/repeat.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/is_reference.hpp>
+
+#define PHOENIX_MAP_LOCAL_TEMPLATE_PARAM(z, n, data) \
+    typename T##n = unused<n>
+
+#define PHOENIX_MAP_LOCAL_DISPATCH(z, n, data)  \
+    typedef char(&result##n)[n+2];              \
+    static result##n get(T##n*);
+
+namespace boost { namespace phoenix
+{
+    template <typename Env, typename OuterEnv, typename Locals, typename Map>
+    struct scoped_environment;
+
+    namespace detail
+    {
+        template <typename Env>
+        struct initialize_local
+        {
+            template <class F>
+            struct result;
+
+            template <class F, class Actor>
+            struct result<F(Actor)>
+            {
+                typedef typename remove_reference<Actor>::type actor_type;
+                typedef typename actor_type::template result<Env>::type type;
+            };
+
+            initialize_local(Env const& env)
+                : env(env) {}
+
+            template <typename Actor>
+            typename result<initialize_local(Actor)>::type
+            operator()(Actor const& actor) const
+            {
+                return actor.eval(env);
+            }
+
+            Env const& env;
+
+        private:
+            // silence MSVC warning C4512: assignment operator could not be generated
+            initialize_local& operator= (initialize_local const&);
+        };
+
+        template <typename T>
+        struct is_scoped_environment : mpl::false_ {};
+
+        template <typename Env, typename OuterEnv, typename Locals, typename Map>
+        struct is_scoped_environment<scoped_environment<Env, OuterEnv, Locals, Map> >
+            : mpl::true_ {};
+
+        template <int N>
+        struct unused;
+
+        template <BOOST_PP_ENUM(
+            PHOENIX_LOCAL_LIMIT, PHOENIX_MAP_LOCAL_TEMPLATE_PARAM, _)>
+        struct map_local_index_to_tuple
+        {
+            typedef char(&not_found)[1];
+            static not_found get(...);
+
+            BOOST_PP_REPEAT(PHOENIX_LOCAL_LIMIT, PHOENIX_MAP_LOCAL_DISPATCH, _)
+        };
+
+        template<typename T>
+        T* generate_pointer();
+
+        template <typename Map, typename Tag>
+        struct get_index
+        {
+            BOOST_STATIC_CONSTANT(int,
+                value = (
+                    static_cast<int>((sizeof(Map::get(generate_pointer<Tag>()))) / sizeof(char)) - 2
+                ));
+
+            // if value == -1, Tag is not found
+            typedef mpl::int_<value> type;
+        };
+
+        template <typename Local, typename Env>
+        struct apply_local;
+
+        template <typename Local, typename Env>
+        struct outer_local
+        {
+            typedef typename
+                apply_local<Local, typename Env::outer_env_type>::type
+            type;
+        };
+
+        template <typename Locals, typename Index>
+        struct get_local_or_void
+        {
+            typedef typename
+                mpl::eval_if<
+                    mpl::less<Index, mpl::size<Locals> >
+                  , fusion::result_of::at<Locals, Index>
+                  , mpl::identity<fusion::void_>
+                >::type
+            type;
+        };
+
+        template <typename Local, typename Env, typename Index>
+        struct get_local_from_index
+        {
+            typedef typename
+                mpl::eval_if<
+                    mpl::equal_to<Index, mpl::int_<-1> >
+                  , outer_local<Local, Env>
+                  , get_local_or_void<typename Env::locals_type, Index>
+                >::type
+            type;
+        };
+
+        template <typename Local, typename Env>
+        struct get_local
+        {
+            typedef typename
+                get_index<
+                    typename Env::map_type, typename Local::key_type>::type
+            index_type;
+
+            typedef typename
+                get_local_from_index<Local, Env, index_type>::type
+            type;
+        };
+
+        template <typename Local, typename Env>
+        struct apply_local
+        {
+            // $$$ TODO: static assert that Env is a scoped_environment $$$
+            typedef typename get_local<Local, Env>::type type;
+        };
+
+        template <typename Key>
+        struct eval_local
+        {
+            template <typename RT, typename Env, typename Index>
+            static RT
+            get(Env const& env, Index, mpl::false_)
+            {
+                return RT(fusion::at<Index>(env.locals));
+            }
+
+            template <typename RT, typename Env, typename Index>
+            static RT
+            get(Env const& env, Index index, mpl::true_)
+            {
+                typedef typename
+                    get_index<typename Env::outer_env_type::map_type, Key>::type
+                index_type;
+
+                return get<RT>(
+                    env.outer_env
+                  , index_type()
+                  , mpl::equal_to<index_type, mpl::int_<-1> >());
+            }
+
+            template <typename RT, typename Env, typename Index>
+            static RT
+            get(Env const& env, Index index)
+            {
+                return get<RT>(
+                    env
+                  , index
+                  , mpl::equal_to<Index, mpl::int_<-1> >());
+            }
+        };
+    }
+}}
+
+#undef PHOENIX_MAP_LOCAL_TEMPLATE_PARAM
+#undef PHOENIX_MAP_LOCAL_DISPATCH
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/scope/lambda.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/scope/lambda.hpp
new file mode 100644
index 0000000..c4a7ce8
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/scope/lambda.hpp
@@ -0,0 +1,176 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+    Copyright (c) 2004 Daniel Wallin
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_SCOPE_LAMBDA_HPP
+#define PHOENIX_SCOPE_LAMBDA_HPP
+
+#include <boost/spirit/home/phoenix/core/limits.hpp>
+#include <boost/spirit/home/phoenix/core/composite.hpp>
+#include <boost/spirit/home/phoenix/scope/scoped_environment.hpp>
+#include <boost/spirit/home/phoenix/scope/detail/local_variable.hpp>
+#include <boost/spirit/home/phoenix/detail/local_reference.hpp>
+#include <boost/spirit/home/phoenix/core/actor.hpp>
+#include <boost/fusion/include/transform.hpp>
+#include <boost/fusion/include/as_vector.hpp>
+
+namespace boost { namespace phoenix
+{
+    template <typename Base, typename OuterEnv, typename Locals, typename Map>
+    struct lambda_eval : Base
+    {
+        template <typename Env>
+        struct result
+        {
+            typedef typename Base::template
+                result<scoped_environment<Env, OuterEnv, Locals, Map> >::type
+            result_type;
+
+            typedef typename 
+                detail::unwrap_local_reference<result_type>::type 
+            type;
+        };
+
+        lambda_eval(
+            Base const& base
+          , OuterEnv const& outer_env
+          , Locals const& locals)
+            : Base(base)
+            , outer_env(outer_env)
+            , locals(locals) {}
+
+        template <typename Env>
+        typename result<Env>::type
+        eval(Env const& env) const
+        {
+            typedef typename result<Env>::type RT;
+            return RT(Base::eval(
+                scoped_environment<Env, OuterEnv, Locals, Map>(
+                    env, outer_env, locals)));
+        }
+
+        OuterEnv outer_env;
+        mutable Locals locals;
+    };
+    
+    template <typename Base, typename Vars, typename Map>
+    struct lambda_actor
+    {
+        typedef typename
+            mpl::fold<
+                Vars
+              , mpl::false_
+              , detail::compute_no_nullary
+            >::type
+        no_nullary;
+
+        template <typename Env>
+        struct result
+        {
+            typedef typename 
+                fusion::result_of::as_vector<
+                    typename fusion::result_of::transform<
+                        Vars
+                      , detail::initialize_local<Env>
+                    >::type
+                >::type 
+            locals_type;
+
+            typedef actor<lambda_eval<Base, Env, locals_type, Map> > type;
+        };
+
+        lambda_actor(Base const& f, Vars const& vars)
+            : f(f), vars(vars) {}
+
+        template <typename Env>
+        typename result<Env>::type
+        eval(Env const& env) const
+        {
+            typedef typename result<Env>::type result_type;
+            
+            return result_type(
+                f, env, fusion::as_vector(
+                    fusion::transform(
+                        vars
+                      , detail::initialize_local<Env>(env)
+                    )));
+        }
+
+        Base f;
+        Vars vars;
+    };
+    
+    template <typename Vars, typename Map>
+    struct lambda_actor_gen
+    {
+        template <typename Base>
+        actor<lambda_actor<Base, Vars, Map> > const
+        operator[](actor<Base> const& f) const
+        {
+            return lambda_actor<Base, Vars, Map>(f, vars);
+        }
+
+        lambda_actor_gen(Vars const& vars)
+            : vars(vars) {}
+
+        Vars vars;
+    };
+
+    template <typename Key>
+    struct local_variable; // forward
+    struct assign_eval; // forward
+
+    struct lambda_gen 
+        : lambda_actor_gen<
+            fusion::vector<>
+          , detail::map_local_index_to_tuple<> >
+    {
+        typedef 
+            lambda_actor_gen<
+                fusion::vector<>
+              , detail::map_local_index_to_tuple<> >
+        base_type;
+
+        lambda_gen()
+            : base_type(fusion::vector<>())
+        {
+        }
+
+        template <typename K0, typename V0>
+        lambda_actor_gen<
+            fusion::vector<V0>
+          , detail::map_local_index_to_tuple<K0>
+        >
+        operator()(
+            actor<composite<assign_eval, fusion::vector<local_variable<K0>, V0> > > const& a0
+        ) const
+        {
+            return fusion::vector<V0>(fusion::at_c<1>(a0));
+        }
+    
+        template <typename K0, typename K1, typename V0, typename V1>
+        lambda_actor_gen<
+            fusion::vector<V0, V1>
+          , detail::map_local_index_to_tuple<K0, K1>
+        >
+        operator()(
+            actor<composite<assign_eval, fusion::vector<local_variable<K0>, V0> > > const& a0
+          , actor<composite<assign_eval, fusion::vector<local_variable<K1>, V1> > > const& a1
+        ) const
+        {
+            return fusion::vector<V0, V1>(fusion::at_c<1>(a0), fusion::at_c<1>(a1));
+        }
+        
+        // Bring in the rest...
+        #define PHOENIX_LOCAL_GEN_NAME lambda_actor_gen
+        #include <boost/spirit/home/phoenix/scope/detail/local_gen.hpp>
+        #undef PHOENIX_LOCAL_GEN_NAME
+    };
+
+    lambda_gen const lambda = lambda_gen();
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/scope/let.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/scope/let.hpp
new file mode 100644
index 0000000..40e951a
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/scope/let.hpp
@@ -0,0 +1,145 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+    Copyright (c) 2004 Daniel Wallin
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_SCOPE_LET_HPP
+#define PHOENIX_SCOPE_LET_HPP
+
+#include <boost/spirit/home/phoenix/core/limits.hpp>
+#include <boost/spirit/home/phoenix/core/composite.hpp>
+#include <boost/spirit/home/phoenix/scope/scoped_environment.hpp>
+#include <boost/spirit/home/phoenix/scope/detail/local_variable.hpp>
+#include <boost/spirit/home/phoenix/detail/local_reference.hpp>
+#include <boost/spirit/home/phoenix/core/actor.hpp>
+#include <boost/fusion/include/transform.hpp>
+#include <boost/fusion/include/as_vector.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace phoenix
+{
+    template <typename Base, typename Vars, typename Map>
+    struct let_actor : Base
+    {
+        typedef typename
+            mpl::fold<
+                Vars
+              , mpl::false_
+              , detail::compute_no_nullary
+            >::type
+        no_nullary;
+        
+        template <typename Env>
+        struct result
+        {
+            typedef typename 
+                fusion::result_of::as_vector<
+                    typename fusion::result_of::transform<
+                        Vars
+                      , detail::initialize_local<Env>
+                    >::type
+                >::type 
+            locals_type;
+
+            typedef typename Base::template
+                result<scoped_environment<Env, Env, locals_type, Map> >::type
+            result_type;
+            
+            typedef typename 
+                detail::unwrap_local_reference<result_type>::type 
+            type;
+        };
+
+        let_actor(Base const& base, Vars const& vars)
+            : Base(base), vars(vars) {}
+
+        template <typename Env>
+        typename result<Env>::type
+        eval(Env const& env) const
+        {
+            typedef typename 
+                fusion::result_of::as_vector<
+                    typename fusion::result_of::transform<
+                        Vars
+                      , detail::initialize_local<Env>
+                    >::type
+                >::type 
+            locals_type;
+
+            locals_type locals = 
+                fusion::as_vector(
+                    fusion::transform(
+                        vars
+                      , detail::initialize_local<Env>(env)));
+            
+            typedef typename result<Env>::type RT;
+            return RT(Base::eval(
+                scoped_environment<Env, Env, locals_type, Map>(
+                    env
+                  , env
+                  , locals)));
+        }
+
+        Vars vars;
+    };
+    
+    template <typename Vars, typename Map>
+    struct let_actor_gen
+    {
+        template <typename Base>
+        actor<let_actor<Base, Vars, Map> > const
+        operator[](actor<Base> const& base) const
+        {
+            return let_actor<Base, Vars, Map>(base, vars);
+        }
+
+        let_actor_gen(Vars const& vars)
+            : vars(vars) {}
+
+        Vars vars;
+    };
+
+    template <typename Key>
+    struct local_variable; // forward
+    struct assign_eval; // forward
+
+    struct let_gen
+    {
+        template <typename K0, typename V0>
+        let_actor_gen<
+            fusion::vector<V0>
+          , detail::map_local_index_to_tuple<K0>
+        >
+        operator()(
+            actor<composite<assign_eval, fusion::vector<local_variable<K0>, V0> > > const& a0
+        ) const
+        {
+            return fusion::vector<V0>(fusion::at_c<1>(a0));
+        }
+    
+        template <typename K0, typename K1, typename V0, typename V1>
+        let_actor_gen<
+            fusion::vector<V0, V1>
+          , detail::map_local_index_to_tuple<K0, K1>
+        >
+        operator()(
+            actor<composite<assign_eval, fusion::vector<local_variable<K0>, V0> > > const& a0
+          , actor<composite<assign_eval, fusion::vector<local_variable<K1>, V1> > > const& a1
+        ) const
+        {
+            return fusion::vector<V0, V1>(fusion::at_c<1>(a0), fusion::at_c<1>(a1));
+        }
+        
+        // Bring in the rest...
+        #define PHOENIX_LOCAL_GEN_NAME let_actor_gen
+        #include <boost/spirit/home/phoenix/scope/detail/local_gen.hpp>
+        #undef PHOENIX_LOCAL_GEN_NAME
+    };
+
+    let_gen const let = let_gen();
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/scope/local_variable.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/scope/local_variable.hpp
new file mode 100644
index 0000000..5987ed4
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/scope/local_variable.hpp
@@ -0,0 +1,111 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+    Copyright (c) 2004 Daniel Wallin
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_SCOPE_LOCAL_VARIABLE_HPP
+#define PHOENIX_SCOPE_LOCAL_VARIABLE_HPP
+
+#include <boost/spirit/home/phoenix/core/limits.hpp>
+#include <boost/spirit/home/phoenix/detail/local_reference.hpp>
+#include <boost/spirit/home/phoenix/scope/detail/local_variable.hpp>
+#include <boost/spirit/home/phoenix/core/actor.hpp>
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace phoenix
+{
+    template <typename Key>
+    struct local_variable
+    {
+        typedef Key key_type;
+
+        // This will prevent actor::operator()() from kicking in.
+        // Actually, we do not need all actor::operator()s for
+        // all arities, but this will suffice. The nullary 
+        // actor::operator() is particularly troublesome because 
+        // it is always eagerly evaluated by the compiler.
+        typedef mpl::true_ no_nullary; 
+
+        template <typename Env>
+        struct result : detail::apply_local<local_variable<Key>, Env> {};
+
+        template <typename Env>
+        typename result<Env>::type 
+        eval(Env const& env) const
+        {
+            typedef typename result<Env>::type return_type;
+            typedef typename 
+                detail::get_index<typename Env::map_type, Key>::type 
+            index_type;
+            typedef detail::eval_local<Key> eval_local;
+
+            return eval_local::template get<return_type>(
+                env
+              , index_type());
+        }
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        local_variable& operator= (local_variable const&);
+    };
+
+    namespace local_names
+    {
+        actor<local_variable<struct _a_key> > const _a 
+            = local_variable<struct _a_key>();
+        actor<local_variable<struct _b_key> > const _b 
+            = local_variable<struct _b_key>();
+        actor<local_variable<struct _c_key> > const _c 
+            = local_variable<struct _c_key>();
+        actor<local_variable<struct _d_key> > const _d 
+            = local_variable<struct _d_key>();
+        actor<local_variable<struct _e_key> > const _e 
+            = local_variable<struct _e_key>();
+        actor<local_variable<struct _f_key> > const _f 
+            = local_variable<struct _f_key>();
+        actor<local_variable<struct _g_key> > const _g 
+            = local_variable<struct _g_key>();
+        actor<local_variable<struct _h_key> > const _h 
+            = local_variable<struct _h_key>();
+        actor<local_variable<struct _i_key> > const _i 
+            = local_variable<struct _i_key>();
+        actor<local_variable<struct _j_key> > const _j 
+            = local_variable<struct _j_key>();
+        actor<local_variable<struct _k_key> > const _k 
+            = local_variable<struct _k_key>();
+        actor<local_variable<struct _l_key> > const _l 
+            = local_variable<struct _l_key>();
+        actor<local_variable<struct _m_key> > const _m 
+            = local_variable<struct _m_key>();
+        actor<local_variable<struct _n_key> > const _n 
+            = local_variable<struct _n_key>();
+        actor<local_variable<struct _o_key> > const _o 
+            = local_variable<struct _o_key>();
+        actor<local_variable<struct _p_key> > const _p 
+            = local_variable<struct _p_key>();
+        actor<local_variable<struct _q_key> > const _q 
+            = local_variable<struct _q_key>();
+        actor<local_variable<struct _r_key> > const _r 
+            = local_variable<struct _r_key>();
+        actor<local_variable<struct _s_key> > const _s 
+            = local_variable<struct _s_key>();
+        actor<local_variable<struct _t_key> > const _t 
+            = local_variable<struct _t_key>();
+        actor<local_variable<struct _u_key> > const _u 
+            = local_variable<struct _u_key>();
+        actor<local_variable<struct _v_key> > const _v 
+            = local_variable<struct _v_key>();
+        actor<local_variable<struct _w_key> > const _w 
+            = local_variable<struct _w_key>();
+        actor<local_variable<struct _x_key> > const _x 
+            = local_variable<struct _x_key>();
+        actor<local_variable<struct _y_key> > const _y 
+            = local_variable<struct _y_key>();
+        actor<local_variable<struct _z_key> > const _z 
+            = local_variable<struct _z_key>();
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/scope/scoped_environment.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/scope/scoped_environment.hpp
new file mode 100644
index 0000000..b23f9ee
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/scope/scoped_environment.hpp
@@ -0,0 +1,47 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Joel de Guzman
+    Copyright (c) 2004 Daniel Wallin
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_SCOPE_SCOPED_ENVIRONMENT_HPP
+#define PHOENIX_SCOPE_SCOPED_ENVIRONMENT_HPP
+
+namespace boost { namespace phoenix
+{
+    template <typename Env, typename OuterEnv, typename Locals, typename Map>
+    struct scoped_environment
+    {
+        typedef Env env_type;
+        typedef OuterEnv outer_env_type;
+        typedef Locals locals_type;
+        typedef Map map_type;
+        typedef typename Env::args_type args_type;
+        typedef typename Env::tie_type tie_type;
+
+        scoped_environment(
+            Env const& env
+          , OuterEnv const& outer_env
+          , Locals& locals)
+            : env(env)
+            , outer_env(outer_env)
+            , locals(locals) {}
+
+        tie_type const& 
+        args() const
+        {
+            return env.args();
+        }
+
+        Env const& env;
+        OuterEnv const& outer_env;
+        Locals& locals;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        scoped_environment& operator= (scoped_environment const&);
+    };
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/phoenix/version.hpp b/3rdParty/Boost/src/boost/spirit/home/phoenix/version.hpp
new file mode 100644
index 0000000..c29baf8
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/phoenix/version.hpp
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2005-2008 Hartmut Kaiser
+    Copyright (c) 2005-2007 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_VERSION_HPP
+#define PHOENIX_VERSION_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  This is the version of the library
+//
+///////////////////////////////////////////////////////////////////////////////
+#define BOOST_PHOENIX_VERSION   0x2000    // 2.0.0
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/qi/detail/assign_to.hpp b/3rdParty/Boost/src/boost/spirit/home/qi/detail/assign_to.hpp
new file mode 100644
index 0000000..73d3617
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/qi/detail/assign_to.hpp
@@ -0,0 +1,267 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_ASSIGN_TO_APR_16_2006_0812PM)
+#define BOOST_SPIRIT_ASSIGN_TO_APR_16_2006_0812PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/detail/construct.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/qi/detail/attributes.hpp>
+#include <boost/spirit/home/support/container.hpp>
+#include <boost/spirit/home/phoenix/core/actor.hpp>
+#include <boost/ref.hpp>
+#include <boost/range/iterator_range.hpp>
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  This file contains assignment utilities. The utilities provided also
+    //  accept spirit's unused_type; all no-ops. Compiler optimization will
+    //  easily strip these away.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Attribute, typename Iterator, typename Enable>
+    struct assign_to_attribute_from_iterators
+    {
+        static void 
+        call(Iterator const& first, Iterator const& last, Attribute& attr)
+        {
+            if (traits::is_empty(attr))
+                attr = Attribute(first, last);
+            else {
+                for (Iterator i = first; i != last; ++i)
+                    push_back(attr, *i);
+            }
+        }
+    };
+
+    template <typename Attribute, typename Iterator>
+    struct assign_to_attribute_from_iterators<
+        reference_wrapper<Attribute>, Iterator>
+    {
+        static void 
+        call(Iterator const& first, Iterator const& last
+          , reference_wrapper<Attribute> attr)
+        {
+            if (traits::is_empty(attr))
+                attr = Attribute(first, last);
+            else {
+                for (Iterator i = first; i != last; ++i)
+                    push_back(attr, *i);
+            }
+        }
+    };
+
+    template <typename Iterator>
+    struct assign_to_attribute_from_iterators<
+        iterator_range<Iterator>, Iterator>
+    {
+        static void 
+        call(Iterator const& first, Iterator const& last
+          , iterator_range<Iterator>& attr)
+        {
+            attr = iterator_range<Iterator>(first, last);
+        }
+    };
+
+    template <typename Iterator, typename Attribute>
+    inline void
+    assign_to(Iterator const& first, Iterator const& last, Attribute& attr)
+    {
+        assign_to_attribute_from_iterators<Attribute, Iterator>::
+            call(first, last, attr);
+    }
+
+    template <typename Iterator>
+    inline void
+    assign_to(Iterator const&, Iterator const&, unused_type)
+    {
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Attribute>
+    void assign_to(T const& val, Attribute& attr);
+
+    template <typename Attribute, typename T, typename Enable>
+    struct assign_to_attribute_from_value
+    {
+        typedef typename traits::one_element_sequence<Attribute>::type 
+            is_one_element_sequence;
+
+        typedef typename mpl::eval_if<
+            is_one_element_sequence
+          , fusion::result_of::at_c<Attribute, 0>
+          , mpl::identity<Attribute&>
+        >::type type;
+
+        template <typename T_>
+        static void 
+        call(T_ const& val, Attribute& attr, mpl::false_)
+        {
+            attr = static_cast<Attribute>(val);
+        }
+
+        // This handles the case where the attribute is a single element fusion
+        // sequence. We silently assign to the only element and treat it as the 
+        // attribute to parse the results into.
+        template <typename T_>
+        static void 
+        call(T_ const& val, Attribute& attr, mpl::true_)
+        {
+            typedef typename fusion::result_of::value_at_c<Attribute, 0>::type 
+                element_type;
+            fusion::at_c<0>(attr) = static_cast<element_type>(val);
+        }
+
+        static void 
+        call(T const& val, Attribute& attr)
+        {
+            call(val, attr, is_one_element_sequence());
+        }
+    };
+
+    template <typename Attribute>
+    struct assign_to_attribute_from_value<Attribute, Attribute>
+    {
+        static void 
+        call(Attribute const& val, Attribute& attr)
+        {
+            attr = val;
+        }
+    };
+
+    template <typename Attribute, typename T>
+    struct assign_to_attribute_from_value<reference_wrapper<Attribute>, T>
+    {
+        static void 
+        call(T const& val, reference_wrapper<Attribute> attr)
+        {
+            assign_to(val.get(), attr);
+        }
+    };
+
+    template <typename Attribute>
+    struct assign_to_attribute_from_value<optional<Attribute>, unused_type>
+    {
+        static void 
+        call(unused_type, optional<Attribute> const&)
+        {
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Attribute, typename T, typename Enable>
+    struct assign_to_container_from_value
+    {
+        // T is not a container and not a string
+        template <typename T_>
+        static void call(T_ const& val, Attribute& attr, mpl::false_, mpl::false_)
+        {
+            traits::push_back(attr, val);
+        }
+
+        // T is a container (but not a string)
+        template <typename T_>
+        static void call(T_ const& val, Attribute& attr, mpl::true_, mpl::false_)
+        {
+            typedef typename traits::container_iterator<T_ const>::type 
+                iterator_type;
+            iterator_type end = traits::end(val);
+            for (iterator_type i = traits::begin(val); i != end; traits::next(i))
+                push_back(attr, traits::deref(i));
+        }
+
+        // T is a string 
+        template <typename Iterator>
+        static void append_to_string(Attribute& attr, Iterator begin, Iterator end)
+        {
+            for (Iterator i = begin; i != end; ++i)
+                push_back(attr, *i);
+        }
+
+        template <typename T_, typename Pred>
+        static void call(T_ const& val, Attribute& attr, Pred, mpl::true_)
+        {
+            typedef typename char_type_of<T_>::type char_type;
+            append_to_string(attr, traits::get_begin<char_type>(val)
+              , traits::get_end<char_type>(val));
+        }
+
+        static void call(T const& val, Attribute& attr)
+        {
+            typedef typename traits::is_container<T>::type is_container;
+            typedef typename traits::is_string<T>::type is_string;
+
+            call(val, attr, is_container(), is_string());
+        }
+    };
+
+    template <typename Attribute, typename T>
+    struct assign_to_container_from_value<reference_wrapper<Attribute>, T>
+    {
+        static void 
+        call(T const& val, reference_wrapper<Attribute> attr)
+        {
+            assign_to(val.get(), attr);
+        }
+    };
+
+    template <typename Attribute>
+    struct assign_to_container_from_value<optional<Attribute>, unused_type>
+    {
+        static void 
+        call(unused_type, optional<Attribute> const&)
+        {
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        // overload for non-container attributes
+        template <typename T, typename Attribute, typename P1, typename P2>
+        inline void
+        assign_to(T const& val, Attribute& attr, P1, P2)
+        {
+            assign_to_attribute_from_value<Attribute, T>::call(val, attr);
+        }
+
+        // overload for containers (but not for variants or optionals 
+        // holding containers)
+        template <typename T, typename Attribute>
+        inline void
+        assign_to(T const& val, Attribute& attr, mpl::true_, mpl::true_)
+        {
+            assign_to_container_from_value<Attribute, T>::call(val, attr);
+        }
+    }
+
+    template <typename T, typename Attribute>
+    inline void
+    assign_to(T const& val, Attribute& attr)
+    {
+        typedef typename traits::is_container<Attribute>::type is_container;
+        typedef typename mpl::and_<
+            traits::not_is_variant<Attribute>
+          , traits::not_is_optional<Attribute> 
+        >::type is_not_wrapped_container;
+
+        detail::assign_to(val, attr, is_container(), is_not_wrapped_container());
+    }
+
+    template <typename T>
+    inline void
+    assign_to(T const&, unused_type)
+    {
+    }
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/qi/detail/attributes.hpp b/3rdParty/Boost/src/boost/spirit/home/qi/detail/attributes.hpp
new file mode 100644
index 0000000..ea0f74c
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/qi/detail/attributes.hpp
@@ -0,0 +1,175 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c) 2001-2011 Joel de Guzman
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(SPIRIT_QI_DETAIL_ATTRIBUTES_APR_18_2010_0458PM)
+#define SPIRIT_QI_DETAIL_ATTRIBUTES_APR_18_2010_0458PM
+
+#include <boost/spirit/home/qi/domain.hpp>
+#include <boost/spirit/home/support/attributes_fwd.hpp>
+#include <boost/spirit/home/support/attributes.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace qi
+{
+    template <typename Exposed, typename Transformed>
+    struct default_transform_attribute
+    {
+        typedef Transformed type;
+
+        static Transformed pre(Exposed& val) { return Transformed(); }
+
+        static void post(Exposed& val, Transformed const& attr)
+        {
+            traits::assign_to(attr, val);
+        }
+
+        // fail() will be called by Qi rule's if the rhs failed parsing
+        static void fail(Exposed&) {}
+    };
+
+    // handle case where no transformation is required as the types are the same
+    template <typename Attribute>
+    struct default_transform_attribute<Attribute, Attribute>
+    {
+        typedef Attribute& type;
+        static Attribute& pre(Attribute& val) { return val; }
+        static void post(Attribute&, Attribute const&) {}
+        static void fail(Attribute&) {}
+    };
+
+    template <typename Exposed, typename Transformed>
+    struct proxy_transform_attribute
+    {
+        typedef Transformed type;
+
+        static Transformed pre(Exposed& val) { return Transformed(val); }
+        static void post(Exposed& val, Transformed const& attr) { /* no-op */ }
+
+        // fail() will be called by Qi rule's if the rhs failed parsing
+        static void fail(Exposed&) {}
+    };
+
+    // handle case where no transformation is required as the types are the same
+    template <typename Attribute>
+    struct proxy_transform_attribute<Attribute, Attribute>
+    {
+        typedef Attribute& type;
+        static Attribute& pre(Attribute& val) { return val; }
+        static void post(Attribute&, Attribute const&) {}
+        static void fail(Attribute&) {}
+    };
+
+    // main specialization for Qi
+    template <typename Exposed, typename Transformed, typename Enable = void>
+    struct transform_attribute
+      : mpl::if_<
+            mpl::and_<
+                mpl::not_<is_const<Exposed> >
+              , mpl::not_<is_reference<Exposed> >
+              , traits::is_proxy<Transformed> >
+          , proxy_transform_attribute<Exposed, Transformed>
+          , default_transform_attribute<Exposed, Transformed> 
+        >::type 
+    {};
+
+    template <typename Exposed, typename Transformed>
+    struct transform_attribute<optional<Exposed>, Transformed
+      , typename disable_if<is_same<optional<Exposed>, Transformed> >::type>
+    {
+        typedef Transformed& type;
+        static Transformed& pre(optional<Exposed>& val)
+        {
+            if (!val)
+                val = Transformed();
+            return boost::get<Transformed>(val);
+        }
+        static void post(optional<Exposed>&, Transformed const&) {}
+        static void fail(optional<Exposed>& val)
+        {
+             val = none_t();    // leave optional uninitialized if rhs failed
+        }
+    };
+
+    // reference types need special handling
+    template <typename Attribute>
+    struct transform_attribute<Attribute&, Attribute>
+    {
+        typedef Attribute& type;
+        static Attribute& pre(Attribute& val) { return val; }
+        static void post(Attribute&, Attribute const&) {}
+        static void fail(Attribute&) {}
+    };
+
+    // unused_type needs some special handling as well
+    template <>
+    struct transform_attribute<unused_type, unused_type>
+    {
+        typedef unused_type type;
+        static unused_type pre(unused_type) { return unused; }
+        static void post(unused_type, unused_type) {}
+        static void fail(unused_type) {}
+    };
+
+    template <>
+    struct transform_attribute<unused_type const, unused_type>
+      : transform_attribute<unused_type, unused_type>
+    {};
+
+    template <typename Attribute>
+    struct transform_attribute<unused_type, Attribute>
+      : transform_attribute<unused_type, unused_type>
+    {};
+
+    template <typename Attribute>
+    struct transform_attribute<unused_type const, Attribute>
+      : transform_attribute<unused_type, unused_type>
+    {};
+
+    template <typename Attribute>
+    struct transform_attribute<Attribute, unused_type>
+      : transform_attribute<unused_type, unused_type>
+    {};
+
+    template <typename Attribute>
+    struct transform_attribute<Attribute const, unused_type>
+      : transform_attribute<unused_type, unused_type>
+    {};
+}}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace traits
+{
+    template <typename Exposed, typename Transformed>
+    struct transform_attribute<Exposed, Transformed, qi::domain>
+      : qi::transform_attribute<Exposed, Transformed>
+    {};
+
+    template <typename Exposed, typename Transformed>
+    struct transform_attribute<Exposed&, Transformed, qi::domain>
+      : transform_attribute<Exposed, Transformed, qi::domain>
+    {};
+
+    template <typename Attribute>
+    struct transform_attribute<Attribute&, Attribute, qi::domain>
+      : qi::transform_attribute<Attribute&, Attribute>
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Exposed, typename Transformed>
+    void post_transform(Exposed& dest, Transformed const& attr)
+    {
+        return transform_attribute<Exposed, Transformed, qi::domain>::post(dest, attr);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Exposed, typename Transformed>
+    void fail_transform(Exposed& dest, Transformed const&)
+    {
+        return transform_attribute<Exposed, Transformed, qi::domain>::fail(dest);
+    }
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/qi/detail/construct.hpp b/3rdParty/Boost/src/boost/spirit/home/qi/detail/construct.hpp
new file mode 100644
index 0000000..b6ae3b1
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/qi/detail/construct.hpp
@@ -0,0 +1,202 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_CONSTRUCT_MAR_24_2007_0629PM)
+#define BOOST_SPIRIT_CONSTRUCT_MAR_24_2007_0629PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <boost/spirit/home/qi/parse.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/attributes_fwd.hpp>
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  We provide overloads for the assign_to_attribute_from_iterators 
+    //  customization point for all built in types
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator>
+    struct assign_to_attribute_from_iterators<char, Iterator>
+    {
+        static void 
+        call(Iterator const& first, Iterator const& last, char& attr)
+        {
+            attr = *first;
+        }
+    };
+
+    template <typename Iterator>
+    struct assign_to_attribute_from_iterators<signed char, Iterator>
+    {
+        static void 
+        call(Iterator const& first, Iterator const& last, signed char& attr)
+        {
+            attr = *first;
+        }
+    };
+
+    template <typename Iterator>
+    struct assign_to_attribute_from_iterators<unsigned char, Iterator>
+    {
+        static void 
+        call(Iterator const& first, Iterator const& last, unsigned char& attr)
+        {
+            attr = *first;
+        }
+    };
+
+    // wchar_t is intrinsic
+    template <typename Iterator>
+    struct assign_to_attribute_from_iterators<wchar_t, Iterator>
+    {
+        static void 
+        call(Iterator const& first, Iterator const& last, wchar_t& attr)
+        {
+            attr = *first;
+        }
+    };
+
+#if !defined(BOOST_NO_INTRINSIC_WCHAR_T)
+    // wchar_t is intrinsic, have separate overload for unsigned short
+    template <typename Iterator>
+    struct assign_to_attribute_from_iterators<unsigned short, Iterator>
+    {
+        static void 
+        call(Iterator const& first, Iterator const& last, unsigned short& attr)
+        {
+            attr = *first;
+        }
+    };
+#endif
+
+    template <typename Iterator>
+    struct assign_to_attribute_from_iterators<bool, Iterator>
+    {
+        static void 
+        call(Iterator const& first, Iterator const& last, bool& attr)
+        {
+            Iterator first_ = first;
+            qi::parse(first_, last, bool_, attr);
+        }
+    };
+
+    template <typename Iterator>
+    struct assign_to_attribute_from_iterators<short, Iterator>
+    {
+        static void 
+        call(Iterator const& first, Iterator const& last, short& attr)
+        {
+            Iterator first_ = first;
+            qi::parse(first_, last, short_, attr);
+        }
+    };
+
+    template <typename Iterator>
+    struct assign_to_attribute_from_iterators<int, Iterator>
+    {
+        static void 
+        call(Iterator const& first, Iterator const& last, int& attr)
+        {
+            Iterator first_ = first;
+            qi::parse(first_, last, int_, attr);
+        }
+    };
+    template <typename Iterator>
+    struct assign_to_attribute_from_iterators<unsigned int, Iterator>
+    {
+        static void 
+        call(Iterator const& first, Iterator const& last, unsigned int& attr)
+        {
+            Iterator first_ = first;
+            qi::parse(first_, last, uint_, attr);
+        }
+    };
+
+    template <typename Iterator>
+    struct assign_to_attribute_from_iterators<long, Iterator>
+    {
+        static void 
+        call(Iterator const& first, Iterator const& last, long& attr)
+        {
+            Iterator first_ = first;
+            qi::parse(first_, last, long_, attr);
+        }
+    };
+    template <typename Iterator>
+    struct assign_to_attribute_from_iterators<unsigned long, Iterator>
+    {
+        static void 
+        call(Iterator const& first, Iterator const& last, unsigned long& attr)
+        {
+            Iterator first_ = first;
+            qi::parse(first_, last, ulong_, attr);
+        }
+    };
+
+#ifdef BOOST_HAS_LONG_LONG
+    template <typename Iterator>
+    struct assign_to_attribute_from_iterators<long_long_type, Iterator>
+    {
+        static void 
+        call(Iterator const& first, Iterator const& last, long_long_type& attr)
+        {
+            Iterator first_ = first;
+            qi::parse(first_, last, long_long, attr);
+        }
+    };
+    template <typename Iterator>
+    struct assign_to_attribute_from_iterators<ulong_long_type, Iterator>
+    {
+        static void 
+        call(Iterator const& first, Iterator const& last, ulong_long_type& attr)
+        {
+            Iterator first_ = first;
+            qi::parse(first_, last, ulong_long, attr);
+        }
+    };
+#endif
+
+    template <typename Iterator>
+    struct assign_to_attribute_from_iterators<float, Iterator>
+    {
+        static void 
+        call(Iterator const& first, Iterator const& last, float& attr)
+        {
+            Iterator first_ = first;
+            qi::parse(first_, last, float_, attr);
+        }
+    };
+
+    template <typename Iterator>
+    struct assign_to_attribute_from_iterators<double, Iterator>
+    {
+        static void 
+        call(Iterator const& first, Iterator const& last, double& attr)
+        {
+            Iterator first_ = first;
+            qi::parse(first_, last, double_, attr);
+        }
+    };
+
+    template <typename Iterator>
+    struct assign_to_attribute_from_iterators<long double, Iterator>
+    {
+        static void 
+        call(Iterator const& first, Iterator const& last, long double& attr)
+        {
+            Iterator first_ = first;
+            qi::parse(first_, last, long_double, attr);
+        }
+    };
+
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/qi/detail/parse.hpp b/3rdParty/Boost/src/boost/spirit/home/qi/detail/parse.hpp
new file mode 100644
index 0000000..b81f1e7
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/qi/detail/parse.hpp
@@ -0,0 +1,97 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_DETAIL_PARSE_DEC_02_2009_0411PM)
+#define BOOST_SPIRIT_DETAIL_PARSE_DEC_02_2009_0411PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/skip_flag.hpp>
+#include <boost/spirit/home/qi/skip_over.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace spirit { namespace qi { namespace detail
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Expr, typename Enable = void>
+    struct parse_impl
+    {
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then the expression (expr) is not a valid spirit qi expression.
+        // Did you intend to use the auto_ facilities while forgetting to 
+        // #include <boost/spirit/include/qi_auto.hpp>?
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Expr);
+    };
+
+    template <typename Expr>
+    struct parse_impl<Expr
+      , typename enable_if<traits::matches<qi::domain, Expr> >::type>
+    {
+        template <typename Iterator>
+        static bool call(
+            Iterator& first
+          , Iterator last
+          , Expr const& expr)
+        {
+            return compile<qi::domain>(expr).parse(
+                first, last, unused, unused, unused);
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Expr, typename Enable = void>
+    struct phrase_parse_impl
+    {
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then the expression (expr) is not a valid spirit qi expression.
+        // Did you intend to use the auto_ facilities while forgetting to 
+        // #include <boost/spirit/include/qi_auto.hpp>?
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Expr);
+    };
+
+    template <typename Expr>
+    struct phrase_parse_impl<Expr
+      , typename enable_if<traits::matches<qi::domain, Expr> >::type>
+    {
+        template <typename Iterator, typename Skipper>
+        static bool call(
+            Iterator& first
+          , Iterator last
+          , Expr const& expr
+          , Skipper const& skipper
+          , BOOST_SCOPED_ENUM(skip_flag) post_skip)
+        {
+            // Report invalid expression error as early as possible.
+            // If you got an error_invalid_expression error message here,
+            // then the skipper is not a valid spirit qi expression.
+            BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Skipper);
+
+            typedef
+                typename result_of::compile<qi::domain, Skipper>::type
+            skipper_type;
+            skipper_type const skipper_ = compile<qi::domain>(skipper);
+
+            if (!compile<qi::domain>(expr).parse(
+                    first, last, unused, skipper_, unused))
+                return false;
+
+            if (post_skip == skip_flag::postskip)
+                qi::skip_over(first, last, skipper_);
+            return true;
+        }
+    };
+
+}}}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/spirit/home/qi/detail/unused_skipper.hpp b/3rdParty/Boost/src/boost/spirit/home/qi/detail/unused_skipper.hpp
new file mode 100644
index 0000000..c1405d6
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/qi/detail/unused_skipper.hpp
@@ -0,0 +1,50 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_QI_UNUSED_SKIPPER_JUL_25_2009_0921AM)
+#define BOOST_SPIRIT_QI_UNUSED_SKIPPER_JUL_25_2009_0921AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/unused.hpp>
+
+namespace boost { namespace spirit { namespace qi { namespace detail
+{
+    template <typename Skipper>
+    struct unused_skipper : unused_type
+    {
+        unused_skipper(Skipper const& skipper)
+          : skipper(skipper) {}
+        Skipper const& skipper;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        unused_skipper& operator= (unused_skipper const&);
+    };
+
+    // If a surrounding lexeme[] directive was specified, the current
+    // skipper is of the type unused_skipper. In this case we 
+    // re-activate the skipper which was active before the skip[]
+    // directive.
+    template <typename Skipper>
+    inline Skipper const& 
+    get_skipper(unused_skipper<Skipper> const& u)
+    {
+        return u.skipper;
+    }
+
+    // If no surrounding lexeme[] directive was specified we keep what we got.
+    template <typename Skipper>
+    inline Skipper const& 
+    get_skipper(Skipper const& u)
+    {
+        return u;
+    }
+
+}}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/qi/domain.hpp b/3rdParty/Boost/src/boost/spirit/home/qi/domain.hpp
new file mode 100644
index 0000000..ce1accb
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/qi/domain.hpp
@@ -0,0 +1,56 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_DOMAIN_JANUARY_29_2007_0954AM)
+#define BOOST_SPIRIT_DOMAIN_JANUARY_29_2007_0954AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/meta_compiler.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/argument.hpp>
+#include <boost/spirit/home/support/context.hpp>
+
+#include <boost/preprocessor/repeat.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+namespace boost { namespace spirit { namespace qi
+{
+    // qi's domain
+    struct domain {};
+
+    // bring in some of spirit parts into spirit::qi
+    using spirit::unused;
+    using spirit::unused_type;
+    using spirit::compile;
+    using spirit::info;
+
+    // You can bring these in with the using directive
+    // without worrying about bringing in too much.
+    namespace labels
+    {
+        BOOST_PP_REPEAT(SPIRIT_ARGUMENTS_LIMIT, SPIRIT_USING_ARGUMENT, _)
+        BOOST_PP_REPEAT(SPIRIT_ATTRIBUTES_LIMIT, SPIRIT_USING_ATTRIBUTE, _)
+
+        using spirit::_pass;
+        using spirit::_val;
+        using spirit::_a;
+        using spirit::_b;
+        using spirit::_c;
+        using spirit::_d;
+        using spirit::_e;
+        using spirit::_f;
+        using spirit::_g;
+        using spirit::_h;
+        using spirit::_i;
+        using spirit::_j;
+    }
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/qi/meta_compiler.hpp b/3rdParty/Boost/src/boost/spirit/home/qi/meta_compiler.hpp
new file mode 100644
index 0000000..68649c0
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/qi/meta_compiler.hpp
@@ -0,0 +1,177 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_META_COMPILER_OCTOBER_16_2008_0347PM)
+#define BOOST_SPIRIT_META_COMPILER_OCTOBER_16_2008_0347PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/meta_compiler.hpp>
+#include <boost/spirit/home/qi/domain.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/support/string_traits.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/fusion/include/at.hpp>
+
+namespace boost { namespace spirit
+{
+    template <typename T>
+    struct use_terminal<qi::domain, T
+      , typename enable_if<traits::is_parser<T> >::type> // enables parsers
+      : mpl::true_ {};
+
+    namespace qi
+    {
+        template <typename T, typename Modifiers, typename Enable = void>
+        struct make_primitive // by default, return it as-is
+        {
+            typedef T result_type;
+
+            template <typename T_>
+            T_& operator()(T_& val, unused_type) const
+            {
+                return val;
+            }
+
+            template <typename T_>
+            T_ const& operator()(T_ const& val, unused_type) const
+            {
+                return val;
+            }
+        };
+
+        template <typename Tag, typename Elements
+          , typename Modifiers, typename Enable = void>
+        struct make_composite;
+
+        template <typename Directive, typename Body
+          , typename Modifiers, typename Enable = void>
+        struct make_directive
+        {
+            typedef Body result_type;
+            result_type operator()(unused_type, Body const& body, unused_type) const
+            {
+                return body; // By default, a directive simply returns its subject
+            }
+        };
+    }
+
+    // Qi primitive meta-compiler
+    template <>
+    struct make_component<qi::domain, proto::tag::terminal>
+    {
+        template <typename Sig>
+        struct result;
+
+        template <typename This, typename Elements, typename Modifiers>
+        struct result<This(Elements, Modifiers)>
+        {
+            typedef typename qi::make_primitive<
+                typename remove_const<typename Elements::car_type>::type,
+                typename remove_reference<Modifiers>::type>::result_type
+            type;
+        };
+
+        template <typename Elements, typename Modifiers>
+        typename result<make_component(Elements, Modifiers)>::type
+        operator()(Elements const& elements, Modifiers const& modifiers) const
+        {
+            typedef typename remove_const<typename Elements::car_type>::type term;
+            return qi::make_primitive<term, Modifiers>()(elements.car, modifiers);
+        }
+    };
+
+    // Qi composite meta-compiler
+    template <typename Tag>
+    struct make_component<qi::domain, Tag>
+    {
+        template <typename Sig>
+        struct result;
+
+        template <typename This, typename Elements, typename Modifiers>
+        struct result<This(Elements, Modifiers)>
+        {
+            typedef typename
+                qi::make_composite<Tag, Elements,
+                typename remove_reference<Modifiers>::type>::result_type
+            type;
+        };
+
+        template <typename Elements, typename Modifiers>
+        typename result<make_component(Elements, Modifiers)>::type
+        operator()(Elements const& elements, Modifiers const& modifiers) const
+        {
+            return qi::make_composite<Tag, Elements, Modifiers>()(
+                elements, modifiers);
+        }
+    };
+
+    // Qi function meta-compiler
+    template <>
+    struct make_component<qi::domain, proto::tag::function>
+    {
+        template <typename Sig>
+        struct result;
+
+        template <typename This, typename Elements, typename Modifiers>
+        struct result<This(Elements, Modifiers)>
+        {
+            typedef typename
+                qi::make_composite<
+                    typename remove_const<typename Elements::car_type>::type,
+                    typename Elements::cdr_type,
+                    typename remove_reference<Modifiers>::type
+                >::result_type
+            type;
+        };
+
+        template <typename Elements, typename Modifiers>
+        typename result<make_component(Elements, Modifiers)>::type
+        operator()(Elements const& elements, Modifiers const& modifiers) const
+        {
+            return qi::make_composite<
+                typename remove_const<typename Elements::car_type>::type,
+                typename Elements::cdr_type,
+                Modifiers>()(elements.cdr, modifiers);
+        }
+    };
+
+    // Qi directive meta-compiler
+    template <>
+    struct make_component<qi::domain, tag::directive>
+    {
+        template <typename Sig>
+        struct result;
+
+        template <typename This, typename Elements, typename Modifiers>
+        struct result<This(Elements, Modifiers)>
+        {
+            typedef typename
+                qi::make_directive<
+                    typename remove_const<typename Elements::car_type>::type,
+                    typename remove_const<typename Elements::cdr_type::car_type>::type,
+                    typename remove_reference<Modifiers>::type
+                >::result_type
+            type;
+        };
+
+        template <typename Elements, typename Modifiers>
+        typename result<make_component(Elements, Modifiers)>::type
+        operator()(Elements const& elements, Modifiers const& modifiers) const
+        {
+            return qi::make_directive<
+                typename remove_const<typename Elements::car_type>::type,
+                typename remove_const<typename Elements::cdr_type::car_type>::type,
+                Modifiers>()(elements.car, elements.cdr.car, modifiers);
+        }
+    };
+
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/qi/nonterminal/detail/fcall.hpp b/3rdParty/Boost/src/boost/spirit/home/qi/nonterminal/detail/fcall.hpp
new file mode 100644
index 0000000..e4fa17f
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/qi/nonterminal/detail/fcall.hpp
@@ -0,0 +1,53 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef BOOST_PP_IS_ITERATING
+
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+
+#define BOOST_PP_FILENAME_1 \
+    <boost/spirit/home/qi/nonterminal/detail/fcall.hpp>
+#define BOOST_PP_ITERATION_LIMITS (1, SPIRIT_ARGUMENTS_LIMIT)
+#include BOOST_PP_ITERATE()
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Preprocessor vertical repetition code
+//
+///////////////////////////////////////////////////////////////////////////////
+#else // defined(BOOST_PP_IS_ITERATING)
+
+#define N BOOST_PP_ITERATION()
+
+    template <BOOST_PP_ENUM_PARAMS(N, typename A)>
+    typename lazy_enable_if_c<
+        (params_size == N)
+      , proto::terminal<
+            spirit::qi::parameterized_nonterminal<
+                parameterized_subject_type
+              , fusion::vector<BOOST_PP_ENUM_PARAMS(N, A)> >
+        >
+    >::type
+    operator()(BOOST_PP_ENUM_BINARY_PARAMS(N, A, const& f)) const
+    {
+        typedef fusion::vector<BOOST_PP_ENUM_PARAMS(N, A)> vector_type;
+        typedef spirit::qi::parameterized_nonterminal<
+            parameterized_subject_type, vector_type> parameterized_type;
+        typedef typename proto::terminal<parameterized_type>::type result_type;
+
+        return result_type::make(
+            parameterized_type(
+                this->get_parameterized_subject()
+              , fusion::make_vector(BOOST_PP_ENUM_PARAMS(N, f)))
+        );
+    }
+
+#undef N
+#endif // defined(BOOST_PP_IS_ITERATING)
+
+
diff --git a/3rdParty/Boost/src/boost/spirit/home/qi/nonterminal/detail/parameterized.hpp b/3rdParty/Boost/src/boost/spirit/home/qi/nonterminal/detail/parameterized.hpp
new file mode 100644
index 0000000..8577a09
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/qi/nonterminal/detail/parameterized.hpp
@@ -0,0 +1,62 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2009 Francois Barel
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_PARAMETERIZED_AUGUST_09_2009_0539AM)
+#define BOOST_SPIRIT_PARAMETERIZED_AUGUST_09_2009_0539AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/ref.hpp>
+
+#include <boost/spirit/home/qi/parser.hpp>
+
+namespace boost { namespace spirit { namespace qi
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // parameterized_nonterminal: parser representing the invocation of a
+    // nonterminal, passing inherited attributes
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Params>
+    struct parameterized_nonterminal
+      : parser<parameterized_nonterminal<Subject, Params> >
+    {
+        parameterized_nonterminal(Subject const& subject, Params const& params)
+          : ref(subject), params(params)
+        {
+        }
+
+        template <typename Context, typename Iterator>
+        struct attribute
+            // Forward to subject.
+          : Subject::template attribute<Context, Iterator> {};
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr) const
+        {
+            // Forward to subject, passing the additional
+            // params argument to parse.
+            return ref.get().parse(first, last, context, skipper, attr, params);
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            // Forward to subject.
+            return ref.get().what(context);
+        }
+
+        boost::reference_wrapper<Subject const> ref;
+        Params params;
+    };
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/qi/nonterminal/detail/parser_binder.hpp b/3rdParty/Boost/src/boost/spirit/home/qi/nonterminal/detail/parser_binder.hpp
new file mode 100644
index 0000000..91bceba
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/qi/nonterminal/detail/parser_binder.hpp
@@ -0,0 +1,87 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_PARSER_BINDER_DECEMBER_05_2008_0516_PM)
+#define BOOST_SPIRIT_PARSER_BINDER_DECEMBER_05_2008_0516_PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/fusion/include/at.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+
+namespace boost { namespace spirit { namespace qi { namespace detail
+{
+    // parser_binder for plain rules
+    template <typename Parser, typename Auto>
+    struct parser_binder
+    {
+        parser_binder(Parser const& p)
+          : p(p) {}
+
+        template <typename Iterator, typename Skipper, typename Context>
+        bool call(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper, mpl::true_) const
+        {
+            // If DeducedAuto is false (semantic actions is present), the 
+            // component's attribute is unused.
+            return p.parse(first, last, context, skipper, unused);
+        }
+
+        template <typename Iterator, typename Skipper, typename Context>
+        bool call(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper, mpl::false_) const
+        {
+            // If DeducedAuto is true (no semantic action), we pass the rule's 
+            // attribute on to the component.
+            return p.parse(first, last, context, skipper
+                , fusion::at_c<0>(context.attributes));
+        }
+
+        template <typename Iterator, typename Skipper, typename Context>
+        bool operator()(
+            Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper) const
+        {
+            // If Auto is false, we need to deduce whether to apply auto rule
+            typedef typename traits::has_semantic_action<Parser>::type auto_rule;
+            return call(first, last, context, skipper, auto_rule());
+        }
+
+        Parser p;
+    };
+
+    // parser_binder for auto rules
+    template <typename Parser>
+    struct parser_binder<Parser, mpl::true_>
+    {
+        parser_binder(Parser const& p)
+          : p(p) {}
+
+        template <typename Iterator, typename Skipper, typename Context>
+        bool operator()(
+            Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper) const
+        {
+            // If Auto is true, we pass the rule's attribute on to the component.
+            return p.parse(first, last, context, skipper
+                , fusion::at_c<0>(context.attributes));
+        }
+
+        Parser p;
+    };
+
+    template <typename Auto, typename Parser>
+    inline parser_binder<Parser, Auto>
+    bind_parser(Parser const& p)
+    {
+        return parser_binder<Parser, Auto>(p);
+    }
+}}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/qi/nonterminal/grammar.hpp b/3rdParty/Boost/src/boost/spirit/home/qi/nonterminal/grammar.hpp
new file mode 100644
index 0000000..7a24586
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/qi/nonterminal/grammar.hpp
@@ -0,0 +1,132 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_GRAMMAR_FEBRUARY_19_2007_0236PM)
+#define BOOST_SPIRIT_GRAMMAR_FEBRUARY_19_2007_0236PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/assert_msg.hpp>
+#include <boost/spirit/home/qi/domain.hpp>
+#include <boost/spirit/home/qi/nonterminal/rule.hpp>
+#include <boost/spirit/home/qi/nonterminal/nonterminal_fwd.hpp>
+#include <boost/spirit/home/qi/reference.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace spirit { namespace qi
+{
+    template <
+        typename Iterator, typename T1, typename T2, typename T3
+      , typename T4>
+    struct grammar
+      : proto::extends<
+            typename proto::terminal<
+                reference<rule<Iterator, T1, T2, T3, T4> const>
+            >::type
+          , grammar<Iterator, T1, T2, T3, T4>
+        >
+      , parser<grammar<Iterator, T1, T2, T3, T4> >
+      , noncopyable
+    {
+        typedef Iterator iterator_type;
+        typedef rule<Iterator, T1, T2, T3, T4> start_type;
+        typedef typename start_type::sig_type sig_type;
+        typedef typename start_type::locals_type locals_type;
+        typedef typename start_type::skipper_type skipper_type;
+        typedef typename start_type::encoding_type encoding_type;
+        typedef grammar<Iterator, T1, T2, T3, T4> base_type;
+        typedef reference<start_type const> reference_;
+        typedef typename proto::terminal<reference_>::type terminal;
+
+        static size_t const params_size = start_type::params_size;
+
+        template <typename Context, typename Iterator_>
+        struct attribute
+        {
+            typedef typename start_type::attr_type type;
+        };
+
+        grammar(
+            start_type const& start
+          , std::string const& name_ = "unnamed-grammar")
+        : proto::extends<terminal, base_type>(terminal::make(reference_(start)))
+        , name_(name_)
+        {}
+
+        // This constructor is used to catch if the start rule is not
+        // compatible with the grammar.
+        template <typename Iterator_,
+            typename T1_, typename T2_, typename T3_, typename T4_>
+        grammar(
+            rule<Iterator_, T1_, T2_, T3_, T4_> const&
+          , std::string const& = "unnamed-grammar")
+        {
+            // If you see the assertion below failing then the start rule
+            // passed to the constructor of the grammar is not compatible with
+            // the grammar (i.e. it uses different template parameters).
+            BOOST_SPIRIT_ASSERT_MSG(
+                (is_same<start_type, rule<Iterator_, T1_, T2_, T3_, T4_> >::value)
+              , incompatible_start_rule, (rule<Iterator_, T1_, T2_, T3_, T4_>));
+        }
+
+        std::string name() const
+        {
+            return name_;
+        }
+
+        void name(std::string const& str)
+        {
+            name_ = str;
+        }
+
+        template <typename Context, typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr) const
+        {
+            return this->proto_base().child0.parse(
+                first, last, context, skipper, attr);
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info(name_);
+        }
+
+        // bring in the operator() overloads
+        start_type const& get_parameterized_subject() const
+        { return this->proto_base().child0.ref.get(); }
+        typedef start_type parameterized_subject_type;
+        #include <boost/spirit/home/qi/nonterminal/detail/fcall.hpp>
+
+        std::string name_;
+
+    };
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <
+        typename IteratorA, typename IteratorB, typename Attribute
+      , typename Context, typename T1, typename T2, typename T3, typename T4>
+    struct handles_container<
+        qi::grammar<IteratorA, T1, T2, T3, T4>, Attribute, Context, IteratorB>
+      : traits::is_container<
+          typename attribute_of<
+              qi::grammar<IteratorA, T1, T2, T3, T4>, Context, IteratorB
+          >::type
+        >
+    {};
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/qi/nonterminal/nonterminal_fwd.hpp b/3rdParty/Boost/src/boost/spirit/home/qi/nonterminal/nonterminal_fwd.hpp
new file mode 100644
index 0000000..9e39345
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/qi/nonterminal/nonterminal_fwd.hpp
@@ -0,0 +1,31 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_QI_NONTERMINAL_FWD_DEC_24_2010_1105PM)
+#define BOOST_SPIRIT_QI_NONTERMINAL_FWD_DEC_24_2010_1105PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/unused.hpp>
+
+namespace boost { namespace spirit { namespace qi
+{
+    // forward declaration only
+    template <
+        typename Iterator, typename T1 = unused_type
+      , typename T2 = unused_type, typename T3 = unused_type
+      , typename T4 = unused_type>
+    struct rule;
+
+    template <
+        typename Iterator, typename T1 = unused_type
+      , typename T2 = unused_type, typename T3 = unused_type
+      , typename T4 = unused_type> 
+    struct grammar;
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/qi/nonterminal/rule.hpp b/3rdParty/Boost/src/boost/spirit/home/qi/nonterminal/rule.hpp
new file mode 100644
index 0000000..321907a
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/qi/nonterminal/rule.hpp
@@ -0,0 +1,413 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_RULE_FEBRUARY_12_2007_1020AM)
+#define BOOST_SPIRIT_RULE_FEBRUARY_12_2007_1020AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/assert.hpp>
+#include <boost/config.hpp>
+#include <boost/function.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+#include <boost/fusion/include/vector.hpp>
+#include <boost/fusion/include/size.hpp>
+#include <boost/fusion/include/make_vector.hpp>
+#include <boost/fusion/include/cons.hpp>
+#include <boost/fusion/include/as_list.hpp>
+#include <boost/fusion/include/as_vector.hpp>
+
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/argument.hpp>
+#include <boost/spirit/home/support/context.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/qi/detail/attributes.hpp>
+#include <boost/spirit/home/support/nonterminal/extract_param.hpp>
+#include <boost/spirit/home/support/nonterminal/locals.hpp>
+#include <boost/spirit/home/qi/reference.hpp>
+#include <boost/spirit/home/qi/nonterminal/detail/parameterized.hpp>
+#include <boost/spirit/home/qi/nonterminal/detail/parser_binder.hpp>
+#include <boost/spirit/home/qi/nonterminal/nonterminal_fwd.hpp>
+#include <boost/spirit/home/qi/skip_over.hpp>
+
+#if defined(BOOST_MSVC)
+# pragma warning(push)
+# pragma warning(disable: 4355) // 'this' : used in base member initializer list warning
+#endif
+
+namespace boost { namespace spirit { namespace qi
+{
+    BOOST_PP_REPEAT(SPIRIT_ATTRIBUTES_LIMIT, SPIRIT_USING_ATTRIBUTE, _)
+
+    using spirit::_pass;
+    using spirit::_val;
+    using spirit::_a;
+    using spirit::_b;
+    using spirit::_c;
+    using spirit::_d;
+    using spirit::_e;
+    using spirit::_f;
+    using spirit::_g;
+    using spirit::_h;
+    using spirit::_i;
+    using spirit::_j;
+
+    using spirit::info;
+    using spirit::locals;
+
+    template <
+        typename Iterator, typename T1, typename T2, typename T3
+      , typename T4>
+    struct rule
+      : proto::extends<
+            typename proto::terminal<
+                reference<rule<Iterator, T1, T2, T3, T4> const>
+            >::type
+          , rule<Iterator, T1, T2, T3, T4>
+        >
+      , parser<rule<Iterator, T1, T2, T3, T4> >
+    {
+        typedef Iterator iterator_type;
+        typedef rule<Iterator, T1, T2, T3, T4> this_type;
+        typedef reference<this_type const> reference_;
+        typedef typename proto::terminal<reference_>::type terminal;
+        typedef proto::extends<terminal, this_type> base_type;
+        typedef mpl::vector<T1, T2, T3, T4> template_params;
+
+        // The rule's locals_type: a sequence of types to be used as local variables
+        typedef typename
+            spirit::detail::extract_locals<template_params>::type
+        locals_type;
+
+        // The rule's skip-parser type
+        typedef typename
+            spirit::detail::extract_component<
+                qi::domain, template_params>::type
+        skipper_type;
+
+        // The rule's signature
+        typedef typename
+            spirit::detail::extract_sig<template_params>::type
+        sig_type;
+
+        // The rule's encoding type
+        typedef typename
+            spirit::detail::extract_encoding<template_params>::type
+        encoding_type;
+
+        // This is the rule's attribute type
+        typedef typename
+            spirit::detail::attr_from_sig<sig_type>::type
+        attr_type;
+        typedef typename add_reference<attr_type>::type attr_reference_type;
+
+        // parameter_types is a sequence of types passed as parameters to the rule
+        typedef typename
+            spirit::detail::params_from_sig<sig_type>::type
+        parameter_types;
+
+        static size_t const params_size =
+            fusion::result_of::size<parameter_types>::type::value;
+
+        typedef context<
+            fusion::cons<attr_reference_type, parameter_types>
+          , locals_type>
+        context_type;
+
+        typedef function<
+            bool(Iterator& first, Iterator const& last
+              , context_type& context
+              , skipper_type const& skipper
+            )>
+        function_type;
+
+        typedef typename
+            mpl::if_<
+                is_same<encoding_type, unused_type>
+              , unused_type
+              , tag::char_code<tag::encoding, encoding_type>
+            >::type
+        encoding_modifier_type;
+
+        explicit rule(std::string const& name_ = "unnamed-rule")
+          : base_type(terminal::make(reference_(*this)))
+          , name_(name_)
+        {
+        }
+
+        rule(rule const& rhs)
+          : base_type(terminal::make(reference_(*this)))
+          , name_(rhs.name_)
+          , f(rhs.f)
+        {
+        }
+
+        template <typename Expr>
+        rule(Expr const& expr, std::string const& name_ = "unnamed-rule")
+          : base_type(terminal::make(reference_(*this)))
+          , name_(name_)
+        {
+            // Report invalid expression error as early as possible.
+            // If you got an error_invalid_expression error message here,
+            // then the expression (expr) is not a valid spirit qi expression.
+            BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Expr);
+
+            f = detail::bind_parser<mpl::false_>(
+                compile<qi::domain>(expr, encoding_modifier_type()));
+        }
+
+        rule& operator=(rule const& rhs)
+        {
+            // The following assertion fires when you try to initialize a rule
+            // from an uninitialized one. Did you mean to refer to the right
+            // hand side rule instead of assigning from it? In this case you
+            // should write lhs = rhs.alias();
+            BOOST_ASSERT(rhs.f && "Did you mean rhs.alias() instead of rhs?");
+
+            f = rhs.f;
+            name_ = rhs.name_;
+            return *this;
+        }
+
+        std::string const& name() const
+        {
+            return name_;
+        }
+
+        void name(std::string const& str)
+        {
+            name_ = str;
+        }
+
+        template <typename Expr>
+        rule& operator=(Expr const& expr)
+        {
+            // Report invalid expression error as early as possible.
+            // If you got an error_invalid_expression error message here,
+            // then the expression (expr) is not a valid spirit qi expression.
+            BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Expr);
+
+            f = detail::bind_parser<mpl::false_>(
+                compile<qi::domain>(expr, encoding_modifier_type()));
+            return *this;
+        }
+
+// VC7.1 has problems to resolve 'rule' without explicit template parameters
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1400)
+        // g++ 3.3 barfs if this is a member function :(
+        template <typename Expr>
+        friend rule& operator%=(rule& r, Expr const& expr)
+        {
+            // Report invalid expression error as early as possible.
+            // If you got an error_invalid_expression error message here,
+            // then the expression (expr) is not a valid spirit qi expression.
+            BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Expr);
+
+            r.f = detail::bind_parser<mpl::true_>(
+                compile<qi::domain>(expr, encoding_modifier_type()));
+            return r;
+        }
+
+        // non-const version needed to suppress proto's %= kicking in
+        template <typename Expr>
+        friend rule& operator%=(rule& r, Expr& expr)
+        {
+            return r %= static_cast<Expr const&>(expr);
+        }
+#else
+        // both friend functions have to be defined out of class as VC7.1
+        // will complain otherwise 
+        template <typename OutputIterator_, typename T1_, typename T2_
+          , typename T3_, typename T4_, typename Expr>
+        friend rule<OutputIterator_, T1_, T2_, T3_, T4_>& operator%=(
+            rule<OutputIterator_, T1_, T2_, T3_, T4_>& r, Expr const& expr);
+
+        // non-const version needed to suppress proto's %= kicking in
+        template <typename OutputIterator_, typename T1_, typename T2_
+          , typename T3_, typename T4_, typename Expr>
+        friend rule<OutputIterator_, T1_, T2_, T3_, T4_>& operator%=(
+            rule<OutputIterator_, T1_, T2_, T3_, T4_>& r, Expr& expr);
+#endif
+
+        template <typename Context, typename Iterator_>
+        struct attribute
+        {
+            typedef attr_type type;
+        };
+
+        template <typename Context, typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& /*context*/, Skipper const& skipper
+          , Attribute& attr) const
+        {
+            if (f)
+            {
+                // do a preskip if this is an implied lexeme
+                if (is_same<skipper_type, unused_type>::value)
+                    qi::skip_over(first, last, skipper);
+
+                typedef traits::make_attribute<attr_type, Attribute> make_attribute;
+
+                // do down-stream transformation, provides attribute for
+                // rhs parser
+                typedef traits::transform_attribute<
+                    typename make_attribute::type, attr_type, domain> 
+                transform;
+
+                typename make_attribute::type made_attr = make_attribute::call(attr);
+                typename transform::type attr_ = transform::pre(made_attr);
+
+                // If you are seeing a compilation error here, you are probably
+                // trying to use a rule or a grammar which has inherited
+                // attributes, without passing values for them.
+                context_type context(attr_);
+
+                // If you are seeing a compilation error here stating that the
+                // forth parameter can't be converted to a required target type
+                // then you are probably trying to use a rule or a grammar with
+                // an incompatible skipper type.
+                if (f(first, last, context, skipper))
+                {
+                    // do up-stream transformation, this integrates the results
+                    // back into the original attribute value, if appropriate
+                    traits::post_transform(attr, attr_);
+                    return true;
+                }
+
+                // inform attribute transformation of failed rhs
+                traits::fail_transform(attr, attr_);
+            }
+            return false;
+        }
+
+        template <typename Context, typename Skipper
+          , typename Attribute, typename Params>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& caller_context, Skipper const& skipper
+          , Attribute& attr, Params const& params) const
+        {
+            if (f)
+            {
+                // do a preskip if this is an implied lexeme
+                if (is_same<skipper_type, unused_type>::value)
+                    qi::skip_over(first, last, skipper);
+
+                typedef traits::make_attribute<attr_type, Attribute> make_attribute;
+
+                // do down-stream transformation, provides attribute for
+                // rhs parser
+                typedef traits::transform_attribute<
+                    typename make_attribute::type, attr_type, domain> 
+                transform;
+
+                typename make_attribute::type made_attr = make_attribute::call(attr);
+                typename transform::type attr_ = transform::pre(made_attr);
+
+                // If you are seeing a compilation error here, you are probably
+                // trying to use a rule or a grammar which has inherited
+                // attributes, passing values of incompatible types for them.
+                context_type context(attr_, params, caller_context);
+
+                // If you are seeing a compilation error here stating that the
+                // forth parameter can't be converted to a required target type
+                // then you are probably trying to use a rule or a grammar with
+                // an incompatible skipper type.
+                if (f(first, last, context, skipper))
+                {
+                    // do up-stream transformation, this integrates the results
+                    // back into the original attribute value, if appropriate
+                    traits::post_transform(attr, attr_);
+                    return true;
+                }
+
+                // inform attribute transformation of failed rhs
+                traits::fail_transform(attr, attr_);
+            }
+            return false;
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info(name_);
+        }
+
+        reference_ alias() const
+        {
+            return reference_(*this);
+        }
+
+        typename proto::terminal<this_type>::type copy() const
+        {
+            typename proto::terminal<this_type>::type result = {*this};
+            return result;
+        }
+
+        // bring in the operator() overloads
+        rule const& get_parameterized_subject() const { return *this; }
+        typedef rule parameterized_subject_type;
+        #include <boost/spirit/home/qi/nonterminal/detail/fcall.hpp>
+
+        std::string name_;
+        function_type f;
+    };
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1400)
+    template <typename OutputIterator_, typename T1_, typename T2_
+      , typename T3_, typename T4_, typename Expr>
+    rule<OutputIterator_, T1_, T2_, T3_, T4_>& operator%=(
+        rule<OutputIterator_, T1_, T2_, T3_, T4_>& r, Expr const& expr)
+    {
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then the expression (expr) is not a valid spirit qi expression.
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Expr);
+
+        typedef typename 
+            rule<OutputIterator_, T1_, T2_, T3_, T4_>::encoding_modifier_type
+        encoding_modifier_type;
+
+        r.f = detail::bind_parser<mpl::true_>(
+            compile<qi::domain>(expr, encoding_modifier_type()));
+        return r;
+    }
+
+    template <typename Iterator_, typename T1_, typename T2_
+      , typename T3_, typename T4_, typename Expr>
+    rule<Iterator_, T1_, T2_, T3_, T4_>& operator%=(
+        rule<Iterator_, T1_, T2_, T3_, T4_>& r, Expr& expr)
+    {
+        return r %= static_cast<Expr const&>(expr);
+    }
+#endif
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <
+        typename IteratorA, typename IteratorB, typename Attribute
+      , typename Context, typename T1, typename T2, typename T3, typename T4>
+    struct handles_container<
+        qi::rule<IteratorA, T1, T2, T3, T4>, Attribute, Context, IteratorB>
+      : traits::is_container<
+          typename attribute_of<
+              qi::rule<IteratorA, T1, T2, T3, T4>, Context, IteratorB
+          >::type
+        >
+    {};
+}}}
+
+#if defined(BOOST_MSVC)
+# pragma warning(pop)
+#endif
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/qi/parse.hpp b/3rdParty/Boost/src/boost/spirit/home/qi/parse.hpp
new file mode 100644
index 0000000..8806fdb
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/qi/parse.hpp
@@ -0,0 +1,197 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_PARSE_APRIL_16_2006_0442PM)
+#define BOOST_SPIRIT_PARSE_APRIL_16_2006_0442PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/detail/parse.hpp>
+#include <boost/concept_check.hpp>
+
+namespace boost { namespace spirit { namespace qi
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Expr>
+    inline bool
+    parse(
+        Iterator& first
+      , Iterator last
+      , Expr const& expr)
+    {
+        // Make sure the iterator is at least a forward_iterator. If you got a 
+        // compilation error here, then you are using an input_iterator while
+        // calling this function, you need to supply at least a 
+        // forward_iterator instead.
+        BOOST_CONCEPT_ASSERT((ForwardIterator<Iterator>));
+
+        return detail::parse_impl<Expr>::call(first, last, expr);
+    }
+
+    template <typename Iterator, typename Expr>
+    inline bool
+    parse(
+        Iterator const& first_
+      , Iterator last
+      , Expr const& expr)
+    {
+        Iterator first = first_;
+        return parse(first, last, expr);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Expr, typename Attr>
+    inline bool
+    parse(
+        Iterator& first
+      , Iterator last
+      , Expr const& expr
+      , Attr& attr)
+    {
+        // Make sure the iterator is at least a forward_iterator. If you got a 
+        // compilation error here, then you are using an input_iterator while
+        // calling this function, you need to supply at least a 
+        // forward_iterator instead.
+        BOOST_CONCEPT_ASSERT((ForwardIterator<Iterator>));
+
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then the expression (expr) is not a valid spirit qi expression.
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Expr);
+
+        return compile<qi::domain>(expr).parse(first, last, unused, unused, attr);
+    }
+
+    template <typename Iterator, typename Expr, typename Attr>
+    inline bool
+    parse(
+        Iterator const& first_
+      , Iterator last
+      , Expr const& expr
+      , Attr& attr)
+    {
+        Iterator first = first_;
+        return parse(first, last, expr, attr);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Expr, typename Skipper>
+    inline bool
+    phrase_parse(
+        Iterator& first
+      , Iterator last
+      , Expr const& expr
+      , Skipper const& skipper
+      , BOOST_SCOPED_ENUM(skip_flag) post_skip = skip_flag::postskip)
+    {
+        // Make sure the iterator is at least a forward_iterator. If you got a 
+        // compilation error here, then you are using an input_iterator while
+        // calling this function, you need to supply at least a 
+        // forward_iterator instead.
+        BOOST_CONCEPT_ASSERT((ForwardIterator<Iterator>));
+
+        return detail::phrase_parse_impl<Expr>::call(
+            first, last, expr, skipper, post_skip);
+    }
+
+    template <typename Iterator, typename Expr, typename Skipper>
+    inline bool
+    phrase_parse(
+        Iterator const& first_
+      , Iterator last
+      , Expr const& expr
+      , Skipper const& skipper
+      , BOOST_SCOPED_ENUM(skip_flag) post_skip = skip_flag::postskip)
+    {
+        Iterator first = first_;
+        return phrase_parse(first, last, expr, skipper, post_skip);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Expr, typename Skipper, typename Attr>
+    inline bool
+    phrase_parse(
+        Iterator& first
+      , Iterator last
+      , Expr const& expr
+      , Skipper const& skipper
+      , BOOST_SCOPED_ENUM(skip_flag) post_skip
+      , Attr& attr)
+    {
+        // Make sure the iterator is at least a forward_iterator. If you got a 
+        // compilation error here, then you are using an input_iterator while
+        // calling this function, you need to supply at least a 
+        // forward_iterator instead.
+        BOOST_CONCEPT_ASSERT((ForwardIterator<Iterator>));
+
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then either the expression (expr) or skipper is not a valid
+        // spirit qi expression.
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Expr);
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Skipper);
+
+        typedef
+            typename result_of::compile<qi::domain, Skipper>::type
+        skipper_type;
+        skipper_type const skipper_ = compile<qi::domain>(skipper);
+
+        if (!compile<qi::domain>(expr).parse(
+                first, last, unused, skipper_, attr))
+            return false;
+
+        if (post_skip == skip_flag::postskip)
+            qi::skip_over(first, last, skipper_);
+        return true;
+    }
+
+    template <typename Iterator, typename Expr, typename Skipper, typename Attr>
+    inline bool
+    phrase_parse(
+        Iterator const& first_
+      , Iterator last
+      , Expr const& expr
+      , Skipper const& skipper
+      , BOOST_SCOPED_ENUM(skip_flag) post_skip
+      , Attr& attr)
+    {
+        Iterator first = first_;
+        return phrase_parse(first, last, expr, skipper, post_skip, attr);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Expr, typename Skipper, typename Attr>
+    inline bool
+    phrase_parse(
+        Iterator& first
+      , Iterator last
+      , Expr const& expr
+      , Skipper const& skipper
+      , Attr& attr)
+    {
+        return phrase_parse(first, last, expr, skipper, skip_flag::postskip, attr);
+    }
+
+    template <typename Iterator, typename Expr, typename Skipper, typename Attr>
+    inline bool
+    phrase_parse(
+        Iterator const& first_
+      , Iterator last
+      , Expr const& expr
+      , Skipper const& skipper
+      , Attr& attr)
+    {
+        Iterator first = first_;
+        return phrase_parse(first, last, expr, skipper, skip_flag::postskip, attr);
+    }
+
+}}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/spirit/home/qi/parser.hpp b/3rdParty/Boost/src/boost/spirit/home/qi/parser.hpp
new file mode 100644
index 0000000..ffd8bc9
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/qi/parser.hpp
@@ -0,0 +1,140 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_PARSER_OCTOBER_16_2008_0254PM)
+#define BOOST_SPIRIT_PARSER_OCTOBER_16_2008_0254PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/mpl/has_xxx.hpp>
+#include <boost/spirit/home/qi/domain.hpp>
+
+namespace boost { namespace spirit { namespace qi
+{
+
+    //[parser_base_parser
+    template <typename Derived>
+    struct parser
+    {
+        struct parser_id;
+        typedef Derived derived_type;
+        typedef qi::domain domain;
+
+        // Requirement: p.parse(f, l, context, skip, attr) -> bool
+        //
+        //  p:          a parser
+        //  f, l:       first/last iterator pair
+        //  context:    enclosing rule context (can be unused_type)
+        //  skip:       skipper (can be unused_type)
+        //  attr:       attribute (can be unused_type)
+
+        // Requirement: p.what(context) -> info
+        //
+        //  p:          a parser
+        //  context:    enclosing rule context (can be unused_type)
+
+        // Requirement: P::template attribute<Ctx, Iter>::type
+        //
+        //  P:          a parser type
+        //  Ctx:        A context type (can be unused_type)
+        //  Iter:       An iterator type (can be unused_type)
+
+        Derived const& derived() const
+        {
+            return *static_cast<Derived const*>(this);
+        }
+    };
+    //]
+
+    template <typename Derived>
+    struct primitive_parser : parser<Derived>
+    {
+        struct primitive_parser_id;
+    };
+
+    template <typename Derived>
+    struct nary_parser : parser<Derived>
+    {
+        struct nary_parser_id;
+
+        // Requirement: p.elements -> fusion sequence
+        //
+        // p:   a composite parser
+
+        // Requirement: P::elements_type -> fusion sequence
+        //
+        // P:   a composite parser type
+    };
+
+    template <typename Derived>
+    struct unary_parser : parser<Derived>
+    {
+        struct unary_parser_id;
+
+        // Requirement: p.subject -> subject parser
+        //
+        // p:   a unary parser
+
+        // Requirement: P::subject_type -> subject parser type
+        //
+        // P:   a unary parser type
+    };
+
+    template <typename Derived>
+    struct binary_parser : parser<Derived>
+    {
+        struct binary_parser_id;
+
+        // Requirement: p.left -> left parser
+        //
+        // p:   a binary parser
+
+        // Requirement: P::left_type -> left parser type
+        //
+        // P:   a binary parser type
+
+        // Requirement: p.right -> right parser
+        //
+        // p:   a binary parser
+
+        // Requirement: P::right_type -> right parser type
+        //
+        // P:   a binary parser type
+    };
+}}}
+
+namespace boost { namespace spirit { namespace traits // classification
+{
+    namespace detail
+    {
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(parser_id)
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(primitive_parser_id)
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(nary_parser_id)
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(unary_parser_id)
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(binary_parser_id)
+    }
+
+    // parser type identification
+    template <typename T>
+    struct is_parser : detail::has_parser_id<T> {};
+
+    template <typename T>
+    struct is_primitive_parser : detail::has_primitive_parser_id<T> {};
+
+    template <typename T>
+    struct is_nary_parser : detail::has_nary_parser_id<T> {};
+
+    template <typename T>
+    struct is_unary_parser : detail::has_unary_parser_id<T> {};
+
+    template <typename T>
+    struct is_binary_parser : detail::has_binary_parser_id<T> {};
+
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/qi/reference.hpp b/3rdParty/Boost/src/boost/spirit/home/qi/reference.hpp
new file mode 100644
index 0000000..f6fcabc
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/qi/reference.hpp
@@ -0,0 +1,69 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_REFERENCE_OCTOBER_31_2008_1218AM)
+#define BOOST_SPIRIT_REFERENCE_OCTOBER_31_2008_1218AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/ref.hpp>
+
+namespace boost { namespace spirit { namespace qi
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // reference is a parser that references another parser (its Subject)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject>
+    struct reference : parser<reference<Subject> >
+    {
+        typedef Subject subject_type;
+
+        reference(Subject& subject)
+          : ref(subject) {}
+
+        template <typename Context, typename Iterator>
+        struct attribute : Subject::template attribute<Context, Iterator> {};
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr) const
+        {
+            return ref.get().parse(first, last, context, skipper, attr);
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            // the reference is transparent (does not add any info)
+            return ref.get().what(context);
+        }
+
+        boost::reference_wrapper<Subject> ref;
+    };
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Attribute, typename Context
+      , typename Iterator>
+    struct handles_container<qi::reference<Subject>, Attribute, Context
+      , Iterator>
+      : handles_container<typename remove_const<Subject>::type
+        , Attribute, Context, Iterator> 
+    {};
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/qi/skip_flag.hpp b/3rdParty/Boost/src/boost/spirit/home/qi/skip_flag.hpp
new file mode 100644
index 0000000..28fd856
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/qi/skip_flag.hpp
@@ -0,0 +1,29 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_SKIP_FLAG_DEC_02_2009_0412PM)
+#define BOOST_SPIRIT_SKIP_FLAG_DEC_02_2009_0412PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/detail/scoped_enum_emulation.hpp>
+
+namespace boost { namespace spirit { namespace qi 
+{
+    ///////////////////////////////////////////////////////////////////////////
+    BOOST_SCOPED_ENUM_START(skip_flag) 
+    { 
+        postskip,           // force post-skipping in phrase_parse()
+        dont_postskip       // inhibit post-skipping in phrase_parse()
+    };
+    BOOST_SCOPED_ENUM_END
+
+}}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/spirit/home/qi/skip_over.hpp b/3rdParty/Boost/src/boost/spirit/home/qi/skip_over.hpp
new file mode 100644
index 0000000..f46b304
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/qi/skip_over.hpp
@@ -0,0 +1,44 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_SKIP_APRIL_16_2006_0625PM)
+#define BOOST_SPIRIT_SKIP_APRIL_16_2006_0625PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/qi/detail/unused_skipper.hpp>
+
+namespace boost { namespace spirit { namespace qi
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Move the /first/ iterator to the first non-matching position
+    // given a skip-parser. The function is a no-op if unused_type is
+    // passed as the skip-parser.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename T>
+    inline void skip_over(Iterator& first, Iterator const& last, T const& skipper)
+    {
+        while (first != last && skipper.parse(first, last, unused, unused, unused))
+            /***/;
+    }
+
+    template <typename Iterator>
+    inline void skip_over(Iterator&, Iterator const&, unused_type)
+    {
+    }
+
+    template <typename Iterator, typename Skipper>
+    inline void skip_over(Iterator&, Iterator const&
+      , detail::unused_skipper<Skipper> const&)
+    {
+    }
+
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/argument.hpp b/3rdParty/Boost/src/boost/spirit/home/support/argument.hpp
new file mode 100644
index 0000000..39b087f
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/argument.hpp
@@ -0,0 +1,145 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_ARGUMENT_FEBRUARY_17_2007_0339PM)
+#define BOOST_SPIRIT_ARGUMENT_FEBRUARY_17_2007_0339PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/preprocessor/arithmetic/inc.hpp>
+#include <boost/spirit/home/phoenix/core/actor.hpp>
+#include <boost/spirit/home/phoenix/core/argument.hpp>
+#include <boost/spirit/home/support/assert_msg.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/fusion/include/size.hpp>
+#include <boost/mpl/size.hpp>
+#include <boost/mpl/at.hpp>
+
+#if !defined(SPIRIT_ARGUMENTS_LIMIT)
+# define SPIRIT_ARGUMENTS_LIMIT PHOENIX_LIMIT
+#endif
+
+#define SPIRIT_DECLARE_ARG(z, n, data)                                          \
+    phoenix::actor<argument<n> > const                                          \
+        BOOST_PP_CAT(_, BOOST_PP_INC(n)) = argument<n>();
+
+#define SPIRIT_USING_ARGUMENT(z, n, data) using spirit::BOOST_PP_CAT(_, n);
+
+namespace boost { namespace spirit
+{
+    namespace result_of
+    {
+        template <typename Sequence, int N>
+        struct get_arg
+        {
+            typedef typename
+                fusion::result_of::size<Sequence>::type
+            sequence_size;
+
+            // report invalid argument not found (N is out of bounds)
+            BOOST_SPIRIT_ASSERT_MSG(
+                (N < sequence_size::value),
+                index_is_out_of_bounds, ());
+
+            typedef typename
+                fusion::result_of::at_c<Sequence, N>::type
+            type;
+
+            static type call(Sequence& seq)
+            {
+                return fusion::at_c<N>(seq);
+            }
+        };
+
+        template <typename Sequence, int N>
+        struct get_arg<Sequence&, N> : get_arg<Sequence, N>
+        {
+        };
+    }
+
+    template <int N, typename T>
+    typename result_of::get_arg<T, N>::type
+    get_arg(T& val)
+    {
+        return result_of::get_arg<T, N>::call(val);
+    }
+
+    struct attribute_context
+    {
+        typedef mpl::true_ no_nullary;
+
+        template <typename Env>
+        struct result
+        {
+            // FIXME: is this remove_const really necessary?
+            typedef typename
+                remove_const<
+                    typename mpl::at_c<typename Env::args_type, 0>::type
+                >::type
+            type;
+        };
+
+        template <typename Env>
+        typename result<Env>::type
+        eval(Env const& env) const
+        {
+            return fusion::at_c<0>(env.args());
+        }
+    };
+
+    template <int N>
+    struct argument
+    {
+        typedef mpl::true_ no_nullary;
+
+        template <typename Env>
+        struct result
+        {
+            typedef typename
+                mpl::at_c<typename Env::args_type, 0>::type
+            arg_type;
+
+            typedef typename result_of::get_arg<arg_type, N>::type type;
+        };
+
+        template <typename Env>
+        typename result<Env>::type
+        eval(Env const& env) const
+        {
+            return get_arg<N>(fusion::at_c<0>(env.args()));
+        }
+    };
+
+    // _0 refers to the whole attribute as generated by the lhs parser
+    phoenix::actor<attribute_context> const _0 = attribute_context();
+
+    // _1, _2, ... refer to the attributes of the single components the lhs
+    // parser is composed of
+    phoenix::actor<argument<0> > const _1 = argument<0>();
+    phoenix::actor<argument<1> > const _2 = argument<1>();
+    phoenix::actor<argument<2> > const _3 = argument<2>();
+
+    // '_pass' may be used to make a match fail in retrospective
+    phoenix::actor<phoenix::argument<2> > const _pass = phoenix::argument<2>();
+
+    //  Bring in the rest of the arguments and attributes (_4 .. _N+1), using PP
+    BOOST_PP_REPEAT_FROM_TO(
+        3, SPIRIT_ARGUMENTS_LIMIT, SPIRIT_DECLARE_ARG, _)
+
+    // You can bring these in with the using directive
+    // without worrying about bringing in too much.
+    namespace labels
+    {
+        BOOST_PP_REPEAT(SPIRIT_ARGUMENTS_LIMIT, SPIRIT_USING_ARGUMENT, _)
+    }
+
+}}
+
+#undef SPIRIT_DECLARE_ARG
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/assert_msg.hpp b/3rdParty/Boost/src/boost/spirit/home/support/assert_msg.hpp
new file mode 100644
index 0000000..db36072
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/assert_msg.hpp
@@ -0,0 +1,31 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_ASSERT_MSG_JUN_23_2009_0836AM)
+#define BOOST_SPIRIT_ASSERT_MSG_JUN_23_2009_0836AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+// Allow to work around the MPL problem in BOOST_MPL_ASSERT_MSG generating
+// multiple definition linker errors for certain compilers (VC++)
+#if BOOST_SPIRIT_DONT_USE_MPL_ASSERT_MSG != 0
+#include <boost/static_assert.hpp>
+#define BOOST_SPIRIT_ASSERT_MSG(Cond, Msg, Types)                             \
+        BOOST_STATIC_ASSERT(Cond)
+#else
+#include <boost/mpl/assert.hpp>
+#define BOOST_SPIRIT_ASSERT_MSG(Cond, Msg, Types)                             \
+        BOOST_MPL_ASSERT_MSG(Cond, Msg, Types)
+#endif
+
+#define BOOST_SPIRIT_ASSERT_MATCH(Domain, Expr)                               \
+        BOOST_SPIRIT_ASSERT_MSG((                                             \
+            boost::spirit::traits::matches<Domain, Expr>::value               \
+        ), error_invalid_expression, (Expr))
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/attributes.hpp b/3rdParty/Boost/src/boost/spirit/home/support/attributes.hpp
new file mode 100644
index 0000000..fc8cd33
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/attributes.hpp
@@ -0,0 +1,1141 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_ATTRIBUTES_JANUARY_29_2007_0954AM)
+#define BOOST_SPIRIT_ATTRIBUTES_JANUARY_29_2007_0954AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/attributes_fwd.hpp>
+#include <boost/spirit/home/support/container.hpp>
+#include <boost/spirit/home/support/detail/hold_any.hpp>
+#include <boost/spirit/home/support/detail/as_variant.hpp>
+#include <boost/optional/optional.hpp>
+#include <boost/fusion/include/transform.hpp>
+#include <boost/fusion/include/filter_if.hpp>
+#include <boost/fusion/include/as_vector.hpp>
+#include <boost/fusion/include/push_front.hpp>
+#include <boost/fusion/include/pop_front.hpp>
+#include <boost/fusion/include/is_sequence.hpp>
+#include <boost/fusion/include/for_each.hpp>
+#include <boost/fusion/include/is_view.hpp>
+#include <boost/foreach.hpp>
+#include <boost/utility/value_init.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/end.hpp>
+#include <boost/mpl/find_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/deref.hpp>
+#include <boost/mpl/distance.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/has_xxx.hpp>
+#include <boost/proto/proto_fwd.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/variant.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <vector>
+#include <utility>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // This file deals with attribute related functions and meta-functions
+    // including generalized attribute transformation utilities for Spirit
+    // components.
+    ///////////////////////////////////////////////////////////////////////////
+
+    template <typename T, typename Enable/* = void*/>
+    struct is_proxy : mpl::false_ {};
+
+    template <typename T>
+    struct is_proxy<T,
+        typename enable_if<
+            mpl::and_<
+                fusion::traits::is_sequence<T>,
+                fusion::traits::is_view<T>
+            >
+        >::type>
+      : mpl::true_ {};
+
+    template <typename T, typename Domain, typename Enable/* = void*/>
+    struct not_is_variant
+      : mpl::true_
+    {};
+
+    template <BOOST_VARIANT_ENUM_PARAMS(typename T), typename Domain>
+    struct not_is_variant<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Domain>
+      : mpl::false_
+    {};
+
+    template <typename T, typename Domain>
+    struct not_is_variant<boost::optional<T>, Domain>
+      : not_is_variant<T, Domain>
+    {};
+
+    // we treat every type as if it where the variant (as this meta function is
+    // invoked for variant types only)
+    template <typename T>
+    struct variant_type
+      : mpl::identity<T>
+    {};
+
+    template <typename T>
+    struct variant_type<boost::optional<T> >
+      : variant_type<T>
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // The compute_compatible_component_variant
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        //  A component is compatible to a given Attribute type if the
+        //  Attribute is the same as the expected type of the component or if 
+        //  it is convertible to the expected type.
+        template <typename Expected, typename Attribute>
+        struct attribute_is_compatible
+          : is_convertible<Attribute, Expected>
+        {};
+
+        template <typename Expected, typename Attribute>
+        struct attribute_is_compatible<Expected, boost::optional<Attribute> >
+          : is_convertible<Attribute, Expected>
+        {};
+
+        template <typename Container>
+        struct is_hold_any_container
+          : is_same<hold_any, typename traits::container_value<Container>::type>
+        {};
+    }
+
+    template <typename Attribute, typename Expected
+      , typename IsNotVariant = mpl::false_, typename Enable = void>
+    struct compute_compatible_component_variant
+      : mpl::or_<
+            traits::detail::attribute_is_compatible<Expected, Attribute>
+          , is_same<hold_any, Expected>
+          , mpl::eval_if<
+                is_container<Expected>
+              , traits::detail::is_hold_any_container<Expected>
+              , mpl::false_> >
+    {};
+
+    namespace detail
+    {
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(types)
+    }
+
+    template <typename Variant, typename Expected>
+    struct compute_compatible_component_variant<Variant, Expected, mpl::false_
+      , typename enable_if<detail::has_types<Variant> >::type>
+    {
+        typedef typename traits::variant_type<Variant>::type variant_type;
+        typedef typename variant_type::types types;
+        typedef typename mpl::end<types>::type end;
+
+        typedef typename
+            mpl::find_if<types, is_same<Expected, mpl::_1> >::type
+        iter;
+
+        typedef typename mpl::distance<
+            typename mpl::begin<types>::type, iter
+        >::type distance;
+
+        // true_ if the attribute matches one of the types in the variant
+        typedef typename mpl::not_<is_same<iter, end> >::type type;
+        enum { value = type::value };
+
+        // return the type in the variant the attribute is compatible with
+        typedef typename
+            mpl::eval_if<type, mpl::deref<iter>, mpl::identity<unused_type> >::type
+        compatible_type;
+
+        // return whether the given type is compatible with the Expected type 
+        static bool is_compatible(int which)
+        {
+            return which == distance::value;
+        }
+    };
+
+    template <typename Expected, typename Attribute, typename Domain>
+    struct compute_compatible_component
+      : compute_compatible_component_variant<Attribute, Expected
+          , typename spirit::traits::not_is_variant<Attribute, Domain>::type> {};
+
+    template <typename Expected, typename Domain>
+    struct compute_compatible_component<Expected, unused_type, Domain>
+      : mpl::false_ {};
+
+    template <typename Attribute, typename Domain>
+    struct compute_compatible_component<unused_type, Attribute, Domain>
+      : mpl::false_ {};
+
+    template <typename Domain>
+    struct compute_compatible_component<unused_type, unused_type, Domain>
+      : mpl::false_ {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // return the type currently stored in the given variant
+    template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
+    struct variant_which<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+    {
+        static int call(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& v)
+        {
+            return v.which();
+        }
+    };
+
+    template <typename T>
+    int which(T const& v)
+    {
+        return variant_which<T>::call(v);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Domain, typename Enable/* = void*/>
+    struct not_is_optional
+      : mpl::true_
+    {};
+
+    template <typename T, typename Domain>
+    struct not_is_optional<boost::optional<T>, Domain>
+      : mpl::false_
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // attribute_of
+    //
+    // Get the component's attribute
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Component
+      , typename Context = unused_type, typename Iterator = unused_type>
+    struct attribute_of
+    {
+        typedef typename Component::template
+            attribute<Context, Iterator>::type type;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // attribute_not_unused
+    //
+    // An mpl meta-function class that determines whether a component's
+    // attribute is not unused.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Context, typename Iterator = unused_type>
+    struct attribute_not_unused
+    {
+        template <typename Component>
+        struct apply
+          : not_is_unused<typename
+                attribute_of<Component, Context, Iterator>::type>
+        {};
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Retrieve the attribute type to use from the given type
+    //
+    // This is needed to extract the correct attribute type from proxy classes
+    // as utilized in FUSION_ADAPT_ADT et. al.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Attribute, typename Enable/* = void*/>
+    struct attribute_type : mpl::identity<Attribute> {};
+
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Retrieve the size of a fusion sequence (compile time)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct sequence_size
+      : fusion::result_of::size<T>
+    {};
+
+    template <>
+    struct sequence_size<unused_type>
+      : mpl::int_<0>
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Retrieve the size of an attribute (runtime)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Attribute, typename Enable/* = void*/>
+    struct attribute_size
+    {
+        typedef std::size_t type;
+
+        static type call(Attribute const&)
+        {
+            return 1;
+        }
+    };
+
+    template <typename Attribute>
+    struct attribute_size<Attribute
+      , typename enable_if<
+            mpl::and_<
+                fusion::traits::is_sequence<Attribute>
+              , mpl::not_<traits::is_container<Attribute> >
+            >
+        >::type
+    > {
+        typedef typename fusion::result_of::size<Attribute>::value_type type;
+
+        static type call(Attribute const& attr)
+        {
+            return fusion::size(attr);
+        }
+    };
+
+    template <typename Attribute>
+    struct attribute_size<Attribute
+      , typename enable_if<
+            mpl::and_<
+                traits::is_container<Attribute>
+              , mpl::not_<traits::is_iterator_range<Attribute> >
+            >
+        >::type
+    > {
+        typedef typename Attribute::size_type type;
+
+        static type call(Attribute const& attr)
+        {
+            return attr.size();
+        }
+    };
+
+    template <typename Iterator>
+    struct attribute_size<iterator_range<Iterator> >
+    {
+        typedef typename boost::detail::iterator_traits<Iterator>::
+            difference_type type;
+
+        static type call(iterator_range<Iterator> const& r)
+        {
+            return boost::detail::distance(r.begin(), r.end());
+        }
+    };
+
+    template <>
+    struct attribute_size<unused_type>
+    {
+        typedef std::size_t type;
+
+        static type call(unused_type)
+        {
+            return 0;
+        }
+    };
+
+    template <typename Attribute>
+    typename attribute_size<Attribute>::type
+    size(Attribute const& attr)
+    {
+        return attribute_size<Attribute>::call(attr);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // pass_attribute
+    //
+    // Determines how we pass attributes to semantic actions. This
+    // may be specialized. By default, all attributes are wrapped in
+    // a fusion sequence, because the attribute has to be treated as being
+    // a single value in any case (even if it actually already is a fusion
+    // sequence in its own).
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Component, typename Attribute, typename Enable/* = void*/>
+    struct pass_attribute
+    {
+        typedef fusion::vector1<Attribute&> type;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Subclass a pass_attribute specialization from this to wrap
+    // the attribute in a tuple only IFF it is not already a fusion tuple.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Attribute, typename Force = mpl::false_>
+    struct wrap_if_not_tuple
+      : mpl::if_<
+            fusion::traits::is_sequence<Attribute>
+          , Attribute&, fusion::vector1<Attribute&> >
+    {};
+
+    template <typename Attribute>
+    struct wrap_if_not_tuple<Attribute, mpl::true_>
+    {
+        typedef fusion::vector1<Attribute&> type;
+    };
+
+    template <>
+    struct wrap_if_not_tuple<unused_type, mpl::false_>
+    {
+        typedef unused_type type;
+    };
+
+    template <>
+    struct wrap_if_not_tuple<unused_type const, mpl::false_>
+    {
+        typedef unused_type type;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // build_optional
+    //
+    // Build a boost::optional from T. Return unused_type if T is unused_type.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct build_optional
+    {
+        typedef optional<T> type;
+    };
+
+    template <>
+    struct build_optional<unused_type>
+    {
+        typedef unused_type type;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // build_std_vector
+    //
+    // Build a std::vector from T. Return unused_type if T is unused_type.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct build_std_vector
+    {
+        typedef std::vector<T> type;
+    };
+
+    template <>
+    struct build_std_vector<unused_type>
+    {
+        typedef unused_type type;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // filter_unused_attributes
+    //
+    // Remove unused_types from a sequence
+    ///////////////////////////////////////////////////////////////////////////
+
+    // Compute the list of all *used* attributes of sub-components
+    // (filter all unused attributes from the list)
+    template <typename Sequence>
+    struct filter_unused_attributes
+      : fusion::result_of::filter_if<Sequence, not_is_unused<mpl::_> >
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // sequence_attribute_transform
+    // 
+    // This transform is invoked for every attribute in a sequence allowing
+    // to modify the attribute type exposed by a component to the enclosing 
+    // sequence component. By default no transformation is performed.
+    /////////////////////////////////////////////////////////////////////////// 
+    template <typename Attribute, typename Domain> 
+    struct sequence_attribute_transform
+      : mpl::identity<Attribute>
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // permutation_attribute_transform
+    // 
+    // This transform is invoked for every attribute in a sequence allowing
+    // to modify the attribute type exposed by a component to the enclosing 
+    // permutation component. By default a build_optional transformation is 
+    // performed.
+    /////////////////////////////////////////////////////////////////////////// 
+    template <typename Attribute, typename Domain> 
+    struct permutation_attribute_transform
+      : traits::build_optional<Attribute>
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // sequential_or_attribute_transform
+    // 
+    // This transform is invoked for every attribute in a sequential_or allowing
+    // to modify the attribute type exposed by a component to the enclosing 
+    // sequential_or component. By default a build_optional transformation is 
+    // performed.
+    /////////////////////////////////////////////////////////////////////////// 
+    template <typename Attribute, typename Domain> 
+    struct sequential_or_attribute_transform
+      : traits::build_optional<Attribute>
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // build_fusion_vector
+    //
+    // Build a fusion vector from a fusion sequence. All unused attributes
+    // are filtered out. If the result is empty after the removal of unused
+    // types, return unused_type. If the input sequence is an unused_type,
+    // also return unused_type.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Sequence>
+    struct build_fusion_vector
+    {
+        // Remove all unused attributes
+        typedef typename
+            filter_unused_attributes<Sequence>::type
+        filtered_attributes;
+
+        // Build a fusion vector from a fusion sequence (Sequence),
+        // But *only if* the sequence is not empty. i.e. if the
+        // sequence is empty, our result will be unused_type.
+
+        typedef typename
+            mpl::eval_if<
+                fusion::result_of::empty<filtered_attributes>
+              , mpl::identity<unused_type>
+              , fusion::result_of::as_vector<filtered_attributes>
+            >::type
+        type;
+    };
+
+    template <>
+    struct build_fusion_vector<unused_type>
+    {
+        typedef unused_type type;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // build_attribute_sequence
+    //
+    // Build a fusion sequence attribute sequence from a sequence of
+    // components. Transform<T>::type is called on each element.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Sequence, typename Context
+      , template <typename T, typename D> class Transform
+      , typename Iterator = unused_type, typename Domain = unused_type>
+    struct build_attribute_sequence
+    {
+        struct element_attribute
+        {
+            template <typename T>
+            struct result;
+
+            template <typename F, typename Element>
+            struct result<F(Element)>
+            {
+                typedef typename
+                    Transform<
+                        typename attribute_of<Element, Context, Iterator>::type
+                      , Domain
+                    >::type
+                type;
+            };
+
+            // never called, but needed for decltype-based result_of (C++0x)
+            template <typename Element>
+            typename result<element_attribute(Element)>::type
+            operator()(Element&) const;
+        };
+
+        // Compute the list of attributes of all sub-components
+        typedef typename
+            fusion::result_of::transform<Sequence, element_attribute>::type
+        type;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // has_no_unused
+    //
+    // Test if there are no unused attributes in Sequence
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Sequence>
+    struct has_no_unused
+      : is_same<
+            typename mpl::find_if<Sequence, is_same<mpl::_, unused_type> >::type
+          , typename mpl::end<Sequence>::type>
+    {};
+
+    namespace detail
+    {
+        template <typename Sequence, bool no_unused
+            , int size = mpl::size<Sequence>::value>
+        struct build_collapsed_variant;
+
+        // N element case, no unused
+        template <typename Sequence, int size>
+        struct build_collapsed_variant<Sequence, true, size>
+            : spirit::detail::as_variant<Sequence> {};
+
+        // N element case with unused
+        template <typename Sequence, int size>
+        struct build_collapsed_variant<Sequence, false, size>
+        {
+            typedef optional<
+                typename spirit::detail::as_variant<
+                    typename fusion::result_of::pop_front<Sequence>::type
+                >::type
+            > type;
+        };
+
+        // 1 element case, no unused
+        template <typename Sequence>
+        struct build_collapsed_variant<Sequence, true, 1>
+            : mpl::front<Sequence> {};
+
+        // 1 element case, with unused
+        template <typename Sequence>
+        struct build_collapsed_variant<Sequence, false, 1>
+            : mpl::front<Sequence> {};
+
+        // 2 element case, no unused
+        template <typename Sequence>
+        struct build_collapsed_variant<Sequence, true, 2>
+            : spirit::detail::as_variant<Sequence> {};
+
+        // 2 element case, with unused
+        template <typename Sequence>
+        struct build_collapsed_variant<Sequence, false, 2>
+        {
+            typedef optional<
+                typename mpl::deref<
+                    typename mpl::next<
+                        typename mpl::begin<Sequence>::type
+                    >::type
+                >::type
+            >
+            type;
+        };
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // alternative_attribute_transform
+    // 
+    // This transform is invoked for every attribute in an alternative allowing
+    // to modify the attribute type exposed by a component to the enclosing 
+    // alternative component. By default no transformation is performed.
+    /////////////////////////////////////////////////////////////////////////// 
+    template <typename Attribute, typename Domain> 
+    struct alternative_attribute_transform
+      : mpl::identity<Attribute>
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // build_variant
+    //
+    // Build a boost::variant from a fusion sequence. build_variant makes sure
+    // that 1) all attributes in the variant are unique 2) puts the unused
+    // attribute, if there is any, to the front and 3) collapses single element
+    // variants, variant<T> to T.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Sequence>
+    struct build_variant
+    {
+        // Remove all unused attributes.
+        typedef typename
+            filter_unused_attributes<Sequence>::type
+        filtered_attributes;
+
+        typedef has_no_unused<Sequence> no_unused;
+
+        // If the original attribute list does not contain any unused
+        // attributes, it is used, otherwise a single unused_type is
+        // pushed to the front of the list. This is to make sure that if
+        // there is an unused_type in the list, it is the first one.
+        typedef typename
+            mpl::eval_if<
+                no_unused,
+                mpl::identity<Sequence>,
+                fusion::result_of::push_front<filtered_attributes, unused_type>
+            >::type
+        attribute_sequence;
+
+        // Make sure each of the types occur only once in the type list
+        typedef typename
+            mpl::fold<
+                attribute_sequence, mpl::vector<>,
+                mpl::if_<
+                    mpl::contains<mpl::_1, mpl::_2>,
+                    mpl::_1, mpl::push_back<mpl::_1, mpl::_2>
+                >
+            >::type
+        no_duplicates;
+
+        // If there is only one type in the list of types we strip off the
+        // variant. IOTW, collapse single element variants, variant<T> to T.
+        // Take note that this also collapses variant<unused_type, T> to T.
+        typedef typename
+            traits::detail::build_collapsed_variant<
+                no_duplicates, no_unused::value>::type
+        type;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  transform_attribute
+    //
+    //  Sometimes the user needs to transform the attribute types for certain
+    //  attributes. This template can be used as a customization point, where
+    //  the user is able specify specific transformation rules for any attribute
+    //  type.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Exposed, typename Transformed, typename Domain
+      , typename Enable/* = void*/>
+    struct transform_attribute;
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Domain, typename Transformed, typename Exposed>
+    typename spirit::result_of::pre_transform<Exposed, Transformed, Domain>::type
+    pre_transform(Exposed& attr BOOST_PROTO_DISABLE_IF_IS_CONST(Exposed))
+    {
+        return transform_attribute<Exposed, Transformed, Domain>::pre(attr);
+    }
+
+    template <typename Domain, typename Transformed, typename Exposed>
+    typename spirit::result_of::pre_transform<Exposed const, Transformed, Domain>::type
+    pre_transform(Exposed const& attr)
+    {
+        return transform_attribute<Exposed const, Transformed, Domain>::pre(attr);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // make_attribute
+    //
+    // All parsers and generators have specific attribute types.
+    // Spirit parsers and generators are passed an attribute; these are either
+    // references to the expected type, or an unused_type -- to flag that we do
+    // not care about the attribute. For semantic actions, however, we need to
+    // have a real value to pass to the semantic action. If the client did not
+    // provide one, we will have to synthesize the value. This class takes care
+    // of that.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Attribute, typename ActualAttribute>
+    struct make_attribute
+    {
+        typedef typename remove_const<Attribute>::type attribute_type;
+        typedef typename
+            mpl::if_<
+                is_same<typename remove_const<ActualAttribute>::type, unused_type>
+              , attribute_type
+              , ActualAttribute&>::type
+        type;
+
+        typedef typename
+            mpl::if_<
+                is_same<typename remove_const<ActualAttribute>::type, unused_type>
+              , attribute_type
+              , ActualAttribute>::type
+        value_type;
+
+        static Attribute call(unused_type)
+        {
+             // synthesize the attribute/parameter
+            return boost::get(value_initialized<attribute_type>());
+        }
+
+        template <typename T>
+        static T& call(T& value)
+        {
+            return value; // just pass the one provided
+        }
+    };
+
+    template <typename Attribute, typename ActualAttribute>
+    struct make_attribute<Attribute&, ActualAttribute>
+      : make_attribute<Attribute, ActualAttribute>
+    {};
+
+    template <typename Attribute, typename ActualAttribute>
+    struct make_attribute<Attribute const&, ActualAttribute>
+      : make_attribute<Attribute const, ActualAttribute>
+    {};
+
+    template <typename ActualAttribute>
+    struct make_attribute<unused_type, ActualAttribute>
+    {
+        typedef unused_type type;
+        typedef unused_type value_type;
+        static unused_type call(unused_type)
+        {
+            return unused;
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // swap_impl
+    //
+    // Swap (with proper handling of unused_types)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename A, typename B>
+    void swap_impl(A& a, B& b)
+    {
+        A temp = a;
+        a = b;
+        b = temp;
+    }
+
+    template <typename T>
+    void swap_impl(T& a, T& b)
+    {
+        using namespace std;
+        swap(a, b);
+    }
+
+    template <typename A>
+    void swap_impl(A& a, unused_type)
+    {
+    }
+
+    template <typename A>
+    void swap_impl(unused_type, A& a)
+    {
+    }
+
+    inline void swap_impl(unused_type, unused_type)
+    {
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Strips single element fusion vectors into its 'naked'
+    //  form: vector<T> --> T
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct strip_single_element_vector
+    {
+        typedef T type;
+    };
+
+    template <typename T>
+    struct strip_single_element_vector<fusion::vector1<T> >
+    {
+        typedef T type;
+    };
+
+    template <typename T>
+    struct strip_single_element_vector<fusion::vector<T> >
+    {
+        typedef T type;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // meta function to return whether the argument is a one element fusion
+    // sequence
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T
+      , bool IsFusionSeq = fusion::traits::is_sequence<T>::value
+      , bool IsProtoExpr = proto::is_expr<T>::value>
+    struct one_element_sequence
+      : mpl::false_
+    {};
+
+    template <typename T>
+    struct one_element_sequence<T, true, false>
+      : mpl::bool_<mpl::size<T>::value == 1>
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // clear
+    //
+    // Clear data efficiently
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    void clear(T& val);
+
+    namespace detail
+    {
+        // this is used by the variant and fusion sequence dispatch
+        struct clear_visitor : static_visitor<>
+        {
+            template <typename T>
+            void operator()(T& val) const
+            {
+                spirit::traits::clear(val);
+            }
+        };
+
+        // default
+        template <typename T>
+        void clear_impl2(T& val, mpl::false_)
+        {
+            val = T();
+        }
+
+        // for fusion sequences
+        template <typename T>
+        void clear_impl2(T& val, mpl::true_)
+        {
+            fusion::for_each(val, clear_visitor());
+        }
+
+        // dispatch default or fusion sequence
+        template <typename T>
+        void clear_impl(T& val, mpl::false_)
+        {
+            clear_impl2(val, fusion::traits::is_sequence<T>());
+        }
+
+        // STL containers
+        template <typename T>
+        void clear_impl(T& val, mpl::true_)
+        {
+            val.clear();
+        }
+    }
+
+    template <typename T, typename Enable/* = void*/>
+    struct clear_value
+    {
+        static void call(T& val)
+        {
+            detail::clear_impl(val, typename is_container<T>::type());
+        }
+    };
+
+    // optionals
+    template <typename T>
+    struct clear_value<optional<T> >
+    {
+        static void call(optional<T>& val)
+        {
+            if (val)
+                val = none_t();   // leave optional uninitialized
+        }
+    };
+
+    // variants
+    template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
+    struct clear_value<variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+    {
+        static void call(variant<BOOST_VARIANT_ENUM_PARAMS(T)>& val)
+        {
+            apply_visitor(detail::clear_visitor(), val);
+        }
+    };
+
+    // iterator range
+    template <typename T>
+    struct clear_value<iterator_range<T> >
+    {
+        static void call(iterator_range<T>& val)
+        {
+            val = iterator_range<T>(val.end(), val.end());
+        }
+    };
+
+    // main dispatch
+    template <typename T>
+    void clear(T& val)
+    {
+        clear_value<T>::call(val);
+    }
+
+    // for unused
+    inline void clear(unused_type)
+    {
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename Out>
+        struct print_fusion_sequence
+        {
+            print_fusion_sequence(Out& out)
+              : out(out), is_first(true) {}
+
+            typedef void result_type;
+
+            template <typename T>
+            void operator()(T const& val) const
+            {
+                if (is_first)
+                    is_first = false;
+                else
+                    out << ", ";
+                spirit::traits::print_attribute(out, val);
+            }
+
+            Out& out;
+            mutable bool is_first;
+        };
+
+        // print elements in a variant
+        template <typename Out>
+        struct print_visitor : static_visitor<>
+        {
+            print_visitor(Out& out) : out(out) {}
+
+            template <typename T>
+            void operator()(T const& val) const
+            {
+                spirit::traits::print_attribute(out, val);
+            }
+
+            Out& out;
+        };
+    }
+
+    template <typename Out, typename T, typename Enable>
+    struct print_attribute_debug
+    {
+        // for plain data types
+        template <typename T_>
+        static void call_impl3(Out& out, T_ const& val, mpl::false_)
+        {
+            out << val;
+        }
+
+        // for fusion data types
+        template <typename T_>
+        static void call_impl3(Out& out, T_ const& val, mpl::true_)
+        {
+            out << '[';
+            fusion::for_each(val, detail::print_fusion_sequence<Out>(out));
+            out << ']';
+        }
+
+        // non-stl container
+        template <typename T_>
+        static void call_impl2(Out& out, T_ const& val, mpl::false_)
+        {
+            call_impl3(out, val, fusion::traits::is_sequence<T_>());
+        }
+
+        // stl container
+        template <typename T_>
+        static void call_impl2(Out& out, T_ const& val, mpl::true_)
+        {
+            out << '[';
+            if (!traits::is_empty(val))
+            {
+                bool first = true;
+                typename container_iterator<T_ const>::type iend = traits::end(val);
+                for (typename container_iterator<T_ const>::type i = traits::begin(val); 
+                     !traits::compare(i, iend); traits::next(i))
+                {
+                    if (!first)
+                        out << ", ";
+                    first = false;
+                    spirit::traits::print_attribute(out, traits::deref(i));
+                }
+            }
+            out << ']';
+        }
+
+        // for variant types
+        template <typename T_>
+        static void call_impl(Out& out, T_ const& val, mpl::false_)
+        {
+            apply_visitor(detail::print_visitor<Out>(out), val);
+        }
+
+        // for non-variant types
+        template <typename T_>
+        static void call_impl(Out& out, T_ const& val, mpl::true_)
+        {
+            call_impl2(out, val, is_container<T_>());
+        }
+
+        // main entry point
+        static void call(Out& out, T const& val)
+        {
+            call_impl(out, val, not_is_variant<T>());
+        }
+    };
+
+    template <typename Out, typename T>
+    struct print_attribute_debug<Out, boost::optional<T> >
+    {
+        static void call(Out& out, boost::optional<T> const& val)
+        {
+            if (val)
+                spirit::traits::print_attribute(out, *val);
+            else
+                out << "[empty]";
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Out, typename T>
+    inline void print_attribute(Out& out, T const& val)
+    {
+        print_attribute_debug<Out, T>::call(out, val);
+    }
+
+    template <typename Out>
+    inline void print_attribute(Out& out, unused_type)
+    {
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // generate debug output for lookahead token (character) stream
+    namespace detail
+    {
+        struct token_printer_debug_for_chars
+        {
+            template<typename Out, typename Char>
+            static void print(Out& o, Char c)
+            {
+                using namespace std;    // allow for ADL to find the proper iscntrl
+
+                if (c == static_cast<Char>('\a'))
+                    o << "\\a";
+                else if (c == static_cast<Char>('\b'))
+                    o << "\\b";
+                else if (c == static_cast<Char>('\f'))
+                    o << "\\f";
+                else if (c == static_cast<Char>('\n'))
+                    o << "\\n";
+                else if (c == static_cast<Char>('\r'))
+                    o << "\\r";
+                else if (c == static_cast<Char>('\t'))
+                    o << "\\t";
+                else if (c == static_cast<Char>('\v'))
+                    o << "\\v";
+                else if (c < 127 && iscntrl(c))
+                    o << "\\" << std::oct << static_cast<int>(c);
+                else
+                    o << static_cast<char>(c);
+            }
+        };
+
+        // for token types where the comparison with char constants wouldn't work
+        struct token_printer_debug
+        {
+            template<typename Out, typename T>
+            static void print(Out& o, T const& val)
+            {
+                o << val;
+            }
+        };
+    }
+
+    template <typename T, typename Enable>
+    struct token_printer_debug
+      : mpl::if_<
+            mpl::and_<
+                is_convertible<T, char>, is_convertible<char, T> >
+          , detail::token_printer_debug_for_chars
+          , detail::token_printer_debug>::type
+    {};
+
+    template <typename Out, typename T>
+    inline void print_token(Out& out, T const& val)
+    {
+        // allow to customize the token printer routine
+        token_printer_debug<T>::print(out, val);
+    }
+}}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace result_of
+{
+    template <typename Exposed, typename Transformed, typename Domain>
+    struct pre_transform
+      : traits::transform_attribute<Exposed, Transformed, Domain>
+    {};
+}}}
+
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/attributes_fwd.hpp b/3rdParty/Boost/src/boost/spirit/home/support/attributes_fwd.hpp
new file mode 100644
index 0000000..601ed76
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/attributes_fwd.hpp
@@ -0,0 +1,278 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c)      2010 Bryce Lelbach
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_ATTRIBUTES_FWD_OCT_01_2009_0715AM)
+#define BOOST_SPIRIT_ATTRIBUTES_FWD_OCT_01_2009_0715AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp>
+#if (defined(__GNUC__) && (__GNUC__ < 4)) || \
+    (defined(__APPLE__) && defined(__INTEL_COMPILER))
+#include <boost/utility/enable_if.hpp>
+#endif
+#include <boost/spirit/home/support/unused.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace result_of
+{
+    // forward declaration only
+    template <typename Exposed, typename Attribute>
+    struct extract_from;
+
+    template <typename T, typename Attribute>
+    struct attribute_as;
+
+    template <typename Exposed, typename Transformed, typename Domain>
+    struct pre_transform;
+
+    template <typename T>
+    struct optional_value;
+
+    template <typename Container>
+    struct begin;
+
+    template <typename Container>
+    struct end;
+
+    template <typename Iterator>
+    struct deref;
+}}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Determine if T is a proxy
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Enable = void>
+    struct is_proxy;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Retrieve the attribute type to use from the given type
+    //
+    // This is needed to extract the correct attribute type from proxy classes
+    // as utilized in FUSION_ADAPT_ADT et. al.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Attribute, typename Enable = void>
+    struct attribute_type;
+    
+    ///////////////////////////////////////////////////////////////////////////
+    // Retrieve the size of a fusion sequence (compile time)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct sequence_size;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Retrieve the size of an attribute (runtime)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Attribute, typename Enable = void>
+    struct attribute_size;
+
+    template <typename Attribute>
+    typename attribute_size<Attribute>::type
+    size(Attribute const& attr);
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Determines how we pass attributes to semantic actions. This
+    // may be specialized. By default, all attributes are wrapped in
+    // a fusion sequence, because the attribute has to be treated as being
+    // a single value in any case (even if it actually already is a fusion
+    // sequence in its own).
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Component, typename Attribute, typename Enable = void>
+    struct pass_attribute;
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Enable = void>
+    struct optional_attribute;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Sometimes the user needs to transform the attribute types for certain
+    // attributes. This template can be used as a customization point, where
+    // the user is able specify specific transformation rules for any attribute
+    // type.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Exposed, typename Transformed, typename Domain
+      , typename Enable = void>
+    struct transform_attribute;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Qi only
+    template <typename Attribute, typename Iterator, typename Enable = void>
+    struct assign_to_attribute_from_iterators;
+
+    template <typename Iterator, typename Attribute>
+    void assign_to(Iterator const& first, Iterator const& last, Attribute& attr);
+
+    template <typename Iterator>
+    void assign_to(Iterator const&, Iterator const&, unused_type);
+
+    template <typename Attribute, typename T, typename Enable = void>
+    struct assign_to_attribute_from_value;
+
+    template <typename Attribute, typename T, typename Enable = void>
+    struct assign_to_container_from_value;
+
+    template <typename T, typename Attribute>
+    void assign_to(T const& val, Attribute& attr);
+
+    template <typename T>
+    void assign_to(T const&, unused_type);
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Karma only
+    template <typename Attribute, typename Exposed, typename Enable = void>
+    struct extract_from_attribute;
+
+    template <typename Exposed, typename Attribute, typename Context>
+    typename spirit::result_of::extract_from<Exposed, Attribute>::type
+    extract_from(Attribute const& attr, Context& ctx
+#if (defined(__GNUC__) && (__GNUC__ < 4)) || \
+    (defined(__APPLE__) && defined(__INTEL_COMPILER))
+      , typename enable_if<traits::not_is_unused<Attribute> >::type* = NULL
+#endif
+    );
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Karma only
+    template <typename T, typename Attribute, typename Enable = void>
+    struct attribute_as;
+
+    template <typename T, typename Attribute>
+    typename spirit::result_of::attribute_as<T, Attribute>::type
+    as(Attribute const& attr);
+    
+    template <typename T, typename Attribute>
+    bool valid_as(Attribute const& attr);
+
+    ///////////////////////////////////////////////////////////////////////////
+    // return the type currently stored in the given variant
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Enable = void>
+    struct variant_which;
+
+    template <typename T>
+    int which(T const& v);
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Determine, whether T is a variant like type
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Domain = unused_type, typename Enable = void>
+    struct not_is_variant;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Determine, whether T is a variant like type
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Domain = unused_type, typename Enable = void>
+    struct not_is_optional;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Clear data efficiently
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Enable = void>
+    struct clear_value;
+
+    ///////////////////////////////////////////////////////////////////////
+    // Determine the value type of the given container type
+    ///////////////////////////////////////////////////////////////////////
+    template <typename Container, typename Enable = void>
+    struct container_value;
+
+    template <typename Container, typename Enable = void>
+    struct container_iterator;
+
+    template <typename T, typename Enable = void>
+    struct is_container;
+    
+    template <typename T, typename Enable = void>
+    struct is_iterator_range;
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Attribute, typename Context = unused_type
+            , typename Iterator = unused_type, typename Enable = void>
+    struct handles_container;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Qi only
+    template <typename Container, typename T, typename Enable = void>
+    struct push_back_container;
+
+    template <typename Container, typename Enable = void>
+    struct is_empty_container;
+
+    template <typename Container, typename Enable = void>
+    struct make_container_attribute;
+
+    ///////////////////////////////////////////////////////////////////////
+    // Determine the iterator type of the given container type
+    // Karma only
+    ///////////////////////////////////////////////////////////////////////
+    template <typename Container, typename Enable = void>
+    struct begin_container;
+
+    template <typename Container, typename Enable = void>
+    struct end_container;
+
+    template <typename Iterator, typename Enable = void>
+    struct deref_iterator;
+
+    template <typename Iterator, typename Enable = void>
+    struct next_iterator;
+
+    template <typename Iterator, typename Enable = void>
+    struct compare_iterators;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Print the given attribute of type T to the stream given as Out
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Out, typename T, typename Enable = void>
+    struct print_attribute_debug;
+
+    template <typename Out, typename T>
+    void print_attribute(Out&, T const&);
+
+    template <typename Out>
+    void print_attribute(Out&, unused_type);
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Char, typename Enable = void>
+    struct token_printer_debug;
+
+    template<typename Out, typename T>
+    void print_token(Out&, T const&);
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Access attributes from a karma symbol table
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Attribute, typename Enable = void>
+    struct symbols_lookup;
+
+    template <typename Attribute, typename T, typename Enable = void>
+    struct symbols_value;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // transform attribute types exposed from compound operator components
+    /////////////////////////////////////////////////////////////////////////// 
+    template <typename Attribute, typename Domain>
+    struct alternative_attribute_transform;
+
+    template <typename Attribute, typename Domain>
+    struct sequence_attribute_transform;
+
+    template <typename Attribute, typename Domain>
+    struct permutation_attribute_transform;
+
+    template <typename Attribute, typename Domain>
+    struct sequential_or_attribute_transform;
+}}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/char_class.hpp b/3rdParty/Boost/src/boost/spirit/home/support/char_class.hpp
new file mode 100644
index 0000000..ff7033a
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/char_class.hpp
@@ -0,0 +1,795 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_CHAR_CLASS_NOVEMBER_10_2006_0907AM)
+#define BOOST_SPIRIT_CHAR_CLASS_NOVEMBER_10_2006_0907AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <string>
+
+#include <boost/proto/proto.hpp>
+#include <boost/config.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/type_traits/is_signed.hpp>
+#include <boost/type_traits/make_unsigned.hpp>
+#include <boost/type_traits/make_signed.hpp>
+
+#if defined(BOOST_MSVC)
+# pragma warning(push)
+# pragma warning(disable: 4800) // 'int' : forcing value to bool 'true' or 'false' warning
+#endif
+
+namespace boost { namespace spirit { namespace detail
+{
+    // Here's the thing... typical encodings (except ASCII) deal with unsigned
+    // integers > 127. ASCII uses only 127. Yet, most char and wchar_t are signed.
+    // Thus, a char with value > 127 is negative (e.g. char 233 is -23). When you
+    // cast this to an unsigned int with 32 bits, you get 4294967273!
+    //
+    // The trick is to cast to an unsigned version of the source char first
+    // before casting to the target. {P.S. Don't worry about the code, the
+    // optimizer will optimize the if-else branches}
+
+    template <typename TargetChar, typename SourceChar>
+    TargetChar cast_char(SourceChar ch)
+    {
+        if (is_signed<TargetChar>::value != is_signed<SourceChar>::value)
+        {
+            if (is_signed<SourceChar>::value)
+            {
+                 // source is signed, target is unsigned
+                typedef typename make_unsigned<SourceChar>::type USourceChar;
+                return TargetChar(USourceChar(ch));
+            }
+            else
+            {
+                 // source is unsigned, target is signed
+                typedef typename make_signed<SourceChar>::type SSourceChar;
+                return TargetChar(SSourceChar(ch));
+            }
+        }
+        else
+        {
+            // source and target has same signedness
+            return TargetChar(ch); // just cast
+        }
+    }
+}}}
+
+namespace boost { namespace spirit { namespace tag
+{
+    struct char_ {};
+    struct string {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // classification tags
+    struct alnum {};
+    struct alpha {};
+    struct digit {};
+    struct xdigit {};
+    struct cntrl {};
+    struct graph {};
+    struct print {};
+    struct punct {};
+    struct space {};
+    struct blank {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // classification/conversion tags
+    struct no_case {};
+    struct lower {};
+    struct upper {};
+    struct lowernum {};
+    struct uppernum {};
+    struct ucs4 {};
+    struct encoding {};
+
+#if defined(BOOST_SPIRIT_UNICODE)
+///////////////////////////////////////////////////////////////////////////
+//  Unicode Major Categories
+///////////////////////////////////////////////////////////////////////////
+    struct letter {};
+    struct mark {};
+    struct number {};
+    struct separator {};
+    struct other {};
+    struct punctuation {};
+    struct symbol {};
+
+///////////////////////////////////////////////////////////////////////////
+//  Unicode General Categories
+///////////////////////////////////////////////////////////////////////////
+    struct uppercase_letter {};
+    struct lowercase_letter {};
+    struct titlecase_letter {};
+    struct modifier_letter {};
+    struct other_letter {};
+
+    struct nonspacing_mark {};
+    struct enclosing_mark {};
+    struct spacing_mark {};
+
+    struct decimal_number {};
+    struct letter_number {};
+    struct other_number {};
+
+    struct space_separator {};
+    struct line_separator {};
+    struct paragraph_separator {};
+
+    struct control {};
+    struct format {};
+    struct private_use {};
+    struct surrogate {};
+    struct unassigned {};
+
+    struct dash_punctuation {};
+    struct open_punctuation {};
+    struct close_punctuation {};
+    struct connector_punctuation {};
+    struct other_punctuation {};
+    struct initial_punctuation {};
+    struct final_punctuation {};
+
+    struct math_symbol {};
+    struct currency_symbol {};
+    struct modifier_symbol {};
+    struct other_symbol {};
+
+///////////////////////////////////////////////////////////////////////////
+//  Unicode Derived Categories
+///////////////////////////////////////////////////////////////////////////
+    struct alphabetic {};
+    struct uppercase {};
+    struct lowercase {};
+    struct white_space {};
+    struct hex_digit {};
+    struct noncharacter_code_point {};
+    struct default_ignorable_code_point {};
+
+///////////////////////////////////////////////////////////////////////////
+//  Unicode Scripts
+///////////////////////////////////////////////////////////////////////////
+    struct arabic {};
+    struct imperial_aramaic {};
+    struct armenian {};
+    struct avestan {};
+    struct balinese {};
+    struct bamum {};
+    struct bengali {};
+    struct bopomofo {};
+    struct braille {};
+    struct buginese {};
+    struct buhid {};
+    struct canadian_aboriginal {};
+    struct carian {};
+    struct cham {};
+    struct cherokee {};
+    struct coptic {};
+    struct cypriot {};
+    struct cyrillic {};
+    struct devanagari {};
+    struct deseret {};
+    struct egyptian_hieroglyphs {};
+    struct ethiopic {};
+    struct georgian {};
+    struct glagolitic {};
+    struct gothic {};
+    struct greek {};
+    struct gujarati {};
+    struct gurmukhi {};
+    struct hangul {};
+    struct han {};
+    struct hanunoo {};
+    struct hebrew {};
+    struct hiragana {};
+    struct katakana_or_hiragana {};
+    struct old_italic {};
+    struct javanese {};
+    struct kayah_li {};
+    struct katakana {};
+    struct kharoshthi {};
+    struct khmer {};
+    struct kannada {};
+    struct kaithi {};
+    struct tai_tham {};
+    struct lao {};
+    struct latin {};
+    struct lepcha {};
+    struct limbu {};
+    struct linear_b {};
+    struct lisu {};
+    struct lycian {};
+    struct lydian {};
+    struct malayalam {};
+    struct mongolian {};
+    struct meetei_mayek {};
+    struct myanmar {};
+    struct nko {};
+    struct ogham {};
+    struct ol_chiki {};
+    struct old_turkic {};
+    struct oriya {};
+    struct osmanya {};
+    struct phags_pa {};
+    struct inscriptional_pahlavi {};
+    struct phoenician {};
+    struct inscriptional_parthian {};
+    struct rejang {};
+    struct runic {};
+    struct samaritan {};
+    struct old_south_arabian {};
+    struct saurashtra {};
+    struct shavian {};
+    struct sinhala {};
+    struct sundanese {};
+    struct syloti_nagri {};
+    struct syriac {};
+    struct tagbanwa {};
+    struct tai_le {};
+    struct new_tai_lue {};
+    struct tamil {};
+    struct tai_viet {};
+    struct telugu {};
+    struct tifinagh {};
+    struct tagalog {};
+    struct thaana {};
+    struct thai {};
+    struct tibetan {};
+    struct ugaritic {};
+    struct vai {};
+    struct old_persian {};
+    struct cuneiform {};
+    struct yi {};
+    struct inherited {};
+    struct common {};
+    struct unknown {};
+#endif
+
+    ///////////////////////////////////////////////////////////////////////////
+    // This composite tag type encodes both the character
+    // set and the specific char tag (used for classification
+    // or conversion). char_code_base and char_encoding_base
+    // can be used to test for modifier membership (see modifier.hpp)
+    template <typename CharClass>
+    struct char_code_base {};
+
+    template <typename CharEncoding>
+    struct char_encoding_base {};
+
+    template <typename CharClass, typename CharEncoding>
+    struct char_code
+        : char_code_base<CharClass>, char_encoding_base<CharEncoding>
+    {
+        typedef CharEncoding char_encoding; // e.g. ascii
+        typedef CharClass char_class;       // e.g. tag::alnum
+    };
+
+}}}
+
+namespace boost { namespace spirit { namespace char_class
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Test characters for classification
+    template <typename CharEncoding>
+    struct classify
+    {
+        typedef typename CharEncoding::char_type char_type;
+
+#define BOOST_SPIRIT_CLASSIFY(name, isname)                                     \
+        template <typename Char>                                                \
+        static bool                                                             \
+        is(tag::name, Char ch)                                                  \
+        {                                                                       \
+            return CharEncoding::isname                                         \
+                BOOST_PREVENT_MACRO_SUBSTITUTION                                \
+                    (detail::cast_char<char_type>(ch));                         \
+        }                                                                       \
+        /***/
+
+        BOOST_SPIRIT_CLASSIFY(char_, ischar)
+        BOOST_SPIRIT_CLASSIFY(alnum, isalnum)
+        BOOST_SPIRIT_CLASSIFY(alpha, isalpha)
+        BOOST_SPIRIT_CLASSIFY(digit, isdigit)
+        BOOST_SPIRIT_CLASSIFY(xdigit, isxdigit)
+        BOOST_SPIRIT_CLASSIFY(cntrl, iscntrl)
+        BOOST_SPIRIT_CLASSIFY(graph, isgraph)
+        BOOST_SPIRIT_CLASSIFY(lower, islower)
+        BOOST_SPIRIT_CLASSIFY(print, isprint)
+        BOOST_SPIRIT_CLASSIFY(punct, ispunct)
+        BOOST_SPIRIT_CLASSIFY(space, isspace)
+        BOOST_SPIRIT_CLASSIFY(blank, isblank)
+        BOOST_SPIRIT_CLASSIFY(upper, isupper)
+
+#undef BOOST_SPIRIT_CLASSIFY
+
+        template <typename Char>
+        static bool
+        is(tag::lowernum, Char ch)
+        {
+            return CharEncoding::islower(detail::cast_char<char_type>(ch)) ||
+                   CharEncoding::isdigit(detail::cast_char<char_type>(ch));
+        }
+
+        template <typename Char>
+        static bool
+        is(tag::uppernum, Char ch)
+        {
+            return CharEncoding::isupper(detail::cast_char<char_type>(ch)) ||
+                   CharEncoding::isdigit(detail::cast_char<char_type>(ch));
+        }
+
+#if defined(BOOST_SPIRIT_UNICODE)
+
+#define BOOST_SPIRIT_UNICODE_CLASSIFY(name)                                     \
+        template <typename Char>                                                \
+        static bool                                                             \
+        is(tag::name, Char ch)                                                  \
+        {                                                                       \
+            return CharEncoding::is_##name(detail::cast_char<char_type>(ch));   \
+        }                                                                       \
+        /***/
+
+///////////////////////////////////////////////////////////////////////////
+//  Unicode Major Categories
+///////////////////////////////////////////////////////////////////////////
+    BOOST_SPIRIT_UNICODE_CLASSIFY(letter)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(mark)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(number)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(separator)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(other)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(punctuation)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(symbol)
+
+///////////////////////////////////////////////////////////////////////////
+//  Unicode General Categories
+///////////////////////////////////////////////////////////////////////////
+    BOOST_SPIRIT_UNICODE_CLASSIFY(uppercase_letter)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(lowercase_letter)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(titlecase_letter)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(modifier_letter)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(other_letter)
+
+    BOOST_SPIRIT_UNICODE_CLASSIFY(nonspacing_mark)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(enclosing_mark)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(spacing_mark)
+
+    BOOST_SPIRIT_UNICODE_CLASSIFY(decimal_number)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(letter_number)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(other_number)
+
+    BOOST_SPIRIT_UNICODE_CLASSIFY(space_separator)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(line_separator)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(paragraph_separator)
+
+    BOOST_SPIRIT_UNICODE_CLASSIFY(control)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(format)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(private_use)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(surrogate)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(unassigned)
+
+    BOOST_SPIRIT_UNICODE_CLASSIFY(dash_punctuation)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(open_punctuation)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(close_punctuation)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(connector_punctuation)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(other_punctuation)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(initial_punctuation)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(final_punctuation)
+
+    BOOST_SPIRIT_UNICODE_CLASSIFY(math_symbol)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(currency_symbol)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(modifier_symbol)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(other_symbol)
+
+///////////////////////////////////////////////////////////////////////////
+//  Unicode Derived Categories
+///////////////////////////////////////////////////////////////////////////
+    BOOST_SPIRIT_UNICODE_CLASSIFY(alphabetic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(uppercase)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(lowercase)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(white_space)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(hex_digit)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(noncharacter_code_point)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(default_ignorable_code_point)
+
+///////////////////////////////////////////////////////////////////////////
+//  Unicode Scripts
+///////////////////////////////////////////////////////////////////////////
+    BOOST_SPIRIT_UNICODE_CLASSIFY(arabic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(imperial_aramaic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(armenian)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(avestan)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(balinese)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(bamum)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(bengali)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(bopomofo)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(braille)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(buginese)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(buhid)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(canadian_aboriginal)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(carian)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(cham)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(cherokee)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(coptic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(cypriot)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(cyrillic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(devanagari)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(deseret)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(egyptian_hieroglyphs)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(ethiopic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(georgian)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(glagolitic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(gothic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(greek)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(gujarati)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(gurmukhi)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(hangul)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(han)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(hanunoo)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(hebrew)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(hiragana)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(katakana_or_hiragana)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(old_italic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(javanese)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(kayah_li)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(katakana)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(kharoshthi)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(khmer)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(kannada)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(kaithi)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(tai_tham)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(lao)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(latin)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(lepcha)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(limbu)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(linear_b)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(lisu)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(lycian)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(lydian)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(malayalam)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(mongolian)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(meetei_mayek)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(myanmar)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(nko)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(ogham)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(ol_chiki)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(old_turkic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(oriya)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(osmanya)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(phags_pa)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(inscriptional_pahlavi)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(phoenician)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(inscriptional_parthian)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(rejang)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(runic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(samaritan)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(old_south_arabian)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(saurashtra)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(shavian)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(sinhala)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(sundanese)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(syloti_nagri)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(syriac)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(tagbanwa)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(tai_le)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(new_tai_lue)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(tamil)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(tai_viet)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(telugu)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(tifinagh)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(tagalog)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(thaana)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(thai)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(tibetan)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(ugaritic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(vai)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(old_persian)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(cuneiform)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(yi)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(inherited)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(common)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(unknown)
+
+#undef BOOST_SPIRIT_UNICODE_CLASSIFY
+#endif
+
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Convert characters
+    template <typename CharEncoding>
+    struct convert
+    {
+        typedef typename CharEncoding::char_type char_type;
+
+        template <typename Char>
+        static Char
+        to(tag::lower, Char ch)
+        {
+            return static_cast<Char>(
+                CharEncoding::tolower(detail::cast_char<char_type>(ch)));
+        }
+
+        template <typename Char>
+        static Char
+        to(tag::upper, Char ch)
+        {
+            return static_cast<Char>(
+                CharEncoding::toupper(detail::cast_char<char_type>(ch)));
+        }
+
+        template <typename Char>
+        static Char
+        to(tag::ucs4, Char ch)
+        {
+            return static_cast<Char>(
+                CharEncoding::toucs4(detail::cast_char<char_type>(ch)));
+        }
+
+        template <typename Char>
+        static Char
+        to(unused_type, Char ch)
+        {
+            return ch;
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Info on character classification
+    template <typename CharEncoding>
+    struct what
+    {
+#define BOOST_SPIRIT_CLASSIFY_WHAT(name, isname)                                \
+        static char const* is(tag::name)                                        \
+        {                                                                       \
+            return isname;                                                      \
+        }                                                                       \
+        /***/
+
+        BOOST_SPIRIT_CLASSIFY_WHAT(char_, "char")
+        BOOST_SPIRIT_CLASSIFY_WHAT(alnum, "alnum")
+        BOOST_SPIRIT_CLASSIFY_WHAT(alpha, "alpha")
+        BOOST_SPIRIT_CLASSIFY_WHAT(digit, "digit")
+        BOOST_SPIRIT_CLASSIFY_WHAT(xdigit, "xdigit")
+        BOOST_SPIRIT_CLASSIFY_WHAT(cntrl, "cntrl")
+        BOOST_SPIRIT_CLASSIFY_WHAT(graph, "graph")
+        BOOST_SPIRIT_CLASSIFY_WHAT(lower, "lower")
+        BOOST_SPIRIT_CLASSIFY_WHAT(lowernum, "lowernum")
+        BOOST_SPIRIT_CLASSIFY_WHAT(print, "print")
+        BOOST_SPIRIT_CLASSIFY_WHAT(punct, "punct")
+        BOOST_SPIRIT_CLASSIFY_WHAT(space, "space")
+        BOOST_SPIRIT_CLASSIFY_WHAT(blank, "blank")
+        BOOST_SPIRIT_CLASSIFY_WHAT(upper, "upper")
+        BOOST_SPIRIT_CLASSIFY_WHAT(uppernum, "uppernum")
+        BOOST_SPIRIT_CLASSIFY_WHAT(ucs4, "ucs4")
+
+#undef BOOST_SPIRIT_CLASSIFY_WHAT
+
+#if defined(BOOST_SPIRIT_UNICODE)
+
+#define BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(name)                                \
+        static char const* is(tag::name)                                        \
+        {                                                                       \
+            return BOOST_PP_STRINGIZE(name);                                    \
+        }                                                                       \
+        /***/
+
+///////////////////////////////////////////////////////////////////////////
+//  Unicode Major Categories
+///////////////////////////////////////////////////////////////////////////
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(letter)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(mark)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(number)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(separator)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(other)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(punctuation)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(symbol)
+
+///////////////////////////////////////////////////////////////////////////
+//  Unicode General Categories
+///////////////////////////////////////////////////////////////////////////
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(uppercase_letter)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(lowercase_letter)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(titlecase_letter)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(modifier_letter)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(other_letter)
+
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(nonspacing_mark)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(enclosing_mark)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(spacing_mark)
+
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(decimal_number)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(letter_number)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(other_number)
+
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(space_separator)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(line_separator)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(paragraph_separator)
+
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(control)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(format)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(private_use)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(surrogate)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(unassigned)
+
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(dash_punctuation)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(open_punctuation)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(close_punctuation)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(connector_punctuation)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(other_punctuation)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(initial_punctuation)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(final_punctuation)
+
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(math_symbol)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(currency_symbol)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(modifier_symbol)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(other_symbol)
+
+///////////////////////////////////////////////////////////////////////////
+//  Unicode Derived Categories
+///////////////////////////////////////////////////////////////////////////
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(alphabetic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(uppercase)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(lowercase)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(white_space)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(hex_digit)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(noncharacter_code_point)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(default_ignorable_code_point)
+
+///////////////////////////////////////////////////////////////////////////
+//  Unicode Scripts
+///////////////////////////////////////////////////////////////////////////
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(arabic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(imperial_aramaic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(armenian)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(avestan)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(balinese)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(bamum)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(bengali)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(bopomofo)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(braille)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(buginese)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(buhid)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(canadian_aboriginal)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(carian)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(cham)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(cherokee)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(coptic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(cypriot)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(cyrillic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(devanagari)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(deseret)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(egyptian_hieroglyphs)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(ethiopic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(georgian)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(glagolitic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(gothic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(greek)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(gujarati)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(gurmukhi)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(hangul)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(han)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(hanunoo)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(hebrew)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(hiragana)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(katakana_or_hiragana)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(old_italic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(javanese)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(kayah_li)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(katakana)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(kharoshthi)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(khmer)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(kannada)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(kaithi)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tai_tham)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(lao)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(latin)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(lepcha)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(limbu)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(linear_b)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(lisu)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(lycian)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(lydian)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(malayalam)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(mongolian)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(meetei_mayek)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(myanmar)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(nko)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(ogham)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(ol_chiki)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(old_turkic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(oriya)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(osmanya)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(phags_pa)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(inscriptional_pahlavi)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(phoenician)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(inscriptional_parthian)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(rejang)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(runic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(samaritan)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(old_south_arabian)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(saurashtra)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(shavian)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(sinhala)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(sundanese)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(syloti_nagri)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(syriac)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tagbanwa)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tai_le)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(new_tai_lue)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tamil)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tai_viet)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(telugu)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tifinagh)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tagalog)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(thaana)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(thai)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tibetan)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(ugaritic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(vai)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(old_persian)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(cuneiform)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(yi)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(inherited)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(common)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(unknown)
+
+#undef BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT
+#endif
+
+    };
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // This meta-function evaluates to mpl::true_ if the function
+    // char_encoding::ischar() needs to be called to ensure correct matching.
+    // This happens mainly if the character type returned from the underlying
+    // iterator is larger than the character type of the used character
+    // encoding. Additionally, this meta-function provides a customization
+    // point for the lexer library to enforce this behavior while parsing
+    // a token stream.
+    template <typename Char, typename BaseChar>
+    struct mustcheck_ischar
+      : mpl::bool_<(sizeof(Char) > sizeof(BaseChar)) ? true : false> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // The following template calls char_encoding::ischar, if necessary
+    template <typename CharParam, typename CharEncoding
+      , bool MustCheck = mustcheck_ischar<
+            CharParam, typename CharEncoding::char_type>::value>
+    struct ischar
+    {
+        static bool call(CharParam)
+        {
+            return true;
+        }
+    };
+
+    template <typename CharParam, typename CharEncoding>
+    struct ischar<CharParam, CharEncoding, true>
+    {
+        static bool call(CharParam const& ch)
+        {
+            return CharEncoding::ischar(int(ch));
+        }
+    };
+
+}}}
+
+#if defined(BOOST_MSVC)
+# pragma warning(pop)
+#endif
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/char_encoding/ascii.hpp b/3rdParty/Boost/src/boost/spirit/home/support/char_encoding/ascii.hpp
new file mode 100644
index 0000000..9b8a72f
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/char_encoding/ascii.hpp
@@ -0,0 +1,313 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_ASCII_APRIL_26_2006_1106PM)
+#define BOOST_SPIRIT_ASCII_APRIL_26_2006_1106PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <climits>
+#include <boost/assert.hpp>
+#include <boost/cstdint.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+// constants used to classify the single characters
+///////////////////////////////////////////////////////////////////////////////
+#define BOOST_CC_DIGIT    0x0001
+#define BOOST_CC_XDIGIT   0x0002
+#define BOOST_CC_ALPHA    0x0004
+#define BOOST_CC_CTRL     0x0008
+#define BOOST_CC_LOWER    0x0010
+#define BOOST_CC_UPPER    0x0020
+#define BOOST_CC_SPACE    0x0040
+#define BOOST_CC_PUNCT    0x0080
+
+namespace boost { namespace spirit { namespace char_encoding
+{
+    // The detection of isgraph(), isprint() and isblank() is done programmatically
+    // to keep the character type table small. Additionally, these functions are
+    // rather seldom used and the programmatic detection is very simple.
+
+    ///////////////////////////////////////////////////////////////////////////
+    // ASCII character classification table
+    ///////////////////////////////////////////////////////////////////////////
+    const unsigned char ascii_char_types[] =
+    {
+        /* NUL   0   0 */   BOOST_CC_CTRL,
+        /* SOH   1   1 */   BOOST_CC_CTRL,
+        /* STX   2   2 */   BOOST_CC_CTRL,
+        /* ETX   3   3 */   BOOST_CC_CTRL,
+        /* EOT   4   4 */   BOOST_CC_CTRL,
+        /* ENQ   5   5 */   BOOST_CC_CTRL,
+        /* ACK   6   6 */   BOOST_CC_CTRL,
+        /* BEL   7   7 */   BOOST_CC_CTRL,
+        /* BS    8   8 */   BOOST_CC_CTRL,
+        /* HT    9   9 */   BOOST_CC_CTRL|BOOST_CC_SPACE,
+        /* NL   10   a */   BOOST_CC_CTRL|BOOST_CC_SPACE,
+        /* VT   11   b */   BOOST_CC_CTRL|BOOST_CC_SPACE,
+        /* NP   12   c */   BOOST_CC_CTRL|BOOST_CC_SPACE,
+        /* CR   13   d */   BOOST_CC_CTRL|BOOST_CC_SPACE,
+        /* SO   14   e */   BOOST_CC_CTRL,
+        /* SI   15   f */   BOOST_CC_CTRL,
+        /* DLE  16  10 */   BOOST_CC_CTRL,
+        /* DC1  17  11 */   BOOST_CC_CTRL,
+        /* DC2  18  12 */   BOOST_CC_CTRL,
+        /* DC3  19  13 */   BOOST_CC_CTRL,
+        /* DC4  20  14 */   BOOST_CC_CTRL,
+        /* NAK  21  15 */   BOOST_CC_CTRL,
+        /* SYN  22  16 */   BOOST_CC_CTRL,
+        /* ETB  23  17 */   BOOST_CC_CTRL,
+        /* CAN  24  18 */   BOOST_CC_CTRL,
+        /* EM   25  19 */   BOOST_CC_CTRL,
+        /* SUB  26  1a */   BOOST_CC_CTRL,
+        /* ESC  27  1b */   BOOST_CC_CTRL,
+        /* FS   28  1c */   BOOST_CC_CTRL,
+        /* GS   29  1d */   BOOST_CC_CTRL,
+        /* RS   30  1e */   BOOST_CC_CTRL,
+        /* US   31  1f */   BOOST_CC_CTRL,
+        /* SP   32  20 */   BOOST_CC_SPACE,
+        /*  !   33  21 */   BOOST_CC_PUNCT,
+        /*  "   34  22 */   BOOST_CC_PUNCT,
+        /*  #   35  23 */   BOOST_CC_PUNCT,
+        /*  $   36  24 */   BOOST_CC_PUNCT,
+        /*  %   37  25 */   BOOST_CC_PUNCT,
+        /*  &   38  26 */   BOOST_CC_PUNCT,
+        /*  '   39  27 */   BOOST_CC_PUNCT,
+        /*  (   40  28 */   BOOST_CC_PUNCT,
+        /*  )   41  29 */   BOOST_CC_PUNCT,
+        /*  *   42  2a */   BOOST_CC_PUNCT,
+        /*  +   43  2b */   BOOST_CC_PUNCT,
+        /*  ,   44  2c */   BOOST_CC_PUNCT,
+        /*  -   45  2d */   BOOST_CC_PUNCT,
+        /*  .   46  2e */   BOOST_CC_PUNCT,
+        /*  /   47  2f */   BOOST_CC_PUNCT,
+        /*  0   48  30 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
+        /*  1   49  31 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
+        /*  2   50  32 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
+        /*  3   51  33 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
+        /*  4   52  34 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
+        /*  5   53  35 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
+        /*  6   54  36 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
+        /*  7   55  37 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
+        /*  8   56  38 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
+        /*  9   57  39 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
+        /*  :   58  3a */   BOOST_CC_PUNCT,
+        /*  ;   59  3b */   BOOST_CC_PUNCT,
+        /*  <   60  3c */   BOOST_CC_PUNCT,
+        /*  =   61  3d */   BOOST_CC_PUNCT,
+        /*  >   62  3e */   BOOST_CC_PUNCT,
+        /*  ?   63  3f */   BOOST_CC_PUNCT,
+        /*  @   64  40 */   BOOST_CC_PUNCT,
+        /*  A   65  41 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_UPPER,
+        /*  B   66  42 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_UPPER,
+        /*  C   67  43 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_UPPER,
+        /*  D   68  44 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_UPPER,
+        /*  E   69  45 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_UPPER,
+        /*  F   70  46 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_UPPER,
+        /*  G   71  47 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  H   72  48 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  I   73  49 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  J   74  4a */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  K   75  4b */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  L   76  4c */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  M   77  4d */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  N   78  4e */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  O   79  4f */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  P   80  50 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  Q   81  51 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  R   82  52 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  S   83  53 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  T   84  54 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  U   85  55 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  V   86  56 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  W   87  57 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  X   88  58 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  Y   89  59 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  Z   90  5a */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  [   91  5b */   BOOST_CC_PUNCT,
+        /*  \   92  5c */   BOOST_CC_PUNCT,
+        /*  ]   93  5d */   BOOST_CC_PUNCT,
+        /*  ^   94  5e */   BOOST_CC_PUNCT,
+        /*  _   95  5f */   BOOST_CC_PUNCT,
+        /*  `   96  60 */   BOOST_CC_PUNCT,
+        /*  a   97  61 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_LOWER,
+        /*  b   98  62 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_LOWER,
+        /*  c   99  63 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_LOWER,
+        /*  d  100  64 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_LOWER,
+        /*  e  101  65 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_LOWER,
+        /*  f  102  66 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_LOWER,
+        /*  g  103  67 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  h  104  68 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  i  105  69 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  j  106  6a */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  k  107  6b */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  l  108  6c */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  m  109  6d */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  n  110  6e */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  o  111  6f */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  p  112  70 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  q  113  71 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  r  114  72 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  s  115  73 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  t  116  74 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  u  117  75 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  v  118  76 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  w  119  77 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  x  120  78 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  y  121  79 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  z  122  7a */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  {  123  7b */   BOOST_CC_PUNCT,
+        /*  |  124  7c */   BOOST_CC_PUNCT,
+        /*  }  125  7d */   BOOST_CC_PUNCT,
+        /*  ~  126  7e */   BOOST_CC_PUNCT,
+        /* DEL 127  7f */   BOOST_CC_CTRL,
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Test characters for specified conditions (using ASCII)
+    ///////////////////////////////////////////////////////////////////////////
+    struct ascii
+    {
+        typedef char char_type;
+
+        static bool
+        isascii_(int ch)
+        {
+            return 0 == (ch & ~0x7f);
+        }
+
+        static bool
+        ischar(int ch)
+        {
+            return isascii_(ch);
+        }
+
+        static int
+        isalnum(int ch)
+        {
+            BOOST_ASSERT(isascii_(ch));
+            return (ascii_char_types[ch] & BOOST_CC_ALPHA)
+                || (ascii_char_types[ch] & BOOST_CC_DIGIT);
+        }
+
+        static int
+        isalpha(int ch)
+        {
+            BOOST_ASSERT(isascii_(ch));
+            return (ascii_char_types[ch] & BOOST_CC_ALPHA);
+        }
+
+        static int
+        isdigit(int ch)
+        {
+            BOOST_ASSERT(isascii_(ch));
+            return (ascii_char_types[ch] & BOOST_CC_DIGIT);
+        }
+
+        static int
+        isxdigit(int ch)
+        {
+            BOOST_ASSERT(isascii_(ch));
+            return (ascii_char_types[ch] & BOOST_CC_XDIGIT);
+        }
+
+        static int
+        iscntrl(int ch)
+        {
+            BOOST_ASSERT(isascii_(ch));
+            return (ascii_char_types[ch] & BOOST_CC_CTRL);
+        }
+
+        static int
+        isgraph(int ch)
+        {
+            return ('\x21' <= ch && ch <= '\x7e');
+        }
+
+        static int
+        islower(int ch)
+        {
+            BOOST_ASSERT(isascii_(ch));
+            return (ascii_char_types[ch] & BOOST_CC_LOWER);
+        }
+
+        static int
+        isprint(int ch)
+        {
+            return ('\x20' <= ch && ch <= '\x7e');
+        }
+
+        static int
+        ispunct(int ch)
+        {
+            BOOST_ASSERT(isascii_(ch));
+            return (ascii_char_types[ch] & BOOST_CC_PUNCT);
+        }
+
+        static int
+        isspace(int ch)
+        {
+            BOOST_ASSERT(isascii_(ch));
+            return (ascii_char_types[ch] & BOOST_CC_SPACE);
+        }
+
+        static int
+        isblank BOOST_PREVENT_MACRO_SUBSTITUTION (int ch)
+        {
+            return ('\x09' == ch || '\x20' == ch);
+        }
+
+        static int
+        isupper(int ch)
+        {
+            BOOST_ASSERT(isascii_(ch));
+            return (ascii_char_types[ch] & BOOST_CC_UPPER);
+        }
+
+        ///////////////////////////////////////////////////////////////////////
+        //  Simple character conversions
+        ///////////////////////////////////////////////////////////////////////
+
+        static int
+        tolower(int ch)
+        {
+            BOOST_ASSERT(isascii_(ch));
+            return isupper(ch) ? (ch - 'A' + 'a') : ch;
+        }
+
+        static int
+        toupper(int ch)
+        {
+            BOOST_ASSERT(isascii_(ch));
+            return islower(ch) ? (ch - 'a' + 'A') : ch;
+        }
+
+        static ::boost::uint32_t
+        toucs4(int ch)
+        {
+            return ch;
+        }
+    };
+
+}}}
+
+///////////////////////////////////////////////////////////////////////////////
+// undefine macros
+///////////////////////////////////////////////////////////////////////////////
+#undef BOOST_CC_DIGIT
+#undef BOOST_CC_XDIGIT
+#undef BOOST_CC_ALPHA
+#undef BOOST_CC_CTRL
+#undef BOOST_CC_LOWER
+#undef BOOST_CC_UPPER
+#undef BOOST_CC_PUNCT
+#undef BOOST_CC_SPACE
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/char_encoding/iso8859_1.hpp b/3rdParty/Boost/src/boost/spirit/home/support/char_encoding/iso8859_1.hpp
new file mode 100644
index 0000000..37d2e6f
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/char_encoding/iso8859_1.hpp
@@ -0,0 +1,711 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_ISO8859_1_APRIL_26_2006_1106PM)
+#define BOOST_SPIRIT_ISO8859_1_APRIL_26_2006_1106PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <climits>
+#include <boost/assert.hpp>
+#include <boost/cstdint.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+// constants used to classify the single characters
+///////////////////////////////////////////////////////////////////////////////
+#define BOOST_CC_DIGIT    0x0001
+#define BOOST_CC_XDIGIT   0x0002
+#define BOOST_CC_ALPHA    0x0004
+#define BOOST_CC_CTRL     0x0008
+#define BOOST_CC_LOWER    0x0010
+#define BOOST_CC_UPPER    0x0020
+#define BOOST_CC_SPACE    0x0040
+#define BOOST_CC_PUNCT    0x0080
+
+namespace boost { namespace spirit { namespace char_encoding
+{
+    // The detection of isgraph(), isprint() and isblank() is done programmatically
+    // to keep the character type table small. Additionally, these functions are
+    // rather seldom used and the programmatic detection is very simple.
+
+    ///////////////////////////////////////////////////////////////////////////
+    // ISO 8859-1 character classification table
+    //
+    // the comments intentionally contain non-ascii characters
+    // boostinspect:noascii
+    ///////////////////////////////////////////////////////////////////////////
+    const unsigned char iso8859_1_char_types[] =
+    {
+        /* NUL   0   0 */   BOOST_CC_CTRL,
+        /* SOH   1   1 */   BOOST_CC_CTRL,
+        /* STX   2   2 */   BOOST_CC_CTRL,
+        /* ETX   3   3 */   BOOST_CC_CTRL,
+        /* EOT   4   4 */   BOOST_CC_CTRL,
+        /* ENQ   5   5 */   BOOST_CC_CTRL,
+        /* ACK   6   6 */   BOOST_CC_CTRL,
+        /* BEL   7   7 */   BOOST_CC_CTRL,
+        /* BS    8   8 */   BOOST_CC_CTRL,
+        /* HT    9   9 */   BOOST_CC_CTRL|BOOST_CC_SPACE,
+        /* NL   10   a */   BOOST_CC_CTRL|BOOST_CC_SPACE,
+        /* VT   11   b */   BOOST_CC_CTRL|BOOST_CC_SPACE,
+        /* NP   12   c */   BOOST_CC_CTRL|BOOST_CC_SPACE,
+        /* CR   13   d */   BOOST_CC_CTRL|BOOST_CC_SPACE,
+        /* SO   14   e */   BOOST_CC_CTRL,
+        /* SI   15   f */   BOOST_CC_CTRL,
+        /* DLE  16  10 */   BOOST_CC_CTRL,
+        /* DC1  17  11 */   BOOST_CC_CTRL,
+        /* DC2  18  12 */   BOOST_CC_CTRL,
+        /* DC3  19  13 */   BOOST_CC_CTRL,
+        /* DC4  20  14 */   BOOST_CC_CTRL,
+        /* NAK  21  15 */   BOOST_CC_CTRL,
+        /* SYN  22  16 */   BOOST_CC_CTRL,
+        /* ETB  23  17 */   BOOST_CC_CTRL,
+        /* CAN  24  18 */   BOOST_CC_CTRL,
+        /* EM   25  19 */   BOOST_CC_CTRL,
+        /* SUB  26  1a */   BOOST_CC_CTRL,
+        /* ESC  27  1b */   BOOST_CC_CTRL,
+        /* FS   28  1c */   BOOST_CC_CTRL,
+        /* GS   29  1d */   BOOST_CC_CTRL,
+        /* RS   30  1e */   BOOST_CC_CTRL,
+        /* US   31  1f */   BOOST_CC_CTRL,
+        /* SP   32  20 */   BOOST_CC_SPACE,
+        /*  !   33  21 */   BOOST_CC_PUNCT,
+        /*  "   34  22 */   BOOST_CC_PUNCT,
+        /*  #   35  23 */   BOOST_CC_PUNCT,
+        /*  $   36  24 */   BOOST_CC_PUNCT,
+        /*  %   37  25 */   BOOST_CC_PUNCT,
+        /*  &   38  26 */   BOOST_CC_PUNCT,
+        /*  '   39  27 */   BOOST_CC_PUNCT,
+        /*  (   40  28 */   BOOST_CC_PUNCT,
+        /*  )   41  29 */   BOOST_CC_PUNCT,
+        /*  *   42  2a */   BOOST_CC_PUNCT,
+        /*  +   43  2b */   BOOST_CC_PUNCT,
+        /*  ,   44  2c */   BOOST_CC_PUNCT,
+        /*  -   45  2d */   BOOST_CC_PUNCT,
+        /*  .   46  2e */   BOOST_CC_PUNCT,
+        /*  /   47  2f */   BOOST_CC_PUNCT,
+        /*  0   48  30 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
+        /*  1   49  31 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
+        /*  2   50  32 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
+        /*  3   51  33 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
+        /*  4   52  34 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
+        /*  5   53  35 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
+        /*  6   54  36 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
+        /*  7   55  37 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
+        /*  8   56  38 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
+        /*  9   57  39 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
+        /*  :   58  3a */   BOOST_CC_PUNCT,
+        /*  ;   59  3b */   BOOST_CC_PUNCT,
+        /*  <   60  3c */   BOOST_CC_PUNCT,
+        /*  =   61  3d */   BOOST_CC_PUNCT,
+        /*  >   62  3e */   BOOST_CC_PUNCT,
+        /*  ?   63  3f */   BOOST_CC_PUNCT,
+        /*  @   64  40 */   BOOST_CC_PUNCT,
+        /*  A   65  41 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_UPPER,
+        /*  B   66  42 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_UPPER,
+        /*  C   67  43 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_UPPER,
+        /*  D   68  44 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_UPPER,
+        /*  E   69  45 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_UPPER,
+        /*  F   70  46 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_UPPER,
+        /*  G   71  47 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  H   72  48 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  I   73  49 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  J   74  4a */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  K   75  4b */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  L   76  4c */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  M   77  4d */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  N   78  4e */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  O   79  4f */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  P   80  50 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  Q   81  51 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  R   82  52 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  S   83  53 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  T   84  54 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  U   85  55 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  V   86  56 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  W   87  57 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  X   88  58 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  Y   89  59 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  Z   90  5a */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  [   91  5b */   BOOST_CC_PUNCT,
+        /*  \   92  5c */   BOOST_CC_PUNCT,
+        /*  ]   93  5d */   BOOST_CC_PUNCT,
+        /*  ^   94  5e */   BOOST_CC_PUNCT,
+        /*  _   95  5f */   BOOST_CC_PUNCT,
+        /*  `   96  60 */   BOOST_CC_PUNCT,
+        /*  a   97  61 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_LOWER,
+        /*  b   98  62 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_LOWER,
+        /*  c   99  63 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_LOWER,
+        /*  d  100  64 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_LOWER,
+        /*  e  101  65 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_LOWER,
+        /*  f  102  66 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_LOWER,
+        /*  g  103  67 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  h  104  68 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  i  105  69 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  j  106  6a */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  k  107  6b */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  l  108  6c */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  m  109  6d */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  n  110  6e */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  o  111  6f */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  p  112  70 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  q  113  71 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  r  114  72 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  s  115  73 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  t  116  74 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  u  117  75 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  v  118  76 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  w  119  77 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  x  120  78 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  y  121  79 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  z  122  7a */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  {  123  7b */   BOOST_CC_PUNCT,
+        /*  |  124  7c */   BOOST_CC_PUNCT,
+        /*  }  125  7d */   BOOST_CC_PUNCT,
+        /*  ~  126  7e */   BOOST_CC_PUNCT,
+        /* DEL 127  7f */   BOOST_CC_CTRL,
+        /* --  128  80 */   BOOST_CC_CTRL,
+        /* --  129  81 */   BOOST_CC_CTRL,
+        /* --  130  82 */   BOOST_CC_CTRL,
+        /* --  131  83 */   BOOST_CC_CTRL,
+        /* --  132  84 */   BOOST_CC_CTRL,
+        /* --  133  85 */   BOOST_CC_CTRL,
+        /* --  134  86 */   BOOST_CC_CTRL,
+        /* --  135  87 */   BOOST_CC_CTRL,
+        /* --  136  88 */   BOOST_CC_CTRL,
+        /* --  137  89 */   BOOST_CC_CTRL,
+        /* --  138  8a */   BOOST_CC_CTRL,
+        /* --  139  8b */   BOOST_CC_CTRL,
+        /* --  140  8c */   BOOST_CC_CTRL,
+        /* --  141  8d */   BOOST_CC_CTRL,
+        /* --  142  8e */   BOOST_CC_CTRL,
+        /* --  143  8f */   BOOST_CC_CTRL,
+        /* --  144  90 */   BOOST_CC_CTRL,
+        /* --  145  91 */   BOOST_CC_CTRL,
+        /* --  146  92 */   BOOST_CC_CTRL,
+        /* --  147  93 */   BOOST_CC_CTRL,
+        /* --  148  94 */   BOOST_CC_CTRL,
+        /* --  149  95 */   BOOST_CC_CTRL,
+        /* --  150  96 */   BOOST_CC_CTRL,
+        /* --  151  97 */   BOOST_CC_CTRL,
+        /* --  152  98 */   BOOST_CC_CTRL,
+        /* --  153  99 */   BOOST_CC_CTRL,
+        /* --  154  9a */   BOOST_CC_CTRL,
+        /* --  155  9b */   BOOST_CC_CTRL,
+        /* --  156  9c */   BOOST_CC_CTRL,
+        /* --  157  9d */   BOOST_CC_CTRL,
+        /* --  158  9e */   BOOST_CC_CTRL,
+        /* --  159  9f */   BOOST_CC_CTRL,
+        /*     160  a0 */   BOOST_CC_SPACE,
+        /*  �  161  a1 */   BOOST_CC_PUNCT,
+        /*  �  162  a2 */   BOOST_CC_PUNCT,
+        /*  �  163  a3 */   BOOST_CC_PUNCT,
+        /*  �  164  a4 */   BOOST_CC_PUNCT,
+        /*  �  165  a5 */   BOOST_CC_PUNCT,
+        /*  �  166  a6 */   BOOST_CC_PUNCT,
+        /*  �  167  a7 */   BOOST_CC_PUNCT,
+        /*  �  168  a8 */   BOOST_CC_PUNCT,
+        /*  �  169  a9 */   BOOST_CC_PUNCT,
+        /*  �  170  aa */   BOOST_CC_PUNCT,
+        /*  �  171  ab */   BOOST_CC_PUNCT,
+        /*  �  172  ac */   BOOST_CC_PUNCT,
+        /*  �  173  ad */   BOOST_CC_PUNCT,
+        /*  �  174  ae */   BOOST_CC_PUNCT,
+        /*  �  175  af */   BOOST_CC_PUNCT,
+        /*  �  176  b0 */   BOOST_CC_PUNCT,
+        /*  �  177  b1 */   BOOST_CC_PUNCT,
+        /*  �  178  b2 */   BOOST_CC_DIGIT|BOOST_CC_PUNCT,
+        /*  �  179  b3 */   BOOST_CC_DIGIT|BOOST_CC_PUNCT,
+        /*  �  180  b4 */   BOOST_CC_PUNCT,
+        /*  �  181  b5 */   BOOST_CC_PUNCT,
+        /*  �  182  b6 */   BOOST_CC_PUNCT,
+        /*  �  183  b7 */   BOOST_CC_PUNCT,
+        /*  �  184  b8 */   BOOST_CC_PUNCT,
+        /*  �  185  b9 */   BOOST_CC_DIGIT|BOOST_CC_PUNCT,
+        /*  �  186  ba */   BOOST_CC_PUNCT,
+        /*  �  187  bb */   BOOST_CC_PUNCT,
+        /*  �  188  bc */   BOOST_CC_PUNCT,
+        /*  �  189  bd */   BOOST_CC_PUNCT,
+        /*  �  190  be */   BOOST_CC_PUNCT,
+        /*  �  191  bf */   BOOST_CC_PUNCT,
+        /*  �  192  c0 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  �  193  c1 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  �  194  c2 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  �  195  c3 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  �  196  c4 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  �  197  c5 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  �  198  c6 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  �  199  c7 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  �  200  c8 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  �  201  c9 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  �  202  ca */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  �  203  cb */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  �  204  cc */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  �  205  cd */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  �  206  ce */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  �  207  cf */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  �  208  d0 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  �  209  d1 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  �  210  d2 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  �  211  d3 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  �  212  d4 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  �  213  d5 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  �  214  d6 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  �  215  d7 */   BOOST_CC_PUNCT,
+        /*  �  216  d8 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  �  217  d9 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  �  218  da */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  �  219  db */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  �  220  dc */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  �  221  dd */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  �  222  de */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  �  223  df */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  �  224  e0 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  �  225  e1 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  �  226  e2 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  �  227  e3 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  �  228  e4 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  �  229  e5 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  �  230  e6 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  �  231  e7 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  �  232  e8 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  �  233  e9 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  �  234  ea */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  �  235  eb */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  �  236  ec */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  �  237  ed */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  �  238  ee */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  �  239  ef */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  �  240  f0 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  �  241  f1 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  �  242  f2 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  �  243  f3 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  �  244  f4 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  �  245  f5 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  �  246  f6 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  �  247  f7 */   BOOST_CC_PUNCT,
+        /*  �  248  f8 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  �  249  f9 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  �  250  fa */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  �  251  fb */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  �  252  fc */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  �  253  fd */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  �  254  fe */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  �  255  ff */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // ISO 8859-1 character conversion table
+    ///////////////////////////////////////////////////////////////////////////
+    const unsigned char iso8859_1_char_conversion[] =
+    {
+        /* NUL   0   0 */   '\0',
+        /* SOH   1   1 */   '\0',
+        /* STX   2   2 */   '\0',
+        /* ETX   3   3 */   '\0',
+        /* EOT   4   4 */   '\0',
+        /* ENQ   5   5 */   '\0',
+        /* ACK   6   6 */   '\0',
+        /* BEL   7   7 */   '\0',
+        /* BS    8   8 */   '\0',
+        /* HT    9   9 */   '\0',
+        /* NL   10   a */   '\0',
+        /* VT   11   b */   '\0',
+        /* NP   12   c */   '\0',
+        /* CR   13   d */   '\0',
+        /* SO   14   e */   '\0',
+        /* SI   15   f */   '\0',
+        /* DLE  16  10 */   '\0',
+        /* DC1  17  11 */   '\0',
+        /* DC2  18  12 */   '\0',
+        /* DC3  19  13 */   '\0',
+        /* DC4  20  14 */   '\0',
+        /* NAK  21  15 */   '\0',
+        /* SYN  22  16 */   '\0',
+        /* ETB  23  17 */   '\0',
+        /* CAN  24  18 */   '\0',
+        /* EM   25  19 */   '\0',
+        /* SUB  26  1a */   '\0',
+        /* ESC  27  1b */   '\0',
+        /* FS   28  1c */   '\0',
+        /* GS   29  1d */   '\0',
+        /* RS   30  1e */   '\0',
+        /* US   31  1f */   '\0',
+        /* SP   32  20 */   '\0',
+        /*  !   33  21 */   '\0',
+        /*  "   34  22 */   '\0',
+        /*  #   35  23 */   '\0',
+        /*  $   36  24 */   '\0',
+        /*  %   37  25 */   '\0',
+        /*  &   38  26 */   '\0',
+        /*  '   39  27 */   '\0',
+        /*  (   40  28 */   '\0',
+        /*  )   41  29 */   '\0',
+        /*  *   42  2a */   '\0',
+        /*  +   43  2b */   '\0',
+        /*  ,   44  2c */   '\0',
+        /*  -   45  2d */   '\0',
+        /*  .   46  2e */   '\0',
+        /*  /   47  2f */   '\0',
+        /*  0   48  30 */   '\0',
+        /*  1   49  31 */   '\0',
+        /*  2   50  32 */   '\0',
+        /*  3   51  33 */   '\0',
+        /*  4   52  34 */   '\0',
+        /*  5   53  35 */   '\0',
+        /*  6   54  36 */   '\0',
+        /*  7   55  37 */   '\0',
+        /*  8   56  38 */   '\0',
+        /*  9   57  39 */   '\0',
+        /*  :   58  3a */   '\0',
+        /*  ;   59  3b */   '\0',
+        /*  <   60  3c */   '\0',
+        /*  =   61  3d */   '\0',
+        /*  >   62  3e */   '\0',
+        /*  ?   63  3f */   '\0',
+        /*  @   64  40 */   '\0',
+        /*  A   65  41 */   'a',
+        /*  B   66  42 */   'b',
+        /*  C   67  43 */   'c',
+        /*  D   68  44 */   'd',
+        /*  E   69  45 */   'e',
+        /*  F   70  46 */   'f',
+        /*  G   71  47 */   'g',
+        /*  H   72  48 */   'h',
+        /*  I   73  49 */   'i',
+        /*  J   74  4a */   'j',
+        /*  K   75  4b */   'k',
+        /*  L   76  4c */   'l',
+        /*  M   77  4d */   'm',
+        /*  N   78  4e */   'n',
+        /*  O   79  4f */   'o',
+        /*  P   80  50 */   'p',
+        /*  Q   81  51 */   'q',
+        /*  R   82  52 */   'r',
+        /*  S   83  53 */   's',
+        /*  T   84  54 */   't',
+        /*  U   85  55 */   'u',
+        /*  V   86  56 */   'v',
+        /*  W   87  57 */   'w',
+        /*  X   88  58 */   'x',
+        /*  Y   89  59 */   'y',
+        /*  Z   90  5a */   'z',
+        /*  [   91  5b */   '\0',
+        /*  \   92  5c */   '\0',
+        /*  ]   93  5d */   '\0',
+        /*  ^   94  5e */   '\0',
+        /*  _   95  5f */   '\0',
+        /*  `   96  60 */   '\0',
+        /*  a   97  61 */   'A',
+        /*  b   98  62 */   'B',
+        /*  c   99  63 */   'C',
+        /*  d  100  64 */   'D',
+        /*  e  101  65 */   'E',
+        /*  f  102  66 */   'F',
+        /*  g  103  67 */   'G',
+        /*  h  104  68 */   'H',
+        /*  i  105  69 */   'I',
+        /*  j  106  6a */   'J',
+        /*  k  107  6b */   'K',
+        /*  l  108  6c */   'L',
+        /*  m  109  6d */   'M',
+        /*  n  110  6e */   'N',
+        /*  o  111  6f */   'O',
+        /*  p  112  70 */   'P',
+        /*  q  113  71 */   'Q',
+        /*  r  114  72 */   'R',
+        /*  s  115  73 */   'S',
+        /*  t  116  74 */   'T',
+        /*  u  117  75 */   'U',
+        /*  v  118  76 */   'V',
+        /*  w  119  77 */   'W',
+        /*  x  120  78 */   'X',
+        /*  y  121  79 */   'Y',
+        /*  z  122  7a */   'Z',
+        /*  {  123  7b */   '\0',
+        /*  |  124  7c */   '\0',
+        /*  }  125  7d */   '\0',
+        /*  ~  126  7e */   '\0',
+        /* DEL 127  7f */   '\0',
+        /* --  128  80 */   '\0',
+        /* --  129  81 */   '\0',
+        /* --  130  82 */   '\0',
+        /* --  131  83 */   '\0',
+        /* --  132  84 */   '\0',
+        /* --  133  85 */   '\0',
+        /* --  134  86 */   '\0',
+        /* --  135  87 */   '\0',
+        /* --  136  88 */   '\0',
+        /* --  137  89 */   '\0',
+        /* --  138  8a */   '\0',
+        /* --  139  8b */   '\0',
+        /* --  140  8c */   '\0',
+        /* --  141  8d */   '\0',
+        /* --  142  8e */   '\0',
+        /* --  143  8f */   '\0',
+        /* --  144  90 */   '\0',
+        /* --  145  91 */   '\0',
+        /* --  146  92 */   '\0',
+        /* --  147  93 */   '\0',
+        /* --  148  94 */   '\0',
+        /* --  149  95 */   '\0',
+        /* --  150  96 */   '\0',
+        /* --  151  97 */   '\0',
+        /* --  152  98 */   '\0',
+        /* --  153  99 */   '\0',
+        /* --  154  9a */   '\0',
+        /* --  155  9b */   '\0',
+        /* --  156  9c */   '\0',
+        /* --  157  9d */   '\0',
+        /* --  158  9e */   '\0',
+        /* --  159  9f */   '\0',
+        /*     160  a0 */   '\0',
+        /*  �  161  a1 */   '\0',
+        /*  �  162  a2 */   '\0',
+        /*  �  163  a3 */   '\0',
+        /*  �  164  a4 */   '\0',
+        /*  �  165  a5 */   '\0',
+        /*  �  166  a6 */   '\0',
+        /*  �  167  a7 */   '\0',
+        /*  �  168  a8 */   '\0',
+        /*  �  169  a9 */   '\0',
+        /*  �  170  aa */   '\0',
+        /*  �  171  ab */   '\0',
+        /*  �  172  ac */   '\0',
+        /*  �  173  ad */   '\0',
+        /*  �  174  ae */   '\0',
+        /*  �  175  af */   '\0',
+        /*  �  176  b0 */   '\0',
+        /*  �  177  b1 */   '\0',
+        /*  �  178  b2 */   '\0',
+        /*  �  179  b3 */   '\0',
+        /*  �  180  b4 */   '\0',
+        /*  �  181  b5 */   '\0',
+        /*  �  182  b6 */   '\0',
+        /*  �  183  b7 */   '\0',
+        /*  �  184  b8 */   '\0',
+        /*  �  185  b9 */   '\0',
+        /*  �  186  ba */   '\0',
+        /*  �  187  bb */   '\0',
+        /*  �  188  bc */   '\0',
+        /*  �  189  bd */   '\0',
+        /*  �  190  be */   '\0',
+        /*  �  191  bf */   '\0',
+        /*  �  192  c0 */   0xe0,
+        /*  �  193  c1 */   0xe1,
+        /*  �  194  c2 */   0xe2,
+        /*  �  195  c3 */   0xe3,
+        /*  �  196  c4 */   0xe4,
+        /*  �  197  c5 */   0xe5,
+        /*  �  198  c6 */   0xe6,
+        /*  �  199  c7 */   0xe7,
+        /*  �  200  c8 */   0xe8,
+        /*  �  201  c9 */   0xe9,
+        /*  �  202  ca */   0xea,
+        /*  �  203  cb */   0xeb,
+        /*  �  204  cc */   0xec,
+        /*  �  205  cd */   0xed,
+        /*  �  206  ce */   0xee,
+        /*  �  207  cf */   0xef,
+        /*  �  208  d0 */   0xf0,
+        /*  �  209  d1 */   0xf1,
+        /*  �  210  d2 */   0xf2,
+        /*  �  211  d3 */   0xf3,
+        /*  �  212  d4 */   0xf4,
+        /*  �  213  d5 */   0xf5,
+        /*  �  214  d6 */   0xf6,
+        /*  �  215  d7 */   '\0',
+        /*  �  216  d8 */   0xf8,
+        /*  �  217  d9 */   0xf9,
+        /*  �  218  da */   0xfa,
+        /*  �  219  db */   0xfb,
+        /*  �  220  dc */   0xfc,
+        /*  �  221  dd */   0xfd,
+        /*  �  222  de */   0xfe,
+        /*  �  223  df */   '\0',
+        /*  �  224  e0 */   0xc0,
+        /*  �  225  e1 */   0xc1,
+        /*  �  226  e2 */   0xc2,
+        /*  �  227  e3 */   0xc3,
+        /*  �  228  e4 */   0xc4,
+        /*  �  229  e5 */   0xc5,
+        /*  �  230  e6 */   0xc6,
+        /*  �  231  e7 */   0xc7,
+        /*  �  232  e8 */   0xc8,
+        /*  �  233  e9 */   0xc9,
+        /*  �  234  ea */   0xca,
+        /*  �  235  eb */   0xcb,
+        /*  �  236  ec */   0xcc,
+        /*  �  237  ed */   0xcd,
+        /*  �  238  ee */   0xce,
+        /*  �  239  ef */   0xcf,
+        /*  �  240  f0 */   0xd0,
+        /*  �  241  f1 */   0xd1,
+        /*  �  242  f2 */   0xd2,
+        /*  �  243  f3 */   0xd3,
+        /*  �  244  f4 */   0xd4,
+        /*  �  245  f5 */   0xd5,
+        /*  �  246  f6 */   0xd6,
+        /*  �  247  f7 */   '\0',
+        /*  �  248  f8 */   0xd8,
+        /*  �  249  f9 */   0xd9,
+        /*  �  250  fa */   0xda,
+        /*  �  251  fb */   0xdb,
+        /*  �  252  fc */   0xdc,
+        /*  �  253  fd */   0xdd,
+        /*  �  254  fe */   0xde,
+        /*  �  255  ff */   '\0',
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Test characters for specified conditions (using iso8859-1)
+    ///////////////////////////////////////////////////////////////////////////
+    struct iso8859_1
+    {
+        typedef unsigned char char_type;
+
+        static bool
+        isascii_(int ch)
+        {
+            return 0 == (ch & ~0x7f);
+        }
+
+        static bool
+        ischar(int ch)
+        {
+            // iso8859.1 uses all 8 bits
+            // we have to watch out for sign extensions
+            return (0 == (ch & ~0xff) || ~0 == (ch | 0xff)) ? true : false;
+        }
+
+        static int
+        isalnum(int ch)
+        {
+            BOOST_ASSERT(0 == (ch & ~UCHAR_MAX));
+            return (iso8859_1_char_types[ch] & BOOST_CC_ALPHA)
+                || (iso8859_1_char_types[ch] & BOOST_CC_DIGIT);
+        }
+
+        static int
+        isalpha(int ch)
+        {
+            BOOST_ASSERT(0 == (ch & ~UCHAR_MAX));
+            return (iso8859_1_char_types[ch] & BOOST_CC_ALPHA);
+        }
+
+        static int
+        isdigit(int ch)
+        {
+            BOOST_ASSERT(0 == (ch & ~UCHAR_MAX));
+            return (iso8859_1_char_types[ch] & BOOST_CC_DIGIT);
+        }
+
+        static int
+        isxdigit(int ch)
+        {
+            BOOST_ASSERT(0 == (ch & ~UCHAR_MAX));
+            return (iso8859_1_char_types[ch] & BOOST_CC_XDIGIT);
+        }
+
+        static int
+        iscntrl(int ch)
+        {
+            BOOST_ASSERT(0 == (ch & ~UCHAR_MAX));
+            return (iso8859_1_char_types[ch] & BOOST_CC_CTRL);
+        }
+
+        static int
+        isgraph(int ch)
+        {
+            return ('\x21' <= ch && ch <= '\x7e') || ('\xa1' <= ch && ch <= '\xff');
+        }
+
+        static int
+        islower(int ch)
+        {
+            BOOST_ASSERT(0 == (ch & ~UCHAR_MAX));
+            return (iso8859_1_char_types[ch] & BOOST_CC_LOWER);
+        }
+
+        static int
+        isprint(int ch)
+        {
+            return ('\x20' <= ch && ch <= '\x7e') || ('\xa0' <= ch && ch <= '\xff');
+        }
+
+        static int
+        ispunct(int ch)
+        {
+            BOOST_ASSERT(0 == (ch & ~UCHAR_MAX));
+            return (iso8859_1_char_types[ch] & BOOST_CC_PUNCT);
+        }
+
+        static int
+        isspace(int ch)
+        {
+            BOOST_ASSERT(0 == (ch & ~UCHAR_MAX));
+            return (iso8859_1_char_types[ch] & BOOST_CC_SPACE);
+        }
+
+        static int
+        isblank BOOST_PREVENT_MACRO_SUBSTITUTION (int ch)
+        {
+            return ('\x09' == ch || '\x20' == ch || '\xa0' == ch);
+        }
+
+        static int
+        isupper(int ch)
+        {
+            BOOST_ASSERT(0 == (ch & ~UCHAR_MAX));
+            return (iso8859_1_char_types[ch] & BOOST_CC_UPPER);
+        }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Simple character conversions
+    ///////////////////////////////////////////////////////////////////////////
+
+        static int
+        tolower(int ch)
+        {
+            return isupper(ch) && '\0' != iso8859_1_char_conversion[ch] ?
+                iso8859_1_char_conversion[ch] : ch;
+        }
+
+        static int
+        toupper(int ch)
+        {
+            return islower(ch) && '\0' != iso8859_1_char_conversion[ch] ?
+                iso8859_1_char_conversion[ch] : ch;
+        }
+
+        static ::boost::uint32_t
+        toucs4(int ch)
+        {
+            // The first 256 characters in Unicode and the UCS are
+            // identical to those in ISO/IEC-8859-1.
+            return ch;
+        }
+    };
+
+}}}
+
+///////////////////////////////////////////////////////////////////////////////
+// undefine macros
+///////////////////////////////////////////////////////////////////////////////
+#undef BOOST_CC_DIGIT
+#undef BOOST_CC_XDIGIT
+#undef BOOST_CC_ALPHA
+#undef BOOST_CC_CTRL
+#undef BOOST_CC_LOWER
+#undef BOOST_CC_UPPER
+#undef BOOST_CC_PUNCT
+#undef BOOST_CC_SPACE
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/char_encoding/standard.hpp b/3rdParty/Boost/src/boost/spirit/home/support/char_encoding/standard.hpp
new file mode 100644
index 0000000..c32a9e7
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/char_encoding/standard.hpp
@@ -0,0 +1,137 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_STANDARD_APRIL_26_2006_1106PM)
+#define BOOST_SPIRIT_STANDARD_APRIL_26_2006_1106PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <cctype>
+#include <boost/cstdint.hpp>
+
+namespace boost { namespace spirit { namespace char_encoding
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  Test characters for specified conditions (using std functions)
+    ///////////////////////////////////////////////////////////////////////////
+    struct standard
+    {
+        typedef char char_type;
+
+        static bool
+        isascii_(int ch)
+        {
+            return 0 == (ch & ~0x7f);
+        }
+
+        static bool
+        ischar(int ch)
+        {
+            // uses all 8 bits
+            // we have to watch out for sign extensions
+            return (0 == (ch & ~0xff) || ~0 == (ch | 0xff)) ? true : false;
+        }
+
+        static int
+        isalnum(int ch)
+        {
+            return std::isalnum(ch);
+        }
+
+        static int
+        isalpha(int ch)
+        {
+            return std::isalpha(ch);
+        }
+
+        static int
+        isdigit(int ch)
+        {
+            return std::isdigit(ch);
+        }
+
+        static int
+        isxdigit(int ch)
+        {
+            return std::isxdigit(ch);
+        }
+
+        static int
+        iscntrl(int ch)
+        {
+            return std::iscntrl(ch);
+        }
+
+        static int
+        isgraph(int ch)
+        {
+            return std::isgraph(ch);
+        }
+
+        static int
+        islower(int ch)
+        {
+            return std::islower(ch);
+        }
+
+        static int
+        isprint(int ch)
+        {
+            return std::isprint(ch);
+        }
+
+        static int
+        ispunct(int ch)
+        {
+            return std::ispunct(ch);
+        }
+
+        static int
+        isspace(int ch)
+        {
+            return std::isspace(ch);
+        }
+
+        static int
+        isblank BOOST_PREVENT_MACRO_SUBSTITUTION (int ch)
+        {
+            return (ch == ' ' || ch == '\t');
+        }
+
+        static int
+        isupper(int ch)
+        {
+            return std::isupper(ch);
+        }
+
+    ///////////////////////////////////////////////////////////////////////////////
+    //  Simple character conversions
+    ///////////////////////////////////////////////////////////////////////////////
+        static int
+        tolower(int ch)
+        {
+            return std::tolower(ch);
+        }
+
+        static int
+        toupper(int ch)
+        {
+            return std::toupper(ch);
+        }
+
+        static ::boost::uint32_t
+        toucs4(int ch)
+        {
+            return ch;
+        }
+    };
+}}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/char_encoding/standard_wide.hpp b/3rdParty/Boost/src/boost/spirit/home/support/char_encoding/standard_wide.hpp
new file mode 100644
index 0000000..99c918c
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/char_encoding/standard_wide.hpp
@@ -0,0 +1,182 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_STANDARD_WIDE_NOVEMBER_10_2006_0913AM)
+#define BOOST_SPIRIT_STANDARD_WIDE_NOVEMBER_10_2006_0913AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <cwctype>
+#include <string>
+
+#include <boost/cstdint.hpp>
+#include <boost/spirit/home/support/assert_msg.hpp>
+
+namespace boost { namespace spirit { namespace traits
+{
+    template <std::size_t N>
+    struct wchar_t_size
+    {
+        BOOST_SPIRIT_ASSERT_MSG(N == 1 || N == 2 || N == 4,
+            not_supported_size_of_wchar_t, ());
+    };
+
+    template <> struct wchar_t_size<1> { enum { mask = 0xff }; };
+    template <> struct wchar_t_size<2> { enum { mask = 0xffff }; };
+    template <> struct wchar_t_size<4> { enum { mask = 0xffffffff }; };
+
+}}}
+
+namespace boost { namespace spirit { namespace char_encoding
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  Test characters for specified conditions (using std wchar_t functions)
+    ///////////////////////////////////////////////////////////////////////////
+
+    struct standard_wide
+    {
+        typedef wchar_t char_type;
+
+        template <typename Char>
+        static typename std::char_traits<Char>::int_type
+        to_int_type(Char ch)
+        {
+            return std::char_traits<Char>::to_int_type(ch);
+        }
+
+        template <typename Char>
+        static Char
+        to_char_type(typename std::char_traits<Char>::int_type ch)
+        {
+            return std::char_traits<Char>::to_char_type(ch);
+        }
+
+        static bool
+        ischar(int ch)
+        {
+            // we have to watch out for sign extensions (casting is there to 
+            // silence certain compilers complaining about signed/unsigned
+            // mismatch)
+            return (
+                std::size_t(0) == 
+                    std::size_t(ch & ~traits::wchar_t_size<sizeof(wchar_t)>::mask) || 
+                std::size_t(~0) == 
+                    std::size_t(ch | traits::wchar_t_size<sizeof(wchar_t)>::mask)
+            ) ? true : false;     // any wchar_t, but no other bits set
+        }
+
+        static bool
+        isalnum(wchar_t ch)
+        {
+            using namespace std;
+            return iswalnum(to_int_type(ch)) ? true : false;
+        }
+
+        static bool
+        isalpha(wchar_t ch)
+        {
+            using namespace std;
+            return iswalpha(to_int_type(ch)) ? true : false;
+        }
+
+        static bool
+        iscntrl(wchar_t ch)
+        {
+            using namespace std;
+            return iswcntrl(to_int_type(ch)) ? true : false;
+        }
+
+        static bool
+        isdigit(wchar_t ch)
+        {
+            using namespace std;
+            return iswdigit(to_int_type(ch)) ? true : false;
+        }
+
+        static bool
+        isgraph(wchar_t ch)
+        {
+            using namespace std;
+            return iswgraph(to_int_type(ch)) ? true : false;
+        }
+
+        static bool
+        islower(wchar_t ch)
+        {
+            using namespace std;
+            return iswlower(to_int_type(ch)) ? true : false;
+        }
+
+        static bool
+        isprint(wchar_t ch)
+        {
+            using namespace std;
+            return iswprint(to_int_type(ch)) ? true : false;
+        }
+
+        static bool
+        ispunct(wchar_t ch)
+        {
+            using namespace std;
+            return iswpunct(to_int_type(ch)) ? true : false;
+        }
+
+        static bool
+        isspace(wchar_t ch)
+        {
+            using namespace std;
+            return iswspace(to_int_type(ch)) ? true : false;
+        }
+
+        static bool
+        isupper(wchar_t ch)
+        {
+            using namespace std;
+            return iswupper(to_int_type(ch)) ? true : false;
+        }
+
+        static bool
+        isxdigit(wchar_t ch)
+        {
+            using namespace std;
+            return iswxdigit(to_int_type(ch)) ? true : false;
+        }
+
+        static bool
+        isblank BOOST_PREVENT_MACRO_SUBSTITUTION (wchar_t ch)
+        {
+            return (ch == L' ' || ch == L'\t');
+        }
+
+        static wchar_t
+        tolower(wchar_t ch)
+        {
+            using namespace std;
+            return isupper(ch) ?
+                to_char_type<wchar_t>(towlower(to_int_type(ch))) : ch;
+        }
+
+        static wchar_t
+        toupper(wchar_t ch)
+        {
+            using namespace std;
+            return islower(ch) ?
+                to_char_type<wchar_t>(towupper(to_int_type(ch))) : ch;
+        }
+
+        static ::boost::uint32_t
+        toucs4(int ch)
+        {
+            return ch;
+        }
+    };
+}}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/char_encoding/unicode.hpp b/3rdParty/Boost/src/boost/spirit/home/support/char_encoding/unicode.hpp
new file mode 100644
index 0000000..9febf7e
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/char_encoding/unicode.hpp
@@ -0,0 +1,339 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_UNICODE_1_JANUARY_12_2010_0728PM)
+#define BOOST_SPIRIT_UNICODE_1_JANUARY_12_2010_0728PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/cstdint.hpp>
+#include <boost/spirit/home/support/char_encoding/unicode/query.hpp>
+
+namespace boost { namespace spirit { namespace char_encoding
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  Test characters for specified conditions (using iso8859-1)
+    ///////////////////////////////////////////////////////////////////////////
+    struct unicode
+    {
+        typedef ::boost::uint32_t char_type;
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Posix stuff
+    ///////////////////////////////////////////////////////////////////////////
+        static bool
+        isascii_(char_type ch)
+        {
+            return 0 == (ch & ~0x7f);
+        }
+
+        static bool
+        ischar(char_type ch)
+        {
+            // unicode code points in the range 0x00 to 0x10FFFF
+            return ch <= 0x10FFFF;
+        }
+
+        static bool
+        isalnum(char_type ch)
+        {
+            return ucd::is_alphanumeric(ch);
+        }
+
+        static bool
+        isalpha(char_type ch)
+        {
+            return ucd::is_alphabetic(ch);
+        }
+
+        static bool
+        isdigit(char_type ch)
+        {
+            return ucd::is_decimal_number(ch);
+        }
+
+        static bool
+        isxdigit(char_type ch)
+        {
+            return ucd::is_hex_digit(ch);
+        }
+
+        static bool
+        iscntrl(char_type ch)
+        {
+            return ucd::is_control(ch);
+        }
+
+        static bool
+        isgraph(char_type ch)
+        {
+            return ucd::is_graph(ch);
+        }
+
+        static bool
+        islower(char_type ch)
+        {
+            return ucd::is_lowercase(ch);
+        }
+
+        static bool
+        isprint(char_type ch)
+        {
+            return ucd::is_print(ch);
+        }
+
+        static bool
+        ispunct(char_type ch)
+        {
+            return ucd::is_punctuation(ch);
+        }
+
+        static bool
+        isspace(char_type ch)
+        {
+            return ucd::is_white_space(ch);
+        }
+
+        static int
+        isblank BOOST_PREVENT_MACRO_SUBSTITUTION (char_type ch)
+        {
+            return ucd::is_blank(ch);
+        }
+
+        static bool
+        isupper(char_type ch)
+        {
+            return ucd::is_uppercase(ch);
+        }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Simple character conversions
+    ///////////////////////////////////////////////////////////////////////////
+
+        static char_type
+        tolower(char_type ch)
+        {
+            return ucd::to_lowercase(ch);
+        }
+
+        static char_type
+        toupper(char_type ch)
+        {
+            return ucd::to_uppercase(ch);
+        }
+
+        static ::boost::uint32_t
+        toucs4(char_type ch)
+        {
+            return ch;
+        }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Major Categories
+    ///////////////////////////////////////////////////////////////////////////
+#define BOOST_SPIRIT_MAJOR_CATEGORY(name)                                       \
+        static bool                                                             \
+        is_##name(char_type ch)                                                 \
+        {                                                                       \
+            return ucd::get_major_category(ch) == ucd::properties::name;        \
+        }                                                                       \
+        /***/
+
+        BOOST_SPIRIT_MAJOR_CATEGORY(letter)
+        BOOST_SPIRIT_MAJOR_CATEGORY(mark)
+        BOOST_SPIRIT_MAJOR_CATEGORY(number)
+        BOOST_SPIRIT_MAJOR_CATEGORY(separator)
+        BOOST_SPIRIT_MAJOR_CATEGORY(other)
+        BOOST_SPIRIT_MAJOR_CATEGORY(punctuation)
+        BOOST_SPIRIT_MAJOR_CATEGORY(symbol)
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  General Categories
+    ///////////////////////////////////////////////////////////////////////////
+#define BOOST_SPIRIT_CATEGORY(name)                                             \
+        static bool                                                             \
+        is_##name(char_type ch)                                                 \
+        {                                                                       \
+            return ucd::get_category(ch) == ucd::properties::name;              \
+        }                                                                       \
+        /***/
+
+        BOOST_SPIRIT_CATEGORY(uppercase_letter)
+        BOOST_SPIRIT_CATEGORY(lowercase_letter)
+        BOOST_SPIRIT_CATEGORY(titlecase_letter)
+        BOOST_SPIRIT_CATEGORY(modifier_letter)
+        BOOST_SPIRIT_CATEGORY(other_letter)
+
+        BOOST_SPIRIT_CATEGORY(nonspacing_mark)
+        BOOST_SPIRIT_CATEGORY(enclosing_mark)
+        BOOST_SPIRIT_CATEGORY(spacing_mark)
+
+        BOOST_SPIRIT_CATEGORY(decimal_number)
+        BOOST_SPIRIT_CATEGORY(letter_number)
+        BOOST_SPIRIT_CATEGORY(other_number)
+
+        BOOST_SPIRIT_CATEGORY(space_separator)
+        BOOST_SPIRIT_CATEGORY(line_separator)
+        BOOST_SPIRIT_CATEGORY(paragraph_separator)
+
+        BOOST_SPIRIT_CATEGORY(control)
+        BOOST_SPIRIT_CATEGORY(format)
+        BOOST_SPIRIT_CATEGORY(private_use)
+        BOOST_SPIRIT_CATEGORY(surrogate)
+        BOOST_SPIRIT_CATEGORY(unassigned)
+
+        BOOST_SPIRIT_CATEGORY(dash_punctuation)
+        BOOST_SPIRIT_CATEGORY(open_punctuation)
+        BOOST_SPIRIT_CATEGORY(close_punctuation)
+        BOOST_SPIRIT_CATEGORY(connector_punctuation)
+        BOOST_SPIRIT_CATEGORY(other_punctuation)
+        BOOST_SPIRIT_CATEGORY(initial_punctuation)
+        BOOST_SPIRIT_CATEGORY(final_punctuation)
+
+        BOOST_SPIRIT_CATEGORY(math_symbol)
+        BOOST_SPIRIT_CATEGORY(currency_symbol)
+        BOOST_SPIRIT_CATEGORY(modifier_symbol)
+        BOOST_SPIRIT_CATEGORY(other_symbol)
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Derived Categories
+    ///////////////////////////////////////////////////////////////////////////
+#define BOOST_SPIRIT_DERIVED_CATEGORY(name)                                     \
+        static bool                                                             \
+        is_##name(char_type ch)                                                 \
+        {                                                                       \
+            return ucd::is_##name(ch);                                          \
+        }                                                                       \
+        /***/
+
+        BOOST_SPIRIT_DERIVED_CATEGORY(alphabetic)
+        BOOST_SPIRIT_DERIVED_CATEGORY(uppercase)
+        BOOST_SPIRIT_DERIVED_CATEGORY(lowercase)
+        BOOST_SPIRIT_DERIVED_CATEGORY(white_space)
+        BOOST_SPIRIT_DERIVED_CATEGORY(hex_digit)
+        BOOST_SPIRIT_DERIVED_CATEGORY(noncharacter_code_point)
+        BOOST_SPIRIT_DERIVED_CATEGORY(default_ignorable_code_point)
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Scripts
+    ///////////////////////////////////////////////////////////////////////////
+#define BOOST_SPIRIT_SCRIPT(name)                                               \
+        static bool                                                             \
+        is_##name(char_type ch)                                                 \
+        {                                                                       \
+            return ucd::get_script(ch) == ucd::properties::name;                \
+        }                                                                       \
+        /***/
+
+        BOOST_SPIRIT_SCRIPT(arabic)
+        BOOST_SPIRIT_SCRIPT(imperial_aramaic)
+        BOOST_SPIRIT_SCRIPT(armenian)
+        BOOST_SPIRIT_SCRIPT(avestan)
+        BOOST_SPIRIT_SCRIPT(balinese)
+        BOOST_SPIRIT_SCRIPT(bamum)
+        BOOST_SPIRIT_SCRIPT(bengali)
+        BOOST_SPIRIT_SCRIPT(bopomofo)
+        BOOST_SPIRIT_SCRIPT(braille)
+        BOOST_SPIRIT_SCRIPT(buginese)
+        BOOST_SPIRIT_SCRIPT(buhid)
+        BOOST_SPIRIT_SCRIPT(canadian_aboriginal)
+        BOOST_SPIRIT_SCRIPT(carian)
+        BOOST_SPIRIT_SCRIPT(cham)
+        BOOST_SPIRIT_SCRIPT(cherokee)
+        BOOST_SPIRIT_SCRIPT(coptic)
+        BOOST_SPIRIT_SCRIPT(cypriot)
+        BOOST_SPIRIT_SCRIPT(cyrillic)
+        BOOST_SPIRIT_SCRIPT(devanagari)
+        BOOST_SPIRIT_SCRIPT(deseret)
+        BOOST_SPIRIT_SCRIPT(egyptian_hieroglyphs)
+        BOOST_SPIRIT_SCRIPT(ethiopic)
+        BOOST_SPIRIT_SCRIPT(georgian)
+        BOOST_SPIRIT_SCRIPT(glagolitic)
+        BOOST_SPIRIT_SCRIPT(gothic)
+        BOOST_SPIRIT_SCRIPT(greek)
+        BOOST_SPIRIT_SCRIPT(gujarati)
+        BOOST_SPIRIT_SCRIPT(gurmukhi)
+        BOOST_SPIRIT_SCRIPT(hangul)
+        BOOST_SPIRIT_SCRIPT(han)
+        BOOST_SPIRIT_SCRIPT(hanunoo)
+        BOOST_SPIRIT_SCRIPT(hebrew)
+        BOOST_SPIRIT_SCRIPT(hiragana)
+        BOOST_SPIRIT_SCRIPT(katakana_or_hiragana)
+        BOOST_SPIRIT_SCRIPT(old_italic)
+        BOOST_SPIRIT_SCRIPT(javanese)
+        BOOST_SPIRIT_SCRIPT(kayah_li)
+        BOOST_SPIRIT_SCRIPT(katakana)
+        BOOST_SPIRIT_SCRIPT(kharoshthi)
+        BOOST_SPIRIT_SCRIPT(khmer)
+        BOOST_SPIRIT_SCRIPT(kannada)
+        BOOST_SPIRIT_SCRIPT(kaithi)
+        BOOST_SPIRIT_SCRIPT(tai_tham)
+        BOOST_SPIRIT_SCRIPT(lao)
+        BOOST_SPIRIT_SCRIPT(latin)
+        BOOST_SPIRIT_SCRIPT(lepcha)
+        BOOST_SPIRIT_SCRIPT(limbu)
+        BOOST_SPIRIT_SCRIPT(linear_b)
+        BOOST_SPIRIT_SCRIPT(lisu)
+        BOOST_SPIRIT_SCRIPT(lycian)
+        BOOST_SPIRIT_SCRIPT(lydian)
+        BOOST_SPIRIT_SCRIPT(malayalam)
+        BOOST_SPIRIT_SCRIPT(mongolian)
+        BOOST_SPIRIT_SCRIPT(meetei_mayek)
+        BOOST_SPIRIT_SCRIPT(myanmar)
+        BOOST_SPIRIT_SCRIPT(nko)
+        BOOST_SPIRIT_SCRIPT(ogham)
+        BOOST_SPIRIT_SCRIPT(ol_chiki)
+        BOOST_SPIRIT_SCRIPT(old_turkic)
+        BOOST_SPIRIT_SCRIPT(oriya)
+        BOOST_SPIRIT_SCRIPT(osmanya)
+        BOOST_SPIRIT_SCRIPT(phags_pa)
+        BOOST_SPIRIT_SCRIPT(inscriptional_pahlavi)
+        BOOST_SPIRIT_SCRIPT(phoenician)
+        BOOST_SPIRIT_SCRIPT(inscriptional_parthian)
+        BOOST_SPIRIT_SCRIPT(rejang)
+        BOOST_SPIRIT_SCRIPT(runic)
+        BOOST_SPIRIT_SCRIPT(samaritan)
+        BOOST_SPIRIT_SCRIPT(old_south_arabian)
+        BOOST_SPIRIT_SCRIPT(saurashtra)
+        BOOST_SPIRIT_SCRIPT(shavian)
+        BOOST_SPIRIT_SCRIPT(sinhala)
+        BOOST_SPIRIT_SCRIPT(sundanese)
+        BOOST_SPIRIT_SCRIPT(syloti_nagri)
+        BOOST_SPIRIT_SCRIPT(syriac)
+        BOOST_SPIRIT_SCRIPT(tagbanwa)
+        BOOST_SPIRIT_SCRIPT(tai_le)
+        BOOST_SPIRIT_SCRIPT(new_tai_lue)
+        BOOST_SPIRIT_SCRIPT(tamil)
+        BOOST_SPIRIT_SCRIPT(tai_viet)
+        BOOST_SPIRIT_SCRIPT(telugu)
+        BOOST_SPIRIT_SCRIPT(tifinagh)
+        BOOST_SPIRIT_SCRIPT(tagalog)
+        BOOST_SPIRIT_SCRIPT(thaana)
+        BOOST_SPIRIT_SCRIPT(thai)
+        BOOST_SPIRIT_SCRIPT(tibetan)
+        BOOST_SPIRIT_SCRIPT(ugaritic)
+        BOOST_SPIRIT_SCRIPT(vai)
+        BOOST_SPIRIT_SCRIPT(old_persian)
+        BOOST_SPIRIT_SCRIPT(cuneiform)
+        BOOST_SPIRIT_SCRIPT(yi)
+        BOOST_SPIRIT_SCRIPT(inherited)
+        BOOST_SPIRIT_SCRIPT(common)
+        BOOST_SPIRIT_SCRIPT(unknown)
+
+#undef BOOST_SPIRIT_MAJOR_CATEGORY
+#undef BOOST_SPIRIT_CATEGORY
+#undef BOOST_SPIRIT_DERIVED_CATEGORY
+#undef BOOST_SPIRIT_SCRIPT
+
+    };
+
+}}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/char_encoding/unicode/category_table.hpp b/3rdParty/Boost/src/boost/spirit/home/support/char_encoding/unicode/category_table.hpp
new file mode 100644
index 0000000..1b262a1
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/char_encoding/unicode/category_table.hpp
@@ -0,0 +1,2216 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+    AUTOGENERATED. DO NOT EDIT!!!
+==============================================================================*/
+#include <boost/cstdint.hpp>
+
+namespace boost { namespace spirit { namespace ucd { namespace detail
+{
+    static const ::boost::uint8_t category_stage1[] = {
+
+      0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15, 
+     16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31, 
+     32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  34,  42,  43,  44,  45,  46, 
+     47,  48,  49,  40,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  50,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  51, 
+     52,  21,  21,  21,  53,  21,  54,  55,  56,  57,  58,  59,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  60,  61,  61,  61,  61,  61,  61,  61,  61, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  21,  63,  64,  21,  65,  66,  67, 
+     68,  69,  70,  71,  72,  73,  73,  73,  74,  75,  76,  77,  78,  73,  73,  73, 
+     79,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     21,  21,  21,  80,  81,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     82,  82,  82,  82,  83,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     84,  85,  86,  87,  88,  89,  90,  91,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     92,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  93, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  94,  82,  82,  82,  82,  82,  82,  82,  82,  82, 
+     82,  82,  82,  82,  82,  82,  82,  95,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  21,  21,  96,  73,  73,  73,  73,  93, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  93, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  93, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  93, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  93, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  93, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  93, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  93, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  93, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  93, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  93, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  93, 
+     97,  98,  99,  99,  99,  99,  99,  99,  99,  99,  99,  99,  99,  99,  99,  99, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  93, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 100, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 100
+    };
+
+    static const ::boost::uint16_t category_stage2[] = {
+
+    // block 0
+      32,   32,   32,   32,   32,   32,   32,   32,   32,  544,  544,  544,  544,  544,   32,   32, 
+      32,   32,   32,   32,   32,   32,   32,   32,   32,   32,   32,   32,   32,   32,   32,   32, 
+     536,   44,   44,   44,   49,   44,   44,   44,   41,   42,   44,   48,   44,   40,   44,   44, 
+    1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040,   44,   44,   48,   48,   48,   44, 
+      44, 1216, 1216, 1216, 1216, 1216, 1216,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,   41,   44,   42,   50,   43, 
+      50, 1345, 1345, 1345, 1345, 1345, 1345,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,   41,   48,   42,   48,   32, 
+      32,   32,   32,   32,   32,  544,   32,   32,   32,   32,   32,   32,   32,   32,   32,   32, 
+      32,   32,   32,   32,   32,   32,   32,   32,   32,   32,   32,   32,   32,   32,   32,   32, 
+     536,   44,   49,   49,   49,   49,   51,   51,   50,   51,  321,   45,   48, 4129,   51,   50, 
+      51,   48,   18,   18,   50,  321,   51,   44,   50,   18,  321,   46,   18,   18,   18,   44, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,   48,  192,  192,  192,  192,  192,  192,  192,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,   48,  321,  321,  321,  321,  321,  321,  321,  321, 
+
+
+    // block 1
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  321,  192,  321,  192,  321,  192,  321,  192, 
+     321,  192,  321,  192,  321,  192,  321,  192,  321,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  192,  321,  192,  321,  192,  321,  321, 
+     321,  192,  192,  321,  192,  321,  192,  192,  321,  192,  192,  192,  321,  321,  192,  192, 
+     192,  192,  321,  192,  192,  321,  192,  192,  192,  321,  321,  321,  192,  192,  321,  192, 
+     192,  321,  192,  321,  192,  321,  192,  192,  321,  192,  321,  321,  192,  321,  192,  192, 
+     321,  192,  192,  192,  321,  192,  321,  192,  192,  321,  321,   68,  192,  321,  321,  321, 
+      68,   68,   68,   68,  192,   66,  321,  192,   66,  321,  192,   66,  321,  192,  321,  192, 
+     321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     321,  192,   66,  321,  192,  321,  192,  192,  192,  321,  192,  321,  192,  321,  192,  321, 
+
+
+    // block 2
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  321,  321,  321,  321,  321,  321,  192,  192,  321,  192,  192,  321, 
+     321,  192,  321,  192,  192,  192,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,   68,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     323,  323,  323,  323,  323,  323,  323,  323,  323,   67,   67,   67,   67,   67,   67,   67, 
+     323,  323,   50,   50,   50,   50,   67,   67,   67,   67,   67,   67,   67,   67,   67,   67, 
+      67,   67,   50,   50,   50,   50,   50,   50,   50,   50,   50,   50,   50,   50,   50,   50, 
+     323,  323,  323,  323,  323,   50,   50,   50,   50,   50,   50,   50,   67,   50,   67,   50, 
+      50,   50,   50,   50,   50,   50,   50,   50,   50,   50,   50,   50,   50,   50,   50,   50, 
+
+
+    // block 3
+       8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8, 
+       8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8, 
+       8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8, 
+       8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8, 
+       8,    8,    8,    8,    8,  328,    8,    8,    8,    8,    8,    8,    8,    8,    8, 4104, 
+       8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8, 
+       8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8, 
+     192,  321,  192,  321,   67,   50,  192,  321,    0,    0,  323,  321,  321,  321,   44,    0, 
+       0,    0,    0,    0,   50,   50,  192,   44,  192,  192,  192,    0,  192,    0,  192,  192, 
+     321,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,    0,  192,  192,  192,  192,  192,  192,  192,  192,  192,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  192, 
+     321,  321,  192,  192,  192,  321,  321,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     321,  321,  321,  321,  192,  321,   48,  192,  321,  192,  192,  321,  321,  192,  192,  192, 
+
+
+    // block 4
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,   51,    8,    8,    8,    8,    8,    9,    9,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+
+
+    // block 5
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  320,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,    0,    0,   67,   44,   44,   44,   44,   44,   44, 
+       0,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,    0,   44,   40,    0,    0,    0,    0,    0, 
+       0,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8, 
+       8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8, 
+      72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   40,   72, 
+      44,   72,   72,   44,   72,   72,   44,   72,    0,    0,    0,    0,    0,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0,    0,    0,    0, 
+      68,   68,   68,   44,   44,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 6
+      33,   33,   33,   33,    0,    0,   48,   48,   48,   44,   44,   49,   44,   44,   51,   51, 
+      72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   44,    0,    0,   44,   44, 
+       0,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      67,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   72,   72,   72,   72,   72, 
+      72,   72,   72,   72,   72,   72,   72,   72,    8,   72,   72,   72,   72,   72,   72,    0, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   44,   44,   44,   44,   68,   68, 
+      72,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   44,   68,   72,   72,   72,   72,   72,   72,   72,   33,    9,    8, 
+       8,   72,   72,   72,   72,   67,   67,   72,   72,   51,    8,    8,    8,   72,   68,   68, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   68,   68,   68,   51,   51,   68, 
+
+
+    // block 7
+      44,   44,   44,   44,   44,   44,   44,   44,   44,   44,   44,   44,   44,   44,    0,   33, 
+      68,   72,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72, 
+       8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    0,    0,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72, 
+      72,   68,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    8,    8,    8,    8,    8, 
+       8,    8,    8,    8,   67,   67,   51,   44,   44,   44,   67,    0,    0,    0,    0,    0, 
+
+
+    // block 8
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,    0,    0,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 9
+      64,   72,   72,   74,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0,    8,   68,   74,   74, 
+      74,   72,   72,   72,   72,   72,   72,   72,   72,   74,   74,   74,   74,    8,   64,    0, 
+      68,    8,    8,    8,    8,   64,    0,    0,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   72,   72,   44,   44,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16, 
+      44,   67,   68,    0,    0,    0,    0,    0,    0,   64,   64,   68,   68,   68,   68,   68, 
+       0,   72,   74,   74,    0,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0,   68, 
+      68,    0,    0,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,    0,   68,   68,   68,   68,   68,   68, 
+      68,    0,   68,    0,    0,    0,   68,   68,   68,   68,    0,    0,    8,   68,   74,   74, 
+      74,   72,   72,   72,   72,    0,    0,   74,   74,    0,    0,   74,   74,    8,   68,    0, 
+       0,    0,    0,    0,    0,    0,    0,   74,    0,    0,    0,    0,   68,   68,    0,   68, 
+      68,   68,   72,   72,    0,    0,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16, 
+      68,   68,   49,   49,   18,   18,   18,   18,   18,   18,   51,    0,    0,    0,    0,    0, 
+
+
+    // block 10
+       0,   72,   72,   74,    0,   68,   68,   68,   68,   68,   68,    0,    0,    0,    0,   68, 
+      68,    0,    0,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,    0,   68,   68,   68,   68,   68,   68, 
+      68,    0,   68,   68,    0,   68,   68,    0,   68,   68,    0,    0,    8,    0,   74,   74, 
+      74,   72,   72,    0,    0,    0,    0,   72,   72,    0,    0,   72,   72,    8,    0,    0, 
+       0,   72,    0,    0,    0,    0,    0,    0,    0,   68,   68,   68,   68,    0,   68,    0, 
+       0,    0,    0,    0,    0,    0,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16, 
+      72,   72,   68,   68,   68,   72,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,   72,   72,   74,    0,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,   68, 
+      68,   68,    0,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,    0,   68,   68,   68,   68,   68,   68, 
+      68,    0,   68,   68,    0,   68,   68,   68,   68,   68,    0,    0,    8,   68,   74,   74, 
+      74,   72,   72,   72,   72,   72,    0,   72,   72,   74,    0,   74,   74,    8,    0,    0, 
+      68,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      68,   68,   72,   72,    0,    0,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16, 
+       0,   49,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 11
+       0,   72,   74,   74,    0,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0,   68, 
+      68,    0,    0,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,    0,   68,   68,   68,   68,   68,   68, 
+      68,    0,   68,   68,    0,   68,   68,   68,   68,   68,    0,    0,    8,   68,   74,   72, 
+      74,   72,   72,   72,   72,    0,    0,   74,   74,    0,    0,   74,   74,    8,    0,    0, 
+       0,    0,    0,    0,    0,    0,   72,   74,    0,    0,    0,    0,   68,   68,    0,   68, 
+      68,   68,   72,   72,    0,    0,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16, 
+      51,   68,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,   72,   68,    0,   68,   68,   68,   68,   68,   68,    0,    0,    0,   68,   68, 
+      68,    0,   68,   68,   68,   68,    0,    0,    0,   68,   68,    0,   68,    0,   68,   68, 
+       0,    0,    0,   68,   68,    0,    0,    0,   68,   68,   68,    0,    0,    0,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0,    0,    0,   74,   74, 
+      72,   74,   74,    0,    0,    0,   74,   74,   74,    0,   74,   74,   74,    8,    0,    0, 
+      68,    0,    0,    0,    0,    0,    0,   74,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16, 
+      18,   18,   18,   51,   51,   51,   51,   51,   51,   49,   51,    0,    0,    0,    0,    0, 
+
+
+    // block 12
+       0,   74,   74,   74,    0,   68,   68,   68,   68,   68,   68,   68,   68,    0,   68,   68, 
+      68,    0,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,    0,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,    0,   68,   68,   68,   68,   68,    0,    0,    0,   68,   72,   72, 
+      72,   74,   74,   74,   74,    0,   72,   72,   72,    0,   72,   72,   72,    8,    0,    0, 
+       0,    0,    0,    0,    0,   72,   72,    0,   68,   68,    0,    0,    0,    0,    0,    0, 
+      68,   68,   72,   72,    0,    0,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16, 
+       0,    0,    0,    0,    0,    0,    0,    0,   18,   18,   18,   18,   18,   18,   18,   51, 
+       0,    0,   74,   74,    0,   68,   68,   68,   68,   68,   68,   68,   68,    0,   68,   68, 
+      68,    0,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,    0,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,    0,   68,   68,   68,   68,   68,    0,    0,    8,   68,   74,   72, 
+      74,   74,   74,   74,   74,    0,   72,   74,   74,    0,   74,   74,   72,    8,    0,    0, 
+       0,    0,    0,    0,    0,   74,   74,    0,    0,    0,    0,    0,    0,    0,   68,    0, 
+      68,   68,   72,   72,    0,    0,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16, 
+       0,   51,   51,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 13
+       0,    0,   74,   74,    0,   68,   68,   68,   68,   68,   68,   68,   68,    0,   68,   68, 
+      68,    0,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,    0,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0,    0,   68,   74,   74, 
+      74,   72,   72,   72,   72,    0,   74,   74,   74,    0,   74,   74,   74,    8,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,   74,    0,    0,    0,    0,    0,    0,    0,    0, 
+      68,   68,   72,   72,    0,    0,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16, 
+      18,   18,   18,   18,   18,   18,    0,    0,    0,   51,   68,   68,   68,   68,   68,   68, 
+       0,    0,   74,   74,    0,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,    0,    0,    0,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,    0,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,   68,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,    0,    0,    0,    8,    0,    0,    0,    0,   74, 
+      74,   74,   72,   72,   72,    0,   72,    0,   74,   74,   74,   74,   74,   74,   74,   74, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,   74,   74,   44,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 14
+       0,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   72,   68,   68,   72,   72,   72,   72,   72,   72,   72,    0,    0,    0,    0,   49, 
+      68,   68,   68,   68,   68,   68,   67,    8,    8,    8,    8,    8,    8,   72,    8,   44, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   44,   44,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,   68,   68,    0,   68,    0,    0,   68,   68,    0,   68,    0,    0,   68,    0,    0, 
+       0,    0,    0,    0,   68,   68,   68,   68,    0,   68,   68,   68,   68,   68,   68,   68, 
+       0,   68,   68,   68,    0,   68,    0,   68,    0,    0,   68,   68,    0,   68,   68,   68, 
+      68,   72,   68,   68,   72,   72,   72,   72,   72,   72,    0,   72,   72,   68,    0,    0, 
+      68,   68,   68,   68,   68,    0,   67,    0,    8,    8,    8,    8,    8,   72,    0,    0, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,    0,    0,   68,   68,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 15
+      68,   51,   51,   51,   44,   44,   44,   44,   44,   44,   44,   44,   44,   44,   44,   44, 
+      44,   44,   44,   51,   51,   51,   51,   51,    8,    8,   51,   51,   51,   51,   51,   51, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   18,   18,   18,   18,   18,   18, 
+      18,   18,   18,   18,   51,    8,   51,    8,   51,    8,   41,   42,   41,   42,   10,   10, 
+      68,   68,   68,   68,   68,   68,   68,   68,    0,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0,    0, 
+       0,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   74, 
+      72,   72,    8,    8,    8,   44,    8,    8,   68,   68,   68,   68,    0,    0,    0,    0, 
+      72,   72,   72,   72,   72,   72,   72,   72,    0,   72,   72,   72,   72,   72,   72,   72, 
+      72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72, 
+      72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,    0,   51,   51, 
+      51,   51,   51,   51,   51,   51,    8,   51,   51,   51,   51,   51,   51,    0,   51,   51, 
+      44,   44,   44,   44,   44,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 16
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   74,   74,   72,   72,   72, 
+      72,   74,   72,   72,   72,   72,   72,    8,   74,    8,    8,   74,   74,   72,   72,   68, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   44,   44,   44,   44,   44,   44, 
+      68,   68,   68,   68,   68,   68,   74,   74,   72,   72,   68,   68,   68,   68,   72,   72, 
+      72,   68,   74,   10,   10,   68,   68,   74,   74,   10,   10,   10,   10,   10,   68,   68, 
+      68,   72,   72,   72,   72,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   72,   74,   74,   72,   72,   10,   10,   10,   10,   10,   10,    8,   68,   10, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,    0,    0,   64,   64,   51,   51, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   44,   67,    0,    0,    0, 
+
+
+    // block 17
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   64,   64,   64,   64,   64, 4164, 
+    4164,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   64,   64,   64,   64,   64,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   64,   64,   64,   64,   64,   64, 
+
+
+    // block 18
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,    0,   68,   68,   68,   68,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,    0,   68,    0,   68,   68,   68,   68,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,    0,   68,   68,   68,   68,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,    0,   68,   68,   68,   68,    0,    0,   68,   68,   68,   68,   68,   68,   68,    0, 
+      68,    0,   68,   68,   68,   68,    0,    0,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,    0,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+
+
+    // block 19
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,    0,   68,   68,   68,   68,    0,    0,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0,    0,    0,   72, 
+      51,   44,   44,   44,   44,   44,   44,   44,   44,   18,   18,   18,   18,   18,   18,   18, 
+      18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,    0,    0,    0,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 20
+       0,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+
+
+    // block 21
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+
+
+    // block 22
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   44,   44,   68, 
+      68,   68,   68,   68,   68,   68,   68,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+     536,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   41,   42,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   44,   44,   44,   81,   81, 
+      81,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 23
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,   68,   68, 
+      68,   68,   72,   72,    8,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   72,   72,    8,   44,   44,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   72,   72,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,   68,   68, 
+      68,    0,   72,   72,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68, 4129, 4129,   74,   72,   72,   72,   72,   72,   72,   72,   74,   74, 
+      74,   74,   74,   74,   74,   74,   72,   74,   74,    8,    8,    8,    8,    8,    8,    8, 
+       8,    8,    8,    8,   44,   44,   44,   67,   44,   44,   44,   49,   68,    8,    0,    0, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,    0,    0,    0,    0,    0,    0, 
+      18,   18,   18,   18,   18,   18,   18,   18,   18,   18,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 24
+      44,   44,   44,   44,   44,   44,   40,   44,   44,   44,   44, 4104, 4104, 4104,  536,    0, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,    0,    0,    0,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   67,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,    0,    0,    0,    0,    0,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   72,   68,    0,    0,    0,    0,    0, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 25
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0,    0, 
+      72,   72,   72,   74,   74,   74,   74,   72,   72,   74,   74,   74,    0,    0,    0,    0, 
+      74,   74,   72,   74,   74,   74,   74,   74,   74,    8,    8,    8,    0,    0,    0,    0, 
+      51,    0,    0,    0,   44,   44,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0, 
+      68,   68,   68,   68,   68,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   64,   64,    0,    0,    0,    0, 
+      74,   74,   74,   74,   74,   74,   74,   74,   74,   74,   74,   74,   74,   74,   74,   74, 
+      74,   68,   68,   68,   68,   68,   68,   68,   74,   74,    0,    0,    0,    0,    0,    0, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,    0,    0,    0,    0,   44,   44, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+
+
+    // block 26
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   72,   72,   74,   74,   74,    0,    0,   44,   44, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,    0, 
+       0,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,   64,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 27
+      72,   72,   72,   72,   74,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,    8,   74,   72,   72,   72,   72,   72,   74,   72,   74,   74,   74, 
+      74,   74,   72,   74,   10,   68,   68,   68,   68,   68,   68,   68,    0,    0,    0,    0, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   44,   44,   44,   44,   44,   44, 
+      44,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,    8,    8,    8,    8,    8, 
+       8,    8,    8,    8,   51,   51,   51,   51,   51,   51,   51,   51,   51,    0,    0,    0, 
+      72,   72,   74,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   74,   72,   72,   72,   72,   74,   74,   72,   72,   10,    0,    0,    0,   68,   68, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 28
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   74,   74,   74,   74,   74,   74,   74,   74,   72,   72,   72,   72, 
+      72,   72,   72,   72,   74,   74,    8,    8,    0,    0,    0,   44,   44,   44,   44,   44, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,    0,    0,    0,   68,   68,   68, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   67,   67,   67,   67,   67,   67,   44,   44, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,   64,   64,   64,   64,    0,   64,   64, 
+      64,   64,   64,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 29
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  323,  323,  323,  323, 
+     323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323, 
+     323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323, 
+     323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323, 
+     323,  323,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  323,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  323,  323,  323,  323,  323, 
+     323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323, 
+     323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323, 
+       8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8, 
+       8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8, 
+       8,    8,    8,    8,    8,    8,    8,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    8,    8, 
+
+
+    // block 30
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  321,  321,  321,  321,  321,  321,  321,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+
+
+    // block 31
+     321,  321,  321,  321,  321,  321,  321,  321,  192,  192,  192,  192,  192,  192,  192,  192, 
+     321,  321,  321,  321,  321,  321,    0,    0,  192,  192,  192,  192,  192,  192,    0,    0, 
+     321,  321,  321,  321,  321,  321,  321,  321,  192,  192,  192,  192,  192,  192,  192,  192, 
+     321,  321,  321,  321,  321,  321,  321,  321,  192,  192,  192,  192,  192,  192,  192,  192, 
+     321,  321,  321,  321,  321,  321,    0,    0,  192,  192,  192,  192,  192,  192,    0,    0, 
+     321,  321,  321,  321,  321,  321,  321,  321,    0,  192,    0,  192,    0,  192,    0,  192, 
+     321,  321,  321,  321,  321,  321,  321,  321,  192,  192,  192,  192,  192,  192,  192,  192, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,    0,    0, 
+     321,  321,  321,  321,  321,  321,  321,  321,   66,   66,   66,   66,   66,   66,   66,   66, 
+     321,  321,  321,  321,  321,  321,  321,  321,   66,   66,   66,   66,   66,   66,   66,   66, 
+     321,  321,  321,  321,  321,  321,  321,  321,   66,   66,   66,   66,   66,   66,   66,   66, 
+     321,  321,  321,  321,  321,    0,  321,  321,  192,  192,  192,  192,   66,   50,  321,   50, 
+      50,   50,  321,  321,  321,    0,  321,  321,  192,  192,  192,  192,   66,   50,   50,   50, 
+     321,  321,  321,  321,    0,    0,  321,  321,  192,  192,  192,  192,    0,   50,   50,   50, 
+     321,  321,  321,  321,  321,  321,  321,  321,  192,  192,  192,  192,  192,   50,   50,   50, 
+       0,    0,  321,  321,  321,    0,  321,  321,  192,  192,  192,  192,   66,   50,   50,    0, 
+
+
+    // block 32
+     536,  536,  536,  536,  536,  536,  536,  536,  536,  536,  536, 4129, 4129, 4129, 4129, 4129, 
+      40,   40,   40,   40,   40,   40,   44,   44,   45,   46,   41,   45,   45,   46,   41,   45, 
+      44,   44,   44,   44,   44,   44,   44,   44,  537,  538, 4129, 4129, 4129, 4129, 4129,  536, 
+      44,   44,   44,   44,   44,   44,   44,   44,   44,   45,   46,   44,   44,   44,   44,   43, 
+      43,   44,   44,   44,   48,   41,   42,   44,   44,   44,   44,   44,   44,   44,   44,   44, 
+      44,   44,   48,   44,   43,   44,   44,   44,   44,   44,   44,   44,   44,   44,   44,  536, 
+    4129, 4129, 4129, 4129, 4129, 4096, 4096, 4096, 4096, 4096, 4129, 4129, 4129, 4129, 4129, 4129, 
+      18,   65,    0,    0,   18,   18,   18,   18,   18,   18,   48,   48,   48,   41,   42,   65, 
+      18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   48,   48,   48,   41,   42,    0, 
+     323,  323,  323,  323,  323,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      49,   49,   49,   49,   49,   49,   49,   49,   49,   49,   49,   49,   49,   49,   49,   49, 
+      49,   49,   49,   49,   49,   49,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    9,    9,    9, 
+       9,    8,    9,    9,    9,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8, 
+       8,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 33
+      51,   51,  192,   51,   51,   51,   51,  192,   51,   51,  321,  192,  192,  192,  321,  321, 
+     192,  192,  192,  321,   51,  192,   51,   51,   51,  192,  192,  192,  192,  192,   51,   51, 
+      51,   51,   51,   51,  192,   51,  192,   51,  192,   51,  192,  192,  192,  192,   51,  321, 
+     192,  192,  192,  192,  321,   68,   68,   68,   68,  321,   51,   51,  321,  321,  192,  192, 
+      48,   48,   48,   48,   48,  192,  321,  321,  321,  321,   51,   48,   51,   51,  321,   51, 
+       0,    0,    0,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18, 
+     209,  209,  209,  209,  209,  209,  209,  209,  209,  209,  209,  209,  209,  209,  209,  209, 
+     337,  337,  337,  337,  337,  337,  337,  337,  337,  337,  337,  337,  337,  337,  337,  337, 
+      81,   81,   81,  192,  321,   81,   81,   81,   81,    0,    0,    0,    0,    0,    0,    0, 
+      48,   48,   48,   48,   48,   51,   51,   51,   51,   51,   48,   48,   51,   51,   51,   51, 
+      48,   51,   51,   48,   51,   51,   48,   51,   51,   51,   51,   51,   51,   51,   48,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   48,   48, 
+      51,   51,   48,   51,   48,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+
+
+    // block 34
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+
+
+    // block 35
+      51,   51,   51,   51,   51,   51,   51,   51,   48,   48,   48,   48,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      48,   48,   51,   51,   51,   51,   51,   51,   51,   41,   42,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   48,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   48,   48,   48,   48, 
+      48,   48,   51,   51,   51,   51,   51,   51,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 36
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18, 
+      18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18, 
+      18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18, 
+      18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,  243,  243,  243,  243,  243,  243,  243,  243,  243,  243, 
+     243,  243,  243,  243,  243,  243,  243,  243,  243,  243,  243,  243,  243,  243,  243,  243, 
+     371,  371,  371,  371,  371,  371,  371,  371,  371,  371,  371,  371,  371,  371,  371,  371, 
+     371,  371,  371,  371,  371,  371,  371,  371,  371,  371,   18,   18,   18,   18,   18,   18, 
+      18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18, 
+
+
+    // block 37
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   48,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   48,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   48,   48,   48,   48,   48,   48,   48,   48, 
+
+
+    // block 38
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   48, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,    0,    0, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,    0,    0,    0, 
+      51,   51,   51,   51,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 39
+       0,   51,   51,   51,   51,    0,   51,   51,   51,   51,    0,    0,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,    0,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,    0,   51,    0,   51, 
+      51,   51,   51,    0,    0,    0,   51,    0,   51,   51,   51,   51,   51,   51,   51,    0, 
+       0,   51,   51,   51,   51,   51,   51,   51,   41,   42,   41,   42,   41,   42,   41,   42, 
+      41,   42,   41,   42,   41,   42,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18, 
+      18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18, 
+      18,   18,   18,   18,   51,    0,    0,    0,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+       0,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,    0, 
+      48,   48,   48,   48,   48,   41,   42,   48,   48,   48,   48,    0,   48,    0,    0,    0, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   41,   42,   41,   42,   41,   42,   41,   42,   41,   42, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+
+
+    // block 40
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+
+
+    // block 41
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   41,   42,   41,   42,   41,   42,   41,   42,   41,   42,   41,   42,   41, 
+      42,   41,   42,   41,   42,   41,   42,   41,   42,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   41,   42,   41,   42,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   41,   42,   48,   48, 
+
+
+    // block 42
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   51,   51,   48,   48,   48,   48,   48,   48,    0,    0,    0, 
+      51,   51,   51,   51,   51,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 43
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,    0, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,    0, 
+     192,  321,  192,  192,  192,  321,  321,  192,  321,  192,  321,  192,  321,  192,  192,  192, 
+     192,  321,  192,  321,  321,  192,  321,  321,  321,  321,  321,  321,  321,  323,  192,  192, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  321,   51,   51,   51,   51,   51,   51,  192,  320,  192,  320,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,   44,   44,   44,   44,   18,   44,   44, 
+
+
+    // block 44
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,    0,    0,    0,    0,    0,    0,    0,    0,    0,   67, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,    0,   68,   68,   68,   68,   68,   68,   68,    0, 
+      68,   68,   68,   68,   68,   68,   68,    0,   68,   68,   68,   68,   68,   68,   68,    0, 
+      68,   68,   68,   68,   68,   68,   68,    0,   68,   68,   68,   68,   68,   68,   68,    0, 
+      68,   68,   68,   68,   68,   68,   68,    0,   68,   68,   68,   68,   68,   68,   68,    0, 
+      72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72, 
+      72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72, 
+
+
+    // block 45
+      44,   44,   45,   46,   45,   46,   44,   44,   44,   45,   46,   44,   45,   46,   44,   44, 
+      44,   44,   44,   44,   44,   44,   44,   40,   44,   44,   40,   44,   45,   46,   44,   44, 
+      45,   46,   41,   42,   41,   42,   41,   42,   41,   42,   44,   44,   44,   44,   44,   67, 
+      44,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,    0,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 46
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,    0,    0,    0,    0, 
+
+
+    // block 47
+     536,   44,   44,   44,   51,   67,   68,   81,   41,   42,   41,   42,   41,   42,   41,   42, 
+      41,   42,   51,   51,   41,   42,   41,   42,   41,   42,   41,   42,   40,   41,   42,   42, 
+      51,   81,   81,   81,   81,   81,   81,   81,   81,   81,    8,    8,    8,    8,    8,    8, 
+      40,   67,   67,   67,   67,   67,   51,   51,   81,   81,   81,   67,   68,   44,   51,   51, 
+       0,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,    0,    0,    8,    8,   50,   50,   67,   67,   68, 
+      40,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   44,   67,   67,   67,   68, 
+
+
+    // block 48
+       0,    0,    0,    0,    0,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0, 
+       0,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68, 4164,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0, 
+      51,   51,   18,   18,   18,   18,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,    0,    0,    0,    0,    0,    0,    0,    0, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+
+
+    // block 49
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,    0, 
+      18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      51,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,    0, 
+
+
+    // block 50
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+
+
+    // block 51
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   64,   64,   64,   64,   64,   64,   64,   64,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 52
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   67,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+
+
+    // block 53
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0,    0, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,    0,    0, 
+
+
+    // block 54
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   67,   44,   44,   44, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   68,   68,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+       0,    0,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,   68,    8, 
+       9,    9,    9,   44,    0,    0,    0,    0,    0,    0,    0,    0,    8,    8,   44,   67, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,    0,    0,    0,    0,    0,    0,    0,    0, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 55
+      50,   50,   50,   50,   50,   50,   50,   50,   50,   50,   50,   50,   50,   50,   50,   50, 
+      50,   50,   50,   50,   50,   50,   50,   67,   67,   67,   67,   67,   67,   67,   67,   67, 
+      50,   50,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     321,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     323,  321,  321,  321,  321,  321,  321,  321,  321,  192,  321,  192,  321,  192,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,   67,   50,   50,  192,  321,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,   68,   68,   68,   68,   68, 
+
+
+    // block 56
+      68,   68,    8,   68,   68,   68,    8,   68,   68,   68,   68,    8,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   74,   74,   72,   72,   74,   51,   51,   51,   51,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   44,   44,   44,   44,    0,    0,    0,    0,    0,    0,    0,    0, 
+      74,   74,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   74,   74,   74,   74,   74,   74,   74,   74,   74,   74,   74,   74, 
+      74,   74,   74,   74,    8,    0,    0,    0,    0,    0,    0,    0,    0,    0,   44,   44, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,   64,   64,   64,   64,   64,   64,    0,    0,    0,   64,    0,    0,    0,    0, 
+
+
+    // block 57
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   72,   72,   72,   72,   72,    8,    8,    8,   44,   44, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   72,   72,   72,   72,   72,   72,   72,   72,   72, 
+      72,   72,   74,   10,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,   44, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,    0,    0,    0, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,   64, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 58
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   72,   72,   72,   72,   72,   72,   74, 
+      74,   72,   72,   74,   74,   72,   72,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      68,   68,   68,   72,   68,   68,   68,   68,   68,   68,   68,   68,   72,   74,    0,    0, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,    0,    0,   44,   44,   44,   44, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,    0,    0,    0,   64,    0,    0,    0,    0,    0, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,    0, 
+      64,    0,   64,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,   64,   64,   64,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 59
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 60
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,    0,    0,    0,    0,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,    0,    0,    0,    0, 
+
+
+    // block 61
+      35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35, 
+      35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35, 
+      35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35, 
+      35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35, 
+      35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35, 
+      35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35, 
+      35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35, 
+      35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35, 
+      35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35, 
+      35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35, 
+      35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35, 
+      35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35, 
+      35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35, 
+      35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35, 
+      35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35, 
+      35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35, 
+
+
+    // block 62
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+
+
+    // block 63
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   64,   64,   64,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 64
+     321,  321,  321,  321,  321,  321,  321,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,  321,  321,  321,  321,  321,    0,    0,    0,    0,    0,   68,   72,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   48,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,    0,   68,   68,   68,   68,   68,    0,   68,    0, 
+      68,   68,    0,   68,   68,    0,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+
+
+    // block 65
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   41,   42, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+       0,    0,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,    0,    0,    0,    0,    0,    0,    0,    0, 
+    2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
+    2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   49,   51,    0,    0, 
+
+
+    // block 66
+    4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 
+      44,   44,   44,   44,   44,   44,   44,   41,   42,   44,    0,    0,    0,    0,    0,    0, 
+       8,    8,    8,    8,    8,    8,    8,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      44,   40,   40,   43,   43,   41,   42,   41,   42,   41,   42,   41,   42,   41,   42,   41, 
+      42,   41,   42,   41,   42,   44,   44,   41,   42,   44,   44,   44,   44,   43,   43,   43, 
+      44,   44,   44,    0,   44,   44,   44,   44,   40,   41,   42,   41,   42,   41,   42,   44, 
+      44,   44,   48,   40,   48,   48,   48,    0,   44,   49,   44,   44,    0,    0,    0,    0, 
+      68,   68,   68,   68,   68,    0,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0, 4129, 
+
+
+    // block 67
+       0,   44,   44,   44,   49,   44,   44,   44,   41,   42,   44,   48,   44,   40,   44,   44, 
+    1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040,   44,   44,   48,   48,   48,   44, 
+      44, 1216, 1216, 1216, 1216, 1216, 1216,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,   41,   44,   42,   50,   43, 
+      50, 1345, 1345, 1345, 1345, 1345, 1345,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,   41,   48,   42,   48,   41, 
+      42,   44,   41,   42,   44,   44,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      67,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   67,   67, 
+    4164,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0, 
+       0,    0,   68,   68,   68,   68,   68,   68,    0,    0,   68,   68,   68,   68,   68,   68, 
+       0,    0,   68,   68,   68,   68,   68,   68,    0,    0,   68,   68,   68,    0,    0,    0, 
+      49,   49,   48,   50,   51,   49,   49,    0,   51,   48,   48,   48,   48,   51,   51,    0, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096,   33,   33,   33,   51,   51, 2048, 2048, 
+
+
+    // block 68
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,    0,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,   68,   68,    0,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0,    0,    0,    0, 
+
+
+    // block 69
+      44,   44,   51,    0,    0,    0,    0,   18,   18,   18,   18,   18,   18,   18,   18,   18, 
+      18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18, 
+      18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18, 
+      18,   18,   18,   18,    0,    0,    0,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81, 
+      81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81, 
+      81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81, 
+      81,   81,   81,   81,   81,   18,   18,   18,   18,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   18,    0,    0,    0,    0,    0, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,    8,    0,    0, 
+
+
+    // block 70
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 71
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0, 
+      18,   18,   18,   18,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   81,   68,   68,   68,   68,   68,   68,   68,   68,   81,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,   44, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,    0,    0,    0,    0,   68,   68,   68,   68,   68,   68,   68,   68, 
+      44,   81,   81,   81,   81,   81,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 72
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 73
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 74
+      68,   68,   68,   68,   68,   68,    0,    0,   68,    0,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,    0,   68,   68,    0,    0,    0,   68,    0,    0,   68, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 75
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   18,   18,   18,   18,    0,    0,    0,    0,    0,   44, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0,    0,    0,    0,   44, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 76
+      68,   72,   72,   72,    0,   72,   72,    0,    0,    0,    0,    0,   72,   72,   72,   72, 
+      68,   68,   68,   68,    0,   68,   68,   68,    0,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,    0,    0,    0,    0,    8,    8,    8,    0,    0,    0,    0,    8, 
+      18,   18,   18,   18,   18,   18,   18,   18,    0,    0,    0,    0,    0,    0,    0,    0, 
+      44,   44,   44,   44,   44,   44,   44,   44,   44,    0,    0,    0,    0,    0,    0,    0, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 77
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 78
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 79
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 80
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 81
+      81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81, 
+      81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81, 
+      81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81, 
+      81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81, 
+      81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81, 
+      81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81, 
+      81,   81,   81,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      44,   44,   44,   44,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 82
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+
+
+    // block 83
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 84
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 85
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,    0,    0,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   10,   10,    8,    8,    8,   51,   51,   51,   10,   10,   10, 
+      10,   10,   10, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129,    8,    8,    8,    8,    8, 
+       8,    8,    8,   51,   51,    8,    8,    8,    8,    8,    8,    8,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,    8,    8,    8,    8,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 86
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,    8,    8,    8,   51,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 87
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18, 
+      18,   18,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 88
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  321,  321, 
+     321,  321,  321,  321,  321,    0,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  192,    0,  192,  192, 
+       0,    0,  192,    0,    0,  192,  192,    0,    0,  192,  192,  192,  192,    0,  192,  192, 
+     192,  192,  192,  192,  192,  192,  321,  321,  321,  321,    0,  321,    0,  321,  321,  321, 
+     321,  321,  321,  321,    0,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+
+
+    // block 89
+     321,  321,  321,  321,  192,  192,    0,  192,  192,  192,  192,    0,    0,  192,  192,  192, 
+     192,  192,  192,  192,  192,    0,  192,  192,  192,  192,  192,  192,  192,    0,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  192,  192,    0,  192,  192,  192,  192,    0, 
+     192,  192,  192,  192,  192,    0,  192,    0,    0,    0,  192,  192,  192,  192,  192,  192, 
+     192,    0,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+
+
+    // block 90
+     321,  321,  321,  321,  321,  321,  321,  321,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,    0,    0,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,   48,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,   48,  321,  321,  321,  321, 
+     321,  321,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,   48,  321,  321,  321,  321, 
+
+
+    // block 91
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,   48,  321,  321,  321,  321,  321,  321,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,   48,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,   48, 
+     321,  321,  321,  321,  321,  321,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,   48, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,   48,  321,  321,  321,  321,  321,  321, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,   48,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,   48,  321,  321,  321,  321,  321,  321,  192,  321,    0,    0,   16,   16, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16, 
+
+
+    // block 92
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,    0,    0,    0,    0, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 93
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 2048, 2048, 
+
+
+    // block 94
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 95
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 96
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 97
+    4096, 4129, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 
+    4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 
+    4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 
+    4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 
+    4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 
+    4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+
+
+    // block 98
+    4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 
+    4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 
+    4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 
+    4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 
+    4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 
+    4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 
+    4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 
+    4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 
+    4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 
+    4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 
+    4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 
+    4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 
+    4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 
+    4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 
+    4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+
+
+    // block 99
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+
+
+    // block 100
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 2048, 2048
+    };
+
+    inline ::boost::uint16_t category_lookup(::boost::uint32_t ch)
+    {
+        ::boost::uint32_t block_offset = category_stage1[ch / 256] * 256;
+        return category_stage2[block_offset + ch % 256];
+    }
+
+}}}} // namespace boost::spirit::unicode::detail
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/char_encoding/unicode/lowercase_table.hpp b/3rdParty/Boost/src/boost/spirit/home/support/char_encoding/unicode/lowercase_table.hpp
new file mode 100644
index 0000000..8ccf635
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/char_encoding/unicode/lowercase_table.hpp
@@ -0,0 +1,620 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+    AUTOGENERATED. DO NOT EDIT!!!
+==============================================================================*/
+#include <boost/cstdint.hpp>
+
+namespace boost { namespace spirit { namespace ucd { namespace detail
+{
+    static const ::boost::uint8_t lowercase_stage1[] = {
+
+      0,   1,   2,   3,   4,   5,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      7,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   8,   9, 
+      6,  10,   6,   6,  11,   6,   6,   6,   6,   6,   6,   6,  12,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,  13,  14,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,  15, 
+      6,   6,   6,   6,  16,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6
+    };
+
+    static const ::boost::uint32_t lowercase_stage2[] = {
+
+    // block 0
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,     97,     98,     99,    100,    101,    102,    103,    104,    105,    106,    107,    108,    109,    110,    111, 
+       112,    113,    114,    115,    116,    117,    118,    119,    120,    121,    122,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+       224,    225,    226,    227,    228,    229,    230,    231,    232,    233,    234,    235,    236,    237,    238,    239, 
+       240,    241,    242,    243,    244,    245,    246,      0,    248,    249,    250,    251,    252,    253,    254,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 1
+       257,      0,    259,      0,    261,      0,    263,      0,    265,      0,    267,      0,    269,      0,    271,      0, 
+       273,      0,    275,      0,    277,      0,    279,      0,    281,      0,    283,      0,    285,      0,    287,      0, 
+       289,      0,    291,      0,    293,      0,    295,      0,    297,      0,    299,      0,    301,      0,    303,      0, 
+       105,      0,    307,      0,    309,      0,    311,      0,      0,    314,      0,    316,      0,    318,      0,    320, 
+         0,    322,      0,    324,      0,    326,      0,    328,      0,      0,    331,      0,    333,      0,    335,      0, 
+       337,      0,    339,      0,    341,      0,    343,      0,    345,      0,    347,      0,    349,      0,    351,      0, 
+       353,      0,    355,      0,    357,      0,    359,      0,    361,      0,    363,      0,    365,      0,    367,      0, 
+       369,      0,    371,      0,    373,      0,    375,      0,    255,    378,      0,    380,      0,    382,      0,      0, 
+         0,    595,    387,      0,    389,      0,    596,    392,      0,    598,    599,    396,      0,      0,    477,    601, 
+       603,    402,      0,    608,    611,      0,    617,    616,    409,      0,      0,      0,    623,    626,      0,    629, 
+       417,      0,    419,      0,    421,      0,    640,    424,      0,    643,      0,      0,    429,      0,    648,    432, 
+         0,    650,    651,    436,      0,    438,      0,    658,    441,      0,      0,      0,    445,      0,      0,      0, 
+         0,      0,      0,      0,    454,    454,      0,    457,    457,      0,    460,    460,      0,    462,      0,    464, 
+         0,    466,      0,    468,      0,    470,      0,    472,      0,    474,      0,    476,      0,      0,    479,      0, 
+       481,      0,    483,      0,    485,      0,    487,      0,    489,      0,    491,      0,    493,      0,    495,      0, 
+         0,    499,    499,      0,    501,      0,    405,    447,    505,      0,    507,      0,    509,      0,    511,      0, 
+
+
+    // block 2
+       513,      0,    515,      0,    517,      0,    519,      0,    521,      0,    523,      0,    525,      0,    527,      0, 
+       529,      0,    531,      0,    533,      0,    535,      0,    537,      0,    539,      0,    541,      0,    543,      0, 
+       414,      0,    547,      0,    549,      0,    551,      0,    553,      0,    555,      0,    557,      0,    559,      0, 
+       561,      0,    563,      0,      0,      0,      0,      0,      0,      0,  11365,    572,      0,    410,  11366,      0, 
+         0,    578,      0,    384,    649,    652,    583,      0,    585,      0,    587,      0,    589,      0,    591,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 3
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+       881,      0,    883,      0,      0,      0,    887,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,    940,      0,    941,    942,    943,      0,    972,      0,    973,    974, 
+         0,    945,    946,    947,    948,    949,    950,    951,    952,    953,    954,    955,    956,    957,    958,    959, 
+       960,    961,      0,    963,    964,    965,    966,    967,    968,    969,    970,    971,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,    983, 
+         0,      0,      0,      0,      0,      0,      0,      0,    985,      0,    987,      0,    989,      0,    991,      0, 
+       993,      0,    995,      0,    997,      0,    999,      0,   1001,      0,   1003,      0,   1005,      0,   1007,      0, 
+         0,      0,      0,      0,    952,      0,      0,   1016,      0,   1010,   1019,      0,      0,    891,    892,    893, 
+
+
+    // block 4
+      1104,   1105,   1106,   1107,   1108,   1109,   1110,   1111,   1112,   1113,   1114,   1115,   1116,   1117,   1118,   1119, 
+      1072,   1073,   1074,   1075,   1076,   1077,   1078,   1079,   1080,   1081,   1082,   1083,   1084,   1085,   1086,   1087, 
+      1088,   1089,   1090,   1091,   1092,   1093,   1094,   1095,   1096,   1097,   1098,   1099,   1100,   1101,   1102,   1103, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+      1121,      0,   1123,      0,   1125,      0,   1127,      0,   1129,      0,   1131,      0,   1133,      0,   1135,      0, 
+      1137,      0,   1139,      0,   1141,      0,   1143,      0,   1145,      0,   1147,      0,   1149,      0,   1151,      0, 
+      1153,      0,      0,      0,      0,      0,      0,      0,      0,      0,   1163,      0,   1165,      0,   1167,      0, 
+      1169,      0,   1171,      0,   1173,      0,   1175,      0,   1177,      0,   1179,      0,   1181,      0,   1183,      0, 
+      1185,      0,   1187,      0,   1189,      0,   1191,      0,   1193,      0,   1195,      0,   1197,      0,   1199,      0, 
+      1201,      0,   1203,      0,   1205,      0,   1207,      0,   1209,      0,   1211,      0,   1213,      0,   1215,      0, 
+      1231,   1218,      0,   1220,      0,   1222,      0,   1224,      0,   1226,      0,   1228,      0,   1230,      0,      0, 
+      1233,      0,   1235,      0,   1237,      0,   1239,      0,   1241,      0,   1243,      0,   1245,      0,   1247,      0, 
+      1249,      0,   1251,      0,   1253,      0,   1255,      0,   1257,      0,   1259,      0,   1261,      0,   1263,      0, 
+      1265,      0,   1267,      0,   1269,      0,   1271,      0,   1273,      0,   1275,      0,   1277,      0,   1279,      0, 
+
+
+    // block 5
+      1281,      0,   1283,      0,   1285,      0,   1287,      0,   1289,      0,   1291,      0,   1293,      0,   1295,      0, 
+      1297,      0,   1299,      0,   1301,      0,   1303,      0,   1305,      0,   1307,      0,   1309,      0,   1311,      0, 
+      1313,      0,   1315,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,   1377,   1378,   1379,   1380,   1381,   1382,   1383,   1384,   1385,   1386,   1387,   1388,   1389,   1390,   1391, 
+      1392,   1393,   1394,   1395,   1396,   1397,   1398,   1399,   1400,   1401,   1402,   1403,   1404,   1405,   1406,   1407, 
+      1408,   1409,   1410,   1411,   1412,   1413,   1414,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 6
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 7
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+     11520,  11521,  11522,  11523,  11524,  11525,  11526,  11527,  11528,  11529,  11530,  11531,  11532,  11533,  11534,  11535, 
+     11536,  11537,  11538,  11539,  11540,  11541,  11542,  11543,  11544,  11545,  11546,  11547,  11548,  11549,  11550,  11551, 
+     11552,  11553,  11554,  11555,  11556,  11557,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 8
+      7681,      0,   7683,      0,   7685,      0,   7687,      0,   7689,      0,   7691,      0,   7693,      0,   7695,      0, 
+      7697,      0,   7699,      0,   7701,      0,   7703,      0,   7705,      0,   7707,      0,   7709,      0,   7711,      0, 
+      7713,      0,   7715,      0,   7717,      0,   7719,      0,   7721,      0,   7723,      0,   7725,      0,   7727,      0, 
+      7729,      0,   7731,      0,   7733,      0,   7735,      0,   7737,      0,   7739,      0,   7741,      0,   7743,      0, 
+      7745,      0,   7747,      0,   7749,      0,   7751,      0,   7753,      0,   7755,      0,   7757,      0,   7759,      0, 
+      7761,      0,   7763,      0,   7765,      0,   7767,      0,   7769,      0,   7771,      0,   7773,      0,   7775,      0, 
+      7777,      0,   7779,      0,   7781,      0,   7783,      0,   7785,      0,   7787,      0,   7789,      0,   7791,      0, 
+      7793,      0,   7795,      0,   7797,      0,   7799,      0,   7801,      0,   7803,      0,   7805,      0,   7807,      0, 
+      7809,      0,   7811,      0,   7813,      0,   7815,      0,   7817,      0,   7819,      0,   7821,      0,   7823,      0, 
+      7825,      0,   7827,      0,   7829,      0,      0,      0,      0,      0,      0,      0,      0,      0,    223,      0, 
+      7841,      0,   7843,      0,   7845,      0,   7847,      0,   7849,      0,   7851,      0,   7853,      0,   7855,      0, 
+      7857,      0,   7859,      0,   7861,      0,   7863,      0,   7865,      0,   7867,      0,   7869,      0,   7871,      0, 
+      7873,      0,   7875,      0,   7877,      0,   7879,      0,   7881,      0,   7883,      0,   7885,      0,   7887,      0, 
+      7889,      0,   7891,      0,   7893,      0,   7895,      0,   7897,      0,   7899,      0,   7901,      0,   7903,      0, 
+      7905,      0,   7907,      0,   7909,      0,   7911,      0,   7913,      0,   7915,      0,   7917,      0,   7919,      0, 
+      7921,      0,   7923,      0,   7925,      0,   7927,      0,   7929,      0,   7931,      0,   7933,      0,   7935,      0, 
+
+
+    // block 9
+         0,      0,      0,      0,      0,      0,      0,      0,   7936,   7937,   7938,   7939,   7940,   7941,   7942,   7943, 
+         0,      0,      0,      0,      0,      0,      0,      0,   7952,   7953,   7954,   7955,   7956,   7957,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,   7968,   7969,   7970,   7971,   7972,   7973,   7974,   7975, 
+         0,      0,      0,      0,      0,      0,      0,      0,   7984,   7985,   7986,   7987,   7988,   7989,   7990,   7991, 
+         0,      0,      0,      0,      0,      0,      0,      0,   8000,   8001,   8002,   8003,   8004,   8005,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,   8017,      0,   8019,      0,   8021,      0,   8023, 
+         0,      0,      0,      0,      0,      0,      0,      0,   8032,   8033,   8034,   8035,   8036,   8037,   8038,   8039, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,   8064,   8065,   8066,   8067,   8068,   8069,   8070,   8071, 
+         0,      0,      0,      0,      0,      0,      0,      0,   8080,   8081,   8082,   8083,   8084,   8085,   8086,   8087, 
+         0,      0,      0,      0,      0,      0,      0,      0,   8096,   8097,   8098,   8099,   8100,   8101,   8102,   8103, 
+         0,      0,      0,      0,      0,      0,      0,      0,   8112,   8113,   8048,   8049,   8115,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,   8050,   8051,   8052,   8053,   8131,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,   8144,   8145,   8054,   8055,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,   8160,   8161,   8058,   8059,   8165,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,   8056,   8057,   8060,   8061,   8179,      0,      0,      0, 
+
+
+    // block 10
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,    969,      0,      0,      0,    107,    229,      0,      0,      0,      0, 
+         0,      0,   8526,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+      8560,   8561,   8562,   8563,   8564,   8565,   8566,   8567,   8568,   8569,   8570,   8571,   8572,   8573,   8574,   8575, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,   8580,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 11
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,   9424,   9425,   9426,   9427,   9428,   9429,   9430,   9431,   9432,   9433, 
+      9434,   9435,   9436,   9437,   9438,   9439,   9440,   9441,   9442,   9443,   9444,   9445,   9446,   9447,   9448,   9449, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 12
+     11312,  11313,  11314,  11315,  11316,  11317,  11318,  11319,  11320,  11321,  11322,  11323,  11324,  11325,  11326,  11327, 
+     11328,  11329,  11330,  11331,  11332,  11333,  11334,  11335,  11336,  11337,  11338,  11339,  11340,  11341,  11342,  11343, 
+     11344,  11345,  11346,  11347,  11348,  11349,  11350,  11351,  11352,  11353,  11354,  11355,  11356,  11357,  11358,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+     11361,      0,    619,   7549,    637,      0,      0,  11368,      0,  11370,      0,  11372,      0,    593,    625,    592, 
+         0,      0,  11379,      0,      0,  11382,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+     11393,      0,  11395,      0,  11397,      0,  11399,      0,  11401,      0,  11403,      0,  11405,      0,  11407,      0, 
+     11409,      0,  11411,      0,  11413,      0,  11415,      0,  11417,      0,  11419,      0,  11421,      0,  11423,      0, 
+     11425,      0,  11427,      0,  11429,      0,  11431,      0,  11433,      0,  11435,      0,  11437,      0,  11439,      0, 
+     11441,      0,  11443,      0,  11445,      0,  11447,      0,  11449,      0,  11451,      0,  11453,      0,  11455,      0, 
+     11457,      0,  11459,      0,  11461,      0,  11463,      0,  11465,      0,  11467,      0,  11469,      0,  11471,      0, 
+     11473,      0,  11475,      0,  11477,      0,  11479,      0,  11481,      0,  11483,      0,  11485,      0,  11487,      0, 
+     11489,      0,  11491,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 13
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+     42561,      0,  42563,      0,  42565,      0,  42567,      0,  42569,      0,  42571,      0,  42573,      0,  42575,      0, 
+     42577,      0,  42579,      0,  42581,      0,  42583,      0,  42585,      0,  42587,      0,  42589,      0,  42591,      0, 
+         0,      0,  42595,      0,  42597,      0,  42599,      0,  42601,      0,  42603,      0,  42605,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+     42625,      0,  42627,      0,  42629,      0,  42631,      0,  42633,      0,  42635,      0,  42637,      0,  42639,      0, 
+     42641,      0,  42643,      0,  42645,      0,  42647,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 14
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,  42787,      0,  42789,      0,  42791,      0,  42793,      0,  42795,      0,  42797,      0,  42799,      0, 
+         0,      0,  42803,      0,  42805,      0,  42807,      0,  42809,      0,  42811,      0,  42813,      0,  42815,      0, 
+     42817,      0,  42819,      0,  42821,      0,  42823,      0,  42825,      0,  42827,      0,  42829,      0,  42831,      0, 
+     42833,      0,  42835,      0,  42837,      0,  42839,      0,  42841,      0,  42843,      0,  42845,      0,  42847,      0, 
+     42849,      0,  42851,      0,  42853,      0,  42855,      0,  42857,      0,  42859,      0,  42861,      0,  42863,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,  42874,      0,  42876,      0,   7545,  42879,      0, 
+     42881,      0,  42883,      0,  42885,      0,  42887,      0,      0,      0,      0,  42892,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 15
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,  65345,  65346,  65347,  65348,  65349,  65350,  65351,  65352,  65353,  65354,  65355,  65356,  65357,  65358,  65359, 
+     65360,  65361,  65362,  65363,  65364,  65365,  65366,  65367,  65368,  65369,  65370,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 16
+     66600,  66601,  66602,  66603,  66604,  66605,  66606,  66607,  66608,  66609,  66610,  66611,  66612,  66613,  66614,  66615, 
+     66616,  66617,  66618,  66619,  66620,  66621,  66622,  66623,  66624,  66625,  66626,  66627,  66628,  66629,  66630,  66631, 
+     66632,  66633,  66634,  66635,  66636,  66637,  66638,  66639,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0
+    };
+
+    inline ::boost::uint32_t lowercase_lookup(::boost::uint32_t ch)
+    {
+        ::boost::uint32_t block_offset = lowercase_stage1[ch / 256] * 256;
+        return lowercase_stage2[block_offset + ch % 256];
+    }
+
+}}}} // namespace boost::spirit::unicode::detail
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/char_encoding/unicode/query.hpp b/3rdParty/Boost/src/boost/spirit/home/support/char_encoding/unicode/query.hpp
new file mode 100644
index 0000000..3a0526c
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/char_encoding/unicode/query.hpp
@@ -0,0 +1,305 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+    Autogenerated by MultiStageTable.py (Unicode multi-stage
+    table builder) (c) Peter Kankowski, 2008
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_UNICODE_QUERY_FEBRUARY_2_2010)
+#define BOOST_SPIRIT_UNICODE_QUERY_FEBRUARY_2_2010
+
+#include <boost/cstdint.hpp>
+
+# include "category_table.hpp"
+# include "script_table.hpp"
+# include "lowercase_table.hpp"
+# include "uppercase_table.hpp"
+
+namespace boost { namespace spirit { namespace ucd
+{
+    // This header provides Basic (Level 1) Unicode Support
+    // See http://unicode.org/reports/tr18/ for details
+
+    struct properties
+    {
+        // bit pattern: xxMMMCCC
+        // MMM: major_category
+        // CCC: category
+
+        enum major_category
+        {
+            letter,
+            mark,
+            number,
+            separator,
+            other,
+            punctuation,
+            symbol
+        };
+
+        enum category
+        {
+            uppercase_letter = 0,   // [Lu] an uppercase letter
+            lowercase_letter,       // [Ll] a lowercase letter
+            titlecase_letter,       // [Lt] a digraphic character, with first part uppercase
+            modifier_letter,        // [Lm] a modifier letter
+            other_letter,           // [Lo] other letters, including syllables and ideographs
+
+            nonspacing_mark = 8,    // [Mn] a nonspacing combining mark (zero advance width)
+            enclosing_mark,         // [Me] an enclosing combining mark
+            spacing_mark,           // [Mc] a spacing combining mark (positive advance width)
+
+            decimal_number = 16,    // [Nd] a decimal digit
+            letter_number,          // [Nl] a letterlike numeric character
+            other_number,           // [No] a numeric character of other type
+
+            space_separator = 24,   // [Zs] a space character (of various non-zero widths)
+            line_separator,         // [Zl] U+2028 LINE SEPARATOR only
+            paragraph_separator,    // [Zp] U+2029 PARAGRAPH SEPARATOR only
+
+            control = 32,           // [Cc] a C0 or C1 control code
+            format,                 // [Cf] a format control character
+            private_use,            // [Co] a private-use character
+            surrogate,              // [Cs] a surrogate code point
+            unassigned,             // [Cn] a reserved unassigned code point or a noncharacter
+
+            dash_punctuation = 40,  // [Pd] a dash or hyphen punctuation mark
+            open_punctuation,       // [Ps] an opening punctuation mark (of a pair)
+            close_punctuation,      // [Pe] a closing punctuation mark (of a pair)
+            connector_punctuation,  // [Pc] a connecting punctuation mark, like a tie
+            other_punctuation,      // [Po] a punctuation mark of other type
+            initial_punctuation,    // [Pi] an initial quotation mark
+            final_punctuation,      // [Pf] a final quotation mark
+
+            math_symbol = 48,       // [Sm] a symbol of primarily mathematical use
+            currency_symbol,        // [Sc] a currency sign
+            modifier_symbol,        // [Sk] a non-letterlike modifier symbol
+            other_symbol            // [So] a symbol of other type
+        };
+
+        enum derived_properties
+        {
+            alphabetic = 64,
+            uppercase = 128,
+            lowercase = 256,
+            white_space = 512,
+            hex_digit = 1024,
+            noncharacter_code_point = 2048,
+            default_ignorable_code_point = 4096
+        };
+
+        enum script
+        {
+            arabic = 0,
+            imperial_aramaic = 1,
+            armenian = 2,
+            avestan = 3,
+            balinese = 4,
+            bamum = 5,
+            bengali = 6,
+            bopomofo = 7,
+            braille = 8,
+            buginese = 9,
+            buhid = 10,
+            canadian_aboriginal = 11,
+            carian = 12,
+            cham = 13,
+            cherokee = 14,
+            coptic = 15,
+            cypriot = 16,
+            cyrillic = 17,
+            devanagari = 18,
+            deseret = 19,
+            egyptian_hieroglyphs = 20,
+            ethiopic = 21,
+            georgian = 22,
+            glagolitic = 23,
+            gothic = 24,
+            greek = 25,
+            gujarati = 26,
+            gurmukhi = 27,
+            hangul = 28,
+            han = 29,
+            hanunoo = 30,
+            hebrew = 31,
+            hiragana = 32,
+            katakana_or_hiragana = 33,
+            old_italic = 34,
+            javanese = 35,
+            kayah_li = 36,
+            katakana = 37,
+            kharoshthi = 38,
+            khmer = 39,
+            kannada = 40,
+            kaithi = 41,
+            tai_tham = 42,
+            lao = 43,
+            latin = 44,
+            lepcha = 45,
+            limbu = 46,
+            linear_b = 47,
+            lisu = 48,
+            lycian = 49,
+            lydian = 50,
+            malayalam = 51,
+            mongolian = 52,
+            meetei_mayek = 53,
+            myanmar = 54,
+            nko = 55,
+            ogham = 56,
+            ol_chiki = 57,
+            old_turkic = 58,
+            oriya = 59,
+            osmanya = 60,
+            phags_pa = 61,
+            inscriptional_pahlavi = 62,
+            phoenician = 63,
+            inscriptional_parthian = 64,
+            rejang = 65,
+            runic = 66,
+            samaritan = 67,
+            old_south_arabian = 68,
+            saurashtra = 69,
+            shavian = 70,
+            sinhala = 71,
+            sundanese = 72,
+            syloti_nagri = 73,
+            syriac = 74,
+            tagbanwa = 75,
+            tai_le = 76,
+            new_tai_lue = 77,
+            tamil = 78,
+            tai_viet = 79,
+            telugu = 80,
+            tifinagh = 81,
+            tagalog = 82,
+            thaana = 83,
+            thai = 84,
+            tibetan = 85,
+            ugaritic = 86,
+            vai = 87,
+            old_persian = 88,
+            cuneiform = 89,
+            yi = 90,
+            inherited = 91,
+            common = 92,
+            unknown = 93
+        };
+    };
+
+    inline properties::category get_category(::boost::uint32_t ch)
+    {
+        return static_cast<properties::category>(detail::category_lookup(ch) & 0x3F);
+    }
+
+    inline properties::major_category get_major_category(::boost::uint32_t ch)
+    {
+        return static_cast<properties::major_category>(get_category(ch) >> 3);
+    }
+
+    inline bool is_punctuation(::boost::uint32_t ch)
+    {
+        return get_major_category(ch) == properties::punctuation;
+    }
+
+    inline bool is_decimal_number(::boost::uint32_t ch)
+    {
+        return get_category(ch) == properties::decimal_number;
+    }
+
+    inline bool is_hex_digit(::boost::uint32_t ch)
+    {
+        return (detail::category_lookup(ch) & properties::hex_digit) != 0;
+    }
+
+    inline bool is_control(::boost::uint32_t ch)
+    {
+        return get_category(ch) == properties::control;
+    }
+
+    inline bool is_alphabetic(::boost::uint32_t ch)
+    {
+        return (detail::category_lookup(ch) & properties::alphabetic) != 0;
+    }
+
+    inline bool is_alphanumeric(::boost::uint32_t ch)
+    {
+        return is_decimal_number(ch) || is_alphabetic(ch);
+    }
+
+    inline bool is_uppercase(::boost::uint32_t ch)
+    {
+        return (detail::category_lookup(ch) & properties::uppercase) != 0;
+    }
+
+    inline bool is_lowercase(::boost::uint32_t ch)
+    {
+        return (detail::category_lookup(ch) & properties::lowercase) != 0;
+    }
+
+    inline bool is_white_space(::boost::uint32_t ch)
+    {
+        return (detail::category_lookup(ch) & properties::white_space) != 0;
+    }
+
+    inline bool is_blank(::boost::uint32_t ch)
+    {
+        switch (ch)
+        {
+            case '\n': case '\v': case '\f': case '\r':
+                return false;
+            default:
+                return is_white_space(ch)
+                && !(   get_category(ch) == properties::line_separator
+                    ||  get_category(ch) == properties::paragraph_separator
+                    );
+        }
+    }
+
+    inline bool is_graph(::boost::uint32_t ch)
+    {
+        return !(   is_white_space(ch)
+                ||  get_category(ch) == properties::control
+                ||  get_category(ch) == properties::surrogate
+                ||  get_category(ch) == properties::unassigned
+                );
+    }
+
+    inline bool is_print(::boost::uint32_t ch)
+    {
+        return (is_graph(ch) || is_blank(ch)) && !is_control(ch);
+    }
+
+    inline bool is_noncharacter_code_point(::boost::uint32_t ch)
+    {
+        return (detail::category_lookup(ch) & properties::noncharacter_code_point) != 0;
+    }
+
+    inline bool is_default_ignorable_code_point(::boost::uint32_t ch)
+    {
+        return (detail::category_lookup(ch) & properties::default_ignorable_code_point) != 0;
+    }
+
+    inline properties::script get_script(::boost::uint32_t ch)
+    {
+        return static_cast<properties::script>(detail::script_lookup(ch) & 0x3F);
+    }
+
+    inline ::boost::uint32_t to_lowercase(::boost::uint32_t ch)
+    {
+        // The table returns 0 to signal that this code maps to itself
+        ::boost::uint32_t r = detail::lowercase_lookup(ch);
+        return (r == 0)? ch : r;
+    }
+
+    inline ::boost::uint32_t to_uppercase(::boost::uint32_t ch)
+    {
+        // The table returns 0 to signal that this code maps to itself
+        ::boost::uint32_t r = detail::uppercase_lookup(ch);
+        return (r == 0)? ch : r;
+    }
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/char_encoding/unicode/script_table.hpp b/3rdParty/Boost/src/boost/spirit/home/support/char_encoding/unicode/script_table.hpp
new file mode 100644
index 0000000..a4c117c
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/char_encoding/unicode/script_table.hpp
@@ -0,0 +1,2159 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+    AUTOGENERATED. DO NOT EDIT!!!
+==============================================================================*/
+#include <boost/cstdint.hpp>
+
+namespace boost { namespace spirit { namespace ucd { namespace detail
+{
+    static const ::boost::uint8_t script_stage1[] = {
+
+      0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15, 
+     16,  17,  18,  19,  20,  20,  21,  22,  23,  24,  25,  26,  27,  28,   1,  29, 
+     30,  31,  32,  33,  34,  32,  35,  36,  37,  32,  32,  38,  39,  40,  41,  42, 
+     43,  44,  45,  46,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  48,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  49, 
+     50,  50,  50,  50,  51,  52,  53,  54,  55,  56,  57,  58,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  59,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  47,  61,  62,  60,  63,  64,  65, 
+     66,  67,  68,  69,  70,  60,  60,  60,  71,  72,  73,  74,  75,  60,  60,  60, 
+     76,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     77,  77,  77,  78,  79,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     80,  80,  80,  80,  81,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     82,  83,  84,  85,  86,  87,  88,  89,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     90,  91,  92,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  93,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  94,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  47,  47,  95,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     96,  97,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60
+    };
+
+    static const ::boost::uint8_t script_stage2[] = {
+
+    // block 0
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  92,  92,  92,  92,  92, 
+     92,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  44,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  44,  92,  92,  92,  92,  92, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  92,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  92,  44,  44,  44,  44,  44,  44,  44,  44, 
+
+
+    // block 1
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+
+
+    // block 2
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     44,  44,  44,  44,  44,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+
+
+    // block 3
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     25,  25,  25,  25,  92,  25,  25,  25,   0,   0,  25,  25,  25,  25,  92,   0, 
+      0,   0,   0,   0,  25,  92,  25,  92,  25,  25,  25,   0,  25,   0,  25,  25, 
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,   0,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15, 
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+
+
+    // block 4
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  91,  91,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+
+
+    // block 5
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2, 
+      2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2, 
+      2,   2,   2,   2,   2,   2,   2,   0,   0,   2,   2,   2,   2,   2,   2,   2, 
+      0,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2, 
+      2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2, 
+      2,   2,   2,   2,   2,   2,   2,   2,   0,  92,   2,   0,   0,   0,   0,   0, 
+      0,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31, 
+     31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31, 
+     31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31, 
+     31,  31,  31,  31,  31,  31,  31,  31,   0,   0,   0,   0,   0,   0,   0,   0, 
+     31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31, 
+     31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,   0,   0,   0,   0,   0, 
+     31,  31,  31,  31,  31,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 6
+     92,  92,  92,  92,   0,   0,   0,   0,   0,   0,   0,   0,  92,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  92,   0,   0,   0,  92, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     92,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0,   0,   0,   0,   0,   0, 
+     91,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  92,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 7
+     74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,   0,  74, 
+     74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74, 
+     74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74, 
+     74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74, 
+     74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,   0,   0,  74,  74,  74, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     83,  83,  83,  83,  83,  83,  83,  83,  83,  83,  83,  83,  83,  83,  83,  83, 
+     83,  83,  83,  83,  83,  83,  83,  83,  83,  83,  83,  83,  83,  83,  83,  83, 
+     83,  83,  83,  83,  83,  83,  83,  83,  83,  83,  83,  83,  83,  83,  83,  83, 
+     83,  83,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     55,  55,  55,  55,  55,  55,  55,  55,  55,  55,  55,  55,  55,  55,  55,  55, 
+     55,  55,  55,  55,  55,  55,  55,  55,  55,  55,  55,  55,  55,  55,  55,  55, 
+     55,  55,  55,  55,  55,  55,  55,  55,  55,  55,  55,  55,  55,  55,  55,  55, 
+     55,  55,  55,  55,  55,  55,  55,  55,  55,  55,  55,   0,   0,   0,   0,   0, 
+
+
+    // block 8
+     67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67, 
+     67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67, 
+     67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,   0,   0, 
+     67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 9
+     18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18, 
+     18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18, 
+     18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18, 
+     18,  18,  18,  18,  18,  18,  18,  18,  18,  18,   0,   0,  18,  18,  18,  18, 
+     18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,   0, 
+     18,  91,  91,  18,  18,  18,   0,   0,  18,  18,  18,  18,  18,  18,  18,  18, 
+     18,  18,  18,  18,  92,  92,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18, 
+     92,  18,  18,   0,   0,   0,   0,   0,   0,  18,  18,  18,  18,  18,  18,  18, 
+      0,   6,   6,   6,   0,   6,   6,   6,   6,   6,   6,   6,   6,   0,   0,   6, 
+      6,   0,   0,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   0,   6,   6,   6,   6,   6,   6, 
+      6,   0,   6,   0,   0,   0,   6,   6,   6,   6,   0,   0,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   0,   0,   6,   6,   0,   0,   6,   6,   6,   6,   0, 
+      0,   0,   0,   0,   0,   0,   0,   6,   0,   0,   0,   0,   6,   6,   0,   6, 
+      6,   6,   6,   6,   0,   0,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   0,   0,   0,   0, 
+
+
+    // block 10
+      0,  27,  27,  27,   0,  27,  27,  27,  27,  27,  27,   0,   0,   0,   0,  27, 
+     27,   0,   0,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27, 
+     27,  27,  27,  27,  27,  27,  27,  27,  27,   0,  27,  27,  27,  27,  27,  27, 
+     27,   0,  27,  27,   0,  27,  27,   0,  27,  27,   0,   0,  27,   0,  27,  27, 
+     27,  27,  27,   0,   0,   0,   0,  27,  27,   0,   0,  27,  27,  27,   0,   0, 
+      0,  27,   0,   0,   0,   0,   0,   0,   0,  27,  27,  27,  27,   0,  27,   0, 
+      0,   0,   0,   0,   0,   0,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27, 
+     27,  27,  27,  27,  27,  27,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,  26,  26,  26,   0,  26,  26,  26,  26,  26,  26,  26,  26,  26,   0,  26, 
+     26,  26,   0,  26,  26,  26,  26,  26,  26,  26,  26,  26,  26,  26,  26,  26, 
+     26,  26,  26,  26,  26,  26,  26,  26,  26,   0,  26,  26,  26,  26,  26,  26, 
+     26,   0,  26,  26,   0,  26,  26,  26,  26,  26,   0,   0,  26,  26,  26,  26, 
+     26,  26,  26,  26,  26,  26,   0,  26,  26,  26,   0,  26,  26,  26,   0,   0, 
+     26,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     26,  26,  26,  26,   0,   0,  26,  26,  26,  26,  26,  26,  26,  26,  26,  26, 
+      0,  26,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 11
+      0,  59,  59,  59,   0,  59,  59,  59,  59,  59,  59,  59,  59,   0,   0,  59, 
+     59,   0,   0,  59,  59,  59,  59,  59,  59,  59,  59,  59,  59,  59,  59,  59, 
+     59,  59,  59,  59,  59,  59,  59,  59,  59,   0,  59,  59,  59,  59,  59,  59, 
+     59,   0,  59,  59,   0,  59,  59,  59,  59,  59,   0,   0,  59,  59,  59,  59, 
+     59,  59,  59,  59,  59,   0,   0,  59,  59,   0,   0,  59,  59,  59,   0,   0, 
+      0,   0,   0,   0,   0,   0,  59,  59,   0,   0,   0,   0,  59,  59,   0,  59, 
+     59,  59,  59,  59,   0,   0,  59,  59,  59,  59,  59,  59,  59,  59,  59,  59, 
+     59,  59,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,  78,  78,   0,  78,  78,  78,  78,  78,  78,   0,   0,   0,  78,  78, 
+     78,   0,  78,  78,  78,  78,   0,   0,   0,  78,  78,   0,  78,   0,  78,  78, 
+      0,   0,   0,  78,  78,   0,   0,   0,  78,  78,  78,   0,   0,   0,  78,  78, 
+     78,  78,  78,  78,  78,  78,  78,  78,  78,  78,   0,   0,   0,   0,  78,  78, 
+     78,  78,  78,   0,   0,   0,  78,  78,  78,   0,  78,  78,  78,  78,   0,   0, 
+     78,   0,   0,   0,   0,   0,   0,  78,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,  78,  78,  78,  78,  78,  78,  78,  78,  78,  78, 
+     78,  78,  78,  78,  78,  78,  78,  78,  78,  78,  78,   0,   0,   0,   0,   0, 
+
+
+    // block 12
+      0,  80,  80,  80,   0,  80,  80,  80,  80,  80,  80,  80,  80,   0,  80,  80, 
+     80,   0,  80,  80,  80,  80,  80,  80,  80,  80,  80,  80,  80,  80,  80,  80, 
+     80,  80,  80,  80,  80,  80,  80,  80,  80,   0,  80,  80,  80,  80,  80,  80, 
+     80,  80,  80,  80,   0,  80,  80,  80,  80,  80,   0,   0,   0,  80,  80,  80, 
+     80,  80,  80,  80,  80,   0,  80,  80,  80,   0,  80,  80,  80,  80,   0,   0, 
+      0,   0,   0,   0,   0,  80,  80,   0,  80,  80,   0,   0,   0,   0,   0,   0, 
+     80,  80,  80,  80,   0,   0,  80,  80,  80,  80,  80,  80,  80,  80,  80,  80, 
+      0,   0,   0,   0,   0,   0,   0,   0,  80,  80,  80,  80,  80,  80,  80,  80, 
+      0,   0,  40,  40,   0,  40,  40,  40,  40,  40,  40,  40,  40,   0,  40,  40, 
+     40,   0,  40,  40,  40,  40,  40,  40,  40,  40,  40,  40,  40,  40,  40,  40, 
+     40,  40,  40,  40,  40,  40,  40,  40,  40,   0,  40,  40,  40,  40,  40,  40, 
+     40,  40,  40,  40,   0,  40,  40,  40,  40,  40,   0,   0,  40,  40,  40,  40, 
+     40,  40,  40,  40,  40,   0,  40,  40,  40,   0,  40,  40,  40,  40,   0,   0, 
+      0,   0,   0,   0,   0,  40,  40,   0,   0,   0,   0,   0,   0,   0,  40,   0, 
+     40,  40,  40,  40,   0,   0,  40,  40,  40,  40,  40,  40,  40,  40,  40,  40, 
+      0,  92,  92,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 13
+      0,   0,  51,  51,   0,  51,  51,  51,  51,  51,  51,  51,  51,   0,  51,  51, 
+     51,   0,  51,  51,  51,  51,  51,  51,  51,  51,  51,  51,  51,  51,  51,  51, 
+     51,  51,  51,  51,  51,  51,  51,  51,  51,   0,  51,  51,  51,  51,  51,  51, 
+     51,  51,  51,  51,  51,  51,  51,  51,  51,  51,   0,   0,   0,  51,  51,  51, 
+     51,  51,  51,  51,  51,   0,  51,  51,  51,   0,  51,  51,  51,  51,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,  51,   0,   0,   0,   0,   0,   0,   0,   0, 
+     51,  51,  51,  51,   0,   0,  51,  51,  51,  51,  51,  51,  51,  51,  51,  51, 
+     51,  51,  51,  51,  51,  51,   0,   0,   0,  51,  51,  51,  51,  51,  51,  51, 
+      0,   0,  71,  71,   0,  71,  71,  71,  71,  71,  71,  71,  71,  71,  71,  71, 
+     71,  71,  71,  71,  71,  71,  71,   0,   0,   0,  71,  71,  71,  71,  71,  71, 
+     71,  71,  71,  71,  71,  71,  71,  71,  71,  71,  71,  71,  71,  71,  71,  71, 
+     71,  71,   0,  71,  71,  71,  71,  71,  71,  71,  71,  71,   0,  71,   0,   0, 
+     71,  71,  71,  71,  71,  71,  71,   0,   0,   0,  71,   0,   0,   0,   0,  71, 
+     71,  71,  71,  71,  71,   0,  71,   0,  71,  71,  71,  71,  71,  71,  71,  71, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,  71,  71,  71,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 14
+      0,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84, 
+     84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84, 
+     84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84, 
+     84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,   0,   0,   0,   0,  92, 
+     84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84, 
+     84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,  43,  43,   0,  43,   0,   0,  43,  43,   0,  43,   0,   0,  43,   0,   0, 
+      0,   0,   0,   0,  43,  43,  43,  43,   0,  43,  43,  43,  43,  43,  43,  43, 
+      0,  43,  43,  43,   0,  43,   0,  43,   0,   0,  43,  43,   0,  43,  43,  43, 
+     43,  43,  43,  43,  43,  43,  43,  43,  43,  43,   0,  43,  43,  43,   0,   0, 
+     43,  43,  43,  43,  43,   0,  43,   0,  43,  43,  43,  43,  43,  43,   0,   0, 
+     43,  43,  43,  43,  43,  43,  43,  43,  43,  43,   0,   0,  43,  43,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 15
+     85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85, 
+     85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85, 
+     85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85, 
+     85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85, 
+     85,  85,  85,  85,  85,  85,  85,  85,   0,  85,  85,  85,  85,  85,  85,  85, 
+     85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85, 
+     85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,   0,   0,   0, 
+      0,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85, 
+     85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,   0,   0,   0,   0, 
+     85,  85,  85,  85,  85,  85,  85,  85,   0,  85,  85,  85,  85,  85,  85,  85, 
+     85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85, 
+     85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,   0,  85,  85, 
+     85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,   0,  85,  85, 
+     85,  85,  85,  85,  85,  92,  92,  92,  92,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 16
+     54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54, 
+     54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54, 
+     54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54, 
+     54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54, 
+     54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54, 
+     54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54, 
+     54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54, 
+     54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54, 
+     54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54, 
+     54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54, 
+     22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22, 
+     22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22, 
+     22,  22,  22,  22,  22,  22,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22, 
+     22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22, 
+     22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  92,  22,   0,   0,   0, 
+
+
+    // block 17
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+
+
+    // block 18
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,   0,  21,  21,  21,  21,   0,   0, 
+     21,  21,  21,  21,  21,  21,  21,   0,  21,   0,  21,  21,  21,  21,   0,   0, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,   0,  21,  21,  21,  21,   0,   0, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,   0,  21,  21,  21,  21,   0,   0,  21,  21,  21,  21,  21,  21,  21,   0, 
+     21,   0,  21,  21,  21,  21,   0,   0,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,   0,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+
+
+    // block 19
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,   0,  21,  21,  21,  21,   0,   0,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,   0,   0,   0,   0,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,   0,   0,   0, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,   0,   0,   0,   0,   0,   0, 
+     14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14, 
+     14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14, 
+     14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14, 
+     14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14, 
+     14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14, 
+     14,  14,  14,  14,  14,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 20
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+
+
+    // block 21
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     56,  56,  56,  56,  56,  56,  56,  56,  56,  56,  56,  56,  56,  56,  56,  56, 
+     56,  56,  56,  56,  56,  56,  56,  56,  56,  56,  56,  56,  56,   0,   0,   0, 
+     66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66, 
+     66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66, 
+     66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66, 
+     66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66, 
+     66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  92,  92,  92,  66,  66, 
+     66,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 22
+     82,  82,  82,  82,  82,  82,  82,  82,  82,  82,  82,  82,  82,   0,  82,  82, 
+     82,  82,  82,  82,  82,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     30,  30,  30,  30,  30,  30,  30,  30,  30,  30,  30,  30,  30,  30,  30,  30, 
+     30,  30,  30,  30,  30,  92,  92,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10, 
+     10,  10,  10,  10,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     75,  75,  75,  75,  75,  75,  75,  75,  75,  75,  75,  75,  75,   0,  75,  75, 
+     75,   0,  75,  75,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39, 
+     39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39, 
+     39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39, 
+     39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39, 
+     39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39, 
+     39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,   0,   0, 
+     39,  39,  39,  39,  39,  39,  39,  39,  39,  39,   0,   0,   0,   0,   0,   0, 
+     39,  39,  39,  39,  39,  39,  39,  39,  39,  39,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 23
+     52,  52,  92,  92,  52,  92,  52,  52,  52,  52,  52,  52,  52,  52,  52,   0, 
+     52,  52,  52,  52,  52,  52,  52,  52,  52,  52,   0,   0,   0,   0,   0,   0, 
+     52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52, 
+     52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52, 
+     52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52, 
+     52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52, 
+     52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52, 
+     52,  52,  52,  52,  52,  52,  52,  52,   0,   0,   0,   0,   0,   0,   0,   0, 
+     52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52, 
+     52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52, 
+     52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,   0,   0,   0,   0,   0, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 24
+     46,  46,  46,  46,  46,  46,  46,  46,  46,  46,  46,  46,  46,  46,  46,  46, 
+     46,  46,  46,  46,  46,  46,  46,  46,  46,  46,  46,  46,  46,   0,   0,   0, 
+     46,  46,  46,  46,  46,  46,  46,  46,  46,  46,  46,  46,   0,   0,   0,   0, 
+     46,  46,  46,  46,  46,  46,  46,  46,  46,  46,  46,  46,   0,   0,   0,   0, 
+     46,   0,   0,   0,  46,  46,  46,  46,  46,  46,  46,  46,  46,  46,  46,  46, 
+     76,  76,  76,  76,  76,  76,  76,  76,  76,  76,  76,  76,  76,  76,  76,  76, 
+     76,  76,  76,  76,  76,  76,  76,  76,  76,  76,  76,  76,  76,  76,   0,   0, 
+     76,  76,  76,  76,  76,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77, 
+     77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77, 
+     77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,   0,   0,   0,   0, 
+     77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77, 
+     77,  77,  77,  77,  77,  77,  77,  77,  77,  77,   0,   0,   0,   0,   0,   0, 
+     77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,   0,   0,   0,  77,  77, 
+     39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39, 
+     39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39, 
+
+
+    // block 25
+      9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9, 
+      9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   0,   0,   9,   9, 
+     42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42, 
+     42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42, 
+     42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42, 
+     42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,   0, 
+     42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42, 
+     42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,   0,   0,  42, 
+     42,  42,  42,  42,  42,  42,  42,  42,  42,  42,   0,   0,   0,   0,   0,   0, 
+     42,  42,  42,  42,  42,  42,  42,  42,  42,  42,   0,   0,   0,   0,   0,   0, 
+     42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 26
+      4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4, 
+      4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4, 
+      4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4, 
+      4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4, 
+      4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   0,   0,   0,   0, 
+      4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4, 
+      4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4, 
+      4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   0,   0,   0, 
+     72,  72,  72,  72,  72,  72,  72,  72,  72,  72,  72,  72,  72,  72,  72,  72, 
+     72,  72,  72,  72,  72,  72,  72,  72,  72,  72,  72,  72,  72,  72,  72,  72, 
+     72,  72,  72,  72,  72,  72,  72,  72,  72,  72,  72,   0,   0,   0,  72,  72, 
+     72,  72,  72,  72,  72,  72,  72,  72,  72,  72,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 27
+     45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45, 
+     45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45, 
+     45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45, 
+     45,  45,  45,  45,  45,  45,  45,  45,   0,   0,   0,  45,  45,  45,  45,  45, 
+     45,  45,  45,  45,  45,  45,  45,  45,  45,  45,   0,   0,   0,  45,  45,  45, 
+     57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57, 
+     57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57, 
+     57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     91,  91,  91,  92,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  92,  91,  91,  91,  91,  91,  91,  91,  92,  92,  92,  92,  91,  92,  92, 
+     92,  92,  92,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 28
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  25,  25,  25,  25,  25,  17,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  25,  25,  25, 
+     25,  25,  44,  44,  44,  44,  25,  25,  25,  25,  25,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  17,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  25, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  91,  91,  91, 
+
+
+    // block 29
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,  25,  25,  25,  25,   0,   0,  25,  25,  25,  25,  25,  25,   0,   0, 
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,  25,  25,  25,  25,   0,   0,  25,  25,  25,  25,  25,  25,   0,   0, 
+     25,  25,  25,  25,  25,  25,  25,  25,   0,  25,   0,  25,   0,  25,   0,  25, 
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,   0,   0, 
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,  25,  25,  25,   0,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,  25,  25,  25,   0,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,  25,  25,   0,   0,  25,  25,  25,  25,  25,  25,   0,  25,  25,  25, 
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+      0,   0,  25,  25,  25,   0,  25,  25,  25,  25,  25,  25,  25,  25,  25,   0, 
+
+
+    // block 30
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  91,  91,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,   0,   0,   0,   0,   0,  92,  92,  92,  92,  92,  92, 
+     92,  44,   0,   0,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  44, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0, 
+     44,  44,  44,  44,  44,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 31
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  25,  92,  92,  92,  44,  44,  92,  92,  92,  92, 
+     92,  92,  44,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  44,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  92,   0,   0,   0,   0,   0,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+
+
+    // block 32
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+
+
+    // block 33
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 34
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+
+
+    // block 35
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,   0,  92,   0,   0,   0,   0,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+
+
+    // block 36
+      0,  92,  92,  92,  92,   0,  92,  92,  92,  92,   0,   0,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,   0,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0,  92,   0,  92, 
+     92,  92,  92,   0,   0,   0,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0, 
+      0,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,   0,   0,   0,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+      0,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0,  92,   0,   0,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+
+
+    // block 37
+      8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8, 
+      8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8, 
+      8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8, 
+      8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8, 
+      8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8, 
+      8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8, 
+      8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8, 
+      8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8, 
+      8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8, 
+      8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8, 
+      8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8, 
+      8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8, 
+      8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8, 
+      8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8, 
+      8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8, 
+      8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8, 
+
+
+    // block 38
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0,   0,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 39
+     23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23, 
+     23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23, 
+     23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,   0, 
+     23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23, 
+     23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23, 
+     23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,   0, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15, 
+     15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15, 
+     15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15, 
+     15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15, 
+     15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15, 
+     15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15, 
+     15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15, 
+     15,  15,   0,   0,   0,   0,   0,   0,   0,  15,  15,  15,  15,  15,  15,  15, 
+
+
+    // block 40
+     22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22, 
+     22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22, 
+     22,  22,  22,  22,  22,  22,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81, 
+     81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81, 
+     81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81, 
+     81,  81,  81,  81,  81,  81,   0,   0,   0,   0,   0,   0,   0,   0,   0,  81, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     21,  21,  21,  21,  21,  21,  21,   0,  21,  21,  21,  21,  21,  21,  21,   0, 
+     21,  21,  21,  21,  21,  21,  21,   0,  21,  21,  21,  21,  21,  21,  21,   0, 
+     21,  21,  21,  21,  21,  21,  21,   0,  21,  21,  21,  21,  21,  21,  21,   0, 
+     21,  21,  21,  21,  21,  21,  21,   0,  21,  21,  21,  21,  21,  21,  21,   0, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+
+
+    // block 41
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,   0,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 42
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0,   0,   0,   0, 
+
+
+    // block 43
+     92,  92,  92,  92,  92,  29,  92,  29,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  29,  29,  29,  29,  29,  29,  29,  29,  29,  91,  91,  91,  91,  91,  91, 
+     92,  92,  92,  92,  92,  92,  92,  92,  29,  29,  29,  29,  92,  92,  92,  92, 
+      0,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32,  32,   0,   0,  91,  91,  92,  92,  32,  32,  32, 
+     92,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37, 
+     37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37, 
+     37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37, 
+     37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37, 
+     37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37, 
+     37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  92,  92,  37,  37,  37, 
+
+
+    // block 44
+      0,   0,   0,   0,   0,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7, 
+      7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7, 
+      7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   0,   0, 
+      0,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+      7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7, 
+      7,   7,   7,   7,   7,   7,   7,   7,   0,   0,   0,   0,   0,   0,   0,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37, 
+
+
+    // block 45
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37, 
+     37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37, 
+     37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,   0, 
+
+
+    // block 46
+     37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37, 
+     37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37, 
+     37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37, 
+     37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37, 
+     37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37, 
+     37,  37,  37,  37,  37,  37,  37,  37,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+
+
+    // block 47
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+
+
+    // block 48
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+
+
+    // block 49
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 50
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+
+
+    // block 51
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,   0,   0,   0, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     48,  48,  48,  48,  48,  48,  48,  48,  48,  48,  48,  48,  48,  48,  48,  48, 
+     48,  48,  48,  48,  48,  48,  48,  48,  48,  48,  48,  48,  48,  48,  48,  48, 
+     48,  48,  48,  48,  48,  48,  48,  48,  48,  48,  48,  48,  48,  48,  48,  48, 
+
+
+    // block 52
+     87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87, 
+     87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87, 
+     87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87, 
+     87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87, 
+     87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87, 
+     87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87, 
+     87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87, 
+     87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87, 
+     87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87, 
+     87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87, 
+     87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87, 
+     87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87, 
+     87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87, 
+     87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87, 
+     87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87, 
+     87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87, 
+
+
+    // block 53
+     87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87, 
+     87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87, 
+     87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+      0,   0,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,   0,   0,   0,   0,   0,   0,   0,   0,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  17,   0,   0,   0,   0,   0,   0,   0,   0, 
+      5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5, 
+      5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5, 
+      5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5, 
+      5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5, 
+      5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5, 
+      5,   5,   5,   5,   5,   5,   5,   5,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 54
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  92,  92,  92,  44,  44,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  44,  44,  44,  44,  44, 
+
+
+    // block 55
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,   0,   0,   0,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0,   0,   0,   0,   0,   0, 
+     61,  61,  61,  61,  61,  61,  61,  61,  61,  61,  61,  61,  61,  61,  61,  61, 
+     61,  61,  61,  61,  61,  61,  61,  61,  61,  61,  61,  61,  61,  61,  61,  61, 
+     61,  61,  61,  61,  61,  61,  61,  61,  61,  61,  61,  61,  61,  61,  61,  61, 
+     61,  61,  61,  61,  61,  61,  61,  61,   0,   0,   0,   0,   0,   0,   0,   0, 
+     69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69, 
+     69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69, 
+     69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69, 
+     69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69, 
+     69,  69,  69,  69,  69,   0,   0,   0,   0,   0,   0,   0,   0,   0,  69,  69, 
+     69,  69,  69,  69,  69,  69,  69,  69,  69,  69,   0,   0,   0,   0,   0,   0, 
+     18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18, 
+     18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,   0,   0,   0,   0, 
+
+
+    // block 56
+     36,  36,  36,  36,  36,  36,  36,  36,  36,  36,  36,  36,  36,  36,  36,  36, 
+     36,  36,  36,  36,  36,  36,  36,  36,  36,  36,  36,  36,  36,  36,  36,  36, 
+     36,  36,  36,  36,  36,  36,  36,  36,  36,  36,  36,  36,  36,  36,  36,  36, 
+     65,  65,  65,  65,  65,  65,  65,  65,  65,  65,  65,  65,  65,  65,  65,  65, 
+     65,  65,  65,  65,  65,  65,  65,  65,  65,  65,  65,  65,  65,  65,  65,  65, 
+     65,  65,  65,  65,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  65, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,   0,   0,   0, 
+     35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35, 
+     35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35, 
+     35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35, 
+     35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35, 
+     35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,   0,  35, 
+     35,  35,  35,  35,  35,  35,  35,  35,  35,  35,   0,   0,   0,   0,  35,  35, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 57
+     13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13, 
+     13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13, 
+     13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13, 
+     13,  13,  13,  13,  13,  13,  13,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,   0,   0, 
+     13,  13,  13,  13,  13,  13,  13,  13,  13,  13,   0,   0,  13,  13,  13,  13, 
+     54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54, 
+     54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,   0,   0,   0,   0, 
+     79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79, 
+     79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79, 
+     79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79, 
+     79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79, 
+     79,  79,  79,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  79,  79,  79,  79,  79, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 58
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     53,  53,  53,  53,  53,  53,  53,  53,  53,  53,  53,  53,  53,  53,  53,  53, 
+     53,  53,  53,  53,  53,  53,  53,  53,  53,  53,  53,  53,  53,  53,  53,  53, 
+     53,  53,  53,  53,  53,  53,  53,  53,  53,  53,  53,  53,  53,  53,   0,   0, 
+     53,  53,  53,  53,  53,  53,  53,  53,  53,  53,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 59
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,   0,   0,   0,   0,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,   0,   0,   0,   0, 
+
+
+    // block 60
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 61
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,   0,   0, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,   0,   0, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 62
+     44,  44,  44,  44,  44,  44,  44,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   2,   2,   2,   2,   2,   0,   0,   0,   0,   0,  31,  31,  31, 
+     31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31, 
+     31,  31,  31,  31,  31,  31,  31,   0,  31,  31,  31,  31,  31,   0,  31,   0, 
+     31,  31,   0,  31,  31,   0,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 63
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  92,  92, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  92,   0,   0, 
+
+
+    // block 64
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0,   0,   0,   0,   0,   0, 
+     91,  91,  91,  91,  91,  91,  91,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,   0,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,   0,  92,  92,  92,  92,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  92, 
+
+
+    // block 65
+      0,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  92,  92,  92,  92,  92, 
+     92,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37, 
+     92,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37, 
+     37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37, 
+     37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  92,  92, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,   0, 
+      0,   0,  28,  28,  28,  28,  28,  28,   0,   0,  28,  28,  28,  28,  28,  28, 
+      0,   0,  28,  28,  28,  28,  28,  28,   0,   0,  28,  28,  28,   0,   0,   0, 
+     92,  92,  92,  92,  92,  92,  92,   0,  92,  92,  92,  92,  92,  92,  92,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,  92,  92,  92,  92,  92,   0,   0, 
+
+
+    // block 66
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,   0,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,   0,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,   0,  47,  47,   0,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,   0,   0, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,   0,   0,   0,   0,   0, 
+
+
+    // block 67
+     92,  92,  92,   0,   0,   0,   0,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,   0,   0,   0,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,   0,   0,   0,   0,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  91,   0,   0, 
+
+
+    // block 68
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     49,  49,  49,  49,  49,  49,  49,  49,  49,  49,  49,  49,  49,  49,  49,  49, 
+     49,  49,  49,  49,  49,  49,  49,  49,  49,  49,  49,  49,  49,   0,   0,   0, 
+     12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12, 
+     12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12, 
+     12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12, 
+     12,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 69
+     34,  34,  34,  34,  34,  34,  34,  34,  34,  34,  34,  34,  34,  34,  34,  34, 
+     34,  34,  34,  34,  34,  34,  34,  34,  34,  34,  34,  34,  34,  34,  34,   0, 
+     34,  34,  34,  34,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     24,  24,  24,  24,  24,  24,  24,  24,  24,  24,  24,  24,  24,  24,  24,  24, 
+     24,  24,  24,  24,  24,  24,  24,  24,  24,  24,  24,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     86,  86,  86,  86,  86,  86,  86,  86,  86,  86,  86,  86,  86,  86,  86,  86, 
+     86,  86,  86,  86,  86,  86,  86,  86,  86,  86,  86,  86,  86,  86,   0,  86, 
+     88,  88,  88,  88,  88,  88,  88,  88,  88,  88,  88,  88,  88,  88,  88,  88, 
+     88,  88,  88,  88,  88,  88,  88,  88,  88,  88,  88,  88,  88,  88,  88,  88, 
+     88,  88,  88,  88,   0,   0,   0,   0,  88,  88,  88,  88,  88,  88,  88,  88, 
+     88,  88,  88,  88,  88,  88,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 70
+     19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19, 
+     19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19, 
+     19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19, 
+     19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19, 
+     19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19, 
+     70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70, 
+     70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70, 
+     70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,   0,   0, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 71
+     16,  16,  16,  16,  16,  16,   0,   0,  16,   0,  16,  16,  16,  16,  16,  16, 
+     16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16, 
+     16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16, 
+     16,  16,  16,  16,  16,  16,   0,  16,  16,   0,   0,   0,  16,   0,   0,  16, 
+      1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1, 
+      1,   1,   1,   1,   1,   1,   0,   1,   1,   1,   1,   1,   1,   1,   1,   1, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 72
+     63,  63,  63,  63,  63,  63,  63,  63,  63,  63,  63,  63,  63,  63,  63,  63, 
+     63,  63,  63,  63,  63,  63,  63,  63,  63,  63,  63,  63,   0,   0,   0,  63, 
+     50,  50,  50,  50,  50,  50,  50,  50,  50,  50,  50,  50,  50,  50,  50,  50, 
+     50,  50,  50,  50,  50,  50,  50,  50,  50,  50,   0,   0,   0,   0,   0,  50, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 73
+     38,  38,  38,  38,   0,  38,  38,   0,   0,   0,   0,   0,  38,  38,  38,  38, 
+     38,  38,  38,  38,   0,  38,  38,  38,   0,  38,  38,  38,  38,  38,  38,  38, 
+     38,  38,  38,  38,  38,  38,  38,  38,  38,  38,  38,  38,  38,  38,  38,  38, 
+     38,  38,  38,  38,   0,   0,   0,   0,  38,  38,  38,   0,   0,   0,   0,  38, 
+     38,  38,  38,  38,  38,  38,  38,  38,   0,   0,   0,   0,   0,   0,   0,   0, 
+     38,  38,  38,  38,  38,  38,  38,  38,  38,   0,   0,   0,   0,   0,   0,   0, 
+     68,  68,  68,  68,  68,  68,  68,  68,  68,  68,  68,  68,  68,  68,  68,  68, 
+     68,  68,  68,  68,  68,  68,  68,  68,  68,  68,  68,  68,  68,  68,  68,  68, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 74
+      3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3, 
+      3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3, 
+      3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3, 
+      3,   3,   3,   3,   3,   3,   0,   0,   0,   3,   3,   3,   3,   3,   3,   3, 
+     64,  64,  64,  64,  64,  64,  64,  64,  64,  64,  64,  64,  64,  64,  64,  64, 
+     64,  64,  64,  64,  64,  64,   0,   0,  64,  64,  64,  64,  64,  64,  64,  64, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,   0,   0,   0,   0,   0,  62,  62,  62,  62,  62,  62,  62,  62, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 75
+     58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58, 
+     58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58, 
+     58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58, 
+     58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58, 
+     58,  58,  58,  58,  58,  58,  58,  58,  58,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 76
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41, 
+     41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41, 
+     41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41, 
+     41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41, 
+     41,  41,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 77
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+
+
+    // block 78
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 79
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     89,  89,  89,  89,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 80
+     20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20, 
+     20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20, 
+     20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20, 
+     20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20, 
+     20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20, 
+     20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20, 
+     20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20, 
+     20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20, 
+     20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20, 
+     20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20, 
+     20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20, 
+     20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20, 
+     20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20, 
+     20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20, 
+     20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20, 
+     20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20, 
+
+
+    // block 81
+     20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20, 
+     20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20, 
+     20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 82
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 83
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,   0,   0,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  91,  91,  91,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  91,  91,  91,  91,  91, 
+     91,  91,  91,  92,  92,  91,  91,  91,  91,  91,  91,  91,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  91,  91,  91,  91,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 84
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,  25,  25,  25,  25,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 85
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 86
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,   0,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0,  92,  92, 
+      0,   0,  92,   0,   0,  92,  92,   0,   0,  92,  92,  92,  92,   0,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0,  92,   0,  92,  92,  92, 
+     92,  92,  92,  92,   0,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+
+
+    // block 87
+     92,  92,  92,  92,  92,  92,   0,  92,  92,  92,  92,   0,   0,  92,  92,  92, 
+     92,  92,  92,  92,  92,   0,  92,  92,  92,  92,  92,  92,  92,   0,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0,  92,  92,  92,  92,   0, 
+     92,  92,  92,  92,  92,   0,  92,   0,   0,   0,  92,  92,  92,  92,  92,  92, 
+     92,   0,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+
+
+    // block 88
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,   0,   0,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+
+
+    // block 89
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0,   0,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+
+
+    // block 90
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0,   0,   0,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 91
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0,   0,   0,   0,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0, 
+      0,  92,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  92,   0,  92, 
+      0,   0,  92,   0,   0,   0,  92,   0,   0,   0,  92,  92,  92,  92,  92,   0, 
+      0,   0,   0,   0,   0,   0,   0,  92,   0,   0,   0,   0,   0,   0,   0,  92, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,  92,   0,  92,  92,   0,   0,  92, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  92,  92,  92,  92,   0,   0, 
+     92,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 92
+     32,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 93
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 94
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 95
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 96
+      0,  92,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 97
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0
+    };
+
+    inline ::boost::uint8_t script_lookup(::boost::uint32_t ch)
+    {
+        ::boost::uint32_t block_offset = script_stage1[ch / 256] * 256;
+        return script_stage2[block_offset + ch % 256];
+    }
+
+}}}} // namespace boost::spirit::unicode::detail
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/char_encoding/unicode/uppercase_table.hpp b/3rdParty/Boost/src/boost/spirit/home/support/char_encoding/unicode/uppercase_table.hpp
new file mode 100644
index 0000000..5ecae7c
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/char_encoding/unicode/uppercase_table.hpp
@@ -0,0 +1,639 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+    AUTOGENERATED. DO NOT EDIT!!!
+==============================================================================*/
+#include <boost/cstdint.hpp>
+
+namespace boost { namespace spirit { namespace ucd { namespace detail
+{
+    static const ::boost::uint8_t uppercase_stage1[] = {
+
+      0,   1,   2,   3,   4,   5,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   7,   8,   9, 
+      6,  10,   6,   6,  11,   6,   6,   6,   6,   6,   6,   6,  12,  13,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,  14,  15,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,  16, 
+      6,   6,   6,   6,  17,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6
+    };
+
+    static const ::boost::uint32_t uppercase_stage2[] = {
+
+    // block 0
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,     65,     66,     67,     68,     69,     70,     71,     72,     73,     74,     75,     76,     77,     78,     79, 
+        80,     81,     82,     83,     84,     85,     86,     87,     88,     89,     90,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,    924,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+       192,    193,    194,    195,    196,    197,    198,    199,    200,    201,    202,    203,    204,    205,    206,    207, 
+       208,    209,    210,    211,    212,    213,    214,      0,    216,    217,    218,    219,    220,    221,    222,    376, 
+
+
+    // block 1
+         0,    256,      0,    258,      0,    260,      0,    262,      0,    264,      0,    266,      0,    268,      0,    270, 
+         0,    272,      0,    274,      0,    276,      0,    278,      0,    280,      0,    282,      0,    284,      0,    286, 
+         0,    288,      0,    290,      0,    292,      0,    294,      0,    296,      0,    298,      0,    300,      0,    302, 
+         0,     73,      0,    306,      0,    308,      0,    310,      0,      0,    313,      0,    315,      0,    317,      0, 
+       319,      0,    321,      0,    323,      0,    325,      0,    327,      0,      0,    330,      0,    332,      0,    334, 
+         0,    336,      0,    338,      0,    340,      0,    342,      0,    344,      0,    346,      0,    348,      0,    350, 
+         0,    352,      0,    354,      0,    356,      0,    358,      0,    360,      0,    362,      0,    364,      0,    366, 
+         0,    368,      0,    370,      0,    372,      0,    374,      0,      0,    377,      0,    379,      0,    381,     83, 
+       579,      0,      0,    386,      0,    388,      0,      0,    391,      0,      0,      0,    395,      0,      0,      0, 
+         0,      0,    401,      0,      0,    502,      0,      0,      0,    408,    573,      0,      0,      0,    544,      0, 
+         0,    416,      0,    418,      0,    420,      0,      0,    423,      0,      0,      0,      0,    428,      0,      0, 
+       431,      0,      0,      0,    435,      0,    437,      0,      0,    440,      0,      0,      0,    444,      0,    503, 
+         0,      0,      0,      0,      0,    452,    452,      0,    455,    455,      0,    458,    458,      0,    461,      0, 
+       463,      0,    465,      0,    467,      0,    469,      0,    471,      0,    473,      0,    475,    398,      0,    478, 
+         0,    480,      0,    482,      0,    484,      0,    486,      0,    488,      0,    490,      0,    492,      0,    494, 
+         0,      0,    497,    497,      0,    500,      0,      0,      0,    504,      0,    506,      0,    508,      0,    510, 
+
+
+    // block 2
+         0,    512,      0,    514,      0,    516,      0,    518,      0,    520,      0,    522,      0,    524,      0,    526, 
+         0,    528,      0,    530,      0,    532,      0,    534,      0,    536,      0,    538,      0,    540,      0,    542, 
+         0,      0,      0,    546,      0,    548,      0,    550,      0,    552,      0,    554,      0,    556,      0,    558, 
+         0,    560,      0,    562,      0,      0,      0,      0,      0,      0,      0,      0,    571,      0,      0,      0, 
+         0,      0,    577,      0,      0,      0,      0,    582,      0,    584,      0,    586,      0,    588,      0,    590, 
+     11375,  11373,      0,    385,    390,      0,    393,    394,      0,    399,      0,    400,      0,      0,      0,      0, 
+       403,      0,      0,    404,      0,      0,      0,      0,    407,    406,      0,  11362,      0,      0,      0,    412, 
+         0,  11374,    413,      0,      0,    415,      0,      0,      0,      0,      0,      0,      0,  11364,      0,      0, 
+       422,      0,      0,    425,      0,      0,      0,      0,    430,    580,    433,    434,    581,      0,      0,      0, 
+         0,      0,    439,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 3
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,    921,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,    880,      0,    882,      0,      0,      0,    886,      0,      0,      0,   1021,   1022,   1023,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,    902,    904,    905,    906, 
+         0,    913,    914,    915,    916,    917,    918,    919,    920,    921,    922,    923,    924,    925,    926,    927, 
+       928,    929,    931,    931,    932,    933,    934,    935,    936,    937,    938,    939,    908,    910,    911,      0, 
+       914,    920,      0,      0,      0,    934,    928,    975,      0,    984,      0,    986,      0,    988,      0,    990, 
+         0,    992,      0,    994,      0,    996,      0,    998,      0,   1000,      0,   1002,      0,   1004,      0,   1006, 
+       922,    929,   1017,      0,      0,    917,      0,      0,   1015,      0,      0,   1018,      0,      0,      0,      0, 
+
+
+    // block 4
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+      1040,   1041,   1042,   1043,   1044,   1045,   1046,   1047,   1048,   1049,   1050,   1051,   1052,   1053,   1054,   1055, 
+      1056,   1057,   1058,   1059,   1060,   1061,   1062,   1063,   1064,   1065,   1066,   1067,   1068,   1069,   1070,   1071, 
+      1024,   1025,   1026,   1027,   1028,   1029,   1030,   1031,   1032,   1033,   1034,   1035,   1036,   1037,   1038,   1039, 
+         0,   1120,      0,   1122,      0,   1124,      0,   1126,      0,   1128,      0,   1130,      0,   1132,      0,   1134, 
+         0,   1136,      0,   1138,      0,   1140,      0,   1142,      0,   1144,      0,   1146,      0,   1148,      0,   1150, 
+         0,   1152,      0,      0,      0,      0,      0,      0,      0,      0,      0,   1162,      0,   1164,      0,   1166, 
+         0,   1168,      0,   1170,      0,   1172,      0,   1174,      0,   1176,      0,   1178,      0,   1180,      0,   1182, 
+         0,   1184,      0,   1186,      0,   1188,      0,   1190,      0,   1192,      0,   1194,      0,   1196,      0,   1198, 
+         0,   1200,      0,   1202,      0,   1204,      0,   1206,      0,   1208,      0,   1210,      0,   1212,      0,   1214, 
+         0,      0,   1217,      0,   1219,      0,   1221,      0,   1223,      0,   1225,      0,   1227,      0,   1229,   1216, 
+         0,   1232,      0,   1234,      0,   1236,      0,   1238,      0,   1240,      0,   1242,      0,   1244,      0,   1246, 
+         0,   1248,      0,   1250,      0,   1252,      0,   1254,      0,   1256,      0,   1258,      0,   1260,      0,   1262, 
+         0,   1264,      0,   1266,      0,   1268,      0,   1270,      0,   1272,      0,   1274,      0,   1276,      0,   1278, 
+
+
+    // block 5
+         0,   1280,      0,   1282,      0,   1284,      0,   1286,      0,   1288,      0,   1290,      0,   1292,      0,   1294, 
+         0,   1296,      0,   1298,      0,   1300,      0,   1302,      0,   1304,      0,   1306,      0,   1308,      0,   1310, 
+         0,   1312,      0,   1314,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,   1329,   1330,   1331,   1332,   1333,   1334,   1335,   1336,   1337,   1338,   1339,   1340,   1341,   1342,   1343, 
+      1344,   1345,   1346,   1347,   1348,   1349,   1350,   1351,   1352,   1353,   1354,   1355,   1356,   1357,   1358,   1359, 
+      1360,   1361,   1362,   1363,   1364,   1365,   1366,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 6
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 7
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,  42877,      0,      0,      0,  11363,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 8
+         0,   7680,      0,   7682,      0,   7684,      0,   7686,      0,   7688,      0,   7690,      0,   7692,      0,   7694, 
+         0,   7696,      0,   7698,      0,   7700,      0,   7702,      0,   7704,      0,   7706,      0,   7708,      0,   7710, 
+         0,   7712,      0,   7714,      0,   7716,      0,   7718,      0,   7720,      0,   7722,      0,   7724,      0,   7726, 
+         0,   7728,      0,   7730,      0,   7732,      0,   7734,      0,   7736,      0,   7738,      0,   7740,      0,   7742, 
+         0,   7744,      0,   7746,      0,   7748,      0,   7750,      0,   7752,      0,   7754,      0,   7756,      0,   7758, 
+         0,   7760,      0,   7762,      0,   7764,      0,   7766,      0,   7768,      0,   7770,      0,   7772,      0,   7774, 
+         0,   7776,      0,   7778,      0,   7780,      0,   7782,      0,   7784,      0,   7786,      0,   7788,      0,   7790, 
+         0,   7792,      0,   7794,      0,   7796,      0,   7798,      0,   7800,      0,   7802,      0,   7804,      0,   7806, 
+         0,   7808,      0,   7810,      0,   7812,      0,   7814,      0,   7816,      0,   7818,      0,   7820,      0,   7822, 
+         0,   7824,      0,   7826,      0,   7828,      0,      0,      0,      0,      0,   7776,      0,      0,      0,      0, 
+         0,   7840,      0,   7842,      0,   7844,      0,   7846,      0,   7848,      0,   7850,      0,   7852,      0,   7854, 
+         0,   7856,      0,   7858,      0,   7860,      0,   7862,      0,   7864,      0,   7866,      0,   7868,      0,   7870, 
+         0,   7872,      0,   7874,      0,   7876,      0,   7878,      0,   7880,      0,   7882,      0,   7884,      0,   7886, 
+         0,   7888,      0,   7890,      0,   7892,      0,   7894,      0,   7896,      0,   7898,      0,   7900,      0,   7902, 
+         0,   7904,      0,   7906,      0,   7908,      0,   7910,      0,   7912,      0,   7914,      0,   7916,      0,   7918, 
+         0,   7920,      0,   7922,      0,   7924,      0,   7926,      0,   7928,      0,   7930,      0,   7932,      0,   7934, 
+
+
+    // block 9
+      7944,   7945,   7946,   7947,   7948,   7949,   7950,   7951,      0,      0,      0,      0,      0,      0,      0,      0, 
+      7960,   7961,   7962,   7963,   7964,   7965,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+      7976,   7977,   7978,   7979,   7980,   7981,   7982,   7983,      0,      0,      0,      0,      0,      0,      0,      0, 
+      7992,   7993,   7994,   7995,   7996,   7997,   7998,   7999,      0,      0,      0,      0,      0,      0,      0,      0, 
+      8008,   8009,   8010,   8011,   8012,   8013,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,   8025,      0,   8027,      0,   8029,      0,   8031,      0,      0,      0,      0,      0,      0,      0,      0, 
+      8040,   8041,   8042,   8043,   8044,   8045,   8046,   8047,      0,      0,      0,      0,      0,      0,      0,      0, 
+      8122,   8123,   8136,   8137,   8138,   8139,   8154,   8155,   8184,   8185,   8170,   8171,   8186,   8187,      0,      0, 
+      8072,   8073,   8074,   8075,   8076,   8077,   8078,   8079,      0,      0,      0,      0,      0,      0,      0,      0, 
+      8088,   8089,   8090,   8091,   8092,   8093,   8094,   8095,      0,      0,      0,      0,      0,      0,      0,      0, 
+      8104,   8105,   8106,   8107,   8108,   8109,   8110,   8111,      0,      0,      0,      0,      0,      0,      0,      0, 
+      8120,   8121,      0,   8124,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,    921,      0, 
+         0,      0,      0,   8140,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+      8152,   8153,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+      8168,   8169,      0,      0,      0,   8172,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,   8188,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 10
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,   8498,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+      8544,   8545,   8546,   8547,   8548,   8549,   8550,   8551,   8552,   8553,   8554,   8555,   8556,   8557,   8558,   8559, 
+         0,      0,      0,      0,   8579,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 11
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+      9398,   9399,   9400,   9401,   9402,   9403,   9404,   9405,   9406,   9407,   9408,   9409,   9410,   9411,   9412,   9413, 
+      9414,   9415,   9416,   9417,   9418,   9419,   9420,   9421,   9422,   9423,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 12
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+     11264,  11265,  11266,  11267,  11268,  11269,  11270,  11271,  11272,  11273,  11274,  11275,  11276,  11277,  11278,  11279, 
+     11280,  11281,  11282,  11283,  11284,  11285,  11286,  11287,  11288,  11289,  11290,  11291,  11292,  11293,  11294,  11295, 
+     11296,  11297,  11298,  11299,  11300,  11301,  11302,  11303,  11304,  11305,  11306,  11307,  11308,  11309,  11310,      0, 
+         0,  11360,      0,      0,      0,    570,    574,      0,  11367,      0,  11369,      0,  11371,      0,      0,      0, 
+         0,      0,      0,  11378,      0,      0,  11381,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,  11392,      0,  11394,      0,  11396,      0,  11398,      0,  11400,      0,  11402,      0,  11404,      0,  11406, 
+         0,  11408,      0,  11410,      0,  11412,      0,  11414,      0,  11416,      0,  11418,      0,  11420,      0,  11422, 
+         0,  11424,      0,  11426,      0,  11428,      0,  11430,      0,  11432,      0,  11434,      0,  11436,      0,  11438, 
+         0,  11440,      0,  11442,      0,  11444,      0,  11446,      0,  11448,      0,  11450,      0,  11452,      0,  11454, 
+         0,  11456,      0,  11458,      0,  11460,      0,  11462,      0,  11464,      0,  11466,      0,  11468,      0,  11470, 
+         0,  11472,      0,  11474,      0,  11476,      0,  11478,      0,  11480,      0,  11482,      0,  11484,      0,  11486, 
+         0,  11488,      0,  11490,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 13
+      4256,   4257,   4258,   4259,   4260,   4261,   4262,   4263,   4264,   4265,   4266,   4267,   4268,   4269,   4270,   4271, 
+      4272,   4273,   4274,   4275,   4276,   4277,   4278,   4279,   4280,   4281,   4282,   4283,   4284,   4285,   4286,   4287, 
+      4288,   4289,   4290,   4291,   4292,   4293,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 14
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,  42560,      0,  42562,      0,  42564,      0,  42566,      0,  42568,      0,  42570,      0,  42572,      0,  42574, 
+         0,  42576,      0,  42578,      0,  42580,      0,  42582,      0,  42584,      0,  42586,      0,  42588,      0,  42590, 
+         0,      0,      0,  42594,      0,  42596,      0,  42598,      0,  42600,      0,  42602,      0,  42604,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,  42624,      0,  42626,      0,  42628,      0,  42630,      0,  42632,      0,  42634,      0,  42636,      0,  42638, 
+         0,  42640,      0,  42642,      0,  42644,      0,  42646,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 15
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,  42786,      0,  42788,      0,  42790,      0,  42792,      0,  42794,      0,  42796,      0,  42798, 
+         0,      0,      0,  42802,      0,  42804,      0,  42806,      0,  42808,      0,  42810,      0,  42812,      0,  42814, 
+         0,  42816,      0,  42818,      0,  42820,      0,  42822,      0,  42824,      0,  42826,      0,  42828,      0,  42830, 
+         0,  42832,      0,  42834,      0,  42836,      0,  42838,      0,  42840,      0,  42842,      0,  42844,      0,  42846, 
+         0,  42848,      0,  42850,      0,  42852,      0,  42854,      0,  42856,      0,  42858,      0,  42860,      0,  42862, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,  42873,      0,  42875,      0,      0,  42878, 
+         0,  42880,      0,  42882,      0,  42884,      0,  42886,      0,      0,      0,      0,  42891,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 16
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,  65313,  65314,  65315,  65316,  65317,  65318,  65319,  65320,  65321,  65322,  65323,  65324,  65325,  65326,  65327, 
+     65328,  65329,  65330,  65331,  65332,  65333,  65334,  65335,  65336,  65337,  65338,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 17
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,  66560,  66561,  66562,  66563,  66564,  66565,  66566,  66567, 
+     66568,  66569,  66570,  66571,  66572,  66573,  66574,  66575,  66576,  66577,  66578,  66579,  66580,  66581,  66582,  66583, 
+     66584,  66585,  66586,  66587,  66588,  66589,  66590,  66591,  66592,  66593,  66594,  66595,  66596,  66597,  66598,  66599, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0
+    };
+
+    inline ::boost::uint32_t uppercase_lookup(::boost::uint32_t ch)
+    {
+        ::boost::uint32_t block_offset = uppercase_stage1[ch / 256] * 256;
+        return uppercase_stage2[block_offset + ch % 256];
+    }
+
+}}}} // namespace boost::spirit::unicode::detail
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/common_terminals.hpp b/3rdParty/Boost/src/boost/spirit/home/support/common_terminals.hpp
new file mode 100644
index 0000000..1b4f664
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/common_terminals.hpp
@@ -0,0 +1,406 @@
+/*=============================================================================
+  Copyright (c) 2001-2011 Joel de Guzman
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_COMMON_PLACEHOLDERS_OCTOBER_16_2008_0102PM
+#define BOOST_SPIRIT_COMMON_PLACEHOLDERS_OCTOBER_16_2008_0102PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/terminal.hpp>
+#include <boost/spirit/home/support/char_encoding/standard.hpp>
+#include <boost/spirit/home/support/char_encoding/standard_wide.hpp>
+#include <boost/spirit/home/support/char_encoding/ascii.hpp>
+#include <boost/spirit/home/support/char_encoding/iso8859_1.hpp>
+#include <boost/spirit/home/support/char_class.hpp>
+#include <boost/mpl/vector.hpp>
+
+#if defined(BOOST_SPIRIT_UNICODE)
+# include <boost/spirit/home/support/char_encoding/unicode.hpp>
+#endif
+
+namespace boost { namespace spirit
+{
+    typedef mpl::vector<
+            spirit::char_encoding::ascii
+          , spirit::char_encoding::iso8859_1
+          , spirit::char_encoding::standard
+          , spirit::char_encoding::standard_wide
+#if defined(BOOST_SPIRIT_UNICODE)
+          , spirit::char_encoding::unicode
+#endif
+        >
+    char_encodings;
+
+    template <typename T>
+    struct is_char_encoding : mpl::false_ {};
+
+    template <>
+    struct is_char_encoding<spirit::char_encoding::ascii> : mpl::true_ {};
+
+    template <>
+    struct is_char_encoding<spirit::char_encoding::iso8859_1> : mpl::true_ {};
+
+    template <>
+    struct is_char_encoding<spirit::char_encoding::standard> : mpl::true_ {};
+
+    template <>
+    struct is_char_encoding<spirit::char_encoding::standard_wide> : mpl::true_ {};
+
+#if defined(BOOST_SPIRIT_UNICODE)
+    template <>
+    struct is_char_encoding<spirit::char_encoding::unicode> : mpl::true_ {};
+#endif
+
+    template <typename Encoding>
+    struct encoding
+        : proto::terminal<tag::char_code<tag::encoding, Encoding> >::type
+    {};
+
+    // Our basic terminals
+    BOOST_SPIRIT_DEFINE_TERMINALS(
+        ( verbatim )
+        ( no_delimit )
+        ( lexeme )
+        ( no_skip )
+        ( omit )
+        ( raw )
+        ( as_string )
+        ( as_wstring )
+        ( inf )
+        ( eol )
+        ( eoi )
+        ( buffer )
+        ( true_ )
+        ( false_ )
+        ( matches )
+        ( hold )
+        ( strict )
+        ( relaxed )
+        ( duplicate )
+    )
+
+    // Our extended terminals
+    BOOST_SPIRIT_DEFINE_TERMINALS_EX(
+        ( lit )
+        ( bin )
+        ( oct )
+        ( hex )
+        ( bool_ )
+        ( ushort_ )
+        ( ulong_ )
+        ( uint_ )
+        ( short_ )
+        ( long_ )
+        ( int_ )
+        ( ulong_long )
+        ( long_long )
+        ( float_ )
+        ( double_ )
+        ( long_double )
+        ( repeat )
+        ( eps )
+        ( pad )
+        ( byte_ )
+        ( word )
+        ( big_word )
+        ( little_word )
+        ( dword )
+        ( big_dword )
+        ( little_dword )
+        ( qword )
+        ( big_qword )
+        ( little_qword )
+        ( skip )
+        ( delimit )
+        ( stream )
+        ( wstream )
+        ( left_align )
+        ( right_align )
+        ( center )
+        ( maxwidth )
+        ( set_state )
+        ( in_state )
+        ( token )
+        ( tokenid )
+        ( attr )
+        ( columns )
+        ( auto_ )
+    )
+
+    // special tags (used mainly for stateful tag types)
+    namespace tag
+    {
+        struct attr_cast {};
+        struct as {};
+    }
+}}
+
+///////////////////////////////////////////////////////////////////////////////
+// Here we place the character-set sensitive placeholders. We have one set
+// each for ascii, iso8859_1, standard and standard_wide and unicode. These
+// placeholders are placed in its char-set namespace. For example, there exist
+// a placeholder spirit::ascii::alnum for ascii versions of alnum.
+
+#define BOOST_SPIRIT_TAG_CHAR_SPEC(charset)                                     \
+    typedef tag::char_code<tag::char_, charset> char_;                          \
+    typedef tag::char_code<tag::string, charset> string;                        \
+    /***/
+
+#define BOOST_SPIRIT_CHAR_SPEC(charset)                                         \
+    typedef spirit::terminal<tag::charset::char_> char_type;                    \
+    char_type const char_ = char_type();                                        \
+                                                                                \
+    inline void silence_unused_warnings_##char_() { (void) char_; }             \
+                                                                                \
+    typedef spirit::terminal<tag::charset::string> string_type;                 \
+    string_type const string = string_type();                                   \
+                                                                                \
+    inline void silence_unused_warnings_##string() { (void) string; }           \
+    /***/
+
+#define BOOST_SPIRIT_CHAR_CODE(name, charset)                                   \
+    typedef proto::terminal<tag::char_code<tag::name, charset> >::type          \
+        name##_type;                                                            \
+    name##_type const name = name##_type();                                     \
+                                                                                \
+    inline void silence_unused_warnings_##name() { (void) name; }               \
+    /***/
+
+#define BOOST_SPIRIT_DEFINE_CHAR_CODES(charset)                                 \
+    namespace boost { namespace spirit { namespace tag { namespace charset      \
+    {                                                                           \
+        BOOST_SPIRIT_TAG_CHAR_SPEC(spirit::char_encoding::charset)              \
+    }}}}                                                                        \
+    namespace boost { namespace spirit { namespace charset                      \
+    {                                                                           \
+        BOOST_SPIRIT_CHAR_SPEC(charset)                                         \
+                                                                                \
+        BOOST_SPIRIT_CHAR_CODE(alnum, spirit::char_encoding::charset)           \
+        BOOST_SPIRIT_CHAR_CODE(alpha, spirit::char_encoding::charset)           \
+        BOOST_SPIRIT_CHAR_CODE(blank, spirit::char_encoding::charset)           \
+        BOOST_SPIRIT_CHAR_CODE(cntrl, spirit::char_encoding::charset)           \
+        BOOST_SPIRIT_CHAR_CODE(digit, spirit::char_encoding::charset)           \
+        BOOST_SPIRIT_CHAR_CODE(graph, spirit::char_encoding::charset)           \
+        BOOST_SPIRIT_CHAR_CODE(print, spirit::char_encoding::charset)           \
+        BOOST_SPIRIT_CHAR_CODE(punct, spirit::char_encoding::charset)           \
+        BOOST_SPIRIT_CHAR_CODE(space, spirit::char_encoding::charset)           \
+        BOOST_SPIRIT_CHAR_CODE(xdigit, spirit::char_encoding::charset)          \
+                                                                                \
+        BOOST_SPIRIT_CHAR_CODE(no_case, spirit::char_encoding::charset)         \
+        BOOST_SPIRIT_CHAR_CODE(lower, spirit::char_encoding::charset)           \
+        BOOST_SPIRIT_CHAR_CODE(upper, spirit::char_encoding::charset)           \
+        BOOST_SPIRIT_CHAR_CODE(lowernum, spirit::char_encoding::charset)        \
+        BOOST_SPIRIT_CHAR_CODE(uppernum, spirit::char_encoding::charset)        \
+    }}}                                                                         \
+    /***/
+
+BOOST_SPIRIT_DEFINE_CHAR_CODES(ascii)
+BOOST_SPIRIT_DEFINE_CHAR_CODES(iso8859_1)
+BOOST_SPIRIT_DEFINE_CHAR_CODES(standard)
+BOOST_SPIRIT_DEFINE_CHAR_CODES(standard_wide)
+
+namespace boost { namespace spirit { namespace traits
+{
+    template <typename Char>
+    struct char_encoding_from_char;
+
+    template <>
+    struct char_encoding_from_char<char>
+      : mpl::identity<spirit::char_encoding::standard>
+    {};
+
+    template <>
+    struct char_encoding_from_char<wchar_t>
+      : mpl::identity<spirit::char_encoding::standard_wide>
+    {};
+
+    template <typename T>
+    struct char_encoding_from_char<T const>
+      : char_encoding_from_char<T>
+    {};
+}}}
+
+#if defined(BOOST_SPIRIT_UNICODE)
+BOOST_SPIRIT_DEFINE_CHAR_CODES(unicode)
+
+    namespace boost { namespace spirit { namespace tag { namespace unicode
+    {
+        BOOST_SPIRIT_TAG_CHAR_SPEC(spirit::char_encoding::unicode)
+    }}}}
+
+    namespace boost { namespace spirit { namespace unicode
+    {
+#define BOOST_SPIRIT_UNICODE_CHAR_CODE(name)                                    \
+    BOOST_SPIRIT_CHAR_CODE(name, spirit::char_encoding::unicode)                \
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Unicode Major Categories
+    ///////////////////////////////////////////////////////////////////////////
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(letter)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(mark)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(number)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(separator)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(other)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(punctuation)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(symbol)
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Unicode General Categories
+    ///////////////////////////////////////////////////////////////////////////
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(uppercase_letter)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(lowercase_letter)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(titlecase_letter)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(modifier_letter)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(other_letter)
+
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(nonspacing_mark)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(enclosing_mark)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(spacing_mark)
+
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(decimal_number)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(letter_number)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(other_number)
+
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(space_separator)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(line_separator)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(paragraph_separator)
+
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(control)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(format)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(private_use)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(surrogate)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(unassigned)
+
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(dash_punctuation)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(open_punctuation)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(close_punctuation)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(connector_punctuation)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(other_punctuation)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(initial_punctuation)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(final_punctuation)
+
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(math_symbol)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(currency_symbol)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(modifier_symbol)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(other_symbol)
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Unicode Derived Categories
+    ///////////////////////////////////////////////////////////////////////////
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(alphabetic)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(uppercase)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(lowercase)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(white_space)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(hex_digit)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(noncharacter_code_point)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(default_ignorable_code_point)
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Unicode Scripts
+    ///////////////////////////////////////////////////////////////////////////
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(arabic)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(imperial_aramaic)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(armenian)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(avestan)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(balinese)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(bamum)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(bengali)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(bopomofo)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(braille)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(buginese)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(buhid)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(canadian_aboriginal)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(carian)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(cham)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(cherokee)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(coptic)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(cypriot)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(cyrillic)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(devanagari)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(deseret)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(egyptian_hieroglyphs)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(ethiopic)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(georgian)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(glagolitic)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(gothic)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(greek)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(gujarati)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(gurmukhi)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(hangul)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(han)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(hanunoo)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(hebrew)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(hiragana)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(katakana_or_hiragana)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(old_italic)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(javanese)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(kayah_li)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(katakana)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(kharoshthi)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(khmer)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(kannada)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(kaithi)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(tai_tham)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(lao)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(latin)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(lepcha)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(limbu)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(linear_b)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(lisu)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(lycian)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(lydian)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(malayalam)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(mongolian)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(meetei_mayek)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(myanmar)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(nko)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(ogham)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(ol_chiki)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(old_turkic)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(oriya)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(osmanya)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(phags_pa)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(inscriptional_pahlavi)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(phoenician)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(inscriptional_parthian)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(rejang)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(runic)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(samaritan)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(old_south_arabian)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(saurashtra)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(shavian)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(sinhala)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(sundanese)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(syloti_nagri)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(syriac)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(tagbanwa)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(tai_le)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(new_tai_lue)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(tamil)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(tai_viet)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(telugu)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(tifinagh)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(tagalog)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(thaana)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(thai)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(tibetan)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(ugaritic)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(vai)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(old_persian)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(cuneiform)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(yi)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(inherited)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(common)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(unknown)
+
+#undef BOOST_SPIRIT_UNICODE_CHAR_CODE
+    }}}
+#endif
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/container.hpp b/3rdParty/Boost/src/boost/spirit/home/support/container.hpp
new file mode 100644
index 0000000..f183721
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/container.hpp
@@ -0,0 +1,559 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_CONTAINER_FEBRUARY_06_2007_1001AM)
+#define BOOST_SPIRIT_CONTAINER_FEBRUARY_06_2007_1001AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/attributes_fwd.hpp>
+#include <boost/detail/iterator.hpp> // for boost::detail::iterator_traits
+#include <boost/mpl/has_xxx.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/optional.hpp>
+#include <boost/variant.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/repeat.hpp>
+#include <boost/range/iterator_range.hpp>
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  This file contains some container utils for stl containers. The
+    //  utilities provided also accept spirit's unused_type; all no-ops.
+    //  Compiler optimization will easily strip these away.
+    ///////////////////////////////////////////////////////////////////////////
+
+    namespace detail
+    {
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(value_type)
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(iterator)
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(size_type)
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(reference)
+    }
+
+    template <typename T, typename Enable/* = void*/>
+    struct is_container 
+      : mpl::bool_<
+            detail::has_value_type<T>::value &&
+            detail::has_iterator<T>::value &&
+            detail::has_size_type<T>::value &&
+            detail::has_reference<T>::value>
+    {};
+
+    template <typename T>
+    struct is_container<T&> 
+      : is_container<T> 
+    {};
+
+    template <typename T>
+    struct is_container<optional<T> > 
+      : is_container<T> 
+    {};
+
+#define BOOST_SPIRIT_IS_CONTAINER(z, N, data)                                 \
+        is_container<BOOST_PP_CAT(T, N)>::value ||                            \
+    /***/
+
+    template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
+    struct is_container<variant<BOOST_VARIANT_ENUM_PARAMS(T)> > 
+       : mpl::bool_<BOOST_PP_REPEAT(BOOST_VARIANT_LIMIT_TYPES
+            , BOOST_SPIRIT_IS_CONTAINER, _) false> 
+    {};
+
+#undef BOOST_SPIRIT_IS_CONTAINER
+    
+    template <typename T, typename Enable/* = void*/>
+    struct is_iterator_range
+      : mpl::false_
+    {};
+
+    template <typename T>
+    struct is_iterator_range<iterator_range<T> >
+      : mpl::true_
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename T>
+        struct remove_value_const
+        {
+            typedef T type;
+        };
+
+        template <typename T>
+        struct remove_value_const<T const> 
+          : remove_value_const<T>
+        {};
+
+        template <typename F, typename S>
+        struct remove_value_const<std::pair<F, S> >
+        {
+            typedef typename remove_value_const<F>::type first_type;
+            typedef typename remove_value_const<S>::type second_type;
+            typedef std::pair<first_type, second_type> type;
+        };
+    }
+
+    ///////////////////////////////////////////////////////////////////////
+    //[customization_container_value_default
+    template <typename Container, typename Enable/* = void*/>
+    struct container_value
+      : detail::remove_value_const<typename Container::value_type>
+    {};
+    //]
+
+    template <typename T>
+    struct container_value<T&> 
+      : container_value<T> 
+    {};
+
+    // this will be instantiated if the optional holds a container
+    template <typename T>
+    struct container_value<optional<T> > 
+      : container_value<T> 
+    {};
+
+    // this will be instantiated if the variant holds a container
+    template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
+    struct container_value<variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+    {
+        typedef typename 
+            variant<BOOST_VARIANT_ENUM_PARAMS(T)>::types 
+        types;
+        typedef typename 
+            mpl::find_if<types, is_container<mpl::_1> >::type 
+        iter;
+
+        typedef typename container_value<
+            typename mpl::if_<
+                is_same<iter, typename mpl::end<types>::type>
+              , unused_type, typename mpl::deref<iter>::type
+            >::type
+        >::type type;
+    };
+
+    //[customization_container_value_unused
+    template <>
+    struct container_value<unused_type>
+    {
+        typedef unused_type type;
+    };
+    //]
+
+    template <>
+    struct container_value<unused_type const>
+    {
+        typedef unused_type type;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Container, typename Enable/* = void*/>
+    struct container_iterator
+    {
+        typedef typename Container::iterator type;
+    };
+
+    template <typename Container>
+    struct container_iterator<Container&>
+      : container_iterator<Container>
+    {};
+
+    template <typename Container>
+    struct container_iterator<Container const>
+    {
+        typedef typename Container::const_iterator type;
+    };
+
+    template <typename Iterator>
+    struct container_iterator<iterator_range<Iterator> >
+    {
+        typedef typename range_const_iterator<
+              iterator_range<Iterator> >::type type;
+    };
+
+    template <>
+    struct container_iterator<unused_type>
+    {
+        typedef unused_type const* type;
+    };
+
+    template <>
+    struct container_iterator<unused_type const>
+    {
+        typedef unused_type const* type;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Enable/* = void*/>
+    struct optional_attribute
+    {
+        typedef T const& type;
+
+        static type call(T const& val)
+        {
+            return val;
+        }
+
+        static bool is_valid(T const&)
+        {
+            return true;
+        }
+    };
+
+    template <typename T>
+    struct optional_attribute<optional<T> >
+    {
+        typedef T const& type;
+
+        static type call(optional<T> const& val)
+        {
+            return boost::get<T>(val);
+        }
+
+        static bool is_valid(optional<T> const& val)
+        {
+            return val;
+        }
+    };
+
+    template <typename T>
+    typename optional_attribute<T>::type
+    optional_value(T const& val)
+    {
+        return optional_attribute<T>::call(val);
+    }
+
+    inline unused_type optional_value(unused_type)
+    {
+        return unused;
+    }
+
+    template <typename T>
+    bool has_optional_value(T const& val)
+    {
+        return optional_attribute<T>::is_valid(val);
+    }
+
+    inline bool has_optional_value(unused_type)
+    {
+        return true;
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Container, typename T>
+    bool push_back(Container& c, T const& val);
+
+    //[customization_push_back_default
+    template <typename Container, typename T, typename Enable/* = void*/>
+    struct push_back_container
+    {
+        static bool call(Container& c, T const& val)
+        {
+            c.insert(c.end(), val);
+            return true;
+        }
+    };
+    //]
+
+    template <typename Container, typename T>
+    struct push_back_container<optional<Container>, T>
+    {
+        static bool call(optional<Container>& c, T const& val)
+        {
+            if (!c)
+                c = Container();
+            return push_back(boost::get<Container>(c), val);
+        }
+    };
+
+    namespace detail
+    {
+        template <typename T>
+        struct push_back_visitor : public static_visitor<>
+        {
+            typedef bool result_type;
+
+            push_back_visitor(T const& t) : t_(t) {}
+
+            template <typename Container>
+            bool push_back_impl(Container& c, mpl::true_) const
+            {
+                return push_back(c, t_);
+            }
+
+            template <typename T_>
+            bool push_back_impl(T_&, mpl::false_) const
+            {
+                // this variant doesn't hold a container
+                BOOST_ASSERT(false && "This variant doesn't hold a container");
+                return false;
+            }
+
+            template <typename T_>
+            bool operator()(T_& c) const
+            {
+                return push_back_impl(c, typename is_container<T_>::type());
+            }
+
+            T const& t_;
+        };
+    }
+
+    template <BOOST_VARIANT_ENUM_PARAMS(typename T_), typename T>
+    struct push_back_container<variant<BOOST_VARIANT_ENUM_PARAMS(T_)>, T>
+    {
+        static bool call(variant<BOOST_VARIANT_ENUM_PARAMS(T_)>& c, T const& val)
+        {
+            return apply_visitor(detail::push_back_visitor<T>(val), c);
+        }
+    };
+
+    template <typename Container, typename T>
+    bool push_back(Container& c, T const& val)
+    {
+        return push_back_container<Container, T>::call(c, val);
+    }
+
+    //[customization_push_back_unused
+    template <typename Container>
+    bool push_back(Container&, unused_type)
+    {
+        return true;
+    }
+    //]
+
+    template <typename T>
+    bool push_back(unused_type, T const&)
+    {
+        return true;
+    }
+
+    inline bool push_back(unused_type, unused_type)
+    {
+        return true;
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Container, typename Enable/* = void*/>
+    struct is_empty_container
+    {
+        static bool call(Container const& c)
+        {
+            return c.empty();
+        }
+    };
+
+    template <typename Container>
+    bool is_empty(Container const& c)
+    {
+        return is_empty_container<Container>::call(c);
+    }
+
+    inline bool is_empty(unused_type)
+    {
+        return true;
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Ensure the attribute is actually a container type
+    template <typename Container, typename Enable/* = void*/>
+    struct make_container_attribute
+    {
+        static void call(Container& c)
+        {
+            // for static types this function does nothing
+        }
+    };
+
+    template <typename T>
+    void make_container(T& t)
+    {
+        make_container_attribute<T>::call(t);
+    }
+
+    inline void make_container(unused_type)
+    {
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Container, typename Enable/* = void*/>
+    struct begin_container 
+    {
+        static typename container_iterator<Container>::type call(Container& c)
+        {
+            return c.begin();
+        }
+    };
+
+    template <typename Container>
+    typename spirit::result_of::begin<Container>::type
+    begin(Container& c)
+    {
+        return begin_container<Container>::call(c);
+    }
+
+    inline unused_type const*
+    begin(unused_type)
+    {
+        return &unused;
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Container, typename Enable/* = void*/>
+    struct end_container
+    {
+        static typename container_iterator<Container>::type call(Container& c)
+        {
+            return c.end();
+        }
+    };
+
+    template <typename Container>
+    inline typename spirit::result_of::end<Container>::type
+    end(Container& c)
+    {
+        return end_container<Container>::call(c);
+    }
+
+    inline unused_type const*
+    end(unused_type)
+    {
+        return &unused;
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Enable/* = void*/>
+    struct deref_iterator
+    {
+        typedef typename boost::detail::iterator_traits<Iterator>::reference type;
+        static type call(Iterator& it)
+        {
+            return *it;
+        }
+    };
+
+    template <typename Iterator>
+    typename deref_iterator<Iterator>::type
+    deref(Iterator& it)
+    {
+        return deref_iterator<Iterator>::call(it);
+    }
+
+    inline unused_type
+    deref(unused_type const*)
+    {
+        return unused;
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Enable/* = void*/>
+    struct next_iterator
+    {
+        static void call(Iterator& it)
+        {
+            ++it;
+        }
+    };
+
+    template <typename Iterator>
+    void next(Iterator& it)
+    {
+        next_iterator<Iterator>::call(it);
+    }
+
+    inline void next(unused_type const*)
+    {
+        // do nothing
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Enable/* = void*/>
+    struct compare_iterators
+    {
+        static bool call(Iterator const& it1, Iterator const& it2)
+        {
+            return it1 == it2;
+        }
+    };
+
+    template <typename Iterator>
+    bool compare(Iterator& it1, Iterator& it2)
+    {
+        return compare_iterators<Iterator>::call(it1, it2);
+    }
+
+    inline bool compare(unused_type const*, unused_type const*)
+    {
+        return false;
+    }
+}}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace result_of
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct optional_value
+    {
+        typedef T type;
+    };
+
+    template <typename T>
+    struct optional_value<optional<T> >
+    {
+        typedef T type;
+    };
+
+    template <typename T>
+    struct optional_value<optional<T> const>
+    {
+        typedef T const type;
+    };
+
+    template <>
+    struct optional_value<unused_type>
+    {
+        typedef unused_type type;
+    };
+
+    template <>
+    struct optional_value<unused_type const>
+    {
+        typedef unused_type type;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Container>
+    struct begin 
+      : traits::container_iterator<Container>
+    {};
+
+    template <typename Container>
+    struct end
+      : traits::container_iterator<Container>
+    {};
+
+    template <typename Iterator>
+    struct deref
+      : traits::deref_iterator<Iterator>
+    {};
+
+    template <>
+    struct deref<unused_type const*>
+    {
+        typedef unused_type type;
+    };
+
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/context.hpp b/3rdParty/Boost/src/boost/spirit/home/support/context.hpp
new file mode 100644
index 0000000..7c0ef38
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/context.hpp
@@ -0,0 +1,209 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_CONTEXT_OCTOBER_31_2008_0654PM)
+#define BOOST_SPIRIT_CONTEXT_OCTOBER_31_2008_0654PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/spirit/home/support/nonterminal/expand_arg.hpp>
+#include <boost/spirit/home/support/assert_msg.hpp>
+#include <boost/spirit/home/phoenix/core/actor.hpp>
+#include <boost/spirit/home/phoenix/core/argument.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/fusion/include/size.hpp>
+#include <boost/fusion/include/as_list.hpp>
+#include <boost/fusion/include/transform.hpp>
+#include <boost/mpl/size.hpp>
+#include <boost/mpl/at.hpp>
+
+#if !defined(SPIRIT_ATTRIBUTES_LIMIT)
+# define SPIRIT_ATTRIBUTES_LIMIT PHOENIX_LIMIT
+#endif
+
+#define SPIRIT_DECLARE_ATTRIBUTE(z, n, data)                                    \
+    phoenix::actor<attribute<n> > const                                         \
+        BOOST_PP_CAT(_r, n) = attribute<n>();
+
+#define SPIRIT_USING_ATTRIBUTE(z, n, data) using spirit::BOOST_PP_CAT(_r, n);
+
+namespace boost { namespace spirit
+{
+    template <typename Attributes, typename Locals>
+    struct context
+    {
+        typedef Attributes attributes_type;
+        typedef Locals locals_type;
+
+        context(typename Attributes::car_type attribute)
+          : attributes(attribute, fusion::nil()), locals() {}
+
+        template <typename Args, typename Context>
+        context(
+            typename Attributes::car_type attribute
+          , Args const& args
+          , Context& caller_context
+        ) : attributes(
+                attribute
+              , fusion::as_list(
+                    fusion::transform(
+                        args
+                      , detail::expand_arg<Context>(caller_context)
+                    )
+                )
+            )
+          , locals() {}
+
+        context(Attributes const& attributes)
+          : attributes(attributes), locals() {}
+
+        Attributes attributes;  // The attributes
+        Locals locals;          // Local variables
+    };
+
+    template <typename Context>
+    struct attributes_of
+    {
+        typedef typename Context::attributes_type type;
+    };
+
+    template <typename Context>
+    struct attributes_of<Context const>
+    {
+        typedef typename Context::attributes_type const type;
+    };
+
+    template <typename Context>
+    struct locals_of
+    {
+        typedef typename Context::locals_type type;
+    };
+
+    template <typename Context>
+    struct locals_of<Context const>
+    {
+        typedef typename Context::locals_type const type;
+    };
+
+    template <int N>
+    struct attribute
+    {
+        typedef mpl::true_ no_nullary;
+
+        template <typename Env>
+        struct result
+        {
+            typedef typename
+                attributes_of<typename
+                    mpl::at_c<typename Env::args_type, 1>::type
+                >::type
+            attributes_type;
+
+            typedef typename
+                fusion::result_of::size<attributes_type>::type
+            attributes_size;
+
+            // report invalid argument not found (N is out of bounds)
+            BOOST_SPIRIT_ASSERT_MSG(
+                (N < attributes_size::value),
+                index_is_out_of_bounds, ());
+
+            typedef typename
+                fusion::result_of::at_c<attributes_type, N>::type
+            type;
+        };
+
+        template <typename Env>
+        typename result<Env>::type
+        eval(Env const& env) const
+        {
+            return fusion::at_c<N>((fusion::at_c<1>(env.args())).attributes);
+        }
+    };
+
+    template <int N>
+    struct local_variable
+    {
+        typedef mpl::true_ no_nullary;
+
+        template <typename Env>
+        struct result
+        {
+            typedef typename
+                locals_of<typename
+                    mpl::at_c<typename Env::args_type, 1>::type
+                >::type
+            locals_type;
+
+            typedef typename
+                fusion::result_of::size<locals_type>::type
+            locals_size;
+
+            // report invalid argument not found (N is out of bounds)
+            BOOST_SPIRIT_ASSERT_MSG(
+                (N < locals_size::value),
+                index_is_out_of_bounds, ());
+
+            typedef typename
+                fusion::result_of::at_c<locals_type, N>::type
+            type;
+        };
+
+        template <typename Env>
+        typename result<Env>::type
+        eval(Env const& env) const
+        {
+            return get_arg<N>((fusion::at_c<1>(env.args())).locals);
+        }
+    };
+
+    // _val refers to the 'return' value of a rule (same as _r0)
+    // _r1, _r2, ... refer to the rule arguments
+    phoenix::actor<attribute<0> > const _val = attribute<0>();
+    phoenix::actor<attribute<0> > const _r0 = attribute<0>();
+    phoenix::actor<attribute<1> > const _r1 = attribute<1>();
+    phoenix::actor<attribute<2> > const _r2 = attribute<2>();
+
+    //  Bring in the rest of the attributes (_r4 .. _rN+1), using PP
+    BOOST_PP_REPEAT_FROM_TO(
+        3, SPIRIT_ATTRIBUTES_LIMIT, SPIRIT_DECLARE_ATTRIBUTE, _)
+
+    // _a, _b, ... refer to the local variables of a rule
+    phoenix::actor<local_variable<0> > const _a = local_variable<0>();
+    phoenix::actor<local_variable<1> > const _b = local_variable<1>();
+    phoenix::actor<local_variable<2> > const _c = local_variable<2>();
+    phoenix::actor<local_variable<3> > const _d = local_variable<3>();
+    phoenix::actor<local_variable<4> > const _e = local_variable<4>();
+    phoenix::actor<local_variable<5> > const _f = local_variable<5>();
+    phoenix::actor<local_variable<6> > const _g = local_variable<6>();
+    phoenix::actor<local_variable<7> > const _h = local_variable<7>();
+    phoenix::actor<local_variable<8> > const _i = local_variable<8>();
+    phoenix::actor<local_variable<9> > const _j = local_variable<9>();
+
+    // You can bring these in with the using directive
+    // without worrying about bringing in too much.
+    namespace labels
+    {
+        BOOST_PP_REPEAT(SPIRIT_ARGUMENTS_LIMIT, SPIRIT_USING_ARGUMENT, _)
+        BOOST_PP_REPEAT(SPIRIT_ATTRIBUTES_LIMIT, SPIRIT_USING_ATTRIBUTE, _)
+        using spirit::_val;
+        using spirit::_a;
+        using spirit::_b;
+        using spirit::_c;
+        using spirit::_d;
+        using spirit::_e;
+        using spirit::_f;
+        using spirit::_g;
+        using spirit::_h;
+        using spirit::_i;
+        using spirit::_j;
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/detail/as_variant.hpp b/3rdParty/Boost/src/boost/spirit/home/support/detail/as_variant.hpp
new file mode 100644
index 0000000..e2fe18d
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/detail/as_variant.hpp
@@ -0,0 +1,104 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef BOOST_PP_IS_ITERATING
+#if !defined(BOOST_SPIRIT_AS_VARIANT_NOVEMBER_16_2007_0420PM)
+#define BOOST_SPIRIT_AS_VARIANT_NOVEMBER_16_2007_0420PM
+
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/variant/variant_fwd.hpp>
+#include <boost/fusion/include/size.hpp>
+#include <boost/fusion/include/begin.hpp>
+#include <boost/fusion/include/next.hpp>
+#include <boost/fusion/include/value_of.hpp>
+#include <boost/mpl/fold.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/mpl/push_back.hpp>
+#include <boost/mpl/equal_to.hpp>
+#include <boost/mpl/contains.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace spirit { namespace detail
+{
+    template <int size>
+    struct as_variant_impl;
+
+    template <>
+    struct as_variant_impl<0>
+    {
+        template <typename Iterator>
+        struct apply
+        {
+            typedef variant<> type;
+        };
+    };
+
+#define BOOST_FUSION_NEXT_ITERATOR(z, n, data)                                  \
+    typedef typename fusion::result_of::next<BOOST_PP_CAT(I, n)>::type          \
+        BOOST_PP_CAT(I, BOOST_PP_INC(n));
+
+#define BOOST_FUSION_NEXT_CALL_ITERATOR(z, n, data)                             \
+    typename gen::BOOST_PP_CAT(I, BOOST_PP_INC(n))                              \
+        BOOST_PP_CAT(i, BOOST_PP_INC(n)) = fusion::next(BOOST_PP_CAT(i, n));
+
+#define BOOST_FUSION_VALUE_OF_ITERATOR(z, n, data)                              \
+    typedef typename fusion::result_of::value_of<BOOST_PP_CAT(I, n)>::type      \
+        BOOST_PP_CAT(T, n);
+
+#define BOOST_PP_FILENAME_1 <boost/spirit/home/support/detail/as_variant.hpp>
+#define BOOST_PP_ITERATION_LIMITS (1, BOOST_VARIANT_LIMIT_TYPES)
+#include BOOST_PP_ITERATE()
+
+#undef BOOST_FUSION_NEXT_ITERATOR
+#undef BOOST_FUSION_NEXT_CALL_ITERATOR
+#undef BOOST_FUSION_VALUE_OF_ITERATOR
+
+    template <typename Sequence>
+    struct as_variant
+    {
+        // build a variant generator being able to generate a variant holding
+        // all of the types as given in the typelist
+        typedef typename
+            detail::as_variant_impl<fusion::result_of::size<Sequence>::value>
+        gen;
+
+        // use this generator to create the actual variant
+        typedef typename gen::template apply<
+                typename fusion::result_of::begin<Sequence>::type
+            >::type
+        type;
+    };
+}}}
+
+#endif
+#else // defined(BOOST_PP_IS_ITERATING)
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Preprocessor vertical repetition code
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#define N BOOST_PP_ITERATION()
+
+    template <>
+    struct as_variant_impl<N>
+    {
+        template <typename I0>
+        struct apply
+        {
+            BOOST_PP_REPEAT(N, BOOST_FUSION_NEXT_ITERATOR, _)
+            BOOST_PP_REPEAT(N, BOOST_FUSION_VALUE_OF_ITERATOR, _)
+            typedef variant<BOOST_PP_ENUM_PARAMS(N, T)> type;
+        };
+    };
+
+#undef N
+#endif // defined(BOOST_PP_IS_ITERATING)
+
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/detail/hold_any.hpp b/3rdParty/Boost/src/boost/spirit/home/support/detail/hold_any.hpp
new file mode 100644
index 0000000..ed2756d
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/detail/hold_any.hpp
@@ -0,0 +1,433 @@
+/*=============================================================================
+    Copyright (c) 2007-2011 Hartmut Kaiser
+    Copyright (c) Christopher Diggins 2005
+    Copyright (c) Pablo Aguilar 2005
+    Copyright (c) Kevlin Henney 2001
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+    The class boost::spirit::hold_any is built based on the any class
+    published here: http://www.codeproject.com/cpp/dynamic_typing.asp. It adds
+    support for std streaming operator<<() and operator>>().
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_HOLD_ANY_MAY_02_2007_0857AM)
+#define BOOST_SPIRIT_HOLD_ANY_MAY_02_2007_0857AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/is_reference.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/assert.hpp>
+#include <boost/detail/sp_typeinfo.hpp>
+
+#include <stdexcept>
+#include <typeinfo>
+#include <algorithm>
+#include <iosfwd>
+
+///////////////////////////////////////////////////////////////////////////////
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+# pragma warning(push)
+# pragma warning(disable: 4100)   // 'x': unreferenced formal parameter
+# pragma warning(disable: 4127)   // conditional expression is constant
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit
+{
+    struct bad_any_cast
+      : std::bad_cast
+    {
+        bad_any_cast(boost::detail::sp_typeinfo const& src, boost::detail::sp_typeinfo const& dest)
+          : from(src.name()), to(dest.name())
+        {}
+
+        virtual const char* what() const throw() { return "bad any cast"; }
+
+        const char* from;
+        const char* to;
+    };
+
+    namespace detail
+    {
+        // function pointer table
+        struct fxn_ptr_table
+        {
+            boost::detail::sp_typeinfo const& (*get_type)();
+            void (*static_delete)(void**);
+            void (*destruct)(void**);
+            void (*clone)(void* const*, void**);
+            void (*move)(void* const*, void**);
+            std::istream& (*stream_in)(std::istream&, void**);
+            std::ostream& (*stream_out)(std::ostream&, void* const*);
+        };
+
+        // static functions for small value-types
+        template<typename Small>
+        struct fxns;
+
+        template<>
+        struct fxns<mpl::true_>
+        {
+            template<typename T>
+            struct type
+            {
+                static boost::detail::sp_typeinfo const& get_type()
+                {
+                    return BOOST_SP_TYPEID(T);
+                }
+                static void static_delete(void** x)
+                {
+                    reinterpret_cast<T*>(x)->~T();
+                }
+                static void destruct(void** x)
+                {
+                    reinterpret_cast<T*>(x)->~T();
+                }
+                static void clone(void* const* src, void** dest)
+                {
+                    new (dest) T(*reinterpret_cast<T const*>(src));
+                }
+                static void move(void* const* src, void** dest)
+                {
+                    reinterpret_cast<T*>(dest)->~T();
+                    *reinterpret_cast<T*>(dest) =
+                        *reinterpret_cast<T const*>(src);
+                }
+                static std::istream& stream_in (std::istream& i, void** obj)
+                {
+                    i >> *reinterpret_cast<T*>(obj);
+                    return i;
+                }
+                static std::ostream& stream_out(std::ostream& o, void* const* obj)
+                {
+                    o << *reinterpret_cast<T const*>(obj);
+                    return o;
+                }
+            };
+        };
+
+        // static functions for big value-types (bigger than a void*)
+        template<>
+        struct fxns<mpl::false_>
+        {
+            template<typename T>
+            struct type
+            {
+                static boost::detail::sp_typeinfo const& get_type()
+                {
+                    return BOOST_SP_TYPEID(T);
+                }
+                static void static_delete(void** x)
+                {
+                    // destruct and free memory
+                    delete (*reinterpret_cast<T**>(x));
+                }
+                static void destruct(void** x)
+                {
+                    // destruct only, we'll reuse memory
+                    (*reinterpret_cast<T**>(x))->~T();
+                }
+                static void clone(void* const* src, void** dest)
+                {
+                    *dest = new T(**reinterpret_cast<T* const*>(src));
+                }
+                static void move(void* const* src, void** dest)
+                {
+                    (*reinterpret_cast<T**>(dest))->~T();
+                    **reinterpret_cast<T**>(dest) =
+                        **reinterpret_cast<T* const*>(src);
+                }
+                static std::istream& stream_in(std::istream& i, void** obj)
+                {
+                    i >> **reinterpret_cast<T**>(obj);
+                    return i;
+                }
+                static std::ostream& stream_out(std::ostream& o, void* const* obj)
+                {
+                    o << **reinterpret_cast<T* const*>(obj);
+                    return o;
+                }
+            };
+        };
+
+        template<typename T>
+        struct get_table
+        {
+            typedef mpl::bool_<(sizeof(T) <= sizeof(void*))> is_small;
+
+            static fxn_ptr_table* get()
+            {
+                static fxn_ptr_table static_table =
+                {
+                    fxns<is_small>::template type<T>::get_type,
+                    fxns<is_small>::template type<T>::static_delete,
+                    fxns<is_small>::template type<T>::destruct,
+                    fxns<is_small>::template type<T>::clone,
+                    fxns<is_small>::template type<T>::move,
+                    fxns<is_small>::template type<T>::stream_in,
+                    fxns<is_small>::template type<T>::stream_out
+                };
+                return &static_table;
+            }
+        };
+
+        ///////////////////////////////////////////////////////////////////////
+        struct empty {};
+
+        inline std::istream&
+        operator>> (std::istream& i, empty&)
+        {
+            // If this assertion fires you tried to insert from a std istream
+            // into an empty hold_any instance. This simply can't work, because
+            // there is no way to figure out what type to extract from the
+            // stream.
+            // The only way to make this work is to assign an arbitrary
+            // value of the required type to the hold_any instance you want to
+            // stream to. This assignment has to be executed before the actual
+            // call to the operator>>().
+            BOOST_ASSERT(false && 
+                "Tried to insert from a std istream into an empty "
+                "hold_any instance");
+            return i;
+        }
+
+        inline std::ostream&
+        operator<< (std::ostream& o, empty const&)
+        {
+            return o;
+        }
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    class hold_any
+    {
+    public:
+        // constructors
+        template <typename T>
+        explicit hold_any(T const& x)
+          : table(spirit::detail::get_table<T>::get()), object(0)
+        {
+            if (spirit::detail::get_table<T>::is_small::value)
+                new (&object) T(x);
+            else
+                object = new T(x);
+        }
+
+        hold_any()
+          : table(spirit::detail::get_table<spirit::detail::empty>::get()),
+            object(0)
+        {
+        }
+
+        hold_any(hold_any const& x)
+          : table(spirit::detail::get_table<spirit::detail::empty>::get()),
+            object(0)
+        {
+            assign(x);
+        }
+
+        ~hold_any()
+        {
+            table->static_delete(&object);
+        }
+
+        // assignment
+        hold_any& assign(hold_any const& x)
+        {
+            if (&x != this) {
+                // are we copying between the same type?
+                if (table == x.table) {
+                    // if so, we can avoid reallocation
+                    table->move(&x.object, &object);
+                }
+                else {
+                    reset();
+                    x.table->clone(&x.object, &object);
+                    table = x.table;
+                }
+            }
+            return *this;
+        }
+
+        template <typename T>
+        hold_any& assign(T const& x)
+        {
+            // are we copying between the same type?
+            spirit::detail::fxn_ptr_table* x_table =
+                spirit::detail::get_table<T>::get();
+            if (table == x_table) {
+            // if so, we can avoid deallocating and re-use memory
+                table->destruct(&object);    // first destruct the old content
+                if (spirit::detail::get_table<T>::is_small::value) {
+                    // create copy on-top of object pointer itself
+                    new (&object) T(x);
+                }
+                else {
+                    // create copy on-top of old version
+                    new (object) T(x);
+                }
+            }
+            else {
+                if (spirit::detail::get_table<T>::is_small::value) {
+                    // create copy on-top of object pointer itself
+                    table->destruct(&object); // first destruct the old content
+                    new (&object) T(x);
+                }
+                else {
+                    reset();                  // first delete the old content
+                    object = new T(x);
+                }
+                table = x_table;      // update table pointer
+            }
+            return *this;
+        }
+
+        // assignment operator
+        template <typename T>
+        hold_any& operator=(T const& x)
+        {
+            return assign(x);
+        }
+
+        // utility functions
+        hold_any& swap(hold_any& x)
+        {
+            std::swap(table, x.table);
+            std::swap(object, x.object);
+            return *this;
+        }
+
+        boost::detail::sp_typeinfo const& type() const
+        {
+            return table->get_type();
+        }
+
+        template <typename T>
+        T const& cast() const
+        {
+            if (type() != BOOST_SP_TYPEID(T))
+              throw bad_any_cast(type(), BOOST_SP_TYPEID(T));
+
+            return spirit::detail::get_table<T>::is_small::value ?
+                *reinterpret_cast<T const*>(&object) :
+                *reinterpret_cast<T const*>(object);
+        }
+
+// implicit casting is disabled by default for compatibility with boost::any
+#ifdef BOOST_SPIRIT_ANY_IMPLICIT_CASTING
+        // automatic casting operator
+        template <typename T>
+        operator T const& () const { return cast<T>(); }
+#endif // implicit casting
+
+        bool empty() const
+        {
+            return table == spirit::detail::get_table<spirit::detail::empty>::get();
+        }
+
+        void reset()
+        {
+            if (!empty())
+            {
+                table->static_delete(&object);
+                table = spirit::detail::get_table<spirit::detail::empty>::get();
+                object = 0;
+            }
+        }
+
+    // these functions have been added in the assumption that the embedded
+    // type has a corresponding operator defined, which is completely safe
+    // because spirit::hold_any is used only in contexts where these operators
+    // do exist
+        friend std::istream& operator>> (std::istream& i, hold_any& obj)
+        {
+            return obj.table->stream_in(i, &obj.object);
+        }
+
+        friend std::ostream& operator<< (std::ostream& o, hold_any const& obj)
+        {
+            return obj.table->stream_out(o, &obj.object);
+        }
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+    private: // types
+        template<typename T>
+        friend T* any_cast(hold_any *);
+#else
+    public: // types (public so any_cast can be non-friend)
+#endif
+        // fields
+        spirit::detail::fxn_ptr_table* table;
+        void* object;
+    };
+
+    // boost::any-like casting
+    template <typename T>
+    inline T* any_cast (hold_any* operand)
+    {
+        if (operand && operand->type() == BOOST_SP_TYPEID(T)) {
+            return spirit::detail::get_table<T>::is_small::value ?
+                reinterpret_cast<T*>(&operand->object) :
+                reinterpret_cast<T*>(operand->object);
+        }
+        return 0;
+    }
+
+    template <typename T>
+    inline T const* any_cast(hold_any const* operand)
+    {
+        return any_cast<T>(const_cast<hold_any*>(operand));
+    }
+
+    template <typename T>
+    T any_cast(hold_any& operand)
+    {
+        typedef BOOST_DEDUCED_TYPENAME remove_reference<T>::type nonref;
+
+#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+        // If 'nonref' is still reference type, it means the user has not
+        // specialized 'remove_reference'.
+
+        // Please use BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION macro
+        // to generate specialization of remove_reference for your class
+        // See type traits library documentation for details
+        BOOST_STATIC_ASSERT(!is_reference<nonref>::value);
+#endif
+
+        nonref* result = any_cast<nonref>(&operand);
+        if(!result)
+            boost::throw_exception(bad_any_cast(operand.type(), BOOST_SP_TYPEID(T)));
+        return *result;
+    }
+
+    template <typename T>
+    T const& any_cast(hold_any const& operand)
+    {
+        typedef BOOST_DEDUCED_TYPENAME remove_reference<T>::type nonref;
+
+#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+        // The comment in the above version of 'any_cast' explains when this
+        // assert is fired and what to do.
+        BOOST_STATIC_ASSERT(!is_reference<nonref>::value);
+#endif
+
+        return any_cast<nonref const&>(const_cast<hold_any &>(operand));
+    }
+
+///////////////////////////////////////////////////////////////////////////////
+}}    // namespace boost::spirit
+
+///////////////////////////////////////////////////////////////////////////////
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+# pragma warning(pop)
+#endif
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/char_traits.hpp b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/char_traits.hpp
new file mode 100644
index 0000000..6b112ad
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/char_traits.hpp
@@ -0,0 +1,54 @@
+// char_traits.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_CHAR_TRAITS_H
+#define BOOST_LEXER_CHAR_TRAITS_H
+
+// Make sure wchar_t is defined
+#include <string>
+
+namespace boost
+{
+namespace lexer
+{
+template<typename CharT>
+struct char_traits
+{
+    typedef CharT char_type;
+    typedef CharT index_type;
+
+    static index_type call (CharT ch)
+    {
+       return ch;
+    }
+};
+
+template<>
+struct char_traits<char>
+{
+    typedef char char_type;
+    typedef unsigned char index_type;
+        
+    static index_type call (char ch)
+    {
+        return static_cast<index_type>(ch);
+    }
+};
+
+template<>
+struct char_traits<wchar_t>
+{
+    typedef wchar_t char_type;
+    typedef wchar_t index_type;
+
+    static index_type call (wchar_t ch)
+    {
+        return ch;
+    }
+};
+}
+}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/consts.hpp b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/consts.hpp
new file mode 100644
index 0000000..a8a8cce
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/consts.hpp
@@ -0,0 +1,39 @@
+// consts.h
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_CONSTS_H
+#define BOOST_LEXER_CONSTS_H
+
+#include <boost/config.hpp>
+#include <boost/integer_traits.hpp>
+#include "size_t.hpp"
+
+namespace boost
+{
+namespace lexer
+{
+    enum regex_flags {none = 0, icase = 1, dot_not_newline = 2};
+    // 0 = end state, 1 = id, 2 = unique_id, 3 = lex state, 4 = bol, 5 = eol,
+    // 6 = dead_state_index
+    enum {end_state_index, id_index, unique_id_index, state_index, bol_index,
+        eol_index, dead_state_index, dfa_offset};
+
+    const std::size_t max_macro_len = 30;
+    const std::size_t num_chars = 256;
+    // If sizeof(wchar_t) == sizeof(size_t) then don't overflow to 0
+    // by adding one to comparison.
+    const std::size_t num_wchar_ts =
+        (boost::integer_traits<wchar_t>::const_max < 0x110000) ?
+        boost::integer_traits<wchar_t>::const_max +
+        static_cast<std::size_t> (1) : 0x110000;
+    const std::size_t null_token = static_cast<std::size_t> (~0);
+    const std::size_t bol_token = static_cast<std::size_t> (~1);
+    const std::size_t eol_token = static_cast<std::size_t> (~2);
+    const std::size_t end_state = 1;
+    const std::size_t npos = static_cast<std::size_t> (~0);
+}
+}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/containers/ptr_list.hpp b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/containers/ptr_list.hpp
new file mode 100644
index 0000000..5995849
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/containers/ptr_list.hpp
@@ -0,0 +1,71 @@
+// ptr_list.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_PTR_LIST_HPP
+#define BOOST_LEXER_PTR_LIST_HPP
+
+#include <list>
+
+namespace boost
+{
+namespace lexer
+{
+namespace detail
+{
+template<typename Type>
+class ptr_list
+{
+public:
+    typedef std::list<Type *> list;
+
+    ptr_list ()
+    {
+    }
+
+    ~ptr_list ()
+    {
+        clear ();
+    }
+
+    list *operator -> ()
+    {
+        return &_list;
+    }
+
+    const list *operator -> () const
+    {
+        return &_list;
+    }
+
+    list &operator * ()
+    {
+        return _list;
+    }
+
+    const list &operator * () const
+    {
+        return _list;
+    }
+
+    void clear ()
+    {
+        while (!_list.empty ())
+        {
+            delete _list.front ();
+            _list.pop_front ();
+        }
+    }
+
+private:
+    list _list;
+
+    ptr_list (const ptr_list &); // No copy construction.
+    ptr_list &operator = (const ptr_list &); // No assignment.
+};
+}
+}
+}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/containers/ptr_vector.hpp b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/containers/ptr_vector.hpp
new file mode 100644
index 0000000..98411e6
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/containers/ptr_vector.hpp
@@ -0,0 +1,108 @@
+// ptr_vector.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_PTR_VECTOR_HPP
+#define BOOST_LEXER_PTR_VECTOR_HPP
+
+#include "../size_t.hpp"
+#include <vector>
+
+namespace boost
+{
+namespace lexer
+{
+namespace detail
+{
+template<typename Type>
+class ptr_vector
+{
+public:
+    typedef std::vector<Type *> vector;
+
+    ptr_vector ()
+    {
+    }
+
+    ~ptr_vector ()
+    {
+        clear ();
+    }
+
+    vector *operator -> ()
+    {
+        return &_vector;
+    }
+
+    const vector *operator -> () const
+    {
+        return &_vector;
+    }
+
+    vector &operator * ()
+    {
+        return _vector;
+    }
+
+    const vector &operator * () const
+    {
+        return _vector;
+    }
+
+    Type * &operator [] (const std::size_t index_)
+    {
+        return _vector[index_];
+    }
+
+    Type * const &operator [] (const std::size_t index_) const
+    {
+        return _vector[index_];
+    }
+
+    bool operator == (const ptr_vector &rhs_) const
+    {
+        bool equal_ = _vector.size () == rhs_._vector.size ();
+
+        if (equal_)
+        {
+            typename vector::const_iterator lhs_iter_ = _vector.begin ();
+            typename vector::const_iterator end_ = _vector.end ();
+            typename vector::const_iterator rhs_iter_ = rhs_._vector.begin ();
+
+            for (; equal_ && lhs_iter_ != end_; ++lhs_iter_, ++rhs_iter_)
+            {
+                equal_ = **lhs_iter_ == **rhs_iter_;
+            }
+        }
+
+        return  equal_;
+    }
+
+    void clear ()
+    {
+        if (!_vector.empty ())
+        {
+            Type **iter_ = &_vector.front ();
+            Type **end_ = iter_ + _vector.size ();
+
+            for (; iter_ != end_; ++iter_)
+            {
+                delete *iter_;
+            }
+        }
+
+        _vector.clear ();
+    }
+
+private:
+    vector _vector;
+
+    ptr_vector (const ptr_vector &); // No copy construction.
+    ptr_vector &operator = (const ptr_vector &); // No assignment.
+};
+}
+}
+}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/conversion/char_state_machine.hpp b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/conversion/char_state_machine.hpp
new file mode 100644
index 0000000..38c70b5
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/conversion/char_state_machine.hpp
@@ -0,0 +1,77 @@
+// char_state_machine.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_CHAR_STATE_MACHINE_HPP
+#define BOOST_LEXER_CHAR_STATE_MACHINE_HPP
+
+#include "../consts.hpp"
+#include <map>
+#include "../size_t.hpp"
+#include "../string_token.hpp"
+#include <vector>
+
+namespace boost
+{
+namespace lexer
+{
+namespace detail
+{
+template<typename CharT>
+struct basic_char_state_machine
+{
+    struct state
+    {
+        typedef basic_string_token<CharT> string_token;
+        typedef std::map<std::size_t, string_token> size_t_string_token_map;
+        typedef std::pair<std::size_t, string_token> size_t_string_token_pair;
+
+        bool _end_state;
+        std::size_t _id;
+        std::size_t _unique_id;
+        std::size_t _state;
+        std::size_t _bol_index;
+        std::size_t _eol_index;
+        size_t_string_token_map _transitions;
+
+        state () :
+            _end_state (false),
+            _id (0),
+            _unique_id (npos),
+            _state (0),
+            _bol_index (npos),
+            _eol_index (npos)
+        {
+        }
+    };
+
+    typedef std::vector<state> state_vector;
+    typedef std::vector<state_vector> state_vector_vector;
+
+    state_vector_vector _sm_vector;
+
+    bool empty () const
+    {
+        return _sm_vector.empty ();
+    }
+
+    void clear ()
+    {
+        _sm_vector.clear ();
+    }
+
+    void swap (basic_char_state_machine &csm_)
+    {
+        _sm_vector.swap (csm_._sm_vector);
+    }
+};
+
+typedef basic_char_state_machine<char> char_state_machine;
+typedef basic_char_state_machine<wchar_t> wchar_state_machine;
+
+}
+}
+}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/debug.hpp b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/debug.hpp
new file mode 100644
index 0000000..23cda87
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/debug.hpp
@@ -0,0 +1,285 @@
+// debug.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_DEBUG_HPP
+#define BOOST_LEXER_DEBUG_HPP
+
+#include <map>
+#include <ostream>
+#include "rules.hpp"
+#include "size_t.hpp"
+#include "state_machine.hpp"
+#include "string_token.hpp"
+#include <vector>
+
+namespace boost
+{
+namespace lexer
+{
+template<typename CharT>
+class basic_debug
+{
+public:
+    typedef std::basic_ostream<CharT> ostream;
+    typedef std::basic_string<CharT> string;
+    typedef std::vector<std::size_t> size_t_vector;
+
+    static void escape_control_chars (const string &in_, string &out_)
+    {
+        const CharT *ptr_ = in_.c_str ();
+        std::size_t size_ = in_.size ();
+
+#if defined _MSC_VER && _MSC_VER <= 1200
+        out_.erase ();
+#else
+        out_.clear ();
+#endif
+
+        while (size_)
+        {
+            basic_string_token<CharT>::escape_char (*ptr_, out_);
+            ++ptr_;
+            --size_;
+        }
+    }
+
+    static void dump (const basic_state_machine<CharT> &state_machine_,
+        basic_rules<CharT> &rules_, ostream &stream_)
+    {
+        typename basic_state_machine<CharT>::iterator iter_ =
+            state_machine_.begin ();
+        typename basic_state_machine<CharT>::iterator end_ =
+            state_machine_.end ();
+
+        for (std::size_t dfa_ = 0, dfas_ = state_machine_.size ();
+            dfa_ < dfas_; ++dfa_)
+        {
+            lexer_state (stream_);
+            stream_ << rules_.state (dfa_) << std::endl << std::endl;
+
+            dump_ex (iter_, stream_);
+        }
+    }
+
+    static void dump (const basic_state_machine<CharT> &state_machine_,
+        ostream &stream_)
+    {
+        typename basic_state_machine<CharT>::iterator iter_ =
+            state_machine_.begin ();
+        typename basic_state_machine<CharT>::iterator end_ =
+            state_machine_.end ();
+
+        for (std::size_t dfa_ = 0, dfas_ = state_machine_.size ();
+            dfa_ < dfas_; ++dfa_)
+        {
+            lexer_state (stream_);
+            stream_ << dfa_ << std::endl << std::endl;
+
+            dump_ex (iter_, stream_);
+        }
+    }
+
+protected:
+    typedef std::basic_stringstream<CharT> stringstream;
+
+    static void dump_ex (typename basic_state_machine<CharT>::iterator &iter_,
+        ostream &stream_)
+    {
+        const std::size_t states_ = iter_->states;
+
+        for (std::size_t i_ = 0; i_ < states_; ++i_)
+        {
+            state (stream_);
+            stream_ << i_ << std::endl;
+
+            if (iter_->end_state)
+            {
+                end_state (stream_);
+                stream_ << iter_->id;
+                unique_id (stream_);
+                stream_ << iter_->unique_id;
+                dfa (stream_);
+                stream_ << iter_->goto_dfa;
+                stream_ << std::endl;
+            }
+
+            if (iter_->bol_index != npos)
+            {
+                bol (stream_);
+                stream_ << iter_->bol_index << std::endl;
+            }
+
+            if (iter_->eol_index != npos)
+            {
+                eol (stream_);
+                stream_ << iter_->eol_index << std::endl;
+            }
+
+            const std::size_t transitions_ = iter_->transitions;
+
+            if (transitions_ == 0)
+            {
+                ++iter_;
+            }
+
+            for (std::size_t t_ = 0; t_ < transitions_; ++t_)
+            {
+                std::size_t goto_state_ = iter_->goto_state;
+
+                if (iter_->token.any ())
+                {
+                    any (stream_);
+                }
+                else
+                {
+                    open_bracket (stream_);
+
+                    if (iter_->token._negated)
+                    {
+                        negated (stream_);
+                    }
+
+                    string charset_;
+                    CharT c_ = 0;
+
+                    escape_control_chars (iter_->token._charset,
+                        charset_);
+                    c_ = *charset_.c_str ();
+
+                    if (!iter_->token._negated &&
+                        (c_ == '^' || c_ == ']'))
+                    {
+                        stream_ << '\\';
+                    }
+
+                    stream_ << charset_;
+                    close_bracket (stream_);
+                }
+
+                stream_ << goto_state_ << std::endl;
+                ++iter_;
+            }
+
+            stream_ << std::endl;
+        }
+    }
+
+    static void lexer_state (std::ostream &stream_)
+    {
+        stream_ << "Lexer state: ";
+    }
+
+    static void lexer_state (std::wostream &stream_)
+    {
+        stream_ << L"Lexer state: ";
+    }
+
+    static void state (std::ostream &stream_)
+    {
+        stream_ << "State: ";
+    }
+
+    static void state (std::wostream &stream_)
+    {
+        stream_ << L"State: ";
+    }
+
+    static void bol (std::ostream &stream_)
+    {
+        stream_ << "  BOL -> ";
+    }
+
+    static void bol (std::wostream &stream_)
+    {
+        stream_ << L"  BOL -> ";
+    }
+
+    static void eol (std::ostream &stream_)
+    {
+        stream_ << "  EOL -> ";
+    }
+
+    static void eol (std::wostream &stream_)
+    {
+        stream_ << L"  EOL -> ";
+    }
+
+    static void end_state (std::ostream &stream_)
+    {
+        stream_ << "  END STATE, Id = ";
+    }
+
+    static void end_state (std::wostream &stream_)
+    {
+        stream_ << L"  END STATE, Id = ";
+    }
+
+    static void unique_id (std::ostream &stream_)
+    {
+        stream_ << ", Unique Id = ";
+    }
+
+    static void unique_id (std::wostream &stream_)
+    {
+        stream_ << L", Unique Id = ";
+    }
+
+    static void any (std::ostream &stream_)
+    {
+        stream_ << "  . -> ";
+    }
+
+    static void any (std::wostream &stream_)
+    {
+        stream_ << L"  . -> ";
+    }
+
+    static void open_bracket (std::ostream &stream_)
+    {
+        stream_ << "  [";
+    }
+
+    static void open_bracket (std::wostream &stream_)
+    {
+        stream_ << L"  [";
+    }
+
+    static void negated (std::ostream &stream_)
+    {
+        stream_ << "^";
+    }
+
+    static void negated (std::wostream &stream_)
+    {
+        stream_ << L"^";
+    }
+
+    static void close_bracket (std::ostream &stream_)
+    {
+        stream_ << "] -> ";
+    }
+
+    static void close_bracket (std::wostream &stream_)
+    {
+        stream_ << L"] -> ";
+    }
+
+    static void dfa (std::ostream &stream_)
+    {
+        stream_ << ", dfa = ";
+    }
+
+    static void dfa (std::wostream &stream_)
+    {
+        stream_ << L", dfa = ";
+    }
+};
+
+typedef basic_debug<char> debug;
+typedef basic_debug<wchar_t> wdebug;
+}
+}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/generator.hpp b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/generator.hpp
new file mode 100644
index 0000000..49bea2f
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/generator.hpp
@@ -0,0 +1,858 @@
+// generator.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_GENERATOR_HPP
+#define BOOST_LEXER_GENERATOR_HPP
+
+#include "char_traits.hpp"
+// memcmp()
+#include <cstring>
+#include "partition/charset.hpp"
+#include "partition/equivset.hpp"
+#include <memory>
+#include "parser/tree/node.hpp"
+#include "parser/parser.hpp"
+#include "containers/ptr_list.hpp"
+#include "rules.hpp"
+#include "state_machine.hpp"
+
+namespace boost
+{
+namespace lexer
+{
+template<typename CharT, typename Traits = char_traits<CharT> >
+class basic_generator
+{
+public:
+    typedef typename detail::internals::size_t_vector size_t_vector;
+    typedef basic_rules<CharT> rules;
+
+    static void build (const rules &rules_,
+        basic_state_machine<CharT> &state_machine_)
+    {
+        std::size_t index_ = 0;
+        std::size_t size_ = rules_.statemap ().size ();
+        node_ptr_vector node_ptr_vector_;
+        detail::internals &internals_ = const_cast<detail::internals &>
+            (state_machine_.data ());
+        bool seen_BOL_assertion_ = false;
+        bool seen_EOL_assertion_ = false;
+
+        state_machine_.clear ();
+
+        for (; index_ < size_; ++index_)
+        {
+            internals_._lookup->push_back (static_cast<size_t_vector *>(0));
+            internals_._lookup->back () = new size_t_vector;
+            internals_._dfa_alphabet.push_back (0);
+            internals_._dfa->push_back (static_cast<size_t_vector *>(0));
+            internals_._dfa->back () = new size_t_vector;
+        }
+
+        for (index_ = 0, size_ = internals_._lookup->size ();
+            index_ < size_; ++index_)
+        {
+            internals_._lookup[index_]->resize (sizeof (CharT) == 1 ?
+                num_chars : num_wchar_ts, dead_state_index);
+
+            if (!rules_.regexes ()[index_].empty ())
+            {
+                // vector mapping token indexes to partitioned token index sets
+                index_set_vector set_mapping_;
+                // syntax tree
+                detail::node *root_ = build_tree (rules_, index_,
+                    node_ptr_vector_, internals_, set_mapping_);
+
+                build_dfa (root_, set_mapping_,
+                    internals_._dfa_alphabet[index_],
+                    *internals_._dfa[index_]);
+
+                if (internals_._seen_BOL_assertion)
+                {
+                    seen_BOL_assertion_ = true;
+                }
+
+                if (internals_._seen_EOL_assertion)
+                {
+                    seen_EOL_assertion_ = true;
+                }
+
+                internals_._seen_BOL_assertion = false;
+                internals_._seen_EOL_assertion = false;
+            }
+        }
+
+        internals_._seen_BOL_assertion = seen_BOL_assertion_;
+        internals_._seen_EOL_assertion = seen_EOL_assertion_;
+    }
+
+    static void minimise (basic_state_machine<CharT> &state_machine_)
+    {
+        detail::internals &internals_ = const_cast<detail::internals &>
+            (state_machine_.data ());
+        const std::size_t machines_ = internals_._dfa->size ();
+
+        for (std::size_t i_ = 0; i_ < machines_; ++i_)
+        {
+            const std::size_t dfa_alphabet_ = internals_._dfa_alphabet[i_];
+            size_t_vector *dfa_ = internals_._dfa[i_];
+
+            if (dfa_alphabet_ != 0)
+            {
+                std::size_t size_ = 0;
+
+                do
+                {
+                    size_ = dfa_->size ();
+                    minimise_dfa (dfa_alphabet_, *dfa_, size_);
+                } while (dfa_->size () != size_);
+            }
+        }
+    }
+
+protected:
+    typedef detail::basic_charset<CharT> charset;
+    typedef detail::ptr_list<charset> charset_list;
+    typedef std::auto_ptr<charset> charset_ptr;
+    typedef detail::equivset equivset;
+    typedef detail::ptr_list<equivset> equivset_list;
+    typedef std::auto_ptr<equivset> equivset_ptr;
+    typedef typename charset::index_set index_set;
+    typedef std::vector<index_set> index_set_vector;
+    typedef detail::basic_parser<CharT> parser;
+    typedef typename parser::node_ptr_vector node_ptr_vector;
+    typedef std::set<const detail::node *> node_set;
+    typedef detail::ptr_vector<node_set> node_set_vector;
+    typedef std::vector<const detail::node *> node_vector;
+    typedef detail::ptr_vector<node_vector> node_vector_vector;
+    typedef typename parser::string string;
+    typedef std::pair<string, string> string_pair;
+    typedef typename parser::tokeniser::string_token string_token;
+    typedef std::deque<string_pair> macro_deque;
+    typedef std::pair<string, const detail::node *> macro_pair;
+    typedef typename parser::macro_map::iterator macro_iter;
+    typedef std::pair<macro_iter, bool> macro_iter_pair;
+    typedef typename parser::tokeniser::token_map token_map;
+
+    static detail::node *build_tree (const rules &rules_,
+        const std::size_t state_, node_ptr_vector &node_ptr_vector_,
+        detail::internals &internals_, index_set_vector &set_mapping_)
+    {
+        size_t_vector *lookup_ = internals_._lookup[state_];
+        const typename rules::string_deque_deque &regexes_ =
+            rules_.regexes ();
+        const typename rules::id_vector_deque &ids_ = rules_.ids ();
+        const typename rules::id_vector_deque &unique_ids_ =
+            rules_.unique_ids ();
+        const typename rules::id_vector_deque &states_ = rules_.states ();
+        typename rules::string_deque::const_iterator regex_iter_ =
+            regexes_[state_].begin ();
+        typename rules::string_deque::const_iterator regex_iter_end_ =
+            regexes_[state_].end ();
+        typename rules::id_vector::const_iterator ids_iter_ =
+            ids_[state_].begin ();
+        typename rules::id_vector::const_iterator unique_ids_iter_ =
+            unique_ids_[state_].begin ();
+        typename rules::id_vector::const_iterator states_iter_ =
+            states_[state_].begin ();
+        const typename rules::string &regex_ = *regex_iter_;
+        // map of regex charset tokens (strings) to index
+        token_map token_map_;
+        const typename rules::string_pair_deque &macrodeque_ =
+            rules_.macrodeque ();
+        typename parser::macro_map macromap_;
+        typename detail::node::node_vector tree_vector_;
+
+        build_macros (token_map_, macrodeque_, macromap_,
+            rules_.flags (), rules_.locale (), node_ptr_vector_,
+            internals_._seen_BOL_assertion, internals_._seen_EOL_assertion);
+
+        detail::node *root_ = parser::parse (regex_.c_str (),
+            regex_.c_str () + regex_.size (), *ids_iter_, *unique_ids_iter_,
+            *states_iter_, rules_.flags (), rules_.locale (), node_ptr_vector_,
+            macromap_, token_map_, internals_._seen_BOL_assertion,
+            internals_._seen_EOL_assertion);
+
+        ++regex_iter_;
+        ++ids_iter_;
+        ++unique_ids_iter_;
+        ++states_iter_;
+        tree_vector_.push_back (root_);
+
+        // build syntax trees
+        while (regex_iter_ != regex_iter_end_)
+        {
+            // re-declare var, otherwise we perform an assignment..!
+            const typename rules::string &regex_ = *regex_iter_;
+
+            root_ = parser::parse (regex_.c_str (),
+                regex_.c_str () + regex_.size (), *ids_iter_,
+                *unique_ids_iter_, *states_iter_, rules_.flags (),
+                rules_.locale (), node_ptr_vector_, macromap_, token_map_,
+                internals_._seen_BOL_assertion,
+                internals_._seen_EOL_assertion);
+            tree_vector_.push_back (root_);
+            ++regex_iter_;
+            ++ids_iter_;
+            ++unique_ids_iter_;
+            ++states_iter_;
+        }
+
+        if (internals_._seen_BOL_assertion)
+        {
+            // Fixup BOLs
+            typename detail::node::node_vector::iterator iter_ =
+                tree_vector_.begin ();
+            typename detail::node::node_vector::iterator end_ =
+                tree_vector_.end ();
+
+            for (; iter_ != end_; ++iter_)
+            {
+                fixup_bol (*iter_, node_ptr_vector_);
+            }
+        }
+
+        // join trees
+        {
+            typename detail::node::node_vector::iterator iter_ =
+                tree_vector_.begin ();
+            typename detail::node::node_vector::iterator end_ =
+                tree_vector_.end ();
+
+            if (iter_ != end_)
+            {
+                root_ = *iter_;
+                ++iter_;
+            }
+
+            for (; iter_ != end_; ++iter_)
+            {
+                node_ptr_vector_->push_back (static_cast<detail::selection_node *>(0));
+                node_ptr_vector_->back () = new detail::selection_node
+                    (root_, *iter_);
+                root_ = node_ptr_vector_->back ();
+            }
+        }
+
+        // partitioned token list
+        charset_list token_list_;
+
+        set_mapping_.resize (token_map_.size ());
+        partition_tokens (token_map_, token_list_);
+
+        typename charset_list::list::const_iterator iter_ =
+            token_list_->begin ();
+        typename charset_list::list::const_iterator end_ =
+            token_list_->end ();
+        std::size_t index_ = 0;
+
+        for (; iter_ != end_; ++iter_, ++index_)
+        {
+            const charset *cs_ = *iter_;
+            typename charset::index_set::const_iterator set_iter_ =
+                cs_->_index_set.begin ();
+            typename charset::index_set::const_iterator set_end_ =
+                cs_->_index_set.end ();
+
+            fill_lookup (cs_->_token, lookup_, index_);
+
+            for (; set_iter_ != set_end_; ++set_iter_)
+            {
+                set_mapping_[*set_iter_].insert (index_);
+            }
+        }
+
+        internals_._dfa_alphabet[state_] = token_list_->size () + dfa_offset;
+        return root_;
+    }
+
+    static void build_macros (token_map &token_map_,
+        const macro_deque &macrodeque_,
+        typename parser::macro_map &macromap_, const regex_flags flags_,
+        const std::locale &locale_, node_ptr_vector &node_ptr_vector_,
+        bool &seen_BOL_assertion_, bool &seen_EOL_assertion_)
+    {
+        for (typename macro_deque::const_iterator iter_ =
+            macrodeque_.begin (), end_ = macrodeque_.end ();
+            iter_ != end_; ++iter_)
+        {
+            const typename rules::string &name_ = iter_->first;
+            const typename rules::string &regex_ = iter_->second;
+            detail::node *node_ = parser::parse (regex_.c_str (),
+                regex_.c_str () + regex_.size (), 0, 0, 0, flags_,
+                locale_, node_ptr_vector_, macromap_, token_map_,
+                seen_BOL_assertion_, seen_EOL_assertion_);
+            macro_iter_pair map_iter_ = macromap_.
+                insert (macro_pair (name_, static_cast<const detail::node *>
+                (0)));
+
+            map_iter_.first->second = node_;
+        }
+    }
+
+    static void build_dfa (detail::node *root_,
+        const index_set_vector &set_mapping_, const std::size_t dfa_alphabet_,
+        size_t_vector &dfa_)
+    {
+        typename detail::node::node_vector *followpos_ =
+            &root_->firstpos ();
+        node_set_vector seen_sets_;
+        node_vector_vector seen_vectors_;
+        size_t_vector hash_vector_;
+
+        // 'jam' state
+        dfa_.resize (dfa_alphabet_, 0);
+        closure (followpos_, seen_sets_, seen_vectors_,
+            hash_vector_, dfa_alphabet_, dfa_);
+
+        std::size_t *ptr_ = 0;
+
+        for (std::size_t index_ = 0; index_ < seen_vectors_->size (); ++index_)
+        {
+            equivset_list equiv_list_;
+
+            build_equiv_list (seen_vectors_[index_], set_mapping_, equiv_list_);
+
+            for (typename equivset_list::list::const_iterator iter_ =
+                equiv_list_->begin (), end_ = equiv_list_->end ();
+                iter_ != end_; ++iter_)
+            {
+                equivset *equivset_ = *iter_;
+                const std::size_t transition_ = closure
+                    (&equivset_->_followpos, seen_sets_, seen_vectors_,
+                    hash_vector_, dfa_alphabet_, dfa_);
+
+                if (transition_ != npos)
+                {
+                    ptr_ = &dfa_.front () + ((index_ + 1) * dfa_alphabet_);
+
+                    // Prune abstemious transitions from end states.
+                    if (*ptr_ && !equivset_->_greedy) continue;
+
+                    for (typename detail::equivset::index_vector::const_iterator
+                        equiv_iter_ = equivset_->_index_vector.begin (),
+                        equiv_end_ = equivset_->_index_vector.end ();
+                        equiv_iter_ != equiv_end_; ++equiv_iter_)
+                    {
+                        const std::size_t index_ = *equiv_iter_;
+
+                        if (index_ == bol_token)
+                        {
+                            if (ptr_[eol_index] == 0)
+                            {
+                                ptr_[bol_index] = transition_;
+                            }
+                        }
+                        else if (index_ == eol_token)
+                        {
+                            if (ptr_[bol_index] == 0)
+                            {
+                                ptr_[eol_index] = transition_;
+                            }
+                        }
+                        else
+                        {
+                            ptr_[index_ + dfa_offset] = transition_;
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    static std::size_t closure (typename detail::node::node_vector *followpos_,
+        node_set_vector &seen_sets_, node_vector_vector &seen_vectors_,
+        size_t_vector &hash_vector_, const std::size_t size_,
+        size_t_vector &dfa_)
+    {
+        bool end_state_ = false;
+        std::size_t id_ = 0;
+        std::size_t unique_id_ = npos;
+        std::size_t state_ = 0;
+        std::size_t hash_ = 0;
+
+        if (followpos_->empty ()) return npos;
+
+        std::size_t index_ = 0;
+        std::auto_ptr<node_set> set_ptr_ (new node_set);
+        std::auto_ptr<node_vector> vector_ptr_ (new node_vector);
+
+        for (typename detail::node::node_vector::const_iterator iter_ =
+            followpos_->begin (), end_ = followpos_->end ();
+            iter_ != end_; ++iter_)
+        {
+            closure_ex (*iter_, end_state_, id_, unique_id_, state_,
+                set_ptr_.get (), vector_ptr_.get (), hash_);
+        }
+
+        bool found_ = false;
+        typename size_t_vector::const_iterator hash_iter_ =
+            hash_vector_.begin ();
+        typename size_t_vector::const_iterator hash_end_ =
+            hash_vector_.end ();
+        typename node_set_vector::vector::const_iterator set_iter_ =
+            seen_sets_->begin ();
+
+        for (; hash_iter_ != hash_end_; ++hash_iter_, ++set_iter_)
+        {
+            found_ = *hash_iter_ == hash_ && *(*set_iter_) == *set_ptr_;
+            ++index_;
+
+            if (found_) break;
+        }
+
+        if (!found_)
+        {
+            seen_sets_->push_back (static_cast<node_set *>(0));
+            seen_sets_->back () = set_ptr_.release ();
+            seen_vectors_->push_back (static_cast<node_vector *>(0));
+            seen_vectors_->back () = vector_ptr_.release ();
+            hash_vector_.push_back (hash_);
+            // State 0 is the jam state...
+            index_ = seen_sets_->size ();
+
+            const std::size_t old_size_ = dfa_.size ();
+
+            dfa_.resize (old_size_ + size_, 0);
+
+            if (end_state_)
+            {
+                dfa_[old_size_] |= end_state;
+                dfa_[old_size_ + id_index] = id_;
+                dfa_[old_size_ + unique_id_index] = unique_id_;
+                dfa_[old_size_ + state_index] = state_;
+            }
+        }
+
+        return index_;
+    }
+
+    static void closure_ex (detail::node *node_, bool &end_state_,
+        std::size_t &id_, std::size_t &unique_id_, std::size_t &state_,
+        node_set *set_ptr_, node_vector *vector_ptr_, std::size_t &hash_)
+    {
+        const bool temp_end_state_ = node_->end_state ();
+
+        if (temp_end_state_)
+        {
+            if (!end_state_)
+            {
+                end_state_ = true;
+                id_ = node_->id ();
+                unique_id_ = node_->unique_id ();
+                state_ = node_->lexer_state ();
+            }
+        }
+
+        if (set_ptr_->insert (node_).second)
+        {
+            vector_ptr_->push_back (node_);
+            hash_ += reinterpret_cast<std::size_t> (node_);
+        }
+    }
+
+    static void partition_tokens (const token_map &map_,
+        charset_list &lhs_)
+    {
+        charset_list rhs_;
+
+        fill_rhs_list (map_, rhs_);
+
+        if (!rhs_->empty ())
+        {
+            typename charset_list::list::iterator iter_;
+            typename charset_list::list::iterator end_;
+            charset_ptr overlap_ (new charset);
+
+            lhs_->push_back (static_cast<charset *>(0));
+            lhs_->back () = rhs_->front ();
+            rhs_->pop_front ();
+
+            while (!rhs_->empty ())
+            {
+                charset_ptr r_ (rhs_->front ());
+
+                rhs_->pop_front ();
+                iter_ = lhs_->begin ();
+                end_ = lhs_->end ();
+
+                while (!r_->empty () && iter_ != end_)
+                {
+                    typename charset_list::list::iterator l_iter_ = iter_;
+
+                    (*l_iter_)->intersect (*r_.get (), *overlap_.get ());
+
+                    if (overlap_->empty ())
+                    {
+                        ++iter_;
+                    }
+                    else if ((*l_iter_)->empty ())
+                    {
+                        delete *l_iter_;
+                        *l_iter_ = overlap_.release ();
+
+                        // VC++ 6 Hack:
+                        charset_ptr temp_overlap_ (new charset);
+
+                        overlap_ = temp_overlap_;
+                        ++iter_;
+                    }
+                    else if (r_->empty ())
+                    {
+                        delete r_.release ();
+                        r_ = overlap_;
+
+                        // VC++ 6 Hack:
+                        charset_ptr temp_overlap_ (new charset);
+
+                        overlap_ = temp_overlap_;
+                        break;
+                    }
+                    else
+                    {
+                        iter_ = lhs_->insert (++iter_,
+                            static_cast<charset *>(0));
+                        *iter_ = overlap_.release ();
+
+                        // VC++ 6 Hack:
+                        charset_ptr temp_overlap_ (new charset);
+
+                        overlap_ = temp_overlap_;
+                        ++iter_;
+                        end_ = lhs_->end ();
+                    }
+                }
+
+                if (!r_->empty ())
+                {
+                    lhs_->push_back (static_cast<charset *>(0));
+                    lhs_->back () = r_.release ();
+                }
+            }
+        }
+    }
+
+    static void fill_rhs_list (const token_map &map_,
+        charset_list &list_)
+    {
+        typename parser::tokeniser::token_map::const_iterator iter_ =
+            map_.begin ();
+        typename parser::tokeniser::token_map::const_iterator end_ =
+            map_.end ();
+
+        for (; iter_ != end_; ++iter_)
+        {
+            list_->push_back (static_cast<charset *>(0));
+            list_->back () = new charset (iter_->first, iter_->second);
+        }
+    }
+
+    static void fill_lookup (const string_token &token_,
+        size_t_vector *lookup_, const std::size_t index_)
+    {
+        const CharT *curr_ = token_._charset.c_str ();
+        const CharT *chars_end_ = curr_ + token_._charset.size ();
+        std::size_t *ptr_ = &lookup_->front ();
+        const std::size_t max_ = sizeof (CharT) == 1 ?
+            num_chars : num_wchar_ts;
+
+        if (token_._negated)
+        {
+            CharT curr_char_ = sizeof (CharT) == 1 ? -128 : 0;
+            std::size_t i_ = 0;
+
+            while (curr_ < chars_end_)
+            {
+                while (*curr_ > curr_char_)
+                {
+                    ptr_[static_cast<typename Traits::index_type>
+                        (curr_char_)] = index_ + dfa_offset;
+                    ++curr_char_;
+                    ++i_;
+                }
+
+                ++curr_char_;
+                ++curr_;
+                ++i_;
+            }
+
+            for (; i_ < max_; ++i_)
+            {
+                ptr_[static_cast<typename Traits::index_type>(curr_char_)] =
+                    index_ + dfa_offset;
+                ++curr_char_;
+            }
+        }
+        else
+        {
+            while (curr_ < chars_end_)
+            {
+                ptr_[static_cast<typename Traits::index_type>(*curr_)] =
+                    index_ + dfa_offset;
+                ++curr_;
+            }
+        }
+    }
+
+    static void build_equiv_list (const node_vector *vector_,
+        const index_set_vector &set_mapping_, equivset_list &lhs_)
+    {
+        equivset_list rhs_;
+
+        fill_rhs_list (vector_, set_mapping_, rhs_);
+
+        if (!rhs_->empty ())
+        {
+            typename equivset_list::list::iterator iter_;
+            typename equivset_list::list::iterator end_;
+            equivset_ptr overlap_ (new equivset);
+
+            lhs_->push_back (static_cast<equivset *>(0));
+            lhs_->back () = rhs_->front ();
+            rhs_->pop_front ();
+
+            while (!rhs_->empty ())
+            {
+                equivset_ptr r_ (rhs_->front ());
+
+                rhs_->pop_front ();
+                iter_ = lhs_->begin ();
+                end_ = lhs_->end ();
+
+                while (!r_->empty () && iter_ != end_)
+                {
+                    typename equivset_list::list::iterator l_iter_ = iter_;
+
+                    (*l_iter_)->intersect (*r_.get (), *overlap_.get ());
+
+                    if (overlap_->empty ())
+                    {
+                        ++iter_;
+                    }
+                    else if ((*l_iter_)->empty ())
+                    {
+                        delete *l_iter_;
+                        *l_iter_ = overlap_.release ();
+
+                        // VC++ 6 Hack:
+                        equivset_ptr temp_overlap_ (new equivset);
+
+                        overlap_ = temp_overlap_;
+                        ++iter_;
+                    }
+                    else if (r_->empty ())
+                    {
+                        delete r_.release ();
+                        r_ = overlap_;
+
+                        // VC++ 6 Hack:
+                        equivset_ptr temp_overlap_ (new equivset);
+
+                        overlap_ = temp_overlap_;
+                        break;
+                    }
+                    else
+                    {
+                        iter_ = lhs_->insert (++iter_,
+                            static_cast<equivset *>(0));
+                        *iter_ = overlap_.release ();
+
+                        // VC++ 6 Hack:
+                        equivset_ptr temp_overlap_ (new equivset);
+
+                        overlap_ = temp_overlap_;
+                        ++iter_;
+                        end_ = lhs_->end ();
+                    }
+                }
+
+                if (!r_->empty ())
+                {
+                    lhs_->push_back (static_cast<equivset *>(0));
+                    lhs_->back () = r_.release ();
+                }
+            }
+        }
+    }
+
+    static void fill_rhs_list (const node_vector *vector_,
+        const index_set_vector &set_mapping_, equivset_list &list_)
+    {
+        typename node_vector::const_iterator iter_ =
+            vector_->begin ();
+        typename node_vector::const_iterator end_ =
+            vector_->end ();
+
+        for (; iter_ != end_; ++iter_)
+        {
+            const detail::node *node_ = *iter_;
+
+            if (!node_->end_state ())
+            {
+                const std::size_t token_ = node_->token ();
+
+                if (token_ != null_token)
+                {
+                    list_->push_back (static_cast<equivset *>(0));
+
+                    if (token_ == bol_token || token_ == eol_token)
+                    {
+                        std::set<std::size_t> index_set_;
+
+                        index_set_.insert (token_);
+                        list_->back () = new equivset (index_set_,
+                            node_->greedy (), token_, node_->followpos ());
+                    }
+                    else
+                    {
+                        list_->back () = new equivset (set_mapping_[token_],
+                            node_->greedy (), token_, node_->followpos ());
+                    }
+                }
+            }
+        }
+    }
+
+    static void fixup_bol (detail::node * &root_,
+        node_ptr_vector &node_ptr_vector_)
+    {
+        typename detail::node::node_vector *first_ = &root_->firstpos ();
+        bool found_ = false;
+        typename detail::node::node_vector::const_iterator iter_ =
+            first_->begin ();
+        typename detail::node::node_vector::const_iterator end_ =
+            first_->end ();
+
+        for (; iter_ != end_; ++iter_)
+        {
+            const detail::node *node_ = *iter_;
+
+            found_ = !node_->end_state () && node_->token () == bol_token;
+
+            if (found_) break;
+        }
+
+        if (!found_)
+        {
+            node_ptr_vector_->push_back (static_cast<detail::leaf_node *>(0));
+            node_ptr_vector_->back () = new detail::leaf_node
+                (bol_token, true);
+
+            detail::node *lhs_ = node_ptr_vector_->back ();
+
+            node_ptr_vector_->push_back (static_cast<detail::leaf_node *>(0));
+            node_ptr_vector_->back () = new detail::leaf_node
+                (null_token, true);
+
+            detail::node *rhs_ = node_ptr_vector_->back ();
+
+            node_ptr_vector_->push_back
+                (static_cast<detail::selection_node *>(0));
+            node_ptr_vector_->back () =
+                new detail::selection_node (lhs_, rhs_);
+            lhs_ = node_ptr_vector_->back ();
+
+            node_ptr_vector_->push_back
+                (static_cast<detail::sequence_node *>(0));
+            node_ptr_vector_->back () =
+                new detail::sequence_node (lhs_, root_);
+            root_ = node_ptr_vector_->back ();
+        }
+    }
+
+    static void minimise_dfa (const std::size_t dfa_alphabet_,
+        size_t_vector &dfa_, std::size_t size_)
+    {
+        const std::size_t *first_ = &dfa_.front ();
+        const std::size_t *second_ = 0;
+        const std::size_t *end_ = first_ + size_;
+        std::size_t index_ = 1;
+        std::size_t new_index_ = 1;
+        std::size_t curr_index_ = 0;
+        index_set index_set_;
+        size_t_vector lookup_;
+        std::size_t *lookup_ptr_ = 0;
+
+        lookup_.resize (size_ / dfa_alphabet_, null_token);
+        lookup_ptr_ = &lookup_.front ();
+        *lookup_ptr_ = 0;
+        // Only one 'jam' state, so skip it.
+        first_ += dfa_alphabet_;
+
+        for (; first_ < end_; first_ += dfa_alphabet_, ++index_)
+        {
+            for (second_ = first_ + dfa_alphabet_, curr_index_ = index_ + 1;
+                second_ < end_; second_ += dfa_alphabet_, ++curr_index_)
+            {
+                if (index_set_.find (curr_index_) != index_set_.end ())
+                {
+                    continue;
+                }
+
+                // Some systems have memcmp in namespace std.
+                using namespace std;
+
+                if (memcmp (first_, second_, sizeof (std::size_t) *
+                    dfa_alphabet_) == 0)
+                {
+                    index_set_.insert (curr_index_);
+                    lookup_ptr_[curr_index_] = new_index_;
+                }
+            }
+
+            if (lookup_ptr_[index_] == null_token)
+            {
+                lookup_ptr_[index_] = new_index_;
+                ++new_index_;
+            }
+        }
+
+        if (!index_set_.empty ())
+        {
+            const std::size_t *front_ = &dfa_.front ();
+            size_t_vector new_dfa_ (front_, front_ + dfa_alphabet_);
+            typename index_set::iterator set_end_ =
+                index_set_.end ();
+            const std::size_t *ptr_ = front_ + dfa_alphabet_;
+            std::size_t *new_ptr_ = 0;
+
+            new_dfa_.resize (size_ - index_set_.size () * dfa_alphabet_, 0);
+            new_ptr_ = &new_dfa_.front () + dfa_alphabet_;
+            size_ /= dfa_alphabet_;
+
+            for (index_ = 1; index_ < size_; ++index_)
+            {
+                if (index_set_.find (index_) != set_end_)
+                {
+                    ptr_ += dfa_alphabet_;
+                    continue;
+                }
+
+                new_ptr_[end_state_index] = ptr_[end_state_index];
+                new_ptr_[id_index] = ptr_[id_index];
+                new_ptr_[unique_id_index] = ptr_[unique_id_index];
+                new_ptr_[state_index] = ptr_[state_index];
+                new_ptr_[bol_index] = lookup_ptr_[ptr_[bol_index]];
+                new_ptr_[eol_index] = lookup_ptr_[ptr_[eol_index]];
+                new_ptr_ += dfa_offset;
+                ptr_ += dfa_offset;
+
+                for (std::size_t i_ = dfa_offset; i_ < dfa_alphabet_; ++i_)
+                {
+                    *new_ptr_++ = lookup_ptr_[*ptr_++];
+                }
+            }
+
+            dfa_.swap (new_dfa_);
+        }
+    }
+};
+
+typedef basic_generator<char> generator;
+typedef basic_generator<wchar_t> wgenerator;
+}
+}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/internals.hpp b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/internals.hpp
new file mode 100644
index 0000000..5f3a026
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/internals.hpp
@@ -0,0 +1,60 @@
+// internals.hpp
+// Copyright (c) 2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_INTERNALS_HPP
+#define BOOST_LEXER_INTERNALS_HPP
+
+#include "containers/ptr_vector.hpp"
+
+namespace boost
+{
+namespace lexer
+{
+namespace detail
+{
+struct internals
+{
+    typedef std::vector<std::size_t> size_t_vector;
+    typedef ptr_vector<size_t_vector> size_t_vector_vector;
+
+    size_t_vector_vector _lookup;
+    size_t_vector _dfa_alphabet;
+    size_t_vector_vector _dfa;
+    bool _seen_BOL_assertion;
+    bool _seen_EOL_assertion;
+
+    internals () :
+        _seen_BOL_assertion (false),
+        _seen_EOL_assertion (false)
+    {
+    }
+
+    void clear ()
+    {
+        _lookup.clear ();
+        _dfa_alphabet.clear ();
+        _dfa.clear ();
+        _seen_BOL_assertion = false;
+        _seen_EOL_assertion = false;
+    }
+
+    void swap (internals &internals_)
+    {
+        _lookup->swap (*internals_._lookup);
+        _dfa_alphabet.swap (internals_._dfa_alphabet);
+        _dfa->swap (*internals_._dfa);
+        std::swap (_seen_BOL_assertion, internals_._seen_BOL_assertion);
+        std::swap (_seen_EOL_assertion, internals_._seen_EOL_assertion);
+    }
+
+private:
+    internals (const internals &); // No copy construction.
+    internals &operator = (const internals &); // No assignment.
+};
+}
+}
+}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/parser/parser.hpp b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/parser/parser.hpp
new file mode 100644
index 0000000..5c3c650
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/parser/parser.hpp
@@ -0,0 +1,511 @@
+// parser.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_PARSER_HPP
+#define BOOST_LEXER_PARSER_HPP
+
+#include <boost/assert.hpp>
+#include "tree/end_node.hpp"
+#include "tree/iteration_node.hpp"
+#include "tree/leaf_node.hpp"
+#include "../runtime_error.hpp"
+#include "tree/selection_node.hpp"
+#include "tree/sequence_node.hpp"
+#include "../size_t.hpp"
+#include "tokeniser/re_tokeniser.hpp"
+
+namespace boost
+{
+namespace lexer
+{
+namespace detail
+{
+template<typename CharT>
+class basic_parser
+{
+public:
+    typedef basic_re_tokeniser<CharT> tokeniser;
+    typedef typename tokeniser::string string;
+    typedef std::map<string, const node *> macro_map;
+    typedef node::node_ptr_vector node_ptr_vector;
+    typedef typename tokeniser::num_token token;
+
+/*
+    General principles of regex parsing:
+    - Every regex is a sequence of sub-regexes.
+    - Regexes consist of operands and operators
+    - All operators decompose to sequence, selection ('|') and iteration ('*')
+    - Regex tokens are stored on the stack.
+    - When a complete sequence of regex tokens is on the stack it is processed.
+
+Grammar:
+
+<REGEX>      -> <OREXP>
+<OREXP>      -> <SEQUENCE> | <OREXP>'|'<SEQUENCE>
+<SEQUENCE>   -> <SUB>
+<SUB>        -> <EXPRESSION> | <SUB><EXPRESSION>
+<EXPRESSION> -> <REPEAT>
+<REPEAT>     -> charset | macro | '('<REGEX>')' | <REPEAT><DUPLICATE>
+<DUPLICATE>  -> '?' | '*' | '+' | '{n[,[m]]}'
+*/
+    static node *parse (const CharT *start_, const CharT * const end_,
+        const std::size_t id_, const std::size_t unique_id_,
+        const std::size_t dfa_state_, const regex_flags flags_,
+        const std::locale &locale_, node_ptr_vector &node_ptr_vector_,
+        const macro_map &macromap_, typename tokeniser::token_map &map_,
+        bool &seen_BOL_assertion_, bool &seen_EOL_assertion_)
+    {
+        node *root_ = 0;
+        state state_ (start_, end_, flags_, locale_);
+        token lhs_token_;
+        token rhs_token_;
+        token_stack token_stack_;
+        tree_node_stack tree_node_stack_;
+        char action_ = 0;
+
+        token_stack_.push (rhs_token_);
+        tokeniser::next (state_, map_, rhs_token_);
+
+        do
+        {
+            lhs_token_ = token_stack_.top ();
+            action_ = lhs_token_.precedence (rhs_token_._type);
+
+            switch (action_)
+            {
+            case '<':
+            case '=':
+                token_stack_.push (rhs_token_);
+                tokeniser::next (state_, map_, rhs_token_);
+                break;
+            case '>':
+                reduce (token_stack_, macromap_, node_ptr_vector_,
+                    tree_node_stack_);
+                break;
+            default:
+                std::ostringstream ss_;
+
+                ss_ << "A syntax error occurred: '" <<
+                    lhs_token_.precedence_string () <<
+                    "' against '" << rhs_token_.precedence_string () <<
+                    "' at index " << state_.index () << ".";
+                throw runtime_error (ss_.str ().c_str ());
+                break;
+            }
+        } while (!token_stack_.empty ());
+
+        if (tree_node_stack_.empty ())
+        {
+            throw runtime_error ("Empty rules are not allowed.");
+        }
+
+        BOOST_ASSERT(tree_node_stack_.size () == 1);
+
+        node *lhs_node_ = tree_node_stack_.top ();
+
+        tree_node_stack_.pop ();
+
+        if (id_ == 0)
+        {
+            // Macros have no end state...
+            root_ = lhs_node_;
+        }
+        else
+        {
+            node_ptr_vector_->push_back (static_cast<end_node *>(0));
+
+            node *rhs_node_ = new end_node (id_, unique_id_, dfa_state_);
+
+            node_ptr_vector_->back () = rhs_node_;
+            node_ptr_vector_->push_back (static_cast<sequence_node *>(0));
+            node_ptr_vector_->back () = new sequence_node
+                (lhs_node_, rhs_node_);
+            root_ = node_ptr_vector_->back ();
+        }
+
+        // Done this way as bug in VC++ 6 prevents |= operator working
+        // properly!
+        if (state_._seen_BOL_assertion) seen_BOL_assertion_ = true;
+
+        if (state_._seen_EOL_assertion) seen_EOL_assertion_ = true;
+
+        return root_;
+    }
+
+private:
+    typedef typename tokeniser::state state;
+    typedef std::stack<token> token_stack;
+    typedef node::node_stack tree_node_stack;
+
+    static void reduce (token_stack &token_stack_,
+        const macro_map &macromap_, node_ptr_vector &node_vector_ptr_,
+        tree_node_stack &tree_node_stack_)
+    {
+        typename tokeniser::num_token lhs_;
+        typename tokeniser::num_token rhs_;
+        token_stack handle_;
+        char action_ = 0;
+
+        do
+        {
+            rhs_ = token_stack_.top ();
+            token_stack_.pop ();
+            handle_.push (rhs_);
+
+            if (!token_stack_.empty ())
+            {
+                lhs_ = token_stack_.top ();
+                action_ = lhs_.precedence (rhs_._type);
+            }
+        } while (!token_stack_.empty () && action_ == '=');
+
+        BOOST_ASSERT(token_stack_.empty () || action_ == '<');
+
+        switch (rhs_._type)
+        {
+        case token::BEGIN:
+            // finished processing so exit
+            break;
+        case token::REGEX:
+            // finished parsing, nothing to do
+            break;
+        case token::OREXP:
+            orexp (handle_, token_stack_, node_vector_ptr_, tree_node_stack_);
+            break;
+        case token::SEQUENCE:
+            token_stack_.push (token::OREXP);
+            break;
+        case token::SUB:
+            sub (handle_, token_stack_, node_vector_ptr_, tree_node_stack_);
+            break;
+        case token::EXPRESSION:
+            token_stack_.push (token::SUB);
+            break;
+        case token::REPEAT:
+            repeat (handle_, token_stack_);
+            break;
+        case token::CHARSET:
+            charset (handle_, token_stack_, node_vector_ptr_,
+                tree_node_stack_);
+            break;
+        case token::MACRO:
+            macro (handle_, token_stack_, macromap_, node_vector_ptr_,
+                tree_node_stack_);
+            break;
+        case token::OPENPAREN:
+            openparen (handle_, token_stack_);
+            break;
+        case token::OPT:
+        case token::AOPT:
+            optional (rhs_._type == token::OPT, node_vector_ptr_,
+                tree_node_stack_);
+            token_stack_.push (token::DUP);
+            break;
+        case token::ZEROORMORE:
+        case token::AZEROORMORE:
+            zero_or_more (rhs_._type == token::ZEROORMORE, node_vector_ptr_,
+                tree_node_stack_);
+            token_stack_.push (token::DUP);
+            break;
+        case token::ONEORMORE:
+        case token::AONEORMORE:
+            one_or_more (rhs_._type == token::ONEORMORE, node_vector_ptr_,
+                tree_node_stack_);
+            token_stack_.push (token::DUP);
+            break;
+        case token::REPEATN:
+        case token::AREPEATN:
+            repeatn (rhs_._type == token::REPEATN, handle_.top (),
+                node_vector_ptr_, tree_node_stack_);
+            token_stack_.push (token::DUP);
+            break;
+        default:
+            throw runtime_error
+                ("Internal error regex_parser::reduce");
+            break;
+        }
+    }
+
+    static void orexp (token_stack &handle_, token_stack &token_stack_,
+        node_ptr_vector &node_ptr_vector_, tree_node_stack &tree_node_stack_)
+    {
+        BOOST_ASSERT(handle_.top ()._type == token::OREXP &&
+            (handle_.size () == 1 || handle_.size () == 3));
+
+        if (handle_.size () == 1)
+        {
+            token_stack_.push (token::REGEX);
+        }
+        else
+        {
+            handle_.pop ();
+            BOOST_ASSERT(handle_.top ()._type == token::OR);
+            handle_.pop ();
+            BOOST_ASSERT(handle_.top ()._type == token::SEQUENCE);
+            perform_or (node_ptr_vector_, tree_node_stack_);
+            token_stack_.push (token::OREXP);
+        }
+    }
+
+    static void sub (token_stack &handle_, token_stack &token_stack_,
+        node_ptr_vector &node_ptr_vector_, tree_node_stack &tree_node_stack_)
+    {
+        BOOST_ASSERT(handle_.top ()._type == token::SUB &&
+            (handle_.size () == 1 || handle_.size () == 2));
+
+        if (handle_.size () == 1)
+        {
+            token_stack_.push (token::SEQUENCE);
+        }
+        else
+        {
+            handle_.pop ();
+            BOOST_ASSERT(handle_.top ()._type == token::EXPRESSION);
+            // perform join
+            sequence (node_ptr_vector_, tree_node_stack_);
+            token_stack_.push (token::SUB);
+        }
+    }
+
+    static void repeat (token_stack &handle_, token_stack &token_stack_)
+    {
+        BOOST_ASSERT(handle_.top ()._type == token::REPEAT &&
+            handle_.size () >= 1 && handle_.size () <= 3);
+
+        if (handle_.size () == 1)
+        {
+            token_stack_.push (token::EXPRESSION);
+        }
+        else
+        {
+            handle_.pop ();
+            BOOST_ASSERT(handle_.top ()._type == token::DUP);
+            token_stack_.push (token::REPEAT);
+        }
+    }
+
+    static void charset (token_stack &handle_, token_stack &token_stack_,
+        node_ptr_vector &node_ptr_vector_, tree_node_stack &tree_node_stack_)
+    {
+        BOOST_ASSERT(handle_.top ()._type == token::CHARSET &&
+            handle_.size () == 1);
+        // store charset
+        node_ptr_vector_->push_back (static_cast<leaf_node *>(0));
+
+        const size_t id_ = handle_.top ()._id;
+
+        node_ptr_vector_->back () = new leaf_node (id_, true);
+        tree_node_stack_.push (node_ptr_vector_->back ());
+        token_stack_.push (token::REPEAT);
+    }
+
+    static void macro (token_stack &handle_, token_stack &token_stack_,
+        const macro_map &macromap_, node_ptr_vector &node_ptr_vector_,
+        tree_node_stack &tree_node_stack_)
+    {
+        token &top_ = handle_.top ();
+
+        BOOST_ASSERT(top_._type == token::MACRO && handle_.size () == 1);
+
+        typename macro_map::const_iterator iter_ =
+            macromap_.find (top_._macro);
+
+        if (iter_ == macromap_.end ())
+        {
+            const CharT *name_ = top_._macro;
+            std::basic_stringstream<CharT> ss_;
+            std::ostringstream os_;
+
+            os_ << "Unknown MACRO name '";
+
+            while (*name_)
+            {
+                os_ << ss_.narrow (*name_++, ' ');
+            }
+
+            os_ << "'.";
+            throw runtime_error (os_.str ());
+        }
+
+        tree_node_stack_.push (iter_->second->copy (node_ptr_vector_));
+        token_stack_.push (token::REPEAT);
+    }
+
+    static void openparen (token_stack &handle_, token_stack &token_stack_)
+    {
+        BOOST_ASSERT(handle_.top ()._type == token::OPENPAREN &&
+            handle_.size () == 3);
+        handle_.pop ();
+        BOOST_ASSERT(handle_.top ()._type == token::REGEX);
+        handle_.pop ();
+        BOOST_ASSERT(handle_.top ()._type == token::CLOSEPAREN);
+        token_stack_.push (token::REPEAT);
+    }
+
+    static void perform_or (node_ptr_vector &node_ptr_vector_,
+        tree_node_stack &tree_node_stack_)
+    {
+        // perform or
+        node *rhs_ = tree_node_stack_.top ();
+
+        tree_node_stack_.pop ();
+
+        node *lhs_ = tree_node_stack_.top ();
+
+        node_ptr_vector_->push_back (static_cast<selection_node *>(0));
+        node_ptr_vector_->back () = new selection_node (lhs_, rhs_);
+        tree_node_stack_.top () = node_ptr_vector_->back ();
+    }
+
+    static void sequence (node_ptr_vector &node_ptr_vector_,
+        tree_node_stack &tree_node_stack_)
+    {
+        node *rhs_ = tree_node_stack_.top ();
+
+        tree_node_stack_.pop ();
+
+        node *lhs_ = tree_node_stack_.top ();
+
+        node_ptr_vector_->push_back (static_cast<sequence_node *>(0));
+        node_ptr_vector_->back () = new sequence_node (lhs_, rhs_);
+        tree_node_stack_.top () = node_ptr_vector_->back ();
+    }
+
+    static void optional (const bool greedy_,
+        node_ptr_vector &node_ptr_vector_, tree_node_stack &tree_node_stack_)
+    {
+        // perform ?
+        node *lhs_ = tree_node_stack_.top ();
+        // You don't know if lhs_ is a leaf_node, so get firstpos.
+        node::node_vector &firstpos_ = lhs_->firstpos ();
+
+        for (node::node_vector::iterator iter_ = firstpos_.begin (),
+            end_ = firstpos_.end (); iter_ != end_; ++iter_)
+        {
+            // These are leaf_nodes!
+            (*iter_)->greedy (greedy_);
+        }
+
+        node_ptr_vector_->push_back (static_cast<leaf_node *>(0));
+
+        node *rhs_ = new leaf_node (null_token, greedy_);
+
+        node_ptr_vector_->back () = rhs_;
+        node_ptr_vector_->push_back (static_cast<selection_node *>(0));
+        node_ptr_vector_->back () = new selection_node (lhs_, rhs_);
+        tree_node_stack_.top () = node_ptr_vector_->back ();
+    }
+
+    static void zero_or_more (const bool greedy_,
+        node_ptr_vector &node_ptr_vector_, tree_node_stack &tree_node_stack_)
+    {
+        // perform *
+        node *ptr_ = tree_node_stack_.top ();
+
+        node_ptr_vector_->push_back (static_cast<iteration_node *>(0));
+        node_ptr_vector_->back () = new iteration_node (ptr_, greedy_);
+        tree_node_stack_.top () = node_ptr_vector_->back ();
+    }
+
+    static void one_or_more (const bool greedy_,
+        node_ptr_vector &node_ptr_vector_, tree_node_stack &tree_node_stack_)
+    {
+        // perform +
+        node *lhs_ = tree_node_stack_.top ();
+        node *copy_ = lhs_->copy (node_ptr_vector_);
+
+        node_ptr_vector_->push_back (static_cast<iteration_node *>(0));
+
+        node *rhs_ = new iteration_node (copy_, greedy_);
+
+        node_ptr_vector_->back () = rhs_;
+        node_ptr_vector_->push_back (static_cast<sequence_node *>(0));
+        node_ptr_vector_->back () = new sequence_node (lhs_, rhs_);
+        tree_node_stack_.top () = node_ptr_vector_->back ();
+    }
+
+    // This is one of the most mind bending routines in this code...
+    static void repeatn (const bool greedy_, const token &token_,
+        node_ptr_vector &node_ptr_vector_, tree_node_stack &tree_node_stack_)
+    {
+        // perform {n[,[m]]}
+        // Semantic checks have already been performed.
+        // {0,}  = *
+        // {0,1} = ?
+        // {1,}  = +
+        // therefore we do not check for these cases.
+        if (!(token_._min == 1 && !token_._comma))
+        {
+            const std::size_t top_ = token_._min > 0 ?
+                token_._min : token_._max;
+
+            if (token_._min == 0)
+            {
+                optional (greedy_, node_ptr_vector_, tree_node_stack_);
+            }
+
+            node *prev_ = tree_node_stack_.top ()->copy (node_ptr_vector_);
+            node *curr_ = 0;
+
+            for (std::size_t i_ = 2; i_ < top_; ++i_)
+            {
+                curr_ = prev_->copy (node_ptr_vector_);
+                tree_node_stack_.push (static_cast<node *>(0));
+                tree_node_stack_.top () = prev_;
+                sequence (node_ptr_vector_, tree_node_stack_);
+                prev_ = curr_;
+            }
+
+            if (token_._comma && token_._min > 0)
+            {
+                if (token_._min > 1)
+                {
+                    curr_ = prev_->copy (node_ptr_vector_);
+                    tree_node_stack_.push (static_cast<node *>(0));
+                    tree_node_stack_.top () = prev_;
+                    sequence (node_ptr_vector_, tree_node_stack_);
+                    prev_ = curr_;
+                }
+
+                if (token_._comma && token_._max)
+                {
+                    tree_node_stack_.push (static_cast<node *>(0));
+                    tree_node_stack_.top () = prev_;
+                    optional (greedy_, node_ptr_vector_, tree_node_stack_);
+                    prev_ = tree_node_stack_.top ();
+                    tree_node_stack_.pop ();
+
+                    const std::size_t count_ = token_._max - token_._min;
+
+                    for (std::size_t i_ = 1; i_ < count_; ++i_)
+                    {
+                        curr_ = prev_->copy (node_ptr_vector_);
+                        tree_node_stack_.push (static_cast<node *>(0));
+                        tree_node_stack_.top () = prev_;
+                        sequence (node_ptr_vector_, tree_node_stack_);
+                        prev_ = curr_;
+                    }
+                }
+                else
+                {
+                    tree_node_stack_.push (static_cast<node *>(0));
+                    tree_node_stack_.top () = prev_;
+                    zero_or_more (greedy_, node_ptr_vector_, tree_node_stack_);
+                    prev_ = tree_node_stack_.top ();
+                    tree_node_stack_.pop ();
+                }
+            }
+
+            tree_node_stack_.push (static_cast<node *>(0));
+            tree_node_stack_.top () = prev_;
+            sequence (node_ptr_vector_, tree_node_stack_);
+        }
+    }
+};
+}
+}
+}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/parser/tokeniser/num_token.hpp b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/parser/tokeniser/num_token.hpp
new file mode 100644
index 0000000..dc1c6bd
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/parser/tokeniser/num_token.hpp
@@ -0,0 +1,146 @@
+// num_token.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_NUM_TOKEN_HPP
+#define BOOST_LEXER_NUM_TOKEN_HPP
+
+#include <boost/config.hpp>
+#include "../../consts.hpp" // null_token
+#include "../../size_t.hpp"
+#include <boost/detail/workaround.hpp>
+
+namespace boost
+{
+namespace lexer
+{
+namespace detail
+{
+template<typename CharT>
+struct basic_num_token
+{
+    enum type {BEGIN, REGEX, OREXP, SEQUENCE, SUB, EXPRESSION, REPEAT,
+        DUP, OR, CHARSET, MACRO, OPENPAREN, CLOSEPAREN, OPT, AOPT,
+        ZEROORMORE, AZEROORMORE, ONEORMORE, AONEORMORE, REPEATN, AREPEATN,
+        END};
+
+    type _type;
+    std::size_t _id;
+    std::size_t _min;
+    bool _comma;
+    std::size_t _max;
+    CharT _macro[max_macro_len + 1];
+    static const char _precedence_table[END + 1][END + 1];
+    static const char *_precedence_strings[END + 1];
+
+    basic_num_token (const type type_ = BEGIN,
+        const std::size_t id_ = null_token) :
+        _type (type_),
+        _id (id_),
+        _min (0),
+        _comma (false),
+        _max (0)
+    {
+        *_macro = 0;
+    }
+
+    basic_num_token &operator = (const basic_num_token &rhs_)
+    {
+        _type = rhs_._type;
+        _id = rhs_._id;
+        _min = rhs_._min;
+        _comma = rhs_._comma;
+        _max = rhs_._max;
+
+        if (_type == MACRO)
+        {
+            const CharT *read_ = rhs_._macro;
+            CharT *write_ = _macro;
+
+            while (*read_)
+            {
+                *write_++ = *read_++;
+            }
+
+            *write_ = 0;
+        }
+
+        return *this;
+    }
+
+    void set (const type type_)
+    {
+        _type = type_;
+        _id = null_token;
+    }
+
+    void set (const type type_, const std::size_t id_)
+    {
+        _type = type_;
+        _id = id_;
+    }
+
+    void min_max (const std::size_t min_, const bool comma_,
+        const std::size_t max_)
+    {
+        _min = min_;
+        _comma = comma_;
+        _max = max_;
+    }
+
+    char precedence (const type type_) const
+    {
+        return _precedence_table[_type][type_];
+    }
+
+    const char *precedence_string () const
+    {
+        return _precedence_strings[_type];
+    }
+};
+
+template<typename CharT>
+const char basic_num_token<CharT>::_precedence_table[END + 1][END + 1] = {
+//        BEG, REG, ORE, SEQ, SUB, EXP, RPT, DUP,  | , CHR, MCR,  ( ,  ) ,  ? , ?? ,  * , *? ,  + , +?, {n}?, {n}, END
+/*BEGIN*/{' ', '<', '<', '<', '<', '<', '<', ' ', ' ', '<', '<', '<', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>'},
+/*REGEX*/{' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '=', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>'},
+/*OREXP*/{' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '=', '>', '>', ' ', '>', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>'},
+/* SEQ */{' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>', '>', '>', ' ', '>', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>'},
+/* SUB */{' ', ' ', ' ', ' ', ' ', '=', '<', ' ', '>', '<', '<', '<', '>', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>'},
+/*EXPRE*/{' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>', '>', '>', '>', '>', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>'},
+/* RPT */{' ', ' ', ' ', ' ', ' ', ' ', ' ', '=', '>', '>', '>', '>', '>', '<', '<', '<', '<', '<', '<', '<', '<', '>'},
+/*DUPLI*/{' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>', '>', '>', '>', '>', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>'},
+/*  |  */{' ', ' ', ' ', '=', '<', '<', '<', ' ', ' ', '<', '<', '<', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '},
+/*CHARA*/{' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>', '>', '>', '>', '>', '>', '>', '>', '>', '>', '>', '>', '>', '>'},
+/*MACRO*/{' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>', '>', '>', '>', '>', '>', '>', '>', '>', '>', '>', '>', '>', '>'},
+/*  (  */{' ', '=', '<', '<', '<', '<', '<', ' ', ' ', '<', '<', '<', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '},
+/*  )  */{' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>', '>', '>', '>', '>', '>', '>', '>', '>', '>', '>', '>', '>', '>'},
+/*  ?  */{' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>', '>', '>', '>', '>', '<', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>'},
+/* ??  */{' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>', '>', '>', '>', '>', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>'},
+/*  *  */{' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>', '>', '>', '>', '>', '<', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>'},
+/* *?  */{' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>', '>', '>', '>', '>', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>'},
+/*  +  */{' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>', '>', '>', '>', '>', '<', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>'},
+/* +?  */{' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>', '>', '>', '>', '>', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>'},
+/*{n,m}*/{' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>', '>', '>', '>', '>', '<', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>'},
+/*{nm}?*/{' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>', '>', '>', '>', '>', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>'},
+/* END */{' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '}
+};
+
+template<typename CharT>
+const char *basic_num_token<CharT>::_precedence_strings[END + 1] =
+#if BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION, BOOST_TESTED_AT(910))
+{{"BEGIN"}, {"REGEX"}, {"OREXP"}, {"SEQUENCE"}, {"SUB"}, {"EXPRESSION"},
+    {"REPEAT"}, {"DUPLICATE"}, {"|"}, {"CHARSET"}, {"MACRO"},
+    {"("}, {")"}, {"?"}, {"??"}, {"*"}, {"*?"}, {"+"}, {"+?"}, {"{n[,[m]]}"},
+    {"{n[,[m]]}?"}, {"END"}};
+#else
+{"BEGIN", "REGEX", "OREXP", "SEQUENCE", "SUB", "EXPRESSION", "REPEAT",
+    "DUPLICATE", "|", "CHARSET", "MACRO", "(", ")", "?", "??", "*", "*?",
+    "+", "+?", "{n[,[m]]}", "{n[,[m]]}?", "END"};
+#endif
+}
+}
+}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/parser/tokeniser/re_tokeniser.hpp b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/parser/tokeniser/re_tokeniser.hpp
new file mode 100644
index 0000000..7bdeb80
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/parser/tokeniser/re_tokeniser.hpp
@@ -0,0 +1,574 @@
+// tokeniser.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_RE_TOKENISER_HPP
+#define BOOST_LEXER_RE_TOKENISER_HPP
+
+// memcpy()
+#include <cstring>
+#include <map>
+#include "num_token.hpp"
+#include "../../runtime_error.hpp"
+#include "../../size_t.hpp"
+#include <sstream>
+#include "../../string_token.hpp"
+#include "re_tokeniser_helper.hpp"
+
+namespace boost
+{
+namespace lexer
+{
+namespace detail
+{
+template<typename CharT>
+class basic_re_tokeniser
+{
+public:
+    typedef basic_num_token<CharT> num_token;
+    typedef basic_re_tokeniser_state<CharT> state;
+    typedef basic_string_token<CharT> string_token;
+    typedef typename string_token::string string;
+    typedef std::map<string_token, std::size_t> token_map;
+    typedef std::pair<string_token, std::size_t> token_pair;
+
+    static void next (state &state_, token_map &map_, num_token &token_)
+    {
+        CharT ch_ = 0;
+        bool eos_ = state_.next (ch_);
+
+        token_.min_max (0, false, 0);
+
+        while (!eos_ && ch_ == '"')
+        {
+            state_._in_string ^= 1;
+            eos_ = state_.next (ch_);
+        }
+
+        if (eos_)
+        {
+            if (state_._in_string)
+            {
+                throw runtime_error ("Unexpected end of regex "
+                    "(missing '\"').");
+            }
+
+            if (state_._paren_count)
+            {
+                throw runtime_error ("Unexpected end of regex "
+                    "(missing ')').");
+            }
+
+            token_.set (num_token::END, null_token);
+        }
+        else
+        {
+            if (ch_ == '\\')
+            {
+                // Even if we are in a string, respect escape sequences...
+                escape (state_, map_, token_);
+            }
+            else if (state_._in_string)
+            {
+                // All other meta characters lose their special meaning
+                // inside a string.
+                create_charset_token (string (1, ch_), false, map_, token_);
+            }
+            else
+            {
+                // Not an escape sequence and not inside a string, so
+                // check for meta characters.
+                switch (ch_)
+                {
+                case '(':
+                    token_.set (num_token::OPENPAREN, null_token);
+                    ++state_._paren_count;
+                    read_options (state_);
+                    break;
+                case ')':
+                    --state_._paren_count;
+
+                    if (state_._paren_count < 0)
+                    {
+                        std::ostringstream ss_;
+
+                        ss_ << "Number of open parenthesis < 0 at index " <<
+                            state_.index () - 1 << '.';
+                        throw runtime_error (ss_.str ().c_str ());
+                    }
+
+                    token_.set (num_token::CLOSEPAREN, null_token);
+
+                    if (!state_._flags_stack.empty ())
+                    {
+                        state_._flags = state_._flags_stack.top ();
+                        state_._flags_stack.pop ();
+                    }
+                    break;
+                case '?':
+                    if (!state_.eos () && *state_._curr == '?')
+                    {
+                        token_.set (num_token::AOPT, null_token);
+                        state_.increment ();
+                    }
+                    else
+                    {
+                        token_.set (num_token::OPT, null_token);
+                    }
+
+                    break;
+                case '*':
+                    if (!state_.eos () && *state_._curr == '?')
+                    {
+                        token_.set (num_token::AZEROORMORE, null_token);
+                        state_.increment ();
+                    }
+                    else
+                    {
+                        token_.set (num_token::ZEROORMORE, null_token);
+                    }
+
+                    break;
+                case '+':
+                    if (!state_.eos () && *state_._curr == '?')
+                    {
+                        token_.set (num_token::AONEORMORE, null_token);
+                        state_.increment ();
+                    }
+                    else
+                    {
+                        token_.set (num_token::ONEORMORE, null_token);
+                    }
+
+                    break;
+                case '{':
+                    open_curly (state_, token_);
+                    break;
+                case '|':
+                    token_.set (num_token::OR, null_token);
+                    break;
+                case '^':
+                    if (state_._curr - 1 == state_._start)
+                    {
+                        token_.set (num_token::CHARSET, bol_token);
+                        state_._seen_BOL_assertion = true;
+                    }
+                    else
+                    {
+                        create_charset_token (string (1, ch_), false,
+                            map_, token_);
+                    }
+
+                    break;
+                case '$':
+                    if (state_._curr == state_._end)
+                    {
+                        token_.set (num_token::CHARSET, eol_token);
+                        state_._seen_EOL_assertion = true;
+                    }
+                    else
+                    {
+                        create_charset_token (string (1, ch_), false,
+                            map_, token_);
+                    }
+
+                    break;
+                case '.':
+                {
+                    string dot_;
+
+                    if (state_._flags & dot_not_newline)
+                    {
+                        dot_ = '\n';
+                    }
+
+                    create_charset_token (dot_, true, map_, token_);
+                    break;
+                }
+                case '[':
+                {
+                    charset (state_, map_, token_);
+                    break;
+                }
+                case '/':
+                    throw runtime_error("Lookahead ('/') is not supported yet.");
+                    break;
+                default:
+                    if ((state_._flags & icase) &&
+                        (std::isupper (ch_, state_._locale) ||
+                        std::islower (ch_, state_._locale)))
+                    {
+                        CharT upper_ = std::toupper (ch_, state_._locale);
+                        CharT lower_ = std::tolower (ch_, state_._locale);
+
+                        string str_ (1, upper_);
+
+                        str_ += lower_;
+                        create_charset_token (str_, false, map_, token_);
+                    }
+                    else
+                    {
+                        create_charset_token (string (1, ch_), false,
+                            map_, token_);
+                    }
+
+                    break;
+                }
+            }
+        }
+    }
+
+private:
+    typedef basic_re_tokeniser_helper<CharT> tokeniser_helper;
+
+    static void read_options (state &state_)
+    {
+        if (!state_.eos () && *state_._curr == '?')
+        {
+            CharT ch_ = 0;
+            bool eos_ = false;
+            bool negate_ = false;
+
+            state_.increment ();
+            eos_ = state_.next (ch_);
+            state_._flags_stack.push (state_._flags);
+
+            while (!eos_ && ch_ != ':')
+            {
+                switch (ch_)
+                {
+                case '-':
+                    negate_ ^= 1;
+                    break;
+                case 'i':
+                    if (negate_)
+                    {
+                        state_._flags = static_cast<regex_flags>
+                            (state_._flags & ~icase);
+                    }
+                    else
+                    {
+                        state_._flags = static_cast<regex_flags>
+                            (state_._flags | icase);
+                    }
+
+                    negate_ = false;
+                    break;
+                case 's':
+                    if (negate_)
+                    {
+                        state_._flags = static_cast<regex_flags>
+                            (state_._flags | dot_not_newline);
+                    }
+                    else
+                    {
+                        state_._flags = static_cast<regex_flags>
+                            (state_._flags & ~dot_not_newline);
+                    }
+
+                    negate_ = false;
+                    break;
+                default:
+                {
+                    std::ostringstream ss_;
+
+                    ss_ << "Unknown option at index " <<
+                        state_.index () - 1 << '.';
+                    throw runtime_error (ss_.str ().c_str ());
+                }
+                }
+
+                eos_ = state_.next (ch_);
+            }
+
+            // End of string handler will handle early termination
+        }
+        else if (!state_._flags_stack.empty ())
+        {
+            state_._flags_stack.push (state_._flags);
+        }
+    }
+
+    static void escape (state &state_, token_map &map_, num_token &token_)
+    {
+        CharT ch_ = 0;
+        std::size_t str_len_ = 0;
+        const CharT *str_ = tokeniser_helper::escape_sequence (state_,
+            ch_, str_len_);
+
+        if (str_)
+        {
+            state state2_ (str_ + 1, str_ + str_len_, state_._flags,
+                state_._locale);
+
+            charset (state2_, map_, token_);
+        }
+        else
+        {
+            create_charset_token (string (1, ch_), false, map_, token_);
+        }
+    }
+
+    static void charset (state &state_, token_map &map_, num_token &token_)
+    {
+        string chars_;
+        bool negated_ = false;
+
+        tokeniser_helper::charset (state_, chars_, negated_);
+        create_charset_token (chars_, negated_, map_, token_);
+    }
+
+    static void create_charset_token (const string &charset_,
+        const bool negated_, token_map &map_, num_token &token_)
+    {
+        std::size_t id_ = null_token;
+        string_token stok_ (negated_, charset_);
+
+        stok_.remove_duplicates ();
+        stok_.normalise ();
+
+        typename token_map::const_iterator iter_ = map_.find (stok_);
+
+        if (iter_ == map_.end ())
+        {
+            id_ = map_.size ();
+            map_.insert (token_pair (stok_, id_));
+        }
+        else
+        {
+            id_ = iter_->second;
+        }
+
+        token_.set (num_token::CHARSET, id_);
+    }
+
+    static void open_curly (state &state_, num_token &token_)
+    {
+        if (state_.eos ())
+        {
+            throw runtime_error ("Unexpected end of regex "
+                "(missing '}').");
+        }
+        else if (*state_._curr >= '0' && *state_._curr <= '9')
+        {
+            repeat_n (state_, token_);
+
+            if (!state_.eos () && *state_._curr == '?')
+            {
+                token_._type = num_token::AREPEATN;
+                state_.increment ();
+            }
+        }
+        else
+        {
+            macro (state_, token_);
+        }
+    }
+
+    // SYNTAX:
+    //   {n[,[n]]}
+    // SEMANTIC RULES:
+    //   {0} - INVALID (throw exception)
+    //   {0,} = *
+    //   {0,0} - INVALID (throw exception)
+    //   {0,1} = ?
+    //   {1,} = +
+    //   {min,max} where min == max - {min}
+    //   {min,max} where max < min - INVALID (throw exception)
+    static void repeat_n (state &state_, num_token &token_)
+    {
+        CharT ch_ = 0;
+        bool eos_ = state_.next (ch_);
+
+        while (!eos_ && ch_ >= '0' && ch_ <= '9')
+        {
+            token_._min *= 10;
+            token_._min += ch_ - '0';
+            eos_ = state_.next (ch_);
+        }
+
+        if (eos_)
+        {
+            throw runtime_error ("Unexpected end of regex "
+                "(missing '}').");
+        }
+
+        bool min_max_ = false;
+        bool repeatn_ = true;
+
+        token_._comma = ch_ == ',';
+
+        if (token_._comma)
+        {
+            eos_ = state_.next (ch_);
+
+            if (eos_)
+            {
+                throw runtime_error ("Unexpected end of regex "
+                    "(missing '}').");
+            }
+
+            if (ch_ == '}')
+            {
+                // Small optimisation: Check for '*' equivalency.
+                if (token_._min == 0)
+                {
+                    token_.set (num_token::ZEROORMORE, null_token);
+                    repeatn_ = false;
+                }
+                // Small optimisation: Check for '+' equivalency.
+                else if (token_._min == 1)
+                {
+                    token_.set (num_token::ONEORMORE, null_token);
+                    repeatn_ = false;
+                }
+            }
+            else
+            {
+                if (ch_ < '0' || ch_ > '9')
+                {
+                    std::ostringstream ss_;
+
+                    ss_ << "Missing '}' at index " <<
+                        state_.index () - 1 << '.';
+                    throw runtime_error (ss_.str ().c_str ());
+                }
+
+                min_max_ = true;
+
+                do
+                {
+                    token_._max *= 10;
+                    token_._max += ch_ - '0';
+                    eos_ = state_.next (ch_);
+                } while (!eos_ && ch_ >= '0' && ch_ <= '9');
+
+                if (eos_)
+                {
+                    throw runtime_error ("Unexpected end of regex "
+                        "(missing '}').");
+                }
+
+                // Small optimisation: Check for '?' equivalency.
+                if (token_._min == 0 && token_._max == 1)
+                {
+                    token_.set (num_token::OPT, null_token);
+                    repeatn_ = false;
+                }
+                // Small optimisation: if min == max, then min.
+                else if (token_._min == token_._max)
+                {
+                    token_._comma = false;
+                    min_max_ = false;
+                    token_._max = 0;
+                }
+            }
+        }
+
+        if (ch_ != '}')
+        {
+            std::ostringstream ss_;
+
+            ss_ << "Missing '}' at index " << state_.index () - 1 << '.';
+            throw runtime_error (ss_.str ().c_str ());
+        }
+
+        if (repeatn_)
+        {
+            // SEMANTIC VALIDATION follows:
+            // NOTE: {0,} has already become *
+            // therefore we don't check for a comma.
+            if (token_._min == 0 && token_._max == 0)
+            {
+                std::ostringstream ss_;
+
+                ss_ << "Cannot have exactly zero repeats preceding index " <<
+                    state_.index () << '.';
+                throw runtime_error (ss_.str ().c_str ());
+            }
+
+            if (min_max_ && token_._max < token_._min)
+            {
+                std::ostringstream ss_;
+
+                ss_ << "Max less than min preceding index " <<
+                    state_.index () << '.';
+                throw runtime_error (ss_.str ().c_str ());
+            }
+
+            token_.set (num_token::REPEATN, null_token);
+        }
+    }
+
+    static void macro (state &state_, num_token &token_)
+    {
+        CharT ch_ = 0;
+        bool eos_ = false;
+        const CharT *start_ = state_._curr;
+
+        state_.next (ch_);
+
+        if (ch_ != '_' && !(ch_ >= 'A' && ch_ <= 'Z') &&
+            !(ch_ >= 'a' && ch_ <= 'z'))
+        {
+            std::ostringstream ss_;
+
+            ss_ << "Invalid MACRO name at index " <<
+                state_.index () - 1 << '.';
+            throw runtime_error (ss_.str ().c_str ());
+        }
+
+        do
+        {
+            eos_ = state_.next (ch_);
+
+            if (eos_)
+            {
+                throw runtime_error ("Unexpected end of regex "
+                    "(missing '}').");
+            }
+        } while (ch_ == '_' || ch_ == '-' || (ch_ >= 'A' && ch_ <= 'Z') ||
+            (ch_ >= 'a' && ch_ <= 'z') || (ch_ >= '0' && ch_ <= '9'));
+
+        if (ch_ != '}')
+        {
+            std::ostringstream ss_;
+
+            ss_ << "Missing '}' at index " << state_.index () - 1 << '.';
+            throw runtime_error (ss_.str ().c_str ());
+        }
+
+        std::size_t len_ = state_._curr - 1 - start_;
+
+        if (len_ > max_macro_len)
+        {
+            std::basic_stringstream<CharT> ss_;
+            std::ostringstream os_;
+
+            os_ << "MACRO name '";
+
+            while (len_)
+            {
+                os_ << ss_.narrow (*start_++, ' ');
+                --len_;
+            }
+
+            os_ << "' too long.";
+            throw runtime_error (os_.str ());
+        }
+
+        token_.set (num_token::MACRO, null_token);
+
+        // Some systems have memcpy in namespace std.
+        using namespace std;
+
+        memcpy (token_._macro, start_, len_ * sizeof (CharT));
+        token_._macro[len_] = 0;
+    }
+};
+}
+}
+}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/parser/tokeniser/re_tokeniser_helper.hpp b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/parser/tokeniser/re_tokeniser_helper.hpp
new file mode 100644
index 0000000..6e0791e
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/parser/tokeniser/re_tokeniser_helper.hpp
@@ -0,0 +1,549 @@
+// tokeniser_helper.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_RE_TOKENISER_HELPER_H
+#define BOOST_LEXER_RE_TOKENISER_HELPER_H
+
+#include "../../char_traits.hpp"
+// strlen()
+#include <cstring>
+#include "../../size_t.hpp"
+#include "re_tokeniser_state.hpp"
+
+namespace boost
+{
+namespace lexer
+{
+namespace detail
+{
+template<typename CharT, typename Traits = char_traits<CharT> >
+class basic_re_tokeniser_helper
+{
+public:
+    typedef basic_re_tokeniser_state<CharT> state;
+    typedef std::basic_string<CharT> string;
+
+    static const CharT *escape_sequence (state &state_, CharT &ch_,
+        std::size_t &str_len_)
+    {
+        bool eos_ = state_.eos ();
+
+        if (eos_)
+        {
+            throw runtime_error ("Unexpected end of regex "
+                "following '\\'.");
+        }
+
+        const CharT *str_ = charset_shortcut (*state_._curr, str_len_);
+
+        if (str_)
+        {
+            state_.increment ();
+        }
+        else
+        {
+            ch_ = chr (state_);
+        }
+
+        return str_;
+    }
+
+    // This function can call itself.
+    static void charset (state &state_, string &chars_, bool &negated_)
+    {
+        CharT ch_ = 0;
+        bool eos_ = state_.next (ch_);
+
+        if (eos_)
+        {
+            // Pointless returning index if at end of string
+            throw runtime_error ("Unexpected end of regex "
+                "following '['.");
+        }
+
+        negated_ = ch_ == '^';
+
+        if (negated_)
+        {
+            eos_ = state_.next (ch_);
+
+            if (eos_)
+            {
+                // Pointless returning index if at end of string
+                throw runtime_error ("Unexpected end of regex "
+                    "following '^'.");
+            }
+        }
+
+        bool chset_ = false;
+        CharT prev_ = 0;
+
+        while (ch_ != ']')
+        {
+            if (ch_ == '\\')
+            {
+                std::size_t str_len_ = 0;
+                const CharT *str_ = escape_sequence (state_, prev_, str_len_);
+
+                chset_ = str_ != 0;
+
+                if (chset_)
+                {
+                    state temp_state_ (str_ + 1, str_ + str_len_,
+                        state_._flags, state_._locale);
+                    string temp_chars_;
+                    bool temp_negated_ = false;
+
+                    charset (temp_state_, temp_chars_, temp_negated_);
+
+                    if (negated_ != temp_negated_)
+                    {
+                        std::ostringstream ss_;
+
+                        ss_ << "Mismatch in charset negation preceding "
+                            "index " << state_.index () << '.';
+                        throw runtime_error (ss_.str ().c_str ());
+                    }
+
+                    chars_ += temp_chars_;
+                }
+            }
+/*
+            else if (ch_ == '[' && !state_.eos () && *state_._curr == ':')
+            {
+                // TODO: POSIX charsets
+            }
+*/
+            else
+            {
+                chset_ = false;
+                prev_ = ch_;
+            }
+
+            eos_ = state_.next (ch_);
+
+            // Covers preceding if, else if and else
+            if (eos_)
+            {
+                // Pointless returning index if at end of string
+                throw runtime_error ("Unexpected end of regex "
+                    "(missing ']').");
+            }
+
+            if (ch_ == '-')
+            {
+                charset_range (chset_, state_, eos_, ch_, prev_, chars_);
+            }
+            else if (!chset_)
+            {
+                if ((state_._flags & icase) &&
+                    (std::isupper (prev_, state_._locale) ||
+                    std::islower (prev_, state_._locale)))
+                {
+                    CharT upper_ = std::toupper (prev_, state_._locale);
+                    CharT lower_ = std::tolower (prev_, state_._locale);
+
+                    chars_ += upper_;
+                    chars_ += lower_;
+                }
+                else
+                {
+                    chars_ += prev_;
+                }
+            }
+        }
+
+        if (!negated_ && chars_.empty ())
+        {
+            throw runtime_error ("Empty charsets not allowed.");
+        }
+    }
+
+    static CharT chr (state &state_)
+    {
+        CharT ch_ = 0;
+
+        // eos_ has already been checked for.
+        switch (*state_._curr)
+        {
+            case '0':
+            case '1':
+            case '2':
+            case '3':
+            case '4':
+            case '5':
+            case '6':
+            case '7':
+                ch_ = decode_octal (state_);
+                break;
+            case 'a':
+                ch_ = '\a';
+                state_.increment ();
+                break;
+            case 'b':
+                ch_ = '\b';
+                state_.increment ();
+                break;
+            case 'c':
+                ch_ = decode_control_char (state_);
+                break;
+            case 'e':
+                ch_ = 27; // '\e' not recognised by compiler
+                state_.increment ();
+                break;
+            case 'f':
+                ch_ = '\f';
+                state_.increment ();
+                break;
+            case 'n':
+                ch_ = '\n';
+                state_.increment ();
+                break;
+            case 'r':
+                ch_ = '\r';
+                state_.increment ();
+                break;
+            case 't':
+                ch_ = '\t';
+                state_.increment ();
+                break;
+            case 'v':
+                ch_ = '\v';
+                state_.increment ();
+                break;
+            case 'x':
+                ch_ = decode_hex (state_);
+                break;
+            default:
+                ch_ = *state_._curr;
+                state_.increment ();
+                break;
+        }
+
+        return ch_;
+    }
+
+private:
+    static const char *charset_shortcut (const char ch_,
+        std::size_t &str_len_)
+    {
+        const char *str_ = 0;
+
+        switch (ch_)
+        {
+        case 'd':
+            str_ = "[0-9]";
+            break;
+        case 'D':
+            str_ = "[^0-9]";
+            break;
+        case 's':
+            str_ = "[ \t\n\r\f\v]";
+            break;
+        case 'S':
+            str_ = "[^ \t\n\r\f\v]";
+            break;
+        case 'w':
+            str_ = "[_0-9A-Za-z]";
+            break;
+        case 'W':
+            str_ = "[^_0-9A-Za-z]";
+            break;
+        }
+
+        if (str_)
+        {
+            // Some systems have strlen in namespace std.
+            using namespace std;
+
+            str_len_ = strlen (str_);
+        }
+        else
+        {
+            str_len_ = 0;
+        }
+
+        return str_;
+    }
+
+    static const wchar_t *charset_shortcut (const wchar_t ch_,
+        std::size_t &str_len_)
+    {
+        const wchar_t *str_ = 0;
+
+        switch (ch_)
+        {
+        case 'd':
+            str_ = L"[0-9]";
+            break;
+        case 'D':
+            str_ = L"[^0-9]";
+            break;
+        case 's':
+            str_ = L"[ \t\n\r\f\v]";
+            break;
+        case 'S':
+            str_ = L"[^ \t\n\r\f\v]";
+            break;
+        case 'w':
+            str_ = L"[_0-9A-Za-z]";
+            break;
+        case 'W':
+            str_ = L"[^_0-9A-Za-z]";
+            break;
+        }
+
+        if (str_)
+        {
+            // Some systems have wcslen in namespace std.
+            using namespace std;
+
+            str_len_ = wcslen (str_);
+        }
+        else
+        {
+            str_len_ = 0;
+        }
+
+        return str_;
+    }
+
+    static CharT decode_octal (state &state_)
+    {
+        std::size_t accumulator_ = 0;
+        CharT ch_ = *state_._curr;
+        unsigned short count_ = 3;
+        bool eos_ = false;
+
+        for (;;)
+        {
+            accumulator_ *= 8;
+            accumulator_ += ch_ - '0';
+            --count_;
+            state_.increment ();
+            eos_ = state_.eos ();
+
+            if (!count_ || eos_) break;
+
+            ch_ = *state_._curr;
+
+            // Don't consume invalid chars!
+            if (ch_ < '0' || ch_ > '7')
+            {
+                break;
+            }
+        }
+
+        return static_cast<CharT> (accumulator_);
+    }
+
+    static CharT decode_control_char (state &state_)
+    {
+        // Skip over 'c'
+        state_.increment ();
+
+        CharT ch_ = 0;
+        bool eos_ = state_.next (ch_);
+
+        if (eos_)
+        {
+            // Pointless returning index if at end of string
+            throw runtime_error ("Unexpected end of regex following \\c.");
+        }
+        else
+        {
+            if (ch_ >= 'a' && ch_ <= 'z')
+            {
+                ch_ -= 'a' - 1;
+            }
+            else if (ch_ >= 'A' && ch_ <= 'Z')
+            {
+                ch_ -= 'A' - 1;
+            }
+            else if (ch_ == '@')
+            {
+                // Apparently...
+                ch_ = 0;
+            }
+            else
+            {
+                std::ostringstream ss_;
+
+                ss_ << "Invalid control char at index " <<
+                    state_.index () - 1 << '.';
+                throw runtime_error (ss_.str ().c_str ());
+            }
+        }
+
+        return ch_;
+    }
+
+    static CharT decode_hex (state &state_)
+    {
+        // Skip over 'x'
+        state_.increment ();
+
+        CharT ch_ = 0;
+        bool eos_ = state_.next (ch_);
+
+        if (eos_)
+        {
+            // Pointless returning index if at end of string
+            throw runtime_error ("Unexpected end of regex following \\x.");
+        }
+
+        if (!((ch_ >= '0' && ch_ <= '9') || (ch_ >= 'a' && ch_ <= 'f') ||
+            (ch_ >= 'A' && ch_ <= 'F')))
+        {
+            std::ostringstream ss_;
+
+            ss_ << "Illegal char following \\x at index " <<
+                state_.index () - 1 << '.';
+            throw runtime_error (ss_.str ().c_str ());
+        }
+
+        std::size_t hex_ = 0;
+
+        do
+        {
+            hex_ *= 16;
+
+            if (ch_ >= '0' && ch_ <= '9')
+            {
+                hex_ += ch_ - '0';
+            }
+            else if (ch_ >= 'a' && ch_ <= 'f')
+            {
+                hex_ += 10 + (ch_ - 'a');
+            }
+            else
+            {
+                hex_ += 10 + (ch_ - 'A');
+            }
+
+            eos_ = state_.eos ();
+
+            if (!eos_)
+            {
+                ch_ = *state_._curr;
+
+                // Don't consume invalid chars!
+                if (((ch_ >= '0' && ch_ <= '9') ||
+                    (ch_ >= 'a' && ch_ <= 'f') || (ch_ >= 'A' && ch_ <= 'F')))
+                {
+                    state_.increment ();
+                }
+                else
+                {
+                    eos_ = true;
+                }
+            }
+        } while (!eos_);
+
+        return static_cast<CharT> (hex_);
+    }
+
+    static void charset_range (const bool chset_, state &state_, bool &eos_,
+        CharT &ch_, const CharT prev_, string &chars_)
+    {
+        if (chset_)
+        {
+            std::ostringstream ss_;
+
+            ss_ << "Charset cannot form start of range preceding "
+                "index " << state_.index () - 1 << '.';
+            throw runtime_error (ss_.str ().c_str ());
+        }
+
+        eos_ = state_.next (ch_);
+
+        if (eos_)
+        {
+            // Pointless returning index if at end of string
+            throw runtime_error ("Unexpected end of regex "
+                "following '-'.");
+        }
+
+        CharT curr_ = 0;
+
+        if (ch_ == '\\')
+        {
+            std::size_t str_len_ = 0;
+
+            if (escape_sequence (state_, curr_, str_len_))
+            {
+                std::ostringstream ss_;
+
+                ss_ << "Charset cannot form end of range preceding index "
+                    << state_.index () << '.';
+                throw runtime_error (ss_.str ().c_str ());
+            }
+        }
+/*
+        else if (ch_ == '[' && !state_.eos () && *state_._curr == ':')
+        {
+            std::ostringstream ss_;
+
+            ss_ << "POSIX char class cannot form end of range at "
+                "index " << state_.index () - 1 << '.';
+            throw runtime_error (ss_.str ().c_str ());
+        }
+*/
+        else
+        {
+            curr_ = ch_;
+        }
+
+        eos_ = state_.next (ch_);
+
+        // Covers preceding if and else
+        if (eos_)
+        {
+            // Pointless returning index if at end of string
+            throw runtime_error ("Unexpected end of regex "
+                "(missing ']').");
+        }
+
+        std::size_t start_ = static_cast<typename Traits::index_type> (prev_);
+        std::size_t end_ = static_cast<typename Traits::index_type> (curr_);
+
+        // Semanic check
+        if (end_ < start_)
+        {
+            std::ostringstream ss_;
+
+            ss_ << "Invalid range in charset preceding index " <<
+                state_.index () - 1 << '.';
+            throw runtime_error (ss_.str ().c_str ());
+        }
+
+        chars_.reserve (chars_.size () + (end_ + 1 - start_));
+
+        for (; start_ <= end_; ++start_)
+        {
+            CharT ch_ = static_cast<CharT> (start_);
+
+            if ((state_._flags & icase) &&
+                (std::isupper (ch_, state_._locale) ||
+                std::islower (ch_, state_._locale)))
+            {
+                CharT upper_ = std::toupper (ch_, state_._locale);
+                CharT lower_ = std::tolower (ch_, state_._locale);
+
+                chars_ += (upper_);
+                chars_ += (lower_);
+            }
+            else
+            {
+                chars_ += (ch_);
+            }
+        }
+    }
+};
+}
+}
+}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/parser/tokeniser/re_tokeniser_state.hpp b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/parser/tokeniser/re_tokeniser_state.hpp
new file mode 100644
index 0000000..35995ad
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/parser/tokeniser/re_tokeniser_state.hpp
@@ -0,0 +1,98 @@
+// tokeniser_state.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_RE_TOKENISER_STATE_HPP
+#define BOOST_LEXER_RE_TOKENISER_STATE_HPP
+
+#include "../../consts.hpp"
+#include <locale>
+#include "../../size_t.hpp"
+#include <stack>
+
+namespace boost
+{
+namespace lexer
+{
+namespace detail
+{
+template<typename CharT>
+struct basic_re_tokeniser_state
+{
+    const CharT * const _start;
+    const CharT * const _end;
+    const CharT *_curr;
+    regex_flags _flags;
+    std::stack<regex_flags> _flags_stack;
+    std::locale _locale;
+    long _paren_count;
+    bool _in_string;
+    bool _seen_BOL_assertion;
+    bool _seen_EOL_assertion;
+
+    basic_re_tokeniser_state (const CharT *start_, const CharT * const end_,
+        const regex_flags flags_, const std::locale locale_) :
+        _start (start_),
+        _end (end_),
+        _curr (start_),
+        _flags (flags_),
+        _locale (locale_),
+        _paren_count (0),
+        _in_string (false),
+        _seen_BOL_assertion (false),
+        _seen_EOL_assertion (false)
+    {
+    }
+
+    // prevent VC++ 7.1 warning:
+    const basic_re_tokeniser_state &operator =
+        (const basic_re_tokeniser_state &rhs_)
+    {
+        _start = rhs_._start;
+        _end = rhs_._end;
+        _curr = rhs_._curr;
+        _flags = rhs_._flags;
+        _locale = rhs_._locale;
+        _paren_count = rhs_._paren_count;
+        _in_string = rhs_._in_string;
+        _seen_BOL_assertion = rhs_._seen_BOL_assertion;
+        _seen_EOL_assertion = rhs_._seen_EOL_assertion;
+        return this;
+    }
+
+    inline bool next (CharT &ch_)
+    {
+        if (_curr >= _end)
+        {
+            ch_ = 0;
+            return true;
+        }
+        else
+        {
+            ch_ = *_curr;
+            increment ();
+            return false;
+        }
+    }
+
+    inline void increment ()
+    {
+        ++_curr;
+    }
+
+    inline std::size_t index ()
+    {
+        return _curr - _start;
+    }
+
+    inline bool eos ()
+    {
+        return _curr >= _end;
+    }
+};
+}
+}
+}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/parser/tree/end_node.hpp b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/parser/tree/end_node.hpp
new file mode 100644
index 0000000..c613e6a
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/parser/tree/end_node.hpp
@@ -0,0 +1,90 @@
+// end_node.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_END_NODE_HPP
+#define BOOST_LEXER_END_NODE_HPP
+
+#include "node.hpp"
+#include "../../size_t.hpp"
+
+namespace boost
+{
+namespace lexer
+{
+namespace detail
+{
+class end_node : public node
+{
+public:
+    end_node (const std::size_t id_, const std::size_t unique_id_,
+        const std::size_t lexer_state_) :
+        node (false),
+        _id (id_),
+        _unique_id (unique_id_),
+        _lexer_state (lexer_state_)
+    {
+        node::_firstpos.push_back (this);
+        node::_lastpos.push_back (this);
+    }
+
+    virtual ~end_node ()
+    {
+    }
+
+    virtual type what_type () const
+    {
+        return END;
+    }
+
+    virtual bool traverse (const_node_stack &/*node_stack_*/,
+        bool_stack &/*perform_op_stack_*/) const
+    {
+        return false;
+    }
+
+    virtual const node_vector &followpos () const
+    {
+        // _followpos is always empty..!
+        return _followpos;
+    }
+
+    virtual bool end_state () const
+    {
+        return true;
+    }
+
+    virtual std::size_t id () const
+    {
+        return _id;
+    }
+
+    virtual std::size_t unique_id () const
+    {
+        return _unique_id;
+    }
+
+    virtual std::size_t lexer_state () const
+    {
+        return _lexer_state;
+    }
+
+private:
+    std::size_t _id;
+    std::size_t _unique_id;
+    std::size_t _lexer_state;
+    node_vector _followpos;
+
+    virtual void copy_node (node_ptr_vector &/*node_ptr_vector_*/,
+        node_stack &/*new_node_stack_*/, bool_stack &/*perform_op_stack_*/,
+        bool &/*down_*/) const
+    {
+        // Nothing to do, as end_nodes are not copied.
+    }
+};
+}
+}
+}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/parser/tree/iteration_node.hpp b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/parser/tree/iteration_node.hpp
new file mode 100644
index 0000000..6b39462
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/parser/tree/iteration_node.hpp
@@ -0,0 +1,90 @@
+// iteration_node.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_ITERATION_NODE_HPP
+#define BOOST_LEXER_ITERATION_NODE_HPP
+
+#include "node.hpp"
+
+namespace boost
+{
+namespace lexer
+{
+namespace detail
+{
+class iteration_node : public node
+{
+public:
+    iteration_node (node *next_, const bool greedy_) :
+        node (true),
+        _next (next_),
+        _greedy (greedy_)
+    {
+        node_vector::iterator iter_;
+        node_vector::iterator end_;
+
+        _next->append_firstpos (_firstpos);
+        _next->append_lastpos (_lastpos);
+
+        for (iter_ = _lastpos.begin (), end_ = _lastpos.end ();
+            iter_ != end_; ++iter_)
+        {
+            (*iter_)->append_followpos (_firstpos);
+        }
+
+        for (iter_ = _firstpos.begin (), end_ = _firstpos.end ();
+            iter_ != end_; ++iter_)
+        {
+            (*iter_)->greedy (greedy_);
+        }
+    }
+
+    virtual ~iteration_node ()
+    {
+    }
+
+    virtual type what_type () const
+    {
+        return ITERATION;
+    }
+
+    virtual bool traverse (const_node_stack &node_stack_,
+        bool_stack &perform_op_stack_) const
+    {
+        perform_op_stack_.push (true);
+        node_stack_.push (_next);
+        return true;
+    }
+
+private:
+    // Not owner of this pointer...
+    node *_next;
+    bool _greedy;
+
+    virtual void copy_node (node_ptr_vector &node_ptr_vector_,
+        node_stack &new_node_stack_, bool_stack &perform_op_stack_,
+        bool &down_) const
+    {
+        if (perform_op_stack_.top ())
+        {
+            node *ptr_ = new_node_stack_.top ();
+
+            node_ptr_vector_->push_back (static_cast<iteration_node *>(0));
+            node_ptr_vector_->back () = new iteration_node (ptr_, _greedy);
+            new_node_stack_.top () = node_ptr_vector_->back ();
+        }
+        else
+        {
+            down_ = true;
+        }
+
+        perform_op_stack_.pop ();
+    }
+};
+}
+}
+}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/parser/tree/leaf_node.hpp b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/parser/tree/leaf_node.hpp
new file mode 100644
index 0000000..39ed98d
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/parser/tree/leaf_node.hpp
@@ -0,0 +1,107 @@
+// leaf_node.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_LEAF_NODE_HPP
+#define BOOST_LEXER_LEAF_NODE_HPP
+
+#include "../../consts.hpp" // null_token
+#include "node.hpp"
+#include "../../size_t.hpp"
+
+namespace boost
+{
+namespace lexer
+{
+namespace detail
+{
+class leaf_node : public node
+{
+public:
+    leaf_node (const std::size_t token_, const bool greedy_) :
+        node (token_ == null_token),
+        _token (token_),
+        _set_greedy (!greedy_),
+        _greedy (greedy_)
+    {
+        if (!_nullable)
+        {
+            _firstpos.push_back (this);
+            _lastpos.push_back (this);
+        }
+    }
+
+    virtual ~leaf_node ()
+    {
+    }
+
+    virtual void append_followpos (const node_vector &followpos_)
+    {
+        for (node_vector::const_iterator iter_ = followpos_.begin (),
+            end_ = followpos_.end (); iter_ != end_; ++iter_)
+        {
+            _followpos.push_back (*iter_);
+        }
+    }
+
+    virtual type what_type () const
+    {
+        return LEAF;
+    }
+
+    virtual bool traverse (const_node_stack &/*node_stack_*/,
+        bool_stack &/*perform_op_stack_*/) const
+    {
+        return false;
+    }
+
+    virtual std::size_t token () const
+    {
+        return _token;
+    }
+
+    virtual void greedy (const bool greedy_)
+    {
+        if (!_set_greedy)
+        {
+            _greedy = greedy_;
+            _set_greedy = true;
+        }
+    }
+
+    virtual bool greedy () const
+    {
+        return _greedy;
+    }
+
+    virtual const node_vector &followpos () const
+    {
+        return _followpos;
+    }
+
+    virtual node_vector &followpos ()
+    {
+        return _followpos;
+    }
+
+private:
+    std::size_t _token;
+    bool _set_greedy;
+    bool _greedy;
+    node_vector _followpos;
+
+    virtual void copy_node (node_ptr_vector &node_ptr_vector_,
+        node_stack &new_node_stack_, bool_stack &/*perform_op_stack_*/,
+        bool &/*down_*/) const
+    {
+        node_ptr_vector_->push_back (static_cast<leaf_node *>(0));
+        node_ptr_vector_->back () = new leaf_node (_token, _greedy);
+        new_node_stack_.push (node_ptr_vector_->back ());
+    }
+};
+}
+}
+}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/parser/tree/node.hpp b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/parser/tree/node.hpp
new file mode 100644
index 0000000..1e36ccb
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/parser/tree/node.hpp
@@ -0,0 +1,188 @@
+// node.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_NODE_HPP
+#define BOOST_LEXER_NODE_HPP
+
+#include <boost/assert.hpp>
+#include "../../containers/ptr_vector.hpp"
+#include "../../runtime_error.hpp"
+#include "../../size_t.hpp"
+#include <stack>
+#include <vector>
+
+namespace boost
+{
+namespace lexer
+{
+namespace detail
+{
+class node
+{
+public:
+    enum type {LEAF, SEQUENCE, SELECTION, ITERATION, END};
+
+    typedef std::stack<bool> bool_stack;
+    typedef std::stack<node *> node_stack;
+    // stack and vector not owner of node pointers
+    typedef std::stack<const node *> const_node_stack;
+    typedef std::vector<node *> node_vector;
+    typedef ptr_vector<node> node_ptr_vector;
+
+    node () :
+        _nullable (false)
+    {
+    }
+
+    node (const bool nullable_) :
+        _nullable (nullable_)
+    {
+    }
+
+    virtual ~node ()
+    {
+    }
+
+    bool nullable () const
+    {
+        return _nullable;
+    }
+
+    void append_firstpos (node_vector &firstpos_) const
+    {
+        firstpos_.insert (firstpos_.end (),
+            _firstpos.begin (), _firstpos.end ());
+    }
+
+    void append_lastpos (node_vector &lastpos_) const
+    {
+        lastpos_.insert (lastpos_.end (),
+            _lastpos.begin (), _lastpos.end ());
+    }
+
+    virtual void append_followpos (const node_vector &/*followpos_*/)
+    {
+        throw runtime_error ("Internal error node::append_followpos()");
+    }
+
+    node *copy (node_ptr_vector &node_ptr_vector_) const
+    {
+        node *new_root_ = 0;
+        const_node_stack node_stack_;
+        bool_stack perform_op_stack_;
+        bool down_ = true;
+        node_stack new_node_stack_;
+
+        node_stack_.push (this);
+
+        while (!node_stack_.empty ())
+        {
+            while (down_)
+            {
+                down_ = node_stack_.top ()->traverse (node_stack_,
+                    perform_op_stack_);
+            }
+
+            while (!down_ && !node_stack_.empty ())
+            {
+                const node *top_ = node_stack_.top ();
+
+                top_->copy_node (node_ptr_vector_, new_node_stack_,
+                    perform_op_stack_, down_);
+
+                if (!down_) node_stack_.pop ();
+            }
+        }
+
+        BOOST_ASSERT(new_node_stack_.size () == 1);
+        new_root_ = new_node_stack_.top ();
+        new_node_stack_.pop ();
+        return new_root_;
+    }
+
+    virtual type what_type () const = 0;
+
+    virtual bool traverse (const_node_stack &node_stack_,
+        bool_stack &perform_op_stack_) const = 0;
+
+    node_vector &firstpos ()
+    {
+        return _firstpos;
+    }
+
+    const node_vector &firstpos () const
+    {
+        return _firstpos;
+    }
+
+    // _lastpos modified externally, so not const &
+    node_vector &lastpos ()
+    {
+        return _lastpos;
+    }
+
+    virtual bool end_state () const
+    {
+        return false;
+    }
+
+    virtual std::size_t id () const
+    {
+        throw runtime_error ("Internal error node::id()");
+    }
+
+    virtual std::size_t unique_id () const
+    {
+        throw runtime_error ("Internal error node::unique_id()");
+    }
+
+    virtual std::size_t lexer_state () const
+    {
+        throw runtime_error ("Internal error node::state()");
+    }
+
+    virtual std::size_t token () const
+    {
+        throw runtime_error ("Internal error node::token()");
+    }
+
+    virtual void greedy (const bool /*greedy_*/)
+    {
+        throw runtime_error ("Internal error node::token(bool)");
+    }
+
+    virtual bool greedy () const
+    {
+        throw runtime_error ("Internal error node::token()");
+    }
+
+    virtual const node_vector &followpos () const
+    {
+        throw runtime_error ("Internal error node::followpos()");
+    }
+
+    virtual node_vector &followpos ()
+    {
+        throw runtime_error ("Internal error node::followpos()");
+    }
+
+protected:
+    const bool _nullable;
+    node_vector _firstpos;
+    node_vector _lastpos;
+
+    virtual void copy_node (node_ptr_vector &node_ptr_vector_,
+        node_stack &new_node_stack_, bool_stack &perform_op_stack_,
+        bool &down_) const = 0;
+
+private:
+    node (node const &); // No copy construction.
+    node &operator = (node const &); // No assignment.
+};
+}
+}
+}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/parser/tree/selection_node.hpp b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/parser/tree/selection_node.hpp
new file mode 100644
index 0000000..67e5ea0
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/parser/tree/selection_node.hpp
@@ -0,0 +1,94 @@
+// selection_node.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_SELECTION_NODE_HPP
+#define BOOST_LEXER_SELECTION_NODE_HPP
+
+#include "node.hpp"
+
+namespace boost
+{
+namespace lexer
+{
+namespace detail
+{
+class selection_node : public node
+{
+public:
+    selection_node (node *left_, node *right_) :
+        node (left_->nullable () || right_->nullable ()),
+        _left (left_),
+        _right (right_)
+    {
+        _left->append_firstpos (_firstpos);
+        _right->append_firstpos (_firstpos);
+        _left->append_lastpos (_lastpos);
+        _right->append_lastpos (_lastpos);
+    }
+
+    virtual ~selection_node ()
+    {
+    }
+
+    virtual type what_type () const
+    {
+        return SELECTION;
+    }
+
+    virtual bool traverse (const_node_stack &node_stack_,
+        bool_stack &perform_op_stack_) const
+    {
+        perform_op_stack_.push (true);
+
+        switch (_right->what_type ())
+        {
+        case SEQUENCE:
+        case SELECTION:
+        case ITERATION:
+            perform_op_stack_.push (false);
+            break;
+        default:
+            break;
+        }
+
+        node_stack_.push (_right);
+        node_stack_.push (_left);
+        return true;
+    }
+
+private:
+    // Not owner of these pointers...
+    node *_left;
+    node *_right;
+
+    virtual void copy_node (node_ptr_vector &node_ptr_vector_,
+        node_stack &new_node_stack_, bool_stack &perform_op_stack_,
+        bool &down_) const
+    {
+        if (perform_op_stack_.top ())
+        {
+            node *rhs_ = new_node_stack_.top ();
+
+            new_node_stack_.pop ();
+
+            node *lhs_ = new_node_stack_.top ();
+
+            node_ptr_vector_->push_back (static_cast<selection_node *>(0));
+            node_ptr_vector_->back () = new selection_node (lhs_, rhs_);
+            new_node_stack_.top () = node_ptr_vector_->back ();
+        }
+        else
+        {
+            down_ = true;
+        }
+
+        perform_op_stack_.pop ();
+    }
+};
+}
+}
+}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/parser/tree/sequence_node.hpp b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/parser/tree/sequence_node.hpp
new file mode 100644
index 0000000..471fa68
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/parser/tree/sequence_node.hpp
@@ -0,0 +1,112 @@
+// sequence_node.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_SEQUENCE_NODE_HPP
+#define BOOST_LEXER_SEQUENCE_NODE_HPP
+
+#include "node.hpp"
+
+namespace boost
+{
+namespace lexer
+{
+namespace detail
+{
+class sequence_node : public node
+{
+public:
+    sequence_node (node *left_, node *right_) :
+        node (left_->nullable () && right_->nullable ()),
+        _left (left_),
+        _right (right_)
+    {
+        _left->append_firstpos (_firstpos);
+
+        if (_left->nullable ())
+        {
+            _right->append_firstpos (_firstpos);
+        }
+
+        if (_right->nullable ())
+        {
+            _left->append_lastpos (_lastpos);
+        }
+
+        _right->append_lastpos (_lastpos);
+
+        node_vector &lastpos_ = _left->lastpos ();
+        const node_vector &firstpos_ = _right->firstpos ();
+
+        for (node_vector::iterator iter_ = lastpos_.begin (),
+            end_ = lastpos_.end (); iter_ != end_; ++iter_)
+        {
+            (*iter_)->append_followpos (firstpos_);
+        }
+    }
+
+    virtual ~sequence_node ()
+    {
+    }
+
+    virtual type what_type () const
+    {
+        return SEQUENCE;
+    }
+
+    virtual bool traverse (const_node_stack &node_stack_,
+        bool_stack &perform_op_stack_) const
+    {
+        perform_op_stack_.push (true);
+
+        switch (_right->what_type ())
+        {
+        case SEQUENCE:
+        case SELECTION:
+        case ITERATION:
+            perform_op_stack_.push (false);
+            break;
+        default:
+            break;
+        }
+
+        node_stack_.push (_right);
+        node_stack_.push (_left);
+        return true;
+    }
+
+private:
+    // Not owner of these pointers...
+    node *_left;
+    node *_right;
+
+    virtual void copy_node (node_ptr_vector &node_ptr_vector_,
+        node_stack &new_node_stack_, bool_stack &perform_op_stack_,
+        bool &down_) const
+    {
+        if (perform_op_stack_.top ())
+        {
+            node *rhs_ = new_node_stack_.top ();
+
+            new_node_stack_.pop ();
+
+            node *lhs_ = new_node_stack_.top ();
+
+            node_ptr_vector_->push_back (static_cast<sequence_node *>(0));
+            node_ptr_vector_->back () = new sequence_node (lhs_, rhs_);
+            new_node_stack_.top () = node_ptr_vector_->back ();
+        }
+        else
+        {
+            down_ = true;
+        }
+
+        perform_op_stack_.pop ();
+    }
+};
+}
+}
+}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/partition/charset.hpp b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/partition/charset.hpp
new file mode 100644
index 0000000..c74dd36
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/partition/charset.hpp
@@ -0,0 +1,81 @@
+// charset.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_CHARSET_HPP
+#define BOOST_LEXER_CHARSET_HPP
+
+#include <set>
+#include "../size_t.hpp"
+#include "../string_token.hpp"
+
+namespace boost
+{
+namespace lexer
+{
+namespace detail
+{
+template<typename CharT>
+struct basic_charset
+{
+    typedef basic_string_token<CharT> token;
+    typedef std::set<std::size_t> index_set;
+
+    token _token;
+    index_set _index_set;
+
+    basic_charset ()
+    {
+    }
+
+    basic_charset (const token &token_, const std::size_t index_) :
+        _token (token_)
+    {
+        _index_set.insert (index_);
+    }
+
+    bool empty () const
+    {
+        return _token.empty () && _index_set.empty ();
+    }
+
+    void intersect (basic_charset &rhs_, basic_charset &overlap_)
+    {
+        _token.intersect (rhs_._token, overlap_._token);
+
+        if (!overlap_._token.empty ())
+        {
+            typename index_set::const_iterator iter_ = _index_set.begin ();
+            typename index_set::const_iterator end_ = _index_set.end ();
+
+            for (; iter_ != end_; ++iter_)
+            {
+                overlap_._index_set.insert (*iter_);
+            }
+
+            iter_ = rhs_._index_set.begin ();
+            end_ = rhs_._index_set.end ();
+
+            for (; iter_ != end_; ++iter_)
+            {
+                overlap_._index_set.insert (*iter_);
+            }
+
+            if (_token.empty ())
+            {
+                _index_set.clear ();
+            }
+
+            if (rhs_._token.empty ())
+            {
+                rhs_._index_set.clear ();
+            }
+        }
+    }
+};
+}
+}
+}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/partition/equivset.hpp b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/partition/equivset.hpp
new file mode 100644
index 0000000..b39fb15
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/partition/equivset.hpp
@@ -0,0 +1,140 @@
+// equivset.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_EQUIVSET_HPP
+#define BOOST_LEXER_EQUIVSET_HPP
+
+#include <algorithm>
+#include "../parser/tree/node.hpp"
+#include <set>
+#include "../size_t.hpp"
+
+namespace boost
+{
+namespace lexer
+{
+namespace detail
+{
+struct equivset
+{
+    typedef std::set<std::size_t> index_set;
+    typedef std::vector<std::size_t> index_vector;
+    // Not owner of nodes:
+    typedef std::vector<node *> node_vector;
+
+    index_vector _index_vector;
+    bool _greedy;
+    std::size_t _id;
+    node_vector _followpos;
+
+    equivset () :
+        _greedy (true),
+        _id (0)
+    {
+    }
+
+    equivset (const index_set &index_set_, const bool greedy_,
+        const std::size_t id_, const node_vector &followpos_) :
+        _greedy (greedy_),
+        _id (id_),
+        _followpos (followpos_)
+    {
+        index_set::const_iterator iter_ = index_set_.begin ();
+        index_set::const_iterator end_ = index_set_.end ();
+
+        for (; iter_ != end_; ++iter_)
+        {
+            _index_vector.push_back (*iter_);
+        }
+    }
+
+    bool empty () const
+    {
+        return _index_vector.empty () && _followpos.empty ();
+    }
+
+    void intersect (equivset &rhs_, equivset &overlap_)
+    {
+        intersect_indexes (rhs_._index_vector, overlap_._index_vector);
+
+        if (!overlap_._index_vector.empty ())
+        {
+            // Note that the LHS takes priority in order to
+            // respect rule ordering priority in the lex spec.
+            overlap_._id = _id;
+            overlap_._greedy = _greedy;
+            overlap_._followpos = _followpos;
+
+            node_vector::const_iterator overlap_begin_ =
+                overlap_._followpos.begin ();
+            node_vector::const_iterator overlap_end_ =
+                overlap_._followpos.end ();
+            node_vector::const_iterator rhs_iter_ =
+                rhs_._followpos.begin ();
+            node_vector::const_iterator rhs_end_ =
+                rhs_._followpos.end ();
+
+            for (; rhs_iter_ != rhs_end_; ++rhs_iter_)
+            {
+                node *node_ = *rhs_iter_;
+
+                if (std::find (overlap_begin_, overlap_end_, node_) ==
+                    overlap_end_)
+                {
+                    overlap_._followpos.push_back (node_);
+                    overlap_begin_ = overlap_._followpos.begin ();
+                    overlap_end_ = overlap_._followpos.end ();
+                }
+            }
+
+            if (_index_vector.empty ())
+            {
+                _followpos.clear ();
+            }
+
+            if (rhs_._index_vector.empty ())
+            {
+                rhs_._followpos.clear ();
+            }
+        }
+    }
+
+private:
+    void intersect_indexes (index_vector &rhs_, index_vector &overlap_)
+    {
+        index_vector::iterator iter_ = _index_vector.begin ();
+        index_vector::iterator end_ = _index_vector.end ();
+        index_vector::iterator rhs_iter_ = rhs_.begin ();
+        index_vector::iterator rhs_end_ = rhs_.end ();
+
+        while (iter_ != end_ && rhs_iter_ != rhs_end_)
+        {
+            const std::size_t index_ = *iter_;
+            const std::size_t rhs_index_ = *rhs_iter_;
+
+            if (index_ < rhs_index_)
+            {
+                ++iter_;
+            }
+            else if (index_ > rhs_index_)
+            {
+                ++rhs_iter_;
+            }
+            else
+            {
+                overlap_.push_back (index_);
+                iter_ = _index_vector.erase (iter_);
+                end_ = _index_vector.end ();
+                rhs_iter_ = rhs_.erase (rhs_iter_);
+                rhs_end_ = rhs_.end ();
+            }
+        }
+    }
+};
+}
+}
+}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/rules.hpp b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/rules.hpp
new file mode 100644
index 0000000..730af74
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/rules.hpp
@@ -0,0 +1,786 @@
+// rules.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_RULES_HPP
+#define BOOST_LEXER_RULES_HPP
+
+#include "consts.hpp"
+#include <deque>
+#include <locale>
+#include <map>
+#include "runtime_error.hpp"
+#include <set>
+#include "size_t.hpp"
+#include <sstream>
+#include <string>
+#include <vector>
+
+namespace boost
+{
+namespace lexer
+{
+namespace detail
+{
+    // return name of initial state
+    template <typename CharT>
+    struct strings;
+
+    template <>
+    struct strings<char>
+    {
+        static const char *initial ()
+        {
+            return "INITIAL";
+        }
+
+        static const char *dot ()
+        {
+            return ".";
+        }
+
+        static const char *all_states ()
+        {
+            return "*";
+        }
+    };
+
+    template <>
+    struct strings<wchar_t>
+    {
+        static const wchar_t *initial ()
+        {
+            return L"INITIAL";
+        }
+
+        static const wchar_t *dot ()
+        {
+            return L".";
+        }
+
+        static const wchar_t *all_states ()
+        {
+            return L"*";
+        }
+    };
+}
+
+template<typename CharT>
+class basic_rules
+{
+public:
+    typedef std::vector<std::size_t> id_vector;
+    typedef std::deque<id_vector> id_vector_deque;
+    typedef std::basic_string<CharT> string;
+    typedef std::deque<string> string_deque;
+    typedef std::deque<string_deque> string_deque_deque;
+    typedef std::set<string> string_set;
+    typedef std::pair<string, string> string_pair;
+    typedef std::deque<string_pair> string_pair_deque;
+    typedef std::map<string, std::size_t> string_size_t_map;
+    typedef std::pair<string, std::size_t> string_size_t_pair;
+
+    basic_rules (const regex_flags flags_ = dot_not_newline,
+        std::size_t (*counter_ptr_) () = 0) :
+        _flags (flags_),
+        _counter (0),
+        _counter_ptr (counter_ptr_)
+    {
+        add_state (initial ());
+    }
+
+    void clear ()
+    {
+        _statemap.clear ();
+        _macrodeque.clear ();
+        _macroset.clear ();
+        _regexes.clear ();
+        _ids.clear ();
+        _unique_ids.clear ();
+        _states.clear ();
+        _flags = dot_not_newline;
+        _locale = std::locale ();
+        add_state (initial ());
+    }
+
+    void clear (const CharT *state_name_)
+    {
+        std::size_t state_ = state (state_name_);
+
+        if (state_ != npos)
+        {
+            _regexes[state_].clear ();
+            _ids[state_].clear ();
+            _unique_ids[state_].clear ();
+            _states[state_].clear ();
+        }
+    }
+
+    void flags (const regex_flags flags_)
+    {
+        _flags = flags_;
+    }
+
+    regex_flags flags () const
+    {
+        return _flags;
+    }
+
+    std::size_t next_unique_id ()
+    {
+        return _counter_ptr ? _counter_ptr () : _counter++;
+    }
+
+    std::locale imbue (std::locale &locale_)
+    {
+        std::locale loc_ = _locale;
+
+        _locale = locale_;
+        return loc_;
+    }
+
+    const std::locale &locale () const
+    {
+        return _locale;
+    }
+
+    std::size_t state (const CharT *name_) const
+    {
+        std::size_t state_ = npos;
+        typename string_size_t_map::const_iterator iter_ =
+            _statemap.find (name_);
+
+        if (iter_ != _statemap.end ())
+        {
+            state_ = iter_->second;
+        }
+
+        return state_;
+    }
+
+    const CharT *state (const std::size_t index_) const
+    {
+        if (index_ == 0)
+        {
+            return initial ();
+        }
+        else
+        {
+            const std::size_t vec_index_ = index_ - 1;
+
+            if (vec_index_ > _lexer_state_names.size () - 1)
+            {
+                return 0;
+            }
+            else
+            {
+                return _lexer_state_names[vec_index_].c_str ();
+            }
+        }
+    }
+
+    std::size_t add_state (const CharT *name_)
+    {
+        validate (name_);
+
+        if (_statemap.insert (string_size_t_pair (name_,
+            _statemap.size ())).second)
+        {
+            _regexes.push_back (string_deque ());
+            _ids.push_back (id_vector ());
+            _unique_ids.push_back (id_vector ());
+            _states.push_back (id_vector ());
+
+            if (string (name_) != initial ())
+            {
+                _lexer_state_names.push_back (name_);
+            }
+        }
+
+        // Initial is not stored, so no need to - 1.
+        return _lexer_state_names.size ();
+    }
+
+    void add_macro (const CharT *name_, const CharT *regex_)
+    {
+        add_macro (name_, string (regex_));
+    }
+
+    void add_macro (const CharT *name_, const CharT *regex_start_,
+        const CharT *regex_end_)
+    {
+        add_macro (name_, string (regex_start_, regex_end_));
+    }
+
+    void add_macro (const CharT *name_, const string &regex_)
+    {
+        validate (name_);
+
+        typename string_set::const_iterator iter_ = _macroset.find (name_);
+
+        if (iter_ == _macroset.end ())
+        {
+            _macrodeque.push_back (string_pair (name_, regex_));
+            _macroset.insert (name_);
+        }
+        else
+        {
+            std::basic_stringstream<CharT> ss_;
+            std::ostringstream os_;
+
+            os_ << "Attempt to redefine MACRO '";
+
+            while (*name_)
+            {
+                os_ << ss_.narrow (*name_++, static_cast<CharT> (' '));
+            }
+
+            os_ << "'.";
+            throw runtime_error (os_.str ());
+        }
+    }
+
+    void add_macros (const basic_rules<CharT> &rules_)
+    {
+        const string_pair_deque &macros_ = rules_.macrodeque ();
+        typename string_pair_deque::const_iterator macro_iter_ =
+            macros_.begin ();
+        typename string_pair_deque::const_iterator macro_end_ =
+            macros_.end ();
+
+        for (; macro_iter_ != macro_end_; ++macro_iter_)
+        {
+            add_macro (macro_iter_->first.c_str (),
+                macro_iter_->second.c_str ());
+        }
+    }
+
+    void merge_macros (const basic_rules<CharT> &rules_)
+    {
+        const string_pair_deque &macros_ = rules_.macrodeque ();
+        typename string_pair_deque::const_iterator macro_iter_ =
+            macros_.begin ();
+        typename string_pair_deque::const_iterator macro_end_ =
+            macros_.end ();
+        typename string_set::const_iterator macro_dest_iter_;
+        typename string_set::const_iterator macro_dest_end_ = _macroset.end ();
+
+        for (; macro_iter_ != macro_end_; ++macro_iter_)
+        {
+            macro_dest_iter_ = _macroset.find (macro_iter_->first);
+
+            if (macro_dest_iter_ == macro_dest_end_)
+            {
+                add_macro (macro_iter_->first.c_str (),
+                    macro_iter_->second.c_str ());
+            }
+        }
+    }
+
+    std::size_t add (const CharT *regex_, const std::size_t id_)
+    {
+        return add (string (regex_), id_);
+    }
+
+    std::size_t add (const CharT *regex_start_, const CharT *regex_end_,
+        const std::size_t id_)
+    {
+        return add (string (regex_start_, regex_end_), id_);
+    }
+
+    std::size_t add (const string &regex_, const std::size_t id_)
+    {
+        const std::size_t counter_ = next_unique_id ();
+
+        check_for_invalid_id (id_);
+        _regexes.front ().push_back (regex_);
+        _ids.front ().push_back (id_);
+        _unique_ids.front ().push_back (counter_);
+        _states.front ().push_back (0);
+        return counter_;
+    }
+
+    std::size_t add (const CharT *curr_state_, const CharT *regex_,
+        const CharT *new_state_)
+    {
+        return add (curr_state_, string (regex_), new_state_);
+    }
+
+    std::size_t add (const CharT *curr_state_, const CharT *regex_start_,
+        const CharT *regex_end_, const CharT *new_state_)
+    {
+        return add (curr_state_, string (regex_start_, regex_end_),
+            new_state_);
+    }
+
+    std::size_t add (const CharT *curr_state_, const string &regex_,
+        const CharT *new_state_)
+    {
+        return add (curr_state_, regex_, 0, new_state_, false);
+    }
+
+    std::size_t add (const CharT *curr_state_, const CharT *regex_,
+        const std::size_t id_, const CharT *new_state_)
+    {
+        return add (curr_state_, string (regex_), id_, new_state_);
+    }
+
+    std::size_t add (const CharT *curr_state_, const CharT *regex_start_,
+        const CharT *regex_end_, const std::size_t id_,
+        const CharT *new_state_)
+    {
+        return add (curr_state_, string (regex_start_, regex_end_), id_,
+            new_state_);
+    }
+
+    std::size_t add (const CharT *curr_state_, const string &regex_,
+        const std::size_t id_, const CharT *new_state_)
+    {
+        return add (curr_state_, regex_, id_, new_state_, true);
+    }
+
+    void add (const CharT *source_, const basic_rules<CharT> &rules_,
+        const CharT *dest_, const CharT *to_ = detail::strings<CharT>::dot ())
+    {
+        const bool star_ = *source_ == '*' && *(source_ + 1) == 0;
+        const bool dest_dot_ = *dest_ == '.' && *(dest_ + 1) == 0;
+        const bool to_dot_ = *to_ == '.' && *(to_ + 1) == 0;
+        std::size_t state_ = 0;
+        const string_deque_deque &all_regexes_ = rules_.regexes ();
+        const id_vector_deque &all_ids_ = rules_.ids ();
+        const id_vector_deque &all_unique_ids_ = rules_.unique_ids ();
+        const id_vector_deque &all_states_ = rules_.states ();
+        typename string_deque::const_iterator regex_iter_;
+        typename string_deque::const_iterator regex_end_;
+        typename id_vector::const_iterator id_iter_;
+        typename id_vector::const_iterator uid_iter_;
+        typename id_vector::const_iterator state_iter_;
+
+        if (star_)
+        {
+            typename string_deque_deque::const_iterator all_regexes_iter_ =
+                all_regexes_.begin ();
+            typename string_deque_deque::const_iterator all_regexes_end_ =
+                all_regexes_.end ();
+            typename id_vector_deque::const_iterator all_ids_iter_ =
+                all_ids_.begin ();
+            typename id_vector_deque::const_iterator all_uids_iter_ =
+                all_unique_ids_.begin ();
+            typename id_vector_deque::const_iterator all_states_iter_ =
+                all_states_.begin ();
+
+            for (; all_regexes_iter_ != all_regexes_end_;
+                ++state_, ++all_regexes_iter_, ++all_ids_iter_,
+                ++all_uids_iter_, ++all_states_iter_)
+            {
+                regex_iter_ = all_regexes_iter_->begin ();
+                regex_end_ = all_regexes_iter_->end ();
+                id_iter_ = all_ids_iter_->begin ();
+                uid_iter_ = all_uids_iter_->begin ();
+                state_iter_ = all_states_iter_->begin ();
+
+                for (; regex_iter_ != regex_end_; ++regex_iter_, ++id_iter_,
+                    ++uid_iter_, ++state_iter_)
+                {
+                    // If ..._dot_ then lookup state name from rules_; otherwise
+                    // pass name through.
+                    add (dest_dot_ ? rules_.state (state_) : dest_, *regex_iter_,
+                        *id_iter_, to_dot_ ? rules_.state (*state_iter_) : to_, true,
+                        *uid_iter_);
+                }
+            }
+        }
+        else
+        {
+            const CharT *start_ = source_;
+            string state_name_;
+
+            while (*source_)
+            {
+                while (*source_ && *source_ != ',')
+                {
+                    ++source_;
+                }
+
+                state_name_.assign (start_, source_);
+
+                if (*source_)
+                {
+                    ++source_;
+                    start_ = source_;
+                }
+
+                state_ = rules_.state (state_name_.c_str ());
+
+                if (state_ == npos)
+                {
+                    std::basic_stringstream<CharT> ss_;
+                    std::ostringstream os_;
+
+                    os_ << "Unknown state name '";
+                    source_ = state_name_.c_str ();
+
+                    while (*source_)
+                    {
+                        os_ << ss_.narrow (*source_++, ' ');
+                    }
+
+                    os_ << "'.";
+                    throw runtime_error (os_.str ());
+                }
+
+                regex_iter_ = all_regexes_[state_].begin ();
+                regex_end_ = all_regexes_[state_].end ();
+                id_iter_ = all_ids_[state_].begin ();
+                uid_iter_ = all_unique_ids_[state_].begin ();
+                state_iter_ = all_states_[state_].begin ();
+
+                for (; regex_iter_ != regex_end_; ++regex_iter_, ++id_iter_,
+                    ++uid_iter_, ++state_iter_)
+                {
+                    // If ..._dot_ then lookup state name from rules_; otherwise
+                    // pass name through.
+                    add (dest_dot_ ? state_name_.c_str () : dest_, *regex_iter_,
+                        *id_iter_, to_dot_ ? rules_.state (*state_iter_) : to_, true,
+                        *uid_iter_);
+                }
+            }
+        }
+    }
+/*
+    void add (const CharT *curr_state_, const basic_rules<CharT> &rules_)
+    {
+        const string_deque_deque &regexes_ = rules_.regexes ();
+        const id_vector_deque &ids_ = rules_.ids ();
+        const id_vector_deque &unique_ids_ = rules_.unique_ids ();
+        typename string_deque_deque::const_iterator state_regex_iter_ =
+            regexes_.begin ();
+        typename string_deque_deque::const_iterator state_regex_end_ =
+            regexes_.end ();
+        typename id_vector_deque::const_iterator state_id_iter_ =
+            ids_.begin ();
+        typename id_vector_deque::const_iterator state_uid_iter_ =
+            unique_ids_.begin ();
+        typename string_deque::const_iterator regex_iter_;
+        typename string_deque::const_iterator regex_end_;
+        typename id_vector::const_iterator id_iter_;
+        typename id_vector::const_iterator uid_iter_;
+
+        for (; state_regex_iter_ != state_regex_end_; ++state_regex_iter_)
+        {
+            regex_iter_ = state_regex_iter_->begin ();
+            regex_end_ = state_regex_iter_->end ();
+            id_iter_ = state_id_iter_->begin ();
+            uid_iter_ = state_uid_iter_->begin ();
+
+            for (; regex_iter_ != regex_end_; ++regex_iter_, ++id_iter_,
+                ++uid_iter_)
+            {
+                add (curr_state_, *regex_iter_, *id_iter_, curr_state_, true,
+                    *uid_iter_);
+            }
+        }
+    }
+*/
+    const string_size_t_map &statemap () const
+    {
+        return _statemap;
+    }
+
+    const string_pair_deque &macrodeque () const
+    {
+        return _macrodeque;
+    }
+
+    const string_deque_deque &regexes () const
+    {
+        return _regexes;
+    }
+
+    const id_vector_deque &ids () const
+    {
+        return _ids;
+    }
+
+    const id_vector_deque &unique_ids () const
+    {
+        return _unique_ids;
+    }
+
+    const id_vector_deque &states () const
+    {
+        return _states;
+    }
+
+    bool empty () const
+    {
+        typename string_deque_deque::const_iterator iter_ = _regexes.begin ();
+        typename string_deque_deque::const_iterator end_ = _regexes.end ();
+        bool empty_ = true;
+
+        for (; iter_ != end_; ++iter_)
+        {
+            if (!iter_->empty ())
+            {
+                empty_ = false;
+                break;
+            }
+        }
+
+        return empty_;
+    }
+
+    static const CharT *initial ()
+    {
+        return detail::strings<CharT>::initial ();
+    }
+
+    static const CharT *all_states ()
+    {
+        return detail::strings<CharT>::all_states ();
+    }
+
+    static const CharT *dot ()
+    {
+        return detail::strings<CharT>::dot ();
+    }
+
+private:
+    string_size_t_map _statemap;
+    string_pair_deque _macrodeque;
+    string_set _macroset;
+    string_deque_deque _regexes;
+    id_vector_deque _ids;
+    id_vector_deque _unique_ids;
+    id_vector_deque _states;
+    regex_flags _flags;
+    std::size_t _counter;
+    std::size_t (*_counter_ptr) ();
+    std::locale _locale;
+    string_deque _lexer_state_names;
+
+    std::size_t add (const CharT *curr_state_, const string &regex_,
+        const std::size_t id_, const CharT *new_state_, const bool check_,
+        const std::size_t uid_ = npos)
+    {
+        const bool star_ = *curr_state_ == '*' && *(curr_state_ + 1) == 0;
+        const bool dot_ = *new_state_ == '.' && *(new_state_ + 1) == 0;
+
+        if (check_)
+        {
+            check_for_invalid_id (id_);
+        }
+
+        if (!dot_)
+        {
+            validate (new_state_);
+        }
+
+        std::size_t new_ = string::npos;
+        typename string_size_t_map::const_iterator iter_;
+        typename string_size_t_map::const_iterator end_ = _statemap.end ();
+        id_vector states_;
+
+        if (!dot_)
+        {
+            iter_ = _statemap.find (new_state_);
+
+            if (iter_ == end_)
+            {
+                std::basic_stringstream<CharT> ss_;
+                std::ostringstream os_;
+
+                os_ << "Unknown state name '";
+
+                while (*new_state_)
+                {
+                    os_ << ss_.narrow (*new_state_++, ' ');
+                }
+
+                os_ << "'.";
+                throw runtime_error (os_.str ());
+            }
+
+            new_ = iter_->second;
+        }
+
+        if (star_)
+        {
+            const std::size_t size_ = _statemap.size ();
+
+            for (std::size_t i_ = 0; i_ < size_; ++i_)
+            {
+                states_.push_back (i_);
+            }
+        }
+        else
+        {
+            const CharT *start_ = curr_state_;
+            string state_;
+
+            while (*curr_state_)
+            {
+                while (*curr_state_ && *curr_state_ != ',')
+                {
+                    ++curr_state_;
+                }
+
+                state_.assign (start_, curr_state_);
+
+                if (*curr_state_)
+                {
+                    ++curr_state_;
+                    start_ = curr_state_;
+                }
+
+                validate (state_.c_str ());
+                iter_ = _statemap.find (state_.c_str ());
+
+                if (iter_ == end_)
+                {
+                    std::basic_stringstream<CharT> ss_;
+                    std::ostringstream os_;
+
+                    os_ << "Unknown state name '";
+                    curr_state_ = state_.c_str ();
+
+                    while (*curr_state_)
+                    {
+                        os_ << ss_.narrow (*curr_state_++, ' ');
+                    }
+
+                    os_ << "'.";
+                    throw runtime_error (os_.str ());
+                }
+
+                states_.push_back (iter_->second);
+            }
+        }
+
+        std::size_t first_counter_ = npos;
+
+        for (std::size_t i_ = 0, size_ = states_.size (); i_ < size_; ++i_)
+        {
+            const std::size_t curr_ = states_[i_];
+
+            _regexes[curr_].push_back (regex_);
+            _ids[curr_].push_back (id_);
+
+            if (uid_ == npos)
+            {
+                const std::size_t counter_ = next_unique_id ();
+
+                if (first_counter_ == npos)
+                {
+                    first_counter_ = counter_;
+                }
+
+                _unique_ids[curr_].push_back (counter_);
+            }
+            else
+            {
+                if (first_counter_ == npos)
+                {
+                    first_counter_ = uid_;
+                }
+
+                _unique_ids[curr_].push_back (uid_);
+            }
+
+            _states[curr_].push_back (dot_ ? curr_ : new_);
+        }
+
+        return first_counter_;
+    }
+
+    void validate (const CharT *name_) const
+    {
+        const CharT *start_ = name_;
+
+        if (*name_ != '_' && !(*name_ >= 'A' && *name_ <= 'Z') &&
+            !(*name_ >= 'a' && *name_ <= 'z'))
+        {
+            std::basic_stringstream<CharT> ss_;
+            std::ostringstream os_;
+
+            os_ << "Invalid name '";
+
+            while (*name_)
+            {
+                os_ << ss_.narrow (*name_++, ' ');
+            }
+
+            os_ << "'.";
+            throw runtime_error (os_.str ());
+        }
+        else if (*name_)
+        {
+            ++name_;
+        }
+
+        while (*name_)
+        {
+            if (*name_ != '_' && *name_ != '-' &&
+                !(*name_ >= 'A' && *name_ <= 'Z') &&
+                !(*name_ >= 'a' && *name_ <= 'z') &&
+                !(*name_ >= '0' && *name_ <= '9'))
+            {
+                std::basic_stringstream<CharT> ss_;
+                std::ostringstream os_;
+
+                os_ << "Invalid name '";
+                name_ = start_;
+
+                while (*name_)
+                {
+                    os_ << ss_.narrow (*name_++, ' ');
+                }
+
+                os_ << "'.";
+                throw runtime_error (os_.str ());
+            }
+
+            ++name_;
+        }
+
+        if (name_ - start_ > static_cast<std::ptrdiff_t>(max_macro_len))
+        {
+            std::basic_stringstream<CharT> ss_;
+            std::ostringstream os_;
+
+            os_ << "Name '";
+            name_ = start_;
+
+            while (*name_)
+            {
+                os_ << ss_.narrow (*name_++, ' ');
+            }
+
+            os_ << "' too long.";
+            throw runtime_error (os_.str ());
+        }
+    }
+
+    void check_for_invalid_id (const std::size_t id_) const
+    {
+        switch (id_)
+        {
+        case 0:
+            throw runtime_error ("id 0 is reserved for EOF.");
+        case npos:
+            throw runtime_error ("id npos is reserved for the "
+                "UNKNOWN token.");
+        default:
+            // OK
+            break;
+        }
+    }
+};
+
+typedef basic_rules<char> rules;
+typedef basic_rules<wchar_t> wrules;
+}
+}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/runtime_error.hpp b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/runtime_error.hpp
new file mode 100644
index 0000000..2ab716a
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/runtime_error.hpp
@@ -0,0 +1,26 @@
+// runtime_error.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_RUNTIME_ERROR_HPP
+#define BOOST_LEXER_RUNTIME_ERROR_HPP
+
+#include <stdexcept>
+
+namespace boost
+{
+namespace lexer
+{
+class runtime_error : public std::runtime_error
+{
+public:
+    runtime_error (const std::string &what_arg_) :
+        std::runtime_error (what_arg_)
+    {
+    }
+};
+}
+}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/size_t.hpp b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/size_t.hpp
new file mode 100644
index 0000000..349aa6d
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/size_t.hpp
@@ -0,0 +1,21 @@
+// size_t.h
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_SIZE_T_H
+#define BOOST_LEXER_SIZE_T_H
+
+#include <stddef.h> // ptrdiff_t
+
+#if defined _MSC_VER && _MSC_VER <= 1200
+namespace std
+{
+    using ::ptrdiff_t;
+    using ::size_t;
+}
+#else
+#include <string>
+#endif
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/state_machine.hpp b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/state_machine.hpp
new file mode 100644
index 0000000..e09e991
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/state_machine.hpp
@@ -0,0 +1,439 @@
+// state_machine.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_STATE_MACHINE_HPP
+#define BOOST_LEXER_STATE_MACHINE_HPP
+
+#include <algorithm>
+#include "conversion/char_state_machine.hpp"
+#include "consts.hpp"
+#include <deque>
+#include "internals.hpp"
+#include <map>
+#include "containers/ptr_vector.hpp"
+#include "size_t.hpp"
+#include <string>
+
+namespace boost
+{
+namespace lexer
+{
+template<typename CharT>
+class basic_state_machine
+{
+public:
+    typedef CharT char_type;
+
+    class iterator
+    {
+    public:
+#if defined _MSC_VER && _MSC_VER <= 1200
+        friend basic_state_machine;
+#else
+        friend class basic_state_machine;
+#endif
+
+        struct data
+        {
+            // Current iterator info
+            std::size_t dfa;
+            std::size_t states;
+            std::size_t state;
+            std::size_t transitions;
+            std::size_t transition;
+
+            // Current state info
+            bool end_state;
+            std::size_t id;
+            std::size_t unique_id;
+            std::size_t goto_dfa;
+            std::size_t bol_index;
+            std::size_t eol_index;
+
+            // Current transition info
+            basic_string_token<CharT> token;
+            std::size_t goto_state;
+
+            data () :
+                dfa (npos),
+                states (0),
+                state (npos),
+                transitions (0),
+                transition (npos),
+                end_state (false),
+                id (npos),
+                unique_id (npos),
+                goto_dfa (npos),
+                bol_index (npos),
+                eol_index (npos),
+                goto_state (npos)
+            {
+            }
+
+            bool operator == (const data &rhs_) const
+            {
+                return dfa == rhs_.dfa &&
+                    states == rhs_.states &&
+                    state == rhs_.state &&
+                    transitions == rhs_.transitions &&
+                    transition == rhs_.transition &&
+                    end_state == rhs_.end_state &&
+                    id == rhs_.id &&
+                    unique_id == rhs_.unique_id &&
+                    goto_dfa == rhs_.goto_dfa &&
+                    bol_index == rhs_.bol_index &&
+                    eol_index == rhs_.eol_index &&
+                    token == rhs_.token &&
+                    transition == rhs_.transition;
+            }
+        };
+
+        iterator () :
+            _sm (0),
+            _dfas (0),
+            _dfa (npos),
+            _states (0),
+            _state (npos),
+            _transitions (0),
+            _transition (npos)
+        {
+        }
+
+        bool operator == (const iterator &rhs_) const
+        {
+            return _dfas == rhs_._dfas && _dfa == rhs_._dfa &&
+                _states == rhs_._states && _state == rhs_._state &&
+                _transitions == rhs_._transitions &&
+                _transition == rhs_._transition;
+        }
+
+        bool operator != (const iterator &rhs_) const
+        {
+            return !(*this == rhs_);
+        }
+
+        data &operator * ()
+        {
+            return _data;
+        }
+
+        data *operator -> ()
+        {
+            return &_data;
+        }
+
+        // Let compiler generate operator = ().
+
+        // prefix version
+        iterator &operator ++ ()
+        {
+            next ();
+            return *this;
+        }
+
+        // postfix version
+        iterator operator ++ (int)
+        {
+            iterator iter_ = *this;
+
+            next ();
+            return iter_;
+        }
+
+        void clear ()
+        {
+            _dfas = _states = _transitions = 0;
+            _dfa = _state = _transition = npos;
+        }
+
+    private:
+        basic_state_machine *_sm;
+        data _data;
+        std::size_t _dfas;
+        std::size_t _dfa;
+        std::size_t _states;
+        std::size_t _state;
+        std::size_t _transitions;
+        std::size_t _transition;
+        typename detail::basic_char_state_machine<CharT>::state::
+            size_t_string_token_map::const_iterator _token_iter;
+        typename detail::basic_char_state_machine<CharT>::state::
+            size_t_string_token_map::const_iterator _token_end;
+
+        void next ()
+        {
+            bool reset_state_ = false;
+
+            if (_transition >= _transitions)
+            {
+                _transition = _data.transition = 0;
+                _data.state = ++_state;
+                reset_state_ = true;
+
+                if (_state >= _states)
+                {
+                    ++_dfa;
+
+                    if (_dfa >= _dfas)
+                    {
+                        clear ();
+                        reset_state_ = false;
+                    }
+                    else
+                    {
+                        _states = _data.states =
+                            _sm->_csm._sm_vector[_dfa].size ();
+                        _state = _data.state = 0;
+                    }
+                }
+            }
+            else
+            {
+                _data.transition = _transition;
+            }
+
+            if (reset_state_)
+            {
+                const typename detail::basic_char_state_machine<CharT>::
+                    state *ptr_ = &_sm->_csm._sm_vector[_dfa][_state];
+
+                _transitions = _data.transitions = ptr_->_transitions.size ();
+                _data.end_state = ptr_->_end_state;
+                _data.id = ptr_->_id;
+                _data.unique_id = ptr_->_unique_id;
+                _data.goto_dfa = ptr_->_state;
+                _data.bol_index = ptr_->_bol_index;
+                _data.eol_index = ptr_->_eol_index;
+                _token_iter = ptr_->_transitions.begin ();
+                _token_end = ptr_->_transitions.end ();
+            }
+
+            if (_token_iter != _token_end)
+            {
+                _data.token = _token_iter->second;
+                _data.goto_state = _token_iter->first;
+                ++_token_iter;
+                ++_transition;
+            }
+            else
+            {
+                _data.token.clear ();
+                _data.goto_state = npos;
+            }
+        }
+    };
+
+#if defined _MSC_VER && _MSC_VER <= 1200
+    friend iterator;
+#else
+    friend class iterator;
+#endif
+
+    basic_state_machine ()
+    {
+    }
+
+    void clear ()
+    {
+        _internals.clear ();
+        _csm.clear ();
+    }
+
+    bool empty () const
+    {
+        // Don't include _csm in this test, as irrelevant to state.
+        return _internals._lookup->empty () &&
+            _internals._dfa_alphabet.empty () &&
+            _internals._dfa->empty ();
+    }
+
+    std::size_t size () const
+    {
+        return _internals._dfa->size ();
+    }
+
+    bool operator == (const basic_state_machine &rhs_) const
+    {
+        // Don't include _csm in this test, as irrelevant to state.
+        return _internals._lookup == rhs_._internals._lookup &&
+            _internals._dfa_alphabet == rhs_._internals._dfa_alphabet &&
+            _internals._dfa == rhs_._internals._dfa &&
+            _internals._seen_BOL_assertion ==
+                rhs_._internals._seen_BOL_assertion &&
+            _internals._seen_EOL_assertion ==
+                rhs_._internals._seen_EOL_assertion;
+    }
+
+    iterator begin () const
+    {
+        iterator iter_;
+
+        iter_._sm = const_cast<basic_state_machine *>(this);
+        check_for_csm ();
+
+        if (!_csm.empty ())
+        {
+            const typename detail::basic_char_state_machine<CharT>::
+                state_vector *ptr_ = &_csm._sm_vector.front ();
+
+            iter_._dfas = _csm._sm_vector.size ();
+            iter_._states = iter_._data.states = ptr_->size ();
+            iter_._transitions = iter_._data.transitions =
+                ptr_->front ()._transitions.size ();
+            iter_._dfa = iter_._data.dfa = 0;
+            iter_._state = iter_._data.state = 0;
+            iter_._transition = 0;
+            iter_._data.end_state = ptr_->front ()._end_state;
+            iter_._data.id = ptr_->front ()._id;
+            iter_._data.unique_id = ptr_->front ()._unique_id;
+            iter_._data.goto_dfa = ptr_->front ()._state;
+            iter_._data.bol_index = ptr_->front ()._bol_index;
+            iter_._data.eol_index = ptr_->front ()._eol_index;
+            iter_._token_iter = ptr_->front ()._transitions.begin ();
+            iter_._token_end = ptr_->front ()._transitions.end ();
+
+            // Deal with case where there is only a bol or eol
+            // but no other transitions.
+            if (iter_._transitions)
+            {
+                ++iter_;
+            }
+        }
+
+        return iter_;
+    }
+
+    iterator end () const
+    {
+        iterator iter_;
+
+        iter_._sm = const_cast<basic_state_machine *>(this);
+        return iter_;
+    }
+
+    void swap (basic_state_machine &sm_)
+    {
+        _internals.swap (sm_._internals);
+        _csm.swap (sm_._csm);
+    }
+
+    const detail::internals &data () const
+    {
+        return _internals;
+    }
+
+private:
+    detail::internals _internals;
+    mutable detail::basic_char_state_machine<CharT> _csm;
+
+    void check_for_csm () const
+    {
+        if (_csm.empty ())
+        {
+            human_readable (_csm);
+        }
+    }
+
+    void human_readable (detail::basic_char_state_machine<CharT> &sm_) const
+    {
+        const std::size_t max_ = sizeof (CharT) == 1 ?
+            num_chars : num_wchar_ts;
+        const std::size_t start_states_ = _internals._dfa->size ();
+
+        sm_.clear ();
+        sm_._sm_vector.resize (start_states_);
+
+        for (std::size_t start_state_index_ = 0;
+            start_state_index_ < start_states_; ++start_state_index_)
+        {
+            const detail::internals::size_t_vector *lu_ =
+                _internals._lookup[start_state_index_];
+            const std::size_t alphabet_ =
+                _internals._dfa_alphabet[start_state_index_] - dfa_offset;
+            std::vector<std::basic_string<CharT> > chars_ (alphabet_);
+            const std::size_t states_ = _internals._dfa[start_state_index_]->
+                size () / (alphabet_ + dfa_offset);
+            const std::size_t *read_ptr_ = &_internals.
+                _dfa[start_state_index_]->front () + alphabet_ + dfa_offset;
+
+            sm_._sm_vector[start_state_index_].resize (states_ - 1);
+
+            for (std::size_t alpha_index_ = 0; alpha_index_ < max_;
+                ++alpha_index_)
+            {
+                const std::size_t col_ = lu_->at (alpha_index_);
+
+                if (col_ != dead_state_index)
+                {
+                    chars_[col_ - dfa_offset] += static_cast<CharT>
+                        (alpha_index_);
+                }
+            }
+
+            for (std::size_t state_index_ = 1; state_index_ < states_;
+                ++state_index_)
+            {
+                typename detail::basic_char_state_machine<CharT>::state
+                    *state_ = &sm_._sm_vector[start_state_index_]
+                    [state_index_ - 1];
+
+                state_->_end_state = *read_ptr_ != 0;
+                state_->_id = *(read_ptr_ + id_index);
+                state_->_unique_id = *(read_ptr_ + unique_id_index);
+                state_->_state = *(read_ptr_ + state_index);
+                state_->_bol_index = *(read_ptr_ + bol_index) - 1;
+                state_->_eol_index = *(read_ptr_ + eol_index) - 1;
+                read_ptr_ += dfa_offset;
+
+                for (std::size_t col_index_ = 0; col_index_ < alphabet_;
+                    ++col_index_, ++read_ptr_)
+                {
+                    const std::size_t transition_ = *read_ptr_;
+
+                    if (transition_ != 0)
+                    {
+                        const std::size_t i_ = transition_ - 1;
+                        typename detail::basic_char_state_machine<CharT>::
+                            state::size_t_string_token_map::iterator iter_ =
+                            state_->_transitions.find (i_);
+
+                        if (iter_ == state_->_transitions.end ())
+                        {
+                            basic_string_token<CharT> token_
+                                (false, chars_[col_index_]);
+                            typename detail::basic_char_state_machine<CharT>::
+                                state::size_t_string_token_pair pair_
+                                (i_, token_);
+
+                            state_->_transitions.insert (pair_);
+                        }
+                        else
+                        {
+                            iter_->second._charset += chars_[col_index_];
+                        }
+                    }
+                }
+
+                for (typename detail::basic_char_state_machine<CharT>::state::
+                    size_t_string_token_map::iterator iter_ =
+                    state_->_transitions.begin (),
+                    end_ = state_->_transitions.end ();
+                    iter_ != end_; ++iter_)
+                {
+                    std::sort (iter_->second._charset.begin (),
+                        iter_->second._charset.end ());
+                    iter_->second.normalise ();
+                }
+            }
+        }
+    }
+};
+
+typedef basic_state_machine<char> state_machine;
+typedef basic_state_machine<wchar_t> wstate_machine;
+}
+}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/string_token.hpp b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/string_token.hpp
new file mode 100644
index 0000000..6bfa6ff
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/detail/lexer/string_token.hpp
@@ -0,0 +1,413 @@
+// string_token.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_STRING_TOKEN_HPP
+#define BOOST_LEXER_STRING_TOKEN_HPP
+
+#include <algorithm>
+#include "size_t.hpp"
+#include "consts.hpp" // num_chars, num_wchar_ts
+#include <string>
+
+namespace boost
+{
+namespace lexer
+{
+template<typename CharT>
+struct basic_string_token
+{
+    typedef std::basic_string<CharT> string;
+
+    bool _negated;
+    string _charset;
+
+    basic_string_token () :
+        _negated (false)
+    {
+    }
+
+    basic_string_token (const bool negated_, const string &charset_) :
+        _negated (negated_),
+        _charset (charset_)
+    {
+    }
+
+    void remove_duplicates ()
+    {
+        const CharT *start_ = _charset.c_str ();
+        const CharT *end_ = start_ + _charset.size ();
+
+        // Optimisation for very large charsets:
+        // sorting via pointers is much quicker than
+        // via iterators...
+        std::sort (const_cast<CharT *> (start_), const_cast<CharT *> (end_));
+        _charset.erase (std::unique (_charset.begin (), _charset.end ()),
+            _charset.end ());
+    }
+
+    void normalise ()
+    {
+        const std::size_t max_chars_ = sizeof (CharT) == 1 ?
+            num_chars : num_wchar_ts;
+
+        if (_charset.length () == max_chars_)
+        {
+            _negated = !_negated;
+#if defined _MSC_VER && _MSC_VER <= 1200
+            _charset.erase ();
+#else
+            _charset.clear ();
+#endif
+        }
+        else if (_charset.length () > max_chars_ / 2)
+        {
+            negate ();
+        }
+    }
+
+    void negate ()
+    {
+        const std::size_t max_chars_ = sizeof (CharT) == 1 ?
+            num_chars : num_wchar_ts;
+        CharT curr_char_ = sizeof (CharT) == 1 ? -128 : 0;
+        string temp_;
+        const CharT *curr_ = _charset.c_str ();
+        const CharT *chars_end_ = curr_ + _charset.size ();
+
+        _negated = !_negated;
+        temp_.resize (max_chars_ - _charset.size ());
+
+        CharT *ptr_ = const_cast<CharT *> (temp_.c_str ());
+        std::size_t i_ = 0;
+
+        while (curr_ < chars_end_)
+        {
+            while (*curr_ > curr_char_)
+            {
+                *ptr_ = curr_char_;
+                ++ptr_;
+                ++curr_char_;
+                ++i_;
+            }
+
+            ++curr_char_;
+            ++curr_;
+            ++i_;
+        }
+
+        for (; i_ < max_chars_; ++i_)
+        {
+            *ptr_ = curr_char_;
+            ++ptr_;
+            ++curr_char_;
+        }
+
+        _charset = temp_;
+    }
+
+    bool operator < (const basic_string_token &rhs_) const
+    {
+        return _negated < rhs_._negated ||
+            (_negated == rhs_._negated && _charset < rhs_._charset);
+    }
+
+    bool empty () const
+    {
+        return _charset.empty () && !_negated;
+    }
+
+    bool any () const
+    {
+        return _charset.empty () && _negated;
+    }
+
+    void clear ()
+    {
+        _negated = false;
+#if defined _MSC_VER && _MSC_VER <= 1200
+            _charset.erase ();
+#else
+            _charset.clear ();
+#endif
+    }
+
+    void intersect (basic_string_token &rhs_, basic_string_token &overlap_)
+    {
+        if ((any () && rhs_.any ()) || (_negated == rhs_._negated &&
+            !any () && !rhs_.any ()))
+        {
+            intersect_same_types (rhs_, overlap_);
+        }
+        else
+        {
+            intersect_diff_types (rhs_, overlap_);
+        }
+    }
+
+    static void escape_char (const CharT ch_, string &out_)
+    {
+        switch (ch_)
+        {
+            case '\0':
+                out_ += '\\';
+                out_ += '0';
+                break;
+            case '\a':
+                out_ += '\\';
+                out_ += 'a';
+                break;
+            case '\b':
+                out_ += '\\';
+                out_ += 'b';
+                break;
+            case 27:
+                out_ += '\\';
+                out_ += 'x';
+                out_ += '1';
+                out_ += 'b';
+                break;
+            case '\f':
+                out_ += '\\';
+                out_ += 'f';
+                break;
+            case '\n':
+                out_ += '\\';
+                out_ += 'n';
+                break;
+            case '\r':
+                out_ += '\\';
+                out_ += 'r';
+                break;
+            case '\t':
+                out_ += '\\';
+                out_ += 't';
+                break;
+            case '\v':
+                out_ += '\\';
+                out_ += 'v';
+                break;
+            case '\\':
+                out_ += '\\';
+                out_ += '\\';
+                break;
+            case '"':
+                out_ += '\\';
+                out_ += '"';
+                break;
+            case '\'':
+                out_ += '\\';
+                out_ += '\'';
+                break;
+            default:
+            {
+                if (ch_ < 32 && ch_ >= 0)
+                {
+                    std::basic_stringstream<CharT> ss_;
+
+                    out_ += '\\';
+                    out_ += 'x';
+                    ss_ << std::hex <<
+                        static_cast<std::size_t> (ch_);
+                    out_ += ss_.str ();
+                }
+                else
+                {
+                    out_ += ch_;
+                }
+
+                break;
+            }
+        }
+    }
+
+private:
+    void intersect_same_types (basic_string_token &rhs_,
+        basic_string_token &overlap_)
+    {
+        if (any ())
+        {
+            clear ();
+            overlap_._negated = true;
+            rhs_.clear ();
+        }
+        else
+        {
+            typename string::iterator iter_ = _charset.begin ();
+            typename string::iterator end_ = _charset.end ();
+            typename string::iterator rhs_iter_ = rhs_._charset.begin ();
+            typename string::iterator rhs_end_ = rhs_._charset.end ();
+
+            overlap_._negated = _negated;
+
+            while (iter_ != end_ && rhs_iter_ != rhs_end_)
+            {
+                if (*iter_ < *rhs_iter_)
+                {
+                    ++iter_;
+                }
+                else if (*iter_ > *rhs_iter_)
+                {
+                    ++rhs_iter_;
+                }
+                else
+                {
+                    overlap_._charset += *iter_;
+                    iter_ = _charset.erase (iter_);
+                    end_ = _charset.end ();
+                    rhs_iter_ = rhs_._charset.erase (rhs_iter_);
+                    rhs_end_ = rhs_._charset.end ();
+                }
+            }
+
+            if (_negated)
+            {
+                // duplicates already merged, so safe to merge
+                // using std lib.
+
+                // src, dest
+                merge (_charset, overlap_._charset);
+                // duplicates already merged, so safe to merge
+                // using std lib.
+
+                // src, dest
+                merge (rhs_._charset, overlap_._charset);
+                _negated = false;
+                rhs_._negated = false;
+                std::swap (_charset, rhs_._charset);
+                normalise ();
+                overlap_.normalise ();
+                rhs_.normalise ();
+            }
+            else if (!overlap_._charset.empty ())
+            {
+                normalise ();
+                overlap_.normalise ();
+                rhs_.normalise ();
+            }
+        }
+    }
+
+    void intersect_diff_types (basic_string_token &rhs_,
+        basic_string_token &overlap_)
+    {
+        if (any ())
+        {
+            intersect_any (rhs_, overlap_);
+        }
+        else if (_negated)
+        {
+            intersect_negated (rhs_, overlap_);
+        }
+        else // _negated == false
+        {
+            intersect_charset (rhs_, overlap_);
+        }
+    }
+
+    void intersect_any (basic_string_token &rhs_, basic_string_token &overlap_)
+    {
+        if (rhs_._negated)
+        {
+            rhs_.intersect_negated (*this, overlap_);
+        }
+        else // rhs._negated == false
+        {
+            rhs_.intersect_charset (*this, overlap_);
+        }
+    }
+
+    void intersect_negated (basic_string_token &rhs_,
+        basic_string_token &overlap_)
+    {
+        if (rhs_.any ())
+        {
+            overlap_._negated = true;
+            overlap_._charset = _charset;
+            rhs_._negated = false;
+            rhs_._charset = _charset;
+            clear ();
+        }
+        else // rhs._negated == false
+        {
+            rhs_.intersect_charset (*this, overlap_);
+        }
+    }
+
+    void intersect_charset (basic_string_token &rhs_,
+        basic_string_token &overlap_)
+    {
+        if (rhs_.any ())
+        {
+            overlap_._charset = _charset;
+            rhs_._negated = true;
+            rhs_._charset = _charset;
+            clear ();
+        }
+        else // rhs_._negated == true
+        {
+            typename string::iterator iter_ = _charset.begin ();
+            typename string::iterator end_ = _charset.end ();
+            typename string::iterator rhs_iter_ = rhs_._charset.begin ();
+            typename string::iterator rhs_end_ = rhs_._charset.end ();
+
+            while (iter_ != end_ && rhs_iter_ != rhs_end_)
+            {
+                if (*iter_ < *rhs_iter_)
+                {
+                    overlap_._charset += *iter_;
+                    rhs_iter_ = rhs_._charset.insert (rhs_iter_, *iter_);
+                    ++rhs_iter_;
+                    rhs_end_ = rhs_._charset.end ();
+                    iter_ = _charset.erase (iter_);
+                    end_ = _charset.end ();
+                }
+                else if (*iter_ > *rhs_iter_)
+                {
+                    ++rhs_iter_;
+                }
+                else
+                {
+                    ++iter_;
+                    ++rhs_iter_;
+                }
+            }
+
+            if (iter_ != end_)
+            {
+                // nothing bigger in rhs_ than iter_,
+                // so safe to merge using std lib.
+                string temp_ (iter_, end_);
+
+                // src, dest
+                merge (temp_, overlap_._charset);
+                _charset.erase (iter_, end_);
+            }
+
+            if (!overlap_._charset.empty ())
+            {
+                merge (overlap_._charset, rhs_._charset);
+                // possible duplicates, so check for any and erase.
+                rhs_._charset.erase (std::unique (rhs_._charset.begin (),
+                    rhs_._charset.end ()), rhs_._charset.end ());
+                normalise ();
+                overlap_.normalise ();
+                rhs_.normalise ();
+            }
+        }
+    }
+
+    void merge (string &src_, string &dest_)
+    {
+        string tmp_ (src_.size () + dest_.size (), 0);
+
+        std::merge (src_.begin (), src_.end (), dest_.begin (), dest_.end (),
+            tmp_.begin ());
+        dest_ = tmp_;
+    }
+};
+}
+}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/detail/make_cons.hpp b/3rdParty/Boost/src/boost/spirit/home/support/detail/make_cons.hpp
new file mode 100644
index 0000000..5f3420f
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/detail/make_cons.hpp
@@ -0,0 +1,85 @@
+/*=============================================================================
+  Copyright (c) 2001-2011 Joel de Guzman
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_MAKE_CONS_OCTOBER_16_2008_1252PM
+#define BOOST_SPIRIT_MAKE_CONS_OCTOBER_16_2008_1252PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/proto/proto.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/fusion/include/cons.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/type_traits/is_abstract.hpp>
+#include <boost/type_traits/is_function.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/utility/enable_if.hpp>
+
+namespace boost { namespace spirit { namespace detail
+{
+    template <typename T>
+    struct as_meta_element
+      : mpl::eval_if_c<is_abstract<T>::value || is_function<T>::value
+          , add_reference<T>, remove_const<T> >
+    {};
+
+    template <typename T>
+    struct as_meta_element<T&> : as_meta_element<T>   // always store by value
+    {};
+
+    template <typename T, int N>
+    struct as_meta_element<T[N]>
+    {
+        typedef const T(&type)[N];
+    };
+
+    namespace result_of
+    {
+        template <typename Car, typename Cdr = fusion::nil>
+        struct make_cons
+        {
+            typedef typename as_meta_element<Car>::type car_type;
+            typedef typename fusion::cons<car_type, Cdr> type;
+        };
+    }
+
+    template <typename Car, typename Cdr>
+    fusion::cons<typename as_meta_element<Car>::type, Cdr>
+    make_cons(Car const& car, Cdr const& cdr)
+    {
+        typedef typename as_meta_element<Car>::type car_type;
+        typedef typename fusion::cons<car_type, Cdr> result;
+        return result(car, cdr);
+    }
+
+    template <typename Car>
+    fusion::cons<typename as_meta_element<Car>::type>
+    make_cons(Car const& car)
+    {
+        typedef typename as_meta_element<Car>::type car_type;
+        typedef typename fusion::cons<car_type> result;
+        return result(car);
+    }
+
+#if defined(__GNUC__) && (__GNUC__ == 4) && (__GNUC_MINOR__ == 0)
+    // workaround for gcc-4.0 bug where illegal function types
+    // can be formed (const is added to function type)
+    // description: http://lists.boost.org/Archives/boost/2009/04/150743.php
+    template <typename Car>
+    fusion::cons<typename as_meta_element<Car>::type>
+    make_cons(Car& car, typename enable_if<is_function<Car> >::type* = 0)
+    {
+        typedef typename as_meta_element<Car>::type car_type;
+        typedef typename fusion::cons<car_type> result;
+        return result(car);
+    }
+#endif
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/detail/make_vector.hpp b/3rdParty/Boost/src/boost/spirit/home/support/detail/make_vector.hpp
new file mode 100644
index 0000000..92fb2c9
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/detail/make_vector.hpp
@@ -0,0 +1,114 @@
+/*=============================================================================
+    Copyright (c) 2001-2010 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#include <boost/version.hpp>
+
+// This is the same as the one in fusion in Boost 1.41. This is provided
+// for compatibility with Boost 1.40 and below.
+
+#if (BOOST_VERSION > 104000)
+
+#include <boost/fusion/include/make_vector.hpp>
+
+namespace boost { namespace spirit { namespace detail
+{
+    namespace result_of
+    {
+        using fusion::result_of::make_vector;
+    }
+    using fusion::make_vector;
+}}}
+
+#else
+
+#ifndef BOOST_PP_IS_ITERATING
+#if !defined(SPIRIT_MAKE_VECTOR_07162005_0243)
+#define SPIRIT_MAKE_VECTOR_07162005_0243
+
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/fusion/container/vector/vector.hpp>
+#include <boost/fusion/support/detail/as_fusion_element.hpp>
+
+namespace boost { namespace fusion
+{
+    struct void_;
+}}
+
+namespace boost { namespace spirit { namespace detail
+{
+    namespace result_of
+    {
+        template <
+            BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
+                FUSION_MAX_VECTOR_SIZE, typename T, fusion::void_)
+          , typename Extra = fusion::void_
+        >
+        struct make_vector;
+
+        template <>
+        struct make_vector<>
+        {
+            typedef fusion::vector0 type;
+        };
+    }
+
+    inline fusion::vector0
+    make_vector()
+    {
+        return fusion::vector0();
+    }
+
+#define BOOST_FUSION_AS_FUSION_ELEMENT(z, n, data)                               \
+    typename fusion::detail::as_fusion_element<BOOST_PP_CAT(T, n)>::type
+
+#define BOOST_PP_FILENAME_1 <boost/spirit/home/support/detail/make_vector.hpp>
+#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_VECTOR_SIZE)
+#include BOOST_PP_ITERATE()
+
+#undef BOOST_FUSION_AS_FUSION_ELEMENT
+
+}}}
+
+#endif
+#else // defined(BOOST_PP_IS_ITERATING)
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Preprocessor vertical repetition code
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#define N BOOST_PP_ITERATION()
+
+    namespace result_of
+    {
+        template <BOOST_PP_ENUM_PARAMS(N, typename T)>
+#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
+        #define TEXT(z, n, text) , text
+        struct make_vector< BOOST_PP_ENUM_PARAMS(N, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_VECTOR_SIZE, TEXT, fusion::void_) >
+        #undef TEXT
+#else
+        struct make_vector<BOOST_PP_ENUM_PARAMS(N, T)>
+#endif
+        {
+            typedef BOOST_PP_CAT(fusion::vector, N)<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)> type;
+        };
+    }
+
+    template <BOOST_PP_ENUM_PARAMS(N, typename T)>
+    inline BOOST_PP_CAT(fusion::vector, N)<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)>
+    make_vector(BOOST_PP_ENUM_BINARY_PARAMS(N, T, const& _))
+    {
+        return BOOST_PP_CAT(fusion::vector, N)<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)>(
+            BOOST_PP_ENUM_PARAMS(N, _));
+    }
+
+#undef N
+#endif // defined(BOOST_PP_IS_ITERATING)
+#endif // (BOOST_VERSION > 103800)
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/detail/scoped_enum_emulation.hpp b/3rdParty/Boost/src/boost/spirit/home/support/detail/scoped_enum_emulation.hpp
new file mode 100644
index 0000000..70979a6
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/detail/scoped_enum_emulation.hpp
@@ -0,0 +1,28 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  http://spirit.sourceforge.net/
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_SPIRIT_SCOPED_ENUM_EMULATION_HPP
+#define BOOST_SPIRIT_SCOPED_ENUM_EMULATION_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/version.hpp>
+#include <boost/config.hpp>
+
+#if BOOST_VERSION >= 104000
+# include <boost/detail/scoped_enum_emulation.hpp>
+#else
+# if !defined(BOOST_NO_SCOPED_ENUMS)
+#  define BOOST_NO_SCOPED_ENUMS
+# endif 
+# define BOOST_SCOPED_ENUM_START(name) struct name { enum enum_type
+# define BOOST_SCOPED_ENUM_END };
+# define BOOST_SCOPED_ENUM(name) name::enum_type
+#endif
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/handles_container.hpp b/3rdParty/Boost/src/boost/spirit/home/support/handles_container.hpp
new file mode 100644
index 0000000..876c9a9
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/handles_container.hpp
@@ -0,0 +1,55 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_HANDLES_CONTAINER_DEC_18_2010_0920AM)
+#define BOOST_SPIRIT_HANDLES_CONTAINER_DEC_18_2010_0920AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/attributes_fwd.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/find_if.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace spirit { namespace traits
+{
+    // Finds out whether a component handles container attributes intrinsically
+    // (or whether container attributes need to be split up separately).
+    template <typename T, typename Attribute, typename Context
+            , typename Iterator, typename Enable>
+    struct handles_container : mpl::false_ {};
+
+    template <typename Subject, typename Attribute, typename Context
+            , typename Iterator>
+    struct unary_handles_container
+      : handles_container<Subject, Attribute, Context, Iterator> {};
+
+    template <typename Left, typename Right, typename Attribute
+            , typename Context, typename Iterator>
+    struct binary_handles_container 
+      : mpl::or_<
+            handles_container<Left, Attribute, Context, Iterator>
+          , handles_container<Right, Attribute, Context, Iterator> > 
+    {};
+
+    template <typename Elements, typename Attribute, typename Context
+            , typename Iterator>
+    struct nary_handles_container
+      : mpl::not_<
+            is_same<
+                typename mpl::find_if<
+                    Elements, handles_container<mpl::_, Attribute
+                                              , Context, Iterator> 
+                >::type
+              , typename mpl::end<Elements>::type> > 
+    {};
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/has_semantic_action.hpp b/3rdParty/Boost/src/boost/spirit/home/support/has_semantic_action.hpp
new file mode 100644
index 0000000..b4cb4e7
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/has_semantic_action.hpp
@@ -0,0 +1,47 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_HAS_SEMANTIC_ACTION_SEP_20_2009_0626PM)
+#define BOOST_SPIRIT_HAS_SEMANTIC_ACTION_SEP_20_2009_0626PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/find_if.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace spirit { namespace traits
+{
+    // finding out, whether a component contains a semantic action
+    template <typename T, typename Enable = void>
+    struct has_semantic_action
+      : mpl::false_ {};
+
+    template <typename Subject>
+    struct unary_has_semantic_action 
+      : has_semantic_action<Subject> {};
+
+    template <typename Left, typename Right>
+    struct binary_has_semantic_action 
+      : mpl::or_<has_semantic_action<Left>, has_semantic_action<Right> > {};
+
+    template <typename Elements>
+    struct nary_has_semantic_action
+      : mpl::not_<
+            is_same<
+                typename mpl::find_if<
+                    Elements, has_semantic_action<mpl::_> 
+                >::type
+              , typename mpl::end<Elements>::type
+            > 
+        > {};
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/info.hpp b/3rdParty/Boost/src/boost/spirit/home/support/info.hpp
new file mode 100644
index 0000000..0701888
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/info.hpp
@@ -0,0 +1,159 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_INFO_NOVEMBER_22_2008_1132AM)
+#define BOOST_SPIRIT_INFO_NOVEMBER_22_2008_1132AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/variant/variant.hpp>
+#include <boost/variant/recursive_variant.hpp>
+#include <boost/variant/apply_visitor.hpp>
+#include <boost/foreach.hpp>
+#include <boost/spirit/home/support/utf8.hpp>
+#include <list>
+#include <iterator>
+#include <utility>
+
+namespace boost { namespace spirit
+{
+    // info provides information about a component. Each component
+    // has a what member function that returns an info object.
+    // strings in the info object are assumed to be encoded as UTF8
+    // for uniformity.
+    struct info
+    {
+        struct nil {};
+
+        typedef
+            boost::variant<
+                nil
+              , utf8_string
+              , recursive_wrapper<info>
+              , recursive_wrapper<std::pair<info, info> >
+              , std::list<info>
+            >
+        value_type;
+
+        explicit info(utf8_string const& tag)
+          : tag(tag), value(nil()) {}
+
+        template <typename T>
+        info(utf8_string const& tag, T const& value)
+          : tag(tag), value(value) {}
+
+        info(utf8_string const& tag, char value)
+          : tag(tag), value(utf8_string(1, value)) {}
+
+        info(utf8_string const& tag, wchar_t value)
+          : tag(tag), value(to_utf8(value)) {}
+
+        info(utf8_string const& tag, ucs4_char value)
+          : tag(tag), value(to_utf8(value)) {}
+
+        template <typename Char>
+        info(utf8_string const& tag, Char const* str)
+          : tag(tag), value(to_utf8(str)) {}
+
+        template <typename Char, typename Traits, typename Allocator>
+        info(utf8_string const& tag
+              , std::basic_string<Char, Traits, Allocator> const& str)
+          : tag(tag), value(to_utf8(str)) {}
+
+        utf8_string tag;
+        value_type value;
+    };
+
+    template <typename Callback>
+    struct basic_info_walker
+    {
+        typedef void result_type;
+        typedef basic_info_walker<Callback> this_type;
+
+        basic_info_walker(Callback& callback, utf8_string const& tag, int depth)
+          : callback(callback), tag(tag), depth(depth) {}
+
+        void operator()(info::nil) const
+        {
+            callback.element(tag, "", depth);
+        }
+
+        void operator()(utf8_string const& str) const
+        {
+            callback.element(tag, str, depth);
+        }
+
+        void operator()(info const& what) const
+        {
+            boost::apply_visitor(
+                this_type(callback, what.tag, depth+1), what.value);
+        }
+
+        void operator()(std::pair<info, info> const& pair) const
+        {
+            callback.element(tag, "", depth);
+            boost::apply_visitor(
+                this_type(callback, pair.first.tag, depth+1), pair.first.value);
+            boost::apply_visitor(
+                this_type(callback, pair.second.tag, depth+1), pair.second.value);
+        }
+
+        void operator()(std::list<info> const& l) const
+        {
+            callback.element(tag, "", depth);
+            BOOST_FOREACH(info const& what, l)
+            {
+                boost::apply_visitor(
+                    this_type(callback, what.tag, depth+1), what.value);
+            }
+        }
+
+        Callback& callback;
+        utf8_string const& tag;
+        int depth;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        basic_info_walker& operator= (basic_info_walker const&);
+    };
+
+    // bare-bones print support
+    template <typename Out>
+    struct simple_printer
+    {
+        typedef utf8_string string;
+
+        simple_printer(Out& out)
+          : out(out) {}
+
+        void element(string const& tag, string const& value, int /*depth*/) const
+        {
+            if (value == "")
+                out << '<' << tag << '>';
+            else
+                out << '"' << value << '"';
+        }
+
+        Out& out;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        simple_printer& operator= (simple_printer const&);
+    };
+
+    template <typename Out>
+    Out& operator<<(Out& out, info const& what)
+    {
+        simple_printer<Out> pr(out);
+        basic_info_walker<simple_printer<Out> > walker(pr, what.tag, 0);
+        boost::apply_visitor(walker, what.value);
+        return out;
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/iterators/detail/buf_id_check_policy.hpp b/3rdParty/Boost/src/boost/spirit/home/support/iterators/detail/buf_id_check_policy.hpp
new file mode 100644
index 0000000..9df2d9c
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/iterators/detail/buf_id_check_policy.hpp
@@ -0,0 +1,90 @@
+//  Copyright (c) 2001, Daniel C. Nuffer
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_ITERATOR_BUF_ID_CHECK_POLICY_MAR_16_2007_1108AM)
+#define BOOST_SPIRIT_ITERATOR_BUF_ID_CHECK_POLICY_MAR_16_2007_1108AM
+
+#include <boost/spirit/home/support/iterators/multi_pass_fwd.hpp>
+#include <boost/spirit/home/support/iterators/detail/multi_pass.hpp>
+#include <boost/config.hpp>
+#include <boost/throw_exception.hpp>
+#include <exception>    // for std::exception
+
+namespace boost { namespace spirit { namespace iterator_policies
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  class illegal_backtracking
+    //  thrown by buf_id_check CheckingPolicy if an instance of an iterator is
+    //  used after another one has invalidated the queue
+    ///////////////////////////////////////////////////////////////////////////
+    class illegal_backtracking : public std::exception
+    {
+    public:
+        illegal_backtracking() throw() {}
+        ~illegal_backtracking() throw() {}
+
+        char const* what() const throw()
+        { 
+            return "boost::spirit::multi_pass::illegal_backtracking"; 
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////////
+    //  class buf_id_check
+    //  Implementation of the CheckingPolicy used by multi_pass
+    //  This policy is most effective when used together with the std_deque
+    //  StoragePolicy.
+    // 
+    //  If used with the fixed_size_queue StoragePolicy, it will not detect
+    //  iterator dereferences that are out of the range of the queue.
+    ///////////////////////////////////////////////////////////////////////////////
+    struct buf_id_check
+    {
+        ///////////////////////////////////////////////////////////////////////
+        struct unique //: detail::default_checking_policy
+        {
+            unique() : buf_id(0) {}
+            unique(unique const& x) : buf_id(x.buf_id) {}
+
+            void swap(unique& x)
+            {
+                boost::swap(buf_id, x.buf_id);
+            }
+
+            // called to verify that everything is ok.
+            template <typename MultiPass>
+            static void docheck(MultiPass const& mp) 
+            {
+                if (mp.buf_id != mp.shared()->shared_buf_id)
+                    boost::throw_exception(illegal_backtracking());
+            }
+
+            // called from multi_pass::clear_queue, so we can increment the count
+            template <typename MultiPass>
+            static void clear_queue(MultiPass& mp)
+            {
+                ++mp.shared()->shared_buf_id;
+                ++mp.buf_id;
+            }
+
+            template <typename MultiPass>
+            static void destroy(MultiPass&) {}
+
+        protected:
+            unsigned long buf_id;
+        };
+
+        ///////////////////////////////////////////////////////////////////////
+        struct shared
+        {
+            shared() : shared_buf_id(0) {}
+            unsigned long shared_buf_id;
+        };
+    };
+
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/iterators/detail/combine_policies.hpp b/3rdParty/Boost/src/boost/spirit/home/support/iterators/detail/combine_policies.hpp
new file mode 100644
index 0000000..28e33df
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/iterators/detail/combine_policies.hpp
@@ -0,0 +1,502 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_ITERATOR_COMBINE_POLICIES_APR_06_2008_0136PM)
+#define BOOST_SPIRIT_ITERATOR_COMBINE_POLICIES_APR_06_2008_0136PM
+
+#include <boost/config.hpp>
+#include <boost/type_traits/is_empty.hpp>
+
+namespace boost { namespace spirit { namespace iterator_policies
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  The purpose of the multi_pass_unique template is to eliminate 
+    //  empty policy classes (policies not containing any data items) from the 
+    //  multiple inheritance chain. This is necessary since some compilers 
+    //  fail to apply the empty base optimization if multiple inheritance is 
+    //  involved.
+    //  Additionally this can be used to combine separate policies into one 
+    //  single multi_pass_policy as required by the multi_pass template
+    ///////////////////////////////////////////////////////////////////////////
+
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+    // without partial template specialization there is nothing much to do in 
+    // terms of empty base optimization anyways...
+    template <typename T, typename Ownership, typename Checking, 
+        typename Input, typename Storage>
+    struct multi_pass_unique 
+      : Ownership, Checking, Input, Storage
+    {
+        multi_pass_unique() {}
+        multi_pass_unique(T& x) : Input(x) {}
+        multi_pass_unique(T const& x) : Input(x) {}
+
+        template <typename MultiPass>
+        static void destroy(MultiPass& mp)
+        {
+            Ownership::destroy(mp);
+            Checking::destroy(mp);
+            Input::destroy(mp);
+            Storage::destroy(mp);
+        }
+        void swap(multi_pass_unique& x) 
+        {
+            this->Ownership::swap(x);
+            this->Checking::swap(x);
+            this->Input::swap(x);
+            this->Storage::swap(x);
+        }
+    };
+#else
+    ///////////////////////////////////////////////////////////////////////////
+    // select the correct derived classes based on if a policy is empty
+    template <typename T
+      , typename Ownership, typename Checking, typename Input, typename Storage
+      , bool OwnershipIsEmpty = boost::is_empty<Ownership>::value
+      , bool CheckingIsEmpty = boost::is_empty<Checking>::value
+      , bool InputIsEmpty = boost::is_empty<Input>::value>
+    struct multi_pass_unique;
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Ownership, typename Checking
+      , typename Input, typename Storage>
+    struct multi_pass_unique<T, Ownership, Checking, Input, Storage
+          , false, false, false>
+      : Ownership, Checking, Input, Storage
+    {
+        multi_pass_unique() {}
+        multi_pass_unique(T& x) : Input(x) {}
+        multi_pass_unique(T const& x) : Input(x) {}
+
+        template <typename MultiPass>
+        static void destroy(MultiPass& mp)
+        {
+            Ownership::destroy(mp);
+            Checking::destroy(mp);
+            Input::destroy(mp);
+            Storage::destroy(mp);
+        }
+        void swap(multi_pass_unique& x) 
+        {
+            this->Ownership::swap(x);
+            this->Checking::swap(x);
+            this->Input::swap(x);
+            this->Storage::swap(x);
+        }
+    };
+    
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Ownership, typename Checking
+      , typename Input, typename Storage>
+    struct multi_pass_unique<T, Ownership, Checking, Input, Storage
+          , false, false, true>
+      : Ownership, Checking, Storage
+    {
+        multi_pass_unique() {}
+        multi_pass_unique(T const& x) {}
+
+        template <typename MultiPass>
+        static void destroy(MultiPass& mp)
+        {
+            Ownership::destroy(mp);
+            Checking::destroy(mp);
+            Input::destroy(mp);
+            Storage::destroy(mp);
+        }
+        void swap(multi_pass_unique& x) 
+        {
+            this->Ownership::swap(x);
+            this->Checking::swap(x);
+            this->Storage::swap(x);
+        }
+
+        // implement input policy functions by forwarding to the Input type
+        template <typename MultiPass>
+        inline static void advance_input(MultiPass& mp)
+            { Input::advance_input(mp); }
+
+        template <typename MultiPass>
+        inline static typename MultiPass::reference get_input(MultiPass& mp)
+            { return Input::get_input(mp); }
+
+        template <typename MultiPass>
+        inline static bool input_at_eof(MultiPass const& mp)
+            { return Input::input_at_eof(mp); }
+
+        template <typename MultiPass, typename TokenType>
+        inline static bool input_is_valid(MultiPass& mp, TokenType& curtok)
+            { return Input::input_is_valid(mp, curtok); }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Ownership, typename Checking
+      , typename Input, typename Storage>
+    struct multi_pass_unique<T, Ownership, Checking, Input, Storage
+          , false, true, false>
+      : Ownership, Input, Storage
+    {
+        multi_pass_unique() {}
+        multi_pass_unique(T& x) : Input(x) {}
+        multi_pass_unique(T const& x) : Input(x) {}
+
+        template <typename MultiPass>
+        static void destroy(MultiPass& mp)
+        {
+            Ownership::destroy(mp);
+            Input::destroy(mp);
+            Storage::destroy(mp);
+        }
+        void swap(multi_pass_unique& x) 
+        {
+            this->Ownership::swap(x);
+            this->Input::swap(x);
+            this->Storage::swap(x);
+        }
+
+        // checking policy functions are forwarded to the Checking type
+        template <typename MultiPass>
+        inline static void docheck(MultiPass const& mp) 
+            { Checking::docheck(mp); }
+
+        template <typename MultiPass>
+        inline static void clear_queue(MultiPass& mp) 
+            { Checking::clear_queue(mp); }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Ownership, typename Checking
+      , typename Input, typename Storage>
+    struct multi_pass_unique<T, Ownership, Checking, Input, Storage
+          , false, true, true>
+      : Ownership, Storage
+    {
+        multi_pass_unique() {}
+        multi_pass_unique(T const& x) {}
+
+        template <typename MultiPass>
+        static void destroy(MultiPass& mp)
+        {
+            Ownership::destroy(mp);
+            Input::destroy(mp);
+            Storage::destroy(mp);
+        }
+        void swap(multi_pass_unique& x) 
+        {
+            this->Ownership::swap(x);
+            this->Storage::swap(x);
+        }
+
+        // implement input policy functions by forwarding to the Input type
+        template <typename MultiPass>
+        inline static void advance_input(MultiPass& mp)
+            { Input::advance_input(mp); }
+
+        template <typename MultiPass>
+        inline static typename MultiPass::reference get_input(MultiPass& mp)
+            { return Input::get_input(mp); }
+
+        template <typename MultiPass>
+        inline static bool input_at_eof(MultiPass const& mp)
+            { return Input::input_at_eof(mp); }
+
+        template <typename MultiPass, typename TokenType>
+        inline static bool input_is_valid(MultiPass& mp, TokenType& curtok)
+            { return Input::input_is_valid(mp, curtok); }
+
+        // checking policy functions are forwarded to the Checking type
+        template <typename MultiPass>
+        inline static void docheck(MultiPass const& mp) 
+            { Checking::docheck(mp); }
+
+        template <typename MultiPass>
+        inline static void clear_queue(MultiPass& mp) 
+            { Checking::clear_queue(mp); }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Ownership, typename Checking
+      , typename Input, typename Storage>
+    struct multi_pass_unique<T, Ownership, Checking, Input, Storage
+          , true, false, false>
+      : Checking, Input, Storage
+    {
+        multi_pass_unique() {}
+        multi_pass_unique(T& x) : Input(x) {}
+        multi_pass_unique(T const& x) : Input(x) {}
+
+        template <typename MultiPass>
+        static void destroy(MultiPass& mp)
+        {
+            Checking::destroy(mp);
+            Input::destroy(mp);
+            Storage::destroy(mp);
+        }
+        void swap(multi_pass_unique& x) 
+        {
+            this->Checking::swap(x);
+            this->Input::swap(x);
+            this->Storage::swap(x);
+        }
+
+        // ownership policy functions are forwarded to the Ownership type
+        template <typename MultiPass>
+        inline static void clone(MultiPass& mp) 
+            { Ownership::clone(mp); }
+
+        template <typename MultiPass>
+        inline static bool release(MultiPass& mp)
+            { return Ownership::release(mp); }
+
+        template <typename MultiPass>
+        inline static bool is_unique(MultiPass const& mp)
+            { return Ownership::is_unique(mp); }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Ownership, typename Checking
+      , typename Input, typename Storage>
+    struct multi_pass_unique<T, Ownership, Checking, Input, Storage
+          , true, false, true>
+      : Checking, Storage
+    {
+        multi_pass_unique() {}
+        multi_pass_unique(T const& x) {}
+
+        template <typename MultiPass>
+        static void destroy(MultiPass& mp)
+        {
+            Checking::destroy(mp);
+            Input::destroy(mp);
+            Storage::destroy(mp);
+        }
+        void swap(multi_pass_unique& x) 
+        {
+            this->Checking::swap(x);
+            this->Storage::swap(x);
+        }
+
+        // implement input policy functions by forwarding to the Input type
+        template <typename MultiPass>
+        inline static void advance_input(MultiPass& mp)
+            { Input::advance_input(mp); }
+
+        template <typename MultiPass>
+        inline static typename MultiPass::reference get_input(MultiPass& mp)
+            { return Input::get_input(mp); }
+
+        template <typename MultiPass>
+        inline static bool input_at_eof(MultiPass const& mp)
+            { return Input::input_at_eof(mp); }
+
+        template <typename MultiPass, typename TokenType>
+        inline static bool input_is_valid(MultiPass& mp, TokenType& curtok)
+            { return Input::input_is_valid(mp, curtok); }
+
+        // ownership policy functions are forwarded to the Ownership type
+        template <typename MultiPass>
+        inline static void clone(MultiPass& mp) 
+            { Ownership::clone(mp); }
+
+        template <typename MultiPass>
+        inline static bool release(MultiPass& mp)
+            { return Ownership::release(mp); }
+
+        template <typename MultiPass>
+        inline static bool is_unique(MultiPass const& mp)
+            { return Ownership::is_unique(mp); }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Ownership, typename Checking
+      , typename Input, typename Storage>
+    struct multi_pass_unique<T, Ownership, Checking, Input, Storage
+          , true, true, false>
+      : Input, Storage
+    {
+        multi_pass_unique() {}
+        multi_pass_unique(T& x) : Input(x) {}
+        multi_pass_unique(T const& x) : Input(x) {}
+
+        template <typename MultiPass>
+        static void destroy(MultiPass& mp)
+        {
+            Input::destroy(mp);
+            Storage::destroy(mp);
+        }
+        void swap(multi_pass_unique& x) 
+        {
+            this->Input::swap(x);
+            this->Storage::swap(x);
+        }
+
+        // checking policy functions are forwarded to the Checking type
+        template <typename MultiPass>
+        inline static void docheck(MultiPass const& mp) 
+            { Checking::docheck(mp); }
+
+        template <typename MultiPass>
+        inline static void clear_queue(MultiPass& mp) 
+            { Checking::clear_queue(mp); }
+
+        // ownership policy functions are forwarded to the Ownership type
+        template <typename MultiPass>
+        inline static void clone(MultiPass& mp) 
+            { Ownership::clone(mp); }
+
+        template <typename MultiPass>
+        inline static bool release(MultiPass& mp)
+            { return Ownership::release(mp); }
+
+        template <typename MultiPass>
+        inline static bool is_unique(MultiPass const& mp)
+            { return Ownership::is_unique(mp); }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Ownership, typename Checking
+      , typename Input, typename Storage>
+    struct multi_pass_unique<T, Ownership, Checking, Input, Storage
+          , true, true, true>
+      : Storage
+    {
+        multi_pass_unique() {}
+        multi_pass_unique(T const&) {}
+
+        template <typename MultiPass>
+        static void destroy(MultiPass& mp)
+        {
+            Input::destroy(mp);
+            Storage::destroy(mp);
+        }
+        void swap(multi_pass_unique& x) 
+        {
+            this->Storage::swap(x);
+        }
+
+        // implement input policy functions by forwarding to the Input type
+        template <typename MultiPass>
+        inline static void advance_input(MultiPass& mp)
+            { Input::advance_input(mp); }
+
+        template <typename MultiPass>
+        inline static typename MultiPass::reference get_input(MultiPass& mp)
+            { return Input::get_input(mp); }
+
+        template <typename MultiPass>
+        inline static bool input_at_eof(MultiPass const& mp)
+            { return Input::input_at_eof(mp); }
+
+        template <typename MultiPass, typename TokenType>
+        inline static bool input_is_valid(MultiPass& mp, TokenType& curtok)
+            { return Input::input_is_valid(mp, curtok); }
+
+        // checking policy functions are forwarded to the Checking type
+        template <typename MultiPass>
+        inline static void docheck(MultiPass const& mp) 
+            { Checking::docheck(mp); }
+
+        template <typename MultiPass>
+        inline static void clear_queue(MultiPass& mp) 
+            { Checking::clear_queue(mp); }
+
+        // ownership policy functions are forwarded to the Ownership type
+        template <typename MultiPass>
+        inline static void clone(MultiPass& mp) 
+            { Ownership::clone(mp); }
+
+        template <typename MultiPass>
+        inline static bool release(MultiPass& mp)
+            { return Ownership::release(mp); }
+
+        template <typename MultiPass>
+        inline static bool is_unique(MultiPass const& mp)
+            { return Ownership::is_unique(mp); }
+    };
+#endif
+
+    ///////////////////////////////////////////////////////////////////////////
+    // the multi_pass_shared structure is used to combine the shared data items 
+    // of all policies into one single structure
+    ///////////////////////////////////////////////////////////////////////////
+    template<typename T, typename Ownership, typename Checking, typename Input
+      , typename Storage>
+    struct multi_pass_shared : Ownership, Checking, Input, Storage
+    {
+        explicit multi_pass_shared(T& input) : Input(input) {}
+        explicit multi_pass_shared(T const& input) : Input(input) {}
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  This is a default implementation of a policy class as required by the
+    //  multi_pass template, combining 4 separate policies into one. Any other
+    //  multi_pass policy class needs to follow the scheme as shown below.
+    template<typename Ownership, typename Checking, typename Input
+      , typename Storage>
+    struct default_policy
+    {
+        typedef Ownership ownership_policy;
+        typedef Checking checking_policy;
+        typedef Input input_policy;
+        typedef Storage storage_policy;
+
+        ///////////////////////////////////////////////////////////////////////
+        template <typename T>
+        struct unique : multi_pass_unique<T
+          , typename Ownership::unique, typename Checking::unique
+          , typename Input::BOOST_NESTED_TEMPLATE unique<T>
+          , typename Storage::BOOST_NESTED_TEMPLATE unique<
+                typename Input::BOOST_NESTED_TEMPLATE unique<T>::value_type> >
+        {
+            typedef typename Ownership::unique ownership_policy;
+            typedef typename Checking::unique checking_policy;
+            typedef typename Input::BOOST_NESTED_TEMPLATE unique<T> 
+                input_policy;
+            typedef typename Storage::BOOST_NESTED_TEMPLATE unique<
+                typename input_policy::value_type> storage_policy;
+
+            typedef multi_pass_unique<T, ownership_policy, checking_policy
+              , input_policy, storage_policy> unique_base_type;
+
+            unique() {}
+            explicit unique(T& input) : unique_base_type(input) {}
+            explicit unique(T const& input) : unique_base_type(input) {}
+        };
+
+        ///////////////////////////////////////////////////////////////////////
+        template <typename T>
+        struct shared : multi_pass_shared<T
+          , typename Ownership::shared, typename Checking::shared
+          , typename Input::BOOST_NESTED_TEMPLATE shared<T>
+          , typename Storage::BOOST_NESTED_TEMPLATE shared<
+                typename Input::BOOST_NESTED_TEMPLATE unique<T>::value_type> > 
+        {
+            typedef typename Ownership::shared ownership_policy;
+            typedef typename Checking::shared checking_policy;
+            typedef typename Input::BOOST_NESTED_TEMPLATE shared<T> 
+                input_policy;
+            typedef typename Storage::BOOST_NESTED_TEMPLATE shared<
+                typename Input::BOOST_NESTED_TEMPLATE unique<T>::value_type> 
+            storage_policy;
+
+            typedef multi_pass_shared<T, ownership_policy, checking_policy
+              , input_policy, storage_policy> shared_base_type;
+
+            explicit shared(T& input) 
+              : shared_base_type(input), inhibit_clear_queue_(false) {}
+            explicit shared(T const& input) 
+              : shared_base_type(input), inhibit_clear_queue_(false) {}
+
+            // This is needed for the correct implementation of expectation 
+            // points. Normally expectation points flush any multi_pass 
+            // iterator they may act on, but if the corresponding error handler
+            // is of type 'retry' no flushing of the internal buffers should be
+            // executed (even if explicitly requested).
+            bool inhibit_clear_queue_;
+        };
+    };
+
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/iterators/detail/multi_pass.hpp b/3rdParty/Boost/src/boost/spirit/home/support/iterators/detail/multi_pass.hpp
new file mode 100644
index 0000000..088b39a
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/iterators/detail/multi_pass.hpp
@@ -0,0 +1,132 @@
+//  Copyright (c) 2001 Daniel C. Nuffer
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_ITERATOR_MULTI_PASS_MAR_16_2007_1122AM)
+#define BOOST_SPIRIT_ITERATOR_MULTI_PASS_MAR_16_2007_1122AM
+
+#include <boost/config.hpp>
+#include <boost/spirit/home/support/iterators/multi_pass_fwd.hpp>
+#include <boost/iterator.hpp>
+#include <boost/mpl/bool.hpp>
+#include <iterator>
+#include <algorithm> 
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace detail
+{
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+    ///////////////////////////////////////////////////////////////////////////
+    //  Meta-function to generate a std::iterator<> base class for multi_pass. 
+    //  This is used mainly to improve conformance of compilers not supporting 
+    //  PTS and thus relying on inheritance to recognize an iterator.
+    //
+    //  We are using boost::iterator<> because it offers an automatic 
+    //  workaround for broken std::iterator<> implementations.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename InputPolicy>
+    struct iterator_base_creator
+    {
+        typedef typename InputPolicy::BOOST_NESTED_TEMPLATE unique<T> input_type;
+
+        typedef boost::iterator <
+            std::forward_iterator_tag
+          , typename input_type::value_type
+          , typename input_type::difference_type
+          , typename input_type::pointer
+          , typename input_type::reference
+        > type;
+    };
+#endif
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Default implementations of the different policies to be used with a 
+    //  multi_pass iterator
+    ///////////////////////////////////////////////////////////////////////////
+    struct default_input_policy
+    {
+        default_input_policy() {}
+
+        template <typename Functor>
+        default_input_policy(Functor const&) {}
+
+        template <typename MultiPass>
+        static void destroy(MultiPass&) {}
+
+        void swap(default_input_policy&) {}
+
+        template <typename MultiPass, typename TokenType>
+        static void advance_input(MultiPass& mp);
+
+        template <typename MultiPass>
+        static typename MultiPass::reference get_input(MultiPass& mp);
+
+        template <typename MultiPass>
+        static bool input_at_eof(MultiPass const& mp);
+
+        template <typename MultiPass, typename TokenType>
+        static bool input_is_valid(MultiPass& mp, TokenType& curtok);
+    };
+
+    struct default_ownership_policy
+    {
+        template <typename MultiPass>
+        static void destroy(MultiPass&) {}
+
+        void swap(default_ownership_policy&) {}
+
+        template <typename MultiPass>
+        static void clone(MultiPass&) {}
+
+        template <typename MultiPass>
+        static bool release(MultiPass& mp);
+
+        template <typename MultiPass>
+        static bool is_unique(MultiPass const& mp);
+    };
+
+    struct default_storage_policy
+    {
+        template <typename MultiPass>
+        static void destroy(MultiPass&) {}
+
+        void swap(default_storage_policy&) {}
+
+        template <typename MultiPass>
+        static typename MultiPass::reference dereference(MultiPass const& mp);
+
+        template <typename MultiPass>
+        static void increment(MultiPass&) {}
+
+        template <typename MultiPass>
+        static void clear_queue(MultiPass&) {}
+
+        template <typename MultiPass>
+        static bool is_eof(MultiPass const& mp);
+
+        template <typename MultiPass>
+        static bool equal_to(MultiPass const& mp, MultiPass const& x);
+
+        template <typename MultiPass>
+        static bool less_than(MultiPass const& mp, MultiPass const& x);
+    };
+
+    struct default_checking_policy
+    {
+        template <typename MultiPass>
+        static void destroy(MultiPass&) {}
+
+        void swap(default_checking_policy&) {}
+
+        template <typename MultiPass>
+        static void docheck(MultiPass const&) {}
+
+        template <typename MultiPass>
+        static void clear_queue(MultiPass&) {}
+    };
+
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/iterators/detail/no_check_policy.hpp b/3rdParty/Boost/src/boost/spirit/home/support/iterators/detail/no_check_policy.hpp
new file mode 100644
index 0000000..8f4a26d
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/iterators/detail/no_check_policy.hpp
@@ -0,0 +1,31 @@
+//  Copyright (c) 2001 Daniel C. Nuffer
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_ITERATOR_NO_CHECK_POLICY_MAR_16_2007_1121AM)
+#define BOOST_SPIRIT_ITERATOR_NO_CHECK_POLICY_MAR_16_2007_1121AM
+
+#include <boost/spirit/home/support/iterators/multi_pass_fwd.hpp>
+#include <boost/spirit/home/support/iterators/detail/multi_pass.hpp>
+
+namespace boost { namespace spirit { namespace iterator_policies
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  class no_check
+    //  Implementation of the CheckingPolicy used by multi_pass
+    //  It does not do anything :-)
+    ///////////////////////////////////////////////////////////////////////////
+    struct no_check
+    {
+        ///////////////////////////////////////////////////////////////////////
+        struct unique : public detail::default_checking_policy {};
+
+        ///////////////////////////////////////////////////////////////////////
+        struct shared {};
+    };
+
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/iterators/detail/ref_counted_policy.hpp b/3rdParty/Boost/src/boost/spirit/home/support/iterators/detail/ref_counted_policy.hpp
new file mode 100644
index 0000000..723bbee
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/iterators/detail/ref_counted_policy.hpp
@@ -0,0 +1,79 @@
+//  Copyright (c) 2001 Daniel C. Nuffer
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_ITERATOR_REF_COUNTED_POLICY_MAR_16_2007_1108AM)
+#define BOOST_SPIRIT_ITERATOR_REF_COUNTED_POLICY_MAR_16_2007_1108AM
+
+#include <boost/spirit/home/support/iterators/multi_pass_fwd.hpp>
+#include <boost/spirit/home/support/iterators/detail/multi_pass.hpp>
+#if defined(BOOST_HAS_THREADS)
+#include <boost/detail/atomic_count.hpp>
+#endif
+#include <cstdlib>
+
+namespace boost { namespace spirit { namespace iterator_policies
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  class ref_counted
+    //  Implementation of an OwnershipPolicy used by multi_pass.
+    //
+    //  Implementation modified from RefCounted class from the Loki library by
+    //  Andrei Alexandrescu.
+    ///////////////////////////////////////////////////////////////////////////
+    struct ref_counted
+    {
+        ///////////////////////////////////////////////////////////////////////
+        struct unique // : detail::default_ownership_policy
+        {
+            void swap(unique&) {}
+
+            // clone is called when a copy of the iterator is made, so 
+            // increment the ref-count.
+            template <typename MultiPass>
+            static void clone(MultiPass& mp)
+            {
+                if (0 != mp.shared())
+                    ++mp.shared()->count;
+            }
+
+            // called when a copy is deleted. Decrement the ref-count. Return
+            // value of true indicates that the last copy has been released.
+            template <typename MultiPass>
+            static bool release(MultiPass& mp)
+            {
+                return 0 != mp.shared() && 0 == --mp.shared()->count;
+            }
+
+            // returns true if there is only one iterator in existence.
+            // std_deque StoragePolicy will free it's buffered data if this
+            // returns true.
+            template <typename MultiPass>
+            static bool is_unique(MultiPass const& mp) 
+            {
+                return 0 == mp.shared() || 1 == mp.shared()->count;
+            }
+
+            template <typename MultiPass>
+            static void destroy(MultiPass&) {}
+        };
+
+        ////////////////////////////////////////////////////////////////////////
+        struct shared
+        {
+            shared() : count(1) {}
+
+#if defined(BOOST_HAS_THREADS)
+            boost::detail::atomic_count count;
+#else
+            std::size_t count;
+#endif
+        };
+
+    };
+
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/iterators/detail/split_functor_input_policy.hpp b/3rdParty/Boost/src/boost/spirit/home/support/iterators/detail/split_functor_input_policy.hpp
new file mode 100644
index 0000000..711ae90
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/iterators/detail/split_functor_input_policy.hpp
@@ -0,0 +1,201 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_ITERATOR_SPLIT_FUNCTOR_INPUT_POLICY_JAN_17_2008_0103PM)
+#define BOOST_SPIRIT_ITERATOR_SPLIT_FUNCTOR_INPUT_POLICY_JAN_17_2008_0103PM
+
+#include <boost/spirit/home/support/iterators/multi_pass_fwd.hpp>
+#include <boost/spirit/home/support/iterators/detail/multi_pass.hpp>
+#include <boost/assert.hpp>
+#include <boost/type_traits/is_empty.hpp>
+
+namespace boost { namespace spirit { namespace iterator_policies
+{
+    namespace split_functor_input_is_valid_test_
+    {
+        template <typename Token>
+        inline bool token_is_valid(Token const&)
+        {
+            return true;
+        }
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  class split_functor_input
+    //  Implementation of the InputPolicy used by multi_pass
+    //  split_functor_input gets tokens from a functor
+    // 
+    //  This policy should be used when the functor holds two parts of data: a
+    //  unique part (unique for each instance of the iterator) and a shared 
+    //  part (to be shared between the different copies of the same iterator).
+    //  Using this policy allows to merge the shared part of the functor with 
+    //  the shared part of the iterator data, saving one pointer and one 
+    //  allocation per iterator instance.
+    //
+    //  The Functor template parameter of this policy is expected to be a 
+    //  std::pair<unique, shared>, where 'unique' and 'shared' represent the
+    //  respective parts of the functor itself.
+    //
+    //  Note: the unique part of the functor must have a typedef for result_type
+    //        It also must have a static variable of type result_type defined 
+    //        to represent EOF that is called eof.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct split_functor_input
+    {
+        ///////////////////////////////////////////////////////////////////////
+        template <typename Functor
+          , bool FunctorIsEmpty = is_empty<typename Functor::first_type>::value>
+        class unique;
+
+        // the unique part of the functor is empty, do not include the functor 
+        // as a member at all to avoid unnecessary padding bytes to be included 
+        // into the generated structure
+        template <typename Functor>
+        class unique<Functor, true> // : public detail::default_input_policy
+        {
+        protected:
+            typedef typename Functor::first_type functor_type;
+            typedef typename functor_type::result_type result_type;
+
+        public:
+            typedef result_type value_type;
+            typedef std::ptrdiff_t difference_type;
+            typedef std::ptrdiff_t distance_type;
+            typedef result_type const* pointer;
+            typedef result_type const& reference;
+
+        protected:
+            unique() {}
+            explicit unique(Functor const&) {}
+
+        public:
+            void swap(unique&) {}
+
+            // get the next token
+            template <typename MultiPass>
+            static typename MultiPass::reference get_input(MultiPass& mp)
+            {
+                value_type& curtok = mp.shared()->curtok;
+                using namespace split_functor_input_is_valid_test_;
+                if (!token_is_valid(curtok))
+                    functor_type::get_next(mp, curtok);
+                return curtok;
+            }
+
+            template <typename MultiPass>
+            static void advance_input(MultiPass& mp)
+            {
+                functor_type::get_next(mp, mp.shared()->curtok);
+            }
+
+            // test, whether we reached the end of the underlying stream
+            template <typename MultiPass>
+            static bool input_at_eof(MultiPass const& mp) 
+            {
+                return mp.shared()->curtok == functor_type::eof;
+            }
+
+            template <typename MultiPass>
+            static bool input_is_valid(MultiPass const&, value_type const& t) 
+            {
+                using namespace split_functor_input_is_valid_test_;
+                return token_is_valid(t);
+            }
+
+            template <typename MultiPass>
+            static void destroy(MultiPass& mp) 
+            {
+                functor_type::destroy(mp);
+            }
+        };
+
+        // the unique part of the functor is non-empty
+        template <typename Functor>
+        class unique<Functor, false> : public unique<Functor, true>
+        {
+        protected:
+            typedef typename Functor::first_type functor_type;
+            typedef typename functor_type::result_type result_type;
+
+        protected:
+            unique() {}
+            explicit unique(Functor const& x) : ftor(x.first) {}
+
+            void swap(unique& x)
+            {
+                boost::swap(ftor, x.ftor);
+            }
+
+        public:
+            typedef result_type value_type;
+            typedef std::ptrdiff_t difference_type;
+            typedef std::ptrdiff_t distance_type;
+            typedef result_type const* pointer;
+            typedef result_type const& reference;
+
+        public:
+            // get the next token
+            template <typename MultiPass>
+            static typename MultiPass::reference get_input(MultiPass& mp)
+            {
+                value_type& curtok = mp.shared()->curtok;
+                using namespace split_functor_input_is_valid_test_;
+                if (!token_is_valid(curtok))
+                    functor_type::get_next(mp, curtok);
+                return curtok;
+            }
+
+            template <typename MultiPass>
+            static void advance_input(MultiPass& mp)
+            {
+                mp.ftor.get_next(mp, mp.shared()->curtok);
+            }
+
+            template <typename MultiPass>
+            static bool input_is_valid(MultiPass const&, value_type const& t) 
+            {
+                using namespace split_functor_input_is_valid_test_;
+                return token_is_valid(t);
+            }
+
+            // test, whether we reached the end of the underlying stream
+            template <typename MultiPass>
+            static bool input_at_eof(MultiPass const& mp) 
+            {
+                return mp.shared()->curtok == mp.ftor.eof;
+            }
+
+            typename Functor::first_type& get_functor() const
+            {
+                return ftor;
+            }
+
+            mutable functor_type ftor;
+        };
+
+        ///////////////////////////////////////////////////////////////////////
+        template <typename Functor>
+        struct shared
+        {
+        protected:
+            typedef typename Functor::first_type functor_type;
+            typedef typename functor_type::result_type result_type;
+
+        public:
+            explicit shared(Functor const& x) : ftor(x.second), curtok(0) {}
+
+            mutable typename Functor::second_type ftor;
+            result_type curtok;
+
+        private:
+            // silence MSVC warning C4512: assignment operator could not be generated
+            shared& operator= (shared const&);
+        };
+    };
+
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/iterators/detail/split_std_deque_policy.hpp b/3rdParty/Boost/src/boost/spirit/home/support/iterators/detail/split_std_deque_policy.hpp
new file mode 100644
index 0000000..402956b
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/iterators/detail/split_std_deque_policy.hpp
@@ -0,0 +1,170 @@
+//  Copyright (c) 2001 Daniel C. Nuffer
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_ITERATOR_SPLIT_DEQUE_POLICY_APR_06_2008_0138PM)
+#define BOOST_SPIRIT_ITERATOR_SPLIT_DEQUE_POLICY_APR_06_2008_0138PM
+
+#include <boost/spirit/home/support/iterators/multi_pass_fwd.hpp>
+#include <boost/spirit/home/support/iterators/detail/multi_pass.hpp>
+#include <boost/assert.hpp>
+#include <vector>
+
+namespace boost { namespace spirit { namespace iterator_policies
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  class split_std_deque
+    //
+    //  Implementation of the StoragePolicy used by multi_pass
+    //  This stores all data in a std::vector (despite its name), and keeps an 
+    //  offset to the current position. It stores all the data unless there is 
+    //  only one iterator using the queue.
+    // 
+    ///////////////////////////////////////////////////////////////////////////
+    struct split_std_deque
+    {
+        enum { threshold = 16 };
+
+        ///////////////////////////////////////////////////////////////////////
+        template <typename Value>
+        class unique //: public detail::default_storage_policy
+        {
+        private:
+            typedef std::vector<Value> queue_type;
+
+        protected:
+            unique() : queued_position(0) {}
+
+            unique(unique const& x)
+              : queued_position(x.queued_position) {}
+
+            void swap(unique& x)
+            {
+                boost::swap(queued_position, x.queued_position);
+            }
+
+            // This is called when the iterator is dereferenced.  It's a 
+            // template method so we can recover the type of the multi_pass 
+            // iterator and call advance_input and input_is_valid.
+            template <typename MultiPass>
+            static typename MultiPass::reference 
+            dereference(MultiPass const& mp)
+            {
+                queue_type& queue = mp.shared()->queued_elements;
+                typename queue_type::size_type size = queue.size();
+
+                BOOST_ASSERT(mp.queued_position <= size);
+
+                if (mp.queued_position == size)
+                {
+                    // check if this is the only iterator
+                    if (size >= threshold && MultiPass::is_unique(mp))
+                    {
+                        // free up the memory used by the queue.
+                        queue.clear();
+                        mp.queued_position = 0;
+                    }
+                    return MultiPass::get_input(mp);
+                }
+
+                return queue[mp.queued_position];
+            }
+
+            // This is called when the iterator is incremented. It's a template
+            // method so we can recover the type of the multi_pass iterator
+            // and call is_unique and advance_input.
+            template <typename MultiPass>
+            static void increment(MultiPass& mp)
+            {
+                queue_type& queue = mp.shared()->queued_elements;
+                typename queue_type::size_type size = queue.size();
+
+                BOOST_ASSERT(mp.queued_position <= size);
+
+//                 // do not increment iterator as long as the current token is
+//                 // invalid
+//                 if (size > 0 && !MultiPass::input_is_valid(mp, queue[mp.queued_position-1]))
+//                     return;
+
+                if (mp.queued_position == size)
+                {
+                    // check if this is the only iterator
+                    if (size >= threshold && MultiPass::is_unique(mp))
+                    {
+                        // free up the memory used by the queue. we avoid 
+                        // clearing the queue on every increment, though, 
+                        // because this would be too time consuming
+                        queue.clear();
+                        mp.queued_position = 0;
+                    }
+                    else
+                    {
+                        queue.push_back(MultiPass::get_input(mp));
+                        ++mp.queued_position;
+                    }
+                    MultiPass::advance_input(mp);
+                }
+                else
+                {
+                    ++mp.queued_position;
+                }
+            }
+
+            // called to forcibly clear the queue
+            template <typename MultiPass>
+            static void clear_queue(MultiPass& mp)
+            {
+                mp.shared()->queued_elements.clear();
+                mp.queued_position = 0;
+            }
+
+            // called to determine whether the iterator is an eof iterator
+            template <typename MultiPass>
+            static bool is_eof(MultiPass const& mp)
+            {
+                return mp.queued_position == mp.shared()->queued_elements.size() 
+                    && MultiPass::input_at_eof(mp);
+            }
+
+            // called by operator==
+            template <typename MultiPass>
+            static bool equal_to(MultiPass const& mp, MultiPass const& x) 
+            {
+                return mp.queued_position == x.queued_position;
+            }
+
+            // called by operator<
+            template <typename MultiPass>
+            static bool less_than(MultiPass const& mp, MultiPass const& x)
+            {
+                return mp.queued_position < x.queued_position;
+            }
+
+            template <typename MultiPass>
+            static void destroy(MultiPass&) {}
+
+        protected:
+            mutable typename queue_type::size_type queued_position;
+        }; 
+
+        ///////////////////////////////////////////////////////////////////////
+        template <typename Value>
+        struct shared
+        {
+            shared() 
+            {
+                queued_elements.reserve(threshold); 
+            }
+
+            typedef std::vector<Value> queue_type;
+            queue_type queued_elements;
+        }; 
+
+    }; // split_std_deque
+
+}}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/iterators/multi_pass.hpp b/3rdParty/Boost/src/boost/spirit/home/support/iterators/multi_pass.hpp
new file mode 100644
index 0000000..a1ebb6d
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/iterators/multi_pass.hpp
@@ -0,0 +1,252 @@
+//  Copyright (c) 2001, Daniel C. Nuffer
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  http://spirit.sourceforge.net/
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_ITERATOR_MULTI_PASS_MAR_16_2007_1124AM)
+#define BOOST_SPIRIT_ITERATOR_MULTI_PASS_MAR_16_2007_1124AM
+
+#include <boost/config.hpp>
+#include <boost/spirit/home/support/iterators/multi_pass_fwd.hpp>
+#include <boost/spirit/home/support/iterators/detail/multi_pass.hpp>
+#include <boost/spirit/home/support/iterators/detail/combine_policies.hpp>
+#include <boost/limits.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/utility/base_from_member.hpp>
+
+namespace boost { namespace spirit 
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // The default multi_pass instantiation uses a ref-counted std_deque scheme.
+    ///////////////////////////////////////////////////////////////////////////
+    template<typename T, typename Policies>
+    class multi_pass 
+      : private boost::base_from_member<
+            typename Policies::BOOST_NESTED_TEMPLATE shared<T>*>
+      , public Policies::BOOST_NESTED_TEMPLATE unique<T>
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+      , typename iterator_base_creator<T, typename Policies::input_policy>::type
+#endif
+    {
+    private:
+        // unique and shared data types
+        typedef typename Policies::BOOST_NESTED_TEMPLATE unique<T> 
+            policies_base_type;
+        typedef typename Policies::BOOST_NESTED_TEMPLATE shared<T> 
+            shared_data_type;
+
+        typedef boost::base_from_member<shared_data_type*> member_base;
+
+        // define the types the standard embedded iterator typedefs are taken 
+        // from
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+        typedef typename iterator_base_creator<Input, T>::type iterator_type;
+#else
+        typedef typename policies_base_type::input_policy iterator_type;
+#endif
+
+    public:
+        // standard iterator typedefs
+        typedef std::forward_iterator_tag iterator_category;
+        typedef typename iterator_type::value_type value_type;
+        typedef typename iterator_type::difference_type difference_type;
+        typedef typename iterator_type::distance_type distance_type;
+        typedef typename iterator_type::reference reference;
+        typedef typename iterator_type::pointer pointer;
+
+        multi_pass() : member_base((shared_data_type*)0) {}
+
+        explicit multi_pass(T& input)
+          : member_base(new shared_data_type(input)), policies_base_type(input) {}
+
+        explicit multi_pass(T const& input)
+          : member_base(new shared_data_type(input)), policies_base_type(input) {}
+
+        multi_pass(multi_pass const& x)
+          : member_base(x.member), policies_base_type(x)
+        {
+            policies_base_type::clone(*this);
+        }
+
+#if BOOST_WORKAROUND(__GLIBCPP__, == 20020514)
+        // The standard library shipped with gcc-3.1 has a bug in
+        // bits/basic_string.tcc. It tries to use iter::iter(0) to
+        // construct an iterator. Ironically, this  happens in sanity
+        // checking code that isn't required by the standard.
+        // The workaround is to provide an additional constructor that
+        // ignores its int argument and behaves like the default constructor.
+        multi_pass(int) : member_base((shared_data_type*)0) {}
+#endif // BOOST_WORKAROUND(__GLIBCPP__, == 20020514)
+
+        ~multi_pass()
+        {
+            if (policies_base_type::release(*this)) {
+                policies_base_type::destroy(*this);
+                delete this->member;
+            }
+        }
+
+        multi_pass& operator=(multi_pass const& x)
+        {
+            if (this != &x) {
+                multi_pass temp(x);
+                temp.swap(*this);
+            }
+            return *this;
+        }
+
+        void swap(multi_pass& x)
+        {
+            boost::swap(this->member, x.member);
+            this->policies_base_type::swap(x);
+        }
+
+        reference operator*() const
+        {
+            policies_base_type::docheck(*this);
+            return policies_base_type::dereference(*this);
+        }
+        pointer operator->() const
+        {
+            return &(operator*());
+        }
+
+        multi_pass& operator++()
+        {
+            policies_base_type::docheck(*this);
+            policies_base_type::increment(*this);
+            return *this;
+        }
+        multi_pass operator++(int)
+        {
+            multi_pass tmp(*this);
+            ++*this;
+            return tmp;
+        }
+
+        void clear_queue(BOOST_SCOPED_ENUM(traits::clear_mode) mode = 
+            traits::clear_mode::clear_if_enabled)
+        {
+            if (mode == traits::clear_mode::clear_always || !inhibit_clear_queue())
+                policies_base_type::clear_queue(*this);
+        }
+        bool inhibit_clear_queue() const
+        {
+            return this->member->inhibit_clear_queue_;
+        }
+        void inhibit_clear_queue(bool flag)
+        {
+            this->member->inhibit_clear_queue_ = flag;
+        }
+
+        bool operator==(multi_pass const& y) const
+        {
+            if (is_eof())
+                return y.is_eof();
+            if (y.is_eof())
+                return false;
+
+            return policies_base_type::equal_to(*this, y);
+        }
+        bool operator<(multi_pass const& y) const
+        {
+            return policies_base_type::less_than(*this, y);
+        }
+
+        bool operator!=(multi_pass const& y)
+        {
+            return !(*this == y);
+        }
+        bool operator>(multi_pass const& y)
+        {
+            return y < *this;
+        }
+        bool operator>=(multi_pass const& y)
+        {
+            return !(*this < y);
+        }
+        bool operator<=(multi_pass const& y)
+        {
+            return !(y < *this);
+        }
+
+        // allow access to base member
+        shared_data_type* shared() const { return this->member; }
+
+    private: // helper functions
+        bool is_eof() const
+        {
+            return (0 == this->member) || policies_base_type::is_eof(*this);
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Generator function
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Policies, typename T>
+    inline multi_pass<T, Policies>
+    make_multi_pass(T& i)
+    {
+        return multi_pass<T, Policies>(i);
+    }
+    template <typename Policies, typename T>
+    inline multi_pass<T, Policies>
+    make_multi_pass(T const& i)
+    {
+        return multi_pass<T, Policies>(i);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    inline multi_pass<T>
+    make_default_multi_pass(T& i)
+    {
+        return multi_pass<T>(i);
+    }
+    template <typename T>
+    inline multi_pass<T>
+    make_default_multi_pass(T const& i)
+    {
+        return multi_pass<T>(i);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Policies>
+    inline void 
+    swap(multi_pass<T, Policies> &x, multi_pass<T, Policies> &y)
+    {
+        x.swap(y);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // define special functions allowing to integrate any multi_pass iterator
+    // with expectation points
+    namespace traits
+    {
+        template <typename T, typename Policies>
+        void clear_queue(multi_pass<T, Policies>& mp
+          , BOOST_SCOPED_ENUM(traits::clear_mode) mode)
+        {
+            mp.clear_queue(mode);
+        }
+
+        template <typename T, typename Policies>
+        void inhibit_clear_queue(multi_pass<T, Policies>& mp, bool flag)
+        {
+            mp.inhibit_clear_queue(flag);
+        }
+
+        template <typename T, typename Policies>
+        bool inhibit_clear_queue(multi_pass<T, Policies>& mp)
+        {
+            return mp.inhibit_clear_queue();
+        }
+    }
+
+}} // namespace boost::spirit
+
+#endif 
+
+
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/iterators/multi_pass_fwd.hpp b/3rdParty/Boost/src/boost/spirit/home/support/iterators/multi_pass_fwd.hpp
new file mode 100644
index 0000000..4724d11
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/iterators/multi_pass_fwd.hpp
@@ -0,0 +1,91 @@
+/*=============================================================================
+    Copyright (c) 2007 Tobias Schwinger
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_ITERATOR_MULTI_PASS_FWD_APR_18_2008_1102AM)
+#define BOOST_SPIRIT_ITERATOR_MULTI_PASS_FWD_APR_18_2008_1102AM
+
+#include <cstddef>
+#include <boost/spirit/home/support/multi_pass_wrapper.hpp>
+#include <boost/swap.hpp>
+
+namespace boost { namespace spirit {
+
+    namespace iterator_policies
+    {
+        // input policies
+        struct input_iterator;
+        struct buffering_input_iterator;
+        struct istream;
+        struct lex_input;
+        struct functor_input;
+        struct split_functor_input;
+
+        // ownership policies
+        struct ref_counted;
+        struct first_owner;
+
+        // checking policies
+        class illegal_backtracking;
+        struct buf_id_check;
+        struct no_check;
+
+        // storage policies
+        struct split_std_deque;
+        template<std::size_t N> struct fixed_size_queue;
+
+        // policy combiner
+#if defined(BOOST_SPIRIT_DEBUG)
+        template<typename Ownership = ref_counted
+          , typename Checking = buf_id_check
+          , typename Input = buffering_input_iterator
+          , typename Storage = split_std_deque>
+        struct default_policy;
+#else
+        template<typename Ownership = ref_counted
+          , typename Checking = no_check
+          , typename Input = buffering_input_iterator
+          , typename Storage = split_std_deque>
+        struct default_policy;
+#endif
+    }
+
+    template <typename T
+      , typename Policies = iterator_policies::default_policy<> >
+    class multi_pass;
+
+    template <typename T, typename Policies>
+    void swap(multi_pass<T, Policies> &x, multi_pass<T, Policies> &y);
+
+}} // namespace boost::spirit
+
+namespace boost { namespace spirit { namespace traits
+{
+    // declare special functions allowing to integrate any multi_pass iterator
+    // with expectation points
+
+    // multi_pass iterators require special handling (for the non-specialized
+    // versions of these functions see support/multi_pass_wrapper.hpp)
+    template <typename T, typename Policies>
+    void clear_queue(multi_pass<T, Policies>&
+      , BOOST_SCOPED_ENUM(clear_mode) mode = clear_mode::clear_if_enabled);
+
+    template <typename T, typename Policies>
+    void inhibit_clear_queue(multi_pass<T, Policies>&, bool);
+
+    template <typename T, typename Policies>
+    bool inhibit_clear_queue(multi_pass<T, Policies>&);
+
+    // Helper template to recognize a multi_pass iterator. This specialization
+    // will be instantiated for any multi_pass iterator.
+    template <typename T, typename Policies>
+    struct is_multi_pass<multi_pass<T, Policies> > : mpl::true_ {};
+
+}}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/make_component.hpp b/3rdParty/Boost/src/boost/spirit/home/support/make_component.hpp
new file mode 100644
index 0000000..8ece2cf
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/make_component.hpp
@@ -0,0 +1,364 @@
+/*=============================================================================
+  Copyright (c) 2001-2011 Joel de Guzman
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_MAKE_COMPONENT_OCTOBER_16_2008_1250PM
+#define BOOST_SPIRIT_MAKE_COMPONENT_OCTOBER_16_2008_1250PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/proto/proto.hpp>
+#include <boost/spirit/home/support/detail/make_cons.hpp>
+#include <boost/spirit/home/support/modify.hpp>
+
+namespace boost { namespace spirit
+{
+    // There is no real "component" class. Each domain is responsible
+    // for creating its own components. You need to specialize this for
+    // each component in your domain. Use this as a guide.
+
+    template <typename Domain, typename Tag, typename Enable = void>
+    struct make_component
+    {
+        template <typename Sig>
+        struct result;
+
+        template <typename This, typename Elements, typename Modifiers>
+        struct result<This(Elements, Modifiers)>;
+
+        template <typename Elements, typename Modifiers>
+        typename result<make_component(Elements, Modifiers)>::type
+        operator()(Elements const& elements, Modifiers const& modifiers) const;
+    };
+
+    namespace tag
+    {
+        // Normally, we use proto tags as-is to distinguish operators.
+        // The special case is proto::tag::subscript. Spirit uses this
+        // as either sementic actions or directives. To distinguish between
+        // the two, we use these special tags below.
+
+        struct directive;
+        struct action;
+    }
+
+    template <typename Domain, typename T, typename Enable = void>
+    struct flatten_tree;
+}}
+
+namespace boost { namespace spirit { namespace detail
+{
+    template <typename Domain>
+    struct make_terminal : proto::transform<make_terminal<Domain> >
+    {
+        template<typename Expr, typename State, typename Data>
+        struct impl : proto::transform_impl<Expr, State, Data>
+        {
+            typedef typename
+                proto::result_of::value<Expr>::type 
+            value;
+
+            typedef typename result_of::make_cons<value>::type elements;
+
+            typedef
+                make_component<Domain, proto::tag::terminal>
+            make_component_;
+
+            typedef typename
+                make_component_::template
+                    result<make_component_(elements, Data)>::type
+            result_type;
+
+            result_type operator()(
+                typename impl::expr_param expr
+              , typename impl::state_param /*state*/
+              , typename impl::data_param data
+            ) const
+            {
+                return typename impl::make_component_()(
+                    detail::make_cons(proto::value(expr))
+                  , data
+                );
+            }
+        };
+    };
+
+    template <typename Domain, typename Tag, typename Grammar>
+    struct make_unary : proto::transform<make_unary<Domain, Tag, Grammar> >
+    {
+        template<typename Expr, typename State, typename Data>
+        struct impl : proto::transform_impl<Expr, State, Data>
+        {
+            typedef typename
+                proto::result_of::child_c<Expr, 0>::type
+            child;
+
+            typedef typename Grammar::
+                template result<Grammar(child, State, Data)>::type
+            child_component;
+
+            typedef typename
+                result_of::make_cons<child_component>::type
+            elements;
+
+            typedef make_component<Domain, Tag> make_component_;
+
+            typedef typename
+                make_component_::template
+                    result<make_component_(elements, Data)>::type
+            result_type;
+
+            result_type operator()(
+                typename impl::expr_param expr
+              , typename impl::state_param state
+              , typename impl::data_param data
+            ) const
+            {
+                return typename impl::make_component_()(
+                    detail::make_cons(
+                        Grammar()(proto::child(expr), state, data))
+                  , data
+                );
+            }
+        };
+    };
+
+    // un-flattened version
+    template <typename Domain, typename Tag, typename Grammar,
+        bool flatten = flatten_tree<Domain, Tag>::value>
+    struct make_binary
+    {
+        template<typename Expr, typename State, typename Data>
+        struct impl : proto::transform_impl<Expr, State, Data>
+        {
+            typedef typename Grammar::
+                template result<Grammar(
+                    typename proto::result_of::child_c<Expr, 0>::type
+                  , State, Data)>::type
+            lhs_component;
+
+            typedef typename Grammar::
+                template result<Grammar(
+                    typename proto::result_of::child_c<Expr, 1>::type
+                  , State, Data)>::type
+            rhs_component;
+
+            typedef typename
+                result_of::make_cons<
+                    lhs_component
+                  , typename result_of::make_cons<rhs_component>::type
+                >::type
+            elements_type;
+
+            typedef make_component<Domain, Tag> make_component_;
+
+            typedef typename
+                make_component_::template
+                    result<make_component_(elements_type, Data)>::type
+            result_type;
+
+            result_type operator()(
+                typename impl::expr_param expr
+              , typename impl::state_param state
+              , typename impl::data_param data
+            ) const
+            {
+                elements_type elements =
+                    detail::make_cons(
+                        Grammar()(
+                            proto::child_c<0>(expr), state, data)       // LHS
+                      , detail::make_cons(
+                            Grammar()(
+                                proto::child_c<1>(expr), state, data)   // RHS
+                        )
+                    );
+
+                return make_component_()(elements, data);
+            }
+        };
+    };
+
+    template <typename Grammar>
+    struct make_binary_helper : proto::transform<make_binary_helper<Grammar> >
+    {
+        template<typename Expr, typename State, typename Data>
+        struct impl : proto::transform_impl<Expr, State, Data>
+        {
+            typedef typename Grammar::
+                template result<Grammar(Expr, State, Data)>::type
+            lhs;
+
+            typedef typename result_of::make_cons<lhs, State>::type result_type;
+
+            result_type operator()(
+                typename impl::expr_param expr
+              , typename impl::state_param state
+              , typename impl::data_param data
+            ) const
+            {
+                return detail::make_cons(Grammar()(expr, state, data), state);
+            }
+        };
+    };
+
+    // Flattened version
+    template <typename Domain, typename Tag, typename Grammar>
+    struct make_binary<Domain, Tag, Grammar, true>
+      : proto::transform<make_binary<Domain, Tag, Grammar> >
+    {
+        template<typename Expr, typename State, typename Data>
+        struct impl : proto::transform_impl<Expr, State, Data>
+        {
+            typedef typename
+                proto::reverse_fold_tree<
+                    proto::_
+                  , proto::make<fusion::nil>
+                  , make_binary_helper<Grammar>
+                >::template impl<Expr, State, Data>
+            reverse_fold_tree;
+
+            typedef typename reverse_fold_tree::result_type elements;
+            typedef make_component<Domain, Tag> make_component_;
+
+            typedef typename
+                make_component_::template
+                    result<make_component_(elements, Data)>::type
+            result_type;
+
+            result_type operator()(
+                typename impl::expr_param expr
+              , typename impl::state_param state
+              , typename impl::data_param data
+            ) const
+            {
+                return make_component_()(
+                    reverse_fold_tree()(expr, state, data), data);
+            }
+        };
+    };
+
+    template <typename Domain, typename Grammar>
+    struct make_directive : proto::transform<make_directive<Domain, Grammar> >
+    {
+        template<typename Expr, typename State, typename Data>
+        struct impl : proto::transform_impl<Expr, State, Data>
+        {
+            typedef typename
+                proto::result_of::child_c<Expr, 0>::type
+            lhs;
+
+            typedef typename
+                proto::result_of::value<lhs>::type
+            tag_type;
+
+            typedef typename modify<Domain>::
+                template result<modify<Domain>(tag_type, Data)>::type
+            modifier_type;
+
+            typedef typename Grammar::
+                template result<Grammar(
+                    typename proto::result_of::child_c<Expr, 1>::type
+                  , State
+                  , modifier_type
+                )>::type
+            rhs_component;
+
+            typedef typename
+                result_of::make_cons<
+                    tag_type
+                  , typename result_of::make_cons<rhs_component>::type
+                >::type
+            elements_type;
+
+            typedef make_component<Domain, tag::directive> make_component_;
+
+            typedef typename
+                make_component_::template
+                    result<make_component_(elements_type, Data)>::type
+            result_type;
+
+            result_type operator()(
+                typename impl::expr_param expr
+              , typename impl::state_param state
+              , typename impl::data_param data
+            ) const
+            {
+                tag_type tag = proto::value(proto::child_c<0>(expr));
+                typename remove_reference<modifier_type>::type
+                    modifier = modify<Domain>()(tag, data);
+
+                elements_type elements =
+                    detail::make_cons(
+                        tag                                 // LHS
+                      , detail::make_cons(
+                            Grammar()(
+                                proto::child_c<1>(expr)     // RHS
+                              , state, modifier)
+                        )
+                    );
+
+                return make_component_()(elements, data);
+            }
+        };
+    };
+
+    template <typename Domain, typename Grammar>
+    struct make_action : proto::transform<make_action<Domain, Grammar> >
+    {
+        template<typename Expr, typename State, typename Data>
+        struct impl : proto::transform_impl<Expr, State, Data>
+        {
+            typedef typename Grammar::
+                template result<Grammar(
+                    typename proto::result_of::child_c<Expr, 0>::type
+                  , State
+                  , Data
+                )>::type
+            lhs_component;
+
+            typedef typename
+                proto::result_of::value<
+                    typename proto::result_of::child_c<Expr, 1>::type
+                >::type
+            rhs_component;
+
+            typedef typename
+                result_of::make_cons<
+                    lhs_component
+                  , typename result_of::make_cons<rhs_component>::type
+                >::type
+            elements_type;
+
+            typedef make_component<Domain, tag::action> make_component_;
+
+            typedef typename
+                make_component_::template
+                    result<make_component_(elements_type, Data)>::type
+            result_type;
+
+            result_type operator()(
+                typename impl::expr_param expr
+              , typename impl::state_param state
+              , typename impl::data_param data
+            ) const
+            {
+                elements_type elements =
+                    detail::make_cons(
+                        Grammar()(
+                            proto::child_c<0>(expr), state, data)   // LHS
+                      , detail::make_cons(
+                            proto::value(proto::child_c<1>(expr)))  // RHS
+                    );
+
+                return make_component_()(elements, data);
+            }
+        };
+    };
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/meta_compiler.hpp b/3rdParty/Boost/src/boost/spirit/home/support/meta_compiler.hpp
new file mode 100644
index 0000000..042ebf8
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/meta_compiler.hpp
@@ -0,0 +1,318 @@
+/*=============================================================================
+  Copyright (c) 2001-2011 Joel de Guzman
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_META_COMPILER_OCTOBER_16_2008_1258PM
+#define BOOST_SPIRIT_META_COMPILER_OCTOBER_16_2008_1258PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/proto/proto.hpp>
+#include <boost/spirit/home/support/make_component.hpp>
+#include <boost/spirit/home/support/modify.hpp>
+#include <boost/spirit/home/support/detail/make_cons.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/assert_msg.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+
+namespace boost { namespace spirit
+{
+    // Some defaults...
+
+    template <typename Domain, typename Tag, typename Enable = void>
+    struct use_operator : mpl::false_ {};
+
+    template <typename Domain, typename T, typename Enable = void>
+    struct use_function : mpl::false_ {};
+
+    template <typename Domain, typename T, typename Enable = void>
+    struct use_directive : mpl::false_ {};
+
+    template <typename Domain, typename T, typename Enable /* = void */>
+    struct is_modifier_directive : mpl::false_ {};
+
+    template <typename Domain, typename T, typename Enable = void>
+    struct use_terminal : mpl::false_ {};
+
+    template <typename Domain, typename T, typename Enable /*= void*/>
+    struct flatten_tree : mpl::false_ {};
+
+    // Our meta-compiler. This is the main engine that hooks Spirit
+    // to the proto expression template engine.
+
+    template <typename Domain>
+    struct meta_compiler
+    {
+        struct meta_grammar;
+
+        BOOST_SPIRIT_ASSERT_MSG((
+            !use_operator<Domain, proto::tag::subscript>::value
+        ), error_proto_tag_subscript_cannot_be_used, ());
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1400)
+        // this is the non-broken part for compilers properly supporting 
+        // partial template specialization (VC7.1 does not)
+        struct cases
+        {
+            template <typename Tag, typename Enable = void>
+            struct case_
+              : proto::not_<proto::_>
+            {};
+
+            ///////////////////////////////////////////////////////////////////
+            // terminals
+            ///////////////////////////////////////////////////////////////////
+            template <typename Enable>
+            struct case_<proto::tag::terminal, Enable>
+              : proto::when<
+                    proto::if_<use_terminal<Domain, proto::_value>()>,
+                    detail::make_terminal<Domain>
+                >
+            {};
+
+            template <typename Tag>
+            struct case_<Tag, typename enable_if<use_operator<Domain, Tag> >::type>
+              : proto::or_<
+            ///////////////////////////////////////////////////////////////////
+            // binary operators
+            ///////////////////////////////////////////////////////////////////
+                    proto::when<proto::binary_expr<Tag, meta_grammar, meta_grammar>,
+                        detail::make_binary<Domain, Tag, meta_grammar>
+                    >,
+            ///////////////////////////////////////////////////////////////////
+            // unary operators
+            ///////////////////////////////////////////////////////////////////
+                    proto::when<proto::unary_expr<Tag, meta_grammar>,
+                        detail::make_unary<Domain, Tag, meta_grammar>
+                    >
+                >
+            {};
+
+            template <typename Enable>
+            struct case_<proto::tag::subscript, Enable>
+              : proto::or_<
+            ///////////////////////////////////////////////////////////////////
+            // directives
+            ///////////////////////////////////////////////////////////////////
+                    proto::when<proto::binary_expr<proto::tag::subscript
+                      , proto::and_<
+                            proto::terminal<proto::_>
+                          , proto::if_<use_directive<Domain, proto::_value >()> >
+                      , meta_grammar>,
+                        detail::make_directive<Domain, meta_grammar>
+                    >,
+            ///////////////////////////////////////////////////////////////////
+            // semantic actions
+            ///////////////////////////////////////////////////////////////////
+                    proto::when<proto::binary_expr<proto::tag::subscript
+                      , meta_grammar, proto::_>,
+                        detail::make_action<Domain, meta_grammar>
+                    >
+                >
+            {};
+        };
+#else
+        // this part actually constitutes invalid C++ code, but it allows us to
+        // convince VC7.1 to do what we want
+        struct cases
+        {
+            template <typename Tag, typename Enable = void>
+            struct case_
+              : proto::not_<proto::_>
+            {};
+
+            ///////////////////////////////////////////////////////////////////
+            // terminals
+            ///////////////////////////////////////////////////////////////////
+            template <>
+            struct case_<proto::tag::terminal>
+              : proto::when<
+                    proto::if_<use_terminal<Domain, proto::_value>()>,
+                    detail::make_terminal<Domain>
+                >
+            {};
+
+            template <typename Tag>
+            struct case_<Tag>
+              : proto::or_<
+            ///////////////////////////////////////////////////////////////////
+            // binary operators
+            ///////////////////////////////////////////////////////////////////
+                    proto::when<proto::binary_expr<
+                        typename enable_if<use_operator<Domain, Tag>, Tag>::type
+                          , meta_grammar, meta_grammar>
+                      , detail::make_binary<Domain, Tag, meta_grammar>
+                    >,
+            ///////////////////////////////////////////////////////////////////
+            // unary operators
+            ///////////////////////////////////////////////////////////////////
+                    proto::when<proto::unary_expr<
+                        typename enable_if<use_operator<Domain, Tag>, Tag>::type
+                          , meta_grammar>
+                      , detail::make_unary<Domain, Tag, meta_grammar>
+                    >
+                >
+            {};
+
+            template <>
+            struct case_<proto::tag::subscript>
+              : proto::or_<
+            ///////////////////////////////////////////////////////////////////
+            // directives
+            ///////////////////////////////////////////////////////////////////
+                    proto::when<proto::binary_expr<proto::tag::subscript
+                      , proto::and_<
+                            proto::terminal<proto::_>
+                          , proto::if_<use_directive<Domain, proto::_value >()> >
+                      , meta_grammar>,
+                        detail::make_directive<Domain, meta_grammar>
+                    >,
+            ///////////////////////////////////////////////////////////////////
+            // semantic actions
+            ///////////////////////////////////////////////////////////////////
+                    proto::when<proto::binary_expr<proto::tag::subscript
+                      , meta_grammar, proto::_>,
+                        detail::make_action<Domain, meta_grammar>
+                    >
+                >
+            {};
+        };
+#endif
+
+        struct meta_grammar
+          : proto::switch_<cases>
+        {};
+    };
+
+    namespace result_of
+    {
+        // Default case
+        template <typename Domain, typename Expr
+          , typename Modifiers = unused_type, typename Enable = void>
+        struct compile
+        {
+            typedef typename meta_compiler<Domain>::meta_grammar meta_grammar;
+            typedef typename meta_grammar::
+                template result<meta_grammar(Expr, mpl::void_, Modifiers)>::type
+            type;
+        };
+
+        // If Expr is not a proto expression, make it a terminal
+        template <typename Domain, typename Expr, typename Modifiers>
+        struct compile<Domain, Expr, Modifiers,
+            typename disable_if<proto::is_expr<Expr> >::type>
+          : compile<Domain, typename proto::terminal<Expr>::type, Modifiers> {};
+    }
+
+    namespace traits
+    {
+        // Check if Expr matches the domain's grammar
+        template <typename Domain, typename Expr>
+        struct matches :
+            proto::matches<
+                typename proto::result_of::as_expr<
+                    typename remove_reference<Expr>::type>::type,
+                typename meta_compiler<Domain>::meta_grammar
+            >
+        {
+        };
+    }
+
+    namespace detail
+    {
+        template <typename Domain>
+        struct compiler
+        {
+            // Default case
+            template <typename Expr, typename Modifiers>
+            static typename spirit::result_of::compile<Domain, Expr, Modifiers>::type
+            compile(Expr const& expr, Modifiers modifiers, mpl::true_)
+            {
+                typename meta_compiler<Domain>::meta_grammar compiler;
+                return compiler(expr, mpl::void_(), modifiers);
+            }
+
+            // If Expr is not a proto expression, make it a terminal
+            template <typename Expr, typename Modifiers>
+            static typename spirit::result_of::compile<Domain, Expr, Modifiers>::type
+            compile(Expr const& expr, Modifiers modifiers, mpl::false_)
+            {
+                typename meta_compiler<Domain>::meta_grammar compiler;
+                typedef typename detail::as_meta_element<Expr>::type expr_;
+                typename proto::terminal<expr_>::type term = {expr};
+                return compiler(term, mpl::void_(), modifiers);
+            }
+        };
+    }
+
+    template <typename Domain, typename Expr>
+    inline typename result_of::compile<Domain, Expr, unused_type>::type
+    compile(Expr const& expr)
+    {
+        typedef typename proto::is_expr<Expr>::type is_expr;
+        return detail::compiler<Domain>::compile(expr, unused, is_expr());
+    }
+
+    template <typename Domain, typename Expr, typename Modifiers>
+    inline typename result_of::compile<Domain, Expr, Modifiers>::type
+    compile(Expr const& expr, Modifiers modifiers)
+    {
+        typedef typename proto::is_expr<Expr>::type is_expr;
+        return detail::compiler<Domain>::compile(expr, modifiers, is_expr());
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Elements, template <typename Subject> class generator>
+    struct make_unary_composite
+    {
+        typedef typename
+            fusion::result_of::value_at_c<Elements, 0>::type
+        element_type;
+        typedef generator<element_type> result_type;
+        result_type operator()(Elements const& elements, unused_type) const
+        {
+            return result_type(fusion::at_c<0>(elements));
+        }
+    };
+
+    template <typename Elements, template <typename Left, typename Right> class generator>
+    struct make_binary_composite
+    {
+        typedef typename
+            fusion::result_of::value_at_c<Elements, 0>::type
+        left_type;
+        typedef typename
+            fusion::result_of::value_at_c<Elements, 1>::type
+        right_type;
+        typedef generator<left_type, right_type> result_type;
+
+        result_type operator()(Elements const& elements, unused_type) const
+        {
+            return result_type(
+                fusion::at_c<0>(elements)
+              , fusion::at_c<1>(elements)
+            );
+        }
+    };
+
+    template <typename Elements, template <typename Elements_> class generator>
+    struct make_nary_composite
+    {
+        typedef generator<Elements> result_type;
+        result_type operator()(Elements const& elements, unused_type) const
+        {
+            return result_type(elements);
+        }
+    };
+
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/modify.hpp b/3rdParty/Boost/src/boost/spirit/home/support/modify.hpp
new file mode 100644
index 0000000..e68d726
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/modify.hpp
@@ -0,0 +1,123 @@
+/*=============================================================================
+  Copyright (c) 2001-2011 Joel de Guzman
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_MODIFY_OCTOBER_25_2008_0142PM
+#define BOOST_SPIRIT_MODIFY_OCTOBER_25_2008_0142PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/proto/proto.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_base_of.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+
+namespace boost { namespace spirit
+{
+    template <typename Domain, typename T, typename Enable = void>
+    struct is_modifier_directive;
+
+    // Testing if a modifier set includes a modifier T involves
+    // checking for inheritance (i.e. Modifiers is derived from T)
+    template <typename Modifiers, typename T>
+    struct has_modifier
+        : is_base_of<T, Modifiers> {};
+
+    // Adding modifiers is done using multi-inheritance
+    template <typename Current, typename New, typename Enable = void>
+    struct compound_modifier : Current, New
+    {
+        compound_modifier()
+          : Current(), New() {}
+
+        compound_modifier(Current const& current, New const& new_)
+          : Current(current), New(new_) {}
+    };
+
+    // Don't add if New is already in Current
+    template <typename Current, typename New>
+    struct compound_modifier<
+        Current, New, typename enable_if<has_modifier<Current, New> >::type>
+      : Current
+    {
+        compound_modifier()
+          : Current() {}
+
+        compound_modifier(Current const& current, New const&)
+          : Current(current) {}
+    };
+
+    // Special case if Current is unused_type
+    template <typename New, typename Enable>
+    struct compound_modifier<unused_type, New, Enable> : New
+    {
+        compound_modifier()
+          : New() {}
+
+        compound_modifier(unused_type, New const& new_)
+          : New(new_) {}
+    };
+
+    // Domains may specialize this modify metafunction to allow
+    // directives to add information to the Modifier template
+    // parameter that is passed to the make_component metafunction.
+    // By default, we return the modifiers untouched
+    template <typename Domain, typename Enable = void>
+    struct modify
+    {
+        template <typename Sig>
+        struct result;
+
+        template <typename This, typename Tag, typename Modifiers>
+        struct result<This(Tag, Modifiers)>
+        {
+            typedef typename remove_const<
+                typename remove_reference<Tag>::type>::type
+            tag_type;
+            typedef typename remove_const<
+                typename remove_reference<Modifiers>::type>::type
+            modifiers_type;
+
+            typedef typename mpl::if_<
+                is_modifier_directive<Domain, tag_type>
+              , compound_modifier<modifiers_type, tag_type>
+              , Modifiers>::type
+            type;
+        };
+
+        template <typename Tag, typename Modifiers>
+        typename result<modify(Tag, Modifiers)>::type
+        operator()(Tag tag, Modifiers modifiers) const
+        {
+            return op(tag, modifiers, is_modifier_directive<Domain, Tag>());
+        }
+
+        template <typename Tag, typename Modifiers>
+        Modifiers
+        op(Tag /*tag*/, Modifiers modifiers, mpl::false_) const
+        {
+            return modifiers;
+        }
+
+        template <typename Tag, typename Modifiers>
+        compound_modifier<Modifiers, Tag>
+        op(Tag tag, Modifiers modifiers, mpl::true_) const
+        {
+            return compound_modifier<Modifiers, Tag>(modifiers, tag);
+        }
+    };
+}}
+
+namespace boost { namespace proto
+{
+    template <typename Domain, typename Enable>
+    struct is_callable<spirit::modify<Domain, Enable> >
+      : mpl::true_ {};
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/multi_pass_wrapper.hpp b/3rdParty/Boost/src/boost/spirit/home/support/multi_pass_wrapper.hpp
new file mode 100644
index 0000000..ec5fa36
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/multi_pass_wrapper.hpp
@@ -0,0 +1,52 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_ITERATOR_MULTI_PASS_WRAPPER_JUL_12_2009_0914PM)
+#define BOOST_SPIRIT_ITERATOR_MULTI_PASS_WRAPPER_JUL_12_2009_0914PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/mpl/bool.hpp>
+#include <boost/spirit/home/support/detail/scoped_enum_emulation.hpp>
+
+namespace boost { namespace spirit { namespace traits
+{
+    // declare special functions allowing to integrate any multi_pass iterator
+    // with expectation points
+
+    // normal iterators require no special handling
+    BOOST_SCOPED_ENUM_START(clear_mode) 
+    {
+        clear_if_enabled,
+        clear_always
+    };
+    BOOST_SCOPED_ENUM_END
+
+    template <typename Iterator>
+    void clear_queue(Iterator&
+      , BOOST_SCOPED_ENUM(clear_mode) /*mode*/ = clear_mode::clear_if_enabled) 
+    {}
+
+    template <typename Iterator>
+    void inhibit_clear_queue(Iterator&, bool) 
+    {}
+
+    template <typename Iterator>
+    bool inhibit_clear_queue(Iterator&) 
+    { 
+        return false; 
+    }
+
+    // Helper template to recognize a multi_pass iterator. This specialization
+    // will be instantiated for any non-multi_pass iterator.
+    template <typename Iterator>
+    struct is_multi_pass : mpl::false_ {};
+
+}}}
+
+#endif
+
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/nonterminal/expand_arg.hpp b/3rdParty/Boost/src/boost/spirit/home/support/nonterminal/expand_arg.hpp
new file mode 100644
index 0000000..f037acc
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/nonterminal/expand_arg.hpp
@@ -0,0 +1,88 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_EXPAND_ARG_FEB_19_2007_1107AM)
+#define BOOST_SPIRIT_EXPAND_ARG_FEB_19_2007_1107AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/utility/result_of.hpp>
+#include <boost/type_traits/is_scalar.hpp>
+#include <boost/spirit/home/support/string_traits.hpp>
+
+namespace boost { namespace spirit { namespace detail
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Context>
+    struct expand_arg
+    {
+        template <typename T>
+        struct result_type
+        {
+            // This is a temporary hack. The better way is to detect if T
+            // can be called given unused context.
+            typedef typename
+                mpl::eval_if<
+                    mpl::or_<is_scalar<T>, traits::is_string<T> >
+                  , mpl::identity<T const &>
+                  , boost::result_of<T(unused_type, Context)>
+                >::type
+            type;
+        };
+
+        template <typename T>
+        struct result;
+
+        template <typename F, typename A0>
+        struct result<F(A0)>
+          : result_type<A0> {};
+
+        template <typename F, typename A0>
+        struct result<F(A0&)>
+          : result_type<A0> {};
+
+        expand_arg(Context& context)
+          : context(context)
+        {
+        }
+
+        template <typename T>
+        typename result_type<T>::type
+        call(T const& f, mpl::false_) const
+        {
+            return f(unused, context);
+        }
+
+        template <typename T>
+        typename result_type<T>::type
+        call(T const& val, mpl::true_) const
+        {
+            return val;
+        }
+
+        template <typename T>
+        typename result_type<T>::type
+        operator()(T const& x) const
+        {
+            return call(x, mpl::or_<is_scalar<T>, traits::is_string<T> >());
+        }
+
+        Context& context;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        expand_arg& operator= (expand_arg const&);
+    };
+
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/nonterminal/extract_param.hpp b/3rdParty/Boost/src/boost/spirit/home/support/nonterminal/extract_param.hpp
new file mode 100644
index 0000000..6149932
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/nonterminal/extract_param.hpp
@@ -0,0 +1,123 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c) 2009 Francois Barel
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_EXTRACT_PARAM_AUGUST_08_2009_0848AM)
+#define BOOST_SPIRIT_EXTRACT_PARAM_AUGUST_08_2009_0848AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/meta_compiler.hpp>
+#include <boost/spirit/home/support/nonterminal/locals.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+
+#include <boost/function_types/is_function.hpp>
+#include <boost/function_types/parameter_types.hpp>
+#include <boost/function_types/result_type.hpp>
+#include <boost/fusion/include/as_list.hpp>
+#include <boost/fusion/include/as_vector.hpp>
+#include <boost/mpl/deref.hpp>
+#include <boost/mpl/end.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/find_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/placeholders.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace spirit { namespace detail
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Helpers to extract params (locals, attributes, ...) from nonterminal
+    // template arguments
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Types, typename Pred, typename Default>
+    struct extract_param
+    {
+        typedef typename mpl::find_if<Types, Pred>::type pos;
+
+        typedef typename
+            mpl::eval_if<
+                is_same<pos, typename mpl::end<Types>::type>
+              , mpl::identity<Default>
+              , mpl::deref<pos>
+            >::type
+        type;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Types>
+    struct extract_locals
+      : fusion::result_of::as_vector<
+            typename extract_param<
+                Types
+              , is_locals<mpl::_>
+              , locals<>
+            >::type
+        >
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Domain, typename Types>
+    struct extract_component
+      : spirit::result_of::compile<
+            Domain
+          , typename extract_param<
+                Types
+              , traits::matches<Domain, mpl::_>
+              , unused_type
+            >::type
+        >
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Types>
+    struct extract_sig
+      : extract_param<
+            Types
+          , function_types::is_function<mpl::_>
+          , void()
+        >
+    {};
+
+    template <typename Sig>
+    struct attr_from_sig
+    {
+        typedef typename function_types::result_type<Sig>::type attr;
+
+        typedef typename
+            mpl::if_<
+                is_same<attr, void>
+              , unused_type
+              , attr
+            >::type
+        type;
+    };
+
+    template <typename Sig>
+    struct params_from_sig
+    {
+        typedef typename function_types::parameter_types<Sig>::type params;
+
+        typedef typename fusion::result_of::as_list<params>::type type;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Types>
+    struct extract_encoding
+      : extract_param<
+            Types
+          , is_char_encoding<mpl::_>
+          , unused_type
+        >
+    {};
+}}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/nonterminal/locals.hpp b/3rdParty/Boost/src/boost/spirit/home/support/nonterminal/locals.hpp
new file mode 100644
index 0000000..4db0349
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/nonterminal/locals.hpp
@@ -0,0 +1,54 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_LOCALS_APRIL_03_2007_0506PM)
+#define BOOST_SPIRIT_LOCALS_APRIL_03_2007_0506PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/mpl/bool.hpp>
+
+#if !defined(BOOST_SPIRIT_MAX_LOCALS_SIZE)
+# define BOOST_SPIRIT_MAX_LOCALS_SIZE 10
+#else
+# if BOOST_SPIRIT_MAX_LOCALS_SIZE < 3
+#   undef BOOST_SPIRIT_MAX_LOCALS_SIZE
+#   define BOOST_SPIRIT_MAX_LOCALS_SIZE 10
+# endif
+#endif
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <
+        BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
+            BOOST_SPIRIT_MAX_LOCALS_SIZE, typename T, mpl::na)
+    >
+    struct locals
+      : mpl::vector<BOOST_PP_ENUM_PARAMS(BOOST_SPIRIT_MAX_LOCALS_SIZE, T)> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename T>
+        struct is_locals
+          : mpl::false_
+        {};
+
+        template <BOOST_PP_ENUM_PARAMS(BOOST_SPIRIT_MAX_LOCALS_SIZE, typename T)>
+        struct is_locals<locals<BOOST_PP_ENUM_PARAMS(BOOST_SPIRIT_MAX_LOCALS_SIZE, T)> >
+          : mpl::true_
+        {};
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/string_traits.hpp b/3rdParty/Boost/src/boost/spirit/home/support/string_traits.hpp
new file mode 100644
index 0000000..eaaeafc
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/string_traits.hpp
@@ -0,0 +1,357 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c)      2010 Bryce Lelbach
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+================================================_==============================*/
+#if !defined(BOOST_SPIRIT_STRING_TRAITS_OCTOBER_2008_1252PM)
+#define BOOST_SPIRIT_STRING_TRAITS_OCTOBER_2008_1252PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/container.hpp>
+#include <string>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/proto/proto_fwd.hpp>
+#include <boost/type_traits/is_const.hpp>
+#if defined(__GNUC__) && (__GNUC__ < 4)
+#include <boost/type_traits/add_const.hpp>
+#endif
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Determine if T is a character type
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct is_char : mpl::false_ {};
+
+    template <typename T>
+    struct is_char<T const> : is_char<T> {};
+
+    template <>
+    struct is_char<char> : mpl::true_ {};
+
+    template <>
+    struct is_char<wchar_t> : mpl::true_ {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Determine if T is a string
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct is_string : mpl::false_ {};
+
+    template <typename T>
+    struct is_string<T const> : is_string<T> {};
+
+    template <>
+    struct is_string<char const*> : mpl::true_ {};
+
+    template <>
+    struct is_string<wchar_t const*> : mpl::true_ {};
+
+    template <>
+    struct is_string<char*> : mpl::true_ {};
+
+    template <>
+    struct is_string<wchar_t*> : mpl::true_ {};
+
+    template <std::size_t N>
+    struct is_string<char[N]> : mpl::true_ {};
+
+    template <std::size_t N>
+    struct is_string<wchar_t[N]> : mpl::true_ {};
+
+    template <std::size_t N>
+    struct is_string<char const[N]> : mpl::true_ {};
+
+    template <std::size_t N>
+    struct is_string<wchar_t const[N]> : mpl::true_ {};
+
+    template <std::size_t N>
+    struct is_string<char(&)[N]> : mpl::true_ {};
+
+    template <std::size_t N>
+    struct is_string<wchar_t(&)[N]> : mpl::true_ {};
+
+    template <std::size_t N>
+    struct is_string<char const(&)[N]> : mpl::true_ {};
+
+    template <std::size_t N>
+    struct is_string<wchar_t const(&)[N]> : mpl::true_ {};
+
+    template <typename T, typename Traits, typename Allocator>
+    struct is_string<std::basic_string<T, Traits, Allocator> > : mpl::true_ {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Get the underlying char type of a string
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct char_type_of;
+
+    template <typename T>
+    struct char_type_of<T const> : char_type_of<T> {};
+
+    template <>
+    struct char_type_of<char> : mpl::identity<char> {};
+
+    template <>
+    struct char_type_of<wchar_t> : mpl::identity<wchar_t> {};
+
+    template <>
+    struct char_type_of<char const*> : mpl::identity<char const> {};
+
+    template <>
+    struct char_type_of<wchar_t const*> : mpl::identity<wchar_t const> {};
+
+    template <>
+    struct char_type_of<char*> : mpl::identity<char> {};
+
+    template <>
+    struct char_type_of<wchar_t*> : mpl::identity<wchar_t> {};
+
+    template <std::size_t N>
+    struct char_type_of<char[N]> : mpl::identity<char> {};
+
+    template <std::size_t N>
+    struct char_type_of<wchar_t[N]> : mpl::identity<wchar_t> {};
+
+    template <std::size_t N>
+    struct char_type_of<char const[N]> : mpl::identity<char const> {};
+
+    template <std::size_t N>
+    struct char_type_of<wchar_t const[N]> : mpl::identity<wchar_t const> {};
+
+    template <std::size_t N>
+    struct char_type_of<char(&)[N]> : mpl::identity<char> {};
+
+    template <std::size_t N>
+    struct char_type_of<wchar_t(&)[N]> : mpl::identity<wchar_t> {};
+
+    template <std::size_t N>
+    struct char_type_of<char const(&)[N]> : mpl::identity<char const> {};
+
+    template <std::size_t N>
+    struct char_type_of<wchar_t const(&)[N]> : mpl::identity<wchar_t const> {};
+
+    template <typename T, typename Traits, typename Allocator>
+    struct char_type_of<std::basic_string<T, Traits, Allocator> >
+      : mpl::identity<T> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Get the C string from a string
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename String>
+    struct extract_c_string;
+
+    template <typename String>
+    struct extract_c_string
+    {
+        typedef typename char_type_of<String>::type char_type;
+
+        template <typename T>
+        static T const* call (T* str)
+        {
+            return (T const*)str; 
+        }
+
+        template <typename T>
+        static T const* call (T const* str)
+        {
+            return str; 
+        }
+    }; 
+    
+    // Forwarder that strips const
+    template <typename T>
+    struct extract_c_string<T const>
+    {
+        static typename extract_c_string<T>::char_type const* call (T const str)
+        {
+            return extract_c_string<T>::call(str);
+        }
+    };
+
+    // Forwarder that strips references
+    template <typename T>
+    struct extract_c_string<T&>
+    {
+        static typename extract_c_string<T>::char_type const* call (T& str)
+        {
+            return extract_c_string<T>::call(str);
+        }
+    };
+
+    // Forwarder that strips const references
+    template <typename T>
+    struct extract_c_string<T const&>
+    {
+        static typename extract_c_string<T>::char_type const* call (T const& str)
+        {
+            return extract_c_string<T>::call(str);
+        }
+    };
+
+    template <typename T, typename Traits, typename Allocator>
+    struct extract_c_string<std::basic_string<T, Traits, Allocator> >
+    {
+        typedef T char_type;
+
+        typedef std::basic_string<T, Traits, Allocator> string;
+
+        static T const* call (string& str)
+        {
+            return str.c_str();
+        }
+
+        static T const* call (string const& str)
+        {
+            return str.c_str();
+        }
+    };
+    
+    template <typename T>
+    typename extract_c_string<T*>::char_type const*
+    get_c_string (T* str)
+    {
+        return extract_c_string<T*>::call(str);
+    }
+
+    template <typename T>
+    typename extract_c_string<T const*>::char_type const*
+    get_c_string (T const* str)
+    {
+        return extract_c_string<T const*>::call(str);
+    }
+    
+    template <typename String>
+    typename extract_c_string<String>::char_type const*
+    get_c_string (String& str)
+    {
+        return extract_c_string<String>::call(str);
+    }
+
+    template <typename String>
+    typename extract_c_string<String>::char_type const*
+    get_c_string (String const& str)
+    {
+        return extract_c_string<String>::call(str);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Get the begin/end iterators from a string
+    ///////////////////////////////////////////////////////////////////////////
+
+    // Implementation for C-style strings.
+
+// gcc 3.x.x has problems resolving ambiguities here
+#if defined(__GNUC__) && (__GNUC__ < 4)
+    template <typename T>
+    inline typename add_const<T>::type * get_begin(T* str) { return str; }
+
+    template <typename T>
+    inline typename add_const<T>::type* get_end(T* str)
+    {
+        T* last = str;
+        while (*last)
+            last++;
+        return last;
+    }
+#else
+    template <typename T>
+    inline T const* get_begin(T const* str) { return str; }
+
+    template <typename T>
+    inline T* get_begin(T* str) { return str; }
+
+    template <typename T>
+    inline T const* get_end(T const* str)
+    {
+        T const* last = str;
+        while (*last)
+            last++;
+        return last;
+    }
+
+    template <typename T>
+    inline T* get_end(T* str)
+    {
+        T* last = str;
+        while (*last)
+            last++;
+        return last;
+    }
+#endif
+
+    // Implementation for containers (includes basic_string).
+    template <typename T, typename Str>
+    inline typename Str::const_iterator get_begin(Str const& str)
+    { return str.begin(); }
+
+    template <typename T, typename Str>
+    inline typename Str::iterator
+    get_begin(Str& str BOOST_PROTO_DISABLE_IF_IS_CONST(Str))
+    { return str.begin(); }
+
+    template <typename T, typename Str>
+    inline typename Str::const_iterator get_end(Str const& str)
+    { return str.end(); }
+
+    template <typename T, typename Str>
+    inline typename Str::iterator
+    get_end(Str& str BOOST_PROTO_DISABLE_IF_IS_CONST(Str))
+    { return str.end(); }
+
+    // Default implementation for other types: try a C-style string
+    // conversion.
+    // These overloads are explicitly disabled for containers,
+    // as they would be ambiguous with the previous ones.
+    template <typename T, typename Str>
+    inline typename disable_if<is_container<Str>
+      , T const*>::type get_begin(Str const& str)
+    { return str; }
+
+    template <typename T, typename Str>
+    inline typename disable_if<is_container<Str>
+      , T const*>::type get_end(Str const& str)
+    { return get_end(get_begin<T>(str)); }
+}
+
+namespace result_of
+{
+    template <typename Char, typename T, typename Enable = void>
+    struct get_begin
+    {
+        typedef typename traits::char_type_of<T>::type char_type;
+
+        typedef typename mpl::if_<
+            is_const<char_type>
+          , char_type const 
+          , char_type
+        >::type* type;
+    };
+
+    template <typename Char, typename Str>
+    struct get_begin<Char, Str
+      , typename enable_if<traits::is_container<Str> >::type>
+    {
+        typedef typename mpl::if_<
+            is_const<Str>
+          , typename Str::const_iterator
+          , typename Str::iterator
+        >::type type;
+    };
+
+    template <typename Char, typename T>
+    struct get_end : get_begin<Char, T> {};
+}
+
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/terminal.hpp b/3rdParty/Boost/src/boost/spirit/home/support/terminal.hpp
new file mode 100644
index 0000000..0926772
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/terminal.hpp
@@ -0,0 +1,535 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_TERMINAL_NOVEMBER_04_2008_0906AM)
+#define BOOST_SPIRIT_TERMINAL_NOVEMBER_04_2008_0906AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/proto/proto.hpp>
+#include <boost/fusion/include/void.hpp>
+#include <boost/spirit/include/phoenix_core.hpp>
+#include <boost/spirit/include/phoenix_function.hpp>
+#include <boost/spirit/home/support/meta_compiler.hpp>
+#include <boost/spirit/home/support/detail/make_vector.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+
+namespace boost { namespace spirit
+{
+    template <typename Terminal, typename Args>
+    struct terminal_ex
+    {
+        typedef Terminal terminal_type;
+        typedef Args args_type;
+
+        terminal_ex(Args const& args)
+          : args(args) {}
+        terminal_ex(Args const& args, Terminal const& term)
+          : args(args), term(term) {}
+
+        Args args;  // Args is guaranteed to be a fusion::vectorN so you
+                    // can use that template for detection and specialization
+        Terminal term;
+    };
+
+    template <typename Terminal, typename Actor, int Arity>
+    struct lazy_terminal
+    {
+        typedef Terminal terminal_type;
+        typedef Actor actor_type;
+        static int const arity = Arity;
+
+        lazy_terminal(Actor const& actor)
+          : actor(actor) {}
+        lazy_terminal(Actor const& actor, Terminal const& term)
+          : actor(actor), term(term) {}
+
+        Actor actor;
+        Terminal term;
+    };
+
+    template <typename Domain, typename Terminal, int Arity, typename Enable = void>
+    struct use_lazy_terminal : mpl::false_ {};
+
+    template <typename Domain, typename Terminal, int Arity, typename Enable = void>
+    struct use_lazy_directive : mpl::false_ {};
+
+    template <typename Domain, typename Terminal, int Arity, typename Actor>
+    struct use_terminal<Domain, lazy_terminal<Terminal, Actor, Arity> >
+        : use_lazy_terminal<Domain, Terminal, Arity> {};
+
+    template <typename Domain, typename Terminal, int Arity, typename Actor>
+    struct use_directive<Domain, lazy_terminal<Terminal, Actor, Arity> >
+        : use_lazy_directive<Domain, Terminal, Arity> {};
+
+    template <
+        typename F
+      , typename A0 = unused_type
+      , typename A1 = unused_type
+      , typename A2 = unused_type
+      , typename Unused = unused_type
+    >
+    struct make_lazy;
+
+    template <typename F, typename A0>
+    struct make_lazy<F, A0>
+    {
+        typedef typename
+            proto::terminal<
+                lazy_terminal<
+                    typename F::terminal_type
+                  , phoenix::actor<
+                        typename phoenix::as_composite<
+                            phoenix::detail::function_eval<1>, F, A0
+                        >::type
+                    >
+                  , 1 // arity
+                >
+            >::type
+        result_type;
+        typedef result_type type;
+
+        result_type
+        operator()(F f, A0 const& _0) const
+        {
+            typedef typename result_type::proto_child0 child_type;
+            return result_type::make(child_type(
+                phoenix::compose<phoenix::detail::function_eval<1> >(f, _0)
+              , f.proto_base().child0
+            ));
+        }
+    };
+
+    template <typename F, typename A0, typename A1>
+    struct make_lazy<F, A0, A1>
+    {
+        typedef typename
+            proto::terminal<
+               lazy_terminal<
+                    typename F::terminal_type
+                  , phoenix::actor<
+                        typename phoenix::as_composite<
+                            phoenix::detail::function_eval<2>, F, A0, A1
+                        >::type
+                    >
+                  , 2 // arity
+                >
+            >::type
+        result_type;
+        typedef result_type type;
+
+        result_type
+        operator()(F f, A0 const& _0, A1 const& _1) const
+        {
+            typedef typename result_type::proto_child0 child_type;
+            return result_type::make(child_type(
+                phoenix::compose<phoenix::detail::function_eval<2> >(f, _0, _1)
+              , f.proto_base().child0
+            ));
+        }
+    };
+
+    template <typename F, typename A0, typename A1, typename A2>
+    struct make_lazy<F, A0, A1, A2>
+    {
+        typedef typename
+            proto::terminal<
+               lazy_terminal<
+                    typename F::terminal_type
+                  , phoenix::actor<
+                        typename phoenix::as_composite<
+                            phoenix::detail::function_eval<3>, F, A0, A1, A2
+                        >::type
+                    >
+                  , 3 // arity
+                >
+            >::type
+        result_type;
+        typedef result_type type;
+
+        result_type
+        operator()(F f, A0 const& _0, A1 const& _1, A2 const& _2) const
+        {
+            typedef typename result_type::proto_child0 child_type;
+            return result_type::make(child_type(
+                phoenix::compose<phoenix::detail::function_eval<3> >(f, _0, _1, _2)
+              , f.proto_base().child0
+            ));
+        }
+    };
+
+    namespace detail
+    {
+        // Helper struct for SFINAE purposes
+        template <bool C>
+        struct bool_;
+        template <>
+        struct bool_<true> : mpl::bool_<true>
+          { typedef bool_<true>* is_true; };
+        template <>
+        struct bool_<false> : mpl::bool_<false>
+          { typedef bool_<false>* is_false; };
+
+        // Metafunction to detect if at least one arg is a Phoenix actor
+        template <
+            typename A0
+          , typename A1 = unused_type
+          , typename A2 = unused_type
+        >
+        struct contains_actor
+            : bool_<
+                phoenix::is_actor<A0>::value
+             || phoenix::is_actor<A1>::value
+             || phoenix::is_actor<A2>::value
+            >
+        {};
+
+        // to_lazy_arg: convert a terminal arg type to the type make_lazy needs
+        template <typename A>
+        struct to_lazy_arg
+          : phoenix::as_actor<A> // wrap A in a Phoenix actor if not already one
+        {};
+
+        template <typename A>
+        struct to_lazy_arg<const A>
+          : to_lazy_arg<A>
+        {};
+
+        template <>
+        struct to_lazy_arg<unused_type>
+        {
+            // unused arg: make_lazy wants unused_type
+            typedef unused_type type;
+        };
+
+        // to_nonlazy_arg: convert a terminal arg type to the type make_vector needs
+        template <typename A>
+        struct to_nonlazy_arg
+        {
+            // identity
+            typedef A type;
+        };
+
+        template <typename A>
+        struct to_nonlazy_arg<const A>
+          : to_nonlazy_arg<A>
+        {};
+
+        template <>
+        struct to_nonlazy_arg<unused_type>
+        {
+            // unused arg: make_vector wants fusion::void_
+            typedef fusion::void_ type;
+        };
+    }
+
+    template <typename Terminal>
+    struct terminal
+      : proto::extends<
+            typename proto::terminal<Terminal>::type
+          , terminal<Terminal>
+        >
+    {
+        typedef terminal<Terminal> this_type;
+        typedef Terminal terminal_type;
+
+        typedef proto::extends<
+            typename proto::terminal<Terminal>::type
+          , terminal<Terminal>
+        > base_type;
+
+        terminal() {}
+
+        terminal(Terminal const& t)
+          : base_type(proto::terminal<Terminal>::type::make(t)) {}
+
+        template <
+            bool Lazy
+          , typename A0
+          , typename A1
+          , typename A2
+        >
+        struct result_helper;
+
+        template <
+            typename A0
+          , typename A1
+          , typename A2
+        >
+        struct result_helper<false, A0, A1, A2>
+        {
+            typedef typename
+                proto::terminal<
+                    terminal_ex<
+                        Terminal
+                      , typename detail::result_of::make_vector<
+                            typename detail::to_nonlazy_arg<A0>::type
+                          , typename detail::to_nonlazy_arg<A1>::type
+                          , typename detail::to_nonlazy_arg<A2>::type>::type>
+                >::type
+            type;
+        };
+
+        template <
+            typename A0
+          , typename A1
+          , typename A2
+        >
+        struct result_helper<true, A0, A1, A2>
+        {
+            typedef typename
+                make_lazy<this_type
+                  , typename detail::to_lazy_arg<A0>::type
+                  , typename detail::to_lazy_arg<A1>::type
+                  , typename detail::to_lazy_arg<A2>::type>::type
+            type;
+        };
+
+        // FIXME: we need to change this to conform to the result_of protocol
+        template <
+            typename A0
+          , typename A1 = unused_type
+          , typename A2 = unused_type      // Support up to 3 args
+        >
+        struct result
+        {
+            typedef typename
+                result_helper<
+                    detail::contains_actor<A0, A1, A2>::value
+                  , A0, A1, A2
+                >::type
+            type;
+        };
+
+        // Note: in the following overloads, SFINAE cannot
+        // be done on return type because of gcc bug #24915:
+        //   http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24915
+        // Hence an additional, fake argument is used for SFINAE,
+        // using a type which can never be a real argument type.
+
+        // Non-lazy overloads. Only enabled when all
+        // args are immediates (no Phoenix actor).
+
+        template <typename A0>
+        typename result<A0>::type
+        operator()(A0 const& _0
+          , typename detail::contains_actor<A0>::is_false = 0) const
+        {
+            typedef typename result<A0>::type result_type;
+            typedef typename result_type::proto_child0 child_type;
+            return result_type::make(
+                child_type(
+                    detail::make_vector(_0)
+                  , this->proto_base().child0)
+            );
+        }
+
+        template <typename A0, typename A1>
+        typename result<A0, A1>::type
+        operator()(A0 const& _0, A1 const& _1
+          , typename detail::contains_actor<A0, A1>::is_false = 0) const
+        {
+            typedef typename result<A0, A1>::type result_type;
+            typedef typename result_type::proto_child0 child_type;
+            return result_type::make(
+                child_type(
+                    detail::make_vector(_0, _1)
+                  , this->proto_base().child0)
+            );
+        }
+
+        template <typename A0, typename A1, typename A2>
+        typename result<A0, A1, A2>::type
+        operator()(A0 const& _0, A1 const& _1, A2 const& _2
+          , typename detail::contains_actor<A0, A1, A2>::is_false = 0) const
+        {
+            typedef typename result<A0, A1, A2>::type result_type;
+            typedef typename result_type::proto_child0 child_type;
+            return result_type::make(
+                child_type(
+                    detail::make_vector(_0, _1, _2)
+                  , this->proto_base().child0)
+            );
+        }
+
+        // Lazy overloads. Enabled when at
+        // least one arg is a Phoenix actor.
+
+        template <typename A0>
+        typename result<A0>::type
+        operator()(A0 const& _0
+          , typename detail::contains_actor<A0>::is_true = 0) const
+        {
+            return make_lazy<this_type
+              , typename phoenix::as_actor<A0>::type>()(*this
+              , phoenix::as_actor<A0>::convert(_0));
+        }
+
+        template <typename A0, typename A1>
+        typename result<A0, A1>::type
+        operator()(A0 const& _0, A1 const& _1
+          , typename detail::contains_actor<A0, A1>::is_true = 0) const
+        {
+            return make_lazy<this_type
+              , typename phoenix::as_actor<A0>::type
+              , typename phoenix::as_actor<A1>::type>()(*this
+              , phoenix::as_actor<A0>::convert(_0)
+              , phoenix::as_actor<A1>::convert(_1));
+        }
+
+        template <typename A0, typename A1, typename A2>
+        typename result<A0, A1, A2>::type
+        operator()(A0 const& _0, A1 const& _1, A2 const& _2
+          , typename detail::contains_actor<A0, A1, A2>::is_true = 0) const
+        {
+            return make_lazy<this_type
+              , typename phoenix::as_actor<A0>::type
+              , typename phoenix::as_actor<A1>::type
+              , typename phoenix::as_actor<A2>::type>()(*this
+              , phoenix::as_actor<A0>::convert(_0)
+              , phoenix::as_actor<A1>::convert(_1)
+              , phoenix::as_actor<A2>::convert(_2));
+        }
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        terminal& operator= (terminal const&);
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    namespace result_of
+    {
+        // Calculate the type of the compound terminal if generated by one of 
+        // the spirit::terminal::operator() overloads above
+
+        // The terminal type itself is passed through without modification
+        template <typename Tag>
+        struct terminal
+        {
+            typedef spirit::terminal<Tag> type;
+        };
+
+        template <typename Tag, typename A0>
+        struct terminal<Tag(A0)>
+        {
+            typedef typename spirit::terminal<Tag>::
+                template result<A0>::type type;
+        };
+
+        template <typename Tag, typename A0, typename A1>
+        struct terminal<Tag(A0, A1)>
+        {
+            typedef typename spirit::terminal<Tag>::
+                template result<A0, A1>::type type;
+        };
+
+        template <typename Tag, typename A0, typename A1, typename A2>
+        struct terminal<Tag(A0, A1, A2)>
+        {
+            typedef typename spirit::terminal<Tag>::
+                template result<A0, A1, A2>::type type;
+        };
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // support for stateful tag types
+    namespace tag
+    {
+        template <typename Data, typename Tag
+          , typename DataTag1 = unused_type, typename DataTag2 = unused_type>
+        struct stateful_tag 
+        {
+            typedef Data data_type;
+
+            stateful_tag() {}
+            stateful_tag(data_type const& data) : data_(data) {}
+
+            data_type data_;
+
+        private:
+            // silence MSVC warning C4512: assignment operator could not be generated
+            stateful_tag& operator= (stateful_tag const&);
+        };
+    }
+
+    template <typename Data, typename Tag
+      , typename DataTag1 = unused_type, typename DataTag2 = unused_type>
+    struct stateful_tag_type
+      : spirit::terminal<tag::stateful_tag<Data, Tag, DataTag1, DataTag2> > 
+    {
+        typedef tag::stateful_tag<Data, Tag, DataTag1, DataTag2> tag_type;
+
+        stateful_tag_type() {}
+        stateful_tag_type(Data const& data)
+          : spirit::terminal<tag_type>(data) {}
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        stateful_tag_type& operator= (stateful_tag_type const&);
+    };
+
+    namespace detail
+    {
+        // extract expression if this is a Tag
+        template <typename StatefulTag>
+        struct get_stateful_data
+        {
+            typedef typename StatefulTag::data_type data_type;
+
+            // is invoked if given tag is != Tag
+            template <typename Tag_>
+            static data_type call(Tag_) { return data_type(); }
+
+            // this is invoked if given tag is same as'Tag'
+            static data_type const& call(StatefulTag const& t) { return t.data_; }
+        };
+    }
+
+}}
+
+// Define a spirit terminal. This macro may be placed in any namespace.
+// Common placeholders are placed in the main boost::spirit namespace
+// (see common_terminals.hpp)
+
+#define BOOST_SPIRIT_TERMINAL(name)                                             \
+    namespace tag { struct name {};  }                                          \
+    typedef boost::proto::terminal<tag::name>::type name##_type;                \
+    name##_type const name = {{}};                                              \
+    inline void silence_unused_warnings__##name() { (void) name; }              \
+    /***/
+
+#define BOOST_SPIRIT_DEFINE_TERMINALS_A(r, _, name)                             \
+    BOOST_SPIRIT_TERMINAL(name)                                                 \
+    /***/
+
+#define BOOST_SPIRIT_DEFINE_TERMINALS(seq)                                      \
+    BOOST_PP_SEQ_FOR_EACH(BOOST_SPIRIT_DEFINE_TERMINALS_A, _, seq)              \
+    /***/
+
+// Define a spirit extended terminal. This macro may be placed in any namespace.
+// Common placeholders are placed in the main boost::spirit namespace
+// (see common_terminals.hpp)
+
+#define BOOST_SPIRIT_TERMINAL_EX(name)                                          \
+    namespace tag { struct name {}; }                                           \
+    typedef boost::spirit::terminal<tag::name> name##_type;                     \
+    name##_type const name = name##_type();                                     \
+    inline void silence_unused_warnings__##name() { (void) name; }              \
+    /***/
+
+#define BOOST_SPIRIT_DEFINE_TERMINALS_EX_A(r, _, name)                          \
+    BOOST_SPIRIT_TERMINAL_EX(name)                                              \
+    /***/
+
+#define BOOST_SPIRIT_DEFINE_TERMINALS_EX(seq)                                   \
+    BOOST_PP_SEQ_FOR_EACH(BOOST_SPIRIT_DEFINE_TERMINALS_EX_A, _, seq)           \
+    /***/
+
+#endif
+
+
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/unused.hpp b/3rdParty/Boost/src/boost/spirit/home/support/unused.hpp
new file mode 100644
index 0000000..4197d6a
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/unused.hpp
@@ -0,0 +1,105 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_UNUSED_APRIL_16_2006_0616PM)
+#define BOOST_SPIRIT_UNUSED_APRIL_16_2006_0616PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <boost/mpl/bool.hpp>
+
+#if defined(BOOST_MSVC)
+# pragma warning(push)
+# pragma warning(disable: 4522) // multiple assignment operators specified warning
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // We do not import fusion ::unused_type anymore to avoid boost::fusion
+    // being turned into an associate namespace for boost::spirit, as this
+    // interferes with ADL in unexpected ways. We rather copy the full 
+    // unused_type implementation from boost::fusion.
+    ///////////////////////////////////////////////////////////////////////////
+    struct unused_type
+    {
+        unused_type()
+        {
+        }
+
+        template <typename T>
+        unused_type(T const&)
+        {
+        }
+
+        template <typename T>
+        unused_type const&
+        operator=(T const&) const
+        {
+            return *this;
+        }
+
+        template <typename T>
+        unused_type&
+        operator=(T const&)
+        {
+            return *this;
+        }
+
+        unused_type const&
+        operator=(unused_type const&) const
+        {
+            return *this;
+        }
+
+        unused_type&
+        operator=(unused_type const&)
+        {
+            return *this;
+        }
+    };
+
+    unused_type const unused = unused_type();
+
+    namespace detail
+    {
+        struct unused_only
+        {
+            unused_only(unused_type const&) {}
+        };
+    }
+
+    template <typename Out>
+    inline Out& operator<<(Out& out, detail::unused_only const&)
+    {
+        return out;
+    }
+
+    template <typename In>
+    inline In& operator>>(In& in, unused_type&)
+    {
+        return in;
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    namespace traits
+    {
+        // We use this test to detect if the argument is not an unused_type
+        template <typename T> struct not_is_unused : mpl::true_ {};
+        template <> struct not_is_unused<unused_type> : mpl::false_ {};
+    }
+}}
+
+#if defined(BOOST_MSVC)
+# pragma warning(pop)
+#endif
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/utf8.hpp b/3rdParty/Boost/src/boost/spirit/home/support/utf8.hpp
new file mode 100644
index 0000000..c488342
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/home/support/utf8.hpp
@@ -0,0 +1,72 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_UC_TYPES_NOVEMBER_23_2008_0840PM)
+#define BOOST_SPIRIT_UC_TYPES_NOVEMBER_23_2008_0840PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/cstdint.hpp>
+#include <boost/foreach.hpp>
+#include <boost/regex/pending/unicode_iterator.hpp>
+#include <boost/type_traits/make_unsigned.hpp>
+#include <string>
+
+namespace boost { namespace spirit
+{
+    typedef ::boost::uint32_t ucs4_char;
+    typedef char utf8_char;
+    typedef std::basic_string<ucs4_char> ucs4_string;
+    typedef std::basic_string<utf8_char> utf8_string;
+
+    template <typename Char>
+    inline utf8_string to_utf8(Char value)
+    {
+        // always store as UTF8
+        utf8_string result;
+        typedef std::back_insert_iterator<utf8_string> insert_iter;
+        insert_iter out_iter(result);
+        utf8_output_iterator<insert_iter> utf8_iter(out_iter);
+        typedef typename make_unsigned<Char>::type UChar;
+        *utf8_iter = (UChar)value;
+        return result;
+    }
+
+    template <typename Char>
+    inline utf8_string to_utf8(Char const* str)
+    {
+        // always store as UTF8
+        utf8_string result;
+        typedef std::back_insert_iterator<utf8_string> insert_iter;
+        insert_iter out_iter(result);
+        utf8_output_iterator<insert_iter> utf8_iter(out_iter);
+        typedef typename make_unsigned<Char>::type UChar;
+        while (*str)
+            *utf8_iter++ = (UChar)*str++;
+        return result;
+    }
+
+    template <typename Char, typename Traits, typename Allocator>
+    inline utf8_string 
+    to_utf8(std::basic_string<Char, Traits, Allocator> const& str)
+    {
+        // always store as UTF8
+        utf8_string result;
+        typedef std::back_insert_iterator<utf8_string> insert_iter;
+        insert_iter out_iter(result);
+        utf8_output_iterator<insert_iter> utf8_iter(out_iter);
+        typedef typename make_unsigned<Char>::type UChar;
+        BOOST_FOREACH(Char ch, str)
+        {
+            *utf8_iter++ = (UChar)ch;
+        }
+        return result;
+    }
+}}
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/include/lex_lexertl.hpp b/3rdParty/Boost/src/boost/spirit/include/lex_lexertl.hpp
new file mode 100644
index 0000000..8c0e17d
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/include/lex_lexertl.hpp
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_LEX_LEXERTL
+#define BOOST_SPIRIT_INCLUDE_LEX_LEXERTL
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/lex/lexer_lexertl.hpp>
+
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/include/phoenix_core.hpp b/3rdParty/Boost/src/boost/spirit/include/phoenix_core.hpp
new file mode 100644
index 0000000..b807833
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/include/phoenix_core.hpp
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX_CORE
+#define BOOST_SPIRIT_INCLUDE_PHOENIX_CORE
+#include <boost/spirit/home/phoenix/core.hpp>
+#endif
diff --git a/3rdParty/Boost/src/boost/spirit/include/phoenix_function.hpp b/3rdParty/Boost/src/boost/spirit/include/phoenix_function.hpp
new file mode 100644
index 0000000..a7a29e9
--- /dev/null
+++ b/3rdParty/Boost/src/boost/spirit/include/phoenix_function.hpp
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX_FUNCTION
+#define BOOST_SPIRIT_INCLUDE_PHOENIX_FUNCTION
+#include <boost/spirit/home/phoenix/function.hpp>
+#endif
diff --git a/3rdParty/Boost/src/boost/utility/detail/result_of_iterate.hpp b/3rdParty/Boost/src/boost/utility/detail/result_of_iterate.hpp
new file mode 100644
index 0000000..035bf19
--- /dev/null
+++ b/3rdParty/Boost/src/boost/utility/detail/result_of_iterate.hpp
@@ -0,0 +1,148 @@
+// Boost result_of library
+
+//  Copyright Douglas Gregor 2004. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+// For more information, see http://www.boost.org/libs/utility
+#if !defined(BOOST_PP_IS_ITERATING)
+# error Boost result_of - do not include this file!
+#endif
+
+// CWPro8 requires an argument in a function type specialization
+#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3002)) && BOOST_PP_ITERATION() == 0
+# define BOOST_RESULT_OF_ARGS void
+#else
+# define BOOST_RESULT_OF_ARGS BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T)
+#endif
+
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
+template<typename F BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
+         BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
+struct tr1_result_of<F(BOOST_RESULT_OF_ARGS)>
+    : mpl::if_<
+          mpl::or_< is_pointer<F>, is_member_function_pointer<F> >
+        , boost::detail::tr1_result_of_impl<
+            typename remove_cv<F>::type, 
+            typename remove_cv<F>::type(BOOST_RESULT_OF_ARGS), 
+            (boost::detail::has_result_type<F>::value)>
+        , boost::detail::tr1_result_of_impl<
+            F,
+            F(BOOST_RESULT_OF_ARGS), 
+            (boost::detail::has_result_type<F>::value)> >::type { };
+#endif
+
+#if !defined(BOOST_NO_DECLTYPE) && defined(BOOST_RESULT_OF_USE_DECLTYPE)
+
+// As of N2588, C++0x result_of only supports function call
+// expressions of the form f(x). This precludes support for member
+// function pointers, which are invoked with expressions of the form
+// o->*f(x). This implementation supports both.
+template<typename F BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
+         BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
+struct result_of<F(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T))>
+    : mpl::if_<
+          mpl::or_< is_pointer<F>, is_member_function_pointer<F> >
+        , detail::tr1_result_of_impl<
+            typename remove_cv<F>::type, 
+            typename remove_cv<F>::type(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T)), false
+          >
+        , detail::cpp0x_result_of_impl<
+              F(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T))
+          >
+      >::type
+{};
+
+namespace detail {
+
+# define BOOST_RESULT_OF_STATIC_MEMBERS(z, n, _) \
+     static T ## n t ## n; \
+  /**/
+
+template<typename F BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
+         BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
+class cpp0x_result_of_impl<F(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T))>
+{
+  static F f;
+  BOOST_PP_REPEAT(BOOST_PP_ITERATION(), BOOST_RESULT_OF_STATIC_MEMBERS, _)
+public:
+  typedef decltype(f(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),t))) type;
+};
+
+} // namespace detail 
+
+#else // defined(BOOST_NO_DECLTYPE)
+
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
+template<typename F BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
+         BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
+struct result_of<F(BOOST_RESULT_OF_ARGS)>
+    : tr1_result_of<F(BOOST_RESULT_OF_ARGS)> { };
+#endif
+
+#endif // defined(BOOST_NO_DECLTYPE)
+
+#undef BOOST_RESULT_OF_ARGS
+
+#if BOOST_PP_ITERATION() >= 1 
+
+namespace detail {
+
+template<typename R,  typename FArgs BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
+         BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
+struct tr1_result_of_impl<R (*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T)), FArgs, false>
+{
+  typedef R type;
+};
+
+template<typename R,  typename FArgs BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
+         BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
+struct tr1_result_of_impl<R (&)(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T)), FArgs, false>
+{
+  typedef R type;
+};
+
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
+template<typename R, typename FArgs BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
+         BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
+struct tr1_result_of_impl<R (T0::*)
+                     (BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PP_ITERATION(),T)),
+                 FArgs, false>
+{
+  typedef R type;
+};
+
+template<typename R, typename FArgs BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
+         BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
+struct tr1_result_of_impl<R (T0::*)
+                     (BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PP_ITERATION(),T))
+                     const,
+                 FArgs, false>
+{
+  typedef R type;
+};
+
+template<typename R, typename FArgs BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
+         BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
+struct tr1_result_of_impl<R (T0::*)
+                     (BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PP_ITERATION(),T))
+                     volatile,
+                 FArgs, false>
+{
+  typedef R type;
+};
+
+template<typename R, typename FArgs BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
+         BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
+struct tr1_result_of_impl<R (T0::*)
+                     (BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PP_ITERATION(),T))
+                     const volatile,
+                 FArgs, false>
+{
+  typedef R type;
+};
+#endif
+
+}
+#endif
diff --git a/3rdParty/Boost/src/boost/utility/result_of.hpp b/3rdParty/Boost/src/boost/utility/result_of.hpp
new file mode 100644
index 0000000..9a42fd2
--- /dev/null
+++ b/3rdParty/Boost/src/boost/utility/result_of.hpp
@@ -0,0 +1,100 @@
+// Boost result_of library
+
+//  Copyright Douglas Gregor 2004. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+// For more information, see http://www.boost.org/libs/utility
+#ifndef BOOST_RESULT_OF_HPP
+#define BOOST_RESULT_OF_HPP
+
+#include <boost/config.hpp>
+#include <boost/preprocessor/iteration/iterate.hpp> 
+#include <boost/preprocessor/punctuation/comma_if.hpp> 
+#include <boost/preprocessor/repetition/enum_params.hpp> 
+#include <boost/preprocessor/repetition/enum_shifted_params.hpp> 
+#include <boost/detail/workaround.hpp>
+#include <boost/mpl/has_xxx.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/type_traits/is_member_function_pointer.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+
+#ifndef BOOST_RESULT_OF_NUM_ARGS
+#  define BOOST_RESULT_OF_NUM_ARGS 10
+#endif
+
+namespace boost {
+
+template<typename F> struct result_of;
+template<typename F> struct tr1_result_of; // a TR1-style implementation of result_of
+
+#if !defined(BOOST_NO_SFINAE) && !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+namespace detail {
+
+BOOST_MPL_HAS_XXX_TRAIT_DEF(result_type)
+
+template<typename F, typename FArgs, bool HasResultType> struct tr1_result_of_impl;
+template<typename F> struct cpp0x_result_of_impl;
+
+template<typename F>
+struct result_of_void_impl
+{
+  typedef void type;
+};
+
+template<typename R>
+struct result_of_void_impl<R (*)(void)>
+{
+  typedef R type;
+};
+
+template<typename R>
+struct result_of_void_impl<R (&)(void)>
+{
+  typedef R type;
+};
+
+// Determine the return type of a function pointer or pointer to member.
+template<typename F, typename FArgs>
+struct result_of_pointer
+  : tr1_result_of_impl<typename remove_cv<F>::type, FArgs, false> { };
+
+template<typename F, typename FArgs>
+struct tr1_result_of_impl<F, FArgs, true>
+{
+  typedef typename F::result_type type;
+};
+
+template<typename FArgs>
+struct is_function_with_no_args : mpl::false_ {};
+
+template<typename F>
+struct is_function_with_no_args<F(void)> : mpl::true_ {};
+
+template<typename F, typename FArgs>
+struct result_of_nested_result : F::template result<FArgs>
+{};
+
+template<typename F, typename FArgs>
+struct tr1_result_of_impl<F, FArgs, false>
+  : mpl::if_<is_function_with_no_args<FArgs>,
+             result_of_void_impl<F>,
+             result_of_nested_result<F, FArgs> >::type
+{};
+
+} // end namespace detail
+
+#define BOOST_PP_ITERATION_PARAMS_1 (3,(0,BOOST_RESULT_OF_NUM_ARGS,<boost/utility/detail/result_of_iterate.hpp>))
+#include BOOST_PP_ITERATE()
+
+#else
+#  define BOOST_NO_RESULT_OF 1
+#endif
+
+}
+
+#endif // BOOST_RESULT_OF_HPP
diff --git a/3rdParty/Boost/src/boost/utility/value_init.hpp b/3rdParty/Boost/src/boost/utility/value_init.hpp
new file mode 100644
index 0000000..5de9585
--- /dev/null
+++ b/3rdParty/Boost/src/boost/utility/value_init.hpp
@@ -0,0 +1,258 @@
+// (C) Copyright 2002-2008, Fernando Luis Cacciola Carballal.
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// 21 Ago 2002 (Created) Fernando Cacciola
+// 24 Dec 2007 (Refactored and worked around various compiler bugs) Fernando Cacciola, Niels Dekker
+// 23 May 2008 (Fixed operator= const issue, added initialized_value) Niels Dekker, Fernando Cacciola
+// 21 Ago 2008 (Added swap) Niels Dekker, Fernando Cacciola
+// 20 Feb 2009 (Fixed logical const-ness issues) Niels Dekker, Fernando Cacciola
+// 03 Apr 2010 (Added initialized<T>, suggested by Jeffrey Hellrung, fixing #3472) Niels Dekker
+// 30 May 2010 (Made memset call conditional, fixing #3869) Niels Dekker
+//
+#ifndef BOOST_UTILITY_VALUE_INIT_21AGO2002_HPP
+#define BOOST_UTILITY_VALUE_INIT_21AGO2002_HPP
+
+// Note: The implementation of boost::value_initialized had to deal with the
+// fact that various compilers haven't fully implemented value-initialization.
+// The constructor of boost::value_initialized<T> works around these compiler
+// issues, by clearing the bytes of T, before constructing the T object it
+// contains. More details on these issues are at libs/utility/value_init.htm
+
+#include <boost/aligned_storage.hpp>
+#include <boost/config.hpp> // For BOOST_NO_COMPLETE_VALUE_INITIALIZATION.
+#include <boost/detail/workaround.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/cv_traits.hpp>
+#include <boost/type_traits/alignment_of.hpp>
+#include <boost/swap.hpp>
+#include <cstring>
+#include <new>
+
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#if _MSC_VER >= 1310
+// It is safe to ignore the following warning from MSVC 7.1 or higher:
+// "warning C4351: new behavior: elements of array will be default initialized"
+#pragma warning(disable: 4351)
+// It is safe to ignore the following MSVC warning, which may pop up when T is 
+// a const type: "warning C4512: assignment operator could not be generated".
+#pragma warning(disable: 4512)
+#endif
+#endif
+
+#ifdef BOOST_NO_COMPLETE_VALUE_INITIALIZATION
+  // Implementation detail: The macro BOOST_DETAIL_VALUE_INIT_WORKAROUND_SUGGESTED 
+  // suggests that a workaround should be applied, because of compiler issues 
+  // regarding value-initialization.
+  #define BOOST_DETAIL_VALUE_INIT_WORKAROUND_SUGGESTED
+#endif
+
+// Implementation detail: The macro BOOST_DETAIL_VALUE_INIT_WORKAROUND
+// switches the value-initialization workaround either on or off.
+#ifndef BOOST_DETAIL_VALUE_INIT_WORKAROUND
+  #ifdef BOOST_DETAIL_VALUE_INIT_WORKAROUND_SUGGESTED
+  #define BOOST_DETAIL_VALUE_INIT_WORKAROUND 1
+  #else
+  #define BOOST_DETAIL_VALUE_INIT_WORKAROUND 0
+  #endif
+#endif
+
+namespace boost {
+
+template<class T>
+class initialized
+{
+  private :
+    struct wrapper
+    {
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x592))
+      typename
+#endif 
+      remove_const<T>::type data;
+
+      wrapper()
+      :
+      data()
+      {
+      }
+
+      wrapper(T const & arg)
+      :
+      data(arg)
+      {
+      }
+    };
+
+    mutable
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x592))
+      typename
+#endif 
+      aligned_storage<sizeof(wrapper), alignment_of<wrapper>::value>::type x;
+
+    wrapper * wrapper_address() const
+    {
+      return static_cast<wrapper *>( static_cast<void*>(&x));
+    }
+
+  public :
+
+    initialized()
+    {
+#if BOOST_DETAIL_VALUE_INIT_WORKAROUND
+      std::memset(&x, 0, sizeof(x));
+#endif
+      new (wrapper_address()) wrapper();
+    }
+
+    initialized(initialized const & arg)
+    {
+      new (wrapper_address()) wrapper( static_cast<wrapper const &>(*(arg.wrapper_address())));
+    }
+
+    explicit initialized(T const & arg)
+    {
+      new (wrapper_address()) wrapper(arg);
+    }
+
+    initialized & operator=(initialized const & arg)
+    {
+      // Assignment is only allowed when T is non-const.
+      BOOST_STATIC_ASSERT( ! is_const<T>::value );
+      *wrapper_address() = static_cast<wrapper const &>(*(arg.wrapper_address()));
+      return *this;
+    }
+
+    ~initialized()
+    {
+      wrapper_address()->wrapper::~wrapper();
+    }
+
+    T const & data() const
+    {
+      return wrapper_address()->data;
+    }
+
+    T& data()
+    {
+      return wrapper_address()->data;
+    }
+
+    void swap(initialized & arg)
+    {
+      ::boost::swap( this->data(), arg.data() );
+    }
+
+    operator T const &() const
+    {
+      return wrapper_address()->data;
+    }
+
+    operator T&()
+    {
+      return wrapper_address()->data;
+    }
+
+} ;
+
+template<class T>
+T const& get ( initialized<T> const& x )
+{
+  return x.data() ;
+}
+
+template<class T>
+T& get ( initialized<T>& x )
+{
+  return x.data() ;
+}
+
+template<class T>
+void swap ( initialized<T> & lhs, initialized<T> & rhs )
+{
+  lhs.swap(rhs) ;
+}
+
+template<class T>
+class value_initialized
+{
+  private :
+
+    // initialized<T> does value-initialization by default.
+    initialized<T> m_data;
+
+  public :
+    
+    value_initialized()
+    :
+    m_data()
+    { }
+    
+    T const & data() const
+    {
+      return m_data.data();
+    }
+
+    T& data()
+    {
+      return m_data.data();
+    }
+
+    void swap(value_initialized & arg)
+    {
+      m_data.swap(arg.m_data);
+    }
+
+    operator T const &() const
+    {
+      return m_data;
+    }
+
+    operator T&()
+    {
+      return m_data;
+    }
+} ;
+
+
+template<class T>
+T const& get ( value_initialized<T> const& x )
+{
+  return x.data() ;
+}
+
+template<class T>
+T& get ( value_initialized<T>& x )
+{
+  return x.data() ;
+}
+
+template<class T>
+void swap ( value_initialized<T> & lhs, value_initialized<T> & rhs )
+{
+  lhs.swap(rhs) ;
+}
+
+
+class initialized_value_t
+{
+  public :
+    
+    template <class T> operator T() const
+    {
+      return initialized<T>().data();
+    }
+};
+
+initialized_value_t const initialized_value = {} ;
+
+
+} // namespace boost
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#endif
diff --git a/3rdParty/Boost/update.sh b/3rdParty/Boost/update.sh
index 45dfd44..e7a8ec8 100755
--- a/3rdParty/Boost/update.sh
+++ b/3rdParty/Boost/update.sh
@@ -42,6 +42,13 @@ fi
 	uuid/uuid_io.hpp \
 	uuid/uuid_generators.hpp \
 	variant.hpp \
+	regex.hpp \
+	unordered_map.hpp \
+	algorithm/string.hpp \
+	format.hpp \
+	logic/tribool.hpp \
+	assign/list_of.hpp \
+	spirit/include/lex_lexertl.hpp \
 	$TARGET_DIR
 cp $1/LICENSE_1_0.txt $TARGET_DIR
 
-- 
cgit v0.10.2-6-g49f6