diff --git a/Driver/Driver.cs b/Driver/Driver.cs
--- a/Driver/Driver.cs
+++ b/Driver/Driver.cs
@@ -1,7 +1,6 @@
 //
 // Salsa .NET Driver
 //
-// Copyright: (c) 2007-2008 Andrew Appleyard
 // Licence:   BSD3 (see LICENSE)
 //
 
@@ -40,7 +39,6 @@
             //    Assembly.GetExecutingAssembly().GetName().Version);
 
             Trace.Listeners.Add(new ConsoleTraceListener());
-            System.Windows.Forms.Application.EnableVisualStyles();
 
             _assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(
                 new AssemblyName("DynamicAssembly"), AssemblyBuilderAccess.RunAndSave);
@@ -248,7 +246,7 @@
             }
         }
 
-        [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
         public delegate void ReleaseObjectDelegate(int oId);
         private static ReleaseObjectDelegate _ReleaseObjectDelegate = ReleaseObject;
 
@@ -619,13 +617,16 @@
             return !t.IsPrimitive && t != typeof(void) && t != typeof(string);
         }
 
+
+        private static bool isMono = Type.GetType ("Mono.Runtime") != null;
+
         /// <summary>
         /// Returns the type of 'MarshalAs' attribute that should be attached to 
         /// parameters/results of the given type, if any.
         /// </summary>
         private static UnmanagedType? MarshalTypeAs(Type t)
         {
-            if (t == typeof(string))
+            if (!isMono && t == typeof(string))
                 return UnmanagedType.LPWStr;
             else
                 return null;
@@ -992,10 +993,10 @@
                     TypeAttributes.Sealed | TypeAttributes.AnsiClass |
                     TypeAttributes.AutoClass, typeof(System.MulticastDelegate));
 
