From f12d49624639eeae75b6afbc0d94893b31168cb1 Mon Sep 17 00:00:00 2001 From: Dmitry Korolev Date: Sun, 12 Oct 2014 12:22:41 +0400 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20CElemnet::GetPosition=20=D0=B8=20CVehicle::Creat?= =?UTF-8?q?e,=20=D0=B2=20=D0=BA=D0=B0=D1=87=D0=B5=D1=81=D1=82=D0=B2=D0=B5?= =?UTF-8?q?=20=D0=BF=D1=80=D0=B8=D0=BC=D0=B5=D1=80=D0=BE=D0=B2=20=D1=80?= =?UTF-8?q?=D0=B0=D0=B1=D0=BE=D1=82=D1=8B=20=D1=81=20Lua=20userdata=20?= =?UTF-8?q?=D0=B8=20=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=BE=D0=B1=D1=8A=D0=B5=D0=BA=D1=82=D0=BE=D0=B2=20=D0=B2=20Mon?= =?UTF-8?q?o=20(=D0=BD=D0=B0=20=D0=BF=D1=80=D0=B8=D0=BC=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=20Vector3)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Test/Resource.cs | 36 +- Test/Test.csproj | 1 + mta-mono.sln | 10 +- mta-mono/lib/eglib.lib | Bin 0 -> 630296 bytes mta-mono/mta-mono.vcxproj | 9 +- mta-mono/src/CMonoClass.cpp | 83 + mta-mono/src/CMonoClass.h | 37 + mta-mono/src/CMonoFunctions.cpp | 65 +- mta-mono/src/CMonoFunctions.h | 8 +- mta-mono/src/CMonoObject.cpp | 45 +- mta-mono/src/CMonoObject.h | 25 +- mta-mono/src/CResource.cpp | 39 +- mta-mono/src/CResource.h | 9 +- mta-mono/src/Common.h | 2 + mta-mono/src/lua/CLuaFunctionDefinitions.cpp | 32 +- mta-mono/src/lua/CLuaFunctionDefinitions.h | 4 +- mta-mono/vendor/eglib/eglib-config.h.in | 46 + mta-mono/vendor/eglib/eglib-config.hw | 76 + mta-mono/vendor/eglib/eglib-remap.h | 281 +++ mta-mono/vendor/eglib/glib.h | 1085 +++++++++ mta-mono/vendor/eglib/gmodule.h | 37 + mta-mono/vendor/eglib/sort.frag.h | 208 ++ mta-mono/vendor/eglib/unicode-data.h | 2152 ++++++++++++++++++ mta-mono/vendor/eglib/vasprintf.h | 11 + 24 files changed, 4251 insertions(+), 50 deletions(-) create mode 100644 mta-mono/lib/eglib.lib create mode 100644 mta-mono/src/CMonoClass.cpp create mode 100644 mta-mono/src/CMonoClass.h create mode 100644 mta-mono/vendor/eglib/eglib-config.h.in create mode 100644 mta-mono/vendor/eglib/eglib-config.hw create mode 100644 mta-mono/vendor/eglib/eglib-remap.h create mode 100644 mta-mono/vendor/eglib/glib.h create mode 100644 mta-mono/vendor/eglib/gmodule.h create mode 100644 mta-mono/vendor/eglib/sort.frag.h create mode 100644 mta-mono/vendor/eglib/unicode-data.h create mode 100644 mta-mono/vendor/eglib/vasprintf.h diff --git a/Test/Resource.cs b/Test/Resource.cs index c1293b5..4d2f491 100644 --- a/Test/Resource.cs +++ b/Test/Resource.cs @@ -1,18 +1,34 @@ using System; +using System.Collections.Generic; using MultiTheftAuto; using MultiTheftAuto.Native; namespace Test { - public class Resource - { - public Resource() - { - Debug.Error( "{0}", new Color( 255, 128, 0 ).ToARGB().ToString( "X" ) ); - - Vehicle vehicle = Vehicle.Create( 562, new Vector3( 192.0f, 168.0f, 0.0f ), new Vector3( 0.0f, 0.0f, 0.0f ) ); + public class Resource + { + public Resource() + { + var vehicles = new List( 10 ); - //Debug.Log( "{0}", Element.GetPosition( vehicle ) ); - } - } + for( int i = 0; i < vehicles.Capacity; i++ ) + { + UInt32 vehicle = Vehicle.Create( 562, new Vector3( 192.0f, 168.0f, 10.0f ) * i, new Vector3( 0.0f, 0.0f, 0.0f ) ); + + if( vehicle != 0 ) + { + vehicles.Add( vehicle ); + } + else + { + Debug.Error( "Failed to create vehicle" ); + } + } + + foreach( UInt32 vehicle in vehicles ) + { + Debug.Log( "{0} {1}", vehicle, Element.GetPosition( vehicle ) ); + } + } + } } diff --git a/Test/Test.csproj b/Test/Test.csproj index be6aee5..4ba67ba 100644 --- a/Test/Test.csproj +++ b/Test/Test.csproj @@ -32,6 +32,7 @@ prompt 4 false + true diff --git a/mta-mono.sln b/mta-mono.sln index 0589f6f..33d3d0d 100644 --- a/mta-mono.sln +++ b/mta-mono.sln @@ -5,6 +5,9 @@ MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Dependencies", "Dependencies", "{AC4FC54A-60A7-4EB0-A40D-14768DD633F1}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mta-mono", "mta-mono\mta-mono.vcxproj", "{5E5C7A85-A869-4D86-88FF-05DCEFC07AC3}" + ProjectSection(ProjectDependencies) = postProject + {E2629417-52DF-854E-B510-C15A87AB4BE3} = {E2629417-52DF-854E-B510-C15A87AB4BE3} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lua51", "mta-mono\vendor\lua51\lua51.vcxproj", "{E2629417-52DF-854E-B510-C15A87AB4BE3}" EndProject @@ -63,6 +66,7 @@ Global {2E5D4B1E-405E-453F-BEED-25735E25ACD8}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {2E5D4B1E-405E-453F-BEED-25735E25ACD8}.Release|Mixed Platforms.Build.0 = Release|Any CPU {2E5D4B1E-405E-453F-BEED-25735E25ACD8}.Release|Win32.ActiveCfg = Release|Any CPU + {2E5D4B1E-405E-453F-BEED-25735E25ACD8}.Release|Win32.Build.0 = Release|Any CPU {2E5D4B1E-405E-453F-BEED-25735E25ACD8}.Release|x64.ActiveCfg = Release|Any CPU {CBD7F8D5-39F2-4AA5-9FFF-2D3185533DDD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CBD7F8D5-39F2-4AA5-9FFF-2D3185533DDD}.Debug|Any CPU.Build.0 = Debug|Any CPU @@ -75,6 +79,7 @@ Global {CBD7F8D5-39F2-4AA5-9FFF-2D3185533DDD}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {CBD7F8D5-39F2-4AA5-9FFF-2D3185533DDD}.Release|Mixed Platforms.Build.0 = Release|Any CPU {CBD7F8D5-39F2-4AA5-9FFF-2D3185533DDD}.Release|Win32.ActiveCfg = Release|Any CPU + {CBD7F8D5-39F2-4AA5-9FFF-2D3185533DDD}.Release|Win32.Build.0 = Release|Any CPU {CBD7F8D5-39F2-4AA5-9FFF-2D3185533DDD}.Release|x64.ActiveCfg = Release|Any CPU {63CBE79D-C717-4797-860B-174FABF780A0}.Debug|Any CPU.ActiveCfg = Debug|Win32 {63CBE79D-C717-4797-860B-174FABF780A0}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 @@ -99,6 +104,7 @@ Global {DC461F17-D2EC-4B7C-8CDB-AE81BEDEBD0F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {DC461F17-D2EC-4B7C-8CDB-AE81BEDEBD0F}.Release|Mixed Platforms.Build.0 = Release|Any CPU {DC461F17-D2EC-4B7C-8CDB-AE81BEDEBD0F}.Release|Win32.ActiveCfg = Release|Any CPU + {DC461F17-D2EC-4B7C-8CDB-AE81BEDEBD0F}.Release|Win32.Build.0 = Release|Any CPU {DC461F17-D2EC-4B7C-8CDB-AE81BEDEBD0F}.Release|x64.ActiveCfg = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution @@ -108,9 +114,9 @@ Global {E2629417-52DF-854E-B510-C15A87AB4BE3} = {AC4FC54A-60A7-4EB0-A40D-14768DD633F1} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution - AMDCaProjectFile = C:\Users\Owner\Development\monogit\mono\msvc\CodeAnalyst\mono.caw - AMDCaPersistentStartup = mono AMDCaPersistentConfig = Debug|Win32 + AMDCaPersistentStartup = mono + AMDCaProjectFile = C:\Users\Owner\Development\monogit\mono\msvc\CodeAnalyst\mono.caw EndGlobalSection GlobalSection(DPCodeReviewSolutionGUID) = preSolution DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} diff --git a/mta-mono/lib/eglib.lib b/mta-mono/lib/eglib.lib new file mode 100644 index 0000000000000000000000000000000000000000..35fe5c81d32454864db6bdf36a36213c01cfcb7a GIT binary patch literal 630296 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

eD?oW4NKNm28STo;%gKRZ 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 z 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�jFWSDY?X}7YODq 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 DAerwt literal 0 HcmV?d00001 diff --git a/mta-mono/mta-mono.vcxproj b/mta-mono/mta-mono.vcxproj index 205a273..5759963 100644 --- a/mta-mono/mta-mono.vcxproj +++ b/mta-mono/mta-mono.vcxproj @@ -11,6 +11,7 @@ + @@ -23,6 +24,7 @@ + @@ -38,6 +40,7 @@ + @@ -92,7 +95,7 @@ Disabled - .\src\include;.\vendor;.\vendor\lua51\src;.\vendor\mono;.\vendor\mysql + .\src\include;.\vendor;.\vendor\lua51\src;.\vendor\mono;.\vendor\mysql;.\vendor\eglib WIN32;_WINDOWS;_DEBUG;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true EnableFastChecks @@ -109,7 +112,7 @@ $(IntDir);%(AdditionalIncludeDirectories) - lib/lua51.lib;lib/mono.lib;%(AdditionalDependencies) + %(AdditionalDependencies) $(OutDir)$(TargetName)$(TargetExt) MSVCRT;%(IgnoreSpecificDefaultLibraries) @@ -129,7 +132,7 @@ false - .\src\include;.\vendor;.\vendor\lua51\src;.\vendor\mono;.\vendor\mysql + .\src\include;.\vendor;.\vendor\lua51\src;.\vendor\mono;.\vendor\mysql;.\vendor\eglib WIN32;_WINDOWS;NDEBUG;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreadedDebug true diff --git a/mta-mono/src/CMonoClass.cpp b/mta-mono/src/CMonoClass.cpp new file mode 100644 index 0000000..df2f3e7 --- /dev/null +++ b/mta-mono/src/CMonoClass.cpp @@ -0,0 +1,83 @@ +#include "CMonoClass.h" + +CMonoClass::CMonoClass( MonoClass* pMonoClass ) +{ + this->m_pMonoClass = pMonoClass; +} + + +CMonoClass::~CMonoClass() +{ +} + +CMonoObject* CMonoClass::New( MonoDomain* pMonoDomain ) +{ + MonoObject* pObject = mono_object_new( pMonoDomain, this->m_pMonoClass ); + + if( !pObject ) + { + g_pModuleManager->ErrorPrintf( "%s:%d: Failed to create mono object for %s::%s\n", this->GetNameSpace(), this->GetName(), __FILE__, __LINE__ ); + + return NULL; + } + + mono_runtime_object_init( pObject ); + + return new CMonoObject( pObject ); +} + +CMonoObject* CMonoClass::New( MonoDomain* pMonoDomain, void** args, int argc ) +{ + MonoObject* pObject = mono_object_new( pMonoDomain, this->m_pMonoClass ); + + if( !pObject ) + { + g_pModuleManager->ErrorPrintf( "%s:%d: Failed to create mono object for %s::%s\n", this->GetNameSpace(), this->GetName(), __FILE__, __LINE__ ); + + return NULL; + } + + MonoMethod* pMonoMethod = mono_class_get_method_from_name( this->m_pMonoClass, ".ctor", argc ); + + if( !pMonoMethod ) + { + g_pModuleManager->ErrorPrintf( "%s:%d: Could not lookup constructor for class %s::%s\n", this->GetNameSpace(), this->GetName(), __FILE__, __LINE__ ); + + return NULL; + } + + mono_runtime_invoke( pMonoMethod, pObject, args, NULL ); + + return new CMonoObject( pObject ); +} + +const char* CMonoClass::GetName() +{ + return mono_class_get_name( this->m_pMonoClass ); +} + +const char* CMonoClass::GetNameSpace() +{ + return mono_class_get_namespace( this->m_pMonoClass ); +} + +MonoMethod* CMonoClass::GetMethod( const char* szMethodName, int iParamCount ) +{ + return mono_class_get_method_from_name( this->m_pMonoClass, szMethodName, iParamCount ); +} + +MonoMethod* CMonoClass::GetMethod( const char* szMethodName ) +{ + MonoMethodDesc* pMonoMethodDesc = mono_method_desc_new( szMethodName, false ); + + if( pMonoMethodDesc ) + { + MonoMethod* pMethod = mono_method_desc_search_in_class( pMonoMethodDesc, this->m_pMonoClass ); + + mono_method_desc_free( pMonoMethodDesc ); + + return pMethod; + } + + return NULL; +} \ No newline at end of file diff --git a/mta-mono/src/CMonoClass.h b/mta-mono/src/CMonoClass.h new file mode 100644 index 0000000..5c269c0 --- /dev/null +++ b/mta-mono/src/CMonoClass.h @@ -0,0 +1,37 @@ +class CMonoClass; + +#ifndef _C_MONO_CLASS +#define _C_MONO_CLASS + +#include "Common.h" +#include "CMonoObject.h" + +extern ILuaModuleManager10 *g_pModuleManager; + +class CMonoClass +{ +private: + MonoClass* m_pMonoClass; + +public: + CMonoClass( MonoClass* pMonoClass ); + ~CMonoClass(); + + CMonoObject* New( MonoDomain* pMonoDomain ); + CMonoObject* New( MonoDomain* pMonoDomain, void** args, int argc ); + + const char* GetName(); + const char* GetNameSpace(); + + MonoMethod* GetMethod( const char* szMethodName, int iParamCount ); + MonoMethod* GetMethod( const char* szMethodName ); + + MonoClass* GetMonoClass() { return this->m_pMonoClass; }; + + MonoClass* GetClass() + { + return this->m_pMonoClass; + } +}; + +#endif \ No newline at end of file diff --git a/mta-mono/src/CMonoFunctions.cpp b/mta-mono/src/CMonoFunctions.cpp index beb6792..c372c22 100644 --- a/mta-mono/src/CMonoFunctions.cpp +++ b/mta-mono/src/CMonoFunctions.cpp @@ -23,12 +23,13 @@ extern CResourceManager *g_pResourceManager; void CMonoFunctions::AddInternals( void ) { - mono_add_internal_call( "MultiTheftAuto.Debug::Log", CMonoFunctions::Debug::Log ); - mono_add_internal_call( "MultiTheftAuto.Debug::Info", CMonoFunctions::Debug::Info ); - mono_add_internal_call( "MultiTheftAuto.Debug::Error", CMonoFunctions::Debug::Error ); - mono_add_internal_call( "MultiTheftAuto.Native.Config::Get", CMonoFunctions::Config::Get ); - mono_add_internal_call( "MultiTheftAuto.Native.Config::Set", CMonoFunctions::Config::Set ); - mono_add_internal_call( "MultiTheftAuto.Native.Vehicle::Create", CMonoFunctions::Vehicle::Create ); + mono_add_internal_call( "MultiTheftAuto.Debug::Log", CMonoFunctions::Debug::Log ); + mono_add_internal_call( "MultiTheftAuto.Debug::Info", CMonoFunctions::Debug::Info ); + mono_add_internal_call( "MultiTheftAuto.Debug::Error", CMonoFunctions::Debug::Error ); + mono_add_internal_call( "MultiTheftAuto.Native.Config::Get", CMonoFunctions::Config::Get ); + mono_add_internal_call( "MultiTheftAuto.Native.Config::Set", CMonoFunctions::Config::Set ); + mono_add_internal_call( "MultiTheftAuto.Native.Element::GetPosition", CMonoFunctions::Element::GetPosition ); + mono_add_internal_call( "MultiTheftAuto.Native.Vehicle::Create", CMonoFunctions::Vehicle::Create ); } void CMonoFunctions::Debug::Log( MonoString *string ) @@ -83,7 +84,45 @@ bool CMonoFunctions::Config::Set( MonoString *msKey, MonoString *msValue ) return false; } -MonoObject* CMonoFunctions::Vehicle::Create( int model, MonoObject* position, MonoObject* rotation, string &numberplate, bool direction, int variant1, int variant2 ) +MonoObject* CMonoFunctions::Element::GetPosition( unsigned int element ) +{ + if( RESOURCE ) + { + float + fX = 0.0f, + fY = 0.0f, + fZ = 0.0f; + + if( CLuaFunctionDefinitions::GetPosition( RESOURCE->GetLua(), (void*)element, fX, fY, fZ ) ) + { + CMonoClass* pClass = RESOURCE->GetClassFromName( "MultiTheftAuto", "Vector3" ); + + if( pClass ) + { + void *args[] = { &fX, &fY, &fZ }; + + CMonoObject* pObject = pClass->New( mono_domain_get(), args, 3 ); + + if( pObject ) + { + return pObject->GetObject(); + } + else + { + g_pModuleManager->ErrorPrintf( "%s:%d: failed to create instance of 'MultiTheftAuto::Vector3'\n", __FILE__, __LINE__ ); + } + } + else + { + g_pModuleManager->ErrorPrintf( "%s:%d: class 'MultiTheftAuto::Vector3' not found\n", __FILE__, __LINE__ ); + } + } + } + + return NULL; +} + +unsigned int CMonoFunctions::Vehicle::Create( int model, MonoObject* position, MonoObject* rotation, MonoString* numberplate, bool direction, int variant1, int variant2 ) { if( RESOURCE ) { @@ -99,11 +138,19 @@ MonoObject* CMonoFunctions::Vehicle::Create( int model, MonoObject* position, Mo float fRY = pRotation.GetPropertyValue( "Y" ); float fRZ = pRotation.GetPropertyValue( "Z" ); - void* pVehicle = CLuaFunctionDefinitions::CreateVehicle( RESOURCE->GetLua(), model, fX, fY, fZ, fRX, fRY, fRZ, numberplate, direction, variant1, variant2 ); + string sNumberplate = ""; + + if( numberplate && mono_string_length( numberplate ) > 0 ) + { + sNumberplate = mono_string_to_utf8( numberplate ); + } + + void* pVehicle = CLuaFunctionDefinitions::CreateVehicle( RESOURCE->GetLua(), model, fX, fY, fZ, fRX, fRY, fRZ, sNumberplate, direction, variant1, variant2 ); if( pVehicle ) { - + return (unsigned int)pVehicle; + //return 0x1337; } } diff --git a/mta-mono/src/CMonoFunctions.h b/mta-mono/src/CMonoFunctions.h index ea8de5d..a40d07a 100644 --- a/mta-mono/src/CMonoFunctions.h +++ b/mta-mono/src/CMonoFunctions.h @@ -38,10 +38,16 @@ public: static bool Set ( MonoString *msKey, MonoString *msValue ); }; + class Element + { + public: + static MonoObject* GetPosition ( unsigned int element ); + }; + class Vehicle { public: - static MonoObject* Create ( int model, MonoObject* position, MonoObject* rotation, string &numberplate, bool direction = false, int variant1 = 255, int variant2 = 255 ); + static unsigned int Create ( int model, MonoObject* position, MonoObject* rotation, MonoString* numberplate, bool direction = false, int variant1 = 255, int variant2 = 255 ); }; }; diff --git a/mta-mono/src/CMonoObject.cpp b/mta-mono/src/CMonoObject.cpp index 853727b..38ba559 100644 --- a/mta-mono/src/CMonoObject.cpp +++ b/mta-mono/src/CMonoObject.cpp @@ -1,6 +1,5 @@ #include "CMonoObject.h" - CMonoObject::CMonoObject( MonoObject* pMonoObject ) { this->m_pMonoObject = pMonoObject; @@ -11,9 +10,16 @@ CMonoObject::~CMonoObject() { } -MonoClass* CMonoObject::GetClass() +CMonoClass* CMonoObject::GetClass() { - return mono_object_get_class( this->m_pMonoObject ); + MonoClass* pMonoClass = mono_object_get_class( this->m_pMonoObject ); + + if( pMonoClass ) + { + return new CMonoClass( pMonoClass ); + } + + return NULL; } MonoObject* CMonoObject::GetPropertyValue( const char* szPropertyName ) @@ -28,4 +34,37 @@ MonoObject* CMonoObject::GetPropertyValue( const char* szPropertyName ) } return mono_property_get_value( pMonoProperty, this->m_pMonoObject, NULL, NULL ); +} + +bool CMonoObject::SetPropertyValue( const char* szPropertyName, int iValue ) +{ + return this->SetPropertyValue( szPropertyName, (void*)&iValue ); +} + +bool CMonoObject::SetPropertyValue( const char* szPropertyName, float fValue ) +{ + return this->SetPropertyValue( szPropertyName, (void*)&fValue ); +} + +bool CMonoObject::SetPropertyValue( const char* szPropertyName, char* szValue ) +{ + return this->SetPropertyValue( szPropertyName, mono_string_new( mono_domain_get(), szValue ) ); +} + +bool CMonoObject::SetPropertyValue( const char* szPropertyName, gpointer gValue ) +{ + MonoClass* pMonoClass = mono_object_get_class( this->m_pMonoObject ); + + MonoProperty* pMonoProperty = mono_class_get_property_from_name( pMonoClass, szPropertyName ); + + if( !pMonoProperty ) + { + return false; + } + + gpointer args[ 1 ] = { gValue }; + + mono_property_set_value( pMonoProperty, this->m_pMonoObject, args, NULL ); + + return true; } \ No newline at end of file diff --git a/mta-mono/src/CMonoObject.h b/mta-mono/src/CMonoObject.h index 02f9af0..92b5a01 100644 --- a/mta-mono/src/CMonoObject.h +++ b/mta-mono/src/CMonoObject.h @@ -4,6 +4,7 @@ class CMonoObject; #define _C_MONO_OBJECT #include "Common.h" +#include "CMonoClass.h" class CMonoObject { @@ -14,14 +15,34 @@ public: CMonoObject( MonoObject* pMonoObject ); ~CMonoObject(); - MonoClass* GetClass(); + CMonoClass* GetClass(); + + bool SetPropertyValue( const char* szPropertyName, int iValue ); + bool SetPropertyValue( const char* szPropertyName, float fValue ); + bool SetPropertyValue( const char* szPropertyName, char* szValue ); + bool SetPropertyValue( const char* szPropertyName, gpointer gValue ); MonoObject* GetPropertyValue( const char* szPropertyName ); - + template T GetPropertyValue( char* szPropertyName ) { return *( reinterpret_cast( mono_object_unbox( this->GetPropertyValue( szPropertyName ) ) ) ); } + + void* GetValue() + { + return mono_object_unbox( this->m_pMonoObject ); + } + + template T GetValue() + { + return *( reinterpret_cast( mono_object_unbox( this->m_pMonoObject ) ) ); + } + + MonoObject *GetObject() + { + return this->m_pMonoObject; + } }; #endif \ No newline at end of file diff --git a/mta-mono/src/CResource.cpp b/mta-mono/src/CResource.cpp index 47f6a10..fe8bf00 100644 --- a/mta-mono/src/CResource.cpp +++ b/mta-mono/src/CResource.cpp @@ -24,9 +24,11 @@ CResource::CResource( lua_State *pLuaVM, string sName ) this->m_sName = sName; this->m_pMonoAssembly = NULL; + this->m_pMonoAssemblyLib = NULL; this->m_pMonoGCHandle = NULL; this->m_pMonoDomain = NULL; this->m_pMonoImage = NULL; + this->m_pMonoImageLib = NULL; this->m_pMonoClass = NULL; } @@ -49,7 +51,8 @@ bool CResource::Init( void ) { if( this->m_pLuaVM ) { - string sPath ( "mods/deathmatch/mono/resources/" + this->m_sName + ".dll" ); + string sDirectory ( "mods/deathmatch/mono/resources/" ); + string sPath ( sDirectory + this->m_sName + ".dll" ); string sNamespace ( this->m_sName ); string sClass ( "Resource" ); @@ -64,6 +67,13 @@ bool CResource::Init( void ) mono_domain_set( this->m_pMonoDomain, false ); + this->m_pMonoAssemblyLib = mono_domain_assembly_open( this->m_pMonoDomain, ( sDirectory + "MultiTheftAuto.dll" ).c_str() ); + + if( this->m_pMonoAssemblyLib ) + { + this->m_pMonoImageLib = mono_assembly_get_image( this->m_pMonoAssemblyLib ); + } + this->m_pMonoAssembly = mono_domain_assembly_open( this->m_pMonoDomain, sPath.c_str() ); if( !this->m_pMonoAssembly ) @@ -88,16 +98,6 @@ bool CResource::Init( void ) return false; } -string CResource::GetName( void ) -{ - return this->m_sName; -} - -lua_State *CResource::GetLua( void ) -{ - return this->m_pLuaVM; -} - void CResource::OnStopping( void ) { } @@ -116,4 +116,21 @@ bool CResource::RegisterFunction( const char *szFunctionName, lua_CFunction Func } return true; +} + +CMonoClass* CResource::GetClassFromName( const char* szNamespace, const char* szName ) +{ + MonoClass* pMonoClass = mono_class_from_name( this->m_pMonoImage, szNamespace, szName ); + + if( !pMonoClass ) + { + pMonoClass = mono_class_from_name( this->m_pMonoImageLib, szNamespace, szName ); + } + + if( pMonoClass ) + { + return new CMonoClass( pMonoClass ); + } + + return NULL; } \ No newline at end of file diff --git a/mta-mono/src/CResource.h b/mta-mono/src/CResource.h index 36fb770..5806bc5 100644 --- a/mta-mono/src/CResource.h +++ b/mta-mono/src/CResource.h @@ -16,6 +16,7 @@ class CResource; #define __CRESOURCE_H #include "Common.h" +#include "CMonoClass.h" class CResource { @@ -23,7 +24,9 @@ private: string m_sName; MonoAssembly *m_pMonoAssembly; + MonoAssembly *m_pMonoAssemblyLib; MonoImage *m_pMonoImage; + MonoImage *m_pMonoImageLib; MonoClass *m_pMonoClass; uint32_t m_pMonoGCHandle; @@ -39,10 +42,10 @@ public: void DoPulse ( void ); bool RegisterFunction ( const char *szFunctionName, lua_CFunction Func ); - string GetName ( void ); - lua_State *GetLua ( void ); + CMonoClass* GetClassFromName( const char* szNamespace, const char* szName ); - const void Test( void ); + string GetName ( void ) { return this->m_sName; } + lua_State *GetLua ( void ) { return this->m_pLuaVM; } }; #endif \ No newline at end of file diff --git a/mta-mono/src/Common.h b/mta-mono/src/Common.h index c7df924..6245599 100644 --- a/mta-mono/src/Common.h +++ b/mta-mono/src/Common.h @@ -35,6 +35,8 @@ extern "C" #include #include +#include + #include #include #include diff --git a/mta-mono/src/lua/CLuaFunctionDefinitions.cpp b/mta-mono/src/lua/CLuaFunctionDefinitions.cpp index f195155..e064a11 100644 --- a/mta-mono/src/lua/CLuaFunctionDefinitions.cpp +++ b/mta-mono/src/lua/CLuaFunctionDefinitions.cpp @@ -162,7 +162,25 @@ bool CLuaFunctionDefinitions::SetRuleValue( lua_State *pLuaVM, const string &sKe return false; } -void* CLuaFunctionDefinitions::CreateVehicle( lua_State* pLuaVM, int model, float fX, float fY, float fZ, float fRX, float fRY, float fRZ, string &numberplate, bool direction, int variant1, int variant2 ) +bool CLuaFunctionDefinitions::GetPosition( lua_State* pLuaVM, void* pUserData, float &fX, float &fY, float &fZ ) +{ + CLuaArguments pLuaArguments; + + pLuaArguments.PushUserData( pUserData ); + + if( pLuaArguments.Call( pLuaVM, "getElementPosition", 3 ) ) + { + fX = static_cast< float >( ( new CLuaArgument( pLuaVM, -3 ) )->GetNumber() ); + fY = static_cast< float >( ( new CLuaArgument( pLuaVM, -2 ) )->GetNumber() ); + fZ = static_cast< float >( ( new CLuaArgument( pLuaVM, -1 ) )->GetNumber() ); + + return true; + } + + return false; +} + +void* CLuaFunctionDefinitions::CreateVehicle( lua_State* pLuaVM, int model, float fX, float fY, float fZ, float fRX, float fRY, float fRZ, string numberplate, bool direction, int variant1, int variant2 ) { CLuaArguments pLuaArguments; @@ -173,10 +191,14 @@ void* CLuaFunctionDefinitions::CreateVehicle( lua_State* pLuaVM, int model, floa pLuaArguments.PushNumber( fRX ); pLuaArguments.PushNumber( fRY ); pLuaArguments.PushNumber( fRZ ); - pLuaArguments.PushString( numberplate.c_str() ); - pLuaArguments.PushBoolean( direction ); - pLuaArguments.PushNumber( variant1 ); - pLuaArguments.PushNumber( variant2 ); + + if( numberplate.length() > 0 ) + { + pLuaArguments.PushString( numberplate.c_str() ); + pLuaArguments.PushBoolean( direction ); + pLuaArguments.PushNumber( variant1 ); + pLuaArguments.PushNumber( variant2 ); + } if( pLuaArguments.Call( pLuaVM, "createVehicle", 1 ) ) { diff --git a/mta-mono/src/lua/CLuaFunctionDefinitions.h b/mta-mono/src/lua/CLuaFunctionDefinitions.h index a31a906..47e74d7 100644 --- a/mta-mono/src/lua/CLuaFunctionDefinitions.h +++ b/mta-mono/src/lua/CLuaFunctionDefinitions.h @@ -31,7 +31,9 @@ public: static bool SetMapName ( lua_State* pLuaVM, const string &sName ); static bool SetRuleValue ( lua_State* pLuaVM, const string &sKey, const string &sValue ); - static void* CreateVehicle ( lua_State* luaVM, int model, float fX, float fY, float fZ, float fRX, float fRY, float fRZ, string &numberplate, bool direction = false, int variant1 = 255, int variant2 = 255 ); + static bool GetPosition ( lua_State* pLuaVM, void* pUserData, float &fX, float &fY, float &fZ ); + + static void* CreateVehicle ( lua_State* luaVM, int model, float fX, float fY, float fZ, float fRX, float fRY, float fRZ, string numberplate, bool direction = false, int variant1 = 255, int variant2 = 255 ); /* static int CallRemote ( lua_State* luaVM ); static int FetchRemote ( lua_State* luaVM ); diff --git a/mta-mono/vendor/eglib/eglib-config.h.in b/mta-mono/vendor/eglib/eglib-config.h.in new file mode 100644 index 0000000..ba0f93f --- /dev/null +++ b/mta-mono/vendor/eglib/eglib-config.h.in @@ -0,0 +1,46 @@ +#ifndef __EGLIB_CONFIG_H +#define __EGLIB_CONFIG_H + +/* + * System-dependent settings + */ +#define G_GNUC_PRETTY_FUNCTION @GNUC_PRETTY@ +#define G_GNUC_UNUSED @GNUC_UNUSED@ +#define G_BYTE_ORDER @ORDER@ +#define G_GNUC_NORETURN @GNUC_NORETURN@ +#define G_SEARCHPATH_SEPARATOR_S "@SEARCHSEP@" +#define G_SEARCHPATH_SEPARATOR '@SEARCHSEP@' +#define G_DIR_SEPARATOR '@PATHSEP@' +#define G_DIR_SEPARATOR_S "@PATHSEP@" +#define G_BREAKPOINT() @BREAKPOINT@ +#define G_OS_@OS@ +#define GPOINTER_TO_INT(ptr) @GPOINTER_TO_INT@ +#define GPOINTER_TO_UINT(ptr) @GPOINTER_TO_UINT@ +#define GINT_TO_POINTER(v) @GINT_TO_POINTER@ +#define GUINT_TO_POINTER(v) @GUINT_TO_POINTER@ + +#if @HAVE_ALLOCA_H@ == 1 +#define G_HAVE_ALLOCA_H +#endif + +typedef unsigned @GSIZE@ gsize; +typedef signed @GSIZE@ gssize; + +#define G_GSIZE_FORMAT @GSIZE_FORMAT@ +#define G_GUINT64_FORMAT @G_GUINT64_FORMAT@ +#define G_GINT64_FORMAT @G_GINT64_FORMAT@ +#define G_GUINT32_FORMAT @G_GUINT32_FORMAT@ +#define G_GINT32_FORMAT @G_GINT32_FORMAT@ + +#if @G_HAVE_ISO_VARARGS@ == 1 +#define G_HAVE_ISO_VARARGS +#endif + +#if defined (__native_client__) +#undef G_BREAKPOINT +#define G_BREAKPOINT() +#endif + +typedef @PIDTYPE@ GPid; + +#endif diff --git a/mta-mono/vendor/eglib/eglib-config.hw b/mta-mono/vendor/eglib/eglib-config.hw new file mode 100644 index 0000000..192d393 --- /dev/null +++ b/mta-mono/vendor/eglib/eglib-config.hw @@ -0,0 +1,76 @@ +#ifndef __EGLIB_CONFIG_H +#define __EGLIB_CONFIG_H + +/* + * System-dependent settings + */ +#define G_OS_WIN32 1 + +#ifdef _MSC_VER + +#include + +#define G_GNUC_PRETTY_FUNCTION __FUNCTION__ +#define G_GNUC_UNUSED +#define G_BYTE_ORDER 1234 +#define G_GNUC_NORETURN +#define G_BREAKPOINT() __debugbreak() +#define MAXPATHLEN 242 + +typedef uintptr_t gsize; +typedef intptr_t gssize; +typedef int pid_t; + +#define G_DIR_SEPARATOR '\\' +#define G_DIR_SEPARATOR_S "\\" +#define G_SEARCHPATH_SEPARATOR_S ";" +#define G_SEARCHPATH_SEPARATOR ';' +#define G_GSIZE_FORMAT "d" +#define G_GUINT64_FORMAT "d" +#define G_GINT64_FORMAT "d" +#define GPOINTER_TO_INT(ptr) ((gint)(intptr_t) (ptr)) +#define GPOINTER_TO_UINT(ptr) ((guint)(intptr_t) (ptr)) +#define GINT_TO_POINTER(v) ((gpointer)(intptr_t) (v)) +#define GUINT_TO_POINTER(v) ((gpointer)(intptr_t) (v)) + +/* VS 2010 and later have stdint.h */ +#if defined(_MSC_VER) && _MSC_VER < 1600 +#define INT32_MAX 2147483647 +#define INT32_MIN (~ INT32_MAX) +#define INT64_MAX 9223372036854775807i64 +#define INT64_MIN (~INT64_MAX) +#define UINT32_MAX 0xffffffffU +#define UINT64_MAX 0xffffffffffffffffULL +#endif + +#define STDOUT_FILENO (int)(intptr_t)stdout +#define STDERR_FILENO (int)(intptr_t)stderr + + +/* FIXME: what should this be ?*/ +#define X_OK 4 /* This is really read */ +#define WNOHANG 1 +#define F_SETFD 1 +#define FD_CLOEXEC 1 + +#undef inline +#define inline __inline + +#define strtok_r strtok_s + +#undef G_HAVE_UNISTD_H +#undef G_HAVE_SYS_TIME_H +#undef G_HAVE_SYS_WAIT_H +#undef G_HAVE_PWD_H +#undef G_HAVE_STRNDUP +#define G_HAVE_GETOPT_H 1 + +/* disable the following warnings + * C4100: The formal parameter is not referenced in the body of the function. The unreferenced parameter is ignored. + * C4127: conditional expression is constant +*/ +#pragma warning(disable:4100 4127) +#endif + +typedef void * GPid; +#endif diff --git a/mta-mono/vendor/eglib/eglib-remap.h b/mta-mono/vendor/eglib/eglib-remap.h new file mode 100644 index 0000000..5c918d2 --- /dev/null +++ b/mta-mono/vendor/eglib/eglib-remap.h @@ -0,0 +1,281 @@ +#define g_array_append monoeg_g_array_append +#define g_array_append_vals monoeg_g_array_append_vals +#define g_array_free monoeg_g_array_free +#define g_array_insert_vals monoeg_g_array_insert_vals +#define g_array_new monoeg_g_array_new +#define g_array_remove_index monoeg_g_array_remove_index +#define g_array_remove_index_fast monoeg_g_array_remove_index_fast +#define g_array_set_size monoeg_g_array_set_size +#define g_array_sized_new monoeg_g_array_sized_new +#define g_ascii_strdown monoeg_g_ascii_strdown +#define g_ascii_strncasecmp monoeg_g_ascii_strncasecmp +#define g_ascii_tolower monoeg_g_ascii_tolower +#define g_ascii_xdigit_value monoeg_g_ascii_xdigit_value +#define g_build_path monoeg_g_build_path +#define g_byte_array_append monoeg_g_byte_array_append +#define g_byte_array_free monoeg_g_byte_array_free +#define g_byte_array_new monoeg_g_byte_array_new +#define g_clear_error monoeg_g_clear_error +#define g_convert monoeg_g_convert +#define g_convert_error_quark monoeg_g_convert_error_quark +#define g_dir_close monoeg_g_dir_close +#define g_dir_open monoeg_g_dir_open +#define g_dir_read_name monoeg_g_dir_read_name +#define g_dir_rewind monoeg_g_dir_rewind +#define g_mkdir_with_parents monoeg_g_mkdir_with_parents +#define g_direct_equal monoeg_g_direct_equal +#define g_direct_hash monoeg_g_direct_hash +#define g_error_free monoeg_g_error_free +#define g_error_new monoeg_g_error_new +#define g_error_vnew monoeg_g_error_vnew +#define g_file_error_quark monoeg_g_file_error_quark +#define g_file_error_from_errno monoeg_g_file_error_from_errno +#define g_file_get_contents monoeg_g_file_get_contents +#define g_file_set_contents monoeg_g_file_set_contents +#define g_file_open_tmp monoeg_g_file_open_tmp +#define g_file_test monoeg_g_file_test +#define g_filename_from_uri monoeg_g_filename_from_uri +#define g_filename_from_utf8 monoeg_g_filename_from_utf8 +#define g_filename_to_uri monoeg_g_filename_to_uri +#define g_find_program_in_path monoeg_g_find_program_in_path +#define g_fprintf monoeg_g_fprintf +#define g_free monoeg_g_free +#define g_get_charset monoeg_g_get_charset +#define g_get_current_dir monoeg_g_get_current_dir +#define g_get_current_time monoeg_g_get_current_time +#define g_get_home_dir monoeg_g_get_home_dir +#define g_get_prgname monoeg_g_get_prgname +#define g_get_tmp_dir monoeg_g_get_tmp_dir +#define g_get_user_name monoeg_g_get_user_name +#define g_getenv monoeg_g_getenv +#define g_hash_table_destroy monoeg_g_hash_table_destroy +#define g_hash_table_find monoeg_g_hash_table_find +#define g_hash_table_foreach monoeg_g_hash_table_foreach +#define g_hash_table_foreach_remove monoeg_g_hash_table_foreach_remove +#define g_hash_table_foreach_steal monoeg_g_hash_table_foreach_steal +#define g_hash_table_get_keys monoeg_g_hash_table_get_keys +#define g_hash_table_get_values monoeg_g_hash_table_get_values +#define g_hash_table_insert_replace monoeg_g_hash_table_insert_replace +#define g_hash_table_lookup monoeg_g_hash_table_lookup +#define g_hash_table_lookup_extended monoeg_g_hash_table_lookup_extended +#define g_hash_table_new monoeg_g_hash_table_new +#define g_hash_table_new_full monoeg_g_hash_table_new_full +#define g_hash_table_remove monoeg_g_hash_table_remove +#define g_hash_table_steal monoeg_g_hash_table_steal +#define g_hash_table_size monoeg_g_hash_table_size +#define g_hash_table_print_stats monoeg_g_hash_table_print_stats +#define g_hash_table_remove_all monoeg_g_hash_table_remove_all +#define g_hash_table_iter_init monoeg_g_hash_table_iter_init +#define g_hash_table_iter_next monoeg_g_hash_table_iter_next +#define g_iconv monoeg_g_iconv +#define g_iconv_close monoeg_g_iconv_close +#define g_iconv_open monoeg_g_iconv_open +#define g_int_equal monoeg_g_int_equal +#define g_int_hash monoeg_g_int_hash +#define g_list_alloc monoeg_g_list_alloc +#define g_list_append monoeg_g_list_append +#define g_list_concat monoeg_g_list_concat +#define g_list_copy monoeg_g_list_copy +#define g_list_delete_link monoeg_g_list_delete_link +#define g_list_find monoeg_g_list_find +#define g_list_find_custom monoeg_g_list_find_custom +#define g_list_first monoeg_g_list_first +#define g_list_foreach monoeg_g_list_foreach +#define g_list_free monoeg_g_list_free +#define g_list_free_1 monoeg_g_list_free_1 +#define g_list_index monoeg_g_list_index +#define g_list_insert_before monoeg_g_list_insert_before +#define g_list_insert_sorted monoeg_g_list_insert_sorted +#define g_list_last monoeg_g_list_last +#define g_list_length monoeg_g_list_length +#define g_list_nth monoeg_g_list_nth +#define g_list_nth_data monoeg_g_list_nth_data +#define g_list_prepend monoeg_g_list_prepend +#define g_list_remove monoeg_g_list_remove +#define g_list_remove_all monoeg_g_list_remove_all +#define g_list_remove_link monoeg_g_list_remove_link +#define g_list_reverse monoeg_g_list_reverse +#define g_list_sort monoeg_g_list_sort +#define g_locale_from_utf8 monoeg_g_locale_from_utf8 +#define g_locale_to_utf8 monoeg_g_locale_to_utf8 +#define g_log monoeg_g_log +#define g_log_set_always_fatal monoeg_g_log_set_always_fatal +#define g_log_set_fatal_mask monoeg_g_log_set_fatal_mask +#define g_logv monoeg_g_logv +#define g_markup_parse_context_end_parse monoeg_g_markup_parse_context_end_parse +#define g_markup_parse_context_free monoeg_g_markup_parse_context_free +#define g_markup_parse_context_new monoeg_g_markup_parse_context_new +#define g_markup_parse_context_parse monoeg_g_markup_parse_context_parse +#define g_memdup monoeg_g_memdup +#define g_module_build_path monoeg_g_module_build_path +#define g_module_close monoeg_g_module_close +#define g_module_error monoeg_g_module_error +#define g_module_open monoeg_g_module_open +#define g_module_symbol monoeg_g_module_symbol +#define g_path_get_basename monoeg_g_path_get_basename +#define g_path_get_dirname monoeg_g_path_get_dirname +#define g_path_is_absolute monoeg_g_path_is_absolute +#define g_pattern_match_string monoeg_g_pattern_match_string +#define g_pattern_spec_free monoeg_g_pattern_spec_free +#define g_pattern_spec_new monoeg_g_pattern_spec_new +#define g_print monoeg_g_print +#define g_printf monoeg_g_printf +#define g_printerr monoeg_g_printerr +#define g_propagate_error monoeg_g_propagate_error +#define g_ptr_array_add monoeg_g_ptr_array_add +#define g_ptr_array_foreach monoeg_g_ptr_array_foreach +#define g_ptr_array_free monoeg_g_ptr_array_free +#define g_ptr_array_new monoeg_g_ptr_array_new +#define g_ptr_array_remove monoeg_g_ptr_array_remove +#define g_ptr_array_remove_fast monoeg_g_ptr_array_remove_fast +#define g_ptr_array_remove_index monoeg_g_ptr_array_remove_index +#define g_ptr_array_remove_index_fast monoeg_g_ptr_array_remove_index_fast +#define g_ptr_array_set_size monoeg_g_ptr_array_set_size +#define g_ptr_array_sized_new monoeg_g_ptr_array_sized_new +#define g_ptr_array_sort monoeg_g_ptr_array_sort +#define g_ptr_array_sort_with_data monoeg_g_ptr_array_sort_with_data +#define g_qsort_with_data monoeg_g_qsort_with_data +#define g_queue_free monoeg_g_queue_free +#define g_queue_is_empty monoeg_g_queue_is_empty +#define g_queue_foreach monoeg_g_queue_foreach +#define g_queue_new monoeg_g_queue_new +#define g_queue_pop_head monoeg_g_queue_pop_head +#define g_queue_push_head monoeg_g_queue_push_head +#define g_queue_push_tail monoeg_g_queue_push_tail +#define g_set_error monoeg_g_set_error +#define g_set_prgname monoeg_g_set_prgname +#define g_setenv monoeg_g_setenv +#define g_shell_parse_argv monoeg_g_shell_parse_argv +#define g_shell_quote monoeg_g_shell_quote +#define g_shell_unquote monoeg_g_shell_unquote +#define g_slist_alloc monoeg_g_slist_alloc +#define g_slist_append monoeg_g_slist_append +#define g_slist_concat monoeg_g_slist_concat +#define g_slist_copy monoeg_g_slist_copy +#define g_slist_delete_link monoeg_g_slist_delete_link +#define g_slist_find monoeg_g_slist_find +#define g_slist_find_custom monoeg_g_slist_find_custom +#define g_slist_foreach monoeg_g_slist_foreach +#define g_slist_free monoeg_g_slist_free +#define g_slist_free_1 monoeg_g_slist_free_1 +#define g_slist_index monoeg_g_slist_index +#define g_slist_insert_before monoeg_g_slist_insert_before +#define g_slist_insert_sorted monoeg_g_slist_insert_sorted +#define g_slist_last monoeg_g_slist_last +#define g_slist_length monoeg_g_slist_length +#define g_slist_nth monoeg_g_slist_nth +#define g_slist_nth_data monoeg_g_slist_nth_data +#define g_slist_prepend monoeg_g_slist_prepend +#define g_slist_remove monoeg_g_slist_remove +#define g_slist_remove_all monoeg_g_slist_remove_all +#define g_slist_remove_link monoeg_g_slist_remove_link +#define g_slist_reverse monoeg_g_slist_reverse +#define g_slist_sort monoeg_g_slist_sort +#define g_snprintf monoeg_g_snprintf +#define g_spaced_primes_closest monoeg_g_spaced_primes_closest +#define g_spawn_async_with_pipes monoeg_g_spawn_async_with_pipes +#define g_spawn_command_line_sync monoeg_g_spawn_command_line_sync +#define g_sprintf monoeg_g_sprintf +#define g_stpcpy monoeg_g_stpcpy +#define g_str_equal monoeg_g_str_equal +#define g_str_has_prefix monoeg_g_str_has_prefix +#define g_str_has_suffix monoeg_g_str_has_suffix +#define g_str_hash monoeg_g_str_hash +#define g_strchomp monoeg_g_strchomp +#define g_strchug monoeg_g_strchug +#define g_strconcat monoeg_g_strconcat +#define g_strdelimit monoeg_g_strdelimit +#define g_strdown monoeg_g_strdown +#define g_strdup_printf monoeg_g_strdup_printf +#define g_strdup_vprintf monoeg_g_strdup_vprintf +#define g_strerror monoeg_g_strerror +#define g_strescape monoeg_g_strescape +#define g_strfreev monoeg_g_strfreev +#define g_strdupv monoeg_g_strdupv +#define g_string_append monoeg_g_string_append +#define g_string_append_c monoeg_g_string_append_c +#define g_string_append_len monoeg_g_string_append_len +#define g_string_append_unichar monoeg_g_string_append_unichar +#define g_string_append_printf monoeg_g_string_append_printf +#define g_string_append_vprintf monoeg_g_string_append_vprintf +#define g_string_erase monoeg_g_string_erase +#define g_string_free monoeg_g_string_free +#define g_string_insert monoeg_g_string_insert +#define g_string_new monoeg_g_string_new +#define g_string_new_len monoeg_g_string_new_len +#define g_string_prepend monoeg_g_string_prepend +#define g_string_printf monoeg_g_string_printf +#define g_string_set_size monoeg_g_string_set_size +#define g_string_sized_new monoeg_g_string_sized_new +#define g_string_truncate monoeg_g_string_truncate +#define g_strjoin monoeg_g_strjoin +#define g_strjoinv monoeg_g_strjoinv +#define g_strlcpy monoeg_g_strlcpy +#define g_strndup monoeg_g_strndup +#define g_strnfill monoeg_g_strnfill +#define g_strreverse monoeg_g_strreverse +#define g_strsplit monoeg_g_strsplit +#define g_strsplit_set monoeg_g_strsplit_set +#define g_strv_length monoeg_g_strv_length +#define g_timer_destroy monoeg_g_timer_destroy +#define g_timer_elapsed monoeg_g_timer_elapsed +#define g_timer_new monoeg_g_timer_new +#define g_timer_start monoeg_g_timer_start +#define g_timer_stop monoeg_g_timer_stop +#define g_trailingBytesForUTF8 monoeg_g_trailingBytesForUTF8 +#define g_ucs4_to_utf8 monoeg_g_ucs4_to_utf8 +#define g_ucs4_to_utf16 monoeg_g_ucs4_to_utf16 +#define g_unichar_case monoeg_g_unichar_case +#define g_unichar_isxdigit monoeg_g_unichar_isxdigit +#define g_unichar_tolower monoeg_g_unichar_tolower +#define g_unichar_totitle monoeg_g_unichar_totitle +#define g_unichar_toupper monoeg_g_unichar_toupper +#define g_unichar_type monoeg_g_unichar_type +#define g_unichar_xdigit_value monoeg_g_unichar_xdigit_value +#define g_unsetenv monoeg_g_unsetenv +#define g_usleep monoeg_g_usleep +#define g_utf16_to_ucs4 monoeg_g_utf16_to_ucs4 +#define g_utf16_to_utf8 monoeg_g_utf16_to_utf8 +#define g_utf8_get_char monoeg_g_utf8_get_char +#define g_utf8_offset_to_pointer monoeg_g_utf8_offset_to_pointer +#define g_utf8_pointer_to_offset monoeg_g_utf8_pointer_to_offset +#define g_utf8_strdown monoeg_g_utf8_strdown +#define g_utf8_strlen monoeg_g_utf8_strlen +#define g_utf8_strup monoeg_g_utf8_strup +#define g_utf8_to_ucs4_fast monoeg_g_utf8_to_ucs4_fast +#define g_utf8_to_utf16 monoeg_g_utf8_to_utf16 +#define g_utf8_validate monoeg_g_utf8_validate +#define g_unichar_to_utf8 monoeg_g_unichar_to_utf8 +#define g_unichar_is_space monoeg_g_unichar_is_space +#define g_unicode_break_type monoeg_g_unicode_break_type +#define g_utf8_offset_to_pointer monoeg_g_utf8_offset_to_pointer +#define g_utf8_pointer_to_offset monoeg_g_utf8_pointer_to_offset +#define g_utf8_to_ucs4_fast monoeg_g_utf8_to_ucs4_fast +#define g_win32_getlocale monoeg_g_win32_getlocale +#define g_assertion_message monoeg_assertion_message +#define g_malloc monoeg_malloc +#define g_malloc0 monoeg_malloc0 +#define g_ptr_array_grow monoeg_ptr_array_grow +#define g_realloc monoeg_realloc +#define g_try_malloc monoeg_try_malloc +#define g_try_realloc monoeg_try_realloc +#define g_strdup monoeg_strdup +#define g_ucs4_to_utf16_len monoeg_ucs4_to_utf16_len +#define g_utf16_to_ucs4_len monoeg_utf16_to_ucs4_len + +#define g_ascii_strcasecmp monoeg_ascii_strcasecmp +#define g_ascii_strup monoeg_ascii_strup +#define g_ascii_toupper monoeg_ascii_toupper +#define g_unichar_break_type monoeg_unichar_break_type +#define g_unichar_isspace monoeg_unichar_isspace +#define g_unichar_to_utf16 monoeg_unichar_to_utf16 +#define g_utf8_find_prev_char monoeg_utf8_find_prev_char +#define g_utf8_get_char_validated monoeg_utf8_get_char_validated +#define g_utf8_prev_char monoeg_utf8_prev_char +#define g_utf8_to_ucs4 monoeg_utf8_to_ucs4 + + +#define g_log_default_handler monoeg_log_default_handler +#define g_log_set_default_handler monoeg_log_set_default_handler +#define g_set_print_handler monoeg_set_print_handler +#define g_set_printerr_handler monoeg_set_printerr_handler diff --git a/mta-mono/vendor/eglib/glib.h b/mta-mono/vendor/eglib/glib.h new file mode 100644 index 0000000..533c841 --- /dev/null +++ b/mta-mono/vendor/eglib/glib.h @@ -0,0 +1,1085 @@ +#ifndef __GLIB_H +#define __GLIB_H + +#include +#include +#include +#include +#include +#include +#include + +#ifdef _MSC_VER +#pragma include_alias(, ) +#endif + +/* VS 2010 and later have stdint.h */ +#if defined(_MSC_VER) && _MSC_VER < 1600 +#else +#include +#endif + +#include +#ifndef EGLIB_NO_REMAP +#include +#endif + +#ifdef G_HAVE_ALLOCA_H +#include +#endif + +#ifdef WIN32 +/* For alloca */ +#include +#endif + +#ifndef offsetof +# define offsetof(s_name,n_name) (size_t)(char *)&(((s_name*)0)->m_name) +#endif + +#define __EGLIB_X11 1 + +#ifdef __cplusplus +#define G_BEGIN_DECLS extern "C" { +#define G_END_DECLS } +#else +#define G_BEGIN_DECLS +#define G_END_DECLS +#endif + +G_BEGIN_DECLS + +/* + * Basic data types + */ +typedef int gint; +typedef unsigned int guint; +typedef short gshort; +typedef unsigned short gushort; +typedef long glong; +typedef unsigned long gulong; +typedef void * gpointer; +typedef const void * gconstpointer; +typedef char gchar; +typedef unsigned char guchar; + +#if !G_TYPES_DEFINED +/* VS 2010 and later have stdint.h */ +#if defined(_MSC_VER) && _MSC_VER < 1600 +typedef __int8 gint8; +typedef unsigned __int8 guint8; +typedef __int16 gint16; +typedef unsigned __int16 guint16; +typedef __int32 gint32; +typedef unsigned __int32 guint32; +typedef __int64 gint64; +typedef unsigned __int64 guint64; +typedef float gfloat; +typedef double gdouble; +typedef int gboolean; +#else +/* Types defined in terms of the stdint.h */ +typedef int8_t gint8; +typedef uint8_t guint8; +typedef int16_t gint16; +typedef uint16_t guint16; +typedef int32_t gint32; +typedef uint32_t guint32; +typedef int64_t gint64; +typedef uint64_t guint64; +typedef float gfloat; +typedef double gdouble; +typedef int32_t gboolean; +#endif +#endif + +typedef guint16 gunichar2; +typedef guint32 gunichar; + +/* + * Macros + */ +#define G_N_ELEMENTS(s) (sizeof(s) / sizeof ((s) [0])) + +#define FALSE 0 +#define TRUE 1 + +#define G_MINSHORT SHRT_MIN +#define G_MAXSHORT SHRT_MAX +#define G_MAXUSHORT USHRT_MAX +#define G_MAXINT INT_MAX +#define G_MININT INT_MIN +#define G_MAXINT32 INT32_MAX +#define G_MAXUINT32 UINT32_MAX +#define G_MININT32 INT32_MIN +#define G_MININT64 INT64_MIN +#define G_MAXINT64 INT64_MAX +#define G_MAXUINT64 UINT64_MAX + +#define G_LITTLE_ENDIAN 1234 +#define G_BIG_ENDIAN 4321 +#define G_STMT_START do +#define G_STMT_END while (0) + +#define G_USEC_PER_SEC 1000000 + +#ifndef ABS +#define ABS(a) ((a) > 0 ? (a) : -(a)) +#endif + +#define G_STRUCT_OFFSET(p_type,field) offsetof(p_type,field) + +#define EGLIB_STRINGIFY(x) #x +#define EGLIB_TOSTRING(x) EGLIB_STRINGIFY(x) +#define G_STRLOC __FILE__ ":" EGLIB_TOSTRING(__LINE__) ":" + +#define G_CONST_RETURN const + +/* + * Allocation + */ +void g_free (void *ptr); +gpointer g_realloc (gpointer obj, gsize size); +gpointer g_malloc (gsize x); +gpointer g_malloc0 (gsize x); +gpointer g_try_malloc (gsize x); +gpointer g_try_realloc (gpointer obj, gsize size); + +#define g_new(type,size) ((type *) g_malloc (sizeof (type) * (size))) +#define g_new0(type,size) ((type *) g_malloc0 (sizeof (type)* (size))) +#define g_newa(type,size) ((type *) alloca (sizeof (type) * (size))) + +#define g_memmove(dest,src,len) memmove (dest, src, len) +#define g_renew(struct_type, mem, n_structs) g_realloc (mem, sizeof (struct_type) * n_structs) +#define g_alloca(size) alloca (size) + +gpointer g_memdup (gconstpointer mem, guint byte_size); +static inline gchar *g_strdup (const gchar *str) { if (str) {return strdup (str);} return NULL; } +gchar **g_strdupv (gchar **str_array); + +typedef struct { + gpointer (*malloc) (gsize n_bytes); + gpointer (*realloc) (gpointer mem, gsize n_bytes); + void (*free) (gpointer mem); + gpointer (*calloc) (gsize n_blocks, gsize n_block_bytes); + gpointer (*try_malloc) (gsize n_bytes); + gpointer (*try_realloc) (gpointer mem, gsize n_bytes); +} GMemVTable; + +#define g_mem_set_vtable(x) + +struct _GMemChunk { + guint alloc_size; +}; + +typedef struct _GMemChunk GMemChunk; +/* + * Misc. + */ +#define g_atexit(func) ((void) atexit (func)) + +const gchar * g_getenv(const gchar *variable); +gboolean g_setenv(const gchar *variable, const gchar *value, gboolean overwrite); +void g_unsetenv(const gchar *variable); + +gchar* g_win32_getlocale(void); + +/* + * Precondition macros + */ +#define g_warn_if_fail(x) G_STMT_START { if (!(x)) { g_warning ("%s:%d: assertion '%s' failed", __FILE__, __LINE__, #x); } } G_STMT_END +#define g_return_if_fail(x) G_STMT_START { if (!(x)) { g_critical ("%s:%d: assertion '%s' failed", __FILE__, __LINE__, #x); return; } } G_STMT_END +#define g_return_val_if_fail(x,e) G_STMT_START { if (!(x)) { g_critical ("%s:%d: assertion '%s' failed", __FILE__, __LINE__, #x); return (e); } } G_STMT_END + +/* + * Errors + */ +typedef struct { + /* In the real glib, this is a GQuark, but we dont use/need that */ + gpointer domain; + gint code; + gchar *message; +} GError; + +void g_clear_error (GError **error); +void g_error_free (GError *error); +GError *g_error_new (gpointer domain, gint code, const char *format, ...); +void g_set_error (GError **err, gpointer domain, gint code, const gchar *format, ...); +void g_propagate_error (GError **dest, GError *src); + +/* + * Strings utility + */ +gchar *g_strdup_printf (const gchar *format, ...); +gchar *g_strdup_vprintf (const gchar *format, va_list args); +gchar *g_strndup (const gchar *str, gsize n); +const gchar *g_strerror (gint errnum); +gchar *g_strndup (const gchar *str, gsize n); +void g_strfreev (gchar **str_array); +gchar *g_strconcat (const gchar *first, ...); +gchar **g_strsplit (const gchar *string, const gchar *delimiter, gint max_tokens); +gchar **g_strsplit_set (const gchar *string, const gchar *delimiter, gint max_tokens); +gchar *g_strreverse (gchar *str); +gboolean g_str_has_prefix (const gchar *str, const gchar *prefix); +gboolean g_str_has_suffix (const gchar *str, const gchar *suffix); +guint g_strv_length (gchar **str_array); +gchar *g_strjoin (const gchar *separator, ...); +gchar *g_strjoinv (const gchar *separator, gchar **str_array); +gchar *g_strchug (gchar *str); +gchar *g_strchomp (gchar *str); +void g_strdown (gchar *string); +gchar *g_strnfill (gsize length, gchar fill_char); + +gchar *g_strdelimit (gchar *string, const gchar *delimiters, gchar new_delimiter); +gchar *g_strescape (const gchar *source, const gchar *exceptions); + +gchar *g_filename_to_uri (const gchar *filename, const gchar *hostname, GError **error); +gchar *g_filename_from_uri (const gchar *uri, gchar **hostname, GError **error); + +gint g_printf (gchar const *format, ...); +gint g_fprintf (FILE *file, gchar const *format, ...); +gint g_sprintf (gchar *string, gchar const *format, ...); +gint g_snprintf (gchar *string, gulong n, gchar const *format, ...); +#define g_vprintf vprintf +#define g_vfprintf vfprintf +#define g_vsprintf vsprintf +#define g_vsnprintf vsnprintf +#define g_vasprintf vasprintf + +gsize g_strlcpy (gchar *dest, const gchar *src, gsize dest_size); +gchar *g_stpcpy (gchar *dest, const char *src); + + +gchar g_ascii_tolower (gchar c); +gchar g_ascii_toupper (gchar c); +gchar *g_ascii_strdown (const gchar *str, gssize len); +gchar *g_ascii_strup (const gchar *str, gssize len); +gint g_ascii_strncasecmp (const gchar *s1, const gchar *s2, gsize n); +gint g_ascii_strcasecmp (const gchar *s1, const gchar *s2); +gint g_ascii_xdigit_value (gchar c); +#define g_ascii_isspace(c) (isspace (c) != 0) +#define g_ascii_isalpha(c) (isalpha (c) != 0) +#define g_ascii_isprint(c) (isprint (c) != 0) +#define g_ascii_isxdigit(c) (isxdigit (c) != 0) + +/* FIXME: g_strcasecmp supports utf8 unicode stuff */ +#ifdef _MSC_VER +#define g_strcasecmp stricmp +#define g_strncasecmp strnicmp +#define g_strstrip(a) g_strchug (g_strchomp (a)) +#else +#define g_strcasecmp strcasecmp +#define g_ascii_strtoull strtoull +#define g_strncasecmp strncasecmp +#define g_strstrip(a) g_strchug (g_strchomp (a)) +#endif +#define g_ascii_strdup strdup + + +#define G_STR_DELIMITERS "_-|> <." + +/* + * String type + */ +typedef struct { + char *str; + gsize len; + gsize allocated_len; +} GString; + +GString *g_string_new (const gchar *init); +GString *g_string_new_len (const gchar *init, gssize len); +GString *g_string_sized_new (gsize default_size); +gchar *g_string_free (GString *string, gboolean free_segment); +GString *g_string_append (GString *string, const gchar *val); +void g_string_printf (GString *string, const gchar *format, ...); +void g_string_append_printf (GString *string, const gchar *format, ...); +void g_string_append_vprintf (GString *string, const gchar *format, va_list args); +GString *g_string_append_unichar (GString *string, gunichar c); +GString *g_string_append_c (GString *string, gchar c); +GString *g_string_append (GString *string, const gchar *val); +GString *g_string_append_len (GString *string, const gchar *val, gssize len); +GString *g_string_truncate (GString *string, gsize len); +GString *g_string_prepend (GString *string, const gchar *val); +GString *g_string_insert (GString *string, gssize pos, const gchar *val); +GString *g_string_set_size (GString *string, gsize len); +GString *g_string_erase (GString *string, gssize pos, gssize len); + +#define g_string_sprintfa g_string_append_printf + +typedef void (*GFunc) (gpointer data, gpointer user_data); +typedef gint (*GCompareFunc) (gconstpointer a, gconstpointer b); +typedef gint (*GCompareDataFunc) (gconstpointer a, gconstpointer b, gpointer user_data); +typedef void (*GHFunc) (gpointer key, gpointer value, gpointer user_data); +typedef gboolean (*GHRFunc) (gpointer key, gpointer value, gpointer user_data); +typedef void (*GDestroyNotify) (gpointer data); +typedef guint (*GHashFunc) (gconstpointer key); +typedef gboolean (*GEqualFunc) (gconstpointer a, gconstpointer b); +typedef void (*GFreeFunc) (gpointer data); + +/* + * Lists + */ +typedef struct _GSList GSList; +struct _GSList { + gpointer data; + GSList *next; +}; + +GSList *g_slist_alloc (void); +GSList *g_slist_append (GSList *list, + gpointer data); +GSList *g_slist_prepend (GSList *list, + gpointer data); +void g_slist_free (GSList *list); +void g_slist_free_1 (GSList *list); +GSList *g_slist_copy (GSList *list); +GSList *g_slist_concat (GSList *list1, + GSList *list2); +void g_slist_foreach (GSList *list, + GFunc func, + gpointer user_data); +GSList *g_slist_last (GSList *list); +GSList *g_slist_find (GSList *list, + gconstpointer data); +GSList *g_slist_find_custom (GSList *list, + gconstpointer data, + GCompareFunc func); +GSList *g_slist_remove (GSList *list, + gconstpointer data); +GSList *g_slist_remove_all (GSList *list, + gconstpointer data); +GSList *g_slist_reverse (GSList *list); +guint g_slist_length (GSList *list); +GSList *g_slist_remove_link (GSList *list, + GSList *link); +GSList *g_slist_delete_link (GSList *list, + GSList *link); +GSList *g_slist_insert_sorted (GSList *list, + gpointer data, + GCompareFunc func); +GSList *g_slist_insert_before (GSList *list, + GSList *sibling, + gpointer data); +GSList *g_slist_sort (GSList *list, + GCompareFunc func); +gint g_slist_index (GSList *list, + gconstpointer data); +GSList *g_slist_nth (GSList *list, + guint n); +gpointer g_slist_nth_data (GSList *list, + guint n); + +#define g_slist_next(slist) ((slist) ? (((GSList *) (slist))->next) : NULL) + + +typedef struct _GList GList; +struct _GList { + gpointer data; + GList *next; + GList *prev; +}; + +#define g_list_next(list) ((list) ? (((GList *) (list))->next) : NULL) +#define g_list_previous(list) ((list) ? (((GList *) (list))->prev) : NULL) + +GList *g_list_alloc (void); +GList *g_list_append (GList *list, + gpointer data); +GList *g_list_prepend (GList *list, + gpointer data); +void g_list_free (GList *list); +void g_list_free_1 (GList *list); +GList *g_list_copy (GList *list); +guint g_list_length (GList *list); +gint g_list_index (GList *list, + gconstpointer data); +GList *g_list_nth (GList *list, + guint n); +gpointer g_list_nth_data (GList *list, + guint n); +GList *g_list_last (GList *list); +GList *g_list_concat (GList *list1, + GList *list2); +void g_list_foreach (GList *list, + GFunc func, + gpointer user_data); +GList *g_list_first (GList *list); +GList *g_list_find (GList *list, + gconstpointer data); +GList *g_list_find_custom (GList *list, + gconstpointer data, + GCompareFunc func); +GList *g_list_remove (GList *list, + gconstpointer data); +GList *g_list_remove_all (GList *list, + gconstpointer data); +GList *g_list_reverse (GList *list); +GList *g_list_remove_link (GList *list, + GList *link); +GList *g_list_delete_link (GList *list, + GList *link); +GList *g_list_insert_sorted (GList *list, + gpointer data, + GCompareFunc func); +GList *g_list_insert_before (GList *list, + GList *sibling, + gpointer data); +GList *g_list_sort (GList *sort, + GCompareFunc func); + +/* + * Hashtables + */ +typedef struct _GHashTable GHashTable; +typedef struct _GHashTableIter GHashTableIter; + +/* Private, but needed for stack allocation */ +struct _GHashTableIter +{ + gpointer dummy [8]; +}; + +GHashTable *g_hash_table_new (GHashFunc hash_func, GEqualFunc key_equal_func); +GHashTable *g_hash_table_new_full (GHashFunc hash_func, GEqualFunc key_equal_func, + GDestroyNotify key_destroy_func, GDestroyNotify value_destroy_func); +void g_hash_table_insert_replace (GHashTable *hash, gpointer key, gpointer value, gboolean replace); +guint g_hash_table_size (GHashTable *hash); +GList *g_hash_table_get_keys (GHashTable *hash); +GList *g_hash_table_get_values (GHashTable *hash); +gpointer g_hash_table_lookup (GHashTable *hash, gconstpointer key); +gboolean g_hash_table_lookup_extended (GHashTable *hash, gconstpointer key, gpointer *orig_key, gpointer *value); +void g_hash_table_foreach (GHashTable *hash, GHFunc func, gpointer user_data); +gpointer g_hash_table_find (GHashTable *hash, GHRFunc predicate, gpointer user_data); +gboolean g_hash_table_remove (GHashTable *hash, gconstpointer key); +gboolean g_hash_table_steal (GHashTable *hash, gconstpointer key); +void g_hash_table_remove_all (GHashTable *hash); +guint g_hash_table_foreach_remove (GHashTable *hash, GHRFunc func, gpointer user_data); +guint g_hash_table_foreach_steal (GHashTable *hash, GHRFunc func, gpointer user_data); +void g_hash_table_destroy (GHashTable *hash); +void g_hash_table_print_stats (GHashTable *table); + +void g_hash_table_iter_init (GHashTableIter *iter, GHashTable *hash_table); +gboolean g_hash_table_iter_next (GHashTableIter *iter, gpointer *key, gpointer *value); + +guint g_spaced_primes_closest (guint x); + +#define g_hash_table_insert(h,k,v) g_hash_table_insert_replace ((h),(k),(v),FALSE) +#define g_hash_table_replace(h,k,v) g_hash_table_insert_replace ((h),(k),(v),TRUE) + +gboolean g_direct_equal (gconstpointer v1, gconstpointer v2); +guint g_direct_hash (gconstpointer v1); +gboolean g_int_equal (gconstpointer v1, gconstpointer v2); +guint g_int_hash (gconstpointer v1); +gboolean g_str_equal (gconstpointer v1, gconstpointer v2); +guint g_str_hash (gconstpointer v1); + +/* + * ByteArray + */ + +typedef struct _GByteArray GByteArray; +struct _GByteArray { + guint8 *data; + gint len; +}; + +GByteArray *g_byte_array_new (void); +GByteArray* g_byte_array_append (GByteArray *array, const guint8 *data, guint len); +guint8* g_byte_array_free (GByteArray *array, gboolean free_segment); + +/* + * Array + */ + +typedef struct _GArray GArray; +struct _GArray { + gchar *data; + gint len; +}; + +GArray *g_array_new (gboolean zero_terminated, gboolean clear_, guint element_size); +GArray *g_array_sized_new (gboolean zero_terminated, gboolean clear_, guint element_size, guint reserved_size); +gchar* g_array_free (GArray *array, gboolean free_segment); +GArray *g_array_append_vals (GArray *array, gconstpointer data, guint len); +GArray* g_array_insert_vals (GArray *array, guint index_, gconstpointer data, guint len); +GArray* g_array_remove_index (GArray *array, guint index_); +GArray* g_array_remove_index_fast (GArray *array, guint index_); +void g_array_set_size (GArray *array, gint length); + +#define g_array_append_val(a,v) (g_array_append_vals((a),&(v),1)) +#define g_array_insert_val(a,i,v) (g_array_insert_vals((a),(i),&(v),1)) +#define g_array_index(a,t,i) *(t*)(((a)->data) + sizeof(t) * (i)) + +/* + * QSort +*/ + +void g_qsort_with_data (gpointer base, size_t nmemb, size_t size, GCompareDataFunc compare, gpointer user_data); + +/* + * Pointer Array + */ + +typedef struct _GPtrArray GPtrArray; +struct _GPtrArray { + gpointer *pdata; + guint len; +}; + +GPtrArray *g_ptr_array_new (void); +GPtrArray *g_ptr_array_sized_new (guint reserved_size); +void g_ptr_array_add (GPtrArray *array, gpointer data); +gboolean g_ptr_array_remove (GPtrArray *array, gpointer data); +gpointer g_ptr_array_remove_index (GPtrArray *array, guint index); +gboolean g_ptr_array_remove_fast (GPtrArray *array, gpointer data); +gpointer g_ptr_array_remove_index_fast (GPtrArray *array, guint index); +void g_ptr_array_sort (GPtrArray *array, GCompareFunc compare_func); +void g_ptr_array_sort_with_data (GPtrArray *array, GCompareDataFunc compare_func, gpointer user_data); +void g_ptr_array_set_size (GPtrArray *array, gint length); +gpointer *g_ptr_array_free (GPtrArray *array, gboolean free_seg); +void g_ptr_array_foreach (GPtrArray *array, GFunc func, gpointer user_data); +#define g_ptr_array_index(array,index) (array)->pdata[(index)] + +/* + * Queues + */ +typedef struct { + GList *head; + GList *tail; + guint length; +} GQueue; + +gpointer g_queue_pop_head (GQueue *queue); +void g_queue_push_head (GQueue *queue, + gpointer data); +void g_queue_push_tail (GQueue *queue, + gpointer data); +gboolean g_queue_is_empty (GQueue *queue); +GQueue *g_queue_new (void); +void g_queue_free (GQueue *queue); +void g_queue_foreach (GQueue *queue, GFunc func, gpointer user_data); + +/* + * Messages + */ +#ifndef G_LOG_DOMAIN +#define G_LOG_DOMAIN ((gchar*) 0) +#endif + +typedef enum { + G_LOG_FLAG_RECURSION = 1 << 0, + G_LOG_FLAG_FATAL = 1 << 1, + + G_LOG_LEVEL_ERROR = 1 << 2, + G_LOG_LEVEL_CRITICAL = 1 << 3, + G_LOG_LEVEL_WARNING = 1 << 4, + G_LOG_LEVEL_MESSAGE = 1 << 5, + G_LOG_LEVEL_INFO = 1 << 6, + G_LOG_LEVEL_DEBUG = 1 << 7, + + G_LOG_LEVEL_MASK = ~(G_LOG_FLAG_RECURSION | G_LOG_FLAG_FATAL) +} GLogLevelFlags; + +void g_print (const gchar *format, ...); +void g_printerr (const gchar *format, ...); +GLogLevelFlags g_log_set_always_fatal (GLogLevelFlags fatal_mask); +GLogLevelFlags g_log_set_fatal_mask (const gchar *log_domain, GLogLevelFlags fatal_mask); +void g_logv (const gchar *log_domain, GLogLevelFlags log_level, const gchar *format, va_list args); +void g_log (const gchar *log_domain, GLogLevelFlags log_level, const gchar *format, ...); +void g_assertion_message (const gchar *format, ...) G_GNUC_NORETURN; + +#ifdef HAVE_C99_SUPPORT +/* The for (;;) tells gc thats g_error () doesn't return, avoiding warnings */ +#define g_error(format, ...) do { g_log (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR, format, __VA_ARGS__); for (;;); } while (0) +#define g_critical(format, ...) g_log (G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, format, __VA_ARGS__) +#define g_warning(format, ...) g_log (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING, format, __VA_ARGS__) +#define g_message(format, ...) g_log (G_LOG_DOMAIN, G_LOG_LEVEL_MESSAGE, format, __VA_ARGS__) +#define g_debug(format, ...) g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, format, __VA_ARGS__) +#else /* HAVE_C99_SUPPORT */ +#define g_error(...) do { g_log (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR, __VA_ARGS__); for (;;); } while (0) +#define g_critical(...) g_log (G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, __VA_ARGS__) +#define g_warning(...) g_log (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING, __VA_ARGS__) +#define g_message(...) g_log (G_LOG_DOMAIN, G_LOG_LEVEL_MESSAGE, __VA_ARGS__) +#define g_debug(...) g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, __VA_ARGS__) +#endif /* ndef HAVE_C99_SUPPORT */ + +typedef void (*GLogFunc) (const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, gpointer user_data); +typedef void (*GPrintFunc) (const gchar *string); + +void g_log_default_handler (const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, gpointer unused_data); +GLogFunc g_log_set_default_handler (GLogFunc log_func, gpointer user_data); +GPrintFunc g_set_print_handler (GPrintFunc func); +GPrintFunc g_set_printerr_handler (GPrintFunc func); +/* + * Conversions + */ + +gpointer g_convert_error_quark(void); + + +/* + * Unicode Manipulation: most of this is not used by Mono by default, it is + * only used if the old collation code is activated, so this is only the + * bare minimum to build. + */ + +typedef enum { + G_UNICODE_CONTROL, + G_UNICODE_FORMAT, + G_UNICODE_UNASSIGNED, + G_UNICODE_PRIVATE_USE, + G_UNICODE_SURROGATE, + G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_MODIFIER_LETTER, + G_UNICODE_OTHER_LETTER, + G_UNICODE_TITLECASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_COMBINING_MARK, + G_UNICODE_ENCLOSING_MARK, + G_UNICODE_NON_SPACING_MARK, + G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_LETTER_NUMBER, + G_UNICODE_OTHER_NUMBER, + G_UNICODE_CONNECT_PUNCTUATION, + G_UNICODE_DASH_PUNCTUATION, + G_UNICODE_CLOSE_PUNCTUATION, + G_UNICODE_FINAL_PUNCTUATION, + G_UNICODE_INITIAL_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OPEN_PUNCTUATION, + G_UNICODE_CURRENCY_SYMBOL, + G_UNICODE_MODIFIER_SYMBOL, + G_UNICODE_MATH_SYMBOL, + G_UNICODE_OTHER_SYMBOL, + G_UNICODE_LINE_SEPARATOR, + G_UNICODE_PARAGRAPH_SEPARATOR, + G_UNICODE_SPACE_SEPARATOR +} GUnicodeType; + +typedef enum { + G_UNICODE_BREAK_MANDATORY, + G_UNICODE_BREAK_CARRIAGE_RETURN, + G_UNICODE_BREAK_LINE_FEED, + G_UNICODE_BREAK_COMBINING_MARK, + G_UNICODE_BREAK_SURROGATE, + G_UNICODE_BREAK_ZERO_WIDTH_SPACE, + G_UNICODE_BREAK_INSEPARABLE, + G_UNICODE_BREAK_NON_BREAKING_GLUE, + G_UNICODE_BREAK_CONTINGENT, + G_UNICODE_BREAK_SPACE, + G_UNICODE_BREAK_AFTER, + G_UNICODE_BREAK_BEFORE, + G_UNICODE_BREAK_BEFORE_AND_AFTER, + G_UNICODE_BREAK_HYPHEN, + G_UNICODE_BREAK_NON_STARTER, + G_UNICODE_BREAK_OPEN_PUNCTUATION, + G_UNICODE_BREAK_CLOSE_PUNCTUATION, + G_UNICODE_BREAK_QUOTATION, + G_UNICODE_BREAK_EXCLAMATION, + G_UNICODE_BREAK_IDEOGRAPHIC, + G_UNICODE_BREAK_NUMERIC, + G_UNICODE_BREAK_INFIX_SEPARATOR, + G_UNICODE_BREAK_SYMBOL, + G_UNICODE_BREAK_ALPHABETIC, + G_UNICODE_BREAK_PREFIX, + G_UNICODE_BREAK_POSTFIX, + G_UNICODE_BREAK_COMPLEX_CONTEXT, + G_UNICODE_BREAK_AMBIGUOUS, + G_UNICODE_BREAK_UNKNOWN, + G_UNICODE_BREAK_NEXT_LINE, + G_UNICODE_BREAK_WORD_JOINER, + G_UNICODE_BREAK_HANGUL_L_JAMO, + G_UNICODE_BREAK_HANGUL_V_JAMO, + G_UNICODE_BREAK_HANGUL_T_JAMO, + G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, + G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE +} GUnicodeBreakType; + +gunichar g_unichar_toupper (gunichar c); +gunichar g_unichar_tolower (gunichar c); +gunichar g_unichar_totitle (gunichar c); +GUnicodeType g_unichar_type (gunichar c); +gboolean g_unichar_isspace (gunichar c); +gboolean g_unichar_isxdigit (gunichar c); +gint g_unichar_xdigit_value (gunichar c); +GUnicodeBreakType g_unichar_break_type (gunichar c); + +#ifndef MAX +#define MAX(a,b) (((a)>(b)) ? (a) : (b)) +#endif + +#ifndef MIN +#define MIN(a,b) (((a)<(b)) ? (a) : (b)) +#endif + +#ifndef CLAMP +#define CLAMP(a,low,high) (((a) < (low)) ? (low) : (((a) > (high)) ? (high) : (a))) +#endif + +#if defined(__GNUC__) && (__GNUC__ > 2) +#define G_LIKELY(expr) (__builtin_expect ((expr) != 0, 1)) +#define G_UNLIKELY(expr) (__builtin_expect ((expr) != 0, 0)) +#else +#define G_LIKELY(x) (x) +#define G_UNLIKELY(x) (x) +#endif + +#if defined(_MSC_VER) +#define eg_unreachable() __assume(0) +#elif defined(__GNUC__) && ((__GNUC__ > 4) || (__GNUC__ == 4 && (__GNUC_MINOR__ >= 5))) +#define eg_unreachable() __builtin_unreachable() +#else +#define eg_unreachable() +#endif + +#define g_assert(x) G_STMT_START { if (G_UNLIKELY (!(x))) g_assertion_message ("* Assertion at %s:%d, condition `%s' not met\n", __FILE__, __LINE__, #x); } G_STMT_END +#define g_assert_not_reached() G_STMT_START { g_assertion_message ("* Assertion: should not be reached at %s:%d\n", __FILE__, __LINE__); eg_unreachable(); } G_STMT_END + +/* + * Unicode conversion + */ + +#define G_CONVERT_ERROR g_convert_error_quark() + +typedef enum { + G_CONVERT_ERROR_NO_CONVERSION, + G_CONVERT_ERROR_ILLEGAL_SEQUENCE, + G_CONVERT_ERROR_FAILED, + G_CONVERT_ERROR_PARTIAL_INPUT, + G_CONVERT_ERROR_BAD_URI, + G_CONVERT_ERROR_NOT_ABSOLUTE_PATH +} GConvertError; + +gchar *g_utf8_strup (const gchar *str, gssize len); +gchar *g_utf8_strdown (const gchar *str, gssize len); +gint g_unichar_to_utf8 (gunichar c, gchar *outbuf); +gunichar *g_utf8_to_ucs4_fast (const gchar *str, glong len, glong *items_written); +gunichar *g_utf8_to_ucs4 (const gchar *str, glong len, glong *items_read, glong *items_written, GError **err); +gunichar2 *g_utf8_to_utf16 (const gchar *str, glong len, glong *items_read, glong *items_written, GError **err); +gunichar2 *eg_utf8_to_utf16_with_nuls (const gchar *str, glong len, glong *items_read, glong *items_written, GError **err); +gchar *g_utf16_to_utf8 (const gunichar2 *str, glong len, glong *items_read, glong *items_written, GError **err); +gunichar *g_utf16_to_ucs4 (const gunichar2 *str, glong len, glong *items_read, glong *items_written, GError **err); +gchar *g_ucs4_to_utf8 (const gunichar *str, glong len, glong *items_read, glong *items_written, GError **err); +gunichar2 *g_ucs4_to_utf16 (const gunichar *str, glong len, glong *items_read, glong *items_written, GError **err); + +#define u8to16(str) g_utf8_to_utf16(str, (glong)strlen(str), NULL, NULL, NULL) + +#ifdef G_OS_WIN32 +#define u16to8(str) g_utf16_to_utf8((gunichar2 *) (str), (glong)wcslen((wchar_t *) (str)), NULL, NULL, NULL) +#else +#define u16to8(str) g_utf16_to_utf8(str, (glong)strlen(str), NULL, NULL, NULL) +#endif + +/* + * Path + */ +gchar *g_build_path (const gchar *separator, const gchar *first_element, ...); +#define g_build_filename(x, ...) g_build_path(G_DIR_SEPARATOR_S, x, __VA_ARGS__) +gchar *g_path_get_dirname (const gchar *filename); +gchar *g_path_get_basename (const char *filename); +gchar *g_find_program_in_path (const gchar *program); +gchar *g_get_current_dir (void); +gboolean g_path_is_absolute (const char *filename); + +const gchar *g_get_home_dir (void); +const gchar *g_get_tmp_dir (void); +const gchar *g_get_user_name (void); +gchar *g_get_prgname (void); +void g_set_prgname (const gchar *prgname); + +/* + * Shell + */ + +gboolean g_shell_parse_argv (const gchar *command_line, gint *argcp, gchar ***argvp, GError **error); +gchar *g_shell_unquote (const gchar *quoted_string, GError **error); +gchar *g_shell_quote (const gchar *unquoted_string); + +/* + * Spawn + */ +typedef enum { + G_SPAWN_LEAVE_DESCRIPTORS_OPEN = 1, + G_SPAWN_DO_NOT_REAP_CHILD = 1 << 1, + G_SPAWN_SEARCH_PATH = 1 << 2, + G_SPAWN_STDOUT_TO_DEV_NULL = 1 << 3, + G_SPAWN_STDERR_TO_DEV_NULL = 1 << 4, + G_SPAWN_CHILD_INHERITS_STDIN = 1 << 5, + G_SPAWN_FILE_AND_ARGV_ZERO = 1 << 6 +} GSpawnFlags; + +typedef void (*GSpawnChildSetupFunc) (gpointer user_data); + +gboolean g_spawn_command_line_sync (const gchar *command_line, gchar **standard_output, gchar **standard_error, gint *exit_status, GError **error); +gboolean g_spawn_async_with_pipes (const gchar *working_directory, gchar **argv, gchar **envp, GSpawnFlags flags, GSpawnChildSetupFunc child_setup, + gpointer user_data, GPid *child_pid, gint *standard_input, gint *standard_output, gint *standard_error, GError **error); + + +/* + * Timer + */ +typedef struct _GTimer GTimer; + +GTimer *g_timer_new (void); +void g_timer_destroy (GTimer *timer); +gdouble g_timer_elapsed (GTimer *timer, gulong *microseconds); +void g_timer_stop (GTimer *timer); +void g_timer_start (GTimer *timer); + +/* + * Date and time + */ +typedef struct { + glong tv_sec; + glong tv_usec; +} GTimeVal; + +void g_get_current_time (GTimeVal *result); +void g_usleep (gulong microseconds); + +/* + * File + */ + +gpointer g_file_error_quark (void); + +#define G_FILE_ERROR g_file_error_quark () + +typedef enum { + G_FILE_ERROR_EXIST, + G_FILE_ERROR_ISDIR, + G_FILE_ERROR_ACCES, + G_FILE_ERROR_NAMETOOLONG, + G_FILE_ERROR_NOENT, + G_FILE_ERROR_NOTDIR, + G_FILE_ERROR_NXIO, + G_FILE_ERROR_NODEV, + G_FILE_ERROR_ROFS, + G_FILE_ERROR_TXTBSY, + G_FILE_ERROR_FAULT, + G_FILE_ERROR_LOOP, + G_FILE_ERROR_NOSPC, + G_FILE_ERROR_NOMEM, + G_FILE_ERROR_MFILE, + G_FILE_ERROR_NFILE, + G_FILE_ERROR_BADF, + G_FILE_ERROR_INVAL, + G_FILE_ERROR_PIPE, + G_FILE_ERROR_AGAIN, + G_FILE_ERROR_INTR, + G_FILE_ERROR_IO, + G_FILE_ERROR_PERM, + G_FILE_ERROR_NOSYS, + G_FILE_ERROR_FAILED +} GFileError; + +typedef enum { + G_FILE_TEST_IS_REGULAR = 1 << 0, + G_FILE_TEST_IS_SYMLINK = 1 << 1, + G_FILE_TEST_IS_DIR = 1 << 2, + G_FILE_TEST_IS_EXECUTABLE = 1 << 3, + G_FILE_TEST_EXISTS = 1 << 4 +} GFileTest; + + +gboolean g_file_set_contents (const gchar *filename, const gchar *contents, gssize length, GError **error); +gboolean g_file_get_contents (const gchar *filename, gchar **contents, gsize *length, GError **error); +GFileError g_file_error_from_errno (gint err_no); +gint g_file_open_tmp (const gchar *tmpl, gchar **name_used, GError **error); +gboolean g_file_test (const gchar *filename, GFileTest test); + +#define g_open open +#define g_rename rename +#define g_stat stat +#define g_unlink unlink +#define g_fopen fopen +#define g_lstat lstat +#define g_rmdir rmdir +#define g_mkstemp mkstemp +#define g_ascii_isdigit isdigit +#define g_ascii_strtod strtod +#define g_ascii_isalnum isalnum + +/* + * Pattern matching + */ +typedef struct _GPatternSpec GPatternSpec; +GPatternSpec * g_pattern_spec_new (const gchar *pattern); +void g_pattern_spec_free (GPatternSpec *pspec); +gboolean g_pattern_match_string (GPatternSpec *pspec, const gchar *string); + +/* + * Directory + */ +typedef struct _GDir GDir; +GDir *g_dir_open (const gchar *path, guint flags, GError **error); +const gchar *g_dir_read_name (GDir *dir); +void g_dir_rewind (GDir *dir); +void g_dir_close (GDir *dir); + +int g_mkdir_with_parents (const gchar *pathname, int mode); +#define g_mkdir mkdir + +/* + * GMarkup + */ +typedef struct _GMarkupParseContext GMarkupParseContext; + +typedef enum +{ + G_MARKUP_DO_NOT_USE_THIS_UNSUPPORTED_FLAG = 1 << 0, + G_MARKUP_TREAT_CDATA_AS_TEXT = 1 << 1 +} GMarkupParseFlags; + +typedef struct { + void (*start_element) (GMarkupParseContext *context, + const gchar *element_name, + const gchar **attribute_names, + const gchar **attribute_values, + gpointer user_data, + GError **error); + + void (*end_element) (GMarkupParseContext *context, + const gchar *element_name, + gpointer user_data, + GError **error); + + void (*text) (GMarkupParseContext *context, + const gchar *text, + gsize text_len, + gpointer user_data, + GError **error); + + void (*passthrough) (GMarkupParseContext *context, + const gchar *passthrough_text, + gsize text_len, + gpointer user_data, + GError **error); + void (*error) (GMarkupParseContext *context, + GError *error, + gpointer user_data); +} GMarkupParser; + +GMarkupParseContext *g_markup_parse_context_new (const GMarkupParser *parser, + GMarkupParseFlags flags, + gpointer user_data, + GDestroyNotify user_data_dnotify); +void g_markup_parse_context_free (GMarkupParseContext *context); +gboolean g_markup_parse_context_parse (GMarkupParseContext *context, + const gchar *text, gssize text_len, + GError **error); +gboolean g_markup_parse_context_end_parse (GMarkupParseContext *context, + GError **error); + +/* + * Character set conversion + */ +typedef struct _GIConv *GIConv; + +gsize g_iconv (GIConv cd, gchar **inbytes, gsize *inbytesleft, gchar **outbytes, gsize *outbytesleft); +GIConv g_iconv_open (const gchar *to_charset, const gchar *from_charset); +int g_iconv_close (GIConv cd); + +gboolean g_get_charset (G_CONST_RETURN char **charset); +gchar *g_locale_to_utf8 (const gchar *opsysstring, gssize len, + gsize *bytes_read, gsize *bytes_written, + GError **error); +gchar *g_locale_from_utf8 (const gchar *utf8string, gssize len, gsize *bytes_read, + gsize *bytes_written, GError **error); +gchar *g_filename_from_utf8 (const gchar *utf8string, gssize len, gsize *bytes_read, + gsize *bytes_written, GError **error); +gchar *g_convert (const gchar *str, gssize len, + const gchar *to_codeset, const gchar *from_codeset, + gsize *bytes_read, gsize *bytes_written, GError **error); + +/* + * Unicode manipulation + */ +extern const guchar g_utf8_jump_table[256]; + +gboolean g_utf8_validate (const gchar *str, gssize max_len, const gchar **end); +gunichar g_utf8_get_char_validated (const gchar *str, gssize max_len); +gchar *g_utf8_find_prev_char (const char *str, const char *p); +gchar *g_utf8_prev_char (const char *str); +#define g_utf8_next_char(p) ((p) + g_utf8_jump_table[(guchar)(*p)]) +gunichar g_utf8_get_char (const gchar *src); +glong g_utf8_strlen (const gchar *str, gssize max); +gchar *g_utf8_offset_to_pointer (const gchar *str, glong offset); +glong g_utf8_pointer_to_offset (const gchar *str, const gchar *pos); + +/* + * priorities + */ +#define G_PRIORITY_DEFAULT 0 +#define G_PRIORITY_DEFAULT_IDLE 200 + +#define GUINT16_SWAP_LE_BE_CONSTANT(x) ((((guint16) x) >> 8) | ((((guint16) x) << 8))) + +#define GUINT16_SWAP_LE_BE(x) ((guint16) (((guint16) x) >> 8) | ((((guint16)(x)) & 0xff) << 8)) +#define GUINT32_SWAP_LE_BE(x) ((guint32) \ + ( (((guint32) (x)) << 24)| \ + ((((guint32) (x)) & 0xff0000) >> 8) | \ + ((((guint32) (x)) & 0xff00) << 8) | \ + (((guint32) (x)) >> 24)) ) + +#define GUINT64_SWAP_LE_BE(x) ((guint64) (((guint64)(GUINT32_SWAP_LE_BE(((guint64)x) & 0xffffffff))) << 32) | \ + GUINT32_SWAP_LE_BE(((guint64)x) >> 32)) + + + +#if G_BYTE_ORDER == G_LITTLE_ENDIAN +# define GUINT64_FROM_BE(x) GUINT64_SWAP_LE_BE(x) +# define GUINT32_FROM_BE(x) GUINT32_SWAP_LE_BE(x) +# define GUINT16_FROM_BE(x) GUINT16_SWAP_LE_BE(x) +# define GUINT_FROM_BE(x) GUINT32_SWAP_LE_BE(x) +# define GUINT64_FROM_LE(x) (x) +# define GUINT32_FROM_LE(x) (x) +# define GUINT16_FROM_LE(x) (x) +# define GUINT_FROM_LE(x) (x) +# define GUINT64_TO_BE(x) GUINT64_SWAP_LE_BE(x) +# define GUINT32_TO_BE(x) GUINT32_SWAP_LE_BE(x) +# define GUINT16_TO_BE(x) GUINT16_SWAP_LE_BE(x) +# define GUINT_TO_BE(x) GUINT32_SWAP_LE_BE(x) +# define GUINT64_TO_LE(x) (x) +# define GUINT32_TO_LE(x) (x) +# define GUINT16_TO_LE(x) (x) +# define GUINT_TO_LE(x) (x) +#else +# define GUINT64_FROM_BE(x) (x) +# define GUINT32_FROM_BE(x) (x) +# define GUINT16_FROM_BE(x) (x) +# define GUINT_FROM_BE(x) (x) +# define GUINT64_FROM_LE(x) GUINT64_SWAP_LE_BE(x) +# define GUINT32_FROM_LE(x) GUINT32_SWAP_LE_BE(x) +# define GUINT16_FROM_LE(x) GUINT16_SWAP_LE_BE(x) +# define GUINT_FROM_LE(x) GUINT32_SWAP_LE_BE(x) +# define GUINT64_TO_BE(x) (x) +# define GUINT32_TO_BE(x) (x) +# define GUINT16_TO_BE(x) (x) +# define GUINT_TO_BE(x) (x) +# define GUINT64_TO_LE(x) GUINT64_SWAP_LE_BE(x) +# define GUINT32_TO_LE(x) GUINT32_SWAP_LE_BE(x) +# define GUINT16_TO_LE(x) GUINT16_SWAP_LE_BE(x) +# define GUINT_TO_LE(x) GUINT32_SWAP_LE_BE(x) +#endif + +#define GINT64_FROM_BE(x) (GUINT64_TO_BE (x)) +#define GINT32_FROM_BE(x) (GUINT32_TO_BE (x)) +#define GINT16_FROM_BE(x) (GUINT16_TO_BE (x)) +#define GINT64_FROM_LE(x) (GUINT64_TO_LE (x)) +#define GINT32_FROM_LE(x) (GUINT32_TO_LE (x)) +#define GINT16_FROM_LE(x) (GUINT16_TO_LE (x)) + +#define _EGLIB_MAJOR 2 +#define _EGLIB_MIDDLE 4 +#define _EGLIB_MINOR 0 + +#define GLIB_CHECK_VERSION(a,b,c) ((a < _EGLIB_MAJOR) || (a == _EGLIB_MAJOR && (b < _EGLIB_MIDDLE || (b == _EGLIB_MIDDLE && c <= _EGLIB_MINOR)))) + +G_END_DECLS + +#endif + + + diff --git a/mta-mono/vendor/eglib/gmodule.h b/mta-mono/vendor/eglib/gmodule.h new file mode 100644 index 0000000..ee89683 --- /dev/null +++ b/mta-mono/vendor/eglib/gmodule.h @@ -0,0 +1,37 @@ +#ifndef __GLIB_GMODULE_H +#define __GLIB_GMODULE_H + +#include + +#define G_MODULE_IMPORT extern +#ifdef G_OS_WIN32 +#define G_MODULE_EXPORT __declspec(dllexport) +#else +#define G_MODULE_EXPORT +#endif + +G_BEGIN_DECLS + +/* + * Modules + */ +typedef enum { + G_MODULE_BIND_LAZY = 0x01, + G_MODULE_BIND_LOCAL = 0x02, + G_MODULE_BIND_MASK = 0x03 +} GModuleFlags; +typedef struct _GModule GModule; + +GModule *g_module_open (const gchar *file, GModuleFlags flags); +gboolean g_module_symbol (GModule *module, const gchar *symbol_name, + gpointer *symbol); +const gchar *g_module_error (void); +gboolean g_module_close (GModule *module); +gchar * g_module_build_path (const gchar *directory, const gchar *module_name); + +extern char *gmodule_libprefix; +extern char *gmodule_libsuffix; + +G_END_DECLS + +#endif diff --git a/mta-mono/vendor/eglib/sort.frag.h b/mta-mono/vendor/eglib/sort.frag.h new file mode 100644 index 0000000..6dc1950 --- /dev/null +++ b/mta-mono/vendor/eglib/sort.frag.h @@ -0,0 +1,208 @@ +/* + * sort.frag.h: Common implementation of linked-list sorting + * + * Author: + * Raja R Harinath (rharinath@novell.com) + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * (C) 2006 Novell, Inc. + */ + +/* + * This code requires a typedef named 'list_node' for the list node. It + * is assumed that the list type is the type of a pointer to a list + * node, and that the node has a field named 'next' that implements to + * the linked list. No additional invariant is maintained (e.g. the + * 'prev' pointer of a doubly-linked list node is _not_ updated). Any + * invariant would require a post-processing pass to fix matters if + * necessary. + */ +typedef list_node *digit; + +/* + * The maximum possible depth of the merge tree + * = ceiling (log2 (maximum number of list nodes)) + * = ceiling (log2 (maximum possible memory size/size of each list node)) + * = number of bits in 'size_t' - floor (log2 (sizeof digit)) + * Also, each list in sort_info is at least 2 nodes long: we can reduce the depth by 1 + */ +#define FLOOR_LOG2(x) (((x)>=2) + ((x)>=4) + ((x)>=8) + ((x)>=16) + ((x)>=32) + ((x)>=64) + ((x)>=128)) +#define MAX_RANKS ((sizeof (size_t) * 8) - FLOOR_LOG2(sizeof (list_node)) - 1) + +struct sort_info +{ + int min_rank, n_ranks; + GCompareFunc func; + + /* Invariant: ranks[i] == NULL || length(ranks[i]) >= 2**(i+1) */ + list_node *ranks [MAX_RANKS]; /* ~ 128 bytes on 32bit, ~ 512 bytes on 64bit */ +}; + +static inline void +init_sort_info (struct sort_info *si, GCompareFunc func) +{ + si->min_rank = si->n_ranks = 0; + si->func = func; + /* we don't need to initialize si->ranks, since we never lookup past si->n_ranks. */ +} + +static inline list_node * +merge_lists (list_node *first, list_node *second, GCompareFunc func) +{ + /* merge the two lists */ + list_node *list = NULL; + list_node **pos = &list; + while (first && second) { + if (func (first->data, second->data) > 0) { + *pos = second; + second = second->next; + } else { + *pos = first; + first = first->next; + } + pos = &((*pos)->next); + } + *pos = first ? first : second; + return list; +} + +/* Pre-condition: upto <= si->n_ranks, list == NULL || length(list) == 1 */ +static inline list_node * +sweep_up (struct sort_info *si, list_node *list, int upto) +{ +#if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 406) + /* + * GCC incorrectly thinks we're writing below si->ranks array bounds. + */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Warray-bounds" +#endif + + int i; + for (i = si->min_rank; i < upto; ++i) { + list = merge_lists (si->ranks [i], list, si->func); + si->ranks [i] = NULL; + } + return list; + +#if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 406) +#pragma GCC diagnostic pop +#endif +} + +/* + * The 'ranks' array essentially captures the recursion stack of a mergesort. + * The merge tree is built in a bottom-up manner. The control loop for + * updating the 'ranks' array is analogous to incrementing a binary integer, + * and the O(n) time for counting upto n translates to O(n) merges when + * inserting rank-0 lists. When we plug in the sizes of the lists involved in + * those merges, we get the O(n log n) time for the sort. + * + * Inserting higher-ranked lists reduce the height of the merge tree, and also + * eliminate a lot of redundant comparisons when merging two lists that would've + * been part of the same run. Adding a rank-i list is analogous to incrementing + * a binary integer by 2**i in one operation, thus sharing a similar speedup. + * + * When inserting higher-ranked lists, we choose to clear out the lower ranks + * in the interests of keeping the sort stable, but this makes analysis harder. + * Note that clearing the lower-ranked lists is O(length(list))-- thus it + * shouldn't affect the O(n log n) behaviour. IOW, inserting one rank-i list + * is equivalent to inserting 2**i rank-0 lists, thus even if we do i additional + * merges in the clearing-out (taking at most 2**i time) we are still fine. + */ + +#define stringify2(x) #x +#define stringify(x) stringify2(x) + +/* Pre-condition: 2**(rank+1) <= length(list) < 2**(rank+2) (therefore: length(list) >= 2) */ +static inline void +insert_list (struct sort_info *si, list_node* list, int rank) +{ +#if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 406) + /* + * GCC incorrectly thinks we're writing below si->ranks array bounds. + */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Warray-bounds" +#endif + + int i; + + if (rank > si->n_ranks) { + if (rank > MAX_RANKS) { + g_warning ("Rank '%d' should not exceed " stringify (MAX_RANKS), rank); + rank = MAX_RANKS; + } + list = merge_lists (sweep_up (si, NULL, si->n_ranks), list, si->func); + for (i = si->n_ranks; i < rank; ++i) + si->ranks [i] = NULL; + } else { + if (rank) + list = merge_lists (sweep_up (si, NULL, rank), list, si->func); + for (i = rank; i < si->n_ranks && si->ranks [i]; ++i) { + list = merge_lists (si->ranks [i], list, si->func); + si->ranks [i] = NULL; + } + } + + if (i == MAX_RANKS) /* Will _never_ happen: so we can just devolve into quadratic ;-) */ + --i; + if (i >= si->n_ranks) + si->n_ranks = i + 1; + si->min_rank = i; + si->ranks [i] = list; + +#if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 406) +#pragma GCC diagnostic pop +#endif +} + +#undef stringify2 +#undef stringify +#undef MAX_RANKS +#undef FLOOR_LOG2 + +/* A non-recursive mergesort */ +static inline digit +do_sort (list_node* list, GCompareFunc func) +{ + struct sort_info si; + + init_sort_info (&si, func); + + while (list && list->next) { + list_node* next = list->next; + list_node* tail = next->next; + + if (func (list->data, next->data) > 0) { + next->next = list; + next = list; + list = list->next; + } + next->next = NULL; + + insert_list (&si, list, 0); + + list = tail; + } + + return sweep_up (&si, list, si.n_ranks); +} diff --git a/mta-mono/vendor/eglib/unicode-data.h b/mta-mono/vendor/eglib/unicode-data.h new file mode 100644 index 0000000..1cd75f3 --- /dev/null +++ b/mta-mono/vendor/eglib/unicode-data.h @@ -0,0 +1,2152 @@ +/* +This file is automatically generated by ucd.exe. +The source for this generator should be in Mono repository +(mcs/class/corlib/Mono.Globalization.Unicode directory). +*/ + +#ifndef __UNICODE_DATA_H +#define __UNICODE_DATA_H + +#include + + +/* ======== Structures ======== */ +typedef struct { + guint32 codepoint; + guint32 upper; + guint32 title; +} SimpleTitlecaseMapping; +typedef struct { + guint32 start; + guint32 end; +} CodePointRange; +typedef struct { + guint32 upper; + guint32 lower; +} SimpleCaseMapping; + +/* ======== Unicode Categories ======== */ +static const guint8 unicode_category_ranges_count = 11; +static const CodePointRange unicode_category_ranges [] = { +{0x000000, 0x003400}, +{0x004DC0, 0x004E00}, +{0x00A000, 0x00AA80}, +{0x00F900, 0x010000}, +{0x010000, 0x0104C0}, +{0x010800, 0x010A80}, +{0x012000, 0x012480}, +{0x01D000, 0x01D800}, +{0x01F000, 0x01F0C0}, +{0x02F800, 0x02FA40}, +{0x0E0000, 0x0E0200}, +{0, 0}}; +static const guint8 unicode_category_table0 [] = { + /* ==== 0-3400 ==== */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 29,21,21,21,23,21,21,21,22,18,21,25,21,17,21,21, + 13,13,13,13,13,13,13,13,13,13,21,21,25,25,25,21, + 21,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9,22,21,18,24,16, + 24,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,22,25,18,25,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 29,21,23,23,23,23,26,26,24,26,5,20,25,1,26,24, + 26,25,15,15,24,5,26,21,24,15,5,19,15,15,15,21, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,25,9,9,9,9,9,9,9,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,25,5,5,5,5,5,5,5,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,5,9,5,9,5,9,5,5,9,5,9,5,9,5,9, + 5,9,5,9,5,9,5,9,5,5,9,5,9,5,9,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,5,9,5,9,5,9,5,9,9,5,9,5,9,5,5, + 5,9,9,5,9,5,9,9,5,9,9,9,5,5,9,9, + 9,9,5,9,9,5,9,9,9,5,5,5,9,9,5,9, + 9,5,9,5,9,5,9,9,5,9,5,5,9,5,9,9, + 5,9,9,9,5,9,5,9,9,5,5,7,9,5,5,5, + 7,7,7,7,9,8,5,9,8,5,9,8,5,9,5,9, + 5,9,5,9,5,9,5,9,5,9,5,9,5,5,9,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 5,9,8,5,9,5,9,9,9,5,9,5,9,5,9,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,5,9,5,5,5,5,5,5,5,9,9,5,9,9,5, + 5,9,5,9,9,9,9,5,9,5,9,5,9,5,9,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,7,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, + 6,6,24,24,24,24,6,6,6,6,6,6,6,6,6,6, + 6,6,24,24,24,24,24,24,24,24,24,24,24,24,24,24, + 6,6,6,6,6,24,24,24,24,24,24,24,6,24,6,24, + 24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, + 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, + 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, + 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, + 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, + 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, + 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, + 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, + 9,5,9,5,6,24,9,5,0,0,6,5,5,5,21,0, + 0,0,0,0,24,24,9,21,9,9,9,0,9,0,9,9, + 5,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,0,9,9,9,9,9,9,9,9,9,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,9, + 5,5,9,9,9,5,5,5,9,5,9,5,9,5,9,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 5,5,5,5,9,5,25,9,5,9,9,5,5,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,5,26,12,12,12,12,12,11,11,9,5,9,5,9,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,9,5,9,5,9,5,9,5,9,5,9,5,9,5,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,5,9,5,0,0,0,0,0,0,0,0,0,0,0,0, + 0,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,0,0,6,21,21,21,21,21,21, + 0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,0,21,17,0,0,0,0,0, + 0,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, + 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, + 12,12,12,12,12,12,12,12,12,12,12,12,12,12,17,12, + 21,12,12,21,12,12,21,12,0,0,0,0,0,0,0,0, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,0,0,0,0,0, + 7,7,7,21,21,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,0,0,25,25,25,21,21,23,21,21,26,26, + 12,12,12,12,12,12,12,12,12,12,12,21,0,0,21,21, + 0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 6,7,7,7,7,7,7,7,7,7,7,12,12,12,12,12, + 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,0, + 13,13,13,13,13,13,13,13,13,13,21,21,21,21,7,7, + 12,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,21,7,12,12,12,12,12,12,12,1,11,12, + 12,12,12,12,12,6,6,12,12,26,12,12,12,12,7,7, + 13,13,13,13,13,13,13,13,13,13,7,7,7,26,26,7, + 21,21,21,21,21,21,21,21,21,21,21,21,21,21,0,1, + 7,12,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, + 12,12,12,12,12,12,12,12,12,12,12,0,0,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,12,12,12,12,12,12,12,12,12,12, + 12,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 13,13,13,13,13,13,13,13,13,13,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,12,12,12,12,12, + 12,12,12,12,6,6,26,21,21,21,6,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,12,12,10,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,0,0,12,7,10,10, + 10,12,12,12,12,12,12,12,12,10,10,10,10,12,0,0, + 7,12,12,12,12,0,0,0,7,7,7,7,7,7,7,7, + 7,7,12,12,21,21,13,13,13,13,13,13,13,13,13,13, + 21,6,7,0,0,0,0,0,0,0,0,7,7,7,7,7, + 0,12,10,10,0,7,7,7,7,7,7,7,7,0,0,7, + 7,0,0,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,0,7,7,7,7,7,7, + 7,0,7,0,0,0,7,7,7,7,0,0,12,7,10,10, + 10,12,12,12,12,0,0,10,10,0,0,10,10,12,7,0, + 0,0,0,0,0,0,0,10,0,0,0,0,7,7,0,7, + 7,7,12,12,0,0,13,13,13,13,13,13,13,13,13,13, + 7,7,23,23,15,15,15,15,15,15,26,0,0,0,0,0, + 0,12,12,10,0,7,7,7,7,7,7,0,0,0,0,7, + 7,0,0,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,0,7,7,7,7,7,7, + 7,0,7,7,0,7,7,0,7,7,0,0,12,0,10,10, + 10,12,12,0,0,0,0,12,12,0,0,12,12,12,0,0, + 0,12,0,0,0,0,0,0,0,7,7,7,7,0,7,0, + 0,0,0,0,0,0,13,13,13,13,13,13,13,13,13,13, + 12,12,7,7,7,12,0,0,0,0,0,0,0,0,0,0, + 0,12,12,10,0,7,7,7,7,7,7,7,7,7,0,7, + 7,7,0,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,0,7,7,7,7,7,7, + 7,0,7,7,0,7,7,7,7,7,0,0,12,7,10,10, + 10,12,12,12,12,12,0,12,12,10,0,10,10,12,0,0, + 7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 7,7,12,12,0,0,13,13,13,13,13,13,13,13,13,13, + 0,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,12,10,10,0,7,7,7,7,7,7,7,7,0,0,7, + 7,0,0,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,0,7,7,7,7,7,7, + 7,0,7,7,0,7,7,7,7,7,0,0,12,7,10,12, + 10,12,12,12,12,0,0,10,10,0,0,10,10,12,0,0, + 0,0,0,0,0,0,12,10,0,0,0,0,7,7,0,7, + 7,7,12,12,0,0,13,13,13,13,13,13,13,13,13,13, + 26,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,12,7,0,7,7,7,7,7,7,0,0,0,7,7, + 7,0,7,7,7,7,0,0,0,7,7,0,7,0,7,7, + 0,0,0,7,7,0,0,0,7,7,7,0,0,0,7,7, + 7,7,7,7,7,7,7,7,7,7,0,0,0,0,10,10, + 12,10,10,0,0,0,10,10,10,0,10,10,10,12,0,0, + 7,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,13,13,13,13,13,13,13,13,13,13, + 15,15,15,26,26,26,26,26,26,23,26,0,0,0,0,0, + 0,10,10,10,0,7,7,7,7,7,7,7,7,0,7,7, + 7,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,0,7,7,7,7,7,7, + 7,7,7,7,0,7,7,7,7,7,0,0,0,7,12,12, + 12,10,10,10,10,0,12,12,12,0,12,12,12,12,0,0, + 0,0,0,0,0,12,12,0,7,7,0,0,0,0,0,0, + 7,7,12,12,0,0,13,13,13,13,13,13,13,13,13,13, + 0,0,0,0,0,0,0,0,15,15,15,15,15,15,15,26, + 0,0,10,10,0,7,7,7,7,7,7,7,7,0,7,7, + 7,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,0,7,7,7,7,7,7, + 7,7,7,7,0,7,7,7,7,7,0,0,12,7,10,12, + 10,10,10,10,10,0,12,10,10,0,10,10,12,12,0,0, + 0,0,0,0,0,10,10,0,0,0,0,0,0,0,7,0, + 7,7,12,12,0,0,13,13,13,13,13,13,13,13,13,13, + 0,26,26,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,10,10,0,7,7,7,7,7,7,7,7,0,7,7, + 7,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,0,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,0,0,0,7,10,10, + 10,12,12,12,12,0,10,10,10,0,10,10,10,12,0,0, + 0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0, + 7,7,12,12,0,0,13,13,13,13,13,13,13,13,13,13, + 15,15,15,15,15,15,0,0,0,26,7,7,7,7,7,7, + 0,0,10,10,0,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,0,0,0,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,0,7,7,7,7,7,7,7,7,7,0,7,0,0, + 7,7,7,7,7,7,7,0,0,0,12,0,0,0,0,10, + 10,10,12,12,12,0,12,0,10,10,10,10,10,10,10,10, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,10,10,21,0,0,0,0,0,0,0,0,0,0,0, + 0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,12,7,7,12,12,12,12,12,12,12,0,0,0,0,23, + 7,7,7,7,7,7,6,12,12,12,12,12,12,12,12,21, + 13,13,13,13,13,13,13,13,13,13,21,21,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,7,7,0,7,0,0,7,7,0,7,0,0,7,0,0, + 0,0,0,0,7,7,7,7,0,7,7,7,7,7,7,7, + 0,7,7,7,0,7,0,7,0,0,7,7,0,7,7,7, + 7,12,7,7,12,12,12,12,12,12,0,12,12,7,0,0, + 7,7,7,7,7,0,6,0,12,12,12,12,12,12,0,0, + 13,13,13,13,13,13,13,13,13,13,0,0,7,7,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 7,26,26,26,21,21,21,21,21,21,21,21,21,21,21,21, + 21,21,21,26,26,26,26,26,12,12,26,26,26,26,26,26, + 13,13,13,13,13,13,13,13,13,13,15,15,15,15,15,15, + 15,15,15,15,26,12,26,12,26,12,22,18,22,18,10,10, + 7,7,7,7,7,7,7,7,0,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0, + 0,12,12,12,12,12,12,12,12,12,12,12,12,12,12,10, + 12,12,12,12,12,21,12,12,7,7,7,7,0,0,0,0, + 12,12,12,12,12,12,12,12,0,12,12,12,12,12,12,12, + 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, + 12,12,12,12,12,12,12,12,12,12,12,12,12,0,26,26, + 26,26,26,26,26,26,12,26,26,26,26,26,26,0,26,26, + 21,21,21,21,21,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,10,10,12,12,12, + 12,10,12,12,12,12,12,12,10,12,12,10,10,12,12,7, + 13,13,13,13,13,13,13,13,13,13,21,21,21,21,21,21, + 7,7,7,7,7,7,10,10,12,12,7,7,7,7,12,12, + 12,7,10,10,10,7,7,10,10,10,10,10,10,10,7,7, + 7,12,12,12,12,7,7,7,7,7,7,7,7,7,7,7, + 7,7,12,10,10,12,12,10,10,10,10,10,10,12,7,10, + 13,13,13,13,13,13,13,13,13,13,0,0,0,0,26,26, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,21,6,0,0,0, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,0,0,0,0,0,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,0,0,0,0,0,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,0,0,0,0,0,0, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,0,7,7,7,7,0,0, + 7,7,7,7,7,7,7,0,7,0,7,7,7,7,0,0, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,0,7,7,7,7,0,0, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,0,7,7,7,7,0,0,7,7,7,7,7,7,7,0, + 7,0,7,7,7,7,0,0,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,0,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,0,7,7,7,7,0,0,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,0,0,0,0,12, + 26,21,21,21,21,21,21,21,21,15,15,15,15,15,15,15, + 15,15,15,15,15,15,15,15,15,15,15,15,15,0,0,0, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 26,26,26,26,26,26,26,26,26,26,0,0,0,0,0,0, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,0,0,0,0,0,0,0,0,0,0,0, + 0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,21,21,7, + 7,7,7,7,7,7,7,0,0,0,0,0,0,0,0,0, + 29,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,22,18,0,0,0, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,21,21,21,14,14, + 14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 7,7,7,7,7,7,7,7,7,7,7,7,7,0,7,7, + 7,7,12,12,12,0,0,0,0,0,0,0,0,0,0,0, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,12,12,12,21,21,0,0,0,0,0,0,0,0,0, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,12,12,0,0,0,0,0,0,0,0,0,0,0,0, + 7,7,7,7,7,7,7,7,7,7,7,7,7,0,7,7, + 7,0,12,12,0,0,0,0,0,0,0,0,0,0,0,0, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,1,1,10,12,12,12,12,12,12,12,10,10, + 10,10,10,10,10,10,12,10,10,12,12,12,12,12,12,12, + 12,12,12,12,21,21,21,6,21,21,21,23,7,12,0,0, + 13,13,13,13,13,13,13,13,13,13,0,0,0,0,0,0, + 15,15,15,15,15,15,15,15,15,15,0,0,0,0,0,0, + 21,21,21,21,21,21,17,21,21,21,21,12,12,12,29,0, + 13,13,13,13,13,13,13,13,13,13,0,0,0,0,0,0, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,6,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,0,0,0,0,0,0,0,0, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,12,7,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0, + 12,12,12,10,10,10,10,12,12,10,10,10,0,0,0,0, + 10,10,12,10,10,10,10,10,10,12,12,12,0,0,0,0, + 26,0,0,0,21,21,13,13,13,13,13,13,13,13,13,13, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,0, + 7,7,7,7,7,0,0,0,0,0,0,0,0,0,0,0, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,0,0,0,0,0,0, + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, + 10,7,7,7,7,7,7,7,10,10,0,0,0,0,0,0, + 13,13,13,13,13,13,13,13,13,13,0,0,0,0,21,21, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,12,12,10,10,10,0,0,21,21, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 12,12,12,12,10,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,12,10,12,12,12,12,12,10,12,10,10,10, + 10,10,12,10,10,7,7,7,7,7,7,7,0,0,0,0, + 13,13,13,13,13,13,13,13,13,13,21,21,21,21,21,21, + 21,26,26,26,26,26,26,26,26,26,26,12,12,12,12,12, + 12,12,12,12,26,26,26,26,26,26,26,26,26,0,0,0, + 12,12,10,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,10,12,12,12,12,10,10,12,12,10,0,0,0,7,7, + 13,13,13,13,13,13,13,13,13,13,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,10,10,10,10,10,10,10,10,12,12,12,12, + 12,12,12,12,10,10,12,12,0,0,0,21,21,21,21,21, + 13,13,13,13,13,13,13,13,13,13,0,0,0,7,7,7, + 13,13,13,13,13,13,13,13,13,13,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,6,6,6,6,6,6,21,21, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6, + 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, + 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, + 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, + 6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,6,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6, + 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, + 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, + 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, + 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, + 12,12,12,12,12,12,12,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,12, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,5,9,5,9,5,5,5,5,5,5,5,5,5,9,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 5,5,5,5,5,5,5,5,9,9,9,9,9,9,9,9, + 5,5,5,5,5,5,0,0,9,9,9,9,9,9,0,0, + 5,5,5,5,5,5,5,5,9,9,9,9,9,9,9,9, + 5,5,5,5,5,5,5,5,9,9,9,9,9,9,9,9, + 5,5,5,5,5,5,0,0,9,9,9,9,9,9,0,0, + 5,5,5,5,5,5,5,5,0,9,0,9,0,9,0,9, + 5,5,5,5,5,5,5,5,9,9,9,9,9,9,9,9, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0, + 5,5,5,5,5,5,5,5,8,8,8,8,8,8,8,8, + 5,5,5,5,5,5,5,5,8,8,8,8,8,8,8,8, + 5,5,5,5,5,5,5,5,8,8,8,8,8,8,8,8, + 5,5,5,5,5,0,5,5,9,9,9,9,8,24,5,24, + 24,24,5,5,5,0,5,5,9,9,9,9,8,24,24,24, + 5,5,5,5,0,0,5,5,9,9,9,9,0,24,24,24, + 5,5,5,5,5,5,5,5,9,9,9,9,9,24,24,24, + 0,0,5,5,5,0,5,5,9,9,9,9,8,24,24,0, + 29,29,29,29,29,29,29,29,29,29,29,1,1,1,1,1, + 17,17,17,17,17,17,21,21,20,19,22,20,20,19,22,20, + 21,21,21,21,21,21,21,21,27,28,1,1,1,1,1,29, + 21,21,21,21,21,21,21,21,21,20,19,21,21,21,21,16, + 16,21,21,21,25,22,18,21,21,21,21,21,21,21,21,21, + 21,21,25,21,16,21,21,21,21,21,21,21,21,21,21,29, + 1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1, + 15,5,0,0,15,15,15,15,15,15,25,25,25,22,18,5, + 15,15,15,15,15,15,15,15,15,15,25,25,25,22,18,0, + 6,6,6,6,6,0,0,0,0,0,0,0,0,0,0,0, + 23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23, + 23,23,23,23,23,23,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 12,12,12,12,12,12,12,12,12,12,12,12,12,11,11,11, + 11,12,11,11,11,12,12,12,12,12,12,12,12,12,12,12, + 12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 26,26,9,26,26,26,26,9,26,26,5,9,9,9,5,5, + 9,9,9,5,26,9,26,26,26,9,9,9,9,9,26,26, + 26,26,26,26,9,26,9,26,9,26,9,9,9,9,26,5, + 9,9,9,9,5,7,7,7,7,5,26,26,5,5,9,9, + 25,25,25,25,25,9,5,5,5,5,26,25,26,26,5,26, + 0,0,0,15,15,15,15,15,15,15,15,15,15,15,15,15, + 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, + 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, + 14,14,14,9,5,14,14,14,14,0,0,0,0,0,0,0, + 25,25,25,25,25,26,26,26,26,26,25,25,26,26,26,26, + 25,26,26,25,26,26,25,26,26,26,26,26,26,26,25,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,25,25, + 26,26,25,26,25,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 26,26,26,26,26,26,26,26,25,25,25,25,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 25,25,26,26,26,26,26,26,26,22,18,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,25,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,25,25,25,25, + 25,25,26,26,26,26,26,26,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 26,26,26,26,26,26,26,26,26,26,26,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, + 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, + 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, + 15,15,15,15,15,15,15,15,15,15,15,15,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,15,15,15,15,15,15, + 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,25,26,26,26,26,26,26,26,26, + 26,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,25,25,25,25,25,25,25,25, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,25, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,0,0, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,0,0,0, + 26,26,26,26,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,26,26,26,26,0,26,26,26,26,0,0,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,0,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,0,26,0,26, + 26,26,26,0,0,0,26,0,26,26,26,26,26,26,26,0, + 0,26,26,26,26,26,26,26,22,18,22,18,22,18,22,18, + 22,18,22,18,22,18,15,15,15,15,15,15,15,15,15,15, + 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, + 15,15,15,15,26,0,0,0,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 0,26,26,26,26,26,26,26,26,26,26,26,26,26,26,0, + 25,25,25,25,25,22,18,25,25,25,25,0,25,0,0,0, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,22,18,22,18,22,18,22,18,22,18, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,22,18,22,18,22,18,22,18,22,18,22,18,22, + 18,22,18,22,18,22,18,22,18,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,22,18,22,18,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,22,18,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,26,26,25,25,25,25,25,25,0,0,0, + 26,26,26,26,26,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0, + 9,5,9,9,9,5,5,9,5,9,5,9,5,9,9,9, + 0,5,9,5,5,9,5,5,5,5,5,5,5,6,0,0, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,5,9,5,5,26,26,26,26,26,26,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,21,21,21,21,15,21,21, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,0,0,0,0,0,0,0,0,0,6, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,0,0,0,0,0,0,0,0,0, + 7,7,7,7,7,7,7,0,7,7,7,7,7,7,7,0, + 7,7,7,7,7,7,7,0,7,7,7,7,7,7,7,0, + 7,7,7,7,7,7,7,0,7,7,7,7,7,7,7,0, + 7,7,7,7,7,7,7,0,7,7,7,7,7,7,7,0, + 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, + 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, + 21,21,20,19,20,19,21,21,21,20,19,21,20,19,21,21, + 21,21,21,21,21,21,21,17,21,21,17,21,20,19,21,21, + 20,19,22,18,22,18,22,18,22,18,21,21,21,21,21,6, + 21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,0,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,0,0,0,0,0,0,0,0,0,0,0,0, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 26,26,26,26,26,26,26,26,26,26,26,26,0,0,0,0, + 29,21,21,21,26,6,7,14,22,18,22,18,22,18,22,18, + 22,18,26,26,22,18,22,18,22,18,22,18,17,22,18,18, + 26,14,14,14,14,14,14,14,14,14,12,12,12,12,12,12, + 17,6,6,6,6,6,26,26,14,14,14,6,7,21,26,26, + 0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,0,0,12,12,24,24,6,6,7, + 17,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,21,6,6,6,7, + 0,0,0,0,0,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,0, + 0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0, + 26,26,15,15,15,15,26,26,26,26,26,26,26,26,26,26, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,0,0,0,0,0,0,0,0, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,0,0,0,0,0,0,0,0,0,0,0,0, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,0, + 15,15,15,15,15,15,15,15,15,15,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,0,0,0,0,0,0,0,0,0,0,0,0, + 26,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 15,15,15,15,15,15,15,15,15,15,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,0, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 0}; +static const guint8 unicode_category_table1 [] = { + /* ==== 4DC0-4E00 ==== */ + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 0}; +static const guint8 unicode_category_table2 [] = { + /* ==== A000-AA80 ==== */ + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,6,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,6,21,21,21, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 13,13,13,13,13,13,13,13,13,13,7,7,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 0,0,9,5,9,5,9,5,9,5,9,5,9,5,7,12, + 11,11,11,21,0,0,0,0,0,0,0,0,12,12,21,6, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,5,9,5,9,5,9,5,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, + 24,24,24,24,24,24,24,6,6,6,6,6,6,6,6,6, + 24,24,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 5,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 9,5,9,5,9,5,9,5,9,5,9,5,9,5,9,5, + 6,5,5,5,5,5,5,5,5,9,5,9,5,9,9,5, + 9,5,9,5,9,5,9,5,6,24,24,9,5,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,7,7,7,7,7, + 7,7,12,7,7,7,12,7,7,7,7,12,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,10,10,12,12,10,26,26,26,26,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,21,21,21,21,0,0,0,0,0,0,0,0, + 10,10,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,10,10,10,10,10,10,10,10,10,10,10,10, + 10,10,10,10,12,0,0,0,0,0,0,0,0,0,21,21, + 13,13,13,13,13,13,13,13,13,13,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 13,13,13,13,13,13,13,13,13,13,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,12,12,12,12,12,12,12,12,21,21, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,12,12,12,12,12,12,12,12,12, + 12,12,10,10,0,0,0,0,0,0,0,0,0,0,0,21, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,12,12,12,12,12,12,10, + 10,12,12,10,10,12,12,0,0,0,0,0,0,0,0,0, + 7,7,7,12,7,7,7,7,7,7,7,7,12,10,0,0, + 13,13,13,13,13,13,13,13,13,13,0,0,21,21,21,21, + 0}; +static const guint8 unicode_category_table3 [] = { + /* ==== F900-10000 ==== */ + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,0, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,0,0,0,0,0, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0, + 0,0,0,5,5,5,5,5,0,0,0,0,0,7,12,7, + 7,7,7,7,7,7,7,7,7,25,7,7,7,7,7,7, + 7,7,7,7,7,7,7,0,7,7,7,7,7,0,7,0, + 7,7,0,7,7,0,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,22,18, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 0,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 7,7,7,7,7,7,7,7,7,7,7,7,23,26,0,0, + 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, + 21,21,21,21,21,21,21,22,18,21,0,0,0,0,0,0, + 12,12,12,12,12,12,12,0,0,0,0,0,0,0,0,0, + 21,17,17,16,16,22,18,22,18,22,18,22,18,22,18,22, + 18,22,18,22,18,21,21,22,18,21,21,21,21,16,16,16, + 21,21,21,0,21,21,21,21,17,22,18,22,18,22,18,21, + 21,21,25,17,25,25,25,0,21,23,21,21,0,0,0,0, + 7,7,7,7,7,0,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,0,0,1, + 0,21,21,21,23,21,21,21,22,18,21,25,21,17,21,21, + 13,13,13,13,13,13,13,13,13,13,21,21,25,25,25,21, + 21,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9,22,21,18,24,16, + 24,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,22,25,18,25,22, + 18,21,22,18,21,21,7,7,7,7,7,7,7,7,7,7, + 6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,6,6, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0, + 0,0,7,7,7,7,7,7,0,0,7,7,7,7,7,7, + 0,0,7,7,7,7,7,7,0,0,7,7,7,0,0,0, + 23,23,25,24,26,23,23,0,26,25,25,25,25,26,26,0, + 0,0,0,0,0,0,0,0,0,1,1,1,26,26,0}; +static const guint8 unicode_category_table4 [] = { + /* ==== 10000-104C0 ==== */ + 7,7,7,7,7,7,7,7,7,7,7,7,0,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,0,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,0,7,7,0,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,0, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,0,0,0,0,0, + 21,21,26,0,0,0,0,15,15,15,15,15,15,15,15,15, + 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, + 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, + 15,15,15,15,0,0,0,26,26,26,26,26,26,26,26,26, + 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, + 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, + 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, + 14,14,14,14,14,15,15,15,15,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,15,0,0,0,0,0, + 26,26,26,26,26,26,26,26,26,26,26,26,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,12,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0, + 15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,14,7,7,7,7,7,7,7,7,14,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,21, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,0,0,0,0,7,7,7,7,7,7,7,7, + 21,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,0, + 13,13,13,13,13,13,13,13,13,13,0}; +static const guint8 unicode_category_table5 [] = { + /* ==== 10800-10A80 ==== */ + 7,7,7,7,7,7,0,0,7,0,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,0,7,7,0,0,0,7,0,0,7, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,15,15,15,15,0,0,0,0,0,21, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,0,0,0,0,0,21, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 7,12,12,12,0,12,12,0,0,0,0,0,12,12,12,12, + 7,7,7,7,0,7,7,7,0,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,0,0,0,0,12,12,12,0,0,0,0,12, + 15,15,15,15,15,15,15,15,0,0,0,0,0,0,0,0, + 21,21,21,21,21,21,21,21,21,0}; +static const guint8 unicode_category_table6 [] = { + /* ==== 12000-12480 ==== */ + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, + 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, + 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, + 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, + 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, + 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, + 14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0, + 21,21,21,21,0}; +static const guint8 unicode_category_table7 [] = { + /* ==== 1D000-1D800 ==== */ + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,0,0,0,0,0,0,0,0,0,0, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,0,0,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,10,10,12,12,12,26,26,26,10,10,10, + 10,10,10,1,1,1,1,1,1,1,1,12,12,12,12,12, + 12,12,12,26,26,12,12,12,12,12,12,12,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,12,12,12,12,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,12,12,12,26,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,0,0,0,0,0,0,0,0,0, + 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, + 15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,5,5, + 5,5,5,5,5,0,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,9,0,9,9, + 0,0,9,0,0,9,9,0,0,9,9,9,9,0,9,9, + 9,9,9,9,9,9,5,5,5,5,0,5,0,5,5,5, + 5,5,5,5,0,5,5,5,5,5,5,5,5,5,5,5, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,9,9,0,9,9,9,9,0,0,9,9,9, + 9,9,9,9,9,0,9,9,9,9,9,9,9,0,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,9,9,0,9,9,9,9,0, + 9,9,9,9,9,0,9,0,0,0,9,9,9,9,9,9, + 9,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,0,0,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,25,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,25,5,5,5,5, + 5,5,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9,25,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,25,5,5,5,5,5,5,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,25,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,25, + 5,5,5,5,5,5,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,25, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,25,5,5,5,5,5,5, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,25,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,25,5,5,5,5,5,5,9,5,0,0,13,13, + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, + 0}; +static const guint8 unicode_category_table8 [] = { + /* ==== 1F000-1F0C0 ==== */ + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,0,0,0,0, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,0}; +static const guint8 unicode_category_table9 [] = { + /* ==== 2F800-2FA40 ==== */ + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,0}; +static const guint8 unicode_category_table10 [] = { + /* ==== E0000-E0200 ==== */ + 0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, + 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, + 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, + 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, + 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, + 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, + 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, + 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, + 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, + 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, + 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, + 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, + 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, + 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, + 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, + 0}; +static const guint8 *unicode_category [11] = { + unicode_category_table0, + unicode_category_table1, + unicode_category_table2, + unicode_category_table3, + unicode_category_table4, + unicode_category_table5, + unicode_category_table6, + unicode_category_table7, + unicode_category_table8, + unicode_category_table9, + unicode_category_table10 +}; + +static const guint8 simple_case_map_ranges_count = 9; +static const CodePointRange simple_case_map_ranges [] = { +{0x000040, 0x000600}, +{0x001000, 0x0010D0}, +{0x001D00, 0x002000}, +{0x002100, 0x0021C0}, +{0x002480, 0x002500}, +{0x002C00, 0x002D80}, +{0x00A640, 0x00A7C0}, +{0x00FF20, 0x00FF80}, +{0x010400, 0x010480}, +{0, 0}}; +static const guint16 simple_upper_case_mapping_lowarea_table0 [] = { + /* ==== 40-600 ==== */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, + 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0x39C,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, + 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0x178, + 0,0x100,0,0x102,0,0x104,0,0x106,0,0x108,0,0x10A,0,0x10C,0,0x10E, + 0,0x110,0,0x112,0,0x114,0,0x116,0,0x118,0,0x11A,0,0x11C,0,0x11E, + 0,0x120,0,0x122,0,0x124,0,0x126,0,0x128,0,0x12A,0,0x12C,0,0x12E, + 0,0x49,0,0x132,0,0x134,0,0x136,0,0,0x139,0,0x13B,0,0x13D,0, + 0x13F,0,0x141,0,0x143,0,0x145,0,0x147,0,0,0x14A,0,0x14C,0,0x14E, + 0,0x150,0,0x152,0,0x154,0,0x156,0,0x158,0,0x15A,0,0x15C,0,0x15E, + 0,0x160,0,0x162,0,0x164,0,0x166,0,0x168,0,0x16A,0,0x16C,0,0x16E, + 0,0x170,0,0x172,0,0x174,0,0x176,0,0,0x179,0,0x17B,0,0x17D,0x53, + 0x243,0,0,0x182,0,0x184,0,0,0x187,0,0,0,0x18B,0,0,0, + 0,0,0x191,0,0,0x1F6,0,0,0,0x198,0x23D,0,0,0,0x220,0, + 0,0x1A0,0,0x1A2,0,0x1A4,0,0,0x1A7,0,0,0,0,0x1AC,0,0, + 0x1AF,0,0,0,0x1B3,0,0x1B5,0,0,0x1B8,0,0,0,0x1BC,0,0x1F7, + 0,0,0,0,0,0x1C4,0x1C4,0,0x1C7,0x1C7,0,0x1CA,0x1CA,0,0x1CD,0, + 0x1CF,0,0x1D1,0,0x1D3,0,0x1D5,0,0x1D7,0,0x1D9,0,0x1DB,0x18E,0,0x1DE, + 0,0x1E0,0,0x1E2,0,0x1E4,0,0x1E6,0,0x1E8,0,0x1EA,0,0x1EC,0,0x1EE, + 0,0,0x1F1,0x1F1,0,0x1F4,0,0,0,0x1F8,0,0x1FA,0,0x1FC,0,0x1FE, + 0,0x200,0,0x202,0,0x204,0,0x206,0,0x208,0,0x20A,0,0x20C,0,0x20E, + 0,0x210,0,0x212,0,0x214,0,0x216,0,0x218,0,0x21A,0,0x21C,0,0x21E, + 0,0,0,0x222,0,0x224,0,0x226,0,0x228,0,0x22A,0,0x22C,0,0x22E, + 0,0x230,0,0x232,0,0,0,0,0,0,0,0,0x23B,0,0,0, + 0,0,0x241,0,0,0,0,0x246,0,0x248,0,0x24A,0,0x24C,0,0x24E, + 0x2C6F,0x2C6D,0,0x181,0x186,0,0x189,0x18A,0,0x18F,0,0x190,0,0,0,0, + 0x193,0,0,0x194,0,0,0,0,0x197,0x196,0,0x2C62,0,0,0,0x19C, + 0,0x2C6E,0x19D,0,0,0x19F,0,0,0,0,0,0,0,0x2C64,0,0, + 0x1A6,0,0,0x1A9,0,0,0,0,0x1AE,0x244,0x1B1,0x1B2,0x245,0,0,0, + 0,0,0x1B7,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0x399,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0x370,0,0x372,0,0,0,0x376,0,0,0,0x3FD,0x3FE,0x3FF,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0x386,0x388,0x389,0x38A, + 0,0x391,0x392,0x393,0x394,0x395,0x396,0x397,0x398,0x399,0x39A,0x39B,0x39C,0x39D,0x39E,0x39F, + 0x3A0,0x3A1,0x3A3,0x3A3,0x3A4,0x3A5,0x3A6,0x3A7,0x3A8,0x3A9,0x3AA,0x3AB,0x38C,0x38E,0x38F,0, + 0x392,0x398,0,0,0,0x3A6,0x3A0,0x3CF,0,0x3D8,0,0x3DA,0,0x3DC,0,0x3DE, + 0,0x3E0,0,0x3E2,0,0x3E4,0,0x3E6,0,0x3E8,0,0x3EA,0,0x3EC,0,0x3EE, + 0x39A,0x3A1,0x3F9,0,0,0x395,0,0,0x3F7,0,0,0x3FA,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0x410,0x411,0x412,0x413,0x414,0x415,0x416,0x417,0x418,0x419,0x41A,0x41B,0x41C,0x41D,0x41E,0x41F, + 0x420,0x421,0x422,0x423,0x424,0x425,0x426,0x427,0x428,0x429,0x42A,0x42B,0x42C,0x42D,0x42E,0x42F, + 0x400,0x401,0x402,0x403,0x404,0x405,0x406,0x407,0x408,0x409,0x40A,0x40B,0x40C,0x40D,0x40E,0x40F, + 0,0x460,0,0x462,0,0x464,0,0x466,0,0x468,0,0x46A,0,0x46C,0,0x46E, + 0,0x470,0,0x472,0,0x474,0,0x476,0,0x478,0,0x47A,0,0x47C,0,0x47E, + 0,0x480,0,0,0,0,0,0,0,0,0,0x48A,0,0x48C,0,0x48E, + 0,0x490,0,0x492,0,0x494,0,0x496,0,0x498,0,0x49A,0,0x49C,0,0x49E, + 0,0x4A0,0,0x4A2,0,0x4A4,0,0x4A6,0,0x4A8,0,0x4AA,0,0x4AC,0,0x4AE, + 0,0x4B0,0,0x4B2,0,0x4B4,0,0x4B6,0,0x4B8,0,0x4BA,0,0x4BC,0,0x4BE, + 0,0,0x4C1,0,0x4C3,0,0x4C5,0,0x4C7,0,0x4C9,0,0x4CB,0,0x4CD,0x4C0, + 0,0x4D0,0,0x4D2,0,0x4D4,0,0x4D6,0,0x4D8,0,0x4DA,0,0x4DC,0,0x4DE, + 0,0x4E0,0,0x4E2,0,0x4E4,0,0x4E6,0,0x4E8,0,0x4EA,0,0x4EC,0,0x4EE, + 0,0x4F0,0,0x4F2,0,0x4F4,0,0x4F6,0,0x4F8,0,0x4FA,0,0x4FC,0,0x4FE, + 0,0x500,0,0x502,0,0x504,0,0x506,0,0x508,0,0x50A,0,0x50C,0,0x50E, + 0,0x510,0,0x512,0,0x514,0,0x516,0,0x518,0,0x51A,0,0x51C,0,0x51E, + 0,0x520,0,0x522,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0x531,0x532,0x533,0x534,0x535,0x536,0x537,0x538,0x539,0x53A,0x53B,0x53C,0x53D,0x53E,0x53F, + 0x540,0x541,0x542,0x543,0x544,0x545,0x546,0x547,0x548,0x549,0x54A,0x54B,0x54C,0x54D,0x54E,0x54F, + 0x550,0x551,0x552,0x553,0x554,0x555,0x556,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0}; +static const guint16 simple_upper_case_mapping_lowarea_table1 [] = { + /* ==== 1000-10D0 ==== */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0}; +static const guint16 simple_upper_case_mapping_lowarea_table2 [] = { + /* ==== 1D00-2000 ==== */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0xA77D,0,0,0,0x2C63,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0x1E00,0,0x1E02,0,0x1E04,0,0x1E06,0,0x1E08,0,0x1E0A,0,0x1E0C,0,0x1E0E, + 0,0x1E10,0,0x1E12,0,0x1E14,0,0x1E16,0,0x1E18,0,0x1E1A,0,0x1E1C,0,0x1E1E, + 0,0x1E20,0,0x1E22,0,0x1E24,0,0x1E26,0,0x1E28,0,0x1E2A,0,0x1E2C,0,0x1E2E, + 0,0x1E30,0,0x1E32,0,0x1E34,0,0x1E36,0,0x1E38,0,0x1E3A,0,0x1E3C,0,0x1E3E, + 0,0x1E40,0,0x1E42,0,0x1E44,0,0x1E46,0,0x1E48,0,0x1E4A,0,0x1E4C,0,0x1E4E, + 0,0x1E50,0,0x1E52,0,0x1E54,0,0x1E56,0,0x1E58,0,0x1E5A,0,0x1E5C,0,0x1E5E, + 0,0x1E60,0,0x1E62,0,0x1E64,0,0x1E66,0,0x1E68,0,0x1E6A,0,0x1E6C,0,0x1E6E, + 0,0x1E70,0,0x1E72,0,0x1E74,0,0x1E76,0,0x1E78,0,0x1E7A,0,0x1E7C,0,0x1E7E, + 0,0x1E80,0,0x1E82,0,0x1E84,0,0x1E86,0,0x1E88,0,0x1E8A,0,0x1E8C,0,0x1E8E, + 0,0x1E90,0,0x1E92,0,0x1E94,0,0,0,0,0,0x1E60,0,0,0,0, + 0,0x1EA0,0,0x1EA2,0,0x1EA4,0,0x1EA6,0,0x1EA8,0,0x1EAA,0,0x1EAC,0,0x1EAE, + 0,0x1EB0,0,0x1EB2,0,0x1EB4,0,0x1EB6,0,0x1EB8,0,0x1EBA,0,0x1EBC,0,0x1EBE, + 0,0x1EC0,0,0x1EC2,0,0x1EC4,0,0x1EC6,0,0x1EC8,0,0x1ECA,0,0x1ECC,0,0x1ECE, + 0,0x1ED0,0,0x1ED2,0,0x1ED4,0,0x1ED6,0,0x1ED8,0,0x1EDA,0,0x1EDC,0,0x1EDE, + 0,0x1EE0,0,0x1EE2,0,0x1EE4,0,0x1EE6,0,0x1EE8,0,0x1EEA,0,0x1EEC,0,0x1EEE, + 0,0x1EF0,0,0x1EF2,0,0x1EF4,0,0x1EF6,0,0x1EF8,0,0x1EFA,0,0x1EFC,0,0x1EFE, + 0x1F08,0x1F09,0x1F0A,0x1F0B,0x1F0C,0x1F0D,0x1F0E,0x1F0F,0,0,0,0,0,0,0,0, + 0x1F18,0x1F19,0x1F1A,0x1F1B,0x1F1C,0x1F1D,0,0,0,0,0,0,0,0,0,0, +0x1F28,0x1F29,0x1F2A,0x1F2B,0x1F2C,0x1F2D,0x1F2E,0x1F2F,0,0,0,0,0,0,0,0, + 0x1F38,0x1F39,0x1F3A,0x1F3B,0x1F3C,0x1F3D,0x1F3E,0x1F3F,0,0,0,0,0,0,0,0, + 0x1F48,0x1F49,0x1F4A,0x1F4B,0x1F4C,0x1F4D,0,0,0,0,0,0,0,0,0,0, +0,0x1F59,0,0x1F5B,0,0x1F5D,0,0x1F5F,0,0,0,0,0,0,0,0, + 0x1F68,0x1F69,0x1F6A,0x1F6B,0x1F6C,0x1F6D,0x1F6E,0x1F6F,0,0,0,0,0,0,0,0, + 0x1FBA,0x1FBB,0x1FC8,0x1FC9,0x1FCA,0x1FCB,0x1FDA,0x1FDB,0x1FF8,0x1FF9,0x1FEA,0x1FEB,0x1FFA,0x1FFB,0,0, +0x1F88,0x1F89,0x1F8A,0x1F8B,0x1F8C,0x1F8D,0x1F8E,0x1F8F,0,0,0,0,0,0,0,0, + 0x1F98,0x1F99,0x1F9A,0x1F9B,0x1F9C,0x1F9D,0x1F9E,0x1F9F,0,0,0,0,0,0,0,0, + 0x1FA8,0x1FA9,0x1FAA,0x1FAB,0x1FAC,0x1FAD,0x1FAE,0x1FAF,0,0,0,0,0,0,0,0, + 0x1FB8,0x1FB9,0,0x1FBC,0,0,0,0,0,0,0,0,0,0,0x399,0, + 0,0,0,0x1FCC,0,0,0,0,0,0,0,0,0,0,0,0, + 0x1FD8,0x1FD9,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0x1FE8,0x1FE9,0,0,0,0x1FEC,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0x1FFC,0,0,0,0,0,0,0,0,0,0,0,0}; +static const guint16 simple_upper_case_mapping_lowarea_table3 [] = { + /* ==== 2100-21C0 ==== */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x2132,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,0x2166,0x2167,0x2168,0x2169,0x216A,0x216B,0x216C,0x216D,0x216E,0x216F, + 0,0,0,0,0x2183,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0}; +static const guint16 simple_upper_case_mapping_lowarea_table4 [] = { + /* ==== 2480-2500 ==== */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0x24B6,0x24B7,0x24B8,0x24B9,0x24BA,0x24BB,0x24BC,0x24BD,0x24BE,0x24BF,0x24C0,0x24C1,0x24C2,0x24C3,0x24C4,0x24C5, + 0x24C6,0x24C7,0x24C8,0x24C9,0x24CA,0x24CB,0x24CC,0x24CD,0x24CE,0x24CF,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0}; +static const guint16 simple_upper_case_mapping_lowarea_table5 [] = { + /* ==== 2C00-2D80 ==== */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x2C00,0x2C01,0x2C02,0x2C03,0x2C04,0x2C05,0x2C06,0x2C07,0x2C08,0x2C09,0x2C0A,0x2C0B,0x2C0C,0x2C0D,0x2C0E,0x2C0F, + 0x2C10,0x2C11,0x2C12,0x2C13,0x2C14,0x2C15,0x2C16,0x2C17,0x2C18,0x2C19,0x2C1A,0x2C1B,0x2C1C,0x2C1D,0x2C1E,0x2C1F, + 0x2C20,0x2C21,0x2C22,0x2C23,0x2C24,0x2C25,0x2C26,0x2C27,0x2C28,0x2C29,0x2C2A,0x2C2B,0x2C2C,0x2C2D,0x2C2E,0, +0,0x2C60,0,0,0,0x23A,0x23E,0,0x2C67,0,0x2C69,0,0x2C6B,0,0,0, + 0,0,0,0x2C72,0,0,0x2C75,0,0,0,0,0,0,0,0,0, +0,0x2C80,0,0x2C82,0,0x2C84,0,0x2C86,0,0x2C88,0,0x2C8A,0,0x2C8C,0,0x2C8E, + 0,0x2C90,0,0x2C92,0,0x2C94,0,0x2C96,0,0x2C98,0,0x2C9A,0,0x2C9C,0,0x2C9E, + 0,0x2CA0,0,0x2CA2,0,0x2CA4,0,0x2CA6,0,0x2CA8,0,0x2CAA,0,0x2CAC,0,0x2CAE, + 0,0x2CB0,0,0x2CB2,0,0x2CB4,0,0x2CB6,0,0x2CB8,0,0x2CBA,0,0x2CBC,0,0x2CBE, + 0,0x2CC0,0,0x2CC2,0,0x2CC4,0,0x2CC6,0,0x2CC8,0,0x2CCA,0,0x2CCC,0,0x2CCE, + 0,0x2CD0,0,0x2CD2,0,0x2CD4,0,0x2CD6,0,0x2CD8,0,0x2CDA,0,0x2CDC,0,0x2CDE, + 0,0x2CE0,0,0x2CE2,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0x10A0,0x10A1,0x10A2,0x10A3,0x10A4,0x10A5,0x10A6,0x10A7,0x10A8,0x10A9,0x10AA,0x10AB,0x10AC,0x10AD,0x10AE,0x10AF, + 0x10B0,0x10B1,0x10B2,0x10B3,0x10B4,0x10B5,0x10B6,0x10B7,0x10B8,0x10B9,0x10BA,0x10BB,0x10BC,0x10BD,0x10BE,0x10BF, + 0x10C0,0x10C1,0x10C2,0x10C3,0x10C4,0x10C5,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0}; +static const guint16 simple_upper_case_mapping_lowarea_table6 [] = { + /* ==== A640-A7C0 ==== */ + 0,0xA640,0,0xA642,0,0xA644,0,0xA646,0,0xA648,0,0xA64A,0,0xA64C,0,0xA64E, + 0,0xA650,0,0xA652,0,0xA654,0,0xA656,0,0xA658,0,0xA65A,0,0xA65C,0,0xA65E, + 0,0,0,0xA662,0,0xA664,0,0xA666,0,0xA668,0,0xA66A,0,0xA66C,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0xA680,0,0xA682,0,0xA684,0,0xA686,0,0xA688,0,0xA68A,0,0xA68C,0,0xA68E, + 0,0xA690,0,0xA692,0,0xA694,0,0xA696,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0xA722,0,0xA724,0,0xA726,0,0xA728,0,0xA72A,0,0xA72C,0,0xA72E, + 0,0,0,0xA732,0,0xA734,0,0xA736,0,0xA738,0,0xA73A,0,0xA73C,0,0xA73E, + 0,0xA740,0,0xA742,0,0xA744,0,0xA746,0,0xA748,0,0xA74A,0,0xA74C,0,0xA74E, + 0,0xA750,0,0xA752,0,0xA754,0,0xA756,0,0xA758,0,0xA75A,0,0xA75C,0,0xA75E, + 0,0xA760,0,0xA762,0,0xA764,0,0xA766,0,0xA768,0,0xA76A,0,0xA76C,0,0xA76E, + 0,0,0,0,0,0,0,0,0,0,0xA779,0,0xA77B,0,0,0xA77E, + 0,0xA780,0,0xA782,0,0xA784,0,0xA786,0,0,0,0,0xA78B,0}; +static const guint16 simple_upper_case_mapping_lowarea_table7 [] = { + /* ==== FF20-FF80 ==== */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0xFF21,0xFF22,0xFF23,0xFF24,0xFF25,0xFF26,0xFF27,0xFF28,0xFF29,0xFF2A,0xFF2B,0xFF2C,0xFF2D,0xFF2E,0xFF2F, + 0xFF30,0xFF31,0xFF32,0xFF33,0xFF34,0xFF35,0xFF36,0xFF37,0xFF38,0xFF39,0xFF3A,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0}; +static const guint16 *simple_upper_case_mapping_lowarea [] = { + simple_upper_case_mapping_lowarea_table0, + simple_upper_case_mapping_lowarea_table1, + simple_upper_case_mapping_lowarea_table2, + simple_upper_case_mapping_lowarea_table3, + simple_upper_case_mapping_lowarea_table4, + simple_upper_case_mapping_lowarea_table5, + simple_upper_case_mapping_lowarea_table6, + simple_upper_case_mapping_lowarea_table7}; +static const int simple_upper_case_mapping_lowarea_table_count = 8; + +static const guint32 simple_upper_case_mapping_higharea_table0 [] = { + /* ==== 10400-10480 ==== */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0x10400,0x10401,0x10402,0x10403,0x10404,0x10405,0x10406,0x10407, + 0x10408,0x10409,0x1040A,0x1040B,0x1040C,0x1040D,0x1040E,0x1040F,0x10410,0x10411,0x10412,0x10413,0x10414,0x10415,0x10416,0x10417, + 0x10418,0x10419,0x1041A,0x1041B,0x1041C,0x1041D,0x1041E,0x1041F,0x10420,0x10421,0x10422,0x10423,0x10424,0x10425,0x10426,0x10427, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0}; +static const guint32 *simple_upper_case_mapping_higharea [] = { + simple_upper_case_mapping_higharea_table0}; + +static const guint16 simple_lower_case_mapping_lowarea_table0 [] = { + /* ==== 40-600 ==== */ + 0,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, + 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, + 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0x101,0,0x103,0,0x105,0,0x107,0,0x109,0,0x10B,0,0x10D,0,0x10F,0, + 0x111,0,0x113,0,0x115,0,0x117,0,0x119,0,0x11B,0,0x11D,0,0x11F,0, + 0x121,0,0x123,0,0x125,0,0x127,0,0x129,0,0x12B,0,0x12D,0,0x12F,0, + 0x69,0,0x133,0,0x135,0,0x137,0,0,0x13A,0,0x13C,0,0x13E,0,0x140, + 0,0x142,0,0x144,0,0x146,0,0x148,0,0,0x14B,0,0x14D,0,0x14F,0, + 0x151,0,0x153,0,0x155,0,0x157,0,0x159,0,0x15B,0,0x15D,0,0x15F,0, + 0x161,0,0x163,0,0x165,0,0x167,0,0x169,0,0x16B,0,0x16D,0,0x16F,0, + 0x171,0,0x173,0,0x175,0,0x177,0,0xFF,0x17A,0,0x17C,0,0x17E,0,0, + 0,0x253,0x183,0,0x185,0,0x254,0x188,0,0x256,0x257,0x18C,0,0,0x1DD,0x259, + 0x25B,0x192,0,0x260,0x263,0,0x269,0x268,0x199,0,0,0,0x26F,0x272,0,0x275, + 0x1A1,0,0x1A3,0,0x1A5,0,0x280,0x1A8,0,0x283,0,0,0x1AD,0,0x288,0x1B0, + 0,0x28A,0x28B,0x1B4,0,0x1B6,0,0x292,0x1B9,0,0,0,0x1BD,0,0,0, + 0,0,0,0,0x1C6,0x1C6,0,0x1C9,0x1C9,0,0x1CC,0x1CC,0,0x1CE,0,0x1D0, + 0,0x1D2,0,0x1D4,0,0x1D6,0,0x1D8,0,0x1DA,0,0x1DC,0,0,0x1DF,0, + 0x1E1,0,0x1E3,0,0x1E5,0,0x1E7,0,0x1E9,0,0x1EB,0,0x1ED,0,0x1EF,0, + 0,0x1F3,0x1F3,0,0x1F5,0,0x195,0x1BF,0x1F9,0,0x1FB,0,0x1FD,0,0x1FF,0, + 0x201,0,0x203,0,0x205,0,0x207,0,0x209,0,0x20B,0,0x20D,0,0x20F,0, + 0x211,0,0x213,0,0x215,0,0x217,0,0x219,0,0x21B,0,0x21D,0,0x21F,0, + 0x19E,0,0x223,0,0x225,0,0x227,0,0x229,0,0x22B,0,0x22D,0,0x22F,0, + 0x231,0,0x233,0,0,0,0,0,0,0,0x2C65,0x23C,0,0x19A,0x2C66,0, + 0,0x242,0,0x180,0x289,0x28C,0x247,0,0x249,0,0x24B,0,0x24D,0,0x24F,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0x371,0,0x373,0,0,0,0x377,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0x3AC,0,0x3AD,0x3AE,0x3AF,0,0x3CC,0,0x3CD,0x3CE, + 0,0x3B1,0x3B2,0x3B3,0x3B4,0x3B5,0x3B6,0x3B7,0x3B8,0x3B9,0x3BA,0x3BB,0x3BC,0x3BD,0x3BE,0x3BF, + 0x3C0,0x3C1,0,0x3C3,0x3C4,0x3C5,0x3C6,0x3C7,0x3C8,0x3C9,0x3CA,0x3CB,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x3D7, + 0,0,0,0,0,0,0,0,0x3D9,0,0x3DB,0,0x3DD,0,0x3DF,0, + 0x3E1,0,0x3E3,0,0x3E5,0,0x3E7,0,0x3E9,0,0x3EB,0,0x3ED,0,0x3EF,0, + 0,0,0,0,0x3B8,0,0,0x3F8,0,0x3F2,0x3FB,0,0,0x37B,0x37C,0x37D, + 0x450,0x451,0x452,0x453,0x454,0x455,0x456,0x457,0x458,0x459,0x45A,0x45B,0x45C,0x45D,0x45E,0x45F, + 0x430,0x431,0x432,0x433,0x434,0x435,0x436,0x437,0x438,0x439,0x43A,0x43B,0x43C,0x43D,0x43E,0x43F, + 0x440,0x441,0x442,0x443,0x444,0x445,0x446,0x447,0x448,0x449,0x44A,0x44B,0x44C,0x44D,0x44E,0x44F, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0x461,0,0x463,0,0x465,0,0x467,0,0x469,0,0x46B,0,0x46D,0,0x46F,0, + 0x471,0,0x473,0,0x475,0,0x477,0,0x479,0,0x47B,0,0x47D,0,0x47F,0, + 0x481,0,0,0,0,0,0,0,0,0,0x48B,0,0x48D,0,0x48F,0, + 0x491,0,0x493,0,0x495,0,0x497,0,0x499,0,0x49B,0,0x49D,0,0x49F,0, + 0x4A1,0,0x4A3,0,0x4A5,0,0x4A7,0,0x4A9,0,0x4AB,0,0x4AD,0,0x4AF,0, + 0x4B1,0,0x4B3,0,0x4B5,0,0x4B7,0,0x4B9,0,0x4BB,0,0x4BD,0,0x4BF,0, + 0x4CF,0x4C2,0,0x4C4,0,0x4C6,0,0x4C8,0,0x4CA,0,0x4CC,0,0x4CE,0,0, + 0x4D1,0,0x4D3,0,0x4D5,0,0x4D7,0,0x4D9,0,0x4DB,0,0x4DD,0,0x4DF,0, + 0x4E1,0,0x4E3,0,0x4E5,0,0x4E7,0,0x4E9,0,0x4EB,0,0x4ED,0,0x4EF,0, + 0x4F1,0,0x4F3,0,0x4F5,0,0x4F7,0,0x4F9,0,0x4FB,0,0x4FD,0,0x4FF,0, + 0x501,0,0x503,0,0x505,0,0x507,0,0x509,0,0x50B,0,0x50D,0,0x50F,0, + 0x511,0,0x513,0,0x515,0,0x517,0,0x519,0,0x51B,0,0x51D,0,0x51F,0, + 0x521,0,0x523,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0x561,0x562,0x563,0x564,0x565,0x566,0x567,0x568,0x569,0x56A,0x56B,0x56C,0x56D,0x56E,0x56F, + 0x570,0x571,0x572,0x573,0x574,0x575,0x576,0x577,0x578,0x579,0x57A,0x57B,0x57C,0x57D,0x57E,0x57F, + 0x580,0x581,0x582,0x583,0x584,0x585,0x586,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0}; +static const guint16 simple_lower_case_mapping_lowarea_table1 [] = { + /* ==== 1000-10D0 ==== */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0x2D00,0x2D01,0x2D02,0x2D03,0x2D04,0x2D05,0x2D06,0x2D07,0x2D08,0x2D09,0x2D0A,0x2D0B,0x2D0C,0x2D0D,0x2D0E,0x2D0F, + 0x2D10,0x2D11,0x2D12,0x2D13,0x2D14,0x2D15,0x2D16,0x2D17,0x2D18,0x2D19,0x2D1A,0x2D1B,0x2D1C,0x2D1D,0x2D1E,0x2D1F, + 0x2D20,0x2D21,0x2D22,0x2D23,0x2D24,0x2D25,0}; +static const guint16 simple_lower_case_mapping_lowarea_table2 [] = { + /* ==== 1D00-2000 ==== */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0x1E01,0,0x1E03,0,0x1E05,0,0x1E07,0,0x1E09,0,0x1E0B,0,0x1E0D,0,0x1E0F,0, + 0x1E11,0,0x1E13,0,0x1E15,0,0x1E17,0,0x1E19,0,0x1E1B,0,0x1E1D,0,0x1E1F,0, + 0x1E21,0,0x1E23,0,0x1E25,0,0x1E27,0,0x1E29,0,0x1E2B,0,0x1E2D,0,0x1E2F,0, + 0x1E31,0,0x1E33,0,0x1E35,0,0x1E37,0,0x1E39,0,0x1E3B,0,0x1E3D,0,0x1E3F,0, + 0x1E41,0,0x1E43,0,0x1E45,0,0x1E47,0,0x1E49,0,0x1E4B,0,0x1E4D,0,0x1E4F,0, + 0x1E51,0,0x1E53,0,0x1E55,0,0x1E57,0,0x1E59,0,0x1E5B,0,0x1E5D,0,0x1E5F,0, + 0x1E61,0,0x1E63,0,0x1E65,0,0x1E67,0,0x1E69,0,0x1E6B,0,0x1E6D,0,0x1E6F,0, + 0x1E71,0,0x1E73,0,0x1E75,0,0x1E77,0,0x1E79,0,0x1E7B,0,0x1E7D,0,0x1E7F,0, + 0x1E81,0,0x1E83,0,0x1E85,0,0x1E87,0,0x1E89,0,0x1E8B,0,0x1E8D,0,0x1E8F,0, + 0x1E91,0,0x1E93,0,0x1E95,0,0,0,0,0,0,0,0,0,0xDF,0, + 0x1EA1,0,0x1EA3,0,0x1EA5,0,0x1EA7,0,0x1EA9,0,0x1EAB,0,0x1EAD,0,0x1EAF,0, + 0x1EB1,0,0x1EB3,0,0x1EB5,0,0x1EB7,0,0x1EB9,0,0x1EBB,0,0x1EBD,0,0x1EBF,0, + 0x1EC1,0,0x1EC3,0,0x1EC5,0,0x1EC7,0,0x1EC9,0,0x1ECB,0,0x1ECD,0,0x1ECF,0, + 0x1ED1,0,0x1ED3,0,0x1ED5,0,0x1ED7,0,0x1ED9,0,0x1EDB,0,0x1EDD,0,0x1EDF,0, + 0x1EE1,0,0x1EE3,0,0x1EE5,0,0x1EE7,0,0x1EE9,0,0x1EEB,0,0x1EED,0,0x1EEF,0, + 0x1EF1,0,0x1EF3,0,0x1EF5,0,0x1EF7,0,0x1EF9,0,0x1EFB,0,0x1EFD,0,0x1EFF,0, + 0,0,0,0,0,0,0,0,0x1F00,0x1F01,0x1F02,0x1F03,0x1F04,0x1F05,0x1F06,0x1F07, + 0,0,0,0,0,0,0,0,0x1F10,0x1F11,0x1F12,0x1F13,0x1F14,0x1F15,0,0, +0,0,0,0,0,0,0,0,0x1F20,0x1F21,0x1F22,0x1F23,0x1F24,0x1F25,0x1F26,0x1F27, + 0,0,0,0,0,0,0,0,0x1F30,0x1F31,0x1F32,0x1F33,0x1F34,0x1F35,0x1F36,0x1F37, + 0,0,0,0,0,0,0,0,0x1F40,0x1F41,0x1F42,0x1F43,0x1F44,0x1F45,0,0, +0,0,0,0,0,0,0,0,0,0x1F51,0,0x1F53,0,0x1F55,0,0x1F57, + 0,0,0,0,0,0,0,0,0x1F60,0x1F61,0x1F62,0x1F63,0x1F64,0x1F65,0x1F66,0x1F67, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x1F80,0x1F81,0x1F82,0x1F83,0x1F84,0x1F85,0x1F86,0x1F87, + 0,0,0,0,0,0,0,0,0x1F90,0x1F91,0x1F92,0x1F93,0x1F94,0x1F95,0x1F96,0x1F97, + 0,0,0,0,0,0,0,0,0x1FA0,0x1FA1,0x1FA2,0x1FA3,0x1FA4,0x1FA5,0x1FA6,0x1FA7, + 0,0,0,0,0,0,0,0,0x1FB0,0x1FB1,0x1F70,0x1F71,0x1FB3,0,0,0, + 0,0,0,0,0,0,0,0,0x1F72,0x1F73,0x1F74,0x1F75,0x1FC3,0,0,0, + 0,0,0,0,0,0,0,0,0x1FD0,0x1FD1,0x1F76,0x1F77,0,0,0,0, + 0,0,0,0,0,0,0,0,0x1FE0,0x1FE1,0x1F7A,0x1F7B,0x1FE5,0,0,0, + 0,0,0,0,0,0,0,0,0x1F78,0x1F79,0x1F7C,0x1F7D,0x1FF3,0,0,0}; +static const guint16 simple_lower_case_mapping_lowarea_table3 [] = { + /* ==== 2100-21C0 ==== */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0x3C9,0,0,0,0x6B,0xE5,0,0,0,0, + 0,0,0x214E,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0x2170,0x2171,0x2172,0x2173,0x2174,0x2175,0x2176,0x2177,0x2178,0x2179,0x217A,0x217B,0x217C,0x217D,0x217E,0x217F, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0x2184,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0}; +static const guint16 simple_lower_case_mapping_lowarea_table4 [] = { + /* ==== 2480-2500 ==== */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0x24D0,0x24D1,0x24D2,0x24D3,0x24D4,0x24D5,0x24D6,0x24D7,0x24D8,0x24D9, + 0x24DA,0x24DB,0x24DC,0x24DD,0x24DE,0x24DF,0x24E0,0x24E1,0x24E2,0x24E3,0x24E4,0x24E5,0x24E6,0x24E7,0x24E8,0x24E9, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0}; +static const guint16 simple_lower_case_mapping_lowarea_table5 [] = { + /* ==== 2C00-2D80 ==== */ + 0x2C30,0x2C31,0x2C32,0x2C33,0x2C34,0x2C35,0x2C36,0x2C37,0x2C38,0x2C39,0x2C3A,0x2C3B,0x2C3C,0x2C3D,0x2C3E,0x2C3F, + 0x2C40,0x2C41,0x2C42,0x2C43,0x2C44,0x2C45,0x2C46,0x2C47,0x2C48,0x2C49,0x2C4A,0x2C4B,0x2C4C,0x2C4D,0x2C4E,0x2C4F, + 0x2C50,0x2C51,0x2C52,0x2C53,0x2C54,0x2C55,0x2C56,0x2C57,0x2C58,0x2C59,0x2C5A,0x2C5B,0x2C5C,0x2C5D,0x2C5E,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x2C61,0,0x26B,0x1D7D,0x27D,0,0,0x2C68,0,0x2C6A,0,0x2C6C,0,0x251,0x271,0x250, + 0,0,0x2C73,0,0,0x2C76,0,0,0,0,0,0,0,0,0,0, +0x2C81,0,0x2C83,0,0x2C85,0,0x2C87,0,0x2C89,0,0x2C8B,0,0x2C8D,0,0x2C8F,0, + 0x2C91,0,0x2C93,0,0x2C95,0,0x2C97,0,0x2C99,0,0x2C9B,0,0x2C9D,0,0x2C9F,0, + 0x2CA1,0,0x2CA3,0,0x2CA5,0,0x2CA7,0,0x2CA9,0,0x2CAB,0,0x2CAD,0,0x2CAF,0, + 0x2CB1,0,0x2CB3,0,0x2CB5,0,0x2CB7,0,0x2CB9,0,0x2CBB,0,0x2CBD,0,0x2CBF,0, + 0x2CC1,0,0x2CC3,0,0x2CC5,0,0x2CC7,0,0x2CC9,0,0x2CCB,0,0x2CCD,0,0x2CCF,0, + 0x2CD1,0,0x2CD3,0,0x2CD5,0,0x2CD7,0,0x2CD9,0,0x2CDB,0,0x2CDD,0,0x2CDF,0, + 0x2CE1,0,0x2CE3,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0}; +static const guint16 simple_lower_case_mapping_lowarea_table6 [] = { + /* ==== A640-A7C0 ==== */ + 0xA641,0,0xA643,0,0xA645,0,0xA647,0,0xA649,0,0xA64B,0,0xA64D,0,0xA64F,0, + 0xA651,0,0xA653,0,0xA655,0,0xA657,0,0xA659,0,0xA65B,0,0xA65D,0,0xA65F,0, + 0,0,0xA663,0,0xA665,0,0xA667,0,0xA669,0,0xA66B,0,0xA66D,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0xA681,0,0xA683,0,0xA685,0,0xA687,0,0xA689,0,0xA68B,0,0xA68D,0,0xA68F,0, + 0xA691,0,0xA693,0,0xA695,0,0xA697,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0xA723,0,0xA725,0,0xA727,0,0xA729,0,0xA72B,0,0xA72D,0,0xA72F,0, + 0,0,0xA733,0,0xA735,0,0xA737,0,0xA739,0,0xA73B,0,0xA73D,0,0xA73F,0, + 0xA741,0,0xA743,0,0xA745,0,0xA747,0,0xA749,0,0xA74B,0,0xA74D,0,0xA74F,0, + 0xA751,0,0xA753,0,0xA755,0,0xA757,0,0xA759,0,0xA75B,0,0xA75D,0,0xA75F,0, + 0xA761,0,0xA763,0,0xA765,0,0xA767,0,0xA769,0,0xA76B,0,0xA76D,0,0xA76F,0, + 0,0,0,0,0,0,0,0,0,0xA77A,0,0xA77C,0,0x1D79,0xA77F,0, + 0xA781,0,0xA783,0,0xA785,0,0xA787,0,0,0,0,0xA78C,0,0}; +static const guint16 simple_lower_case_mapping_lowarea_table7 [] = { + /* ==== FF20-FF80 ==== */ + 0,0xFF41,0xFF42,0xFF43,0xFF44,0xFF45,0xFF46,0xFF47,0xFF48,0xFF49,0xFF4A,0xFF4B,0xFF4C,0xFF4D,0xFF4E,0xFF4F, + 0xFF50,0xFF51,0xFF52,0xFF53,0xFF54,0xFF55,0xFF56,0xFF57,0xFF58,0xFF59,0xFF5A,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0}; +static const guint16 *simple_lower_case_mapping_lowarea [] = { + simple_lower_case_mapping_lowarea_table0, + simple_lower_case_mapping_lowarea_table1, + simple_lower_case_mapping_lowarea_table2, + simple_lower_case_mapping_lowarea_table3, + simple_lower_case_mapping_lowarea_table4, + simple_lower_case_mapping_lowarea_table5, + simple_lower_case_mapping_lowarea_table6, + simple_lower_case_mapping_lowarea_table7}; +static const int simple_lower_case_mapping_lowarea_table_count = 8; + +static const guint32 simple_lower_case_mapping_higharea_table0 [] = { + /* ==== 10400-10480 ==== */ + 0x10428,0x10429,0x1042A,0x1042B,0x1042C,0x1042D,0x1042E,0x1042F,0x10430,0x10431,0x10432,0x10433,0x10434,0x10435,0x10436,0x10437, + 0x10438,0x10439,0x1043A,0x1043B,0x1043C,0x1043D,0x1043E,0x1043F,0x10440,0x10441,0x10442,0x10443,0x10444,0x10445,0x10446,0x10447, + 0x10448,0x10449,0x1044A,0x1044B,0x1044C,0x1044D,0x1044E,0x1044F,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0}; +static const guint32 *simple_lower_case_mapping_higharea [] = { + simple_lower_case_mapping_higharea_table0}; + + +static const SimpleTitlecaseMapping simple_titlecase_mapping [] = { + {0x0001C4, 0x000000, 0x0001C5}, + {0x0001C5, 0x0001C4, 0x0001C5}, + {0x0001C6, 0x0001C4, 0x0001C5}, + {0x0001C7, 0x000000, 0x0001C8}, + {0x0001C8, 0x0001C7, 0x0001C8}, + {0x0001C9, 0x0001C7, 0x0001C8}, + {0x0001CA, 0x000000, 0x0001CB}, + {0x0001CB, 0x0001CA, 0x0001CB}, + {0x0001CC, 0x0001CA, 0x0001CB}, + {0x0001F1, 0x000000, 0x0001F2}, + {0x0001F2, 0x0001F1, 0x0001F2}, + {0x0001F3, 0x0001F1, 0x0001F2} +}; +static const guint8 simple_titlecase_mapping_count = 12; + +#endif + diff --git a/mta-mono/vendor/eglib/vasprintf.h b/mta-mono/vendor/eglib/vasprintf.h new file mode 100644 index 0000000..3d29454 --- /dev/null +++ b/mta-mono/vendor/eglib/vasprintf.h @@ -0,0 +1,11 @@ +#ifndef __VASPRINTF_H +#define __VASPRINTF_H + +#include +#include + +#ifndef HAVE_VASPRINTF +int vasprintf(char **ret, const char *fmt, va_list ap); +#endif + +#endif /* __VASPRINTF_H */