-                // Add a '[UnmanagedFunctionPointer(CallingConvention.StdCall)]' attribute to the delegate
+                // Add a '[UnmanagedFunctionPointer(CallingConvention.Cdecl)]' attribute to the delegate
                 typeBuilder.SetCustomAttribute(new CustomAttributeBuilder(
                     typeof(UnmanagedFunctionPointerAttribute).GetConstructor(new Type[] { typeof(CallingConvention) }),
-                    new object[] { CallingConvention.StdCall }));
+                    new object[] { CallingConvention.Cdecl }));
 
                 ConstructorBuilder constructorBuilder = typeBuilder.DefineConstructor(
                     MethodAttributes.RTSpecialName | MethodAttributes.HideBySig |
@@ -1039,7 +1040,7 @@
     /// <summary>
     /// A delegate for the signature of the Haskell function 'freeHaskellFunPtr'.
     /// </summary>
-    [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
     public delegate void FreeHaskellFunPtrDelegate(IntPtr funPtr);
 
     /// <summary>
diff --git a/Driver/Driver.proj b/Driver/Driver.proj
deleted file mode 100644
--- a/Driver/Driver.proj
+++ /dev/null
@@ -1,35 +0,0 @@
-﻿<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-
-  <!-- Compile 'Driver.hs' into 'Salsa.dll' using the C# compiler -->
-  <Target Name="BuildDriver">
-    <Csc Sources="Driver.cs"
-         TargetType="library"
-         OutputAssembly="Salsa.dll"
-         Optimize="true"
-         FileAlignment="512" />
-  </Target>
-
-  <!-- Run 'Embed.hs' to embed 'Salsa.dll' into a Haskell module -->
-  <Target Name="EmbedDriver" 
-          Inputs="Salsa.dll;Embed.hs"
-          Outputs="Driver.hs"
-          DependsOnTargets="BuildDriver">
-    <Exec Command="runhaskell Embed Salsa.dll > Driver.hs" />
-  </Target>
-
-  <!-- Copy 'Driver.hs' into the Salsa library tree -->
-  <Target Name="CopyDriver"
-          DependsOnTargets="EmbedDriver">
-    <Copy SourceFiles="Driver.hs"
-          DestinationFiles="..\Foreign\Salsa\Driver.hs" />
-  </Target>
-
-  <Target Name="Build" DependsOnTargets="CopyDriver" />
-
-  <Target Name="Clean" >
-    <Delete Files="Salsa.dll" />
-    <Delete Files="Driver.hs" />
-  </Target>
-
-  <Target Name="Rebuild" DependsOnTargets="Clean;Build" />
-</Project>
diff --git a/Driver/Embed.hs b/Driver/Embed.hs
deleted file mode 100644
--- a/Driver/Embed.hs
+++ /dev/null
@@ -1,37 +0,0 @@
------------------------------------------------------------------------------
--- |
--- Program     : Embed
--- Copyright   : (c) 2007-2008 Andrew Appleyard
--- Licence     : BSD-style (see LICENSE)
--- 
--- Generates a Haskell module that contains the binary data of the Salsa
--- driver assembly (typically, Salsa.dll) as an (unboxed) string literal.  This
--- is used to embed the driver assembly in every program that uses Salsa.
---
------------------------------------------------------------------------------
-module Main where
-
-import System.Environment
-import qualified Data.ByteString as S
-import Text.Printf
-import Control.Monad
-import Data.Time.LocalTime (getZonedTime)
-
-main :: IO ()
-main = do
-    now <- getZonedTime
-    putStrLn ("-- Generated " ++ show now)
-    putStrLn "module Foreign.Salsa.Driver (driverData) where"
-    putStrLn "import qualified Data.ByteString.Char8 as B"
-    putStrLn "{-# NOINLINE driverData #-}"
-    putStr "driverData = B.pack \""
-    [inputFile] <- getArgs
-    S.readFile inputFile >>= print
-    putStrLn "\""
-
-  where print s = do let (xs,ys) = S.splitAt 20 s 
-                     putStr "\\\n  \\"
-                     mapM_ (\x -> printf "\\x%02x" x) (S.unpack xs)
-                     when (not $ S.null ys) (print ys)
-
--- vim:set ts=4 sw=4 expandtab:
diff --git a/Driver/README b/Driver/README
--- a/Driver/README
+++ b/Driver/README
@@ -1,12 +1,13 @@
-
 Building:
 
-  To build the driver assembly, run 'msbuild' in the 'Driver' directory.  This
-  will compile Driver.cs into Salsa.dll, embed it as an unpacked byte string in
-  Driver.hs, and then copy it into the Foreign\Salsa directory.
+To build the driver assembly, run within this directory:
 
-  You can also build the driver by hand:
+  csc -filealign:512 -optimize+ -out:Salsa.dll -target:library Driver.cs
 
-    csc -filealign:512 -optimize+ -out:Salsa.dll -target:library Driver.cs
-    runhaskell Embed Salsa.dll > ../Salsa/Driver.hs
+Or if mono:
+
+  gmcs -filealign:512 -optimize+ -out:Salsa.dll -target:library Driver.cs
+
+No further step are necessary. The file 'Salsa.dll' will be read and
+embedded from this directory automatically when building the Salsa library.
 
diff --git a/Driver/Salsa.dll b/Driver/Salsa.dll
new file mode 100644
Binary files /dev/null and b/Driver/Salsa.dll differ
diff --git a/Foreign/Salsa.hs b/Foreign/Salsa.hs
--- a/Foreign/Salsa.hs
+++ b/Foreign/Salsa.hs
@@ -1,7 +1,5 @@
 -----------------------------------------------------------------------------
 -- |
--- Module      : Salsa
--- Copyright   : (c) 2007-2008 Andrew Appleyard
 -- Licence     : BSD-style (see LICENSE)
 -- 
 -- Salsa: a .NET bridge for Haskell.
diff --git a/Foreign/Salsa/Binding.hs b/Foreign/Salsa/Binding.hs
--- a/Foreign/Salsa/Binding.hs
+++ b/Foreign/Salsa/Binding.hs
@@ -1,8 +1,7 @@
-{-# LANGUAGE ForeignFunctionInterface, TypeSynonymInstances, ScopedTypeVariables #-}
+{-# LANGUAGE ForeignFunctionInterface, TypeSynonymInstances #-}
+{-# LANGUAGE FlexibleInstances, ScopedTypeVariables, CPP #-}
 -----------------------------------------------------------------------------
 -- |
--- Module      : Foreign.Salsa.Binding
--- Copyright   : (c) 2007-2008 Andrew Appleyard
 -- Licence     : BSD-style (see LICENSE)
 -- 
 -- Exports data types and functions required by the generated binding files.
@@ -14,7 +13,7 @@
     module Foreign.Salsa.CLR,
     module Foreign.Salsa.TypePrelude,
     module Foreign.Salsa.Resolver,
-    withCWString, CWString, FunPtr, unsafePerformIO, liftM,
+    FunPtr, unsafePerformIO, liftM,
     type_GetType
     ) where
 
@@ -24,7 +23,8 @@
 import Foreign.Salsa.TypePrelude
 import Foreign.Salsa.Resolver
 
-import Foreign hiding (new)
+import System.IO.Unsafe ( unsafePerformIO )
+import Foreign hiding (new, unsafePerformIO)
 import Foreign.C.String
 
 import Control.Monad (liftM)
@@ -38,8 +38,8 @@
 -- the generator.
 --
 
-type Type_GetType_stub = CWString -> Bool -> IO ObjectId
-foreign import stdcall "dynamic" make_Type_GetType_stub :: FunPtr Type_GetType_stub -> Type_GetType_stub
+type Type_GetType_stub = SalsaString -> Bool -> IO ObjectId
+foreign import ccall "dynamic" make_Type_GetType_stub :: FunPtr Type_GetType_stub -> Type_GetType_stub
 
 {-# NOINLINE type_GetType_stub #-}
 type_GetType_stub :: Type_GetType_stub
@@ -51,7 +51,7 @@
 
 
 type Type_MakeArrayType_stub = ObjectId -> Int32 -> IO ObjectId
-foreign import stdcall "dynamic" make_Type_MakeArrayType_stub :: FunPtr Type_MakeArrayType_stub -> Type_MakeArrayType_stub
+foreign import ccall "dynamic" make_Type_MakeArrayType_stub :: FunPtr Type_MakeArrayType_stub -> Type_MakeArrayType_stub
 
 {-# NOINLINE type_MakeArrayType_stub #-}
 type_MakeArrayType_stub :: Type_MakeArrayType_stub
diff --git a/Foreign/Salsa/CLR.hs b/Foreign/Salsa/CLR.hs
--- a/Foreign/Salsa/CLR.hs
+++ b/Foreign/Salsa/CLR.hs
@@ -1,8 +1,6 @@
-{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE ForeignFunctionInterface, CPP #-}
 -----------------------------------------------------------------------------
 -- |
--- Module      : Foreign.Salsa.CLR
--- Copyright   : (c) 2007-2008 Andrew Appleyard
 -- Licence     : BSD-style (see LICENSE)
 -- 
 -- Provides convenient functions for accessing the CLR, including: loading
@@ -19,14 +17,20 @@
     getFieldGetStub,
     getFieldSetStub,
     getDelegateConstructorStub,
-    boxString, boxInt32, boxBoolean 
+    boxString, boxInt32, boxBoolean,
+    SalsaString, withSalsaString, peekSalsaString 
     ) where
 
 import Data.Int
-import Foreign hiding (new, newForeignPtr)
+import System.IO.Unsafe ( unsafePerformIO )
+import Foreign hiding ( new, newForeignPtr, unsafePerformIO )
 import Foreign.C.String
 
-import Foreign.Salsa.CLRHost
+#if (MONO)
+import Foreign.Salsa.Mono.CLRHost
+#else
+import Foreign.Salsa.Win.CLRHost
+#endif
 
 -- | Identifies a foreign (.NET) object instance
 type ObjectId = Int32
@@ -43,8 +47,7 @@
 
 startCLR :: IO ()
 startCLR = do
-    start_ICorRuntimeHost clrHost
-
+    startCLR'
     -- Allow .NET to call into Haskell and free unused function pointer wrappers
     setFreeHaskellFunPtr 
 
@@ -55,14 +58,8 @@
     -- Prevent .NET finalizers from calling into Haskell (and causing access violations)
     clearFreeHaskellFunPtr
 
-    stop_ICorRuntimeHost clrHost
-    return ()
+    stopCLR'
 
--- | 'clrHost' stores a reference to the ICLRRuntimeHost for the .NET execution
---   engine that is hosted in the process.
-{-# NOINLINE clrHost #-}
-clrHost :: ICorRuntimeHost
-clrHost = unsafePerformIO $ corBindToRuntimeEx
 
 
 -- | @'unsafeGetPointerToMethod' m@ returns a function pointer to the method @m@ 
@@ -70,17 +67,17 @@
 --  if the type of the resulting function pointer matches that of the method given.
 unsafeGetPointerToMethod :: String -> IO (FunPtr a)
 unsafeGetPointerToMethod methodName = do
-    result <- withCWString methodName $ \methodName' -> getPointerToMethodRaw methodName'
+    result <- withSalsaString methodName $ \methodName' -> getPointerToMethodRaw methodName'
     if result == nullFunPtr
         then error $ "Unable to execute Salsa.dll method '" ++ methodName ++ "'."
         else return result
 
 {-# NOINLINE getPointerToMethodRaw #-}
 getPointerToMethodRaw :: GetPointerToMethodDelegate a
-getPointerToMethodRaw = makeGetPointerToMethodDelegate $ unsafePerformIO $ loadDriverAndBoot clrHost
+getPointerToMethodRaw = makeGetPointerToMethodDelegate $ unsafePerformIO $ loadDriverAndBoot
 
-type GetPointerToMethodDelegate a = CWString -> IO (FunPtr a)
-foreign import stdcall "dynamic" makeGetPointerToMethodDelegate :: FunPtr (GetPointerToMethodDelegate a) ->
+type GetPointerToMethodDelegate a = SalsaString -> IO (FunPtr a)
+foreign import ccall "dynamic" makeGetPointerToMethodDelegate :: FunPtr (GetPointerToMethodDelegate a) ->
     GetPointerToMethodDelegate a
 
 
@@ -90,7 +87,7 @@
 releaseObject = makeReleaseObjectDelegate $ unsafePerformIO $ unsafeGetPointerToMethod "ReleaseObject"
 
 type ReleaseObjectDelegate = ObjectId -> IO ()
-foreign import stdcall "dynamic" makeReleaseObjectDelegate :: FunPtr ReleaseObjectDelegate -> ReleaseObjectDelegate
+foreign import ccall "dynamic" makeReleaseObjectDelegate :: FunPtr ReleaseObjectDelegate -> ReleaseObjectDelegate
 
 
 -- | Passes a function pointer to the 'freeHaskellFunPtr' function into .NET so
@@ -115,10 +112,10 @@
 setFreeHaskellFunPtrRaw = makeSetFreeHaskellFunPtrDelegate $ unsafePerformIO $
     unsafeGetPointerToMethod "SetFreeHaskellFunPtr"
   
-foreign import stdcall "dynamic" makeSetFreeHaskellFunPtrDelegate ::
+foreign import ccall "dynamic" makeSetFreeHaskellFunPtrDelegate ::
     FunPtr (FunPtr (FunPtr a -> IO ()) -> IO ()) -> (FunPtr (FunPtr a -> IO ()) -> IO ())
 
-foreign import stdcall "wrapper" wrapFreeHaskellFunPtr :: 
+foreign import ccall "wrapper" wrapFreeHaskellFunPtr :: 
     (FunPtr a -> IO ()) -> IO (FunPtr (FunPtr a -> IO ()))
 
 
@@ -129,7 +126,7 @@
 saveDynamicAssembly = makeSaveDynamicAssemblyDelegate $ unsafePerformIO $ unsafeGetPointerToMethod "SaveDynamicAssembly"
 
 type SaveDynamicAssemblyDelegate = IO ()
-foreign import stdcall "dynamic" makeSaveDynamicAssemblyDelegate :: FunPtr SaveDynamicAssemblyDelegate -> SaveDynamicAssemblyDelegate
+foreign import ccall "dynamic" makeSaveDynamicAssemblyDelegate :: FunPtr SaveDynamicAssemblyDelegate -> SaveDynamicAssemblyDelegate
 
 
 -- | @'getMethodStub' c m s@ returns a function pointer to a function that, when
@@ -139,17 +136,17 @@
 --   desired overload of the given method.
 getMethodStub :: String -> String -> String -> IO (FunPtr f)
 getMethodStub className methodName parameterTypeNames = do
-    withCWString className $ \className' ->
-        withCWString methodName $ \methodName' ->
-            withCWString parameterTypeNames $ \parameterTypeNames' ->
+    withSalsaString className $ \className' ->
+        withSalsaString methodName $ \methodName' ->
+            withSalsaString parameterTypeNames $ \parameterTypeNames' ->
                 return $ getMethodStubRaw className' methodName' parameterTypeNames'
 
 {-# NOINLINE getMethodStubRaw #-}
 getMethodStubRaw :: GetMethodStubDelegate a
 getMethodStubRaw = makeGetMethodStubDelegate $ unsafePerformIO $ unsafeGetPointerToMethod "GetMethodStub"
 
-type GetMethodStubDelegate a = CWString -> CWString -> CWString -> FunPtr a
-foreign import stdcall "dynamic" makeGetMethodStubDelegate :: FunPtr (GetMethodStubDelegate a) ->
+type GetMethodStubDelegate a = SalsaString -> SalsaString -> SalsaString -> FunPtr a
+foreign import ccall "dynamic" makeGetMethodStubDelegate :: FunPtr (GetMethodStubDelegate a) ->
     (GetMethodStubDelegate a)
 
 
@@ -157,16 +154,16 @@
 --   called, gets the value of the field @f@ in class @c@.
 getFieldGetStub :: String -> String -> IO (FunPtr f)
 getFieldGetStub className fieldName = do
-    withCWString className $ \className' ->
-        withCWString fieldName $ \fieldName' ->
+    withSalsaString className $ \className' ->
+        withSalsaString fieldName $ \fieldName' ->
             return $ getFieldGetStubRaw className' fieldName'
 
 {-# NOINLINE getFieldGetStubRaw #-}
 getFieldGetStubRaw :: GetFieldGetStubDelegate a
 getFieldGetStubRaw = makeGetFieldGetStubDelegate $ unsafePerformIO $ unsafeGetPointerToMethod "GetFieldGetStub"
 
-type GetFieldGetStubDelegate a = CWString -> CWString -> FunPtr a
-foreign import stdcall "dynamic" makeGetFieldGetStubDelegate :: FunPtr (GetFieldGetStubDelegate a) ->
+type GetFieldGetStubDelegate a = SalsaString -> SalsaString -> FunPtr a
+foreign import ccall "dynamic" makeGetFieldGetStubDelegate :: FunPtr (GetFieldGetStubDelegate a) ->
     (GetFieldGetStubDelegate a)
 
 
@@ -174,16 +171,16 @@
 --   called, sets the value of the field @f@ in class @c@ to the given value.
 getFieldSetStub :: String -> String -> IO (FunPtr f)
 getFieldSetStub className fieldName = do
-    withCWString className $ \className' ->
-        withCWString fieldName $ \fieldName' ->
+    withSalsaString className $ \className' ->
+        withSalsaString fieldName $ \fieldName' ->
             return $ getFieldSetStubRaw className' fieldName'
 
 {-# NOINLINE getFieldSetStubRaw #-}
 getFieldSetStubRaw :: GetFieldSetStubDelegate a
 getFieldSetStubRaw = makeGetFieldSetStubDelegate $ unsafePerformIO $ unsafeGetPointerToMethod "GetFieldSetStub"
 
-type GetFieldSetStubDelegate a = CWString -> CWString -> FunPtr a
-foreign import stdcall "dynamic" makeGetFieldSetStubDelegate :: FunPtr (GetFieldSetStubDelegate a) ->
+type GetFieldSetStubDelegate a = SalsaString -> SalsaString -> FunPtr a
+foreign import ccall "dynamic" makeGetFieldSetStubDelegate :: FunPtr (GetFieldSetStubDelegate a) ->
     (GetFieldSetStubDelegate a)
 
 
@@ -197,7 +194,7 @@
     -- Obtain a function pointer to a function that, when called with a
     -- function pointer compatible with the given wrapper function, returns
     -- a reference to a .NET delegate object that calls the function.
-    delegateConstructor <- withCWString delegateTypeName $
+    delegateConstructor <- withSalsaString delegateTypeName $
         \delegateTypeName' -> getDelegateConstructorStubRaw delegateTypeName' 
 
     -- Returns a function that accepts a function, 'f' implementing the
@@ -211,12 +208,12 @@
 getDelegateConstructorStubRaw :: GetDelegateConstructorStubDelegate a
 getDelegateConstructorStubRaw = makeGetDelegateConstructorStubDelegate $ unsafePerformIO $ unsafeGetPointerToMethod "GetDelegateConstructorStub"
 
-type GetDelegateConstructorStubDelegate a = CWString -> IO (FunPtr (FunPtr a -> IO ObjectId))
-foreign import stdcall "dynamic" makeGetDelegateConstructorStubDelegate :: FunPtr (GetDelegateConstructorStubDelegate a) ->
+type GetDelegateConstructorStubDelegate a = SalsaString -> IO (FunPtr (FunPtr a -> IO ObjectId))
+foreign import ccall "dynamic" makeGetDelegateConstructorStubDelegate :: FunPtr (GetDelegateConstructorStubDelegate a) ->
     (GetDelegateConstructorStubDelegate a)
 
 type DelegateConstructor a = FunPtr a -> IO ObjectId
-foreign import stdcall "dynamic" makeDelegateConstructor :: FunPtr (DelegateConstructor a) -> (DelegateConstructor a)
+foreign import ccall "dynamic" makeDelegateConstructor :: FunPtr (DelegateConstructor a) -> (DelegateConstructor a)
 
 --
 -- Boxing support
@@ -226,21 +223,21 @@
 --   called, returns a boxed object reference to the given type.
 getBoxStub :: String -> IO (FunPtr f)
 getBoxStub typeName = do
-    withCWString typeName $ \typeName' -> return $ getBoxStubRaw typeName'
+    withSalsaString typeName $ \typeName' -> return $ getBoxStubRaw typeName'
 
 {-# NOINLINE getBoxStubRaw #-}
 getBoxStubRaw :: GetBoxStubDelegate a
 getBoxStubRaw = makeGetBoxStubDelegate $ unsafePerformIO $ unsafeGetPointerToMethod "GetBoxStub"
 
-type GetBoxStubDelegate a = CWString -> FunPtr a
-foreign import stdcall "dynamic" makeGetBoxStubDelegate :: FunPtr (GetBoxStubDelegate a) -> GetBoxStubDelegate a
+type GetBoxStubDelegate a = SalsaString -> FunPtr a
+foreign import ccall "dynamic" makeGetBoxStubDelegate :: FunPtr (GetBoxStubDelegate a) -> GetBoxStubDelegate a
 
 
 boxString :: String -> IO ObjectId
-boxString s = withCWString s $ \s' -> boxStringStub s'
+boxString s = withSalsaString s $ \s' -> boxStringStub s'
 
-type BoxStringStub = CWString -> IO ObjectId
-foreign import stdcall "dynamic" makeBoxStringStub :: FunPtr BoxStringStub -> BoxStringStub
+type BoxStringStub = SalsaString -> IO ObjectId
+foreign import ccall "dynamic" makeBoxStringStub :: FunPtr BoxStringStub -> BoxStringStub
 
 {-# NOINLINE boxStringStub #-}
 boxStringStub :: BoxStringStub
@@ -251,7 +248,7 @@
 boxInt32 = boxInt32Stub
 
 type BoxInt32Stub = Int32 -> IO ObjectId
-foreign import stdcall "dynamic" makeBoxInt32Stub :: FunPtr BoxInt32Stub -> BoxInt32Stub
+foreign import ccall "dynamic" makeBoxInt32Stub :: FunPtr BoxInt32Stub -> BoxInt32Stub
 
 {-# NOINLINE boxInt32Stub #-}
 boxInt32Stub :: BoxInt32Stub
@@ -269,7 +266,7 @@
 boxedFalse = unsafePerformIO $ boxBooleanStub False
 
 type BoxBooleanStub = Bool -> IO ObjectId
-foreign import stdcall "dynamic" makeBoxBooleanStub :: FunPtr BoxBooleanStub -> BoxBooleanStub
+foreign import ccall "dynamic" makeBoxBooleanStub :: FunPtr BoxBooleanStub -> BoxBooleanStub
 
 {-# NOINLINE boxBooleanStub #-}
 boxBooleanStub :: BoxBooleanStub
diff --git a/Foreign/Salsa/CLRHost.hs b/Foreign/Salsa/CLRHost.hs
deleted file mode 100644
--- a/Foreign/Salsa/CLRHost.hs
+++ /dev/null
@@ -1,383 +0,0 @@
-{-# LANGUAGE ForeignFunctionInterface #-}
------------------------------------------------------------------------------
--- |
--- Module      : Foreign.Salsa.CLRHost
--- Copyright   : (c) 2007-2008 Andrew Appleyard
--- Licence     : BSD-style (see LICENSE)
--- 
--- Exposes some of the methods of the ICLRRuntimeHost COM interface, which
--- can be used to host the the Microsoft CLR in the process, and to execute
--- code from a .NET assembly.  Includes basic functionality for dealing
--- with the Microsoft COM.
---
------------------------------------------------------------------------------
-module Foreign.Salsa.CLRHost (
-    corBindToRuntimeEx,
-    start_ICorRuntimeHost,
-    stop_ICorRuntimeHost,
-    loadDriverAndBoot,
-    ICorRuntimeHost
-    ) where
-
-import Data.Word
-import Data.Int
-import Foreign.Ptr
-import Foreign.Storable
-import Foreign.Marshal
-import Foreign.C.String
-import System.Win32
-import System.IO
-import Control.Exception (bracket)
-import Unsafe.Coerce (unsafeCoerce)
-import System.IO.Unsafe (unsafePerformIO)
-import qualified Data.ByteString as S
-import Text.Printf
-
-import Foreign.Salsa.Driver
-
---
--- Global static functions for hosting the CLR
---
-
-type ICorRuntimeHost = InterfacePtr
-
--- | 'corBindToRunTimeEx' loads the CLR execution engine into the process and returns
---   a COM interface for it.
-corBindToRuntimeEx :: IO ICorRuntimeHost
-corBindToRuntimeEx = do
-    -- Load the 'mscoree' dynamic library into the process.  This is the
-    -- 'stub' library for the .NET execution engine, and is used to load an
-    -- appropriate version of the real runtime via a call to
-    -- 'CorBindToRuntimeEx'.
-    hMscoree <- loadLibrary "mscoree.dll"
-
-    -- Obtain a pointer to the 'CorBindToRuntimeEx' function from mscoree.dll
-    corBindToRuntimeExAddr <- getProcAddress hMscoree "CorBindToRuntimeEx"
-    let corBindToRuntimeEx = makeCorBindToRuntimeEx $ castPtrToFunPtr corBindToRuntimeExAddr
-
-    let clsid_CorRuntimeHost = Guid 0xCB2F6723 0xAB3A 0x11D2 0x9C 0x40 0x00 0xC0 0x4F 0xA3 0x0A 0x3E
-        iid_ICorRuntimeHost  = Guid 0xCB2F6722 0xAB3A 0x11D2 0x9C 0x40 0x00 0xC0 0x4F 0xA3 0x0A 0x3E
-
-    -- Request the shim (mscoree.dll) to load a version of the runtime into the
-    -- process, returning a pointer to an implementation of the ICorRuntimeHost
-    -- for controlling the runtime.
-    with (nullPtr :: ICorRuntimeHost) $ \clrHostPtr -> do
-        -- Call 'corBindToRuntimeEx' to obtain an ICorRuntimeHost 
-        with clsid_CorRuntimeHost $ \refCLSID_CorRuntimeHost -> 
-            with iid_ICorRuntimeHost $ \refIID_ICorRuntimeHost -> 
-                corBindToRuntimeEx nullPtr nullPtr 0 refCLSID_CorRuntimeHost
-                    refIID_ICorRuntimeHost clrHostPtr >>= checkHR "CorBindToRuntimeEx"
-        peek clrHostPtr
-
-type CorBindToRuntimeEx = LPCWSTR -> LPCWSTR -> DWORD -> Ptr CLSID -> Ptr IID -> Ptr ICorRuntimeHost -> IO HResult
-foreign import stdcall "dynamic" makeCorBindToRuntimeEx :: FunPtr CorBindToRuntimeEx -> CorBindToRuntimeEx
-
-
--- | 'start_ICorRuntimeHost' calls the Start method of the given ICorRuntimeHost interface.
-start_ICorRuntimeHost this = do
-    -- Initialise COM (and the threading model)
-    coInitializeEx nullPtr coInit_ApartmentThreaded
-    -- TODO: Allow the library user to select their desired threading model
-    --       (we use an STA for the time being so we can use GUI libraries).
-
-    f <- getInterfaceFunction 10 makeStart this
-    f this >>= checkHR "ICorRuntimeHost.Start"
-
-type Start = ICorRuntimeHost -> IO HResult
-foreign import stdcall "dynamic" makeStart :: FunPtr Start -> Start
-
-
--- | 'stop_ICorRuntimeHost' calls the Stop method of the given ICorRuntimeHost interface.
-stop_ICorRuntimeHost this = do
-    f <- getInterfaceFunction 11 makeStop this
-    f this >>= checkHR "ICorRuntimeHost.Stop"
-
-    coUninitialize
-
-type Stop = ICorRuntimeHost -> IO HResult
-foreign import stdcall "dynamic" makeStop :: FunPtr Stop -> Stop
-
-
--- | 'getDefaultDomain_ICorRuntimeHost' calls the GetDefaultDOmain method of the given
---   ICorRuntimeHost interface.
-getDefaultDomain_ICorRuntimeHost this = do
-    f <- getInterfaceFunction 13 makeGetDefaultDomain this
-    with (nullPtr :: InterfacePtr) $ \appDomainPtr -> do
-        f this appDomainPtr >>= checkHR "ICorRuntimeHost.GetDefaultDomain"
-        peek appDomainPtr
-
-type GetDefaultDomain = ICorRuntimeHost -> Ptr InterfacePtr -> IO HResult
-foreign import stdcall "dynamic" makeGetDefaultDomain :: FunPtr GetDefaultDomain -> GetDefaultDomain
-
-
-type AppDomain = InterfacePtr -- mscorlib::_AppDomain
-
--- | 'load_AppDomain' calls mscorlib::_AppDomain.Load_3(SafeArray* rawAssembly, _Assembly** result).
-load_AppDomain this rawAssembly = do
-    f <- getInterfaceFunction 45 makeLoad_AppDomain this
-    with (nullPtr :: Assembly) $ \assemblyPtr -> do
-        f this rawAssembly assemblyPtr >>= checkHR "AppDomain.Load"
-        peek assemblyPtr
-
-type Load_AppDomain = AppDomain -> SafeArray -> Ptr Assembly -> IO HResult
-foreign import stdcall "dynamic" makeLoad_AppDomain :: FunPtr Load_AppDomain -> Load_AppDomain
-
--- | 'load_AppDomain_2' calls mscorlib::_AppDomain.Load_2(BStr assemblyString, _Assembly** result).
-load_AppDomain_2 this assemblyString = do
-    f <- getInterfaceFunction 44 makeLoad_AppDomain_2 this
-    withBStr assemblyString $ \assemblyString' -> do
-        with (nullPtr :: InterfacePtr) $ \assemblyPtr -> do
-            f this assemblyString' assemblyPtr >>= checkHR "AppDomain.Load"
-            peek assemblyPtr
-
-type Load_AppDomain_2 = AppDomain -> BStr -> Ptr InterfacePtr -> IO HResult
-foreign import stdcall "dynamic" makeLoad_AppDomain_2 :: FunPtr Load_AppDomain_2 -> Load_AppDomain_2
-
-
-type Assembly = InterfacePtr -- mscorlib::_Assembly
-
--- | 'getType_Assembly' calls mscorlib::_Assembly.GetType_2(BStr name, _Type** result).
-getType_Assembly this name = do
-    f <- getInterfaceFunction 17 makeGetType_Assembly this
-    withBStr name $ \name' ->
-        with (nullPtr :: Type) $ \typePtr -> do
-            f this name' typePtr >>= checkHR "Assembly.GetType"
-            t <- peek typePtr
-            if t == nullPtr then error "Assembly.GetType failed"
-                            else return t
-
-type GetType_Assembly = Assembly -> BStr -> Ptr Type -> IO HResult
-foreign import stdcall "dynamic" makeGetType_Assembly :: FunPtr GetType_Assembly -> GetType_Assembly
-
-
-type Type = InterfacePtr -- mscorlib::_Type
-
--- | 'invokeMember_Type' calls mscorlib::_Type.InvokeMember_3(BStr name,
---   BindingFlags invokeAttr, _Binder* binder, Variant target, SafeArray* args,
---   Variant* result) to invoke a method without a binder, target or any arguments.
-invokeMember_Type this memberName = do
-    f <- getInterfaceFunction 57 {- _Type.InvokeMember_3 -} makeInvokeMember_Type this
-    withBStr memberName $ \memberName' ->
-        with emptyVariant $ \resultPtr -> do
-            f this memberName' 256 {- BindingFlags.InvokeMethod -}
-                nullPtr 0 0 nullPtr resultPtr >>= checkHR "Type.InvokeMember"
-            peek resultPtr
-
--- Portability note: Type.InvokeMember accepts a by-value variant argument (as its fourth
---                   argument).  In the declaration below, this is encoded as two Word64
---                   arguments.
-type InvokeMember_Type = Type -> BStr -> Word32 -> Ptr () -> Word64 -> Word64 -> Ptr () -> Ptr Variant -> IO HResult
-foreign import stdcall "dynamic" makeInvokeMember_Type :: FunPtr InvokeMember_Type -> InvokeMember_Type
-
-
--- | 'loadDriverAndBoot' loads the Salsa driver assembly into the application domain from 
---   memory (the binary data is originally stored in 'driverData'), and then invokes the
---   Boot method (from the Salsa.Driver class) to obtain a function pointer for invoking 
---   the 'GetPointerToMethod' method.
-loadDriverAndBoot :: ICorRuntimeHost -> IO (FunPtr (CWString -> IO (FunPtr a)))
-loadDriverAndBoot clrHost = do
-    -- Obtain an _AppDomain interface pointer to the default application domain
-    withInterface (getDefaultDomain_ICorRuntimeHost clrHost) $ \untypedAppDomain -> do
-        let iid_AppDomain = Guid 0x05F696DC 0x2B29 0x3663 0xAD 0x8B 0xC4 0x38 0x9C 0xF2 0xA7 0x13
-        withInterface (queryInterface untypedAppDomain iid_AppDomain) $ \appDomain -> do
-
-            -- Create a safe array for the contents of the driver assembly binary
-            bracket (prim_SafeArrayCreateVector varType_UI1 0 (fromIntegral $ S.length driverData))
-                    (prim_SafeArrayDestroy)
-                (\sa -> do
-                    -- Copy the driver assembly data into the safe array
-                    saDataPtr <- with (nullPtr :: Ptr Word8) $ \ptr ->
-                                      prim_SafeArrayAccessData sa ptr >> peek ptr
-                    S.useAsCStringLen driverData $ \(bsPtr,bsLen) -> do
-                        copyBytes saDataPtr (unsafeCoerce bsPtr) bsLen 
-                    prim_SafeArrayUnaccessData sa
-
-                    -- Load the driver assembly into the application domain
-                    withInterface (load_AppDomain appDomain sa) $ \assembly -> do
-
-                        -- Obtain a _Type interface pointer to the Salsa.Driver type
-                        withInterface (getType_Assembly assembly "Salsa.Driver") $ \typ -> do
-
-                            -- Invoke the Boot method of Salsa.Driver to obtain a function
-                            -- pointer to the 'GetPointerToMethod' method
-                            (Variant _ returnValue) <- invokeMember_Type typ "Boot"
-
-                            -- Return a wrapper function for the 'GetPointerToMethod' method
-                            return $ unsafeCoerce returnValue)
-
-{-
-
--- | 'executeInDefaultAppDomain_ICLRRuntimeHost' calls the ExecuteInDefaultAppDomain
---   method of the given ICLRRuntimeHost interface.
-executeInDefaultAppDomain_ICLRRuntimeHost :: ICLRRuntimeHost -> String -> String -> String -> String -> IO DWORD
-executeInDefaultAppDomain_ICLRRuntimeHost this assemblyPath typeName methodName argument = do
-    f <- getInterfaceFunction 11 makeExecuteInDefaultAppDomain this
-    with (0 :: DWORD) $ \resultPtr -> do
-        hResult <- withCWString assemblyPath $ \assemblyPath' -> 
-                       withCWString typeName $ \typeName' ->
-                           withCWString methodName $ \methodName' ->
-                               withCWString argument $ \argument' ->
-                                   f this assemblyPath' typeName' methodName' argument' resultPtr
-        peek resultPtr
-
-type ExecuteInDefaultAppDomain = ICLRRuntimeHost -> LPCWSTR -> LPCWSTR -> LPCWSTR -> LPCWSTR -> Ptr DWORD -> IO HResult
-foreign import stdcall "dynamic" makeExecuteInDefaultAppDomain :: FunPtr ExecuteInDefaultAppDomain -> ExecuteInDefaultAppDomain
-
--}
-
---
--- Types and functions for programming the COM
---
-
-type HResult  = Word32
-type CLSID    = Guid
-type IID      = Guid
-
--- | 'InterfacePtr' is a pointer to an arbitrary COM interface (which is a pointer to
---   a vtable of function pointers for the interface methods).
-type InterfacePtr = Ptr (Ptr (FunPtr ()))
-
-
--- | 'queryInterface' calls the QueryInterface method of the given COM interface.
-queryInterface this iid = do
-    f <- getInterfaceFunction 0 {- QueryInterface -} makeQueryInterface this
-    with (nullPtr :: InterfacePtr) $ \interfacePtr -> do
-        with iid $ \refIID -> f this refIID interfacePtr >>= checkHR "IUnknown.QueryInterface"
-        peek interfacePtr
-
-type QueryInterface = InterfacePtr -> Ptr IID -> Ptr InterfacePtr -> IO HResult
-foreign import stdcall "dynamic" makeQueryInterface :: FunPtr QueryInterface -> QueryInterface
-
-
--- | 'release' calls the Release method of the given COM interface.
-release this = do
-    f <- getInterfaceFunction 2 {- Release -} makeRelease this
-    f this
-
-type Release = InterfacePtr -> IO Word32
-foreign import stdcall "dynamic" makeRelease :: FunPtr Release -> Release
-
-
--- | 'withInterface i f' is like 'bracket' but for COM interface pointers, it calls
---   'release' once the computation is finished.
-withInterface :: (IO InterfacePtr) -> (InterfacePtr -> IO a) -> IO a
-withInterface i = bracket i (\x -> if x == nullPtr then return 0 else release x)
-
-
--- | 'getInterfaceFunction' @i makeFun obj@ is an action that returns the @i@th function
---   of the COM interface referred to by @obj@.  The function is returned as a Haskell
---   function by passing it through @makeFun@.
-getInterfaceFunction :: Int -> (FunPtr a -> b) -> InterfacePtr -> IO b
-getInterfaceFunction index makeFun this = do
-    -- Obtain a pointer to the appropriate element in the vtable for this interface
-    funPtr <- peek this >>= (flip peekElemOff) index
-    -- Cast the function pointer to the expected type, and import it as a Haskell function
-    return $ makeFun $ castFunPtr funPtr
-
-
-foreign import stdcall "CoInitializeEx" coInitializeEx :: Ptr () -> Int32 -> IO HResult
-foreign import stdcall "CoUninitialize" coUninitialize :: IO ()
-
-coInit_MultiThreaded     = 0 :: Int32
-coInit_ApartmentThreaded = 2 :: Int32
-
-data Guid = Guid Word32 Word16 Word16 Word8 Word8 Word8 Word8 Word8 Word8 Word8 Word8 
-    deriving (Show, Eq)
-
-instance Storable Guid where
-    sizeOf    _ = 16
-    alignment _ = 4
-
-    peek guidPtr = do
-        a  <- peek $ plusPtr guidPtr 0 
-        b  <- peek $ plusPtr guidPtr 4
-        c  <- peek $ plusPtr guidPtr 6
-        d0 <- peek $ plusPtr guidPtr 8
-        d1 <- peek $ plusPtr guidPtr 9
-        d2 <- peek $ plusPtr guidPtr 10
-        d3 <- peek $ plusPtr guidPtr 11
-        d4 <- peek $ plusPtr guidPtr 12
-        d5 <- peek $ plusPtr guidPtr 13
-        d6 <- peek $ plusPtr guidPtr 14
-        d7 <- peek $ plusPtr guidPtr 15
-        return $ Guid a b c d0 d1 d2 d3 d4 d5 d6 d7
-
-    poke guidPtr (Guid a b c d0 d1 d2 d3 d4 d5 d6 d7) = do
-        poke (plusPtr guidPtr 0)  a
-        poke (plusPtr guidPtr 4)  b
-        poke (plusPtr guidPtr 6)  c
-        poke (plusPtr guidPtr 8)  d0
-        poke (plusPtr guidPtr 9)  d1
-        poke (plusPtr guidPtr 10) d2
-        poke (plusPtr guidPtr 11) d3
-        poke (plusPtr guidPtr 12) d4
-        poke (plusPtr guidPtr 13) d5
-        poke (plusPtr guidPtr 14) d6
-        poke (plusPtr guidPtr 15) d7
-
---
--- Variant Support
---
-
-data Variant = Variant VarType Word64 deriving (Show, Eq)
-type VarType = Word16
-
-varType_Empty, varType_UI1 :: VarType
-varType_Empty = 0
-varType_UI1   = 17
-
-emptyVariant = Variant varType_Empty 0
-
-instance Storable Variant where
-    sizeOf    _ = 16
-    alignment _ = 8
-
-    peek ptr = do
-        a  <- peek $ plusPtr ptr 0 
-        b  <- peek $ plusPtr ptr 8
-        return $ Variant a b
-
-    poke ptr (Variant a b) = do
-        poke (plusPtr ptr 0) a
-        poke (plusPtr ptr 2) (0 :: Word16)
-        poke (plusPtr ptr 4) (0 :: Word16)
-        poke (plusPtr ptr 6) (0 :: Word16)
-        poke (plusPtr ptr 8) b
-
---
--- Safe Array Support
---
-
-newtype SafeArray = SafeArray (Ptr ()) deriving (Show, Eq)
-
-foreign import stdcall "SafeArrayCreateVector" prim_SafeArrayCreateVector :: VarType -> Int32 -> Word32 -> IO SafeArray
-foreign import stdcall "SafeArrayAccessData"   prim_SafeArrayAccessData   :: SafeArray -> Ptr (Ptr a) -> IO HResult
-foreign import stdcall "SafeArrayUnaccessData" prim_SafeArrayUnaccessData :: SafeArray -> IO HResult 
-foreign import stdcall "SafeArrayDestroy"      prim_SafeArrayDestroy      :: SafeArray -> IO HResult
-
---
--- BStr Support
---
-
-newtype BStr = BStr (Ptr ()) deriving (Show, Eq)
-
-sysAllocString :: String -> IO BStr
-sysAllocString s = withCWString s prim_SysAllocString
-foreign import stdcall "oleauto.h SysAllocString" prim_SysAllocString :: CWString -> IO BStr
-
-sysFreeString :: BStr -> IO ()
-sysFreeString = prim_SysFreeString
-foreign import stdcall "oleauto.h SysFreeString" prim_SysFreeString :: BStr -> IO ()
-
-withBStr :: String -> (BStr -> IO a) -> IO a
-withBStr s = bracket (sysAllocString s) (sysFreeString)
-
---
--- HResult Support
---
-
-checkHR :: String -> HResult -> IO HResult
-checkHR msg 0 = return 0
-checkHR msg r = error $ printf "%s failed (0x%8x)" msg r
-
--- vim:set ts=4 sw=4 expandtab:
diff --git a/Foreign/Salsa/Common.hs b/Foreign/Salsa/Common.hs
--- a/Foreign/Salsa/Common.hs
+++ b/Foreign/Salsa/Common.hs
@@ -1,8 +1,6 @@
 {-# LANGUAGE EmptyDataDecls #-}
 -----------------------------------------------------------------------------
 -- |
--- Module      : Foreign.Salsa.Common
--- Copyright   : (c) 2007-2008 Andrew Appleyard
 -- Licence     : BSD-style (see LICENSE)
 -- 
 -- Exports data types and functions that are used throughout the bridge
@@ -38,6 +36,10 @@
 instance Show (Obj a) where
     show (Obj id _) = "Object(" ++ show id ++ ")"
     show ObjNull    = "Object(null)"
+
+instance Eq (Obj a) where
+    (==) (Obj id1 _) (Obj id2 _) = id1 == id2
+    (/=) (Obj id1 _) (Obj id2 _) = id1 /= id2
 
 -- Labels for elementary .NET types
 data Object_ = Object_                  -- System.Object
diff --git a/Foreign/Salsa/Core.hs b/Foreign/Salsa/Core.hs
--- a/Foreign/Salsa/Core.hs
+++ b/Foreign/Salsa/Core.hs
@@ -1,21 +1,19 @@
-{-# LANGUAGE TypeFamilies, MultiParamTypeClasses, EmptyDataDecls #-}
+{-# LANGUAGE GADTs, TypeFamilies, MultiParamTypeClasses, EmptyDataDecls #-}
 {-# LANGUAGE ExistentialQuantification, FlexibleContexts, TypeOperators #-}
 {-# LANGUAGE ScopedTypeVariables, TypeSynonymInstances, FlexibleInstances #-}
-{-# OPTIONS_GHC -fallow-undecidable-instances #-}
+{-# LANGUAGE UndecidableInstances, CPP, ForeignFunctionInterface #-}
 -----------------------------------------------------------------------------
 -- |
--- Module      : Foreign.Salsa.Core
--- Copyright   : (c) 2007-2008 Andrew Appleyard
 -- Licence     : BSD-style (see LICENSE)
 -- 
 -----------------------------------------------------------------------------
 module Foreign.Salsa.Core where
 
 import Unsafe.Coerce (unsafeCoerce)
+import System.IO.Unsafe ( unsafePerformIO )
 import Foreign.C.String
-import System.Win32
 
-import Foreign hiding (new, newForeignPtr)
+import Foreign hiding (new, newForeignPtr, unsafePerformIO)
 import Foreign.Concurrent (newForeignPtr)
 
 import Foreign.Salsa.Common
@@ -23,6 +21,13 @@
 import Foreign.Salsa.Resolver
 import Foreign.Salsa.CLR
 
+#if (MONO)
+foreign import ccall mono_free :: Ptr a -> IO ()
+localFree = mono_free
+#else
+import System.Win32
+#endif
+
 -- Reverse function application
 x # f = f x
 
@@ -257,8 +262,8 @@
 class Marshal from to where
     marshal :: from -> (to -> IO a) -> IO a
 
-instance Marshal String CWString where
-    marshal s = withCWString s
+instance Marshal String SalsaString where
+    marshal s = withSalsaString s
 
 instance Marshal (Obj a) ObjectId where
     -- | @'marshal' o k@ provides access to the object identifier in @o@ within
@@ -298,9 +303,9 @@
     unmarshal 0   = return ObjNull
     unmarshal oId = newForeignPtr nullPtr (releaseObject oId) >>= return . Obj oId
 
-instance Unmarshal CWString String where
+instance Unmarshal SalsaString String where
     unmarshal s = do
-        s' <- peekCWString s
+        s' <- peekSalsaString s
         localFree s -- Free the string allocated by the .NET marshaler (use
                     -- LocalFree for LPWSTRs and SysFreeString for BSTRs)
         return s'
@@ -437,10 +442,20 @@
     unmarshal a1' >>= (\a1 -> unmarshal a2' >>= (\a2 -> unmarshal a3' >>= (\a3 ->
     unmarshal a4' >>= (\a4 -> (f a1 a2 a3 a4 >>= flip marshal return)))))
 
-marshalFn5 f = \a1' a2' a3' a4' a5' -> 
-    unmarshal a1' >>= (\a1 -> unmarshal a2' >>= (\a2 -> unmarshal a3' >>= (\a3 ->
+marshalFn5 f = \a1' a2' a3' a4' a5' -> do
+    a1 <- unmarshal a1'
+    a2 <- unmarshal a2'
+    a3 <- unmarshal a3'
+    a4 <- unmarshal a4'
+    a5 <- unmarshal a5'
+    v <- f a1 a2 a3 a4 a5
+    return $ marshal v
+    {- 
+    >>= (\a1 -> unmarshal a2' >>= (\a2 -> unmarshal a3' >>= (\a3 ->
     unmarshal a4' >>= (\a4 -> unmarshal a5' >>= (\a5 ->
     (f a1 a2 a3 a5 a5 >>= flip marshal return))))))
+    -}
+
 -- ...
 
 -- vim:set sw=4 ts=4 expandtab:
diff --git a/Foreign/Salsa/Driver.hs b/Foreign/Salsa/Driver.hs
--- a/Foreign/Salsa/Driver.hs
+++ b/Foreign/Salsa/Driver.hs
@@ -1,953 +1,20 @@
--- Generated 2008-10-06 01:24:30.052 AUS Eastern Daylight Time
-module Foreign.Salsa.Driver (driverData) where
-import qualified Data.ByteString.Char8 as B
-{-# NOINLINE driverData #-}
-driverData = B.pack "\
-  \\x4d\x5a\x90\x00\x03\x00\x00\x00\x04\x00\x00\x00\xff\xff\x00\x00\xb8\x00\x00\x00\
-  \\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x80\x00\x00\x00\x0e\x1f\xba\x0e\x00\xb4\x09\xcd\x21\xb8\x01\x4c\xcd\x21\x54\x68\
-  \\x69\x73\x20\x70\x72\x6f\x67\x72\x61\x6d\x20\x63\x61\x6e\x6e\x6f\x74\x20\x62\x65\
-  \\x20\x72\x75\x6e\x20\x69\x6e\x20\x44\x4f\x53\x20\x6d\x6f\x64\x65\x2e\x0d\x0d\x0a\
-  \\x24\x00\x00\x00\x00\x00\x00\x00\x50\x45\x00\x00\x4c\x01\x03\x00\x1d\xce\xe8\x48\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x00\x0e\x21\x0b\x01\x08\x00\x00\x42\x00\x00\
-  \\x00\x06\x00\x00\x00\x00\x00\x00\x3e\x61\x00\x00\x00\x20\x00\x00\x00\x80\x00\x00\
-  \\x00\x00\x40\x00\x00\x20\x00\x00\x00\x02\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\
-  \\x04\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\
-  \\x03\x00\x40\x05\x00\x00\x10\x00\x00\x10\x00\x00\x00\x00\x10\x00\x00\x10\x00\x00\
-  \\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe8\x60\x00\x00\
-  \\x53\x00\x00\x00\x00\x80\x00\x00\x60\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x20\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x08\x20\x00\x00\x48\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x74\x65\x78\
-  \\x74\x00\x00\x00\x44\x41\x00\x00\x00\x20\x00\x00\x00\x42\x00\x00\x00\x02\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x60\x2e\x72\x73\x72\
-  \\x63\x00\x00\x00\x60\x03\x00\x00\x00\x80\x00\x00\x00\x04\x00\x00\x00\x44\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x40\x2e\x72\x65\x6c\
-  \\x6f\x63\x00\x00\x0c\x00\x00\x00\x00\xa0\x00\x00\x00\x02\x00\x00\x00\x48\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x42\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x61\x00\x00\x00\x00\x00\x00\
-  \\x48\x00\x00\x00\x02\x00\x05\x00\x9c\x35\x00\x00\x4c\x2b\x00\x00\x01\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x30\x04\x00\xcc\x00\x00\x00\
-  \\x00\x00\x00\x00\x73\x09\x00\x00\x0a\x80\x05\x00\x00\x04\x17\x80\x06\x00\x00\x04\
-  \\x14\xfe\x06\x0d\x00\x00\x06\x73\x23\x00\x00\x06\x80\x07\x00\x00\x04\x73\x0a\x00\
-  \\x00\x0a\x80\x08\x00\x00\x04\x73\x0b\x00\x00\x0a\x80\x09\x00\x00\x04\x28\x0c\x00\
-  \\x00\x0a\x73\x0d\x00\x00\x0a\x6f\x0e\x00\x00\x0a\x26\x28\x0f\x00\x00\x0a\x28\x10\
-  \\x00\x00\x0a\x72\x01\x00\x00\x70\x73\x11\x00\x00\x0a\x19\x6f\x12\x00\x00\x0a\x80\
-  \\x01\x00\x00\x04\x7e\x01\x00\x00\x04\x72\x21\x00\x00\x70\x72\x3d\x00\x00\x70\x6f\
-  \\x13\x00\x00\x0a\x80\x02\x00\x00\x04\x7e\x02\x00\x00\x04\x72\x55\x00\x00\x70\x6f\
-  \\x14\x00\x00\x0a\x80\x03\x00\x00\x04\x7e\x05\x00\x00\x04\x7e\x06\x00\x00\x04\x25\
-  \\x17\x58\x80\x06\x00\x00\x04\x17\x8c\x24\x00\x00\x01\x6f\x15\x00\x00\x0a\x7e\x05\
-  \\x00\x00\x04\x7e\x06\x00\x00\x04\x25\x17\x58\x80\x06\x00\x00\x04\x16\x8c\x24\x00\
-  \\x00\x01\x6f\x15\x00\x00\x0a\x2a\x2e\x72\x61\x00\x00\x70\x28\x03\x00\x00\x06\x2a\
-  \\x13\x30\x03\x00\x2b\x00\x00\x00\x01\x00\x00\x11\xd0\x02\x00\x00\x02\x28\x16\x00\
-  \\x00\x0a\x02\x28\x17\x00\x00\x0a\x0a\x06\x2d\x10\x72\x87\x00\x00\x70\x72\xab\x00\
-  \\x00\x70\x73\x18\x00\x00\x0a\x7a\x06\x28\x12\x00\x00\x06\x2a\xbe\x02\x7e\x19\x00\
-  \\x00\x0a\x28\x1a\x00\x00\x0a\x2c\x07\x14\x80\x04\x00\x00\x04\x2a\x02\xd0\x05\x00\
-  \\x00\x02\x28\x16\x00\x00\x0a\x28\x1b\x00\x00\x0a\x74\x05\x00\x00\x02\x80\x04\x00\
-  \\x00\x04\x2a\x00\x13\x30\x02\x00\x37\x00\x00\x00\x02\x00\x00\x11\x7e\x03\x00\x00\
-  \\x04\x6f\x1c\x00\x00\x0a\x26\x7e\x02\x00\x00\x04\x6f\x1d\x00\x00\x0a\x28\x1e\x00\
-  \\x00\x0a\x0a\x72\xc1\x00\x00\x70\x06\x28\x1f\x00\x00\x0a\x28\x20\x00\x00\x0a\x7e\
-  \\x01\x00\x00\x04\x06\x6f\x21\x00\x00\x0a\x2a\x00\x13\x30\x03\x00\x40\x00\x00\x00\
-  \\x03\x00\x00\x11\x03\x72\xf5\x00\x00\x70\x28\x22\x00\x00\x0a\x2c\x19\x02\x28\x38\
-  \\x00\x00\x06\x04\x28\x39\x00\x00\x06\x6f\x23\x00\x00\x0a\x0a\x06\x28\x11\x00\x00\
-  \\x06\x2a\x02\x28\x38\x00\x00\x06\x03\x04\x28\x39\x00\x00\x06\x6f\x24\x00\x00\x0a\
-  \\x0b\x07\x28\x12\x00\x00\x06\x2a\x13\x30\x01\x00\x0e\x00\x00\x00\x04\x00\x00\x11\
-  \\x02\x28\x38\x00\x00\x06\x0a\x06\x28\x13\x00\x00\x06\x2a\x00\x00\x13\x30\x02\x00\
-  \\x14\x00\x00\x00\x05\x00\x00\x11\x02\x28\x38\x00\x00\x06\x03\x6f\x25\x00\x00\x0a\
-  \\x0a\x06\x28\x14\x00\x00\x06\x2a\x13\x30\x02\x00\x14\x00\x00\x00\x05\x00\x00\x11\
-  \\x02\x28\x38\x00\x00\x06\x03\x6f\x25\x00\x00\x0a\x0a\x06\x28\x15\x00\x00\x06\x2a\
-  \\x13\x30\x01\x00\x0e\x00\x00\x00\x04\x00\x00\x11\x02\x28\x38\x00\x00\x06\x0a\x06\
-  \\x28\x16\x00\x00\x06\x2a\x00\x00\x1b\x30\x03\x00\x50\x00\x00\x00\x06\x00\x00\x11\
-  \\x02\x2d\x02\x16\x2a\x02\x75\x04\x00\x00\x1b\x2c\x0e\x02\xa5\x24\x00\x00\x01\x0a\
-  \\x06\x2d\x02\x18\x2a\x17\x2a\x7e\x05\x00\x00\x04\x25\x0c\x28\x26\x00\x00\x0a\x7e\
-  \\x05\x00\x00\x04\x7e\x06\x00\x00\x04\x02\x6f\x15\x00\x00\x0a\x7e\x06\x00\x00\x04\
-  \\x25\x17\x58\x80\x06\x00\x00\x04\x0b\xde\x07\x08\x28\x27\x00\x00\x0a\xdc\x07\x2a\
-  \\x01\x10\x00\x00\x02\x00\x27\x00\x20\x47\x00\x07\x00\x00\x00\x00\x1b\x30\x03\x00\
-  \\x59\x00\x00\x00\x07\x00\x00\x11\x02\x2d\x02\x14\x2a\x02\x17\x33\x07\x17\x8c\x24\
-  \\x00\x00\x01\x2a\x02\x18\x33\x07\x16\x8c\x24\x00\x00\x01\x2a\x7e\x05\x00\x00\x04\
-  \\x25\x0c\x28\x26\x00\x00\x0a\x7e\x05\x00\x00\x04\x02\x12\x00\x6f\x28\x00\x00\x0a\
-  \\x2c\x04\x06\x0b\xde\x1d\x72\x01\x01\x00\x70\x02\x8c\x2e\x00\x00\x01\x28\x29\x00\
-  \\x00\x0a\x73\x2a\x00\x00\x0a\x7a\x08\x28\x27\x00\x00\x0a\xdc\x07\x2a\x00\x00\x00\
-  \\x01\x10\x00\x00\x02\x00\x27\x00\x29\x50\x00\x07\x00\x00\x00\x00\x1b\x30\x02\x00\
-  \\x22\x00\x00\x00\x08\x00\x00\x11\x7e\x05\x00\x00\x04\x25\x0a\x28\x26\x00\x00\x0a\
-  \\x7e\x05\x00\x00\x04\x02\x6f\x2b\x00\x00\x0a\x26\xde\x07\x06\x28\x27\x00\x00\x0a\
-  \\xdc\x2a\x00\x00\x01\x10\x00\x00\x02\x00\x0c\x00\x0e\x1a\x00\x07\x00\x00\x00\x00\
-  \\x1b\x30\x03\x00\x2a\x00\x00\x00\x09\x00\x00\x11\x02\x28\x2c\x00\x00\x0a\x0a\x7e\
-  \\x08\x00\x00\x04\x25\x0b\x28\x26\x00\x00\x0a\x7e\x08\x00\x00\x04\x06\x02\x6f\x2d\
-  \\x00\x00\x0a\xde\x07\x07\x28\x27\x00\x00\x0a\xdc\x06\x2a\x00\x00\x01\x10\x00\x00\
-  \\x02\x00\x13\x00\x0e\x21\x00\x07\x00\x00\x00\x00\x1b\x30\x02\x00\x22\x00\x00\x00\
-  \\x0a\x00\x00\x11\x7e\x08\x00\x00\x04\x25\x0a\x28\x26\x00\x00\x0a\x7e\x08\x00\x00\
-  \\x04\x02\x6f\x2e\x00\x00\x0a\x26\xde\x07\x06\x28\x27\x00\x00\x0a\xdc\x2a\x00\x00\
-  \\x01\x10\x00\x00\x02\x00\x0c\x00\x0e\x1a\x00\x07\x00\x00\x00\x00\x13\x30\x05\x00\
-  \\x65\x00\x00\x00\x0b\x00\x00\x11\x7e\x03\x00\x00\x04\x02\x1c\x0f\x01\x28\x27\x00\
-  \\x00\x06\x0f\x01\x28\x28\x00\x00\x06\x6f\x2f\x00\x00\x0a\x0a\x04\x06\x6f\x30\x00\
-  \\x00\x0a\x6f\x34\x00\x00\x06\x02\x0f\x01\x28\x27\x00\x00\x06\x0f\x01\x28\x28\x00\
-  \\x00\x06\xd0\x02\x00\x00\x02\x28\x16\x00\x00\x0a\x73\x31\x00\x00\x0a\x0b\x04\x07\
-  \\x6f\x32\x00\x00\x0a\x6f\x34\x00\x00\x06\x07\x0f\x01\x28\x2c\x00\x00\x06\x6f\x33\
-  \\x00\x00\x0a\x28\x0e\x00\x00\x06\x2a\x1e\x02\x28\x34\x00\x00\x0a\x2a\x00\x00\x00\
-  \\x03\x30\x03\x00\x7a\x00\x00\x00\x00\x00\x00\x00\x02\x7b\x1a\x00\x00\x04\x2d\x37\
-  \\x03\x02\x7b\x19\x00\x00\x04\x6f\x35\x00\x00\x0a\x26\x03\x7e\x36\x00\x00\x0a\x16\
-  \\x6f\x37\x00\x00\x0a\x03\x7e\x38\x00\x00\x0a\x02\x7b\x19\x00\x00\x04\x6f\x39\x00\
-  \\x00\x0a\x03\x7e\x3a\x00\x00\x0a\x6f\x3b\x00\x00\x0a\x2b\x23\x03\x16\x02\x7b\x1a\
-  \\x00\x00\x04\x6f\x3c\x00\x00\x0a\x28\x1d\x00\x00\x06\x03\x7e\x3d\x00\x00\x0a\x02\
-  \\x7b\x1a\x00\x00\x04\x6f\x3e\x00\x00\x0a\x03\x02\x7b\x19\x00\x00\x04\x28\x1e\x00\
-  \\x00\x06\x03\x7e\x3f\x00\x00\x0a\x6f\x3b\x00\x00\x0a\x2a\x00\x00\x13\x30\x05\x00\
-  \\x9b\x00\x00\x00\x0c\x00\x00\x11\x73\x45\x00\x00\x06\x0b\x07\x02\x7d\x1a\x00\x00\
-  \\x04\x07\x07\x7b\x1a\x00\x00\x04\x6f\x40\x00\x00\x0a\x7d\x19\x00\x00\x04\x07\x7b\
-  \\x19\x00\x00\x04\x6f\x41\x00\x00\x0a\x2d\x13\x07\x7b\x1a\x00\x00\x04\x2d\x0b\x72\
-  \\x37\x01\x00\x70\x73\x42\x00\x00\x0a\x7a\x12\x00\xd0\x2e\x00\x00\x01\x28\x16\x00\
-  \\x00\x0a\x07\x7b\x1a\x00\x00\x04\x2c\x17\x07\x7b\x1a\x00\x00\x04\x6f\x3c\x00\x00\
-  \\x0a\x28\x3d\x00\x00\x06\x28\x19\x00\x00\x06\x2b\x05\x7e\x43\x00\x00\x0a\x28\x29\
-  \\x00\x00\x06\x07\x7b\x19\x00\x00\x04\x6f\x44\x00\x00\x0a\x72\x9d\x01\x00\x70\x28\
-  \\x1f\x00\x00\x0a\x06\x07\xfe\x06\x46\x00\x00\x06\x73\x33\x00\x00\x06\x28\x10\x00\
-  \\x00\x06\x2a\x1e\x02\x28\x34\x00\x00\x0a\x2a\x00\x03\x30\x03\x00\x79\x00\x00\x00\
-  \\x00\x00\x00\x00\x02\x7b\x1b\x00\x00\x04\x6f\x45\x00\x00\x0a\x2c\x25\x03\x16\x02\
-  \\x7b\x1b\x00\x00\x04\x6f\x3c\x00\x00\x0a\x28\x1d\x00\x00\x06\x03\x7e\x46\x00\x00\
-  \\x0a\x02\x7b\x1b\x00\x00\x04\x6f\x47\x00\x00\x0a\x2b\x35\x03\x16\x02\x7b\x1b\x00\
-  \\x00\x04\x6f\x40\x00\x00\x0a\x28\x1b\x00\x00\x06\x03\x17\x02\x7b\x1b\x00\x00\x04\
-  \\x6f\x3c\x00\x00\x0a\x28\x1d\x00\x00\x06\x03\x7e\x48\x00\x00\x0a\x02\x7b\x1b\x00\
-  \\x00\x04\x6f\x47\x00\x00\x0a\x03\x02\x7b\x1b\x00\x00\x04\x6f\x49\x00\x00\x0a\x28\
-  \\x1f\x00\x00\x06\x2a\x00\x00\x00\x13\x30\x05\x00\xb1\x00\x00\x00\x0d\x00\x00\x11\
-  \\x73\x47\x00\x00\x06\x0c\x08\x02\x7d\x1b\x00\x00\x04\x08\x7b\x1b\x00\x00\x04\x6f\
-  \\x40\x00\x00\x0a\x0a\x12\x01\x08\x7b\x1b\x00\x00\x04\x6f\x49\x00\x00\x0a\x6f\x4a\
-  \\x00\x00\x0a\x28\x1a\x00\x00\x06\x08\x7b\x1b\x00\x00\x04\x6f\x45\x00\x00\x0a\x2d\
-  \\x2c\x08\x7b\x1b\x00\x00\x04\x6f\x40\x00\x00\x0a\x28\x1a\x00\x00\x06\x08\x7b\x1b\
-  \\x00\x00\x04\x6f\x3c\x00\x00\x0a\x28\x3d\x00\x00\x06\x28\x19\x00\x00\x06\x28\x01\
-  \\x00\x00\x2b\x2b\x15\x08\x7b\x1b\x00\x00\x04\x6f\x3c\x00\x00\x0a\x28\x3d\x00\x00\
-  \\x06\x28\x19\x00\x00\x06\x28\x29\x00\x00\x06\x06\x6f\x44\x00\x00\x0a\x72\xa5\x01\
-  \\x00\x70\x08\x7b\x1b\x00\x00\x04\x6f\x44\x00\x00\x0a\x28\x4b\x00\x00\x0a\x07\x08\
-  \\xfe\x06\x48\x00\x00\x06\x73\x33\x00\x00\x06\x28\x10\x00\x00\x06\x2a\x1e\x02\x28\
-  \\x34\x00\x00\x0a\x2a\x00\x00\x00\x13\x30\x06\x00\xa5\x00\x00\x00\x0e\x00\x00\x11\
-  \\x03\x7e\x4c\x00\x00\x0a\x6f\x3b\x00\x00\x0a\x03\x7e\x3d\x00\x00\x0a\x02\x7b\x1c\
-  \\x00\x00\x04\x17\x8d\x0b\x00\x00\x01\x0a\x06\x16\xd0\x27\x00\x00\x01\x28\x16\x00\
-  \\x00\x0a\xa2\x06\x6f\x23\x00\x00\x0a\x6f\x3e\x00\x00\x0a\x03\x7e\x4d\x00\x00\x0a\
-  \\x02\x7b\x1c\x00\x00\x04\x72\xa9\x01\x00\x70\x6f\x17\x00\x00\x0a\x6f\x47\x00\x00\
-  \\x0a\x03\x7e\x3d\x00\x00\x0a\x02\x7b\x1d\x00\x00\x04\x18\x8d\x0b\x00\x00\x01\x0b\
-  \\x07\x16\xd0\x01\x00\x00\x01\x28\x16\x00\x00\x0a\xa2\x07\x17\xd0\x27\x00\x00\x01\
-  \\x28\x16\x00\x00\x0a\xa2\x07\x6f\x23\x00\x00\x0a\x6f\x3e\x00\x00\x0a\x03\x7e\x46\
-  \\x00\x00\x0a\x7e\x14\x00\x00\x04\x6f\x47\x00\x00\x0a\x03\x7e\x3f\x00\x00\x0a\x6f\
-  \\x3b\x00\x00\x0a\x2a\x00\x00\x00\x13\x30\x05\x00\x78\x00\x00\x00\x0f\x00\x00\x11\
-  \\x73\x49\x00\x00\x06\x0b\x07\x02\x7d\x1d\x00\x00\x04\x07\x07\x7b\x1d\x00\x00\x04\
-  \\x28\x20\x00\x00\x06\x7d\x1c\x00\x00\x04\x07\x7b\x1d\x00\x00\x04\x28\x2b\x00\x00\
-  \\x06\x26\x12\x00\xd0\x2e\x00\x00\x01\x28\x16\x00\x00\x0a\x17\x8d\x0b\x00\x00\x01\
-  \\x0c\x08\x16\xd0\x27\x00\x00\x01\x28\x16\x00\x00\x0a\xa2\x08\x28\x29\x00\x00\x06\
-  \\x07\x7b\x1d\x00\x00\x04\x6f\x44\x00\x00\x0a\x72\x9d\x01\x00\x70\x28\x1f\x00\x00\
-  \\x0a\x06\x07\xfe\x06\x4a\x00\x00\x06\x73\x33\x00\x00\x06\x28\x10\x00\x00\x06\x2a\
-  \\x1e\x02\x28\x34\x00\x00\x0a\x2a\x13\x30\x03\x00\x94\x00\x00\x00\x10\x00\x00\x11\
-  \\x02\x7b\x1e\x00\x00\x04\x6f\x4e\x00\x00\x0a\x2c\x47\x02\x7b\x1e\x00\x00\x04\x6f\
-  \\x4f\x00\x00\x0a\x2c\x27\x02\x7b\x1e\x00\x00\x04\x6f\x50\x00\x00\x0a\x0a\x06\x75\
-  \\x2e\x00\x00\x01\x2c\x49\x03\x7e\x51\x00\x00\x0a\x06\xa5\x2e\x00\x00\x01\x6f\x52\
-  \\x00\x00\x0a\x2b\x36\x03\x7e\x53\x00\x00\x0a\x02\x7b\x1e\x00\x00\x04\x6f\x54\x00\
-  \\x00\x0a\x2b\x23\x03\x16\x02\x7b\x1e\x00\x00\x04\x6f\x40\x00\x00\x0a\x28\x1b\x00\
-  \\x00\x06\x03\x7e\x55\x00\x00\x0a\x02\x7b\x1e\x00\x00\x04\x6f\x54\x00\x00\x0a\x03\
-  \\x02\x7b\x1e\x00\x00\x04\x6f\x56\x00\x00\x0a\x28\x1e\x00\x00\x06\x03\x7e\x3f\x00\
-  \\x00\x0a\x6f\x3b\x00\x00\x0a\x2a\x13\x30\x05\x00\x8b\x00\x00\x00\x11\x00\x00\x11\
-  \\x73\x4b\x00\x00\x06\x0b\x07\x02\x7d\x1e\x00\x00\x04\x12\x00\x07\x7b\x1e\x00\x00\
-  \\x04\x6f\x56\x00\x00\x0a\x28\x1a\x00\x00\x06\x07\x7b\x1e\x00\x00\x04\x6f\x4e\x00\
-  \\x00\x0a\x2d\x1d\x17\x8d\x0b\x00\x00\x01\x0c\x08\x16\x07\x7b\x1e\x00\x00\x04\x6f\
-  \\x40\x00\x00\x0a\x28\x1a\x00\x00\x06\xa2\x08\x2b\x05\x7e\x43\x00\x00\x0a\x28\x29\
-  \\x00\x00\x06\x07\x7b\x1e\x00\x00\x04\x6f\x40\x00\x00\x0a\x6f\x44\x00\x00\x0a\x72\
-  \\xb7\x01\x00\x70\x07\x7b\x1e\x00\x00\x04\x6f\x44\x00\x00\x0a\x28\x4b\x00\x00\x0a\
-  \\x06\x07\xfe\x06\x4c\x00\x00\x06\x73\x33\x00\x00\x06\x28\x10\x00\x00\x06\x2a\x1e\
-  \\x02\x28\x34\x00\x00\x0a\x2a\x00\x03\x30\x03\x00\x73\x00\x00\x00\x00\x00\x00\x00\
-  \\x02\x7b\x1f\x00\x00\x04\x6f\x4e\x00\x00\x0a\x2c\x25\x03\x16\x02\x7b\x1f\x00\x00\
-  \\x04\x6f\x56\x00\x00\x0a\x28\x1b\x00\x00\x06\x03\x7e\x57\x00\x00\x0a\x02\x7b\x1f\
-  \\x00\x00\x04\x6f\x54\x00\x00\x0a\x2b\x35\x03\x16\x02\x7b\x1f\x00\x00\x04\x6f\x40\
-  \\x00\x00\x0a\x28\x1b\x00\x00\x06\x03\x17\x02\x7b\x1f\x00\x00\x04\x6f\x56\x00\x00\
-  \\x0a\x28\x1b\x00\x00\x06\x03\x7e\x58\x00\x00\x0a\x02\x7b\x1f\x00\x00\x04\x6f\x54\
-  \\x00\x00\x0a\x03\x7e\x3f\x00\x00\x0a\x6f\x3b\x00\x00\x0a\x2a\x00\x13\x30\x06\x00\
-  \\xae\x00\x00\x00\x12\x00\x00\x11\x73\x4d\x00\x00\x06\x0b\x07\x02\x7d\x1f\x00\x00\
-  \\x04\x12\x00\xd0\x38\x00\x00\x01\x28\x16\x00\x00\x0a\x07\x7b\x1f\x00\x00\x04\x6f\
-  \\x4e\x00\x00\x0a\x2d\x30\x18\x8d\x0b\x00\x00\x01\x0c\x08\x16\x07\x7b\x1f\x00\x00\
-  \\x04\x6f\x40\x00\x00\x0a\x28\x1a\x00\x00\x06\xa2\x08\x17\x07\x7b\x1f\x00\x00\x04\
-  \\x6f\x56\x00\x00\x0a\x28\x1a\x00\x00\x06\xa2\x08\x2b\x1b\x17\x8d\x0b\x00\x00\x01\
-  \\x0d\x09\x16\x07\x7b\x1f\x00\x00\x04\x6f\x56\x00\x00\x0a\x28\x1a\x00\x00\x06\xa2\
-  \\x09\x28\x29\x00\x00\x06\x07\x7b\x1f\x00\x00\x04\x6f\x40\x00\x00\x0a\x6f\x44\x00\
-  \\x00\x0a\x72\xcf\x01\x00\x70\x07\x7b\x1f\x00\x00\x04\x6f\x44\x00\x00\x0a\x28\x4b\
-  \\x00\x00\x0a\x06\x07\xfe\x06\x4e\x00\x00\x06\x73\x33\x00\x00\x06\x28\x10\x00\x00\
-  \\x06\x2a\x1e\x02\x28\x34\x00\x00\x0a\x2a\x00\x00\x03\x30\x03\x00\x47\x00\x00\x00\
-  \\x00\x00\x00\x00\x03\x16\x02\x7b\x20\x00\x00\x04\x28\x1b\x00\x00\x06\x02\x7b\x20\
-  \\x00\x00\x04\x6f\x41\x00\x00\x0a\x2c\x11\x03\x7e\x59\x00\x00\x0a\x02\x7b\x20\x00\
-  \\x00\x04\x6f\x39\x00\x00\x0a\x03\xd0\x01\x00\x00\x01\x28\x16\x00\x00\x0a\x28\x1e\
-  \\x00\x00\x06\x03\x7e\x3f\x00\x00\x0a\x6f\x3b\x00\x00\x0a\x2a\x00\x13\x30\x05\x00\
-  \\x5c\x00\x00\x00\x13\x00\x00\x11\x73\x4f\x00\x00\x06\x0b\x07\x02\x7d\x20\x00\x00\
-  \\x04\x12\x00\xd0\x2e\x00\x00\x01\x28\x16\x00\x00\x0a\x17\x8d\x0b\x00\x00\x01\x0c\
-  \\x08\x16\x07\x7b\x20\x00\x00\x04\x28\x1a\x00\x00\x06\xa2\x08\x28\x29\x00\x00\x06\
-  \\x72\xe7\x01\x00\x70\x07\x7b\x20\x00\x00\x04\x6f\x44\x00\x00\x0a\x28\x1f\x00\x00\
-  \\x0a\x06\x07\xfe\x06\x50\x00\x00\x06\x73\x33\x00\x00\x06\x28\x10\x00\x00\x06\x2a\
-  \\xa2\x02\x6f\x5a\x00\x00\x0a\x2d\x1e\x02\xd0\x38\x00\x00\x01\x28\x16\x00\x00\x0a\
-  \\x2e\x11\x02\xd0\x2b\x00\x00\x01\x28\x16\x00\x00\x0a\xfe\x01\x16\xfe\x01\x2a\x16\
-  \\x2a\x00\x00\x00\x13\x30\x02\x00\x1f\x00\x00\x00\x14\x00\x00\x11\x02\xd0\x2b\x00\
-  \\x00\x01\x28\x16\x00\x00\x0a\x33\x08\x1f\x15\x73\x5b\x00\x00\x0a\x2a\x12\x00\xfe\
-  \\x15\x05\x00\x00\x1b\x06\x2a\x4e\x14\xfe\x06\x1a\x00\x00\x06\x73\x5c\x00\x00\x0a\
-  \\x02\x28\x02\x00\x00\x2b\x2a\x56\x02\x28\x17\x00\x00\x06\x2c\x0b\xd0\x2e\x00\x00\
-  \\x01\x28\x16\x00\x00\x0a\x2a\x02\x2a\x3e\x02\x03\x28\x3e\x00\x00\x06\x02\x04\x28\
-  \\x1c\x00\x00\x06\x2a\x96\x03\x28\x17\x00\x00\x06\x2c\x1c\x02\x7e\x46\x00\x00\x0a\
-  \\x7e\x15\x00\x00\x04\x6f\x47\x00\x00\x0a\x02\x7e\x5d\x00\x00\x0a\x03\x6f\x39\x00\
-  \\x00\x0a\x2a\x00\x1b\x30\x04\x00\x40\x00\x00\x00\x15\x00\x00\x11\x03\x0a\x04\x6f\
-  \\x5e\x00\x00\x0a\x0d\x2b\x20\x09\x6f\x5f\x00\x00\x0a\x0b\x07\x6f\x4a\x00\x00\x0a\
-  \\x0c\x02\x06\x25\x17\x58\x0a\x28\x3e\x00\x00\x06\x02\x08\x28\x1c\x00\x00\x06\x09\
-  \\x6f\x60\x00\x00\x0a\x2d\xd8\xde\x0a\x09\x2c\x06\x09\x6f\x61\x00\x00\x0a\xdc\x2a\
-  \\x01\x10\x00\x00\x02\x00\x09\x00\x2c\x35\x00\x0a\x00\x00\x00\x00\xb6\x03\x28\x17\
-  \\x00\x00\x06\x2c\x24\x03\x6f\x41\x00\x00\x0a\x2c\x0c\x02\x7e\x59\x00\x00\x0a\x03\
-  \\x6f\x39\x00\x00\x0a\x02\x7e\x46\x00\x00\x0a\x7e\x14\x00\x00\x04\x6f\x47\x00\x00\
-  \\x0a\x2a\x00\x00\x13\x30\x02\x00\x1a\x00\x00\x00\x04\x00\x00\x11\x03\x6f\x4a\x00\
-  \\x00\x0a\x0a\x02\x06\x28\x1e\x00\x00\x06\x02\x7e\x3f\x00\x00\x0a\x6f\x3b\x00\x00\
-  \\x0a\x2a\x00\x00\x1b\x30\x03\x00\x4d\x00\x00\x00\x16\x00\x00\x11\x02\x6f\x44\x00\
-  \\x00\x0a\x72\xf1\x01\x00\x70\x28\x1f\x00\x00\x0a\x0a\x7e\x09\x00\x00\x04\x25\x0d\
-  \\x28\x26\x00\x00\x0a\x7e\x09\x00\x00\x04\x06\x12\x01\x6f\x62\x00\x00\x0a\x2d\x14\
-  \\x06\x02\x28\x21\x00\x00\x06\x0b\x7e\x09\x00\x00\x04\x06\x07\x6f\x63\x00\x00\x0a\
-  \\x07\x0c\xde\x07\x09\x28\x27\x00\x00\x0a\xdc\x08\x2a\x00\x00\x00\x01\x10\x00\x00\
-  \\x02\x00\x1d\x00\x27\x44\x00\x07\x00\x00\x00\x00\x13\x30\x06\x00\x68\x02\x00\x00\
-  \\x17\x00\x00\x11\x03\x28\x2b\x00\x00\x06\x0a\x12\x00\x28\x27\x00\x00\x06\x28\x1a\
-  \\x00\x00\x06\x12\x00\x28\x28\x00\x00\x06\x28\x19\x00\x00\x06\x73\x29\x00\x00\x06\
-  \\x13\x0c\x12\x0c\x28\x2c\x00\x00\x06\x0b\x7e\x02\x00\x00\x04\x02\x20\x01\x01\x00\
-  \\x00\x6f\x64\x00\x00\x0a\x0c\x08\x72\x01\x02\x00\x70\x07\x17\x6f\x65\x00\x00\x0a\
-  \\x0d\x08\x20\x06\x10\x00\x00\x17\x17\x8d\x0b\x00\x00\x01\x13\x0d\x11\x0d\x16\xd0\
-  \\x27\x00\x00\x01\x28\x16\x00\x00\x0a\xa2\x11\x0d\x6f\x66\x00\x00\x0a\x13\x04\x11\
-  \\x04\x6f\x67\x00\x00\x0a\x13\x05\x11\x05\x7e\x4c\x00\x00\x0a\x6f\x3b\x00\x00\x0a\
-  \\x11\x05\x7e\x46\x00\x00\x0a\x7e\x0e\x00\x00\x04\x6f\x3e\x00\x00\x0a\x11\x05\x7e\
-  \\x4c\x00\x00\x0a\x6f\x3b\x00\x00\x0a\x11\x05\x7e\x68\x00\x00\x0a\x6f\x3b\x00\x00\
-  \\x0a\x11\x05\x7e\x69\x00\x00\x0a\x07\x6f\x39\x00\x00\x0a\x11\x05\x7e\x46\x00\x00\
-  \\x0a\x7e\x0d\x00\x00\x04\x6f\x47\x00\x00\x0a\x11\x05\x7e\x46\x00\x00\x0a\x7e\x0f\
-  \\x00\x00\x04\x6f\x47\x00\x00\x0a\x11\x05\x7e\x6a\x00\x00\x0a\x07\x6f\x39\x00\x00\
-  \\x0a\x11\x05\x7e\x58\x00\x00\x0a\x09\x6f\x54\x00\x00\x0a\x11\x05\x7e\x3f\x00\x00\
-  \\x0a\x6f\x3b\x00\x00\x0a\x08\x72\x1f\x02\x00\x70\x20\xc4\x00\x00\x00\x6f\x6b\x00\
-  \\x00\x0a\x13\x06\x11\x06\x16\x6f\x6c\x00\x00\x0a\x11\x06\x6f\x30\x00\x00\x0a\x13\
-  \\x07\x11\x07\x6f\x6d\x00\x00\x0a\x13\x08\x11\x07\x7e\x53\x00\x00\x0a\x7e\x13\x00\
-  \\x00\x04\x6f\x54\x00\x00\x0a\x11\x07\x7e\x6e\x00\x00\x0a\x6f\x3b\x00\x00\x0a\x11\
-  \\x07\x7e\x6f\x00\x00\x0a\x11\x08\x6f\x70\x00\x00\x0a\x11\x07\x7e\x53\x00\x00\x0a\
-  \\x7e\x13\x00\x00\x04\x6f\x54\x00\x00\x0a\x11\x07\x7e\x4c\x00\x00\x0a\x6f\x3b\x00\
-  \\x00\x0a\x11\x07\x7e\x55\x00\x00\x0a\x09\x6f\x54\x00\x00\x0a\x11\x07\x7e\x46\x00\
-  \\x00\x0a\x7e\x10\x00\x00\x04\x6f\x47\x00\x00\x0a\x11\x07\x7e\x46\x00\x00\x0a\x7e\
-  \\x16\x00\x00\x04\x6f\x47\x00\x00\x0a\x11\x07\x11\x08\x6f\x71\x00\x00\x0a\x11\x07\
-  \\x7e\x3f\x00\x00\x0a\x6f\x3b\x00\x00\x0a\x08\x72\xa9\x01\x00\x70\x1c\x12\x00\x28\
-  \\x27\x00\x00\x06\x12\x00\x28\x28\x00\x00\x06\x6f\x2f\x00\x00\x0a\x13\x09\x11\x09\
-  \\x6f\x30\x00\x00\x0a\x13\x0a\x11\x0a\x7e\x4c\x00\x00\x0a\x6f\x3b\x00\x00\x0a\x11\
-  \\x0a\x7e\x55\x00\x00\x0a\x09\x6f\x54\x00\x00\x0a\x16\x13\x0b\x2b\x22\x11\x0a\x11\
-  \\x0b\x17\x58\x28\x3e\x00\x00\x06\x11\x0a\x12\x00\x28\x28\x00\x00\x06\x11\x0b\x9a\
-  \\x28\x1e\x00\x00\x06\x11\x0b\x17\x58\x13\x0b\x11\x0b\x12\x00\x28\x28\x00\x00\x06\
-  \\x8e\x69\x32\xd1\x11\x0a\x7e\x48\x00\x00\x0a\x07\x72\xa9\x01\x00\x70\x6f\x17\x00\
-  \\x00\x0a\x6f\x47\x00\x00\x0a\x11\x0a\x12\x00\x28\x27\x00\x00\x06\x28\x1c\x00\x00\
-  \\x06\x11\x0a\x7e\x3f\x00\x00\x0a\x6f\x3b\x00\x00\x0a\x08\x6f\x1c\x00\x00\x0a\x2a\
-  \\x1e\x02\x28\x34\x00\x00\x0a\x2a\x1e\x02\x7b\x0a\x00\x00\x04\x2a\x1e\x02\x7b\x0b\
-  \\x00\x00\x04\x2a\x3e\x02\x03\x7d\x0a\x00\x00\x04\x02\x04\x7d\x0b\x00\x00\x04\x2a\
-  \\x13\x30\x02\x00\x51\x00\x00\x00\x18\x00\x00\x11\x73\x74\x00\x00\x0a\x0a\x02\x7b\
-  \\x0b\x00\x00\x04\x0c\x16\x0d\x2b\x21\x08\x09\x9a\x0b\x06\x07\x6f\x44\x00\x00\x0a\
-  \\x6f\x75\x00\x00\x0a\x26\x06\x72\x31\x02\x00\x70\x6f\x75\x00\x00\x0a\x26\x09\x17\
-  \\x58\x0d\x09\x08\x8e\x69\x32\xd9\x06\x02\x7b\x0a\x00\x00\x04\x6f\x44\x00\x00\x0a\
-  \\x6f\x75\x00\x00\x0a\x26\x06\x6f\x76\x00\x00\x0a\x2a\x00\x00\x00\x13\x30\x03\x00\
-  \\x23\x00\x00\x00\x01\x00\x00\x11\x02\x72\xa9\x01\x00\x70\x6f\x17\x00\x00\x0a\x0a\
-  \\x06\x6f\x77\x00\x00\x0a\x06\x6f\x3c\x00\x00\x0a\x28\x3d\x00\x00\x06\x73\x29\x00\
-  \\x00\x06\x2a\x00\x1b\x30\x03\x00\x53\x00\x00\x00\x16\x00\x00\x11\x02\xfe\x16\x04\
-  \\x00\x00\x02\x6f\x76\x00\x00\x0a\x72\x37\x02\x00\x70\x28\x1f\x00\x00\x0a\x0a\x7e\
-  \\x0c\x00\x00\x04\x25\x0d\x28\x26\x00\x00\x0a\x7e\x0c\x00\x00\x04\x06\x12\x01\x6f\
-  \\x62\x00\x00\x0a\x2d\x14\x02\x06\x28\x2d\x00\x00\x06\x0b\x7e\x0c\x00\x00\x04\x06\
-  \\x07\x6f\x63\x00\x00\x0a\x07\x0c\xde\x07\x09\x28\x27\x00\x00\x0a\xdc\x08\x2a\x00\
-  \\x01\x10\x00\x00\x02\x00\x23\x00\x27\x4a\x00\x07\x00\x00\x00\x00\x13\x30\x06\x00\
-  \\x65\x01\x00\x00\x19\x00\x00\x11\x7e\x02\x00\x00\x04\x03\x20\x01\x01\x02\x00\xd0\
-  \\x02\x00\x00\x01\x28\x16\x00\x00\x0a\x6f\x78\x00\x00\x0a\x0a\x06\xd0\x43\x00\x00\
-  \\x01\x28\x16\x00\x00\x0a\x17\x8d\x0b\x00\x00\x01\x13\x06\x11\x06\x16\xd0\x44\x00\
-  \\x00\x01\x28\x16\x00\x00\x0a\xa2\x11\x06\x28\x23\x00\x00\x0a\x17\x8d\x01\x00\x00\
-  \\x01\x13\x07\x11\x07\x16\x19\x8c\x44\x00\x00\x01\xa2\x11\x07\x73\x79\x00\x00\x0a\
-  \\x6f\x7a\x00\x00\x0a\x06\x20\x86\x10\x00\x00\x17\x18\x8d\x0b\x00\x00\x01\x13\x08\
-  \\x11\x08\x16\xd0\x01\x00\x00\x01\x28\x16\x00\x00\x0a\xa2\x11\x08\x17\xd0\x27\x00\
-  \\x00\x01\x28\x16\x00\x00\x0a\xa2\x11\x08\x6f\x66\x00\x00\x0a\x0b\x07\x19\x6f\x7b\
-  \\x00\x00\x0a\x06\x72\xa9\x01\x00\x70\x20\xc6\x01\x00\x00\x02\x28\x27\x00\x00\x06\
-  \\x02\x28\x28\x00\x00\x06\x6f\x2f\x00\x00\x0a\x0c\x08\x19\x6f\x6c\x00\x00\x0a\x16\
-  \\x0d\x38\x88\x00\x00\x00\x09\x2d\x0f\x02\x28\x27\x00\x00\x06\x28\x18\x00\x00\x06\
-  \\x13\x04\x2b\x11\x02\x28\x28\x00\x00\x06\x09\x17\x59\x9a\x28\x18\x00\x00\x06\x13\
-  \\x04\x12\x04\x28\x7c\x00\x00\x0a\x2c\x58\x08\x09\x16\x14\x6f\x7d\x00\x00\x0a\x13\
-  \\x05\x11\x05\xd0\x4b\x00\x00\x01\x28\x16\x00\x00\x0a\x17\x8d\x0b\x00\x00\x01\x13\
-  \\x09\x11\x09\x16\xd0\x0e\x00\x00\x01\x28\x16\x00\x00\x0a\xa2\x11\x09\x28\x23\x00\
-  \\x00\x0a\x17\x8d\x01\x00\x00\x01\x13\x0a\x11\x0a\x16\x12\x04\x28\x7e\x00\x00\x0a\
-  \\x8c\x0e\x00\x00\x01\xa2\x11\x0a\x73\x79\x00\x00\x0a\x6f\x7f\x00\x00\x0a\x09\x17\
-  \\x58\x0d\x09\x02\x28\x28\x00\x00\x06\x8e\x69\x17\x58\x3f\x68\xff\xff\xff\x06\x6f\
-  \\x1c\x00\x00\x0a\x2a\x2e\x73\x0b\x00\x00\x0a\x80\x0c\x00\x00\x04\x2a\x00\x00\x00\
-  \\x03\x30\x03\x00\x01\x01\x00\x00\x00\x00\x00\x00\xd0\x0b\x00\x00\x01\x28\x16\x00\
-  \\x00\x0a\x72\x49\x02\x00\x70\x28\x17\x00\x00\x0a\x80\x0d\x00\x00\x04\xd0\x01\x00\
-  \\x00\x01\x28\x16\x00\x00\x0a\x7e\x43\x00\x00\x0a\x28\x23\x00\x00\x0a\x80\x0e\x00\
-  \\x00\x04\xd0\x28\x00\x00\x01\x28\x16\x00\x00\x0a\x72\x6d\x02\x00\x70\x28\x17\x00\
-  \\x00\x0a\x80\x0f\x00\x00\x04\xd0\x28\x00\x00\x01\x28\x16\x00\x00\x0a\x72\xa9\x02\
-  \\x00\x70\x28\x17\x00\x00\x0a\x80\x10\x00\x00\x04\xd0\x28\x00\x00\x01\x28\x16\x00\
-  \\x00\x0a\x72\xe5\x02\x00\x70\x28\x17\x00\x00\x0a\x80\x11\x00\x00\x04\xd0\x28\x00\
-  \\x00\x01\x28\x16\x00\x00\x0a\x72\x0b\x03\x00\x70\x28\x17\x00\x00\x0a\x80\x12\x00\
-  \\x00\x04\xd0\x02\x00\x00\x02\x28\x16\x00\x00\x0a\x72\x33\x03\x00\x70\x1f\x18\x6f\
-  \\x81\x00\x00\x0a\x80\x13\x00\x00\x04\xd0\x02\x00\x00\x02\x28\x16\x00\x00\x0a\x72\
-  \\x57\x03\x00\x70\x1f\x18\x28\x82\x00\x00\x0a\x80\x14\x00\x00\x04\xd0\x02\x00\x00\
-  \\x02\x28\x16\x00\x00\x0a\x72\x75\x03\x00\x70\x1f\x18\x28\x82\x00\x00\x0a\x80\x15\
-  \\x00\x00\x04\xd0\x05\x00\x00\x02\x28\x16\x00\x00\x0a\x72\xa9\x01\x00\x70\x28\x17\
-  \\x00\x00\x0a\x80\x16\x00\x00\x04\x2a\x22\x02\x17\x28\x83\x00\x00\x0a\x2a\x1e\x02\
-  \\x28\x38\x00\x00\x06\x2a\x00\x00\x13\x30\x05\x00\x37\x00\x00\x00\x1a\x00\x00\x11\
-  \\x7e\x17\x00\x00\x04\x2d\x11\x14\xfe\x06\x3f\x00\x00\x06\x73\x84\x00\x00\x0a\x80\
-  \\x17\x00\x00\x04\x7e\x17\x00\x00\x04\x02\x17\x8d\x4e\x00\x00\x01\x0a\x06\x16\x1f\
-  \\x3b\x9d\x06\x17\x6f\x85\x00\x00\x0a\x28\x03\x00\x00\x2b\x2a\x00\x13\x30\x04\x00\
-  \\x4b\x00\x00\x00\x1b\x00\x00\x11\x02\x8e\x69\x03\x8e\x69\x58\x8d\x0a\x00\x00\x1b\
-  \\x0a\x16\x0b\x2b\x12\x06\x07\x02\x07\xa3\x0a\x00\x00\x1b\xa4\x0a\x00\x00\x1b\x07\
-  \\x17\x58\x0b\x07\x02\x8e\x69\x32\xe8\x16\x0c\x2b\x16\x06\x02\x8e\x69\x08\x58\x03\
-  \\x08\xa3\x0a\x00\x00\x1b\xa4\x0a\x00\x00\x1b\x08\x17\x58\x0c\x08\x03\x8e\x69\x32\
-  \\xe4\x06\x2a\x00\x13\x30\x04\x00\x33\x00\x00\x00\x1c\x00\x00\x11\x17\x03\x8e\x69\
-  \\x58\x8d\x0a\x00\x00\x1b\x0a\x06\x16\x02\xa4\x0a\x00\x00\x1b\x16\x0b\x2b\x14\x06\
-  \\x17\x07\x58\x03\x07\xa3\x0a\x00\x00\x1b\xa4\x0a\x00\x00\x1b\x07\x17\x58\x0b\x07\
-  \\x03\x8e\x69\x32\xe6\x06\x2a\x00\x13\x30\x05\x00\x2d\x00\x00\x00\x1d\x00\x00\x11\
-  \\x03\x8e\x69\x8d\x0b\x00\x00\x1b\x0a\x16\x0b\x2b\x18\x06\x07\x02\x03\x07\xa3\x0a\
-  \\x00\x00\x1b\x6f\x86\x00\x00\x0a\xa4\x0b\x00\x00\x1b\x07\x17\x58\x0b\x07\x03\x8e\
-  \\x69\x32\xe2\x06\x2a\x1e\x02\x6f\x4a\x00\x00\x0a\x2a\x92\x7e\x18\x00\x00\x04\x2d\
-  \\x11\x14\xfe\x06\x40\x00\x00\x06\x73\x87\x00\x00\x0a\x80\x18\x00\x00\x04\x7e\x18\
-  \\x00\x00\x04\x02\x28\x04\x00\x00\x2b\x2a\x00\x00\x03\x30\x03\x00\x62\x00\x00\x00\
-  \\x00\x00\x00\x00\x03\x2d\x0c\x02\x7e\x4c\x00\x00\x0a\x6f\x3b\x00\x00\x0a\x2a\x03\
-  \\x17\x33\x0c\x02\x7e\x68\x00\x00\x0a\x6f\x3b\x00\x00\x0a\x2a\x03\x18\x33\x0c\x02\
-  \\x7e\x88\x00\x00\x0a\x6f\x3b\x00\x00\x0a\x2a\x03\x19\x33\x0c\x02\x7e\x89\x00\x00\
-  \\x0a\x6f\x3b\x00\x00\x0a\x2a\x03\x20\xff\x00\x00\x00\x30\x0e\x02\x7e\x8a\x00\x00\
-  \\x0a\x03\xd2\x6f\x37\x00\x00\x0a\x2a\x02\x7e\x8b\x00\x00\x0a\x03\x6f\x52\x00\x00\
-  \\x0a\x2a\x00\x00\x42\x53\x4a\x42\x01\x00\x01\x00\x00\x00\x00\x00\x0c\x00\x00\x00\
-  \\x76\x32\x2e\x30\x2e\x35\x30\x37\x32\x37\x00\x00\x00\x00\x05\x00\x6c\x00\x00\x00\
-  \\x4c\x0f\x00\x00\x23\x7e\x00\x00\xb8\x0f\x00\x00\xf4\x11\x00\x00\x23\x53\x74\x72\
-  \\x69\x6e\x67\x73\x00\x00\x00\x00\xac\x21\x00\x00\x8c\x03\x00\x00\x23\x55\x53\x00\
-  \\x38\x25\x00\x00\x10\x00\x00\x00\x23\x47\x55\x49\x44\x00\x00\x00\x48\x25\x00\x00\
-  \\x04\x06\x00\x00\x23\x42\x6c\x6f\x62\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x01\
-  \\x57\x15\xa2\x09\x09\x0e\x00\x00\x00\xfa\x01\x33\x00\x16\x00\x00\x01\x00\x00\x00\
-  \\x4f\x00\x00\x00\x0f\x00\x00\x00\x20\x00\x00\x00\x50\x00\x00\x00\x5f\x00\x00\x00\
-  \\x8b\x00\x00\x00\x13\x00\x00\x00\x1d\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\
-  \\x02\x00\x00\x00\x0d\x00\x00\x00\x01\x00\x00\x00\x03\x00\x00\x00\x09\x00\x00\x00\
-  \\x06\x00\x00\x00\x04\x00\x00\x00\x00\x00\x0a\x00\x01\x00\x00\x00\x00\x00\x06\x00\
-  \\x9c\x00\x95\x00\x06\x00\xa3\x00\x95\x00\x06\x00\xb5\x00\x95\x00\x06\x00\xda\x00\
-  \\xc3\x00\x06\x00\xfb\x00\xc3\x00\x06\x00\x1f\x01\xc3\x00\x06\x00\x06\x02\xeb\x01\
-  \\x06\x00\x62\x02\x95\x00\x06\x00\xd6\x02\xc4\x02\x06\x00\xfe\x02\xc4\x02\x06\x00\
-  \\x1c\x03\x95\x00\x06\x00\x41\x03\xc4\x02\x06\x00\x98\x03\x95\x00\x06\x00\xc2\x03\
-  \\xa3\x03\x06\x00\x03\x04\xc3\x00\x06\x00\x31\x04\xeb\x01\x06\x00\x3f\x04\xc4\x02\
-  \\x06\x00\xc0\x04\x95\x00\x06\x00\xcd\x04\x95\x00\x06\x00\xec\x06\xc4\x02\x06\x00\
-  \\x09\x07\xc4\x02\x06\x00\x22\x07\xc4\x02\x06\x00\x3d\x07\xc4\x02\x06\x00\x56\x07\
-  \\xc4\x02\x06\x00\x73\x07\xc4\x02\x06\x00\xaa\x07\x8a\x07\x06\x00\xca\x07\x8a\x07\
-  \\x0a\x00\xfb\x07\xe8\x07\x0a\x00\x01\x08\xe8\x07\x0a\x00\x27\x08\xe8\x07\x0a\x00\
-  \\x3c\x08\xe8\x07\x0e\x00\x63\x08\x4e\x08\x06\x00\x82\x08\x95\x00\x06\x00\x9e\x08\
-  \\xc4\x02\x06\x00\xab\x08\xc3\x00\x06\x00\xf6\x08\x95\x00\x06\x00\x09\x09\x95\x00\
-  \\x06\x00\x37\x09\x95\x00\x06\x00\x5b\x09\x95\x00\x06\x00\x73\x09\xa3\x03\x06\x00\
-  \\xa4\x09\xc4\x02\x06\x00\xcc\x09\xc2\x09\x06\x00\xdd\x09\x95\x00\x06\x00\xeb\x09\
-  \\x95\x00\x06\x00\x6e\x0a\x5d\x0a\x06\x00\x91\x0a\x95\x00\x06\x00\xde\x0a\xc3\x00\
-  \\x06\x00\xec\x0a\xc4\x02\x06\x00\x19\x0b\xc3\x00\x06\x00\x74\x0b\xc3\x00\x06\x00\
-  \\x8e\x0b\xc3\x00\x06\x00\x96\x0b\xc3\x00\x06\x00\xbb\x0b\xc4\x02\x06\x00\xdf\x0b\
-  \\xc4\x02\x06\x00\x0c\x0c\x95\x00\x06\x00\xbb\x0d\x95\x00\x06\x00\x60\x0e\xeb\x01\
-  \\x06\x00\x9b\x0e\x88\x0e\x06\x00\xb0\x0e\x95\x00\x06\x00\xdd\x0e\xc4\x02\x06\x00\
-  \\xec\x0e\xc3\x00\x06\x00\xf9\x0e\xc4\x02\x06\x00\x15\x0f\xc3\x00\x06\x00\x28\x0f\
-  \\xc4\x02\x06\x00\x67\x0f\xc4\x02\x06\x00\x93\x0f\xc3\x00\x06\x00\xbc\x0f\xa3\x03\
-  \\x06\x00\xde\x0f\xa3\x03\x06\x00\x0e\x10\xa3\x03\x06\x00\x24\x10\xa3\x03\x06\x00\
-  \\x55\x10\x49\x10\x06\x00\x6a\x10\xc3\x00\x06\x00\xa1\x10\xc3\x00\x06\x00\xb2\x10\
-  \\xc4\x02\x06\x00\xd6\x10\xa3\x03\x06\x00\xf3\x10\x8a\x07\x06\x00\x0e\x11\xc4\x02\
-  \\x06\x00\x5d\x11\x95\x00\x06\x00\x62\x11\x95\x00\x00\x00\x00\x00\x01\x00\x00\x00\
-  \\x00\x00\x01\x00\x01\x00\x01\x00\x00\x00\x14\x00\x1b\x00\x05\x00\x01\x00\x01\x00\
-  \\x02\x01\x00\x00\x21\x00\x00\x00\x09\x00\x0a\x00\x23\x00\x0a\x01\x10\x00\x37\x00\
-  \\x00\x00\x0d\x00\x0a\x00\x27\x00\x01\x01\x00\x00\x49\x00\x1b\x00\x09\x00\x0d\x00\
-  \\x2f\x00\x01\x01\x00\x00\x63\x00\x1b\x00\x09\x00\x0d\x00\x33\x00\x80\x01\x10\x00\
-  \\x74\x00\x1b\x00\x05\x00\x0d\x00\x37\x00\x80\x01\x10\x00\x80\x00\x1b\x00\x05\x00\
-  \\x17\x00\x38\x00\x02\x01\x00\x00\x85\x00\x00\x00\x09\x00\x19\x00\x41\x00\x03\x01\
-  \\x10\x00\x36\x0b\x00\x00\x05\x00\x19\x00\x45\x00\x03\x01\x10\x00\x36\x0c\x00\x00\
-  \\x05\x00\x1b\x00\x47\x00\x03\x01\x10\x00\xa8\x0c\x00\x00\x05\x00\x1c\x00\x49\x00\
-  \\x03\x01\x10\x00\x08\x0d\x00\x00\x05\x00\x1e\x00\x4b\x00\x03\x01\x10\x00\x80\x0d\
-  \\x00\x00\x05\x00\x1f\x00\x4d\x00\x03\x01\x10\x00\xc0\x0d\x00\x00\x05\x00\x20\x00\
-  \\x4f\x00\x13\x00\xea\x00\x0a\x00\x13\x00\x09\x01\x0e\x00\x13\x00\x2b\x01\x12\x00\
-  \\x16\x00\x71\x01\x28\x00\x11\x00\x13\x02\x39\x00\x11\x00\x1c\x02\x41\x00\x11\x00\
-  \\x3d\x02\x4e\x00\x11\x00\x6b\x02\x57\x00\x11\x00\x6c\x04\xce\x00\x01\x00\xf1\x04\
-  \\xfd\x00\x01\x00\xfd\x04\x01\x01\x11\x00\x49\x05\xce\x00\x36\x00\x94\x05\x54\x01\
-  \\x36\x00\xab\x05\x58\x01\x36\x00\xb7\x05\x54\x01\x36\x00\xdd\x05\x54\x01\x36\x00\
-  \\x03\x06\x54\x01\x36\x00\x1e\x06\x54\x01\x36\x00\x3a\x06\x5c\x01\x36\x00\x53\x06\
-  \\x54\x01\x36\x00\x69\x06\x54\x01\x36\x00\x7a\x06\x54\x01\x11\x00\x39\x11\x0d\x05\
-  \\x11\x00\xa1\x11\x5f\x05\x06\x00\x49\x0b\xfd\x00\x06\x00\x4e\x0b\x58\x01\x06\x00\
-  \\x49\x0c\x54\x01\x06\x00\xbb\x0c\xfd\x00\x06\x00\xc7\x0c\xfd\x00\x06\x00\x1b\x0d\
-  \\x5c\x01\x06\x00\x1b\x0d\x5c\x01\x06\x00\xd4\x0d\xfd\x00\x50\x20\x00\x00\x00\x00\
-  \\x91\x18\x3d\x01\x16\x00\x01\x00\x28\x21\x00\x00\x00\x00\x96\x00\x44\x01\x1a\x00\
-  \\x01\x00\x34\x21\x00\x00\x00\x00\x96\x00\x49\x01\x1e\x00\x01\x00\x6b\x21\x00\x00\
-  \\x00\x00\x96\x00\x5c\x01\x23\x00\x02\x00\x9c\x21\x00\x00\x00\x00\x96\x00\x83\x01\
-  \\x16\x00\x03\x00\xe0\x21\x00\x00\x00\x00\x96\x00\x97\x01\x2c\x00\x03\x00\x2c\x22\
-  \\x00\x00\x00\x00\x96\x00\xa5\x01\x1e\x00\x06\x00\x48\x22\x00\x00\x00\x00\x96\x00\
-  \\xc0\x01\x33\x00\x07\x00\x68\x22\x00\x00\x00\x00\x96\x00\xd0\x01\x33\x00\x09\x00\
-  \\x88\x22\x00\x00\x00\x00\x96\x00\xe0\x01\x1e\x00\x0b\x00\xa4\x22\x00\x00\x00\x00\
-  \\x96\x00\x24\x02\x44\x00\x0c\x00\x10\x23\x00\x00\x00\x00\x96\x00\x33\x02\x49\x00\
-  \\x0d\x00\x88\x23\x00\x00\x00\x00\x96\x00\x54\x02\x52\x00\x0e\x00\xc8\x23\x00\x00\
-  \\x00\x00\x91\x00\x82\x02\x60\x00\x0f\x00\x10\x24\x00\x00\x00\x00\x96\x00\x9d\x02\
-  \\x23\x00\x10\x00\x50\x24\x00\x00\x00\x00\x91\x00\xae\x02\x66\x00\x11\x00\x54\x25\
-  \\x00\x00\x00\x00\x96\x00\xe6\x02\x6f\x00\x14\x00\x8c\x26\x00\x00\x00\x00\x96\x00\
-  \\x09\x03\x75\x00\x15\x00\x08\x28\x00\x00\x00\x00\x96\x00\x21\x03\x7b\x00\x16\x00\
-  \\x34\x29\x00\x00\x00\x00\x96\x00\x4b\x03\x81\x00\x17\x00\x54\x2a\x00\x00\x00\x00\
-  \\x96\x00\x60\x03\x81\x00\x18\x00\x6c\x2b\x00\x00\x00\x00\x96\x00\x75\x03\x7b\x00\
-  \\x19\x00\xd4\x2b\x00\x00\x00\x00\x91\x00\x85\x03\x87\x00\x1a\x00\x00\x2c\x00\x00\
-  \\x00\x00\x91\x00\xd0\x03\x8d\x00\x1b\x00\x2b\x2c\x00\x00\x00\x00\x91\x00\xde\x03\
-  \\x98\x00\x1c\x00\x3f\x2c\x00\x00\x00\x00\x91\x00\xf1\x03\xa1\x00\x1d\x00\x55\x2c\
-  \\x00\x00\x00\x00\x91\x00\x0f\x04\xa8\x00\x1e\x00\x65\x2c\x00\x00\x00\x00\x91\x00\
-  \\x24\x04\xb1\x00\x21\x00\x8c\x2c\x00\x00\x00\x00\x91\x00\x0f\x04\xb9\x00\x23\x00\
-  \\xe8\x2c\x00\x00\x00\x00\x91\x00\x4d\x04\xb1\x00\x26\x00\x18\x2d\x00\x00\x00\x00\
-  \\x91\x00\x58\x04\xc6\x00\x28\x00\x40\x2d\x00\x00\x00\x00\x91\x00\x82\x04\xa1\x00\
-  \\x2a\x00\xac\x2d\x00\x00\x00\x00\x91\x00\x99\x04\xd7\x00\x2b\x00\x20\x30\x00\x00\
-  \\x00\x00\x86\x18\xb3\x04\xdf\x00\x2d\x00\x00\x00\x00\x00\x03\x00\x86\x18\xb3\x04\
-  \\xe3\x00\x2d\x00\x00\x00\x00\x00\x03\x00\xc6\x01\xb9\x04\xe9\x00\x2f\x00\x00\x00\
-  \\x00\x00\x03\x00\xc6\x01\xdb\x04\xee\x00\x30\x00\x00\x00\x00\x00\x03\x00\xc6\x01\
-  \\xe7\x04\xf7\x00\x33\x00\x28\x30\x00\x00\x00\x00\x86\x08\x0d\x05\x06\x01\x34\x00\
-  \\x30\x30\x00\x00\x00\x00\x86\x08\x1c\x05\x0b\x01\x34\x00\x38\x30\x00\x00\x00\x00\
-  \\x86\x18\xb3\x04\x11\x01\x34\x00\x48\x30\x00\x00\x00\x00\xc6\x00\x2f\x05\x1a\x01\
-  \\x36\x00\xa8\x30\x00\x00\x00\x00\x96\x00\x38\x05\x1e\x01\x36\x00\xd8\x30\x00\x00\
-  \\x00\x00\x86\x00\x58\x05\x06\x01\x37\x00\x48\x31\x00\x00\x00\x00\x81\x00\x67\x05\
-  \\x25\x01\x37\x00\xb9\x32\x00\x00\x00\x00\x91\x18\x3d\x01\x16\x00\x38\x00\x00\x00\
-  \\x00\x00\x03\x00\x86\x18\xb3\x04\xe3\x00\x38\x00\x00\x00\x00\x00\x03\x00\xc6\x01\
-  \\xb9\x04\x36\x01\x3a\x00\x00\x00\x00\x00\x03\x00\xc6\x01\xdb\x04\x3b\x01\x3b\x00\
-  \\x00\x00\x00\x00\x03\x00\xc6\x01\xe7\x04\xf7\x00\x3e\x00\x00\x00\x00\x00\x03\x00\
-  \\x86\x18\xb3\x04\xe3\x00\x3f\x00\x00\x00\x00\x00\x03\x00\xc6\x01\xb9\x04\x44\x01\
-  \\x41\x00\x00\x00\x00\x00\x03\x00\xc6\x01\xdb\x04\x4a\x01\x42\x00\x00\x00\x00\x00\
-  \\x03\x00\xc6\x01\xe7\x04\xf7\x00\x45\x00\xc8\x32\x00\x00\x00\x00\x91\x18\x3d\x01\
-  \\x16\x00\x46\x00\xd5\x33\x00\x00\x00\x00\x96\x00\x9b\x06\x60\x01\x46\x00\xe8\x33\
-  \\x00\x00\x00\x00\x96\x00\xa8\x06\x66\x01\x47\x00\x2c\x34\x00\x00\x00\x00\x96\x00\
-  \\xb6\x06\x6d\x01\x48\x00\x84\x34\x00\x00\x00\x00\x96\x00\xb6\x06\x7a\x01\x4a\x00\
-  \\xc4\x34\x00\x00\x00\x00\x96\x00\xc4\x06\x86\x01\x4c\x00\x05\x35\x00\x00\x00\x00\
-  \\x96\x00\xcd\x06\x98\x01\x4e\x00\x2c\x35\x00\x00\x00\x00\x96\x00\xe2\x06\xa1\x01\
-  \\x4f\x00\xde\x33\x00\x00\x00\x00\x91\x00\x25\x11\x60\x01\x51\x00\xfd\x34\x00\x00\
-  \\x00\x00\x91\x00\x86\x11\x58\x05\x52\x00\x00\x00\x00\x00\x03\x00\x86\x18\xb3\x04\
-  \\xe3\x00\x53\x00\x00\x00\x00\x00\x03\x00\xc6\x01\xb9\x04\xa8\x01\x55\x00\x00\x00\
-  \\x00\x00\x03\x00\xc6\x01\xdb\x04\xaf\x01\x56\x00\x00\x00\x00\x00\x03\x00\xc6\x01\
-  \\xe7\x04\xb9\x01\x59\x00\xc1\x24\x00\x00\x00\x00\x86\x18\xb3\x04\xdf\x00\x5a\x00\
-  \\xcc\x24\x00\x00\x00\x00\x86\x00\x52\x0b\x44\x01\x5a\x00\xfb\x25\x00\x00\x00\x00\
-  \\x86\x18\xb3\x04\xdf\x00\x5b\x00\x04\x26\x00\x00\x00\x00\x86\x00\x4e\x0c\x44\x01\
-  \\x5b\x00\x49\x27\x00\x00\x00\x00\x86\x18\xb3\x04\xdf\x00\x5c\x00\x54\x27\x00\x00\
-  \\x00\x00\x86\x00\xd4\x0c\x44\x01\x5c\x00\x8c\x28\x00\x00\x00\x00\x86\x18\xb3\x04\
-  \\xdf\x00\x5d\x00\x94\x28\x00\x00\x00\x00\x86\x00\x21\x0d\x44\x01\x5d\x00\xcb\x29\
-  \\x00\x00\x00\x00\x86\x18\xb3\x04\xdf\x00\x5e\x00\xd4\x29\x00\x00\x00\x00\x86\x00\
-  \\x93\x0d\x44\x01\x5e\x00\x0e\x2b\x00\x00\x00\x00\x86\x18\xb3\x04\xdf\x00\x5f\x00\
-  \\x18\x2b\x00\x00\x00\x00\x86\x00\xde\x0d\x44\x01\x5f\x00\x00\x00\x01\x00\xfe\x08\
-  \\x00\x00\x01\x00\x49\x09\x00\x00\x01\x00\x02\x0a\x00\x00\x02\x00\xfe\x08\x00\x00\
-  \\x03\x00\x0c\x0a\x00\x00\x01\x00\x2e\x0a\x00\x00\x01\x00\x02\x0a\x00\x00\x02\x00\
-  \\x3f\x0a\x00\x00\x01\x00\x02\x0a\x00\x00\x02\x00\x3f\x0a\x00\x00\x01\x00\x52\x0a\
-  \\x00\x00\x01\x00\x5b\x0a\x00\x00\x01\x00\x81\x0a\x00\x00\x01\x00\x81\x0a\x00\x00\
-  \\x01\x00\x9e\x0a\x00\x00\x01\x00\xbe\x0a\x00\x00\x01\x00\xfe\x08\x00\x00\x02\x00\
-  \\xc5\x0a\x00\x00\x03\x00\xd5\x0a\x00\x00\x01\x00\x4e\x0b\x00\x00\x01\x00\x49\x0c\
-  \\x00\x00\x01\x00\xc7\x0c\x00\x00\x01\x00\x1b\x0d\x00\x00\x01\x00\x1b\x0d\x00\x00\
-  \\x01\x00\xd4\x0d\x00\x00\x01\x00\xf8\x0d\x00\x00\x01\x00\xf8\x0d\x00\x00\x01\x00\
-  \\x0a\x0e\x00\x00\x01\x00\x49\x0b\x00\x00\x01\x00\x70\x0b\x00\x00\x02\x00\x10\x0e\
-  \\x00\x00\x03\x00\x1e\x0e\x00\x00\x01\x00\x70\x0b\x00\x00\x02\x00\x2c\x0e\x00\x00\
-  \\x01\x00\x70\x0b\x00\x00\x02\x00\x40\x0e\x00\x00\x03\x00\x51\x0e\x00\x00\x01\x00\
-  \\x70\x0b\x00\x00\x02\x00\x49\x0b\x00\x00\x01\x00\x70\x0b\x00\x00\x02\x00\xc4\x0e\
-  \\x00\x00\x01\x00\xc7\x0c\x00\x00\x01\x00\xd8\x0e\x00\x00\x02\x00\xc7\x0c\x00\x00\
-  \\x01\x00\xf0\x0f\x00\x00\x02\x00\xf7\x0f\x00\x00\x01\x00\x81\x0a\x00\x00\x01\x00\
-  \\x81\x0a\x00\x00\x02\x00\xfe\x0f\x00\x00\x03\x00\xf0\x0f\x00\x00\x01\x00\x07\x10\
-  \\x00\x00\x01\x00\x2f\x10\x00\x00\x02\x00\x3a\x10\x00\x00\x01\x00\xc7\x0c\x00\x00\
-  \\x01\x00\xd8\x0e\x00\x00\x01\x00\xf0\x0f\x00\x00\x02\x00\xf7\x0f\x00\x00\x01\x00\
-  \\xbe\x0a\x00\x00\x01\x00\xbe\x0a\x00\x00\x02\x00\xfe\x0f\x00\x00\x03\x00\xf0\x0f\
-  \\x00\x00\x01\x00\x07\x10\x00\x00\x01\x00\xf0\x0f\x00\x00\x02\x00\xf7\x0f\x00\x00\
-  \\x01\x00\x70\x0b\x00\x00\x01\x00\x70\x0b\x00\x00\x02\x00\xfe\x0f\x00\x00\x03\x00\
-  \\xf0\x0f\x00\x00\x01\x00\x07\x10\x00\x00\x01\x00\x1b\x11\x00\x00\x01\x00\x1b\x11\
-  \\x00\x00\x01\x00\x7b\x11\x00\x00\x02\x00\x7d\x11\x00\x00\x01\x00\x7f\x11\x00\x00\
-  \\x02\x00\x7d\x11\x00\x00\x01\x00\x81\x11\x00\x00\x02\x00\x83\x11\x00\x00\x01\x00\
-  \\xc7\x11\x00\x00\x01\x00\x70\x0b\x00\x00\x02\x00\x10\x0e\x00\x00\x01\x00\xf8\x0d\
-  \\x00\x00\x01\x00\xc5\x11\x00\x00\x01\x00\xf0\x0f\x00\x00\x02\x00\xf7\x0f\x00\x00\
-  \\x01\x00\xf0\x11\x00\x00\x01\x00\xf0\x11\x00\x00\x02\x00\xfe\x0f\x00\x00\x03\x00\
-  \\xf0\x0f\x00\x00\x01\x00\x07\x10\x00\x00\x01\x00\x70\x0b\x00\x00\x01\x00\x70\x0b\
-  \\x00\x00\x01\x00\x70\x0b\x00\x00\x01\x00\x70\x0b\x00\x00\x01\x00\x70\x0b\x00\x00\
-  \\x01\x00\x70\x0b\xa1\x00\xb3\x04\xc0\x01\xa9\x00\xb3\x04\xc0\x01\xb1\x00\xb3\x04\
-  \\xc0\x01\xb9\x00\xb3\x04\xc0\x01\xc1\x00\xb3\x04\xc0\x01\xc9\x00\xb3\x04\xc0\x01\
-  \\xd1\x00\xb3\x04\xe9\x00\xd9\x00\xb3\x04\xdf\x00\x0c\x00\xb3\x04\xdf\x00\x14\x00\
-  \\xb3\x04\xdf\x00\x1c\x00\xb3\x04\xdf\x00\xe1\x00\x19\x08\xdc\x01\xf1\x00\xb3\x04\
-  \\xdf\x00\xe9\x00\x4a\x08\xe1\x01\x01\x01\x6f\x08\x16\x00\x09\x01\x8c\x08\xe7\x01\
-  \\x11\x01\xb3\x04\xc0\x01\x09\x01\xc1\x08\xed\x01\x21\x00\xd7\x08\xf8\x01\x29\x00\
-  \\xeb\x08\xff\x01\x0c\x00\x4a\x08\x05\x02\x59\x00\x1b\x09\x0d\x02\x59\x00\x2d\x09\
-  \\x15\x02\x31\x01\xb3\x04\x1b\x02\x39\x01\x62\x09\x26\x02\x39\x01\x67\x09\x29\x02\
-  \\x41\x01\x7b\x09\x2f\x02\x31\x00\x99\x09\x06\x01\x49\x01\xab\x09\x1a\x01\x51\x01\
-  \\xd1\x09\x37\x02\x59\x01\xe4\x09\x3c\x02\x61\x01\xf3\x09\x42\x02\x21\x00\xfd\x09\
-  \\xc0\x01\x59\x01\x67\x09\x4b\x02\x59\x00\x1f\x0a\x51\x02\x59\x00\x2d\x09\x59\x02\
-  \\x59\x00\x49\x0a\x6e\x02\x69\x01\x76\x0a\x7f\x02\x69\x01\x7c\x0a\x7f\x02\x0c\x00\
-  \\x85\x0a\x8f\x02\x59\x01\xe4\x09\x98\x02\x31\x01\xb3\x04\xc0\x01\x0c\x00\x97\x0a\
-  \\xa9\x02\x41\x01\xa0\x0a\x60\x00\x14\x00\x4a\x08\x05\x02\x14\x00\x97\x0a\xa9\x02\
-  \\x31\x00\xfd\x0a\xcd\x02\x79\x01\x0a\x0b\xdc\x02\x89\x01\xb3\x04\xe1\x02\x89\x01\
-  \\x0a\x0b\xdc\x02\x89\x01\x27\x0b\xed\x02\x09\x00\xb3\x04\xdf\x00\x79\x00\x81\x0b\
-  \\xfd\x02\x99\x01\x9d\x0b\x05\x03\x79\x00\xa6\x0b\x0a\x03\x99\x01\xab\x0b\x05\x03\
-  \\x79\x00\xa6\x0b\x12\x03\x99\x01\xb3\x0b\x05\x03\x79\x00\xa6\x0b\x1b\x03\xa9\x01\
-  \\xc6\x0b\x22\x03\x99\x01\xd4\x0b\x05\x03\x79\x00\xa6\x0b\x28\x03\x99\x01\xdb\x0b\
-  \\x05\x03\xb1\x01\xea\x0b\x06\x01\x59\x00\xfc\x0b\x31\x03\xb9\x01\xb3\x04\xc0\x01\
-  \\x59\x00\x22\x0c\x01\x01\xb1\x01\x2d\x0c\x1a\x01\xa9\x01\x67\x0c\x31\x03\x99\x01\
-  \\x74\x0c\x05\x03\x79\x00\xa6\x0b\x3c\x03\x99\x01\x79\x0c\x05\x03\x51\x00\x82\x0c\
-  \\x45\x03\x89\x00\x96\x0c\x06\x01\x59\x01\xe4\x09\x4f\x03\x99\x01\xfa\x0c\x05\x03\
-  \\x99\x01\x02\x0d\x05\x03\x61\x00\x67\x0c\x31\x03\x61\x00\x3c\x0d\x31\x03\x61\x00\
-  \\x4a\x0d\x72\x03\x99\x01\x5e\x0d\x05\x03\x79\x00\xa6\x0b\x76\x03\x99\x01\x65\x0d\
-  \\x05\x03\x79\x00\xa6\x0b\x7e\x03\x99\x01\x6c\x0d\x05\x03\x61\x00\x72\x0d\x06\x01\
-  \\x99\x01\xae\x0d\x05\x03\x99\x01\xb5\x0d\x05\x03\x99\x01\xf4\x0d\x05\x03\x59\x00\
-  \\xfa\x0d\x31\x03\x2c\x00\xb3\x04\xb3\x03\x34\x00\xb3\x04\xe3\x00\x99\x01\x36\x0e\
-  \\x05\x03\x3c\x00\x6e\x0e\xd9\x03\x44\x00\x7c\x0e\xeb\x03\xd1\x01\xa7\x0e\x31\x03\
-  \\xd9\x01\xbc\x0e\xdf\x00\x1c\x00\x85\x0a\x8f\x02\x1c\x00\x4a\x08\x05\x02\x29\x00\
-  \\xeb\x08\x0e\x04\x31\x00\x09\x0f\x17\x04\x31\x00\x3b\x0f\x23\x04\xf9\x01\x0a\x0b\
-  \\xdc\x02\x99\x01\x4d\x0f\x05\x03\x99\x01\x55\x0f\x05\x03\x99\x01\x5d\x0f\x05\x03\
-  \\x31\x00\xfd\x0a\x32\x04\x79\x01\x7c\x0f\x3c\x04\x79\x00\x99\x0f\x43\x04\x99\x01\
-  \\xa5\x0f\x05\x03\x99\x01\xae\x0f\x05\x03\x79\x00\xa6\x0b\x49\x04\x79\x00\xb2\x0f\
-  \\x53\x04\x19\x02\xb3\x04\x7e\x04\x29\x02\xb3\x04\x8e\x04\x39\x02\xb3\x04\xdf\x00\
-  \\x39\x02\x63\x10\x95\x04\x09\x00\x2f\x05\x1a\x01\x51\x00\x0d\x05\x06\x01\x29\x00\
-  \\xeb\x08\xa8\x04\x41\x02\xb3\x04\xb3\x04\x31\x00\x81\x10\xbb\x04\xf9\x01\x7c\x0f\
-  \\x3c\x04\x2c\x00\x94\x10\x31\x03\x79\x01\xc6\x10\xc2\x04\x2c\x00\xe9\x10\xeb\x03\
-  \\x49\x02\x81\x10\xbb\x04\x61\x02\xb3\x04\xdf\x00\x59\x00\x49\x0a\xf4\x04\x59\x00\
-  \\x2d\x09\xfd\x04\x59\x00\x1d\x11\x06\x05\x4c\x00\xb3\x04\xe3\x00\x59\x01\x75\x11\
-  \\x1e\x05\x64\x00\xb9\x04\xa8\x01\x6c\x00\xb3\x04\xe3\x00\x99\x01\xd2\x11\x05\x03\
-  \\x99\x01\xda\x11\x05\x03\x99\x01\xe2\x11\x05\x03\x99\x01\xea\x11\x05\x03\x2e\x00\
-  \\x2b\x00\xbe\x05\x2e\x00\x3b\x00\xdb\x05\x2e\x00\x43\x00\xe4\x05\x2e\x00\x33\x00\
-  \\xb3\x05\x2e\x00\x0b\x00\x79\x05\x2e\x00\x1b\x00\x86\x05\x2e\x00\x23\x00\xb3\x05\
-  \\x63\x00\x93\x03\x85\x04\xa3\x00\x93\x03\x85\x04\x43\x01\x03\x04\xef\x04\x63\x01\
-  \\x03\x04\xef\x04\x83\x01\x03\x04\xef\x04\xa3\x01\x03\x04\xef\x04\xc3\x01\x03\x04\
-  \\xef\x04\xe3\x01\x03\x04\xef\x04\xe1\x02\x03\x04\xef\x04\x01\x03\x03\x04\xef\x04\
-  \\xe0\x07\x03\x04\xef\x04\x00\x08\x03\x04\xef\x04\x21\x02\x47\x02\x62\x02\x69\x02\
-  \\x74\x02\x84\x02\x9e\x02\xaf\x02\xb8\x02\xc3\x02\xf4\x02\x35\x03\x56\x03\x5f\x03\
-  \\x68\x03\x87\x03\x8b\x03\x95\x03\xa2\x03\xb9\x03\xf0\x03\xff\x03\x5a\x04\x9c\x04\
-  \\xcd\x04\x2e\x05\x36\x05\x3e\x05\x51\x05\x04\x00\x01\x00\x00\x00\x7a\x05\x2b\x01\
-  \\x00\x00\x85\x05\x30\x01\x02\x00\x27\x00\x03\x00\x02\x00\x28\x00\x05\x00\xc5\x01\
-  \\xcc\x01\xd4\x01\x79\x02\xac\x03\xc2\x03\xd2\x03\xe3\x03\x16\x05\x33\x05\x45\x05\
-  \\x48\x05\x69\x05\x04\x80\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x1b\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\
-  \\x8c\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\
-  \\x95\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\
-  \\x4e\x08\x00\x00\x00\x00\x03\x00\x02\x00\x04\x00\x02\x00\x09\x00\x08\x00\x0a\x00\
-  \\x02\x00\x0b\x00\x02\x00\x0c\x00\x02\x00\x0d\x00\x02\x00\x0e\x00\x02\x00\x0f\x00\
-  \\x02\x00\x00\x00\x00\x00\x12\x00\xbf\x00\x01\x00\x00\x00\x12\x00\xc1\x00\x00\x00\
-  \\x00\x00\x75\x00\xc2\x06\x00\x00\x00\x00\x77\x00\xc2\x06\x00\x00\x00\x00\x79\x00\
-  \\xbf\x00\x01\x00\x00\x00\x79\x00\xc1\x00\x76\x00\x4a\x03\x78\x00\xcb\x03\x78\x00\
-  \\x28\x05\x78\x00\x72\x05\x00\x00\x00\x3c\x4d\x6f\x64\x75\x6c\x65\x3e\x00\x53\x61\
-  \\x6c\x73\x61\x2e\x64\x6c\x6c\x00\x44\x72\x69\x76\x65\x72\x00\x53\x61\x6c\x73\x61\
-  \\x00\x52\x65\x6c\x65\x61\x73\x65\x4f\x62\x6a\x65\x63\x74\x44\x65\x6c\x65\x67\x61\
-  \\x74\x65\x00\x44\x65\x6c\x65\x67\x61\x74\x65\x53\x69\x67\x6e\x61\x74\x75\x72\x65\
-  \\x00\x46\x72\x65\x65\x48\x61\x73\x6b\x65\x6c\x6c\x46\x75\x6e\x50\x74\x72\x44\x65\
-  \\x6c\x65\x67\x61\x74\x65\x00\x49\x4c\x57\x72\x69\x74\x65\x72\x44\x65\x6c\x65\x67\
-  \\x61\x74\x65\x00\x4d\x65\x6d\x62\x65\x72\x49\x6e\x66\x6f\x73\x00\x55\x74\x69\x6c\
-  \\x00\x46\x75\x6e\x63\x60\x32\x00\x6d\x73\x63\x6f\x72\x6c\x69\x62\x00\x53\x79\x73\
-  \\x74\x65\x6d\x00\x4f\x62\x6a\x65\x63\x74\x00\x4d\x75\x6c\x74\x69\x63\x61\x73\x74\
-  \\x44\x65\x6c\x65\x67\x61\x74\x65\x00\x56\x61\x6c\x75\x65\x54\x79\x70\x65\x00\x41\
-  \\x00\x42\x00\x53\x79\x73\x74\x65\x6d\x2e\x52\x65\x66\x6c\x65\x63\x74\x69\x6f\x6e\
-  \\x2e\x45\x6d\x69\x74\x00\x41\x73\x73\x65\x6d\x62\x6c\x79\x42\x75\x69\x6c\x64\x65\
-  \\x72\x00\x5f\x61\x73\x73\x65\x6d\x62\x6c\x79\x42\x75\x69\x6c\x64\x65\x72\x00\x4d\
-  \\x6f\x64\x75\x6c\x65\x42\x75\x69\x6c\x64\x65\x72\x00\x5f\x64\x79\x6e\x61\x6d\x69\
-  \\x63\x4d\x6f\x64\x75\x6c\x65\x42\x75\x69\x6c\x64\x65\x72\x00\x54\x79\x70\x65\x42\
-  \\x75\x69\x6c\x64\x65\x72\x00\x5f\x73\x74\x75\x62\x73\x54\x79\x70\x65\x42\x75\x69\
-  \\x6c\x64\x65\x72\x00\x2e\x63\x63\x74\x6f\x72\x00\x42\x6f\x6f\x74\x00\x47\x65\x74\
-  \\x50\x6f\x69\x6e\x74\x65\x72\x54\x6f\x4d\x65\x74\x68\x6f\x64\x00\x53\x65\x74\x46\
-  \\x72\x65\x65\x48\x61\x73\x6b\x65\x6c\x6c\x46\x75\x6e\x50\x74\x72\x00\x46\x72\x65\
-  \\x65\x48\x61\x73\x6b\x65\x6c\x6c\x46\x75\x6e\x50\x74\x72\x00\x53\x61\x76\x65\x44\
-  \\x79\x6e\x61\x6d\x69\x63\x41\x73\x73\x65\x6d\x62\x6c\x79\x00\x47\x65\x74\x4d\x65\
-  \\x74\x68\x6f\x64\x53\x74\x75\x62\x00\x47\x65\x74\x44\x65\x6c\x65\x67\x61\x74\x65\
-  \\x43\x6f\x6e\x73\x74\x72\x75\x63\x74\x6f\x72\x53\x74\x75\x62\x00\x47\x65\x74\x46\
-  \\x69\x65\x6c\x64\x47\x65\x74\x53\x74\x75\x62\x00\x47\x65\x74\x46\x69\x65\x6c\x64\
-  \\x53\x65\x74\x53\x74\x75\x62\x00\x47\x65\x74\x42\x6f\x78\x53\x74\x75\x62\x00\x53\
-  \\x79\x73\x74\x65\x6d\x2e\x43\x6f\x6c\x6c\x65\x63\x74\x69\x6f\x6e\x73\x2e\x47\x65\
-  \\x6e\x65\x72\x69\x63\x00\x44\x69\x63\x74\x69\x6f\x6e\x61\x72\x79\x60\x32\x00\x5f\
-  \\x69\x6e\x54\x61\x62\x6c\x65\x00\x5f\x6e\x65\x78\x74\x49\x64\x00\x52\x65\x67\x69\
-  \\x73\x74\x65\x72\x4f\x62\x6a\x65\x63\x74\x00\x47\x65\x74\x4f\x62\x6a\x65\x63\x74\
-  \\x00\x5f\x52\x65\x6c\x65\x61\x73\x65\x4f\x62\x6a\x65\x63\x74\x44\x65\x6c\x65\x67\
-  \\x61\x74\x65\x00\x52\x65\x6c\x65\x61\x73\x65\x4f\x62\x6a\x65\x63\x74\x00\x44\x65\
-  \\x6c\x65\x67\x61\x74\x65\x00\x5f\x64\x6f\x74\x4e\x65\x74\x46\x75\x6e\x50\x74\x72\
-  \\x44\x65\x6c\x65\x67\x61\x74\x65\x73\x00\x47\x65\x74\x44\x6f\x74\x4e\x65\x74\x46\
-  \\x75\x6e\x50\x74\x72\x46\x6f\x72\x44\x65\x6c\x65\x67\x61\x74\x65\x00\x46\x72\x65\
-  \\x65\x44\x6f\x74\x4e\x65\x74\x46\x75\x6e\x50\x74\x72\x00\x47\x65\x6e\x65\x72\x61\
-  \\x74\x65\x44\x79\x6e\x61\x6d\x69\x63\x4d\x65\x74\x68\x6f\x64\x00\x53\x79\x73\x74\
-  \\x65\x6d\x2e\x52\x65\x66\x6c\x65\x63\x74\x69\x6f\x6e\x00\x43\x6f\x6e\x73\x74\x72\
-  \\x75\x63\x74\x6f\x72\x49\x6e\x66\x6f\x00\x47\x65\x6e\x65\x72\x61\x74\x65\x43\x6f\
-  \\x6e\x73\x74\x72\x75\x63\x74\x6f\x72\x53\x74\x75\x62\x00\x4d\x65\x74\x68\x6f\x64\
-  \\x49\x6e\x66\x6f\x00\x47\x65\x6e\x65\x72\x61\x74\x65\x4d\x65\x74\x68\x6f\x64\x53\
-  \\x74\x75\x62\x00\x54\x79\x70\x65\x00\x47\x65\x6e\x65\x72\x61\x74\x65\x44\x65\x6c\
-  \\x65\x67\x61\x74\x65\x43\x6f\x6e\x73\x74\x72\x75\x63\x74\x6f\x72\x53\x74\x75\x62\
-  \\x00\x46\x69\x65\x6c\x64\x49\x6e\x66\x6f\x00\x47\x65\x6e\x65\x72\x61\x74\x65\x46\
-  \\x69\x65\x6c\x64\x47\x65\x74\x53\x74\x75\x62\x00\x47\x65\x6e\x65\x72\x61\x74\x65\
-  \\x46\x69\x65\x6c\x64\x53\x65\x74\x53\x74\x75\x62\x00\x47\x65\x6e\x65\x72\x61\x74\
-  \\x65\x42\x6f\x78\x53\x74\x75\x62\x00\x49\x73\x4d\x61\x72\x73\x68\x61\x6c\x65\x64\
-  \\x42\x79\x49\x6e\x64\x65\x78\x00\x4e\x75\x6c\x6c\x61\x62\x6c\x65\x60\x31\x00\x53\
-  \\x79\x73\x74\x65\x6d\x2e\x52\x75\x6e\x74\x69\x6d\x65\x2e\x49\x6e\x74\x65\x72\x6f\
-  \\x70\x53\x65\x72\x76\x69\x63\x65\x73\x00\x55\x6e\x6d\x61\x6e\x61\x67\x65\x64\x54\
-  \\x79\x70\x65\x00\x4d\x61\x72\x73\x68\x61\x6c\x54\x79\x70\x65\x41\x73\x00\x43\x6f\
-  \\x6e\x76\x65\x72\x74\x54\x6f\x53\x74\x75\x62\x54\x79\x70\x65\x73\x00\x43\x6f\x6e\
-  \\x76\x65\x72\x74\x54\x6f\x53\x74\x75\x62\x54\x79\x70\x65\x00\x49\x4c\x47\x65\x6e\
-  \\x65\x72\x61\x74\x6f\x72\x00\x45\x6d\x69\x74\x50\x61\x72\x61\x6d\x65\x74\x65\x72\
-  \\x4c\x6f\x61\x64\x69\x6e\x67\x00\x45\x6d\x69\x74\x46\x72\x6f\x6d\x53\x74\x75\x62\
-  \\x00\x49\x45\x6e\x75\x6d\x65\x72\x61\x62\x6c\x65\x60\x31\x00\x50\x61\x72\x61\x6d\
-  \\x65\x74\x65\x72\x49\x6e\x66\x6f\x00\x45\x6d\x69\x74\x54\x6f\x53\x74\x75\x62\x00\
-  \\x45\x6d\x69\x74\x4d\x61\x72\x73\x68\x61\x6c\x65\x64\x52\x65\x74\x75\x72\x6e\x00\
-  \\x5f\x64\x65\x6c\x65\x67\x61\x74\x65\x57\x72\x61\x70\x70\x65\x72\x54\x79\x70\x65\
-  \\x73\x00\x47\x65\x74\x44\x65\x6c\x65\x67\x61\x74\x65\x57\x72\x61\x70\x70\x65\x72\
-  \\x54\x79\x70\x65\x00\x43\x72\x65\x61\x74\x65\x44\x65\x6c\x65\x67\x61\x74\x65\x57\
-  \\x72\x61\x70\x70\x65\x72\x54\x79\x70\x65\x00\x2e\x63\x74\x6f\x72\x00\x49\x6e\x76\
-  \\x6f\x6b\x65\x00\x49\x41\x73\x79\x6e\x63\x52\x65\x73\x75\x6c\x74\x00\x41\x73\x79\
-  \\x6e\x63\x43\x61\x6c\x6c\x62\x61\x63\x6b\x00\x42\x65\x67\x69\x6e\x49\x6e\x76\x6f\
-  \\x6b\x65\x00\x45\x6e\x64\x49\x6e\x76\x6f\x6b\x65\x00\x5f\x72\x65\x74\x75\x72\x6e\
-  \\x54\x79\x70\x65\x00\x5f\x70\x61\x72\x61\x6d\x65\x74\x65\x72\x54\x79\x70\x65\x73\
-  \\x00\x67\x65\x74\x5f\x52\x65\x74\x75\x72\x6e\x54\x79\x70\x65\x00\x67\x65\x74\x5f\
-  \\x50\x61\x72\x61\x6d\x65\x74\x65\x72\x54\x79\x70\x65\x73\x00\x54\x6f\x53\x74\x72\
-  \\x69\x6e\x67\x00\x46\x72\x6f\x6d\x44\x65\x6c\x65\x67\x61\x74\x65\x54\x79\x70\x65\
-  \\x00\x5f\x64\x65\x6c\x65\x67\x61\x74\x65\x54\x79\x70\x65\x73\x00\x54\x6f\x44\x65\
-  \\x6c\x65\x67\x61\x74\x65\x54\x79\x70\x65\x00\x43\x72\x65\x61\x74\x65\x44\x65\x6c\
-  \\x65\x67\x61\x74\x65\x54\x79\x70\x65\x00\x52\x65\x74\x75\x72\x6e\x54\x79\x70\x65\
-  \\x00\x50\x61\x72\x61\x6d\x65\x74\x65\x72\x54\x79\x70\x65\x73\x00\x54\x79\x70\x65\
-  \\x5f\x47\x65\x74\x54\x79\x70\x65\x46\x72\x6f\x6d\x48\x61\x6e\x64\x6c\x65\x00\x4f\
-  \\x62\x6a\x65\x63\x74\x5f\x63\x74\x6f\x72\x00\x4d\x61\x72\x73\x68\x61\x6c\x5f\x47\
-  \\x65\x74\x44\x65\x6c\x65\x67\x61\x74\x65\x46\x6f\x72\x46\x75\x6e\x63\x74\x69\x6f\
-  \\x6e\x50\x6f\x69\x6e\x74\x65\x72\x00\x4d\x61\x72\x73\x68\x61\x6c\x5f\x47\x65\x74\
-  \\x46\x75\x6e\x63\x74\x69\x6f\x6e\x50\x6f\x69\x6e\x74\x65\x72\x46\x6f\x72\x44\x65\
-  \\x6c\x65\x67\x61\x74\x65\x00\x4d\x61\x72\x73\x68\x61\x6c\x5f\x53\x74\x72\x69\x6e\
-  \\x67\x54\x6f\x48\x47\x6c\x6f\x62\x61\x6c\x55\x6e\x69\x00\x4d\x61\x72\x73\x68\x61\
-  \\x6c\x5f\x53\x74\x72\x69\x6e\x67\x54\x6f\x48\x47\x6c\x6f\x62\x61\x6c\x41\x6e\x73\
-  \\x69\x00\x44\x72\x69\x76\x65\x72\x5f\x46\x72\x65\x65\x48\x61\x73\x6b\x65\x6c\x6c\
-  \\x46\x75\x6e\x50\x74\x72\x00\x44\x72\x69\x76\x65\x72\x5f\x52\x65\x67\x69\x73\x74\
-  \\x65\x72\x4f\x62\x6a\x65\x63\x74\x00\x44\x72\x69\x76\x65\x72\x5f\x47\x65\x74\x4f\
-  \\x62\x6a\x65\x63\x74\x00\x46\x72\x65\x65\x48\x61\x73\x6b\x65\x6c\x6c\x46\x75\x6e\
-  \\x50\x74\x72\x44\x65\x6c\x65\x67\x61\x74\x65\x5f\x49\x6e\x76\x6f\x6b\x65\x00\x53\
-  \\x74\x72\x69\x6e\x67\x54\x6f\x54\x79\x70\x65\x00\x53\x74\x72\x69\x6e\x67\x54\x6f\
-  \\x54\x79\x70\x65\x73\x00\x43\x6f\x6e\x63\x61\x74\x41\x72\x72\x61\x79\x00\x54\x00\
-  \\x4d\x61\x70\x41\x72\x72\x61\x79\x00\x4d\x61\x70\x50\x61\x72\x61\x6d\x65\x74\x65\
-  \\x72\x73\x54\x6f\x54\x79\x70\x65\x73\x00\x45\x6d\x69\x74\x4c\x64\x61\x72\x67\x00\
-  \\x41\x73\x73\x65\x6d\x62\x6c\x79\x46\x69\x6c\x65\x56\x65\x72\x73\x69\x6f\x6e\x41\
-  \\x74\x74\x72\x69\x62\x75\x74\x65\x00\x41\x73\x73\x65\x6d\x62\x6c\x79\x56\x65\x72\
-  \\x73\x69\x6f\x6e\x41\x74\x74\x72\x69\x62\x75\x74\x65\x00\x41\x73\x73\x65\x6d\x62\
-  \\x6c\x79\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65\
-  \\x00\x41\x73\x73\x65\x6d\x62\x6c\x79\x50\x72\x6f\x64\x75\x63\x74\x41\x74\x74\x72\
-  \\x69\x62\x75\x74\x65\x00\x41\x73\x73\x65\x6d\x62\x6c\x79\x44\x65\x73\x63\x72\x69\
-  \\x70\x74\x69\x6f\x6e\x41\x74\x74\x72\x69\x62\x75\x74\x65\x00\x41\x73\x73\x65\x6d\
-  \\x62\x6c\x79\x54\x69\x74\x6c\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x00\x53\x79\
-  \\x73\x74\x65\x6d\x2e\x52\x75\x6e\x74\x69\x6d\x65\x2e\x43\x6f\x6d\x70\x69\x6c\x65\
-  \\x72\x53\x65\x72\x76\x69\x63\x65\x73\x00\x43\x6f\x6d\x70\x69\x6c\x61\x74\x69\x6f\
-  \\x6e\x52\x65\x6c\x61\x78\x61\x74\x69\x6f\x6e\x73\x41\x74\x74\x72\x69\x62\x75\x74\
-  \\x65\x00\x52\x75\x6e\x74\x69\x6d\x65\x43\x6f\x6d\x70\x61\x74\x69\x62\x69\x6c\x69\
-  \\x74\x79\x41\x74\x74\x72\x69\x62\x75\x74\x65\x00\x53\x79\x73\x74\x65\x6d\x2e\x44\
-  \\x69\x61\x67\x6e\x6f\x73\x74\x69\x63\x73\x00\x54\x72\x61\x63\x65\x00\x54\x72\x61\
-  \\x63\x65\x4c\x69\x73\x74\x65\x6e\x65\x72\x43\x6f\x6c\x6c\x65\x63\x74\x69\x6f\x6e\
-  \\x00\x67\x65\x74\x5f\x4c\x69\x73\x74\x65\x6e\x65\x72\x73\x00\x43\x6f\x6e\x73\x6f\
-  \\x6c\x65\x54\x72\x61\x63\x65\x4c\x69\x73\x74\x65\x6e\x65\x72\x00\x54\x72\x61\x63\
-  \\x65\x4c\x69\x73\x74\x65\x6e\x65\x72\x00\x41\x64\x64\x00\x53\x79\x73\x74\x65\x6d\
-  \\x2e\x57\x69\x6e\x64\x6f\x77\x73\x2e\x46\x6f\x72\x6d\x73\x00\x41\x70\x70\x6c\x69\
-  \\x63\x61\x74\x69\x6f\x6e\x00\x45\x6e\x61\x62\x6c\x65\x56\x69\x73\x75\x61\x6c\x53\
-  \\x74\x79\x6c\x65\x73\x00\x41\x70\x70\x44\x6f\x6d\x61\x69\x6e\x00\x67\x65\x74\x5f\
-  \\x43\x75\x72\x72\x65\x6e\x74\x44\x6f\x6d\x61\x69\x6e\x00\x41\x73\x73\x65\x6d\x62\
-  \\x6c\x79\x4e\x61\x6d\x65\x00\x41\x73\x73\x65\x6d\x62\x6c\x79\x42\x75\x69\x6c\x64\
-  \\x65\x72\x41\x63\x63\x65\x73\x73\x00\x44\x65\x66\x69\x6e\x65\x44\x79\x6e\x61\x6d\
-  \\x69\x63\x41\x73\x73\x65\x6d\x62\x6c\x79\x00\x44\x65\x66\x69\x6e\x65\x44\x79\x6e\
-  \\x61\x6d\x69\x63\x4d\x6f\x64\x75\x6c\x65\x00\x44\x65\x66\x69\x6e\x65\x54\x79\x70\
-  \\x65\x00\x42\x6f\x6f\x6c\x65\x61\x6e\x00\x6d\x65\x74\x68\x6f\x64\x4e\x61\x6d\x65\
-  \\x00\x52\x75\x6e\x74\x69\x6d\x65\x54\x79\x70\x65\x48\x61\x6e\x64\x6c\x65\x00\x47\
-  \\x65\x74\x54\x79\x70\x65\x46\x72\x6f\x6d\x48\x61\x6e\x64\x6c\x65\x00\x47\x65\x74\
-  \\x4d\x65\x74\x68\x6f\x64\x00\x41\x72\x67\x75\x6d\x65\x6e\x74\x45\x78\x63\x65\x70\
-  \\x74\x69\x6f\x6e\x00\x66\x72\x65\x65\x48\x61\x73\x6b\x65\x6c\x6c\x46\x75\x6e\x50\
-  \\x74\x72\x00\x49\x6e\x74\x50\x74\x72\x00\x5a\x65\x72\x6f\x00\x6f\x70\x5f\x45\x71\
-  \\x75\x61\x6c\x69\x74\x79\x00\x4d\x61\x72\x73\x68\x61\x6c\x00\x47\x65\x74\x44\x65\
-  \\x6c\x65\x67\x61\x74\x65\x46\x6f\x72\x46\x75\x6e\x63\x74\x69\x6f\x6e\x50\x6f\x69\
-  \\x6e\x74\x65\x72\x00\x43\x72\x65\x61\x74\x65\x54\x79\x70\x65\x00\x4d\x6f\x64\x75\
-  \\x6c\x65\x00\x67\x65\x74\x5f\x46\x75\x6c\x6c\x79\x51\x75\x61\x6c\x69\x66\x69\x65\
-  \\x64\x4e\x61\x6d\x65\x00\x53\x79\x73\x74\x65\x6d\x2e\x49\x4f\x00\x50\x61\x74\x68\
-  \\x00\x47\x65\x74\x46\x69\x6c\x65\x4e\x61\x6d\x65\x00\x53\x74\x72\x69\x6e\x67\x00\
-  \\x43\x6f\x6e\x63\x61\x74\x00\x43\x6f\x6e\x73\x6f\x6c\x65\x00\x57\x72\x69\x74\x65\
-  \\x4c\x69\x6e\x65\x00\x53\x61\x76\x65\x00\x63\x6c\x61\x73\x73\x4e\x61\x6d\x65\x00\
-  \\x70\x61\x72\x61\x6d\x65\x74\x65\x72\x54\x79\x70\x65\x4e\x61\x6d\x65\x73\x00\x47\
-  \\x65\x74\x43\x6f\x6e\x73\x74\x72\x75\x63\x74\x6f\x72\x00\x64\x65\x6c\x65\x67\x61\
-  \\x74\x65\x54\x79\x70\x65\x4e\x61\x6d\x65\x00\x66\x69\x65\x6c\x64\x4e\x61\x6d\x65\
-  \\x00\x47\x65\x74\x46\x69\x65\x6c\x64\x00\x74\x79\x70\x65\x4e\x61\x6d\x65\x00\x6f\
-  \\x00\x53\x79\x73\x74\x65\x6d\x2e\x54\x68\x72\x65\x61\x64\x69\x6e\x67\x00\x4d\x6f\
-  \\x6e\x69\x74\x6f\x72\x00\x45\x6e\x74\x65\x72\x00\x45\x78\x69\x74\x00\x6f\x49\x64\
-  \\x00\x54\x72\x79\x47\x65\x74\x56\x61\x6c\x75\x65\x00\x49\x6e\x74\x33\x32\x00\x52\
-  \\x65\x6d\x6f\x76\x65\x00\x64\x00\x47\x65\x74\x46\x75\x6e\x63\x74\x69\x6f\x6e\x50\
-  \\x6f\x69\x6e\x74\x65\x72\x46\x6f\x72\x44\x65\x6c\x65\x67\x61\x74\x65\x00\x66\x75\
-  \\x6e\x50\x74\x72\x00\x6d\x65\x74\x68\x6f\x64\x53\x69\x67\x6e\x61\x74\x75\x72\x65\
-  \\x00\x69\x6c\x57\x72\x69\x74\x65\x72\x00\x4d\x65\x74\x68\x6f\x64\x42\x75\x69\x6c\
-  \\x64\x65\x72\x00\x4d\x65\x74\x68\x6f\x64\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73\
-  \\x00\x44\x65\x66\x69\x6e\x65\x4d\x65\x74\x68\x6f\x64\x00\x47\x65\x74\x49\x4c\x47\
-  \\x65\x6e\x65\x72\x61\x74\x6f\x72\x00\x44\x79\x6e\x61\x6d\x69\x63\x4d\x65\x74\x68\
-  \\x6f\x64\x00\x43\x72\x65\x61\x74\x65\x44\x65\x6c\x65\x67\x61\x74\x65\x00\x3c\x3e\
-  \\x63\x5f\x5f\x44\x69\x73\x70\x6c\x61\x79\x43\x6c\x61\x73\x73\x31\x00\x74\x79\x70\
-  \\x65\x00\x63\x6f\x6e\x00\x3c\x47\x65\x6e\x65\x72\x61\x74\x65\x43\x6f\x6e\x73\x74\
-  \\x72\x75\x63\x74\x6f\x72\x53\x74\x75\x62\x3e\x62\x5f\x5f\x30\x00\x69\x6c\x67\x00\
-  \\x4c\x6f\x63\x61\x6c\x42\x75\x69\x6c\x64\x65\x72\x00\x44\x65\x63\x6c\x61\x72\x65\
-  \\x4c\x6f\x63\x61\x6c\x00\x4f\x70\x43\x6f\x64\x65\x73\x00\x4f\x70\x43\x6f\x64\x65\
-  \\x00\x4c\x64\x6c\x6f\x63\x61\x5f\x53\x00\x45\x6d\x69\x74\x00\x49\x6e\x69\x74\x6f\
-  \\x62\x6a\x00\x4c\x64\x6c\x6f\x63\x5f\x30\x00\x4d\x65\x74\x68\x6f\x64\x42\x61\x73\
-  \\x65\x00\x47\x65\x74\x50\x61\x72\x61\x6d\x65\x74\x65\x72\x73\x00\x4e\x65\x77\x6f\
-  \\x62\x6a\x00\x52\x65\x74\x00\x4d\x65\x6d\x62\x65\x72\x49\x6e\x66\x6f\x00\x67\x65\
-  \\x74\x5f\x44\x65\x63\x6c\x61\x72\x69\x6e\x67\x54\x79\x70\x65\x00\x67\x65\x74\x5f\
-  \\x49\x73\x56\x61\x6c\x75\x65\x54\x79\x70\x65\x00\x41\x72\x67\x75\x6d\x65\x6e\x74\
-  \\x4e\x75\x6c\x6c\x45\x78\x63\x65\x70\x74\x69\x6f\x6e\x00\x45\x6d\x70\x74\x79\x54\
-  \\x79\x70\x65\x73\x00\x67\x65\x74\x5f\x4e\x61\x6d\x65\x00\x3c\x3e\x63\x5f\x5f\x44\
-  \\x69\x73\x70\x6c\x61\x79\x43\x6c\x61\x73\x73\x34\x00\x6d\x65\x74\x68\x00\x3c\x47\
-  \\x65\x6e\x65\x72\x61\x74\x65\x4d\x65\x74\x68\x6f\x64\x53\x74\x75\x62\x3e\x62\x5f\
-  \\x5f\x33\x00\x67\x65\x74\x5f\x49\x73\x53\x74\x61\x74\x69\x63\x00\x43\x61\x6c\x6c\
-  \\x00\x43\x61\x6c\x6c\x76\x69\x72\x74\x00\x67\x65\x74\x5f\x52\x65\x74\x75\x72\x6e\
-  \\x50\x61\x72\x61\x6d\x65\x74\x65\x72\x00\x67\x65\x74\x5f\x50\x61\x72\x61\x6d\x65\
-  \\x74\x65\x72\x54\x79\x70\x65\x00\x3c\x3e\x63\x5f\x5f\x44\x69\x73\x70\x6c\x61\x79\
-  \\x43\x6c\x61\x73\x73\x37\x00\x77\x72\x61\x70\x70\x65\x72\x54\x79\x70\x65\x00\x64\
-  \\x65\x6c\x65\x67\x61\x74\x65\x54\x79\x70\x65\x00\x3c\x47\x65\x6e\x65\x72\x61\x74\
-  \\x65\x44\x65\x6c\x65\x67\x61\x74\x65\x43\x6f\x6e\x73\x74\x72\x75\x63\x74\x6f\x72\
-  \\x53\x74\x75\x62\x3e\x62\x5f\x5f\x36\x00\x4c\x64\x61\x72\x67\x5f\x30\x00\x4c\x64\
-  \\x66\x74\x6e\x00\x3c\x3e\x63\x5f\x5f\x44\x69\x73\x70\x6c\x61\x79\x43\x6c\x61\x73\
-  \\x73\x61\x00\x66\x69\x65\x6c\x64\x00\x3c\x47\x65\x6e\x65\x72\x61\x74\x65\x46\x69\
-  \\x65\x6c\x64\x47\x65\x74\x53\x74\x75\x62\x3e\x62\x5f\x5f\x39\x00\x67\x65\x74\x5f\
-  \\x49\x73\x4c\x69\x74\x65\x72\x61\x6c\x00\x47\x65\x74\x52\x61\x77\x43\x6f\x6e\x73\
-  \\x74\x61\x6e\x74\x56\x61\x6c\x75\x65\x00\x4c\x64\x63\x5f\x49\x34\x00\x4c\x64\x73\
-  \\x66\x6c\x64\x00\x4c\x64\x66\x6c\x64\x00\x67\x65\x74\x5f\x46\x69\x65\x6c\x64\x54\
-  \\x79\x70\x65\x00\x3c\x3e\x63\x5f\x5f\x44\x69\x73\x70\x6c\x61\x79\x43\x6c\x61\x73\
-  \\x73\x64\x00\x3c\x47\x65\x6e\x65\x72\x61\x74\x65\x46\x69\x65\x6c\x64\x53\x65\x74\
-  \\x53\x74\x75\x62\x3e\x62\x5f\x5f\x63\x00\x53\x74\x73\x66\x6c\x64\x00\x53\x74\x66\
-  \\x6c\x64\x00\x56\x6f\x69\x64\x00\x3c\x3e\x63\x5f\x5f\x44\x69\x73\x70\x6c\x61\x79\
-  \\x43\x6c\x61\x73\x73\x31\x30\x00\x74\x79\x70\x65\x54\x6f\x42\x6f\x78\x00\x3c\x47\
-  \\x65\x6e\x65\x72\x61\x74\x65\x42\x6f\x78\x53\x74\x75\x62\x3e\x62\x5f\x5f\x66\x00\
-  \\x42\x6f\x78\x00\x74\x00\x67\x65\x74\x5f\x49\x73\x50\x72\x69\x6d\x69\x74\x69\x76\
-  \\x65\x00\x74\x79\x70\x65\x73\x00\x61\x72\x67\x75\x6d\x65\x6e\x74\x49\x6e\x64\x65\
-  \\x78\x00\x70\x61\x72\x61\x6d\x65\x74\x65\x72\x54\x79\x70\x65\x00\x76\x61\x6c\x75\
-  \\x65\x54\x79\x70\x65\x00\x55\x6e\x62\x6f\x78\x5f\x41\x6e\x79\x00\x73\x74\x61\x72\
-  \\x74\x69\x6e\x67\x41\x72\x67\x75\x6d\x65\x6e\x74\x00\x70\x61\x72\x61\x6d\x65\x74\
-  \\x65\x72\x49\x6e\x66\x6f\x73\x00\x49\x45\x6e\x75\x6d\x65\x72\x61\x74\x6f\x72\x60\
-  \\x31\x00\x47\x65\x74\x45\x6e\x75\x6d\x65\x72\x61\x74\x6f\x72\x00\x67\x65\x74\x5f\
-  \\x43\x75\x72\x72\x65\x6e\x74\x00\x53\x79\x73\x74\x65\x6d\x2e\x43\x6f\x6c\x6c\x65\
-  \\x63\x74\x69\x6f\x6e\x73\x00\x49\x45\x6e\x75\x6d\x65\x72\x61\x74\x6f\x72\x00\x4d\
-  \\x6f\x76\x65\x4e\x65\x78\x74\x00\x49\x44\x69\x73\x70\x6f\x73\x61\x62\x6c\x65\x00\
-  \\x44\x69\x73\x70\x6f\x73\x65\x00\x72\x65\x74\x75\x72\x6e\x50\x61\x72\x61\x6d\x65\
-  \\x74\x65\x72\x49\x6e\x66\x6f\x00\x6e\x61\x6d\x65\x00\x54\x79\x70\x65\x41\x74\x74\
-  \\x72\x69\x62\x75\x74\x65\x73\x00\x46\x69\x65\x6c\x64\x42\x75\x69\x6c\x64\x65\x72\
-  \\x00\x46\x69\x65\x6c\x64\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73\x00\x44\x65\x66\
-  \\x69\x6e\x65\x46\x69\x65\x6c\x64\x00\x43\x6f\x6e\x73\x74\x72\x75\x63\x74\x6f\x72\
-  \\x42\x75\x69\x6c\x64\x65\x72\x00\x43\x61\x6c\x6c\x69\x6e\x67\x43\x6f\x6e\x76\x65\
-  \\x6e\x74\x69\x6f\x6e\x73\x00\x44\x65\x66\x69\x6e\x65\x43\x6f\x6e\x73\x74\x72\x75\
-  \\x63\x74\x6f\x72\x00\x4c\x64\x61\x72\x67\x5f\x31\x00\x4c\x64\x74\x6f\x6b\x65\x6e\
-  \\x00\x43\x61\x73\x74\x63\x6c\x61\x73\x73\x00\x4d\x65\x74\x68\x6f\x64\x49\x6d\x70\
-  \\x6c\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73\x00\x53\x65\x74\x49\x6d\x70\x6c\x65\
-  \\x6d\x65\x6e\x74\x61\x74\x69\x6f\x6e\x46\x6c\x61\x67\x73\x00\x4c\x61\x62\x65\x6c\
-  \\x00\x44\x65\x66\x69\x6e\x65\x4c\x61\x62\x65\x6c\x00\x4c\x64\x63\x5f\x49\x34\x5f\
-  \\x30\x00\x42\x65\x71\x00\x4d\x61\x72\x6b\x4c\x61\x62\x65\x6c\x00\x55\x6e\x6d\x61\
-  \\x6e\x61\x67\x65\x64\x46\x75\x6e\x63\x74\x69\x6f\x6e\x50\x6f\x69\x6e\x74\x65\x72\
-  \\x41\x74\x74\x72\x69\x62\x75\x74\x65\x00\x43\x61\x6c\x6c\x69\x6e\x67\x43\x6f\x6e\
-  \\x76\x65\x6e\x74\x69\x6f\x6e\x00\x6f\x62\x6a\x65\x63\x74\x00\x6d\x65\x74\x68\x6f\
-  \\x64\x00\x63\x61\x6c\x6c\x62\x61\x63\x6b\x00\x72\x65\x73\x75\x6c\x74\x00\x53\x74\
-  \\x72\x75\x63\x74\x4c\x61\x79\x6f\x75\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65\x00\
-  \\x4c\x61\x79\x6f\x75\x74\x4b\x69\x6e\x64\x00\x72\x65\x74\x75\x72\x6e\x54\x79\x70\
-  \\x65\x00\x70\x61\x72\x61\x6d\x65\x74\x65\x72\x54\x79\x70\x65\x73\x00\x53\x79\x73\
-  \\x74\x65\x6d\x2e\x54\x65\x78\x74\x00\x53\x74\x72\x69\x6e\x67\x42\x75\x69\x6c\x64\
-  \\x65\x72\x00\x41\x70\x70\x65\x6e\x64\x00\x43\x75\x73\x74\x6f\x6d\x41\x74\x74\x72\
-  \\x69\x62\x75\x74\x65\x42\x75\x69\x6c\x64\x65\x72\x00\x53\x65\x74\x43\x75\x73\x74\
-  \\x6f\x6d\x41\x74\x74\x72\x69\x62\x75\x74\x65\x00\x67\x65\x74\x5f\x48\x61\x73\x56\
-  \\x61\x6c\x75\x65\x00\x50\x61\x72\x61\x6d\x65\x74\x65\x72\x42\x75\x69\x6c\x64\x65\
-  \\x72\x00\x50\x61\x72\x61\x6d\x65\x74\x65\x72\x41\x74\x74\x72\x69\x62\x75\x74\x65\
-  \\x73\x00\x44\x65\x66\x69\x6e\x65\x50\x61\x72\x61\x6d\x65\x74\x65\x72\x00\x4d\x61\
-  \\x72\x73\x68\x61\x6c\x41\x73\x41\x74\x74\x72\x69\x62\x75\x74\x65\x00\x67\x65\x74\
-  \\x5f\x56\x61\x6c\x75\x65\x00\x43\x6f\x6d\x70\x69\x6c\x65\x72\x47\x65\x6e\x65\x72\
-  \\x61\x74\x65\x64\x41\x74\x74\x72\x69\x62\x75\x74\x65\x00\x42\x69\x6e\x64\x69\x6e\
-  \\x67\x46\x6c\x61\x67\x73\x00\x73\x00\x47\x65\x74\x54\x79\x70\x65\x00\x3c\x53\x74\
-  \\x72\x69\x6e\x67\x54\x6f\x54\x79\x70\x65\x73\x3e\x62\x5f\x5f\x30\x00\x3c\x3e\x39\
-  \\x5f\x5f\x43\x61\x63\x68\x65\x64\x41\x6e\x6f\x6e\x79\x6d\x6f\x75\x73\x4d\x65\x74\
-  \\x68\x6f\x64\x44\x65\x6c\x65\x67\x61\x74\x65\x31\x00\x43\x68\x61\x72\x00\x53\x74\
-  \\x72\x69\x6e\x67\x53\x70\x6c\x69\x74\x4f\x70\x74\x69\x6f\x6e\x73\x00\x53\x70\x6c\
-  \\x69\x74\x00\x61\x00\x62\x00\x78\x00\x66\x00\x78\x73\x00\x3c\x4d\x61\x70\x50\x61\
-  \\x72\x61\x6d\x65\x74\x65\x72\x73\x54\x6f\x54\x79\x70\x65\x73\x3e\x62\x5f\x5f\x32\
-  \\x00\x3c\x3e\x39\x5f\x5f\x43\x61\x63\x68\x65\x64\x41\x6e\x6f\x6e\x79\x6d\x6f\x75\
-  \\x73\x4d\x65\x74\x68\x6f\x64\x44\x65\x6c\x65\x67\x61\x74\x65\x33\x00\x70\x00\x70\
-  \\x61\x72\x61\x6d\x65\x74\x65\x72\x73\x00\x4c\x64\x61\x72\x67\x5f\x32\x00\x4c\x64\
-  \\x61\x72\x67\x5f\x33\x00\x4c\x64\x61\x72\x67\x5f\x53\x00\x4c\x64\x61\x72\x67\x00\
-  \\x78\x31\x00\x00\x00\x1f\x44\x00\x79\x00\x6e\x00\x61\x00\x6d\x00\x69\x00\x63\x00\
-  \\x41\x00\x73\x00\x73\x00\x65\x00\x6d\x00\x62\x00\x6c\x00\x79\x00\x00\x1b\x44\x00\
-  \\x79\x00\x6e\x00\x61\x00\x6d\x00\x69\x00\x63\x00\x4d\x00\x6f\x00\x64\x00\x75\x00\
-  \\x6c\x00\x65\x00\x00\x17\x44\x00\x79\x00\x6e\x00\x61\x00\x6d\x00\x69\x00\x63\x00\
-  \\x2e\x00\x64\x00\x6c\x00\x6c\x00\x00\x0b\x53\x00\x74\x00\x75\x00\x62\x00\x73\x00\
-  \\x00\x25\x47\x00\x65\x00\x74\x00\x50\x00\x6f\x00\x69\x00\x6e\x00\x74\x00\x65\x00\
-  \\x72\x00\x54\x00\x6f\x00\x4d\x00\x65\x00\x74\x00\x68\x00\x6f\x00\x64\x00\x00\x23\
-  \\x4d\x00\x65\x00\x74\x00\x68\x00\x6f\x00\x64\x00\x20\x00\x6e\x00\x6f\x00\x74\x00\
-  \\x20\x00\x66\x00\x6f\x00\x75\x00\x6e\x00\x64\x00\x2e\x00\x00\x15\x6d\x00\x65\x00\
-  \\x74\x00\x68\x00\x6f\x00\x64\x00\x4e\x00\x61\x00\x6d\x00\x65\x00\x00\x33\x53\x00\
-  \\x61\x00\x76\x00\x69\x00\x6e\x00\x67\x00\x20\x00\x64\x00\x79\x00\x6e\x00\x61\x00\
-  \\x6d\x00\x69\x00\x63\x00\x20\x00\x61\x00\x73\x00\x73\x00\x65\x00\x6d\x00\x62\x00\
-  \\x6c\x00\x79\x00\x3a\x00\x20\x00\x00\x0b\x2e\x00\x63\x00\x74\x00\x6f\x00\x72\x00\
-  \\x00\x35\x4e\x00\x6f\x00\x20\x00\x6f\x00\x62\x00\x6a\x00\x65\x00\x63\x00\x74\x00\
-  \\x20\x00\x65\x00\x78\x00\x69\x00\x73\x00\x74\x00\x73\x00\x20\x00\x77\x00\x69\x00\
-  \\x74\x00\x68\x00\x20\x00\x69\x00\x64\x00\x3a\x00\x20\x00\x00\x65\x27\x00\x63\x00\
-  \\x6f\x00\x6e\x00\x27\x00\x20\x00\x63\x00\x61\x00\x6e\x00\x6e\x00\x6f\x00\x74\x00\
-  \\x20\x00\x62\x00\x65\x00\x20\x00\x6e\x00\x75\x00\x6c\x00\x6c\x00\x20\x00\x69\x00\
-  \\x66\x00\x20\x00\x63\x00\x72\x00\x65\x00\x61\x00\x74\x00\x69\x00\x6e\x00\x67\x00\
-  \\x20\x00\x61\x00\x20\x00\x72\x00\x65\x00\x66\x00\x65\x00\x72\x00\x65\x00\x6e\x00\
-  \\x63\x00\x65\x00\x20\x00\x74\x00\x79\x00\x70\x00\x65\x00\x2e\x00\x01\x07\x4e\x00\
-  \\x65\x00\x77\x00\x00\x03\x5f\x00\x00\x0d\x49\x00\x6e\x00\x76\x00\x6f\x00\x6b\x00\
-  \\x65\x00\x00\x17\x5f\x00\x66\x00\x69\x00\x65\x00\x6c\x00\x64\x00\x5f\x00\x67\x00\
-  \\x65\x00\x74\x00\x5f\x00\x00\x17\x5f\x00\x66\x00\x69\x00\x65\x00\x6c\x00\x64\x00\
-  \\x5f\x00\x73\x00\x65\x00\x74\x00\x5f\x00\x00\x09\x62\x00\x6f\x00\x78\x00\x5f\x00\
-  \\x00\x0f\x57\x00\x72\x00\x61\x00\x70\x00\x70\x00\x65\x00\x72\x00\x00\x1d\x5f\x00\
-  \\x74\x00\x68\x00\x75\x00\x6e\x00\x6b\x00\x44\x00\x65\x00\x6c\x00\x65\x00\x67\x00\
-  \\x61\x00\x74\x00\x65\x00\x00\x11\x46\x00\x69\x00\x6e\x00\x61\x00\x6c\x00\x69\x00\
-  \\x7a\x00\x65\x00\x00\x05\x54\x00\x6f\x00\x00\x11\x44\x00\x65\x00\x6c\x00\x65\x00\
-  \\x67\x00\x61\x00\x74\x00\x65\x00\x00\x23\x47\x00\x65\x00\x74\x00\x54\x00\x79\x00\
-  \\x70\x00\x65\x00\x46\x00\x72\x00\x6f\x00\x6d\x00\x48\x00\x61\x00\x6e\x00\x64\x00\
-  \\x6c\x00\x65\x00\x00\x3b\x47\x00\x65\x00\x74\x00\x44\x00\x65\x00\x6c\x00\x65\x00\
-  \\x67\x00\x61\x00\x74\x00\x65\x00\x46\x00\x6f\x00\x72\x00\x46\x00\x75\x00\x6e\x00\
-  \\x63\x00\x74\x00\x69\x00\x6f\x00\x6e\x00\x50\x00\x6f\x00\x69\x00\x6e\x00\x74\x00\
-  \\x65\x00\x72\x00\x00\x3b\x47\x00\x65\x00\x74\x00\x46\x00\x75\x00\x6e\x00\x63\x00\
-  \\x74\x00\x69\x00\x6f\x00\x6e\x00\x50\x00\x6f\x00\x69\x00\x6e\x00\x74\x00\x65\x00\
-  \\x72\x00\x46\x00\x6f\x00\x72\x00\x44\x00\x65\x00\x6c\x00\x65\x00\x67\x00\x61\x00\
-  \\x74\x00\x65\x00\x00\x25\x53\x00\x74\x00\x72\x00\x69\x00\x6e\x00\x67\x00\x54\x00\
-  \\x6f\x00\x48\x00\x47\x00\x6c\x00\x6f\x00\x62\x00\x61\x00\x6c\x00\x55\x00\x6e\x00\
-  \\x69\x00\x00\x27\x53\x00\x74\x00\x72\x00\x69\x00\x6e\x00\x67\x00\x54\x00\x6f\x00\
-  \\x48\x00\x47\x00\x6c\x00\x6f\x00\x62\x00\x61\x00\x6c\x00\x41\x00\x6e\x00\x73\x00\
-  \\x69\x00\x00\x23\x46\x00\x72\x00\x65\x00\x65\x00\x48\x00\x61\x00\x73\x00\x6b\x00\
-  \\x65\x00\x6c\x00\x6c\x00\x46\x00\x75\x00\x6e\x00\x50\x00\x74\x00\x72\x00\x00\x1d\
-  \\x52\x00\x65\x00\x67\x00\x69\x00\x73\x00\x74\x00\x65\x00\x72\x00\x4f\x00\x62\x00\
-  \\x6a\x00\x65\x00\x63\x00\x74\x00\x00\x13\x47\x00\x65\x00\x74\x00\x4f\x00\x62\x00\
-  \\x6a\x00\x65\x00\x63\x00\x74\x00\x00\x00\x00\x00\xa7\xb1\x8f\x02\x0b\xf8\x6c\x46\
-  \\x97\xa3\x4b\x79\x11\xde\xca\xdf\x00\x08\xb7\x7a\x5c\x56\x19\x34\xe0\x89\x03\x06\
-  \\x12\x11\x03\x06\x12\x15\x03\x06\x12\x19\x03\x00\x00\x01\x03\x00\x00\x18\x04\x00\
-  \\x01\x18\x0e\x04\x00\x01\x01\x18\x03\x06\x12\x14\x06\x00\x03\x18\x0e\x0e\x0e\x05\
-  \\x00\x02\x18\x0e\x0e\x07\x06\x15\x12\x1d\x02\x08\x1c\x02\x06\x08\x04\x00\x01\x08\
-  \\x1c\x04\x00\x01\x1c\x08\x03\x06\x12\x0c\x04\x00\x01\x01\x08\x08\x06\x15\x12\x1d\
-  \\x02\x18\x12\x21\x05\x00\x01\x18\x12\x21\x08\x00\x03\x18\x0e\x11\x10\x12\x18\x05\
-  \\x00\x01\x18\x12\x25\x05\x00\x01\x18\x12\x29\x05\x00\x01\x18\x12\x2d\x05\x00\x01\
-  \\x18\x12\x31\x05\x00\x01\x02\x12\x2d\x0a\x00\x01\x15\x11\x35\x01\x11\x39\x12\x2d\
-  \\x08\x00\x01\x1d\x12\x2d\x1d\x12\x2d\x06\x00\x01\x12\x2d\x12\x2d\x08\x00\x03\x01\
-  \\x12\x3d\x08\x12\x2d\x07\x00\x02\x01\x12\x3d\x12\x2d\x0c\x00\x03\x01\x12\x3d\x08\
-  \\x15\x12\x41\x01\x12\x45\x07\x00\x02\x01\x12\x3d\x12\x45\x08\x06\x15\x12\x1d\x02\
-  \\x0e\x12\x2d\x07\x00\x02\x12\x2d\x0e\x12\x2d\x03\x20\x00\x01\x05\x20\x02\x01\x1c\
-  \\x18\x04\x20\x01\x01\x08\x08\x20\x03\x12\x49\x08\x12\x4d\x1c\x05\x20\x01\x01\x12\
-  \\x49\x03\x06\x12\x2d\x04\x06\x1d\x12\x2d\x04\x20\x00\x12\x2d\x05\x20\x00\x1d\x12\
-  \\x2d\x08\x20\x02\x01\x12\x2d\x1d\x12\x2d\x03\x20\x00\x0e\x06\x00\x01\x11\x10\x12\
-  \\x2d\x05\x20\x01\x12\x2d\x0e\x04\x28\x00\x12\x2d\x05\x28\x00\x1d\x12\x2d\x04\x20\
-  \\x01\x01\x18\x08\x20\x03\x12\x49\x18\x12\x4d\x1c\x05\x20\x01\x01\x12\x3d\x09\x20\
-  \\x03\x12\x49\x12\x3d\x12\x4d\x1c\x03\x06\x12\x29\x03\x06\x12\x25\x03\x06\x12\x31\
-  \\x05\x00\x01\x12\x2d\x0e\x06\x00\x01\x1d\x12\x2d\x0e\x0c\x10\x01\x02\x1d\x1e\x00\
-  \\x1d\x1e\x00\x1d\x1e\x00\x0b\x10\x01\x02\x1d\x1e\x00\x1e\x00\x1d\x1e\x00\x11\x10\
-  \\x02\x02\x1d\x1e\x01\x15\x12\x24\x02\x1e\x00\x1e\x01\x1d\x1e\x00\x08\x00\x01\x1d\
-  \\x12\x2d\x1d\x12\x45\x06\x00\x02\x01\x12\x3d\x08\x06\x20\x01\x13\x01\x13\x00\x09\
-  \\x20\x03\x12\x49\x13\x00\x12\x4d\x1c\x06\x20\x01\x13\x01\x12\x49\x04\x20\x01\x01\
-  \\x0e\x06\x15\x12\x1d\x02\x08\x1c\x07\x15\x12\x1d\x02\x18\x12\x21\x07\x15\x12\x1d\
-  \\x02\x0e\x12\x2d\x04\x00\x00\x12\x75\x05\x20\x01\x08\x12\x7d\x05\x00\x00\x12\x80\
-  \\x85\x0a\x20\x02\x12\x11\x12\x80\x89\x11\x80\x8d\x06\x20\x02\x12\x15\x0e\x0e\x05\
-  \\x20\x01\x12\x19\x0e\x07\x20\x02\x01\x13\x00\x13\x01\x07\x00\x01\x12\x2d\x11\x80\
-  \\x95\x05\x20\x01\x12\x29\x0e\x05\x20\x02\x01\x0e\x0e\x04\x07\x01\x12\x29\x02\x06\
-  \\x18\x05\x00\x02\x02\x18\x18\x07\x00\x02\x12\x21\x18\x12\x2d\x04\x00\x01\x0e\x0e\
-  \\x05\x00\x02\x0e\x0e\x0e\x04\x00\x01\x01\x0e\x03\x07\x01\x0e\x05\x00\x02\x02\x0e\
-  \\x0e\x07\x20\x01\x12\x25\x1d\x12\x2d\x08\x20\x02\x12\x29\x0e\x1d\x12\x2d\x06\x07\
-  \\x02\x12\x25\x12\x29\x04\x07\x01\x12\x2d\x05\x20\x01\x12\x31\x0e\x04\x07\x01\x12\
-  \\x31\x05\x15\x11\x35\x01\x02\x04\x00\x01\x01\x1c\x0a\x07\x03\x02\x08\x15\x12\x1d\
-  \\x02\x08\x1c\x08\x20\x02\x02\x13\x00\x10\x13\x01\x05\x00\x02\x0e\x1c\x1c\x0a\x07\
-  \\x03\x1c\x1c\x15\x12\x1d\x02\x08\x1c\x05\x20\x01\x02\x13\x00\x08\x07\x01\x15\x12\
-  \\x1d\x02\x08\x1c\x0a\x07\x02\x18\x15\x12\x1d\x02\x18\x12\x21\x09\x07\x01\x15\x12\
-  \\x1d\x02\x18\x12\x21\x0e\x20\x04\x12\x80\xbd\x0e\x11\x80\xc1\x12\x2d\x1d\x12\x2d\
-  \\x04\x20\x00\x12\x3d\x0b\x20\x04\x01\x0e\x12\x2d\x1d\x12\x2d\x12\x2d\x06\x20\x01\
-  \\x12\x21\x12\x2d\x08\x07\x02\x12\x80\xbd\x12\x80\xc5\x07\x20\x01\x12\x80\xc9\x12\
-  \\x2d\x04\x06\x11\x80\xd1\x07\x20\x02\x01\x11\x80\xd1\x05\x08\x20\x02\x01\x11\x80\
-  \\xd1\x12\x2d\x06\x20\x01\x01\x11\x80\xd1\x05\x20\x00\x1d\x12\x45\x08\x20\x02\x01\
-  \\x11\x80\xd1\x12\x25\x03\x20\x00\x02\x06\x07\x02\x11\x10\x12\x28\x08\x20\x02\x01\
-  \\x11\x80\xd1\x12\x29\x04\x20\x00\x12\x45\x04\x0a\x01\x12\x2d\x06\x00\x03\x0e\x0e\
-  \\x0e\x0e\x08\x07\x03\x12\x2d\x11\x10\x12\x2c\x08\x07\x02\x1d\x12\x2d\x1d\x12\x2d\
-  \\x09\x07\x03\x11\x10\x12\x30\x1d\x12\x2d\x03\x20\x00\x1c\x07\x20\x02\x01\x11\x80\
-  \\xd1\x08\x08\x20\x02\x01\x11\x80\xd1\x12\x31\x03\x07\x01\x1c\x09\x07\x03\x11\x10\
-  \\x12\x34\x1d\x12\x2d\x0c\x07\x04\x11\x10\x12\x38\x1d\x12\x2d\x1d\x12\x2d\x09\x07\
-  \\x03\x11\x10\x12\x3c\x1d\x12\x2d\x06\x15\x11\x35\x01\x11\x39\x05\x20\x01\x01\x13\
-  \\x00\x08\x07\x01\x15\x11\x35\x01\x11\x39\x08\x15\x12\x24\x02\x12\x2d\x12\x2d\x06\
-  \\x0a\x02\x12\x2d\x12\x2d\x06\x15\x12\x41\x01\x12\x45\x09\x20\x00\x15\x12\x80\xe5\
-  \\x01\x13\x00\x07\x15\x12\x80\xe5\x01\x12\x45\x04\x20\x00\x13\x00\x0e\x07\x04\x08\
-  \\x12\x45\x12\x2d\x15\x12\x80\xe5\x01\x12\x45\x0e\x07\x04\x0e\x12\x2d\x12\x2d\x15\
-  \\x12\x1d\x02\x0e\x12\x2d\x08\x20\x02\x12\x19\x0e\x11\x80\xf1\x0b\x20\x03\x12\x80\
-  \\xf5\x0e\x12\x2d\x11\x80\xf9\x0e\x20\x03\x12\x80\xfd\x11\x80\xc1\x11\x81\x01\x1d\
-  \\x12\x2d\x09\x20\x02\x12\x80\xbd\x0e\x11\x80\xc1\x06\x20\x01\x01\x11\x81\x05\x05\
-  \\x20\x00\x11\x81\x09\x09\x20\x02\x01\x11\x80\xd1\x11\x81\x09\x06\x20\x01\x01\x11\
-  \\x81\x09\x23\x07\x0e\x11\x10\x12\x2d\x12\x19\x12\x80\xf5\x12\x80\xfd\x12\x3d\x12\
-  \\x80\xbd\x12\x3d\x11\x81\x09\x12\x80\xbd\x12\x3d\x08\x11\x10\x1d\x12\x2d\x06\x20\
-  \\x01\x01\x11\x81\x11\x08\x01\x00\x03\x00\x00\x00\x00\x00\x06\x20\x01\x01\x11\x81\
-  \\x19\x06\x20\x01\x12\x81\x1d\x0e\x0b\x07\x04\x12\x81\x1d\x12\x2d\x1d\x12\x2d\x08\
-  \\x0a\x20\x03\x12\x19\x0e\x11\x80\xf1\x12\x2d\x07\x20\x02\x01\x12\x25\x1d\x1c\x06\
-  \\x20\x01\x01\x12\x81\x21\x0a\x20\x03\x12\x81\x25\x08\x11\x81\x29\x0e\x21\x07\x0b\
-  \\x12\x19\x12\x80\xfd\x12\x80\xbd\x08\x15\x11\x35\x01\x11\x39\x12\x81\x25\x1d\x12\
-  \\x2d\x1d\x1c\x1d\x12\x2d\x1d\x12\x2d\x1d\x1c\x04\x01\x00\x00\x00\x08\x20\x02\x12\
-  \\x31\x0e\x11\x81\x35\x08\x20\x02\x12\x29\x0e\x11\x81\x35\x06\x00\x02\x12\x2d\x0e\
-  \\x02\x08\x06\x15\x12\x24\x02\x0e\x12\x2d\x07\x15\x12\x24\x02\x0e\x12\x2d\x09\x20\
-  \\x02\x1d\x0e\x1d\x03\x11\x81\x3d\x05\x0a\x02\x0e\x12\x2d\x04\x07\x01\x1d\x03\x02\
-  \\x1e\x00\x07\x07\x03\x1d\x1e\x00\x08\x08\x06\x07\x02\x1d\x1e\x00\x08\x02\x1e\x01\
-  \\x08\x15\x12\x24\x02\x1e\x00\x1e\x01\x06\x07\x02\x1d\x1e\x01\x08\x06\x00\x01\x12\
-  \\x2d\x12\x45\x09\x06\x15\x12\x24\x02\x12\x45\x12\x2d\x08\x15\x12\x24\x02\x12\x45\
-  \\x12\x2d\x06\x0a\x02\x12\x45\x12\x2d\x0c\x01\x00\x07\x31\x2e\x30\x2e\x30\x2e\x30\
-  \\x00\x00\x2c\x01\x00\x27\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x20\xc2\xa9\x20\x32\
-  \\x30\x30\x37\x2d\x32\x30\x30\x38\x20\x41\x6e\x64\x72\x65\x77\x20\x41\x70\x70\x6c\
-  \\x65\x79\x61\x72\x64\x00\x00\x0a\x01\x00\x05\x53\x61\x6c\x73\x61\x00\x00\x1c\x01\
-  \\x00\x17\x2e\x4e\x45\x54\x20\x42\x72\x69\x64\x67\x65\x20\x66\x6f\x72\x20\x48\x61\
-  \\x73\x6b\x65\x6c\x6c\x00\x00\x08\x01\x00\x08\x00\x00\x00\x00\x00\x1e\x01\x00\x01\
-  \\x00\x54\x02\x16\x57\x72\x61\x70\x4e\x6f\x6e\x45\x78\x63\x65\x70\x74\x69\x6f\x6e\
-  \\x54\x68\x72\x6f\x77\x73\x01\x00\x10\x61\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x2e\x61\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x20\x61\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x5f\x43\x6f\x72\x44\x6c\x6c\x4d\x61\x69\x6e\x00\x6d\x73\
-  \\x63\x6f\x72\x65\x65\x2e\x64\x6c\x6c\x00\x00\x00\x00\x00\xff\x25\x00\x20\x40\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x01\x00\x10\x00\x00\x00\x18\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x01\x00\x01\x00\x00\x00\x30\x00\x00\x80\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x48\x00\x00\x00\
-  \\x58\x80\x00\x00\x04\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x03\x34\x00\
-  \\x00\x00\x56\x00\x53\x00\x5f\x00\x56\x00\x45\x00\x52\x00\x53\x00\x49\x00\x4f\x00\
-  \\x4e\x00\x5f\x00\x49\x00\x4e\x00\x46\x00\x4f\x00\x00\x00\x00\x00\xbd\x04\xef\xfe\
-  \\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\
-  \\x3f\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x00\x00\x01\x00\x56\x00\x61\x00\x72\x00\
-  \\x46\x00\x69\x00\x6c\x00\x65\x00\x49\x00\x6e\x00\x66\x00\x6f\x00\x00\x00\x00\x00\
-  \\x24\x00\x04\x00\x00\x00\x54\x00\x72\x00\x61\x00\x6e\x00\x73\x00\x6c\x00\x61\x00\
-  \\x74\x00\x69\x00\x6f\x00\x6e\x00\x00\x00\x00\x00\x00\x00\xb0\x04\x64\x02\x00\x00\
-  \\x01\x00\x53\x00\x74\x00\x72\x00\x69\x00\x6e\x00\x67\x00\x46\x00\x69\x00\x6c\x00\
-  \\x65\x00\x49\x00\x6e\x00\x66\x00\x6f\x00\x00\x00\x40\x02\x00\x00\x01\x00\x30\x00\
-  \\x30\x00\x30\x00\x30\x00\x30\x00\x34\x00\x62\x00\x30\x00\x00\x00\x48\x00\x18\x00\
-  \\x01\x00\x43\x00\x6f\x00\x6d\x00\x6d\x00\x65\x00\x6e\x00\x74\x00\x73\x00\x00\x00\
-  \\x2e\x00\x4e\x00\x45\x00\x54\x00\x20\x00\x42\x00\x72\x00\x69\x00\x64\x00\x67\x00\
-  \\x65\x00\x20\x00\x66\x00\x6f\x00\x72\x00\x20\x00\x48\x00\x61\x00\x73\x00\x6b\x00\
-  \\x65\x00\x6c\x00\x6c\x00\x00\x00\x34\x00\x06\x00\x01\x00\x46\x00\x69\x00\x6c\x00\
-  \\x65\x00\x44\x00\x65\x00\x73\x00\x63\x00\x72\x00\x69\x00\x70\x00\x74\x00\x69\x00\
-  \\x6f\x00\x6e\x00\x00\x00\x00\x00\x53\x00\x61\x00\x6c\x00\x73\x00\x61\x00\x00\x00\
-  \\x30\x00\x08\x00\x01\x00\x46\x00\x69\x00\x6c\x00\x65\x00\x56\x00\x65\x00\x72\x00\
-  \\x73\x00\x69\x00\x6f\x00\x6e\x00\x00\x00\x00\x00\x31\x00\x2e\x00\x30\x00\x2e\x00\
-  \\x30\x00\x2e\x00\x30\x00\x00\x00\x34\x00\x0a\x00\x01\x00\x49\x00\x6e\x00\x74\x00\
-  \\x65\x00\x72\x00\x6e\x00\x61\x00\x6c\x00\x4e\x00\x61\x00\x6d\x00\x65\x00\x00\x00\
-  \\x53\x00\x61\x00\x6c\x00\x73\x00\x61\x00\x2e\x00\x64\x00\x6c\x00\x6c\x00\x00\x00\
-  \\x74\x00\x27\x00\x01\x00\x4c\x00\x65\x00\x67\x00\x61\x00\x6c\x00\x43\x00\x6f\x00\
-  \\x70\x00\x79\x00\x72\x00\x69\x00\x67\x00\x68\x00\x74\x00\x00\x00\x43\x00\x6f\x00\
-  \\x70\x00\x79\x00\x72\x00\x69\x00\x67\x00\x68\x00\x74\x00\x20\x00\xa9\x00\x20\x00\
-  \\x32\x00\x30\x00\x30\x00\x37\x00\x2d\x00\x32\x00\x30\x00\x30\x00\x38\x00\x20\x00\
-  \\x41\x00\x6e\x00\x64\x00\x72\x00\x65\x00\x77\x00\x20\x00\x41\x00\x70\x00\x70\x00\
-  \\x6c\x00\x65\x00\x79\x00\x61\x00\x72\x00\x64\x00\x00\x00\x00\x00\x3c\x00\x0a\x00\
-  \\x01\x00\x4f\x00\x72\x00\x69\x00\x67\x00\x69\x00\x6e\x00\x61\x00\x6c\x00\x46\x00\
-  \\x69\x00\x6c\x00\x65\x00\x6e\x00\x61\x00\x6d\x00\x65\x00\x00\x00\x53\x00\x61\x00\
-  \\x6c\x00\x73\x00\x61\x00\x2e\x00\x64\x00\x6c\x00\x6c\x00\x00\x00\x2c\x00\x06\x00\
-  \\x01\x00\x50\x00\x72\x00\x6f\x00\x64\x00\x75\x00\x63\x00\x74\x00\x4e\x00\x61\x00\
-  \\x6d\x00\x65\x00\x00\x00\x00\x00\x53\x00\x61\x00\x6c\x00\x73\x00\x61\x00\x00\x00\
-  \\x34\x00\x08\x00\x01\x00\x50\x00\x72\x00\x6f\x00\x64\x00\x75\x00\x63\x00\x74\x00\
-  \\x56\x00\x65\x00\x72\x00\x73\x00\x69\x00\x6f\x00\x6e\x00\x00\x00\x31\x00\x2e\x00\
-  \\x30\x00\x2e\x00\x30\x00\x2e\x00\x30\x00\x00\x00\x38\x00\x08\x00\x01\x00\x41\x00\
-  \\x73\x00\x73\x00\x65\x00\x6d\x00\x62\x00\x6c\x00\x79\x00\x20\x00\x56\x00\x65\x00\
-  \\x72\x00\x73\x00\x69\x00\x6f\x00\x6e\x00\x00\x00\x31\x00\x2e\x00\x30\x00\x2e\x00\
-  \\x30\x00\x2e\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x0c\x00\x00\x00\
-  \\x40\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-  \\x00\x00\x00\x00"
+{-# LANGUAGE TemplateHaskell #-}
+
+-----------------------------------------------------------------------------
+-- |
+-- Licence     : BSD-style (see LICENSE)
+-- 
+-- Embeded driver assembly that helps in generating bindings.
+--
+-----------------------------------------------------------------------------
+
+
+module Foreign.Salsa.Driver (driverData) where
+
+import qualified Data.ByteString.Char8 as B
+import Data.FileEmbed
+
+{-# NOINLINE driverData #-}
+driverData :: B.ByteString
+driverData = $(embedFile "Driver/Salsa.dll") 
+
diff --git a/Foreign/Salsa/Mono/CLRHost.hs b/Foreign/Salsa/Mono/CLRHost.hs
new file mode 100644
--- /dev/null
+++ b/Foreign/Salsa/Mono/CLRHost.hs
@@ -0,0 +1,176 @@
+{-# LANGUAGE ForeignFunctionInterface, DoAndIfThenElse #-}
+-----------------------------------------------------------------------------
+-- |
+-- Licence     : BSD-style (see LICENSE)
+-- 
+-- Mono specific boostraping and exports
+--
+-----------------------------------------------------------------------------
+module Foreign.Salsa.Mono.CLRHost (
+    startCLR',
+    stopCLR',
+    loadDriverAndBoot,
+    SalsaString, withSalsaString, peekSalsaString
+    ) where
+
+import Data.Word
+import Data.Int
+import Data.ByteString.Unsafe (unsafeUseAsCStringLen)
+import Foreign.Ptr
+import Foreign.Storable
+import Foreign.Marshal
+import Foreign.C
+import System.IO
+import System.Environment (getProgName)
+import Control.Exception (bracket)
+import qualified Data.ByteString.Unsafe as S
+import Text.Printf
+
+import Foreign.Salsa.Driver
+
+
+data MonoAssembly = MonoAssembly
+type MonoAssemblyPtr = Ptr MonoAssembly
+data MonoDomain = MonoDomain
+type MonoDomainPtr = Ptr MonoDomain
+data MonoImage = MonoImage
+type MonoImagePtr = Ptr MonoImage
+data MonoMethodDesc = MonoMethodDesc
+type MonoMethodDescPtr = Ptr MonoMethodDesc
+data MonoClass = MonoClass
+type MonoClassPtr = Ptr MonoClass
+data MonoArray = MonoArray
+type MonoArrayPtr = Ptr MonoArray
+data MonoMethod = MonoMethod
+type MonoMethodPtr = Ptr MonoMethod
+data MonoObject = MonoObject
+type MonoObjectPtr = Ptr MonoObject
+data MonoAssemblyName = MonoAssemblyName
+type MonoAssemblyNamePtr = Ptr MonoAssemblyName
+
+type MonoImageOpenStatus = CInt
+
+type GBool = CInt
+gboolTrue = 1
+gboolFalse = 0
+
+
+foreign import ccall mono_jit_init :: CString -> IO MonoDomainPtr
+foreign import ccall mono_jit_cleanup :: MonoDomainPtr -> IO ()
+foreign import ccall mono_config_parse :: Ptr () -> IO ()
+foreign import ccall mono_get_corlib :: IO MonoImagePtr
+foreign import ccall mono_method_desc_new :: CString -> GBool -> IO MonoMethodDescPtr
+foreign import ccall mono_method_desc_search_in_image :: MonoMethodDescPtr -> MonoImagePtr -> IO MonoMethodPtr
+foreign import ccall mono_method_desc_free :: MonoMethodDescPtr -> IO ()
+foreign import ccall mono_get_byte_class :: IO MonoClassPtr
+foreign import ccall mono_array_new :: MonoDomainPtr -> MonoClassPtr -> Int -> IO MonoArrayPtr
+foreign import ccall mono_value_copy_array :: MonoArrayPtr -> Int -> Ptr a -> Int -> IO ()
+foreign import ccall mono_image_open_from_data :: Ptr a -> Word32 -> GBool -> Ptr MonoImageOpenStatus -> IO MonoImagePtr
+foreign import ccall mono_runtime_invoke :: MonoMethodPtr -> Ptr a -> Ptr b -> Ptr c -> IO MonoObjectPtr
+foreign import ccall mono_object_unbox :: MonoObjectPtr -> IO (Ptr a)
+foreign import ccall mono_domain_get :: IO MonoDomainPtr
+foreign import ccall mono_assembly_loaded :: MonoAssemblyNamePtr -> IO MonoAssemblyPtr
+foreign import ccall mono_assembly_name_new :: CString -> IO MonoAssemblyNamePtr
+foreign import ccall mono_assembly_get_image :: MonoAssemblyPtr -> IO MonoImagePtr
+foreign import ccall "marshal.c setupDomain" setupDomainInternal :: MonoDomainPtr -> CString -> CString -> IO () 
+
+
+driverDataArray :: IO MonoArrayPtr
+driverDataArray = unsafeUseAsCStringLen driverData $ \(p,l)-> do
+    dom <- mono_domain_get
+    if dom == nullPtr then
+        error "null domain"
+    else do 
+        bcls <- mono_get_byte_class
+        ar <- mono_array_new dom bcls l
+        mono_value_copy_array ar 0 p l
+        return ar
+    
+
+startCLR' = do
+    mono_config_parse nullPtr
+    domain <- return "salsa" >>= flip withCString mono_jit_init
+    if (domain == nullPtr) then
+        error "null domain"
+    else do
+        return ()
+
+stopCLR' :: IO ()
+stopCLR' = return ()
+
+
+getSalsa :: IO MonoImagePtr
+getSalsa = withCString "Salsa" $ \c-> do
+    name <- mono_assembly_name_new c
+    if name == nullPtr then
+        error "Could not create assembly name"
+    else do
+        assem <- mono_assembly_loaded name
+        if assem == nullPtr then
+            error "Could not get Salsa assembly"
+        else do
+            image <- mono_assembly_get_image assem
+            if image == nullPtr then
+                error "Could not get Salsa image"
+            else return image
+            
+
+getMethodFromNameImage :: String -> MonoImagePtr -> IO MonoMethodPtr
+getMethodFromNameImage nameS img = withCString nameS $ \nameC-> do
+    mthDes <- mono_method_desc_new nameC gboolTrue
+    if mthDes == nullPtr then
+        error "null mth des"
+    else do
+        method <- mono_method_desc_search_in_image mthDes img
+        if method == nullPtr then
+            error ("null method " ++ nameS)
+        else return method
+
+setupDomain :: IO ()
+setupDomain = withCString "Salsa.config" $ \configFile-> do
+    withCString "./" $ \baseDir-> do
+        dom <- mono_domain_get
+        setupDomainInternal dom baseDir configFile
+        return ()
+
+loadDriverAndBoot :: IO (FunPtr (CString -> IO (FunPtr a)))
+loadDriverAndBoot = do
+    loadDriver
+    setupDomain
+    salsa <- getSalsa
+    method <- getMethodFromNameImage "Salsa.Driver:Boot()" salsa
+    if method == nullPtr then
+        error "Could not find boot method"
+    else do
+        oret <- mono_runtime_invoke method nullPtr nullPtr nullPtr
+        pret <- mono_object_unbox oret
+        ret <- peek pret
+        return ret
+
+loadDriver :: IO ()
+loadDriver = do
+    corlib <- mono_get_corlib
+    if (corlib == nullPtr) then
+        error "null image"
+    else do
+        method <- getMethodFromNameImage "System.Reflection.Assembly:Load(byte[])" corlib
+        if (method == nullPtr) then
+            error "Cannot find method"
+        else do
+            dd <- driverDataArray
+            withArray [dd] $ \argp-> do
+                mono_runtime_invoke method nullPtr argp nullPtr
+                return ()
+
+
+
+type SalsaString = CString
+withSalsaString = withCString
+peekSalsaString = peekCString
+
+
+
+
+
+
+-- vim:set ts=4 sw=4 expandtab:
diff --git a/Foreign/Salsa/Resolver.hs b/Foreign/Salsa/Resolver.hs
--- a/Foreign/Salsa/Resolver.hs
+++ b/Foreign/Salsa/Resolver.hs
@@ -1,9 +1,7 @@
 {-# LANGUAGE TypeFamilies, MultiParamTypeClasses, EmptyDataDecls, TypeOperators #-}
-{-# OPTIONS_GHC -fallow-undecidable-instances #-}
+{-# LANGUAGE UndecidableInstances #-}
 -----------------------------------------------------------------------------
 -- |
--- Module      : Foreign.Salsa.Resolver
--- Copyright   : (c) 2007-2008 Andrew Appleyard
 -- Licence     : BSD-style (see LICENSE)
 -- 
 -- Contains a type-level implementation of the C# function member overload
@@ -207,10 +205,10 @@
     (TOr  (TAnd (IsPrim t1)           (TyEq t2 (Obj Object_)))
     (TOr  (TAnd (TyEq t1 Int32)       (TyEq t2 Double))
     (TOr  (TAnd (TyEq t1 (Obj Null))  (IsRef t2))
-    (TOr  (TAnd (TAnd (IsArr t1) (IsArr t2))
-                (IsSubtypeOf' (ArrElemTy t1) (ArrElemTy t2)))
+--    (TOr  (TAnd (TAnd (IsArr t1) (IsArr t2))
+--                (IsSubtypeOf' (ArrElemTy t1) (ArrElemTy t2)))
           (TAnd (TAnd (IsRef t1) (IsRef t2))
-                (IsSubtypeOf t1 t2)))))))
+                (IsSubtypeOf t1 t2)))))) -- )
 
 
 --    (TOr5 (TyEq t1 t2)
diff --git a/Foreign/Salsa/TypePrelude.hs b/Foreign/Salsa/TypePrelude.hs
--- a/Foreign/Salsa/TypePrelude.hs
+++ b/Foreign/Salsa/TypePrelude.hs
@@ -1,9 +1,7 @@
 {-# LANGUAGE TypeFamilies, TypeOperators, EmptyDataDecls #-}
-{-# OPTIONS_GHC -fallow-undecidable-instances #-}
+{-# LANGUAGE UndecidableInstances #-}
 -----------------------------------------------------------------------------
 -- |
--- Module      : Foreign.Salsa.TypePrelude
--- Copyright   : (c) 2007-2008 Andrew Appleyard
 -- Licence     : BSD-style (see LICENSE)
 -- 
 -- Type-level implementations of some standard boolean and list functions.
diff --git a/Foreign/Salsa/Win/CLRHost.hs b/Foreign/Salsa/Win/CLRHost.hs
new file mode 100644
--- /dev/null
+++ b/Foreign/Salsa/Win/CLRHost.hs
@@ -0,0 +1,507 @@
+{-# LANGUAGE ForeignFunctionInterface, DoAndIfThenElse #-}
+-----------------------------------------------------------------------------
+-- |
+-- Licence     : BSD-style (see LICENSE)
+-- 
+-- Windows specific bootstapping and exports.
+-- Exposes some of the methods of the ICLRRuntimeHost COM interface, which
+-- can be used to host the the Microsoft CLR in the process, and to execute
+-- code from a .NET assembly.  Includes basic functionality for dealing
+-- with the Microsoft COM.
+--
+-----------------------------------------------------------------------------
+module Foreign.Salsa.Win.CLRHost (
+    startCLR',
+    stopCLR',
+    loadDriverAndBoot,
+    SalsaString, withSalsaString, peekSalsaString
+    ) where
+
+import Data.Word
+import Data.Int
+import Foreign.Ptr
+import Foreign.Storable
+import Foreign.Marshal
+import Foreign.C.String
+import System.Win32
+import System.IO
+import Control.Exception (bracket)
+import Unsafe.Coerce (unsafeCoerce)
+import System.IO.Unsafe (unsafePerformIO)
+import qualified Data.ByteString as S
+import Text.Printf
+
+import Foreign.Salsa.Driver
+
+--
+-- Global static functions for hosting the CLR
+--
+
+type ICorRuntimeHost = InterfacePtr
+type ICLRMetaHost    = InterfacePtr
+type ICLRRuntimeInfo = InterfacePtr
+type IEnumUnknown    = InterfacePtr
+
+-- | 'clrHost' stores a reference to the ICLRRuntimeHost for the .NET execution
+--   engine that is hosted in the process.
+{-# NOINLINE clrHost #-}
+clrHost :: ICorRuntimeHost
+clrHost = unsafePerformIO $ initClrHost
+
+startCLR' = start_ICorRuntimeHost clrHost
+stopCLR' = stop_ICorRuntimeHost clrHost
+
+clsid_CorRuntimeHost = Guid 0xCB2F6723 0xAB3A 0x11D2 0x9C 0x40 0x00 0xC0 0x4F 0xA3 0x0A 0x3E
+iid_ICorRuntimeHost  = Guid 0xCB2F6722 0xAB3A 0x11D2 0x9C 0x40 0x00 0xC0 0x4F 0xA3 0x0A 0x3E
+
+-- | 'corBindToRunTimeEx' loads the CLR execution engine into the process and returns
+--   a COM interface for it.
+corBindToRuntimeEx :: HINSTANCE -> IO ICorRuntimeHost
+corBindToRuntimeEx hMscoree = do
+    -- Obtain a pointer to the 'CorBindToRuntimeEx' function from mscoree.dll
+    corBindToRuntimeExAddr <- getProcAddress hMscoree "CorBindToRuntimeEx"
+    let corBindToRuntimeEx = makeCorBindToRuntimeEx $ castPtrToFunPtr corBindToRuntimeExAddr
+
+    -- Request the shim (mscoree.dll) to load a version of the runtime into the
+    -- process, returning a pointer to an implementation of the ICorRuntimeHost
+    -- for controlling the runtime.
+    with (nullPtr :: ICorRuntimeHost) $ \clrHostPtr -> do
+        -- Call 'corBindToRuntimeEx' to obtain an ICorRuntimeHost 
+        with clsid_CorRuntimeHost $ \refCLSID_CorRuntimeHost -> 
+            with iid_ICorRuntimeHost $ \refIID_ICorRuntimeHost -> 
+                corBindToRuntimeEx nullPtr nullPtr 0 refCLSID_CorRuntimeHost
+                    refIID_ICorRuntimeHost clrHostPtr >>= checkHR "CorBindToRuntimeEx"
+        peek clrHostPtr
+
+type CorBindToRuntimeEx = LPCWSTR -> LPCWSTR -> DWORD -> Ptr CLSID -> Ptr IID -> Ptr ICorRuntimeHost -> IO HResult
+foreign import stdcall "dynamic" makeCorBindToRuntimeEx :: FunPtr CorBindToRuntimeEx -> CorBindToRuntimeEx
+
+
+-- | 'createMetaHost' 
+createMetaHost :: Addr -> IO ICLRMetaHost
+createMetaHost clrCreateInstanceAddr = do
+    let clsid_CLRMetaHost = Guid 0X9280188D 0X0E8E 0X4867 0XB3 0X0C 0X7F 0XA8 0X38 0X84 0XE8 0XDE
+        iid_ICLRMetaHost  = Guid 0XD332DB9E 0XB9B3 0X4125 0X82 0X07 0XA1 0X48 0X84 0XF5 0X32 0X16
+    
+    let clrCreateInstance = makeCLRCreateInstance $ castPtrToFunPtr clrCreateInstanceAddr
+    
+    with (nullPtr :: ICLRMetaHost) $ \clrMetaHostPtr ->
+        with clsid_CLRMetaHost $ \refCLSID_CLRMetaHost ->
+            with iid_ICLRMetaHost $ \refIID_ICLRMetaHost -> do
+                hr <- clrCreateInstance refCLSID_CLRMetaHost refIID_ICLRMetaHost clrMetaHostPtr
+                if hr == 0 then
+                    peek clrMetaHostPtr
+                else
+                    return nullPtr
+
+type CLRCreateInstance = Ptr CLSID -> Ptr IID -> Ptr ICLRMetaHost -> IO HResult
+foreign import stdcall "dynamic" makeCLRCreateInstance :: FunPtr CLRCreateInstance -> CLRCreateInstance
+
+-- | 'enumInstalledRuntimes_ICLRMetaHost'
+enumInstalledRuntimes_ICLRMetaHost :: ICLRMetaHost -> IO IEnumUnknown
+enumInstalledRuntimes_ICLRMetaHost this = do
+    f <- getInterfaceFunction 5 makeEnumInstalledRuntimes_ICLRMetaHost this
+    with (nullPtr :: IEnumUnknown) $ \enumUnknownPtr -> do
+        f this enumUnknownPtr >>= checkHR "EnumerateInstalledRuntimes_ICLRMetaHost"
+        peek enumUnknownPtr
+
+type EnumInstalledRuntimes_ICLRMetaHost = ICLRMetaHost -> Ptr IEnumUnknown -> IO HResult
+foreign import stdcall "dynamic" makeEnumInstalledRuntimes_ICLRMetaHost :: FunPtr EnumInstalledRuntimes_ICLRMetaHost -> EnumInstalledRuntimes_ICLRMetaHost
+
+-- | 'next_IEnumUnknown'
+next_IEnumUnknown :: IEnumUnknown -> IO InterfacePtr
+next_IEnumUnknown this = do
+    f <- getInterfaceFunction 3 makeNext_IEnumUnknown this
+    with (0 :: Word32) $ \fetched ->
+        with (nullPtr :: InterfacePtr) $ \interfacePtr -> do
+            hr <- f this 1 interfacePtr fetched
+            if hr == 0 then
+                peek interfacePtr
+            else
+                return nullPtr
+
+type Next_IEnumUnknown = IEnumUnknown -> Word32 ->  Ptr InterfacePtr -> Ptr Word32 -> IO HResult
+foreign import stdcall "dynamic" makeNext_IEnumUnknown :: FunPtr Next_IEnumUnknown -> Next_IEnumUnknown
+
+-- | 'all_IEnumUnknown'
+all_IEnumUnknown :: IEnumUnknown -> [InterfacePtr] -> IO [InterfacePtr]
+all_IEnumUnknown this xs = do
+    next <- next_IEnumUnknown this
+    if next == nullPtr then
+        return xs
+    else
+        all_IEnumUnknown this (next : xs)
+
+-- | 'getRuntimes_ICLRMetaHost'
+getRuntimes_ICLRMetaHost :: ICLRMetaHost -> IO [ICLRRuntimeInfo]
+getRuntimes_ICLRMetaHost this = do
+    enum <- enumInstalledRuntimes_ICLRMetaHost this
+    all_IEnumUnknown enum []
+
+-- | 'getVersionString_ICLRRuntimeInfo'
+getVersionString_ICLRRuntimeInfo :: ICLRRuntimeInfo -> IO String
+getVersionString_ICLRRuntimeInfo this = do
+    f <- getInterfaceFunction 3 makeGetVersionString_ICLRRuntimeInfo this
+    with 512 $ \sizePtr ->
+        allocaArray 512 $ \stringPtr -> do
+            f this stringPtr sizePtr
+            peekCWString stringPtr
+
+type GetVersionString_ICLRRuntimeInfo = ICLRRuntimeInfo -> LPCWSTR -> Ptr DWORD -> IO HResult
+foreign import stdcall "dynamic" makeGetVersionString_ICLRRuntimeInfo :: FunPtr GetVersionString_ICLRRuntimeInfo -> GetVersionString_ICLRRuntimeInfo
+
+-- | 'getCorHost_ICLRRuntimeInfo'
+getCorHost_ICLRRuntimeInfo :: ICLRRuntimeInfo -> IO ICorRuntimeHost
+getCorHost_ICLRRuntimeInfo this = do
+    f <- getInterfaceFunction 9 makeGetInterface_ICLRRuntimeInfo this
+    with (nullPtr :: ICorRuntimeHost) $ \clrHostPtr -> do
+        with clsid_CorRuntimeHost $ \refCLSID_CorRuntimeHost -> 
+            with iid_ICorRuntimeHost $ \refIID_ICorRuntimeHost ->
+                f this refCLSID_CorRuntimeHost refIID_ICorRuntimeHost clrHostPtr >>= checkHR "GetCorHost_ICLRRuntimeInfo"
+        peek clrHostPtr
+
+type GetInterface_ICLRRuntimeInfo = ICLRRuntimeInfo -> Ptr CLSID -> Ptr IID -> Ptr ICorRuntimeHost -> IO HResult
+foreign import stdcall "dynamic" makeGetInterface_ICLRRuntimeInfo :: FunPtr GetInterface_ICLRRuntimeInfo -> GetInterface_ICLRRuntimeInfo
+
+
+-- | 'initClrHost'
+initClrHost :: IO ICorRuntimeHost
+initClrHost = do
+    -- Load the 'mscoree' dynamic library into the process.  This is the
+    -- 'stub' library for the .NET execution engine, and is used to load an
+    -- appropriate version of the real runtime via a call to
+    -- 'CorBindToRuntimeEx'.
+    hMscoree <- loadLibrary "mscoree.dll"
+
+    -- Attempt .Net 4.0 binding by first obtaining a pointer to 'CLRCreateInstance'
+    -- If this fails, fall back to corBindToRuntimeEx which only allows
+    -- binding to MS .Net versions < 4.0
+    clrCreateInstanceAddr <- getProcAddress hMscoree "CLRCreateInstance"
+    
+    if clrCreateInstanceAddr == nullPtr then
+        corBindToRuntimeEx hMscoree
+    else do
+        metaHost <- createMetaHost clrCreateInstanceAddr
+        if metaHost == nullPtr then
+            corBindToRuntimeEx hMscoree
+        else do
+            runtimes <- getRuntimes_ICLRMetaHost metaHost
+            getCorHost_ICLRRuntimeInfo $ head runtimes
+
+-- | 'start_ICorRuntimeHost' calls the Start method of the given ICorRuntimeHost interface.
+start_ICorRuntimeHost this = do
+    -- Initialise COM (and the threading model)
+    coInitializeEx nullPtr coInit_ApartmentThreaded
+    -- TODO: Allow the library user to select their desired threading model
+    --       (we use an STA for the time being so we can use GUI libraries).
+
+    f <- getInterfaceFunction 10 makeStart this
+    f this >>= checkHR "ICorRuntimeHost.Start"
+
+type Start = ICorRuntimeHost -> IO HResult
+foreign import stdcall "dynamic" makeStart :: FunPtr Start -> Start
+
+
+-- | 'stop_ICorRuntimeHost' calls the Stop method of the given ICorRuntimeHost interface.
+stop_ICorRuntimeHost this = do
+    f <- getInterfaceFunction 11 makeStop this
+    f this >>= checkHR "ICorRuntimeHost.Stop"
+
+    coUninitialize
+
+type Stop = ICorRuntimeHost -> IO HResult
+foreign import stdcall "dynamic" makeStop :: FunPtr Stop -> Stop
+
+
+-- | 'getDefaultDomain_ICorRuntimeHost' calls the GetDefaultDOmain method of the given
+--   ICorRuntimeHost interface.
+getDefaultDomain_ICorRuntimeHost this = do
+    f <- getInterfaceFunction 13 makeGetDefaultDomain this
+    with (nullPtr :: InterfacePtr) $ \appDomainPtr -> do
+        f this appDomainPtr >>= checkHR "ICorRuntimeHost.GetDefaultDomain"
+        peek appDomainPtr
+
+type GetDefaultDomain = ICorRuntimeHost -> Ptr InterfacePtr -> IO HResult
+foreign import stdcall "dynamic" makeGetDefaultDomain :: FunPtr GetDefaultDomain -> GetDefaultDomain
+
+
+type AppDomain = InterfacePtr -- mscorlib::_AppDomain
+
+-- | 'load_AppDomain' calls mscorlib::_AppDomain.Load_3(SafeArray* rawAssembly, _Assembly** result).
+load_AppDomain this rawAssembly = do
+    f <- getInterfaceFunction 45 makeLoad_AppDomain this
+    with (nullPtr :: Assembly) $ \assemblyPtr -> do
+        f this rawAssembly assemblyPtr >>= checkHR "AppDomain.Load"
+        peek assemblyPtr
+
+type Load_AppDomain = AppDomain -> SafeArray -> Ptr Assembly -> IO HResult
+foreign import stdcall "dynamic" makeLoad_AppDomain :: FunPtr Load_AppDomain -> Load_AppDomain
+
+-- | 'load_AppDomain_2' calls mscorlib::_AppDomain.Load_2(BStr assemblyString, _Assembly** result).
+load_AppDomain_2 this assemblyString = do
+    f <- getInterfaceFunction 44 makeLoad_AppDomain_2 this
+    withBStr assemblyString $ \assemblyString' -> do
+        with (nullPtr :: InterfacePtr) $ \assemblyPtr -> do
+            f this assemblyString' assemblyPtr >>= checkHR "AppDomain.Load"
+            peek assemblyPtr
+
+type Load_AppDomain_2 = AppDomain -> BStr -> Ptr InterfacePtr -> IO HResult
+foreign import stdcall "dynamic" makeLoad_AppDomain_2 :: FunPtr Load_AppDomain_2 -> Load_AppDomain_2
+
+
+type Assembly = InterfacePtr -- mscorlib::_Assembly
+
+-- | 'getType_Assembly' calls mscorlib::_Assembly.GetType_2(BStr name, _Type** result).
+getType_Assembly this name = do
+    f <- getInterfaceFunction 17 makeGetType_Assembly this
+    withBStr name $ \name' ->
+        with (nullPtr :: Type) $ \typePtr -> do
+            f this name' typePtr >>= checkHR "Assembly.GetType"
+            t <- peek typePtr
+            if t == nullPtr then error "Assembly.GetType failed"
+                            else return t
+
+type GetType_Assembly = Assembly -> BStr -> Ptr Type -> IO HResult
+foreign import stdcall "dynamic" makeGetType_Assembly :: FunPtr GetType_Assembly -> GetType_Assembly
+
+
+type Type = InterfacePtr -- mscorlib::_Type
+
+-- | 'invokeMember_Type' calls mscorlib::_Type.InvokeMember_3(BStr name,
+--   BindingFlags invokeAttr, _Binder* binder, Variant target, SafeArray* args,
+--   Variant* result) to invoke a method without a binder, target or any arguments.
+invokeMember_Type this memberName = do
+    f <- getInterfaceFunction 57 {- _Type.InvokeMember_3 -} makeInvokeMember_Type this
+    withBStr memberName $ \memberName' ->
+        with emptyVariant $ \resultPtr -> do
+            f this memberName' 256 {- BindingFlags.InvokeMethod -}
+                nullPtr 0 0 nullPtr resultPtr >>= checkHR "Type.InvokeMember"
+            peek resultPtr
+
+-- Portability note: Type.InvokeMember accepts a by-value variant argument (as its fourth
+--                   argument).  In the declaration below, this is encoded as two Word64
+--                   arguments.
+type InvokeMember_Type = Type -> BStr -> Word32 -> Ptr () -> Word64 -> Word64 -> Ptr () -> Ptr Variant -> IO HResult
+foreign import stdcall "dynamic" makeInvokeMember_Type :: FunPtr InvokeMember_Type -> InvokeMember_Type
+
+
+-- | 'loadDriverAndBoot' loads the Salsa driver assembly into the application domain from 
+--   memory (the binary data is originally stored in 'driverData'), and then invokes the
+--   Boot method (from the Salsa.Driver class) to obtain a function pointer for invoking 
+--   the 'GetPointerToMethod' method.
+loadDriverAndBoot' :: ICorRuntimeHost -> IO (FunPtr (SalsaString -> IO (FunPtr a)))
+loadDriverAndBoot' clrHost = do
+    -- Obtain an _AppDomain interface pointer to the default application domain
+    withInterface (getDefaultDomain_ICorRuntimeHost clrHost) $ \untypedAppDomain -> do
+        let iid_AppDomain = Guid 0x05F696DC 0x2B29 0x3663 0xAD 0x8B 0xC4 0x38 0x9C 0xF2 0xA7 0x13
+        withInterface (queryInterface untypedAppDomain iid_AppDomain) $ \appDomain -> do
+
+            -- Create a safe array for the contents of the driver assembly binary
+            bracket (prim_SafeArrayCreateVector varType_UI1 0 (fromIntegral $ S.length driverData))
+                    (prim_SafeArrayDestroy)
+                (\sa -> do
+                    -- Copy the driver assembly data into the safe array
+                    saDataPtr <- with (nullPtr :: Ptr Word8) $ \ptr ->
+                                      prim_SafeArrayAccessData sa ptr >> peek ptr
+                    S.useAsCStringLen driverData $ \(bsPtr,bsLen) -> do
+                        copyBytes saDataPtr (unsafeCoerce bsPtr) bsLen 
+                    prim_SafeArrayUnaccessData sa
+
+                    -- Load the driver assembly into the application domain
+                    withInterface (load_AppDomain appDomain sa) $ \assembly -> do
+
+                        -- Obtain a _Type interface pointer to the Salsa.Driver type
+                        withInterface (getType_Assembly assembly "Salsa.Driver") $ \typ -> do
+
+                            -- Invoke the Boot method of Salsa.Driver to obtain a function
+                            -- pointer to the 'GetPointerToMethod' method
+                            (Variant _ returnValue) <- invokeMember_Type typ "Boot"
+
+                            -- Return a wrapper function for the 'GetPointerToMethod' method
+                            return $ unsafeCoerce returnValue)
+
+loadDriverAndBoot = loadDriverAndBoot' clrHost
+
+
+
+{-
+
+-- | 'executeInDefaultAppDomain_ICLRRuntimeHost' calls the ExecuteInDefaultAppDomain
+--   method of the given ICLRRuntimeHost interface.
+executeInDefaultAppDomain_ICLRRuntimeHost :: ICLRRuntimeHost -> String -> String -> String -> String -> IO DWORD
+executeInDefaultAppDomain_ICLRRuntimeHost this assemblyPath typeName methodName argument = do
+    f <- getInterfaceFunction 11 makeExecuteInDefaultAppDomain this
+    with (0 :: DWORD) $ \resultPtr -> do
+        hResult <- withCWString assemblyPath $ \assemblyPath' -> 
+                       withCWString typeName $ \typeName' ->
+                           withCWString methodName $ \methodName' ->
+                               withCWString argument $ \argument' ->
+                                   f this assemblyPath' typeName' methodName' argument' resultPtr
+        peek resultPtr
+
+type ExecuteInDefaultAppDomain = ICLRRuntimeHost -> LPCWSTR -> LPCWSTR -> LPCWSTR -> LPCWSTR -> Ptr DWORD -> IO HResult
+foreign import stdcall "dynamic" makeExecuteInDefaultAppDomain :: FunPtr ExecuteInDefaultAppDomain -> ExecuteInDefaultAppDomain
+
+-}
+
+--
+-- Types and functions for programming the COM
+--
+
+type HResult  = Word32
+type CLSID    = Guid
+type IID      = Guid
+
+-- | 'InterfacePtr' is a pointer to an arbitrary COM interface (which is a pointer to
+--   a vtable of function pointers for the interface methods).
+type InterfacePtr = Ptr (Ptr (FunPtr ()))
+
+
+-- | 'queryInterface' calls the QueryInterface method of the given COM interface.
+queryInterface this iid = do
+    f <- getInterfaceFunction 0 {- QueryInterface -} makeQueryInterface this
+    with (nullPtr :: InterfacePtr) $ \interfacePtr -> do
+        with iid $ \refIID -> f this refIID interfacePtr >>= checkHR "IUnknown.QueryInterface"
+        peek interfacePtr
+
+type QueryInterface = InterfacePtr -> Ptr IID -> Ptr InterfacePtr -> IO HResult
+foreign import stdcall "dynamic" makeQueryInterface :: FunPtr QueryInterface -> QueryInterface
+
+
+-- | 'release' calls the Release method of the given COM interface.
+release this = do
+    f <- getInterfaceFunction 2 {- Release -} makeRelease this
+    f this
+
+type Release = InterfacePtr -> IO Word32
+foreign import stdcall "dynamic" makeRelease :: FunPtr Release -> Release
+
+
+-- | 'withInterface i f' is like 'bracket' but for COM interface pointers, it calls
+--   'release' once the computation is finished.
+withInterface :: (IO InterfacePtr) -> (InterfacePtr -> IO a) -> IO a
+withInterface i = bracket i (\x -> if x == nullPtr then return 0 else release x)
+
+
+-- | 'getInterfaceFunction' @i makeFun obj@ is an action that returns the @i@th function
+--   of the COM interface referred to by @obj@.  The function is returned as a Haskell
+--   function by passing it through @makeFun@.
+getInterfaceFunction :: Int -> (FunPtr a -> b) -> InterfacePtr -> IO b
+getInterfaceFunction index makeFun this = do
+    -- Obtain a pointer to the appropriate element in the vtable for this interface
+    funPtr <- peek this >>= (flip peekElemOff) index
+    -- Cast the function pointer to the expected type, and import it as a Haskell function
+    return $ makeFun $ castFunPtr funPtr
+
+
+foreign import stdcall "CoInitializeEx" coInitializeEx :: Ptr () -> Int32 -> IO HResult
+foreign import stdcall "CoUninitialize" coUninitialize :: IO ()
+
+coInit_MultiThreaded     = 0 :: Int32
+coInit_ApartmentThreaded = 2 :: Int32
+
+data Guid = Guid Word32 Word16 Word16 Word8 Word8 Word8 Word8 Word8 Word8 Word8 Word8 
+    deriving (Show, Eq)
+
+instance Storable Guid where
+    sizeOf    _ = 16
+    alignment _ = 4
+
+    peek guidPtr = do
+        a  <- peek $ plusPtr guidPtr 0 
+        b  <- peek $ plusPtr guidPtr 4
+        c  <- peek $ plusPtr guidPtr 6
+        d0 <- peek $ plusPtr guidPtr 8
+        d1 <- peek $ plusPtr guidPtr 9
+        d2 <- peek $ plusPtr guidPtr 10
+        d3 <- peek $ plusPtr guidPtr 11
+        d4 <- peek $ plusPtr guidPtr 12
+        d5 <- peek $ plusPtr guidPtr 13
+        d6 <- peek $ plusPtr guidPtr 14
+        d7 <- peek $ plusPtr guidPtr 15
+        return $ Guid a b c d0 d1 d2 d3 d4 d5 d6 d7
+
+    poke guidPtr (Guid a b c d0 d1 d2 d3 d4 d5 d6 d7) = do
+        poke (plusPtr guidPtr 0)  a
+        poke (plusPtr guidPtr 4)  b
+        poke (plusPtr guidPtr 6)  c
+        poke (plusPtr guidPtr 8)  d0
+        poke (plusPtr guidPtr 9)  d1
+        poke (plusPtr guidPtr 10) d2
+        poke (plusPtr guidPtr 11) d3
+        poke (plusPtr guidPtr 12) d4
+        poke (plusPtr guidPtr 13) d5
+        poke (plusPtr guidPtr 14) d6
+        poke (plusPtr guidPtr 15) d7
+
+--
+-- Variant Support
+--
+
+data Variant = Variant VarType Word64 deriving (Show, Eq)
+type VarType = Word16
+
+varType_Empty, varType_UI1 :: VarType
+varType_Empty = 0
+varType_UI1   = 17
+
+emptyVariant = Variant varType_Empty 0
+
+instance Storable Variant where
+    sizeOf    _ = 16
+    alignment _ = 8
+
+    peek ptr = do
+        a  <- peek $ plusPtr ptr 0 
+        b  <- peek $ plusPtr ptr 8
+        return $ Variant a b
+
+    poke ptr (Variant a b) = do
+        poke (plusPtr ptr 0) a
+        poke (plusPtr ptr 2) (0 :: Word16)
+        poke (plusPtr ptr 4) (0 :: Word16)
+        poke (plusPtr ptr 6) (0 :: Word16)
+        poke (plusPtr ptr 8) b
+
+--
+-- Safe Array Support
+--
+
+newtype SafeArray = SafeArray (Ptr ()) deriving (Show, Eq)
+
+foreign import stdcall "SafeArrayCreateVector" prim_SafeArrayCreateVector :: VarType -> Int32 -> Word32 -> IO SafeArray
+foreign import stdcall "SafeArrayAccessData"   prim_SafeArrayAccessData   :: SafeArray -> Ptr (Ptr a) -> IO HResult
+foreign import stdcall "SafeArrayUnaccessData" prim_SafeArrayUnaccessData :: SafeArray -> IO HResult 
+foreign import stdcall "SafeArrayDestroy"      prim_SafeArrayDestroy      :: SafeArray -> IO HResult
+
+--
+-- BStr Support
+--
+
+newtype BStr = BStr (Ptr ()) deriving (Show, Eq)
+
+sysAllocString :: String -> IO BStr
+sysAllocString s = withCWString s prim_SysAllocString
+foreign import stdcall "oleauto.h SysAllocString" prim_SysAllocString :: CWString -> IO BStr
+
+sysFreeString :: BStr -> IO ()
+sysFreeString = prim_SysFreeString
+foreign import stdcall "oleauto.h SysFreeString" prim_SysFreeString :: BStr -> IO ()
+
+withBStr :: String -> (BStr -> IO a) -> IO a
+withBStr s = bracket (sysAllocString s) (sysFreeString)
+
+--
+-- HResult Support
+--
+
+checkHR :: String -> HResult -> IO HResult
+checkHR msg 0 = return 0
+checkHR msg r = error $ printf "%s failed (0x%8x)" msg r
+
+
+type SalsaString = CWString
+withSalsaString = withCWString
+peekSalsaString = peekCWString
+
+-- vim:set ts=4 sw=4 expandtab:
diff --git a/Foreign/Salsa/salsa.c b/Foreign/Salsa/salsa.c
new file mode 100644
--- /dev/null
+++ b/Foreign/Salsa/salsa.c
@@ -0,0 +1,59 @@
+/******************************************************************************
+-- |
+-- Licence     : BSD-style (see LICENSE)
+-- 
+-- Salsa low level requirements.
+--
+*****************************************************************************/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef MONO
+
+#include <stdint.h>
+#include <mono/metadata/appdomain.h>
+
+typedef struct {              //layout of structures can be found in mono's domain-internals.h
+	MonoObject object;
+	MonoString *application_base;
+	MonoString *application_name;
+	MonoString *cache_path;
+	MonoString *configuration_file;
+	MonoString *dynamic_base;
+} MonoAppDomainSetupInternal;
+
+
+typedef struct {
+	void                        *lock;
+  void                        *pad;
+	void                        *mp;
+	void                        *code_mp;
+	MonoAppDomainSetupInternal  *setup;
+	void                        *domain;
+	void                        *default_context;
+
+} MonoDomainInternal;
+
+
+void setupDomain(MonoDomain *domain, char *baseDir, char *configFile) //workaround for an issue that was introduced since Mono 3.0 but yet unresolved
+{
+  MonoAppDomainSetupInternal *appDomSetup;
+  appDomSetup = ((MonoDomainInternal*)domain)->setup; 
+  if(appDomSetup != NULL)
+  {
+    appDomSetup->application_base = mono_string_new(domain, baseDir);
+    appDomSetup->configuration_file = mono_string_new(domain, configFile);
+  }
+}
+
+#else
+
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/Generator/Generator.cs b/Generator/Generator.cs
--- a/Generator/Generator.cs
+++ b/Generator/Generator.cs
@@ -1,7 +1,6 @@
 //
 // Salsa Binding Generator
 //
-// Copyright: (c) 2007-2008 Andrew Appleyard
 // Licence:   BSD3 (see LICENSE)
 //
 
@@ -221,7 +220,7 @@
             // Require System.Array (the base class of all arrays), and its
             // CreateInstance method, because the Salsa library uses it to 
             // instantiate arrays.
-            Request(typeof(System.Array), "CreateInstance");
+//            Request(typeof(System.Array), "CreateInstance");
 
             using (w = File.CreateText(Path.Combine(outputPath, "Bindings.hs")))
             {
@@ -245,8 +244,7 @@
                         _requestedMembers.Add(requestedType, new List<string>());
                 }
 
-                w.WriteLine("{-# LANGUAGE ForeignFunctionInterface, MultiParamTypeClasses, FlexibleInstances, TypeFamilies, TypeOperators, TypeSynonymInstances #-}");
-                w.WriteLine("{-# OPTIONS_GHC -fallow-undecidable-instances #-}");
+                w.WriteLine("{-# LANGUAGE ForeignFunctionInterface, MultiParamTypeClasses, FlexibleInstances, TypeFamilies, TypeOperators, TypeSynonymInstances, UndecidableInstances #-}");
 
                 w.WriteLine("module {0} (", "Bindings");
                 w.WriteLine("  module Labels");
@@ -274,6 +272,8 @@
 
             using (w = File.CreateText(Path.Combine(outputPath, "Labels.hs")))
             {
+                w.WriteLine("{-# LANGUAGE EmptyDataDecls #-}"); 
+
                 w.WriteLine("module Labels where");
                 w.WriteLine("import Foreign.Salsa (invoke)");
                 w.WriteLine();
@@ -294,18 +294,18 @@
 
         private void WriteClass(Type targetType)
         {
-            if (targetType.IsArray)
-            {
-                // Explicit bindings for array types are not generated by the code generator.
-                // We only need to generate bindings for the element type, the base type
-                // (System.Array) (which is always generated) and the parameterised 'Arr t'
-                // type (see end of this method).
-
-                // Require the element type of the array
-                RequireType(targetType.GetElementType());
-
-                return;
-            }
+//            if (targetType.IsArray)
+//            {
+//                // Explicit bindings for array types are not generated by the code generator.
+//                // We only need to generate bindings for the element type, the base type
+//                // (System.Array) (which is always generated) and the parameterised 'Arr t'
+//                // type (see end of this method).
+//
+//                // Require the element type of the array
+//                RequireType(targetType.GetElementType());
+//
+//                return;
+//            }
 
             string classLabel = TypeToLabel(targetType);
 
@@ -600,25 +600,25 @@
             w.WriteLine("type instance FromTyCode ({1}) = {0}", ToHaskellType(targetType), typeCode); // EXPERIMENTAL
             w.WriteLine();
 
-            if (targetType == typeof(System.Array))
-            {
-                //
-                // Delegate the members of any array type (i.e. any 'Arr t') to System.Array
-                //
-                w.WriteLine();
-                w.WriteLine("--");
-                w.WriteLine("-- 'Arr t' to 'System.Array' delegation code");
-                w.WriteLine("--");
-                w.WriteLine();
-                Console.WriteLine(string.Join(", ", Assembly.GetExecutingAssembly().GetManifestResourceNames()));
-                using (StreamReader r = new StreamReader(
-                    Assembly.GetExecutingAssembly().GetManifestResourceStream(typeof(Generator), "Array.hs")))
-                {
-                    string line;
-                    while ((line = r.ReadLine()) != null)
-                        w.WriteLine(line);
-                }
-            }
+//            if (targetType == typeof(System.Array))
+//            {
+//                //
+//                // Delegate the members of any array type (i.e. any 'Arr t') to System.Array
+//                //
+//                w.WriteLine();
+//                w.WriteLine("--");
+//                w.WriteLine("-- 'Arr t' to 'System.Array' delegation code");
+//                w.WriteLine("--");
+//                w.WriteLine();
+//                Console.WriteLine(string.Join(", ", Assembly.GetExecutingAssembly().GetManifestResourceNames()));
+//                using (StreamReader r = new StreamReader(
+//                    Assembly.GetExecutingAssembly().GetManifestResourceStream(typeof(Generator), "Array.hs")))
+//                {
+//                    string line;
+//                    while ((line = r.ReadLine()) != null)
+//                        w.WriteLine(line);
+//                }
+//            }
         }
 
         /// <summary>
@@ -654,7 +654,7 @@
                         delegate(ParameterInfo pi) { return ToBaseType(pi.ParameterType); }),
                         ToBaseReturnType(GetMemberReturnType(invokerMi))));
 
-                w.WriteLine("foreign import stdcall \"wrapper\" {0} :: {1} -> (IO (FunPtr {1}))",
+                w.WriteLine("foreign import ccall \"wrapper\" {0} :: {1} -> (IO (FunPtr {1}))",
                     wrapperFunction, wrapperType);
                 w.WriteLine();
 
@@ -808,7 +808,7 @@
                 Util.JoinSuffix(" -> ", Enumerable.Select<ParameterInfo, string>(GetParameters(mi),
                     delegate(ParameterInfo pi) { return ToBaseType(pi.ParameterType); }),
                     ToBaseReturnType(GetMemberReturnType(mi))));
-            w.WriteLine("foreign import stdcall \"dynamic\" {0} :: FunPtr {1} -> {1}",
+            w.WriteLine("foreign import ccall \"dynamic\" {0} :: FunPtr {1} -> {1}",
                 makeFunction, stubType);
             w.WriteLine();
             w.WriteLine("{{-# NOINLINE {0} #-}}", stubFunction);
@@ -839,7 +839,7 @@
                 isGet ? "" : (ToBaseType(fi.FieldType) + " -> "),
                 isGet ? ToBaseReturnType(fi.FieldType) : "IO ()");
 
-            w.WriteLine("foreign import stdcall \"dynamic\" {0} :: FunPtr {1} -> {1}",
+            w.WriteLine("foreign import ccall \"dynamic\" {0} :: FunPtr {1} -> {1}",
                 makeFunction, stubType);
 
             w.WriteLine();
@@ -994,8 +994,8 @@
             if (t == typeof(bool)) return "Bool";
             if (t == typeof(Double)) return "Double";
             if (t == typeof(bool?)) return "(Maybe Bool)";
-            if (t.IsArray) 
-                return string.Format("(Obj (Arr {0}))", ToHaskellType(t.GetElementType()));
+//            if (t.IsArray) 
+//                return string.Format("(Obj (Arr {0}))", ToHaskellType(t.GetElementType()));
             return "(Obj " + TypeToLabel(t) + ")";
         }
 
@@ -1012,7 +1012,7 @@
         {
             if (t == typeof(void)) return "()";
             if (t == typeof(Int32)) return "Int32";
-            if (t == typeof(String)) return "CWString";
+            if (t == typeof(String)) return "SalsaString";
             if (t == typeof(Boolean)) return "Bool";
             if (t == typeof(Double)) return "Double";
             return "ObjectId";
@@ -1042,8 +1042,9 @@
                 // Salsa doesn't support generic types yet, but there's a special case for Nullable<bool>
                 (t.IsGenericType && t != typeof(Nullable<bool>)) ||
                 t.IsGenericParameter ||
-                // Salsa only supports arrays of non-generic types at present
-                (t.IsArray && IsUnsupportedType(t.GetElementType()));
+                t.IsArray; // Temporarily removed array support
+//                // Salsa only supports arrays of non-generic types at present
+//                (t.IsArray && IsUnsupportedType(t.GetElementType()));
         }
 
         /// <summary>
diff --git a/Generator/Set.cs b/Generator/Set.cs
--- a/Generator/Set.cs
+++ b/Generator/Set.cs
@@ -1,7 +1,6 @@
 //
 // Salsa Binding Generator
 //
-// Copyright: (c) 2007-2008 Andrew Appleyard
 // Licence:   BSD3 (see LICENSE)
 //
 
diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2007-2008, Andrew Appleyard.
+Copyright (c) 2007-2014, Andrew Appleyard / Tim Matthews.
 
 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions are met:
diff --git a/README b/README
--- a/README
+++ b/README
@@ -50,28 +50,29 @@
     Salsa makes extensive use of type families and thus requires at least
     version 6.8 of GHC.
 
-  * Microsoft .NET Framework 3.5
+  * Microsoft .NET Framework 3.5 / Mono
 
     Since the Generator requires .NET 3.5, any Salsa development also requires
     this version.  Executables produced with Salsa however will run with just
     .NET 2.0 (provided that only .NET 2.0 assemblies are used by the program).
 
-    Salsa will not work with versions 1.0/1.1 of the .NET Framework, or with
-    Mono.  (Supporting Mono shouldn't be too much work though.)
+    Salsa will not work with versions 1.0/1.1 of the .NET Framework
 
+    Building with Mono and running Salsa executables on Mono works. Salsa
+    will be built with Mono if not running on Windows or the flag 'use_mono'
+    is used when building with Cabal. 
+
 Building:
 
-  Build the Salsa library using Cabal (version 1.2) as usual:
+  First build the Salsa.dll driver assembly. (See the README file within the 'Driver
+  directory).
 
-    runhaskell Setup.hs configure
-    runhaskell Setup.hs build
-    runhaskell Setup.hs install
+  Then build an install the Salsa library using Cabal as usual:
 
-  The generator, driver, and each of the samples can be built with MSBuild;
-  just run 'msbuild' in the appropriate directory.  (The msbuild binary can be
-  found in '%WINDIR%\Microsoft.NET\Framework\v2.0.50272').
+    cabal install
 
-Author:
+Authors:
 
   Andrew Appleyard
+  Tim Matthews
 
diff --git a/Salsa.cabal b/Salsa.cabal
--- a/Salsa.cabal
+++ b/Salsa.cabal
@@ -1,10 +1,11 @@
-Cabal-Version:  >= 1.2
+Cabal-Version:  >= 1.10
 
 Name:           Salsa
-Version:        0.1.0.1
+Version:        0.2.0.0
 Build-Type:     Simple
 
-Category:       Foreign
+Category:       Foreign, .NET
+
 Synopsis:       A .NET Bridge for Haskell
 Description:
   Salsa is an experimental Haskell library and code generator that allows
@@ -13,23 +14,23 @@
   object model in the Haskell type system.
 
 Author:         Andrew Appleyard
-Maintainer:     andrew.appleyard@gmail.com
+Maintainer:     tim.matthews7@gmail.com
 Homepage:       http://haskell.org/haskellwiki/Salsa
 
 License:        BSD3
 License-File:   LICENSE
-Copyright:      (c) 2007-2008 Andrew Appleyard
+Copyright:      (c) 2007-2014 Andrew Appleyard, Tim Matthews
 
 Stability:      Experimental
-Tested-With:    GHC==6.8.3
+Tested-With:    GHC==7.6.3
 
+
 Extra-Source-Files:
   README
 
   Driver/README
-  Driver/Driver.proj
   Driver/Driver.cs
-  Driver/Embed.hs
+  Driver/Salsa.dll
 
   Generator/README
   Generator/Generator.csproj
@@ -52,19 +53,45 @@
 
   Docs/Thesis.pdf
 
+flag use_mono
+    description: use mono instead of .Net
+    default: False
+
+Source-Repository head
+    Type: git
+    Location: https://github.com/tim-m89/Salsa
+
 Library
-  Build-Depends: base, Win32, bytestring
+  Default-Language: Haskell2010
 
+  C-sources: Foreign/Salsa/salsa.c
+
   Exposed-modules:
-    Foreign.Salsa
-    Foreign.Salsa.Binding
+      Foreign.Salsa
+      Foreign.Salsa.Binding
 
   Other-Modules:
-    Foreign.Salsa.CLR, Foreign.Salsa.CLRHost, Foreign.Salsa.Common,
-    Foreign.Salsa.Core, Foreign.Salsa.Resolver, Foreign.Salsa.TypePrelude,
-    Foreign.Salsa.Driver
+      Foreign.Salsa.CLR,
+      Foreign.Salsa.Mono.CLRHost,
+      Foreign.Salsa.Win.CLRHost,
+      Foreign.Salsa.Common,
+      Foreign.Salsa.Core,
+      Foreign.Salsa.Resolver,
+      Foreign.Salsa.TypePrelude,
+      Foreign.Salsa.Driver
 
-  Extra-Libraries: oleaut32, ole32
+  if !os(windows) || flag(use_mono)
 
-  Extensions: ForeignFunctionInterface
+    Build-Depends: base==4.*, bytestring, file-embed
+
+    Cpp-options: -DMONO
+    cc-options: -DMONO
+
+    Extra-Libraries: glib-2.0, mono-2.0
+
+  else
+
+    Build-Depends: base==4.*, Win32, bytestring, file-embed
+
+    Extra-Libraries: oleaut32, ole32
 
